@henryx/onedot-ui 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"onedot-ui.cjs","sources":["../src/components/OdButton.vue","../src/components/OdIcon.vue","../node_modules/.pnpm/@tanstack+vue-table@9.2.4_vue@3.5.42_typescript@5.9.3_/node_modules/@tanstack/vue-table/dist/merge-proxy.js","../node_modules/.pnpm/@tanstack+vue-table@9.2.4_vue@3.5.42_typescript@5.9.3_/node_modules/@tanstack/vue-table/dist/reactivity.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/cells/coreCellsFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/cells/coreCellsFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/headers/constructHeader.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-pinning/columnPinningFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-visibility/columnVisibilityFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/headers/buildHeaderGroups.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/columns/constructColumn.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-ordering/columnOrderingFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/columns/coreColumnsFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/columns/coreColumnsFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/headers/coreHeadersFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/headers/coreHeadersFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/rows/constructRow.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/cell-selection/cellSelectionFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/row-expanding/rowExpandingFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/row-pagination/rowPaginationFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/row-sorting/rowSortingFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/row-models/createCoreRowModel.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/row-models/coreRowModelsFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/row-models/coreRowModelsFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/cells/constructCell.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/rows/coreRowsFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/rows/coreRowsFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/table/coreTablesFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/table/coreTablesFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/coreFeatures.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/reactivity/coreReactivityFeature.utils.js","../node_modules/.pnpm/@tanstack+store@0.11.1/node_modules/@tanstack/store/dist/shallow.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/table/constructTable.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-sizing/columnSizingFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-resizing/columnResizingFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-resizing/columnResizingFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-sizing/columnSizingFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-visibility/columnVisibilityFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/row-selection/rowSelectionFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/row-selection/rowSelectionFeature.js","../node_modules/.pnpm/@tanstack+vue-table@9.2.4_vue@3.5.42_typescript@5.9.3_/node_modules/@tanstack/vue-table/dist/useTable.js","../vendor/tabler-icons/vue/esm/defaultAttributes.mjs","../vendor/tabler-icons/vue/esm/createVueComponent.mjs","../vendor/tabler-icons/vue/esm/icons/IconAlertCircle.mjs","../vendor/tabler-icons/vue/esm/icons/IconArrowsSort.mjs","../vendor/tabler-icons/vue/esm/icons/IconChevronLeft.mjs","../vendor/tabler-icons/vue/esm/icons/IconChevronRight.mjs","../vendor/tabler-icons/vue/esm/icons/IconFilter.mjs","../vendor/tabler-icons/vue/esm/icons/IconListCheck.mjs","../vendor/tabler-icons/vue/esm/icons/IconLoader.mjs","../vendor/tabler-icons/vue/esm/icons/IconRefresh.mjs","../vendor/tabler-icons/vue/esm/icons/IconSearch.mjs","../vendor/tabler-icons/vue/esm/icons/IconSortAscending.mjs","../vendor/tabler-icons/vue/esm/icons/IconSortDescending.mjs","../src/components/od-table-a11y.ts","../src/components/od-table-formatters.ts","../src/components/od-table-query.ts","../src/components/od-table-request.ts","../src/components/OdTable.types.ts","../src/components/OdTable.vue","../src/index.ts"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\ndefineOptions({ name: 'OdButton', inheritAttrs: false })\r\n\r\nexport type OdButtonVariant = 'primary' | 'default' | 'text'\r\nexport type OdSize = 'small' | 'default' | 'large'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n variant?: OdButtonVariant\r\n size?: OdSize\r\n danger?: boolean\r\n loading?: boolean\r\n disabled?: boolean\r\n nativeType?: 'button' | 'submit' | 'reset'\r\n }>(),\r\n {\r\n variant: 'default',\r\n size: 'default',\r\n danger: false,\r\n loading: false,\r\n disabled: false,\r\n nativeType: 'button',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\nconst classes = computed(() => [\r\n 'od-button',\r\n `od-button--${props.variant}`,\r\n `od-button--${props.size}`,\r\n {\r\n 'is-danger': props.danger,\r\n 'is-loading': props.loading,\r\n },\r\n])\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n if (props.disabled || props.loading) {\r\n event.preventDefault()\r\n return\r\n }\r\n emit('click', event)\r\n}\r\n</script>\r\n\r\n<template>\r\n <button\r\n v-bind=\"$attrs\"\r\n :class=\"classes\"\r\n :type=\"props.nativeType\"\r\n :disabled=\"props.disabled || props.loading\"\r\n :aria-disabled=\"props.disabled || props.loading || undefined\"\r\n :aria-busy=\"props.loading || undefined\"\r\n @click=\"handleClick\"\r\n >\r\n <span v-if=\"$slots.icon && !props.loading\" class=\"od-button__icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <span v-if=\"props.loading\" class=\"od-button__spinner\" aria-hidden=\"true\" />\r\n <span class=\"od-button__label\"><slot /></span>\r\n </button>\r\n</template>\r\n\r\n<style scoped>\r\n.od-button {\r\n position: relative;\r\n box-sizing: border-box;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: var(--od-space-2);\r\n min-width: 76px;\r\n height: 36px;\r\n padding: 0 15px;\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-control);\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-text-primary);\r\n font-size: var(--od-font-size-md);\r\n font-weight: 500;\r\n line-height: 1;\r\n letter-spacing: 0;\r\n white-space: nowrap;\r\n cursor: pointer;\r\n box-shadow: var(--od-shadow-control);\r\n transform: translateY(0) scale(1);\r\n transition: background-color var(--od-transition-fast), border-color var(--od-transition-fast),\r\n box-shadow var(--od-transition-fast), color var(--od-transition-fast),\r\n transform var(--od-transition-fast);\r\n}\r\n\r\n.od-button:hover:not(:disabled) {\r\n border-color: color-mix(in srgb, var(--od-color-text-tertiary) 55%, var(--od-color-border));\r\n background: var(--od-color-bg-secondary);\r\n color: var(--od-color-text-primary);\r\n box-shadow: var(--od-shadow-control-hover);\r\n transform: translateY(-1px);\r\n}\r\n\r\n.od-button:active:not(:disabled) {\r\n border-color: color-mix(in srgb, var(--od-color-text-tertiary) 70%, var(--od-color-border));\r\n background: var(--od-color-bg-tertiary);\r\n box-shadow: inset 0 1px 2px rgb(16 24 40 / 10%);\r\n transform: translateY(0) scale(0.985);\r\n}\r\n\r\n.od-button:disabled {\r\n background: var(--od-button-disabled-bg);\r\n border-color: var(--od-button-disabled-border);\r\n color: var(--od-button-disabled-fg);\r\n cursor: not-allowed;\r\n box-shadow: none;\r\n transform: none;\r\n}\r\n\r\n.od-button--primary {\r\n border-color: var(--od-button-primary-bg);\r\n background: var(--od-button-primary-bg);\r\n color: #fff;\r\n box-shadow: var(--od-shadow-primary);\r\n}\r\n\r\n.od-button--primary:hover:not(:disabled) {\r\n border-color: var(--od-button-primary-bg-hover);\r\n background: var(--od-button-primary-bg-hover);\r\n color: #fff;\r\n box-shadow: var(--od-shadow-primary-hover);\r\n}\r\n\r\n.od-button--primary:active:not(:disabled) {\r\n border-color: var(--od-button-primary-bg-active);\r\n background: var(--od-button-primary-bg-active);\r\n color: #fff;\r\n box-shadow: inset 0 2px 4px rgb(18 55 84 / 28%);\r\n}\r\n\r\n.od-button--text {\r\n min-width: auto;\r\n padding: 0 var(--od-space-3);\r\n border-color: transparent;\r\n background: transparent;\r\n color: var(--od-button-accent-fg);\r\n box-shadow: none;\r\n}\r\n\r\n.od-button--text:hover:not(:disabled) {\r\n border-color: transparent;\r\n background: color-mix(in srgb, var(--od-button-accent-fg) 9%, transparent);\r\n color: var(--od-button-accent-fg-hover);\r\n box-shadow: none;\r\n}\r\n\r\n.od-button--text:active:not(:disabled) {\r\n border-color: transparent;\r\n background: color-mix(in srgb, var(--od-button-accent-fg) 15%, transparent);\r\n color: var(--od-button-accent-fg-hover);\r\n box-shadow: none;\r\n}\r\n\r\n.od-button.is-danger:not(.od-button--primary) {\r\n color: var(--od-button-danger-bg);\r\n}\r\n\r\n.od-button.is-danger:not(.od-button--primary):hover:not(:disabled) {\r\n border-color: color-mix(in srgb, var(--od-button-danger-bg) 45%, var(--od-color-border));\r\n background: color-mix(in srgb, var(--od-button-danger-bg) 7%, transparent);\r\n color: var(--od-button-danger-bg-hover);\r\n}\r\n\r\n.od-button--primary.is-danger {\r\n border-color: var(--od-button-danger-bg);\r\n background: var(--od-button-danger-bg);\r\n box-shadow: var(--od-shadow-danger);\r\n}\r\n\r\n.od-button--primary.is-danger:hover:not(:disabled) {\r\n border-color: var(--od-button-danger-bg-hover);\r\n background: var(--od-button-danger-bg-hover);\r\n box-shadow: var(--od-shadow-danger-hover);\r\n}\r\n\r\n.od-button--primary.is-danger:active:not(:disabled) {\r\n border-color: var(--od-button-danger-bg-active);\r\n background: var(--od-button-danger-bg-active);\r\n box-shadow: inset 0 2px 4px rgb(84 22 30 / 28%);\r\n}\r\n\r\n.od-button--primary:disabled:not(.is-loading) {\r\n border-color: var(--od-button-disabled-border);\r\n background: var(--od-button-disabled-bg);\r\n color: var(--od-button-disabled-fg);\r\n box-shadow: none;\r\n}\r\n\r\n.od-button--primary.is-loading:disabled {\r\n border-color: var(--od-button-primary-bg);\r\n background: var(--od-button-primary-bg);\r\n color: #fff;\r\n box-shadow: var(--od-shadow-button-loading);\r\n}\r\n\r\n.od-button--primary.is-danger.is-loading:disabled {\r\n border-color: var(--od-button-danger-bg);\r\n background: var(--od-button-danger-bg);\r\n}\r\n\r\n.od-button--small {\r\n min-width: 64px;\r\n height: 30px;\r\n padding: 0 11px;\r\n gap: 6px;\r\n font-size: var(--od-font-size-sm);\r\n}\r\n\r\n.od-button--large {\r\n height: 44px;\r\n padding: 0 19px;\r\n gap: 10px;\r\n font-size: var(--od-font-size-lg);\r\n}\r\n\r\n.od-button__icon,\r\n.od-button__spinner {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n line-height: 0;\r\n}\r\n\r\n.od-button__spinner {\r\n width: 14px;\r\n height: 14px;\r\n border: 2px solid currentColor;\r\n border-right-color: transparent;\r\n border-radius: 50%;\r\n animation: od-button-spin 700ms linear infinite;\r\n}\r\n\r\n.od-button.is-loading {\r\n cursor: wait;\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n .od-button {\r\n transition: none;\r\n }\r\n\r\n .od-button__spinner {\r\n animation-duration: 1400ms;\r\n }\r\n}\r\n\r\n@keyframes od-button-spin {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport type { Component } from 'vue'\r\n\r\ndefineOptions({ name: 'OdIcon' })\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n icon: Component\r\n size?: string | number\r\n color?: string\r\n stroke?: string | number\r\n ariaLabel?: string\r\n }>(),\r\n {\r\n size: 20,\r\n stroke: 2,\r\n },\r\n)\r\n\r\nconst iconStyle = computed(() => ({\r\n width: typeof props.size === 'number' ? `${props.size}px` : props.size,\r\n height: typeof props.size === 'number' ? `${props.size}px` : props.size,\r\n color: props.color,\r\n}))\r\n</script>\r\n\r\n<template>\r\n <span\r\n class=\"od-icon\"\r\n :style=\"iconStyle\"\r\n :aria-hidden=\"props.ariaLabel ? undefined : true\"\r\n :aria-label=\"props.ariaLabel\"\r\n :role=\"props.ariaLabel ? 'img' : undefined\"\r\n >\r\n <component\r\n :is=\"props.icon\"\r\n :size=\"props.size\"\r\n :stroke=\"props.stroke\"\r\n :color=\"props.color\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n />\r\n </span>\r\n</template>\r\n","//#region src/merge-proxy.ts\nfunction trueFn() {\n\treturn true;\n}\nconst $PROXY = Symbol(\"merge-proxy\");\nconst $SOURCES = Symbol(\"merge-proxy-sources\");\nconst propTraps = {\n\tget(_, property, receiver) {\n\t\tif (property === $PROXY) return receiver;\n\t\tif (property === $SOURCES) return _.sources;\n\t\treturn _.get(property);\n\t},\n\thas(_, property) {\n\t\treturn _.has(property);\n\t},\n\tset: trueFn,\n\tdeleteProperty: trueFn,\n\tgetOwnPropertyDescriptor(_, property) {\n\t\treturn {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget() {\n\t\t\t\treturn _.get(property);\n\t\t\t},\n\t\t\tset: trueFn,\n\t\t\tdeleteProperty: trueFn\n\t\t};\n\t},\n\townKeys(_) {\n\t\treturn _.keys();\n\t}\n};\nfunction resolveSource(s) {\n\treturn s && typeof s === \"object\" && \"value\" in s ? s.value : s;\n}\nfunction mergeProxy(...sources) {\n\tconst flattenedSources = sources.flatMap((source) => {\n\t\tif (typeof source === \"object\" && source !== null && $SOURCES in source && Array.isArray(source[$SOURCES])) return source[$SOURCES];\n\t\treturn [source];\n\t});\n\treturn new Proxy({\n\t\tsources: flattenedSources,\n\t\tget(property) {\n\t\t\tfor (let i = flattenedSources.length - 1; i >= 0; i--) {\n\t\t\t\tconst v = resolveSource(flattenedSources[i])[property];\n\t\t\t\tif (v !== void 0) return v;\n\t\t\t}\n\t\t},\n\t\thas(property) {\n\t\t\tfor (let i = flattenedSources.length - 1; i >= 0; i--) if (property in resolveSource(flattenedSources[i])) return true;\n\t\t\treturn false;\n\t\t},\n\t\tkeys() {\n\t\t\tconst keys = [];\n\t\t\tfor (const source of flattenedSources) keys.push(...Object.keys(resolveSource(source)));\n\t\t\treturn [...Array.from(new Set(keys))];\n\t\t}\n\t}, propTraps);\n}\nfunction flatMerge(...sources) {\n\tconst result = {};\n\tfor (let source of sources) {\n\t\tsource = resolveSource(source);\n\t\tif (!source) continue;\n\t\tfor (const key of Reflect.ownKeys(source)) {\n\t\t\tconst value = source[key];\n\t\t\tif (value !== void 0) result[key] = value;\n\t\t}\n\t}\n\treturn result;\n}\n\n//#endregion\nexport { flatMerge, mergeProxy };","import { computed, shallowRef, watch } from \"vue\";\n\n//#region src/reactivity.ts\nfunction observerToCallback(observerOrNext) {\n\treturn typeof observerOrNext === \"function\" ? observerOrNext : (value) => observerOrNext.next?.(value);\n}\nfunction refToReadonlyAtom(source) {\n\treturn Object.assign(source, {\n\t\tget: () => source.value,\n\t\tsubscribe: ((observerOrNext) => {\n\t\t\treturn { unsubscribe: watch(source, observerToCallback(observerOrNext), { flush: \"sync\" }) };\n\t\t})\n\t});\n}\nfunction refToWritableAtom(source) {\n\treturn Object.assign(source, {\n\t\tset: (updater) => {\n\t\t\tsource.value = typeof updater === \"function\" ? updater(source.value) : updater;\n\t\t},\n\t\tget: () => source.value,\n\t\tsubscribe: ((observerOrNext) => {\n\t\t\treturn { unsubscribe: watch(source, observerToCallback(observerOrNext), { flush: \"sync\" }) };\n\t\t})\n\t});\n}\n/**\n* Creates the table-core reactivity bindings used by the Vue adapter.\n*\n* Table state atoms are backed by TanStack Store atoms. The options store stays\n* framework-native because row-model APIs read `table.options` directly during\n* render. Readonly table atoms bridge Store dependency tracking into Vue computed\n* refs.\n*/\nfunction vueReactivity() {\n\tconst subscriptions = /* @__PURE__ */ new Set();\n\treturn {\n\t\tcreateOptionsStore: true,\n\t\twrapExternalAtoms: true,\n\t\taddSubscription: (subscription) => {\n\t\t\tsubscriptions.add(subscription);\n\t\t},\n\t\tunmount: () => {\n\t\t\tsubscriptions.forEach((s) => s.unsubscribe());\n\t\t\tsubscriptions.clear();\n\t\t},\n\t\tschedule: (fn) => queueMicrotask(() => fn()),\n\t\tcreateReadonlyAtom: (fn, _options) => {\n\t\t\treturn refToReadonlyAtom(computed(() => fn()));\n\t\t},\n\t\tcreateWritableAtom: (value, _options) => {\n\t\t\treturn refToWritableAtom(shallowRef(value));\n\t\t},\n\t\tuntrack: (fn) => fn(),\n\t\tbatch: (fn) => fn()\n\t};\n}\n\n//#endregion\nexport { vueReactivity };","//#region src/utils.ts\n/**\n* Applies a TanStack updater to a value.\n*\n* If the updater is a function it is called with the previous value; otherwise the updater value is returned directly.\n*/\nfunction functionalUpdate(updater, input) {\n\treturn typeof updater === \"function\" ? updater(input) : updater;\n}\n/**\n* Clones table state values while preserving non-plain objects.\n*\n* Plain objects and arrays are copied recursively so state updates can avoid mutating existing references.\n*/\nfunction cloneState(value) {\n\tif (Array.isArray(value)) return value.map(cloneState);\n\tif (value && typeof value === \"object\") {\n\t\tconst proto = Object.getPrototypeOf(value);\n\t\tif (proto !== Object.prototype && proto !== null) return value;\n\t\tconst copy = proto === null ? makeObjectMap() : {};\n\t\tconst keys = Object.keys(value);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key = keys[i];\n\t\t\tObject.defineProperty(copy, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: cloneState(value[key]),\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t\treturn copy;\n\t}\n\treturn value;\n}\n/**\n* Copies prototype-instance own properties without carrying over lazy memo\n* closures or the per-row cell cache, both of which are bound to the source\n* instance (cached cells reference the source row).\n*/\nfunction copyInstancePropertiesWithoutMemos(target, source) {\n\tconst keys = Object.keys(source);\n\tconst targetRecord = target;\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key = keys[i];\n\t\tif (!key.startsWith(\"_memo_\") && key !== \"_cellsCache\") targetRecord[key] = source[key];\n\t}\n\treturn target;\n}\n/**\n* Creates an object intended only for string-keyed dictionary lookups.\n*\n* The null prototype keeps user-controlled ids such as `__proto__` and\n* `hasOwnProperty` as plain data keys.\n*/\nfunction makeObjectMap() {\n\treturn Object.create(null);\n}\n/**\n* Checks whether an object owns a key, including null-prototype dictionaries.\n*/\nfunction hasOwn(obj, key) {\n\treturn Object.prototype.hasOwnProperty.call(obj, key);\n}\n/**\n* Creates a table state updater for a single state slice.\n*\n* The updater writes through the table base atom for the slice and supports both value and functional updater forms.\n*/\nfunction makeStateUpdater(key, instance) {\n\treturn (updater) => {\n\t\t(instance.options.atoms?.[key] ?? instance.baseAtoms[key]).set((old) => functionalUpdate(updater, old));\n\t};\n}\n/**\n* Checks whether a value is an array or a plain (or null-prototype) object.\n* Class instances, dates, and other exotic values compare by reference only,\n* mirroring the `cloneState` plain-object policy.\n*/\nfunction isPlainContainer(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (Array.isArray(value)) return true;\n\tconst proto = Object.getPrototypeOf(value);\n\treturn proto === Object.prototype || proto === null;\n}\n/**\n* Returns every enumerable own key, including symbols and non-index array\n* properties. Keeping key presence explicit distinguishes sparse array holes\n* from entries whose value is `undefined`.\n*/\nfunction getEnumerableOwnKeys(value) {\n\treturn Reflect.ownKeys(value).filter((key) => Object.prototype.propertyIsEnumerable.call(value, key));\n}\nconst MAX_STATE_COMPARE_DEPTH = 3;\n/**\n* Structurally compares two state slice values as deeply as stock feature\n* state can nest and no deeper.\n*\n* Three container levels cover flat maps and arrays, arrays of state objects,\n* array-valued filter values, and `columnResizing.columnSizingStart` tuples.\n* Deeper containers and non-plain values compare by reference. A `false`\n* result is always safe: the state update simply proceeds.\n*/\nfunction stateSlicesEqual(a, b) {\n\treturn stateSlicesEqualAtDepth(a, b, MAX_STATE_COMPARE_DEPTH);\n}\nfunction stateSlicesEqualAtDepth(a, b, depth) {\n\tif (Object.is(a, b)) return true;\n\tif (depth <= 0 || !isPlainContainer(a) || !isPlainContainer(b)) return false;\n\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\tif (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n\t}\n\tconst keysA = getEnumerableOwnKeys(a);\n\tconst keysB = getEnumerableOwnKeys(b);\n\tif (keysA.length !== keysB.length) return false;\n\tconst recordA = a;\n\tconst recordB = b;\n\tfor (let i = 0; i < keysA.length; i++) {\n\t\tconst key = keysA[i];\n\t\tif (!Object.prototype.propertyIsEnumerable.call(b, key)) return false;\n\t\tif (!stateSlicesEqualAtDepth(recordA[key], recordB[key], depth - 1)) return false;\n\t}\n\treturn true;\n}\n/**\n* Routes a state slice update through the slice's `on<State>Change` handler,\n* preserving the owner's current reference for structural no-ops.\n*\n* Equality is evaluated inside the updater received by the state owner, never\n* against the table's potentially stale controlled snapshot. This keeps\n* same-tick updates composable in queued host containers such as React state,\n* evaluates the original updater only when the owner applies it, and lets atom\n* owners suppress notifications by returning their existing reference.\n*\n* A user-provided change handler is still invoked for a no-op because only that\n* handler's state container can know its latest queued value. The guarded\n* updater returns that container's previous reference, preventing a state write\n* or render in state containers with identity bailout semantics.\n*\n* Hot-path slices that skip guarding entirely (selection maps that scale with\n* row count, pointer-frequency resize state) call their change handler\n* directly instead of routing through this util. Custom feature slices with a\n* cheaper or semantic-aware comparison can pass `isEqual` to override the\n* structural default.\n*/\nfunction setStateSlice(instance, key, updater, isEqual = stateSlicesEqual) {\n\tconst onChangeKey = `on${key.charAt(0).toUpperCase()}${key.slice(1)}Change`;\n\tconst onChange = instance.options[onChangeKey];\n\tif (!onChange) return;\n\tonChange((current) => {\n\t\tconst next = functionalUpdate(updater, current);\n\t\treturn isEqual(current, next) ? current : next;\n\t});\n}\n/**\n* Returns whether a value is a function.\n*/\nfunction isFunction(d) {\n\treturn d instanceof Function;\n}\n/**\n* Flattens a tree of nodes by recursively reading child nodes.\n*\n* The original nodes are preserved in depth-first order.\n*/\nfunction flattenBy(arr, getChildren) {\n\tconst flat = [];\n\tconst recurse = (subArr) => {\n\t\tsubArr.forEach((item) => {\n\t\t\tflat.push(item);\n\t\t\tconst children = getChildren(item);\n\t\t\tif (children.length) recurse(children);\n\t\t});\n\t};\n\trecurse(arr);\n\treturn flat;\n}\n/**\n* Creates a dependency-tracked memoized function for table internals.\n*\n* The memo recomputes only when its dependency tuple changes and can emit debug timing information.\n*/\nconst memo = ({ fn, memoDeps, onAfterCompare, onAfterUpdate, onBeforeCompare, onBeforeUpdate }) => {\n\tlet deps = [];\n\tlet result;\n\tconst memoizedFn = (depArgs) => {\n\t\tonBeforeCompare?.();\n\t\tconst newDeps = memoDeps?.(depArgs);\n\t\tlet depsChanged = !newDeps || newDeps.length !== deps?.length;\n\t\tif (!depsChanged && newDeps) {\n\t\t\tfor (let i = 0; i < newDeps.length; i++) if (newDeps[i] !== deps[i]) {\n\t\t\t\tdepsChanged = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tonAfterCompare?.(depsChanged);\n\t\tif (!depsChanged) return result;\n\t\tdeps = newDeps;\n\t\tonBeforeUpdate?.();\n\t\tresult = fn(...newDeps ?? []);\n\t\tonAfterUpdate?.(result);\n\t\treturn result;\n\t};\n\treturn memoizedFn;\n};\n/**\n* Wraps a callback so that its first invocation is skipped.\n*\n* Row-model `onAfterUpdate` hooks schedule auto-resets when their inputs\n* change. The initial computation of a row model is not a change, so state\n* resets must not fire for it — otherwise merely reading a row model on mount\n* would wipe initial or controlled state.\n*/\nfunction skipFirstRun(fn) {\n\tlet hasRun = false;\n\treturn () => {\n\t\tif (!hasRun) {\n\t\t\thasRun = true;\n\t\t\treturn;\n\t\t}\n\t\tfn();\n\t};\n}\nconst pad = (str, num) => {\n\tstr = String(str);\n\twhile (str.length < num) str = \" \" + str;\n\treturn str;\n};\n/**\n* Creates a table-aware memoized function.\n*\n* This wraps `memo` with table debug options and feature metadata so row models and derived APIs can share consistent diagnostics.\n*/\nfunction tableMemo({ feature, fnName, objectId, onAfterUpdate, table, ...memoOptions }) {\n\tlet startCalcTime;\n\tlet endCalcTime;\n\tlet runCount = 0;\n\tlet debug;\n\tif (process.env.NODE_ENV === \"development\") {\n\t\tconst { debugAll } = table.options;\n\t\tconst { parentName } = getFunctionNameInfo(fnName, \".\");\n\t\tconst debugByParent = table.options[`debug${(parentName != \"table\" ? parentName + \"s\" : parentName).replace(parentName, parentName.charAt(0).toUpperCase() + parentName.slice(1))}`];\n\t\tconst debugByFeature = feature ? table.options[`debug${feature.charAt(0).toUpperCase() + feature.slice(1)}`] : false;\n\t\tdebug = debugAll || debugByParent || debugByFeature;\n\t}\n\tfunction logTime(time, depsChanged) {\n\t\tconst runType = runCount === 0 ? \"(1st run)\" : depsChanged ? \"(rerun #\" + runCount + \")\" : \"(cache)\";\n\t\trunCount++;\n\t\tconsole.groupCollapsed(`%c⏱ ${pad(`${time.toFixed(1)} ms`, 12)} %c${runType}%c ${fnName}%c ${objectId ? `(${fnName.split(\".\")[0]}Id: ${objectId})` : \"\"}`, `font-size: .6rem; font-weight: bold; ${depsChanged ? `color: hsl(\n ${Math.max(0, Math.min(120 - Math.log10(time) * 60, 120))}deg 100% 31%);` : \"\"} `, `color: ${runCount < 2 ? \"#FF00FF\" : \"#FF1493\"}`, \"color: #666\", \"color: #87CEEB\");\n\t\tconsole.info({\n\t\t\tfeature,\n\t\t\tstate: table.store.state,\n\t\t\tdeps: memoOptions.memoDeps?.toString()\n\t\t});\n\t\tconsole.trace();\n\t\tconsole.groupEnd();\n\t}\n\tconst onAfterUpdateHandler = () => {\n\t\tif (!onAfterUpdate) return;\n\t\tconst { schedule, untrack } = table._reactivity;\n\t\tschedule(() => untrack(() => onAfterUpdate()));\n\t};\n\tconst debugOptions = process.env.NODE_ENV === \"development\" ? {\n\t\tonBeforeCompare: () => {},\n\t\tonAfterCompare: (depsChanged) => {},\n\t\tonBeforeUpdate: () => {\n\t\t\tif (debug) startCalcTime = performance.now();\n\t\t},\n\t\tonAfterUpdate: () => {\n\t\t\tif (debug) {\n\t\t\t\tendCalcTime = performance.now();\n\t\t\t\tlogTime(Math.round((endCalcTime - startCalcTime) * 100) / 100, true);\n\t\t\t}\n\t\t\tonAfterUpdateHandler();\n\t\t}\n\t} : { onAfterUpdate: () => {\n\t\tonAfterUpdateHandler();\n\t} };\n\treturn memo({\n\t\t...memoOptions,\n\t\t...debugOptions\n\t});\n}\n/**\n* Assumes that a function name is in the format of `parentName_fnKey` and returns the `fnKey` and `fnName` in the format of `parentName.fnKey`.\n*/\nfunction getFunctionNameInfo(staticFnName, splitBy = \"_\") {\n\tconst [parentName, fnKey] = staticFnName.split(splitBy);\n\treturn {\n\t\tfnKey,\n\t\tfnName: `${parentName}.${fnKey}`,\n\t\tparentName\n\t};\n}\n/**\n* Assigns Table API methods directly to the table instance.\n* Unlike row/cell/column/header, the table is a singleton so methods are assigned directly.\n*/\nfunction assignTableAPIs(feature, table, apis) {\n\tfor (const [staticFnName, { fn, memoDeps }] of Object.entries(apis)) {\n\t\tconst { fnKey, fnName } = getFunctionNameInfo(staticFnName);\n\t\ttable[fnKey] = memoDeps ? tableMemo({\n\t\t\tmemoDeps,\n\t\t\tfn,\n\t\t\tfnName,\n\t\t\ttable,\n\t\t\tfeature\n\t\t}) : fn;\n\t}\n}\n/**\n* Assigns API methods to a prototype object for memory-efficient method sharing.\n* All instances created with this prototype will share the same method references.\n*\n* For memoized methods, the memo state is lazily created and stored on each instance.\n* This provides the best of both worlds: shared method code + per-instance caching.\n*/\nfunction assignPrototypeAPIs(feature, prototype, table, apis) {\n\tfor (const [staticFnName, { fn, memoDeps }] of Object.entries(apis)) {\n\t\tconst { fnKey, fnName } = getFunctionNameInfo(staticFnName);\n\t\tif (memoDeps) {\n\t\t\tconst memoKey = `_memo_${fnKey}`;\n\t\t\tprototype[fnKey] = function(...args) {\n\t\t\t\tif (!this[memoKey]) {\n\t\t\t\t\tconst self = this;\n\t\t\t\t\tthis[memoKey] = tableMemo({\n\t\t\t\t\t\tmemoDeps: (depArgs) => memoDeps(self, depArgs),\n\t\t\t\t\t\tfn: (...deps) => fn(self, ...deps),\n\t\t\t\t\t\tfnName,\n\t\t\t\t\t\tobjectId: self.id,\n\t\t\t\t\t\ttable,\n\t\t\t\t\t\tfeature\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this[memoKey](...args);\n\t\t\t};\n\t\t} else prototype[fnKey] = function(...args) {\n\t\t\treturn fn(this, ...args);\n\t\t};\n\t}\n}\n/**\n* Looks to run the memoized function with the builder pattern on the object if it exists, otherwise fall back to the static method passed in.\n*/\nfunction callMemoOrStaticFn(obj, fnKey, staticFn, ...args) {\n\treturn obj[fnKey]?.(...args) ?? staticFn(obj, ...args);\n}\n\n//#endregion\nexport { assignPrototypeAPIs, assignTableAPIs, callMemoOrStaticFn, cloneState, copyInstancePropertiesWithoutMemos, flattenBy, functionalUpdate, getFunctionNameInfo, hasOwn, isFunction, makeObjectMap, makeStateUpdater, memo, setStateSlice, skipFirstRun, stateSlicesEqual, tableMemo };","//#region src/core/cells/coreCellsFeature.utils.ts\n/**\n* Reads this cell's accessor value from its owning row and column.\n*\n* This is the standalone implementation behind `cell.getValue()`, useful when\n* importing static APIs instead of calling methods from the cell prototype.\n*\n* @example\n* ```ts\n* const value = cell_getValue(cell)\n* ```\n*/\nfunction cell_getValue(cell) {\n\treturn cell.row.getValue(cell.column.id);\n}\n/**\n* Reads the value that should be rendered for this cell.\n*\n* Nullish accessor values are replaced with `table.options.renderFallbackValue`,\n* matching the behavior of `cell.renderValue()`.\n*\n* @example\n* ```ts\n* const rendered = cell_renderValue(cell)\n* ```\n*/\nfunction cell_renderValue(cell) {\n\treturn cell.getValue() ?? cell.table.options.renderFallbackValue;\n}\n/**\n* Builds the render context passed to a column's `cell` template.\n*\n* The returned object includes stable references to the table, row, column, and\n* cell, plus bound `getValue` and `renderValue` helpers for render functions.\n*\n* @example\n* ```ts\n* const context = cell_getContext(cell)\n* ```\n*/\nfunction cell_getContext(cell) {\n\treturn {\n\t\ttable: cell.table,\n\t\tcolumn: cell.column,\n\t\trow: cell.row,\n\t\tcell,\n\t\tgetValue: () => cell.getValue(),\n\t\trenderValue: () => cell.renderValue()\n\t};\n}\n\n//#endregion\nexport { cell_getContext, cell_getValue, cell_renderValue };","import { assignPrototypeAPIs } from \"../../utils.js\";\nimport { cell_getContext, cell_getValue, cell_renderValue } from \"./coreCellsFeature.utils.js\";\n\n//#region src/core/cells/coreCellsFeature.ts\n/**\n* Core feature that adds cell value, render, and context APIs.\n*/\nconst coreCellsFeature = { assignCellPrototype: (prototype, table) => {\n\tassignPrototypeAPIs(\"coreCellsFeature\", prototype, table, {\n\t\tcell_getValue: { fn: (cell) => cell_getValue(cell) },\n\t\tcell_renderValue: { fn: (cell) => cell_renderValue(cell) },\n\t\tcell_getContext: {\n\t\t\tfn: (cell) => cell_getContext(cell),\n\t\t\tmemoDeps: (cell) => [cell]\n\t\t}\n\t});\n} };\n\n//#endregion\nexport { coreCellsFeature };","//#region src/core/headers/constructHeader.ts\n/**\n* Creates or retrieves the header prototype for a table.\n* The prototype is cached on the table and shared by all header instances.\n*/\nfunction getHeaderPrototype(table) {\n\tif (!table._headerPrototype) {\n\t\ttable._headerPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignHeaderPrototype?.(table._headerPrototype, table);\n\t}\n\treturn table._headerPrototype;\n}\n/**\n* Constructs a header instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructHeader(table, column, options) {\n\tconst headerPrototype = getHeaderPrototype(table);\n\tconst header = Object.create(headerPrototype);\n\theader.colSpan = 0;\n\theader.column = column;\n\theader.depth = options.depth;\n\theader.headerGroup = null;\n\theader.id = options.id ?? column.id;\n\theader.index = options.index;\n\theader.isPlaceholder = !!options.isPlaceholder;\n\theader.placeholderId = options.placeholderId;\n\theader.rowSpan = 0;\n\theader.subHeaders = [];\n\tconst initFns = table._headerInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](header);\n\treturn header;\n}\n\n//#endregion\nexport { constructHeader };","import { callMemoOrStaticFn, cloneState, setStateSlice } from \"../../utils.js\";\nimport { column_getIsVisible, row_getVisibleCells, row_getVisibleCellsByColumnId, table_getVisibleLeafColumns } from \"../column-visibility/columnVisibilityFeature.utils.js\";\nimport { buildHeaderGroups } from \"../../core/headers/buildHeaderGroups.js\";\n\n//#region src/features/column-pinning/columnPinningFeature.utils.ts\n/**\n* Creates the default column pinning state.\n*\n* Both pinning regions start empty. Reset APIs use this value when\n* `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const pinning = getDefaultColumnPinningState()\n* ```\n*/\nfunction getDefaultColumnPinningState() {\n\treturn {\n\t\tstart: [],\n\t\tend: []\n\t};\n}\n/**\n* Moves this column's leaf column ids into a pinning region.\n*\n* Pinning a group column pins all of its leaves. The leaf ids are first removed\n* from both regions, then appended to the requested `'start'` or `'end'`\n* region. Passing `false` unpins them back to the center.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* column_pin(column, 'start')\n* ```\n*/\nfunction column_pin(column, position) {\n\tconst leafColumns = column.getLeafColumns();\n\tconst columnIds = [];\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst id = leafColumns[i].id;\n\t\tif (id) columnIds.push(id);\n\t}\n\ttable_setColumnPinning(column.table, (old) => {\n\t\tif (position === \"end\") return {\n\t\t\tstart: old.start.filter((d) => !columnIds.includes(d)),\n\t\t\tend: [...old.end.filter((d) => !columnIds.includes(d)), ...columnIds]\n\t\t};\n\t\tif (position === \"start\") return {\n\t\t\tstart: [...old.start.filter((d) => !columnIds.includes(d)), ...columnIds],\n\t\t\tend: old.end.filter((d) => !columnIds.includes(d))\n\t\t};\n\t\treturn {\n\t\t\tstart: old.start.filter((d) => !columnIds.includes(d)),\n\t\t\tend: old.end.filter((d) => !columnIds.includes(d))\n\t\t};\n\t});\n}\n/**\n* Checks whether this column or any of its leaf columns can be pinned.\n*\n* Column-level `enablePinning` and table `enableColumnPinning` both default to\n* `true`; at least one leaf column must allow pinning.\n*\n* @example\n* ```ts\n* const canPin = column_getCanPin(column)\n* ```\n*/\nfunction column_getCanPin(column) {\n\treturn column.getLeafColumns().some((leafColumn) => (leafColumn.columnDef.enablePinning ?? true) && (column.table.options.enableColumnPinning ?? true));\n}\n/**\n* Reads this column's current pinning region.\n*\n* Group columns report `'start'` or `'end'` when any leaf column is pinned in\n* that region. Unpinned columns return `false`.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* const position = column_getIsPinned(column)\n* ```\n*/\nfunction column_getIsPinned(column) {\n\tconst leafColumns = column.getLeafColumns();\n\tconst { start, end } = column.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tfor (let i = 0; i < leafColumns.length; i++) if (start.includes(leafColumns[i].id)) return \"start\";\n\tfor (let i = 0; i < leafColumns.length; i++) if (end.includes(leafColumns[i].id)) return \"end\";\n\treturn false;\n}\n/**\n* Finds this column's index within its pinned region.\n*\n* Unpinned columns return `0`; pinned columns return their position in\n* `state.columnPinning.start` or `state.columnPinning.end`.\n*\n* @example\n* ```ts\n* const index = column_getPinnedIndex(column)\n* ```\n*/\nfunction column_getPinnedIndex(column) {\n\tconst position = column_getIsPinned(column);\n\treturn position ? column.table.atoms.columnPinning?.get()?.[position].indexOf(column.id) ?? -1 : 0;\n}\n/**\n* Collects visible cells whose columns are not pinned start or end.\n*\n* The result preserves the row's visible-cell order for center columns.\n*\n* @example\n* ```ts\n* const centerCells = row_getCenterVisibleCells(row)\n* ```\n*/\nfunction row_getCenterVisibleCells(row) {\n\tconst allCells = callMemoOrStaticFn(row, \"getVisibleCells\", row_getVisibleCells);\n\tconst { start, end } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length && !end.length) return allCells;\n\tconst startAndEnd = [...start, ...end];\n\treturn allCells.filter((d) => !startAndEnd.includes(d.column.id));\n}\n/**\n* Collects visible cells for columns pinned to the start region.\n*\n* Cells are returned in `state.columnPinning.start` order and are marked with\n* `cell.position = 'start'`.\n*\n* @example\n* ```ts\n* const startCells = row_getStartVisibleCells(row)\n* ```\n*/\nfunction row_getStartVisibleCells(row) {\n\tconst { start } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length) return [];\n\tconst allVisibleCells = callMemoOrStaticFn(row, \"getVisibleCellsByColumnId\", row_getVisibleCellsByColumnId);\n\tconst cells = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst cell = allVisibleCells[start[i]];\n\t\tif (cell) {\n\t\t\tcell.position = \"start\";\n\t\t\tcells.push(cell);\n\t\t}\n\t}\n\treturn cells;\n}\n/**\n* Collects visible cells for columns pinned to the end region.\n*\n* Cells are returned in `state.columnPinning.end` order and are marked with\n* `cell.position = 'end'`.\n*\n* @example\n* ```ts\n* const endCells = row_getEndVisibleCells(row)\n* ```\n*/\nfunction row_getEndVisibleCells(row) {\n\tconst { end } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!end.length) return [];\n\tconst allVisibleCells = callMemoOrStaticFn(row, \"getVisibleCellsByColumnId\", row_getVisibleCellsByColumnId);\n\tconst cells = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst cell = allVisibleCells[end[i]];\n\t\tif (cell) {\n\t\t\tcell.position = \"end\";\n\t\t\tcells.push(cell);\n\t\t}\n\t}\n\treturn cells;\n}\n/**\n* Routes a column pinning updater through the table's pinning change handler.\n*\n* The updater may be a next `{ start, end }` state or a function of the\n* previous state, matching the instance `table.setColumnPinning` behavior.\n*\n* @example\n* ```ts\n* table_setColumnPinning(table, (old) => ({ ...old, start: ['select'] }))\n* ```\n*/\nfunction table_setColumnPinning(table, updater) {\n\tsetStateSlice(table, \"columnPinning\", updater);\n}\n/**\n* Resets `columnPinning` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnPinning` when it\n* exists. Passing `true` ignores initial state and resets to empty start/end\n* arrays.\n*\n* @example\n* ```ts\n* table_resetColumnPinning(table)\n* table_resetColumnPinning(table, true)\n* ```\n*/\nfunction table_resetColumnPinning(table, defaultState) {\n\ttable_setColumnPinning(table, defaultState ? getDefaultColumnPinningState() : cloneState(table.initialState.columnPinning ?? getDefaultColumnPinningState()));\n}\n/**\n* Checks whether any columns are pinned.\n*\n* Omit `position` to check both sides, or pass `'start'`/`'end'` to inspect a\n* single pinning region.\n*\n* @example\n* ```ts\n* const hasPinnedColumns = table_getIsSomeColumnsPinned(table)\n* ```\n*/\nfunction table_getIsSomeColumnsPinned(table, position) {\n\tconst pinningState = table.atoms.columnPinning?.get();\n\tif (!position) return Boolean(pinningState?.start.length || pinningState?.end.length);\n\treturn Boolean(pinningState?.[position].length);\n}\n/**\n* Builds header groups for visible columns pinned to the start region.\n*\n* The leaf columns are read in `state.columnPinning.start` order and then passed\n* through the same header-group builder as the unpinned table.\n*\n* @example\n* ```ts\n* const headerGroups = table_getStartHeaderGroups(table)\n* ```\n*/\nfunction table_getStartHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst { start } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst orderedLeafColumns = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst column = leafColumnsById[start[i]];\n\t\tif (column && callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible)) orderedLeafColumns.push(column);\n\t}\n\treturn buildHeaderGroups(allColumns, orderedLeafColumns, table, \"start\");\n}\n/**\n* Builds header groups for visible columns pinned to the end region.\n*\n* The leaf columns are read in `state.columnPinning.end` order and then\n* passed through the same header-group builder as the unpinned table.\n*\n* @example\n* ```ts\n* const headerGroups = table_getEndHeaderGroups(table)\n* ```\n*/\nfunction table_getEndHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst { end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst orderedLeafColumns = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst column = leafColumnsById[end[i]];\n\t\tif (column && callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible)) orderedLeafColumns.push(column);\n\t}\n\treturn buildHeaderGroups(allColumns, orderedLeafColumns, table, \"end\");\n}\n/**\n* Builds header groups for visible columns that are not pinned.\n*\n* Start- and end-pinned column ids are removed from the visible leaf column\n* list before header groups are built for the center region.\n*\n* @example\n* ```ts\n* const headerGroups = table_getCenterHeaderGroups(table)\n* ```\n*/\nfunction table_getCenterHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tlet leafColumns = callMemoOrStaticFn(table, \"getVisibleLeafColumns\", table_getVisibleLeafColumns);\n\tconst { start, end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (start.length || end.length) {\n\t\tconst startAndEnd = [...start, ...end];\n\t\tleafColumns = leafColumns.filter((column) => !startAndEnd.includes(column.id));\n\t}\n\treturn buildHeaderGroups(allColumns, leafColumns, table, \"center\");\n}\n/**\n* Builds footer groups for the start pinned region.\n*\n* Footer groups reuse the start header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getStartFooterGroups(table)\n* ```\n*/\nfunction table_getStartFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)].reverse();\n}\n/**\n* Builds footer groups for the end pinned region.\n*\n* Footer groups reuse the end header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getEndFooterGroups(table)\n* ```\n*/\nfunction table_getEndFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)].reverse();\n}\n/**\n* Builds footer groups for the center, unpinned region.\n*\n* Footer groups reuse the center header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getCenterFooterGroups(table)\n* ```\n*/\nfunction table_getCenterFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)].reverse();\n}\n/**\n* Flattens every header from the start pinned header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getStartFlatHeaders(table)\n* ```\n*/\nfunction table_getStartFlatHeaders(table) {\n\tconst leftHeaderGroups = callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < leftHeaderGroups.length; i++) {\n\t\tconst headers = leftHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Flattens every header from the end pinned header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getEndFlatHeaders(table)\n* ```\n*/\nfunction table_getEndFlatHeaders(table) {\n\tconst rightHeaderGroups = callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < rightHeaderGroups.length; i++) {\n\t\tconst headers = rightHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Flattens every header from the center header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getCenterFlatHeaders(table)\n* ```\n*/\nfunction table_getCenterFlatHeaders(table) {\n\tconst centerHeaderGroups = callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < centerHeaderGroups.length; i++) {\n\t\tconst headers = centerHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Collects leaf headers for the start pinned region.\n*\n* Parent headers are filtered out from the start flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getStartLeafHeaders(table)\n* ```\n*/\nfunction table_getStartLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getStartFlatHeaders\", table_getStartFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Collects leaf headers for the end pinned region.\n*\n* Parent headers are filtered out from the end flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getEndLeafHeaders(table)\n* ```\n*/\nfunction table_getEndLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getEndFlatHeaders\", table_getEndFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Collects leaf headers for the center, unpinned region.\n*\n* Parent headers are filtered out from the center flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getCenterLeafHeaders(table)\n* ```\n*/\nfunction table_getCenterLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getCenterFlatHeaders\", table_getCenterFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Resolves leaf columns pinned to the start region.\n*\n* The result follows `state.columnPinning.start` order and skips stale ids that\n* no longer correspond to a leaf column.\n*\n* @example\n* ```ts\n* const columns = table_getStartLeafColumns(table)\n* ```\n*/\nfunction table_getStartLeafColumns(table) {\n\tconst { start } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst result = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst column = leafColumnsById[start[i]];\n\t\tif (column) result.push(column);\n\t}\n\treturn result;\n}\n/**\n* Resolves leaf columns pinned to the end region.\n*\n* The result follows `state.columnPinning.end` order and skips stale ids that\n* no longer correspond to a leaf column.\n*\n* @example\n* ```ts\n* const columns = table_getEndLeafColumns(table)\n* ```\n*/\nfunction table_getEndLeafColumns(table) {\n\tconst { end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst result = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst column = leafColumnsById[end[i]];\n\t\tif (column) result.push(column);\n\t}\n\treturn result;\n}\n/**\n* Resolves leaf columns that are not pinned to either logical side.\n*\n* Start- and end-pinned ids are removed from `table.getAllLeafColumns()`.\n*\n* @example\n* ```ts\n* const columns = table_getCenterLeafColumns(table)\n* ```\n*/\nfunction table_getCenterLeafColumns(table) {\n\tconst { start, end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length && !end.length) return table.getAllLeafColumns();\n\tconst startAndEnd = [...start, ...end];\n\treturn table.getAllLeafColumns().filter((d) => !startAndEnd.includes(d.id));\n}\n/**\n* Resolves leaf columns for a requested pinning region.\n*\n* Pass `'start'`, `'center'`, or `'end'` for a partition, or pass `false` to\n* read all leaf columns without partitioning.\n*\n* @example\n* ```ts\n* const columns = table_getPinnedLeafColumns(table, 'center')\n* ```\n*/\nfunction table_getPinnedLeafColumns(table, position) {\n\treturn !position ? table.getAllLeafColumns() : position === \"start\" ? callMemoOrStaticFn(table, \"getStartLeafColumns\", table_getStartLeafColumns) : position === \"end\" ? callMemoOrStaticFn(table, \"getEndLeafColumns\", table_getEndLeafColumns) : callMemoOrStaticFn(table, \"getCenterLeafColumns\", table_getCenterLeafColumns);\n}\n/**\n* Resolves visible leaf columns pinned to the start region.\n*\n* Hidden pinned columns are filtered out after the start pin order is applied.\n*\n* @example\n* ```ts\n* const columns = table_getStartVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getStartVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getStartLeafColumns\", table_getStartLeafColumns).filter((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Resolves visible leaf columns pinned to the end region.\n*\n* Hidden pinned columns are filtered out after the end pin order is applied.\n*\n* @example\n* ```ts\n* const columns = table_getEndVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getEndVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getEndLeafColumns\", table_getEndLeafColumns).filter((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Resolves visible leaf columns that are not pinned.\n*\n* This is the center partition used by layouts that render pinned columns\n* separately from the scrollable middle region.\n*\n* @example\n* ```ts\n* const columns = table_getCenterVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getCenterVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getCenterLeafColumns\", table_getCenterLeafColumns).filter((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Resolves visible leaf columns for a requested pinning region.\n*\n* Omit `position` to get all visible leaf columns, or pass `'start'`, `'center'`,\n* or `'end'` to get one partition.\n*\n* @example\n* ```ts\n* const columns = table_getPinnedVisibleLeafColumns(table, 'start')\n* ```\n*/\nfunction table_getPinnedVisibleLeafColumns(table, position) {\n\treturn !position ? callMemoOrStaticFn(table, \"getVisibleLeafColumns\", table_getVisibleLeafColumns) : position === \"start\" ? callMemoOrStaticFn(table, \"getStartVisibleLeafColumns\", table_getStartVisibleLeafColumns) : position === \"end\" ? callMemoOrStaticFn(table, \"getEndVisibleLeafColumns\", table_getEndVisibleLeafColumns) : callMemoOrStaticFn(table, \"getCenterVisibleLeafColumns\", table_getCenterVisibleLeafColumns);\n}\n\n//#endregion\nexport { column_getCanPin, column_getIsPinned, column_getPinnedIndex, column_pin, getDefaultColumnPinningState, row_getCenterVisibleCells, row_getEndVisibleCells, row_getStartVisibleCells, table_getCenterFlatHeaders, table_getCenterFooterGroups, table_getCenterHeaderGroups, table_getCenterLeafColumns, table_getCenterLeafHeaders, table_getCenterVisibleLeafColumns, table_getEndFlatHeaders, table_getEndFooterGroups, table_getEndHeaderGroups, table_getEndLeafColumns, table_getEndLeafHeaders, table_getEndVisibleLeafColumns, table_getIsSomeColumnsPinned, table_getPinnedLeafColumns, table_getPinnedVisibleLeafColumns, table_getStartFlatHeaders, table_getStartFooterGroups, table_getStartHeaderGroups, table_getStartLeafColumns, table_getStartLeafHeaders, table_getStartVisibleLeafColumns, table_resetColumnPinning, table_setColumnPinning };","import { callMemoOrStaticFn, cloneState, hasOwn, makeObjectMap, setStateSlice } from \"../../utils.js\";\nimport { getDefaultColumnPinningState } from \"../column-pinning/columnPinningFeature.utils.js\";\n\n//#region src/features/column-visibility/columnVisibilityFeature.utils.ts\n/**\n* Creates the default column visibility state.\n*\n* The feature default is an empty object, where missing column ids are treated\n* as visible. Reset APIs use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const visibility = getDefaultColumnVisibilityState()\n* ```\n*/\nfunction getDefaultColumnVisibilityState() {\n\treturn makeObjectMap();\n}\n/**\n* Updates this column's visibility when hiding is allowed.\n*\n* Passing `visible` stores that value. Omitting it flips the column's current\n* visibility state. Group columns update their hideable leaf columns because\n* visibility state is keyed by leaf column ids. Columns that cannot hide stay\n* unchanged.\n*\n* @example\n* ```ts\n* column_toggleVisibility(column)\n* ```\n*/\nfunction column_toggleVisibility(column, visible) {\n\tif (column_getCanHide(column)) table_setColumnVisibility(column.table, (old) => {\n\t\tconst next = Object.assign(makeObjectMap(), old);\n\t\tconst nextVisible = visible ?? !callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible);\n\t\tconst leafColumns = column.getLeafColumns();\n\t\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\t\tconst leafColumn = leafColumns[i];\n\t\t\tif (column_getCanHide(leafColumn)) next[leafColumn.id] = nextVisible;\n\t\t}\n\t\treturn next;\n\t});\n}\n/**\n* Checks whether this column is visible.\n*\n* Leaf columns read `state.columnVisibility[column.id]`, where missing entries\n* default to visible. Parent columns are visible when at least one child column\n* is visible.\n*\n* @example\n* ```ts\n* const visible = column_getIsVisible(column)\n* ```\n*/\nfunction column_getIsVisible(column) {\n\tconst columnVisibility = column.table.atoms.columnVisibility?.get();\n\tif (!columnVisibility) return true;\n\tconst childColumns = column.columns;\n\tif (childColumns.length) return childColumns.some((childColumn) => callMemoOrStaticFn(childColumn, \"getIsVisible\", column_getIsVisible));\n\treturn (hasOwn(columnVisibility, column.id) ? columnVisibility[column.id] : void 0) ?? true;\n}\n/**\n* Checks whether this column is allowed to be hidden.\n*\n* Both `columnDef.enableHiding` and table `enableHiding` default to `true`.\n*\n* @example\n* ```ts\n* const canHide = column_getCanHide(column)\n* ```\n*/\nfunction column_getCanHide(column) {\n\treturn (column.columnDef.enableHiding ?? true) && (column.table.options.enableHiding ?? true);\n}\n/**\n* Creates a checkbox-style handler that writes this column's visibility.\n*\n* The handler reads `event.target.checked`, so it is intended for visibility\n* controls whose checked state means \"visible\".\n*\n* @example\n* ```ts\n* const onChange = column_getToggleVisibilityHandler(column)\n* ```\n*/\nfunction column_getToggleVisibilityHandler(column) {\n\treturn (e) => {\n\t\tcolumn_toggleVisibility(column, e.target.checked);\n\t};\n}\n/**\n* Collects the cells from this row whose columns are visible.\n*\n* When column pinning is active, the result is ordered as start-pinned cells,\n* center cells, then end-pinned cells.\n*\n* @example\n* ```ts\n* const visibleCells = row_getVisibleCells(row)\n* ```\n*/\nfunction row_getVisibleCells(row) {\n\tconst allCells = row.getAllCells();\n\tconst visibleCells = [];\n\tfor (let i = 0; i < allCells.length; i++) {\n\t\tconst cell = allCells[i];\n\t\tif (callMemoOrStaticFn(cell.column, \"getIsVisible\", column_getIsVisible)) visibleCells.push(cell);\n\t}\n\tconst { start, end } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length && !end.length) return visibleCells;\n\tconst visibleCellsByColumnId = callMemoOrStaticFn(row, \"getVisibleCellsByColumnId\", row_getVisibleCellsByColumnId);\n\tconst startCells = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst cell = visibleCellsByColumnId[start[i]];\n\t\tif (cell) startCells.push(cell);\n\t}\n\tconst endCells = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst cell = visibleCellsByColumnId[end[i]];\n\t\tif (cell) endCells.push(cell);\n\t}\n\tconst centerCells = [];\n\tfor (let i = 0; i < visibleCells.length; i++) {\n\t\tconst cell = visibleCells[i];\n\t\tconst id = cell.column.id;\n\t\tif (!start.includes(id) && !end.includes(id)) centerCells.push(cell);\n\t}\n\treturn [\n\t\t...startCells,\n\t\t...centerCells,\n\t\t...endCells\n\t];\n}\n/**\n* Builds a lookup map of this row's visible cells keyed by column id.\n*\n* Hidden columns are omitted from the map.\n*\n* @example\n* ```ts\n* const visibleCellsById = row_getVisibleCellsByColumnId(row)\n* ```\n*/\nfunction row_getVisibleCellsByColumnId(row) {\n\tconst result = makeObjectMap();\n\tconst allCells = row.getAllCells();\n\tfor (let i = 0; i < allCells.length; i++) {\n\t\tconst cell = allCells[i];\n\t\tif (callMemoOrStaticFn(cell.column, \"getIsVisible\", column_getIsVisible)) result[cell.column.id] = cell;\n\t}\n\treturn result;\n}\n/**\n* Filters the flat column list down to visible columns.\n*\n* Parent/group columns are included when `column_getIsVisible` considers them\n* visible.\n*\n* @example\n* ```ts\n* const columns = table_getVisibleFlatColumns(table)\n* ```\n*/\nfunction table_getVisibleFlatColumns(table) {\n\treturn table.getAllFlatColumns().filter((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Filters leaf columns down to those currently visible.\n*\n* This is the column list most row rendering code uses before pinning-specific\n* partitioning.\n*\n* @example\n* ```ts\n* const columns = table_getVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getVisibleLeafColumns(table) {\n\treturn table.getAllLeafColumns().filter((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Routes a column visibility updater through the table's visibility change handler.\n*\n* The updater may be a next visibility map or a function of the previous map,\n* matching the instance `table.setColumnVisibility` behavior.\n*\n* @example\n* ```ts\n* table_setColumnVisibility(table, (old) => ({ ...old, age: false }))\n* ```\n*/\nfunction table_setColumnVisibility(table, updater) {\n\tsetStateSlice(table, \"columnVisibility\", updater);\n}\n/**\n* Resets `columnVisibility` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnVisibility` when\n* it exists. Passing `true` ignores initial state and resets to `{}`.\n*\n* @example\n* ```ts\n* table_resetColumnVisibility(table)\n* table_resetColumnVisibility(table, true)\n* ```\n*/\nfunction table_resetColumnVisibility(table, defaultState) {\n\ttable_setColumnVisibility(table, defaultState ? makeObjectMap() : Object.assign(makeObjectMap(), cloneState(table.initialState.columnVisibility ?? {})));\n}\n/**\n* Shows or hides every hideable leaf column.\n*\n* Columns that cannot hide stay visible when toggling all columns off.\n*\n* @example\n* ```ts\n* table_toggleAllColumnsVisible(table)\n* ```\n*/\nfunction table_toggleAllColumnsVisible(table, value) {\n\tvalue = value ?? !table_getIsAllColumnsVisible(table);\n\tconst visibility = makeObjectMap();\n\tconst leafColumns = table.getAllLeafColumns();\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst column = leafColumns[i];\n\t\tvisibility[column.id] = !value ? !column_getCanHide(column) : value;\n\t}\n\ttable_setColumnVisibility(table, visibility);\n}\n/**\n* Checks whether every leaf column is currently visible.\n*\n* Non-hideable columns are naturally visible because missing visibility entries\n* default to `true`.\n*\n* @example\n* ```ts\n* const allVisible = table_getIsAllColumnsVisible(table)\n* ```\n*/\nfunction table_getIsAllColumnsVisible(table) {\n\treturn !table.getAllLeafColumns().some((column) => !callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Checks whether at least one leaf column is currently visible.\n*\n* This is useful for tri-state \"show all columns\" controls.\n*\n* @example\n* ```ts\n* const someVisible = table_getIsSomeColumnsVisible(table)\n* ```\n*/\nfunction table_getIsSomeColumnsVisible(table) {\n\treturn table.getAllLeafColumns().some((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Creates a checkbox-style handler that shows or hides all columns.\n*\n* The handler reads `event.target.checked`, so it is intended for controls whose\n* checked state means \"all columns visible\".\n*\n* @example\n* ```ts\n* const onChange = table_getToggleAllColumnsVisibilityHandler(table)\n* ```\n*/\nfunction table_getToggleAllColumnsVisibilityHandler(table) {\n\treturn (e) => {\n\t\ttable_toggleAllColumnsVisible(table, e.target.checked);\n\t};\n}\n\n//#endregion\nexport { column_getCanHide, column_getIsVisible, column_getToggleVisibilityHandler, column_toggleVisibility, getDefaultColumnVisibilityState, row_getVisibleCells, row_getVisibleCellsByColumnId, table_getIsAllColumnsVisible, table_getIsSomeColumnsVisible, table_getToggleAllColumnsVisibilityHandler, table_getVisibleFlatColumns, table_getVisibleLeafColumns, table_resetColumnVisibility, table_setColumnVisibility, table_toggleAllColumnsVisible };","import { callMemoOrStaticFn } from \"../../utils.js\";\nimport { column_getIsVisible } from \"../../features/column-visibility/columnVisibilityFeature.utils.js\";\nimport { constructHeader } from \"./constructHeader.js\";\n\n//#region src/core/headers/buildHeaderGroups.ts\nfunction getMaxHeaderDepth(columns, depth = 1) {\n\tlet maxDepth = depth;\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tif (callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible) && column.columns.length) maxDepth = Math.max(maxDepth, getMaxHeaderDepth(column.columns, depth + 1));\n\t}\n\treturn maxDepth;\n}\nfunction formatHeaderGroupId(headerFamily, depth) {\n\treturn headerFamily ? `${headerFamily}_${depth}` : String(depth);\n}\nfunction formatHeaderId(headerFamily, depth, columnId, childHeaderId) {\n\tlet id = headerFamily ?? \"\";\n\tif (depth) id = id ? `${id}_${depth}` : String(depth);\n\tif (columnId) id = id ? `${id}_${columnId}` : columnId;\n\tif (childHeaderId) id = id ? `${id}_${childHeaderId}` : childHeaderId;\n\treturn id;\n}\nfunction countPendingHeadersForColumn(headers, column) {\n\tlet count = 0;\n\tfor (let i = 0; i < headers.length; i++) if (headers[i].column === column) count++;\n\treturn count;\n}\nfunction constructHeaderGroup(headersToGroup, depth, table, headerFamily, headerGroups, headerGroupInitFns) {\n\tconst headerGroup = {\n\t\tdepth,\n\t\tid: formatHeaderGroupId(headerFamily, depth),\n\t\theaders: []\n\t};\n\tconst pendingParentHeaders = [];\n\tfor (let i = 0; i < headersToGroup.length; i++) {\n\t\tif (!(i in headersToGroup)) continue;\n\t\tconst headerToGroup = headersToGroup[i];\n\t\tconst latestPendingParentHeader = pendingParentHeaders[pendingParentHeaders.length - 1];\n\t\tconst isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n\t\tlet column;\n\t\tlet isPlaceholder = false;\n\t\tif (isLeafHeader && headerToGroup.column.parent) column = headerToGroup.column.parent;\n\t\telse {\n\t\t\tcolumn = headerToGroup.column;\n\t\t\tisPlaceholder = true;\n\t\t}\n\t\tif (latestPendingParentHeader && latestPendingParentHeader.column === column) latestPendingParentHeader.subHeaders.push(headerToGroup);\n\t\telse {\n\t\t\tconst header = constructHeader(table, column, {\n\t\t\t\tid: formatHeaderId(headerFamily, depth, column.id, headerToGroup.id),\n\t\t\t\tisPlaceholder,\n\t\t\t\tplaceholderId: isPlaceholder ? String(countPendingHeadersForColumn(pendingParentHeaders, column)) : void 0,\n\t\t\t\tdepth,\n\t\t\t\tindex: pendingParentHeaders.length\n\t\t\t});\n\t\t\theader.subHeaders.push(headerToGroup);\n\t\t\tpendingParentHeaders.push(header);\n\t\t}\n\t\theaderGroup.headers.push(headerToGroup);\n\t\theaderToGroup.headerGroup = headerGroup;\n\t}\n\tfor (let i = 0; i < headerGroupInitFns.length; i++) headerGroupInitFns[i](headerGroup);\n\theaderGroups.push(headerGroup);\n\tif (depth > 0) constructHeaderGroup(pendingParentHeaders, depth - 1, table, headerFamily, headerGroups, headerGroupInitFns);\n}\nfunction updateHeaderSpans(headers) {\n\tfor (let i = 0; i < headers.length; i++) {\n\t\tconst header = headers[i];\n\t\tif (!callMemoOrStaticFn(header.column, \"getIsVisible\", column_getIsVisible)) continue;\n\t\tlet colSpan = 0;\n\t\tif (header.subHeaders.length) {\n\t\t\tupdateHeaderSpans(header.subHeaders);\n\t\t\tfor (let j = 0; j < header.subHeaders.length; j++) {\n\t\t\t\tconst child = header.subHeaders[j];\n\t\t\t\tif (!callMemoOrStaticFn(child.column, \"getIsVisible\", column_getIsVisible)) continue;\n\t\t\t\tcolSpan += child.colSpan;\n\t\t\t}\n\t\t} else colSpan = 1;\n\t\theader.colSpan = colSpan;\n\t\tif (header.isPlaceholder && header.subHeaders.length === 1 && header.subHeaders[0].column === header.column) {\n\t\t\tlet rowSpan = 1;\n\t\t\tlet chainChild = header.subHeaders[0];\n\t\t\twhile (chainChild) {\n\t\t\t\tchainChild.rowSpan = 0;\n\t\t\t\trowSpan++;\n\t\t\t\tchainChild = chainChild.subHeaders.length === 1 && chainChild.subHeaders[0].column === header.column ? chainChild.subHeaders[0] : void 0;\n\t\t\t}\n\t\t\theader.rowSpan = rowSpan;\n\t\t} else header.rowSpan = 1;\n\t}\n}\n/**\n* Builds the nested header group structure for a table.\n*\n* The result accounts for visible leaf columns, pinned column groups, and placeholder headers needed to render multi-level headers.\n*/\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n\tconst maxDepth = getMaxHeaderDepth(allColumns);\n\tconst headerGroups = [];\n\tconst headerGroupInitFns = table._headerGroupInstanceInitFns;\n\tconst bottomHeaders = new Array(columnsToGroup.length);\n\tfor (let i = 0; i < columnsToGroup.length; i++) {\n\t\tif (!(i in columnsToGroup)) continue;\n\t\tbottomHeaders[i] = constructHeader(table, columnsToGroup[i], {\n\t\t\tdepth: maxDepth,\n\t\t\tindex: i\n\t\t});\n\t}\n\tconstructHeaderGroup(bottomHeaders, maxDepth - 1, table, headerFamily, headerGroups, headerGroupInitFns);\n\theaderGroups.reverse();\n\tupdateHeaderSpans(headerGroups[0]?.headers ?? []);\n\treturn headerGroups;\n}\n\n//#endregion\nexport { buildHeaderGroups };","//#region src/core/columns/constructColumn.ts\n/**\n* Creates or retrieves the column prototype for a table.\n* The prototype is cached on the table and shared by all column instances.\n*/\nfunction getColumnPrototype(table) {\n\tif (!table._columnPrototype) {\n\t\ttable._columnPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignColumnPrototype?.(table._columnPrototype, table);\n\t}\n\treturn table._columnPrototype;\n}\n/**\n* Constructs a column instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructColumn(table, columnDef, depth, parent) {\n\tconst resolvedColumnDef = {\n\t\t...table.getDefaultColumnDef(),\n\t\t...columnDef\n\t};\n\tconst accessorKey = resolvedColumnDef.accessorKey;\n\tconst accessorKeyString = accessorKey === void 0 ? void 0 : String(accessorKey);\n\tconst id = resolvedColumnDef.id ?? accessorKeyString?.replaceAll(\".\", \"_\") ?? (typeof resolvedColumnDef.header === \"string\" ? resolvedColumnDef.header : void 0);\n\tlet accessorFn;\n\tif (resolvedColumnDef.accessorFn) accessorFn = resolvedColumnDef.accessorFn;\n\telse if (accessorKey !== void 0) if (typeof accessorKey === \"string\" && accessorKey.includes(\".\")) {\n\t\tconst keys = accessorKey.split(\".\");\n\t\taccessorFn = (originalRow) => {\n\t\t\tlet result = originalRow;\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\tconst key = keys[i];\n\t\t\t\tresult = result?.[key];\n\t\t\t\tif (process.env.NODE_ENV === \"development\" && result === void 0) console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t} else accessorFn = (originalRow) => originalRow[resolvedColumnDef.accessorKey];\n\tif (!id) {\n\t\tif (process.env.NODE_ENV === \"development\") throw new Error(resolvedColumnDef.accessorFn ? `coreColumnsFeature require an id when using an accessorFn` : `coreColumnsFeature require an id when using a non-string header`);\n\t\tthrow new Error();\n\t}\n\tconst columnPrototype = getColumnPrototype(table);\n\tconst column = Object.create(columnPrototype);\n\tcolumn.accessorFn = accessorFn;\n\tcolumn.columnDef = resolvedColumnDef;\n\tcolumn.columns = [];\n\tcolumn.depth = depth;\n\tcolumn.id = `${String(id)}`;\n\tcolumn.parent = parent;\n\tconst initFns = table._columnInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](column);\n\treturn column;\n}\n\n//#endregion\nexport { constructColumn };","import { callMemoOrStaticFn, cloneState, makeObjectMap, setStateSlice } from \"../../utils.js\";\nimport { table_getPinnedVisibleLeafColumns } from \"../column-pinning/columnPinningFeature.utils.js\";\n\n//#region src/features/column-ordering/columnOrderingFeature.utils.ts\n/**\n* Creates the default column order state.\n*\n* The feature default is an empty array, meaning leaf columns keep their natural\n* definition order. Reset APIs use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const order = getDefaultColumnOrderState()\n* ```\n*/\nfunction getDefaultColumnOrderState() {\n\treturn [];\n}\n/**\n* Builds column-id to index records for each visible pinning region.\n*\n* All four regions are built in one pass so a single memo entry serves every\n* `column_getIndex` lookup without per-column scans.\n*\n* @example\n* ```ts\n* const indexes = table_getColumnIndexes(table)\n* ```\n*/\nfunction table_getColumnIndexes(table) {\n\tconst buildIndexes = (columns) => {\n\t\tconst indexes = makeObjectMap();\n\t\tfor (let i = 0; i < columns.length; i++) indexes[columns[i].id] = i;\n\t\treturn indexes;\n\t};\n\treturn {\n\t\tall: buildIndexes(table_getPinnedVisibleLeafColumns(table)),\n\t\tcenter: buildIndexes(table_getPinnedVisibleLeafColumns(table, \"center\")),\n\t\tstart: buildIndexes(table_getPinnedVisibleLeafColumns(table, \"start\")),\n\t\tend: buildIndexes(table_getPinnedVisibleLeafColumns(table, \"end\"))\n\t};\n}\n/**\n* Finds this column's index within a visible pinning region.\n*\n* Pass `'start'`, `'center'`, or `'end'` to search that region; omit the\n* position to search the full visible leaf column list.\n*\n* @example\n* ```ts\n* const index = column_getIndex(column, 'center')\n* ```\n*/\nfunction column_getIndex(column, position) {\n\treturn callMemoOrStaticFn(column.table, \"getColumnIndexes\", table_getColumnIndexes)[position === \"start\" ? \"start\" : position === \"end\" ? \"end\" : position === \"center\" ? \"center\" : \"all\"][column.id] ?? -1;\n}\n/**\n* Checks whether this column is the first visible column in a pinning region.\n*\n* The same `position` semantics as `column_getIndex` apply.\n*\n* @example\n* ```ts\n* const isFirst = column_getIsFirstColumn(column, 'start')\n* ```\n*/\nfunction column_getIsFirstColumn(column, position) {\n\treturn table_getPinnedVisibleLeafColumns(column.table, position)[0]?.id === column.id;\n}\n/**\n* Checks whether this column is the last visible column in a pinning region.\n*\n* The same `position` semantics as `column_getIndex` apply.\n*\n* @example\n* ```ts\n* const isLast = column_getIsLastColumn(column, 'end')\n* ```\n*/\nfunction column_getIsLastColumn(column, position) {\n\tconst columns = table_getPinnedVisibleLeafColumns(column.table, position);\n\treturn columns[columns.length - 1]?.id === column.id;\n}\n/**\n* Routes a column order updater through the table's column-order change handler.\n*\n* The updater may be a next ordered id array or a function of the previous\n* array, matching the instance `table.setColumnOrder` behavior.\n*\n* @example\n* ```ts\n* table_setColumnOrder(table, ['firstName', 'lastName', 'age'])\n* ```\n*/\nfunction table_setColumnOrder(table, updater) {\n\tsetStateSlice(table, \"columnOrder\", updater);\n}\n/**\n* Resets `columnOrder` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnOrder` when it\n* exists. Passing `true` ignores initial state and resets to `[]`.\n*\n* @example\n* ```ts\n* table_resetColumnOrder(table)\n* table_resetColumnOrder(table, true)\n* ```\n*/\nfunction table_resetColumnOrder(table, defaultState) {\n\ttable_setColumnOrder(table, defaultState ? [] : cloneState(table.initialState.columnOrder ?? []));\n}\n/**\n* Creates the ordering function used to arrange leaf columns.\n*\n* The returned function applies `state.columnOrder`, preserves unspecified\n* columns in their original order, then delegates to grouping rules.\n*\n* @example\n* ```ts\n* const orderColumnsForTable = table_getOrderColumnsFn(table)\n* ```\n*/\nfunction table_getOrderColumnsFn(table) {\n\tconst columnOrder = table.atoms.columnOrder?.get();\n\treturn (columns) => {\n\t\tlet orderedColumns = [];\n\t\tif (!columnOrder?.length) orderedColumns = columns;\n\t\telse {\n\t\t\tconst remaining = /* @__PURE__ */ new Map();\n\t\t\tfor (let i = 0; i < columns.length; i++) {\n\t\t\t\tconst column = columns[i];\n\t\t\t\tremaining.set(column.id, column);\n\t\t\t}\n\t\t\tfor (let i = 0; i < columnOrder.length; i++) {\n\t\t\t\tconst id = columnOrder[i];\n\t\t\t\tconst column = remaining.get(id);\n\t\t\t\tif (column) {\n\t\t\t\t\torderedColumns.push(column);\n\t\t\t\t\tremaining.delete(id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let i = 0; i < columns.length; i++) {\n\t\t\t\tconst column = columns[i];\n\t\t\t\tif (remaining.has(column.id)) orderedColumns.push(column);\n\t\t\t}\n\t\t}\n\t\treturn orderColumns(table, orderedColumns);\n\t};\n}\n/**\n* Applies grouped-column placement rules to an already ordered leaf-column list.\n*\n* `groupedColumnMode: 'remove'` drops grouped columns from the list.\n* `groupedColumnMode: 'reorder'` moves grouped columns to the front in grouping\n* state order.\n*\n* @example\n* ```ts\n* const orderedColumns = orderColumns(table, leafColumns)\n* ```\n*/\nfunction orderColumns(table, leafColumns) {\n\tconst grouping = table.atoms.grouping?.get() ?? [];\n\tconst { groupedColumnMode } = table.options;\n\tif (!grouping.length || !groupedColumnMode) return leafColumns;\n\tconst nonGroupingColumns = leafColumns.filter((col) => !grouping.includes(col.id));\n\tif (groupedColumnMode === \"remove\") return nonGroupingColumns;\n\tconst leafColumnsById = /* @__PURE__ */ new Map();\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst col = leafColumns[i];\n\t\tleafColumnsById.set(col.id, col);\n\t}\n\tconst groupingColumns = [];\n\tfor (let i = 0; i < grouping.length; i++) {\n\t\tconst col = leafColumnsById.get(grouping[i]);\n\t\tif (col) groupingColumns.push(col);\n\t}\n\treturn [...groupingColumns, ...nonGroupingColumns];\n}\n\n//#endregion\nexport { column_getIndex, column_getIsFirstColumn, column_getIsLastColumn, getDefaultColumnOrderState, orderColumns, table_getColumnIndexes, table_getOrderColumnsFn, table_resetColumnOrder, table_setColumnOrder };","import { callMemoOrStaticFn, makeObjectMap } from \"../../utils.js\";\nimport { table_getOrderColumnsFn } from \"../../features/column-ordering/columnOrderingFeature.utils.js\";\nimport { constructColumn } from \"./constructColumn.js\";\n\n//#region src/core/columns/coreColumnsFeature.utils.ts\n/**\n* Flattens this column and every descendant column into a single array.\n*\n* Group columns appear before their child columns, which matches the normalized\n* column hierarchy produced during table construction.\n*\n* @example\n* ```ts\n* const flatColumns = column_getFlatColumns(column)\n* ```\n*/\nfunction column_getFlatColumns(column) {\n\treturn [column, ...column.columns.flatMap((col) => col.getFlatColumns())];\n}\n/**\n* Collects the terminal leaf columns below this column.\n*\n* Group columns return their ordered descendants. Non-group columns return an\n* array containing only the column itself.\n*\n* @example\n* ```ts\n* const leafColumns = column_getLeafColumns(column)\n* ```\n*/\nfunction column_getLeafColumns(column) {\n\tif (column.columns.length) {\n\t\tconst leafColumns = column.columns.flatMap((col) => col.getLeafColumns());\n\t\treturn callMemoOrStaticFn(column.table, \"getOrderColumns\", table_getOrderColumnsFn)(leafColumns);\n\t}\n\treturn [column];\n}\n/**\n* Merges built-in, feature, and user default column definitions.\n*\n* Built-in defaults provide a header and fallback cell renderer, feature\n* defaults can add feature-specific column options, and\n* `options.defaultColumn` wins last.\n*\n* @example\n* ```ts\n* const defaultColumn = table_getDefaultColumnDef(table)\n* ```\n*/\nfunction table_getDefaultColumnDef(table) {\n\treturn {\n\t\theader: (props) => {\n\t\t\tconst resolvedColumnDef = props.header.column.columnDef;\n\t\t\tif (resolvedColumnDef.accessorKey) return resolvedColumnDef.accessorKey;\n\t\t\tif (resolvedColumnDef.accessorFn) return resolvedColumnDef.id;\n\t\t\treturn null;\n\t\t},\n\t\tcell: (props) => props.renderValue()?.toString?.() ?? null,\n\t\t...Object.values(table._features).reduce((obj, feature) => {\n\t\t\treturn Object.assign(obj, feature.getDefaultColumnDef?.());\n\t\t}, {}),\n\t\t...table.options.defaultColumn\n\t};\n}\nfunction constructColumns(table, columnDefs, parent, depth = 0) {\n\tconst columns = new Array(columnDefs.length);\n\tfor (let i = 0; i < columnDefs.length; i++) {\n\t\tif (!(i in columnDefs)) continue;\n\t\tconst columnDef = columnDefs[i];\n\t\tconst column = constructColumn(table, columnDef, depth, parent);\n\t\tconst groupingColumnDef = columnDef;\n\t\tcolumn.columns = groupingColumnDef.columns ? constructColumns(table, groupingColumnDef.columns, column, depth + 1) : [];\n\t\tcolumns[i] = column;\n\t}\n\treturn columns;\n}\n/**\n* Normalizes `options.columns` into the table's nested column tree.\n*\n* Each column definition is constructed with its parent and depth, and group\n* column children are recursively constructed.\n*\n* @example\n* ```ts\n* const columns = table_getAllColumns(table)\n* ```\n*/\nfunction table_getAllColumns(table) {\n\treturn constructColumns(table, table.options.columns);\n}\n/**\n* Flattens every table column, including group columns and leaf columns.\n*\n* Use this when parent/group columns must be included in addition to data leaf\n* columns.\n*\n* @example\n* ```ts\n* const flatColumns = table_getAllFlatColumns(table)\n* ```\n*/\nfunction table_getAllFlatColumns(table) {\n\treturn table.getAllColumns().flatMap((column) => column.getFlatColumns());\n}\n/**\n* Builds an id lookup for every flat column in the table.\n*\n* Group columns and leaf columns are included. Later columns with the same id\n* replace earlier entries.\n*\n* @example\n* ```ts\n* const columnsById = table_getAllFlatColumnsById(table)\n* ```\n*/\nfunction table_getAllFlatColumnsById(table) {\n\tconst result = makeObjectMap();\n\tconst flatColumns = table.getAllFlatColumns();\n\tfor (let i = 0; i < flatColumns.length; i++) {\n\t\tconst column = flatColumns[i];\n\t\tresult[column.id] = column;\n\t}\n\treturn result;\n}\n/**\n* Collects all terminal leaf columns in their current table order.\n*\n* Column ordering features can reorder the collected leaves before the result\n* is returned.\n*\n* @example\n* ```ts\n* const leafColumns = table_getAllLeafColumns(table)\n* ```\n*/\nfunction table_getAllLeafColumns(table) {\n\tconst leafColumns = table.getAllColumns().flatMap((c) => c.getLeafColumns());\n\treturn callMemoOrStaticFn(table, \"getOrderColumns\", table_getOrderColumnsFn)(leafColumns);\n}\n/**\n* Builds an id lookup for terminal leaf columns only.\n*\n* Parent/group columns are excluded, making this lookup appropriate for row\n* cells and feature state keyed by data columns.\n*\n* @example\n* ```ts\n* const leavesById = table_getAllLeafColumnsById(table)\n* ```\n*/\nfunction table_getAllLeafColumnsById(table) {\n\tconst result = makeObjectMap();\n\tconst leafColumns = table.getAllLeafColumns();\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst column = leafColumns[i];\n\t\tresult[column.id] = column;\n\t}\n\treturn result;\n}\n/**\n* Looks up a column by id from the flat column map.\n*\n* The lookup can return group columns or leaf columns. In development, a\n* missing id logs a warning to help catch stale column references.\n*\n* @example\n* ```ts\n* const column = table_getColumn(table, 'firstName')\n* ```\n*/\nfunction table_getColumn(table, columnId) {\n\tconst column = table.getAllFlatColumnsById()[columnId];\n\tif (process.env.NODE_ENV === \"development\" && !column) console.warn(`[Table] Column with id '${columnId}' does not exist.`);\n\treturn column;\n}\n\n//#endregion\nexport { column_getFlatColumns, column_getLeafColumns, table_getAllColumns, table_getAllFlatColumns, table_getAllFlatColumnsById, table_getAllLeafColumns, table_getAllLeafColumnsById, table_getColumn, table_getDefaultColumnDef };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { column_getFlatColumns, column_getLeafColumns, table_getAllColumns, table_getAllFlatColumns, table_getAllFlatColumnsById, table_getAllLeafColumns, table_getAllLeafColumnsById, table_getColumn, table_getDefaultColumnDef } from \"./coreColumnsFeature.utils.js\";\n\n//#region src/core/columns/coreColumnsFeature.ts\n/**\n* Core feature that builds the column tree and exposes table/column APIs.\n*/\nconst coreColumnsFeature = {\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreColumnsFeature\", prototype, table, {\n\t\t\tcolumn_getFlatColumns: {\n\t\t\t\tfn: (column) => column_getFlatColumns(column),\n\t\t\t\tmemoDeps: (column) => [column.table.options.columns]\n\t\t\t},\n\t\t\tcolumn_getLeafColumns: {\n\t\t\t\tfn: (column) => column_getLeafColumns(column),\n\t\t\t\tmemoDeps: (column) => [\n\t\t\t\t\tcolumn.table.atoms.columnOrder?.get(),\n\t\t\t\t\tcolumn.table.atoms.grouping?.get(),\n\t\t\t\t\tcolumn.table.options.columns,\n\t\t\t\t\tcolumn.table.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreColumnsFeature\", table, {\n\t\t\ttable_getDefaultColumnDef: {\n\t\t\t\tfn: () => table_getDefaultColumnDef(table),\n\t\t\t\tmemoDeps: () => [table.options.defaultColumn]\n\t\t\t},\n\t\t\ttable_getAllColumns: {\n\t\t\t\tfn: () => table_getAllColumns(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllFlatColumns: {\n\t\t\t\tfn: () => table_getAllFlatColumns(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllFlatColumnsById: {\n\t\t\t\tfn: () => table_getAllFlatColumnsById(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllLeafColumns: {\n\t\t\t\tfn: () => table_getAllLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getAllLeafColumnsById: {\n\t\t\t\tfn: () => table_getAllLeafColumnsById(table),\n\t\t\t\tmemoDeps: () => [table.getAllLeafColumns()]\n\t\t\t},\n\t\t\ttable_getColumn: { fn: (columnId) => table_getColumn(table, columnId) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreColumnsFeature };","import { callMemoOrStaticFn } from \"../../utils.js\";\nimport { column_getIsVisible, table_getVisibleLeafColumns } from \"../../features/column-visibility/columnVisibilityFeature.utils.js\";\nimport { buildHeaderGroups } from \"./buildHeaderGroups.js\";\nimport { getDefaultColumnPinningState } from \"../../features/column-pinning/columnPinningFeature.utils.js\";\n\n//#region src/core/headers/coreHeadersFeature.utils.ts\nfunction collectLeafHeaders(header, leafHeaders) {\n\tfor (let i = 0; i < header.subHeaders.length; i++) collectLeafHeaders(header.subHeaders[i], leafHeaders);\n\tleafHeaders.push(header);\n}\n/**\n* Walks a header tree and collects all descendant leaf headers.\n*\n* The header itself is included after its descendants, matching the recursive\n* shape used by nested header groups.\n*\n* @example\n* ```ts\n* const leafHeaders = header_getLeafHeaders(header)\n* ```\n*/\nfunction header_getLeafHeaders(header) {\n\tconst leafHeaders = [];\n\tcollectLeafHeaders(header, leafHeaders);\n\treturn leafHeaders;\n}\n/**\n* Builds the render context passed to a column's `header` or `footer` template.\n*\n* The context contains the header, its column, and the owning table instance.\n*\n* @example\n* ```ts\n* const context = header_getContext(header)\n* ```\n*/\nfunction header_getContext(header) {\n\treturn {\n\t\tcolumn: header.column,\n\t\theader,\n\t\ttable: header.column.table\n\t};\n}\n/**\n* Builds visible header groups for the current column tree.\n*\n* Column visibility and pinning are applied before groups are built. When no\n* columns are pinned, the fast path skips pin partitioning.\n*\n* @example\n* ```ts\n* const headerGroups = table_getHeaderGroups(table)\n* ```\n*/\nfunction table_getHeaderGroups(table) {\n\tconst { start, end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst allColumns = table.getAllColumns();\n\tconst leafColumns = callMemoOrStaticFn(table, \"getVisibleLeafColumns\", table_getVisibleLeafColumns);\n\tif (!start.length && !end.length) return buildHeaderGroups(allColumns, leafColumns, table);\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst leftColumns = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst column = leafColumnsById[start[i]];\n\t\tif (column && callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible)) leftColumns.push(column);\n\t}\n\tconst rightColumns = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst column = leafColumnsById[end[i]];\n\t\tif (column && callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible)) rightColumns.push(column);\n\t}\n\tconst centerColumns = leafColumns.filter((column) => !start.includes(column.id) && !end.includes(column.id));\n\treturn buildHeaderGroups(allColumns, [\n\t\t...leftColumns,\n\t\t...centerColumns,\n\t\t...rightColumns\n\t], table);\n}\n/**\n* Builds footer groups by reversing the current header groups.\n*\n* Footer rendering uses the same header objects and grouping structure, but\n* renders them from leaf level back toward the root.\n*\n* @example\n* ```ts\n* const footerGroups = table_getFooterGroups(table)\n* ```\n*/\nfunction table_getFooterGroups(table) {\n\treturn [...table.getHeaderGroups()].reverse();\n}\n/**\n* Flattens every header from every header group into one array.\n*\n* The result includes parent headers and placeholder headers, in header-group\n* order from top to bottom.\n*\n* @example\n* ```ts\n* const flatHeaders = table_getFlatHeaders(table)\n* ```\n*/\nfunction table_getFlatHeaders(table) {\n\tconst headerGroups = table.getHeaderGroups();\n\tconst result = [];\n\tfor (let i = 0; i < headerGroups.length; i++) {\n\t\tconst headers = headerGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Collects only the leaf headers from the current header tree.\n*\n* Parent/group headers are skipped, making the result suitable for rendering\n* one header per visible leaf column.\n*\n* @example\n* ```ts\n* const leafHeaders = table_getLeafHeaders(table)\n* ```\n*/\nfunction table_getLeafHeaders(table) {\n\tconst topHeaders = table.getHeaderGroups()[0]?.headers ?? [];\n\tconst result = [];\n\tfor (let i = 0; i < topHeaders.length; i++) {\n\t\tconst leafHeaders = topHeaders[i].getLeafHeaders();\n\t\tfor (let j = 0; j < leafHeaders.length; j++) result.push(leafHeaders[j]);\n\t}\n\treturn result;\n}\n\n//#endregion\nexport { header_getContext, header_getLeafHeaders, table_getFlatHeaders, table_getFooterGroups, table_getHeaderGroups, table_getLeafHeaders };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { header_getContext, header_getLeafHeaders, table_getFlatHeaders, table_getFooterGroups, table_getHeaderGroups, table_getLeafHeaders } from \"./coreHeadersFeature.utils.js\";\n\n//#region src/core/headers/coreHeadersFeature.ts\n/**\n* Core feature that builds header groups and exposes header context APIs.\n*/\nconst coreHeadersFeature = {\n\tassignHeaderPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreHeadersFeature\", prototype, table, {\n\t\t\theader_getLeafHeaders: {\n\t\t\t\tfn: (header) => header_getLeafHeaders(header),\n\t\t\t\tmemoDeps: (header) => [header.column.table.options.columns]\n\t\t\t},\n\t\t\theader_getContext: {\n\t\t\t\tfn: (header) => header_getContext(header),\n\t\t\t\tmemoDeps: (header) => [header.column.table.options.columns]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreHeadersFeature\", table, {\n\t\t\ttable_getHeaderGroups: {\n\t\t\t\tfn: () => table_getHeaderGroups(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getFooterGroups: {\n\t\t\t\tfn: () => table_getFooterGroups(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getFlatHeaders: {\n\t\t\t\tfn: () => table_getFlatHeaders(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getLeafHeaders: {\n\t\t\t\tfn: () => table_getLeafHeaders(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreHeadersFeature };","import { makeObjectMap } from \"../../utils.js\";\n\n//#region src/core/rows/constructRow.ts\n/**\n* Creates or retrieves the row prototype for a table.\n* The prototype is cached on the table and shared by all row instances.\n*/\nfunction getRowPrototype(table) {\n\tif (!table._rowPrototype) {\n\t\ttable._rowPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignRowPrototype?.(table._rowPrototype, table);\n\t}\n\treturn table._rowPrototype;\n}\n/**\n* Constructs a row instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nconst constructRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n\tconst rowPrototype = getRowPrototype(table);\n\tconst row = Object.create(rowPrototype);\n\trow._displayIndexCache = -1;\n\trow._uniqueValuesCache = makeObjectMap();\n\trow._valuesCache = makeObjectMap();\n\trow.depth = depth;\n\trow.id = id;\n\trow.index = rowIndex;\n\trow.original = original;\n\trow.parentId = parentId;\n\trow.subRows = subRows ?? [];\n\tconst initFns = table._rowInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](row);\n\treturn row;\n};\n\n//#endregion\nexport { constructRow };","import { callMemoOrStaticFn, cloneState, makeObjectMap, setStateSlice } from \"../../utils.js\";\nimport { table_getVisibleLeafColumns } from \"../column-visibility/columnVisibilityFeature.utils.js\";\nimport { applyCellSelectionBoundsOperations, expandCellSelectionBounds } from \"./cellSelectionGeometry.js\";\n\n//#region src/features/cell-selection/cellSelectionFeature.utils.ts\n/**\n* Creates the default cell selection state.\n*\n* The feature default is an empty selection. Reset APIs use this value when\n* `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const selection = getDefaultCellSelectionState()\n* ```\n*/\nfunction getDefaultCellSelectionState() {\n\treturn [];\n}\n/**\n* Routes a cell selection updater through the table's selection change handler.\n*\n* @example\n* ```ts\n* table_setCellSelection(table, (old) => old.slice(0, -1))\n* ```\n*/\nfunction table_setCellSelection(table, updater) {\n\ttable.options.onCellSelectionChange?.(updater);\n}\n/**\n* Resets `cellSelection` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.cellSelection` when it\n* exists. Passing `true` ignores initial state and resets to an empty selection.\n*\n* @example\n* ```ts\n* table_resetCellSelection(table, true)\n* ```\n*/\nfunction table_resetCellSelection(table, defaultState) {\n\tsetStateSlice(table, \"cellSelection\", defaultState ? getDefaultCellSelectionState() : cloneState(table.initialState.cellSelection) ?? getDefaultCellSelectionState());\n}\n/**\n* Schedules a cell selection reset after `data` changes.\n*\n* Ranges are stored as row and column ids, so without this a data swap would\n* leave a selection pointing at rows that no longer exist, or silently\n* re-select cells whenever new data reuses ids. The reset runs when\n* `autoResetAll` or `autoResetCellSelection` allows it, defaulting to on.\n*\n* Resetting to `initialState.cellSelection` rather than to empty means the\n* first row-model computation is a no-op, matching `table_autoResetExpanded`.\n*\n* @example\n* ```ts\n* table_autoResetCellSelection(table)\n* ```\n*/\nfunction table_autoResetCellSelection(table) {\n\tif (!table.atoms.cellSelection) return;\n\tif (table.options.autoResetAll ?? table.options.autoResetCellSelection ?? true) table._reactivity.schedule(() => table_resetCellSelection(table));\n}\n/**\n* Returns the visible leaf columns in the order their cells actually render.\n*\n* This is deliberately not `getVisibleLeafColumns()`, which is\n* visibility-filtered but *not* pinning-reordered, and not `column_getIndex()`,\n* which indexes that same unpinned list. Cells render start-pinned first, then\n* center, then end (see `row_getVisibleCells`), so indexing a selection in the\n* unpinned order would make a dragged rectangle contiguous in index space but\n* visually scattered the moment a column is pinned.\n*\n* The pinning read is inlined rather than delegated to the column pinning\n* utils so this stays correct when that feature is absent, and so the ordering\n* provably matches `row_getVisibleCells`.\n*/\nfunction getDisplayOrderedColumns(table) {\n\tconst columns = callMemoOrStaticFn(table, \"getVisibleLeafColumns\", table_getVisibleLeafColumns);\n\tconst pinning = table.atoms.columnPinning?.get();\n\tif (!pinning || !pinning.start.length && !pinning.end.length) return columns;\n\tconst byId = makeObjectMap();\n\tfor (let i = 0; i < columns.length; i++) byId[columns[i].id] = columns[i];\n\tconst start = [];\n\tfor (let i = 0; i < pinning.start.length; i++) {\n\t\tconst column = byId[pinning.start[i]];\n\t\tif (column) start.push(column);\n\t}\n\tconst end = [];\n\tfor (let i = 0; i < pinning.end.length; i++) {\n\t\tconst column = byId[pinning.end[i]];\n\t\tif (column) end.push(column);\n\t}\n\tconst center = [];\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tif (!pinning.start.includes(column.id) && !pinning.end.includes(column.id)) center.push(column);\n\t}\n\treturn [\n\t\t...start,\n\t\t...center,\n\t\t...end\n\t];\n}\n/**\n* Builds a column id to render-order index map.\n*\n* Registered by this feature so the lookup stays memoized even when\n* `columnOrderingFeature` is absent, since that feature's `getColumnIndexes`\n* static rebuilds all four maps on every call, which would make per-cell reads\n* O(columns).\n*\n* @example\n* ```ts\n* const index = table_getCellSelectionColumnIndexes(table)[columnId]\n* ```\n*/\nfunction table_getCellSelectionColumnIndexes(table) {\n\tconst columns = getDisplayOrderedColumns(table);\n\tconst indexes = makeObjectMap();\n\tfor (let i = 0; i < columns.length; i++) indexes[columns[i].id] = i;\n\treturn indexes;\n}\nconst EMPTY_MERGE_BOUNDS = [];\nfunction probeCellSpanIndex(table) {\n\treturn table.getCellSpanIndex?.();\n}\n/**\n* Resolves the merged-cell rectangles of the rendered rows into selection's\n* own index space.\n*\n* The span index positions rows by their paginated render order while\n* selection positions them by pre-paginated display order, so each merge is\n* mapped through `row.getDisplayIndex()`. A merge whose rows do not map to a\n* contiguous display range is skipped defensively; it then behaves like\n* unmerged cells instead of corrupting the geometry.\n*\n* Returns an empty array when `cellSpanningFeature` is not registered, which\n* keeps every selection code path identical to the span-unaware behavior.\n*\n* @example\n* ```ts\n* const merges = table_getCellSelectionMergeBounds(table)\n* ```\n*/\nfunction table_getCellSelectionMergeBounds(table) {\n\tconst spanIndex = probeCellSpanIndex(table);\n\tif (!spanIndex) return EMPTY_MERGE_BOUNDS;\n\tconst columnIndexes = callMemoOrStaticFn(table, \"getCellSelectionColumnIndexes\", table_getCellSelectionColumnIndexes);\n\tconst merges = [];\n\tfor (const columnId in spanIndex.rowSpans) {\n\t\tconst columnIndex = columnIndexes[columnId];\n\t\tif (columnIndex === void 0) continue;\n\t\tconst spans = spanIndex.rowSpans[columnId];\n\t\tconst spanColumnIndex = spanIndex.columnIndexes[columnId];\n\t\tfor (let r = 0; r < spans.length; r++) {\n\t\t\tconst span = spans[r];\n\t\t\tif (span <= 1) continue;\n\t\t\tconst startRow = spanIndex.rows[r].getDisplayIndex();\n\t\t\tconst endRow = spanIndex.rows[r + span - 1].getDisplayIndex();\n\t\t\tif (startRow < 0 || endRow - startRow !== span - 1) continue;\n\t\t\tconst colSpan = spanColumnIndex === void 0 ? 1 : Math.max(spanIndex.colSpans[r]?.[spanColumnIndex] ?? 1, 1);\n\t\t\tmerges.push({\n\t\t\t\tminRowIndex: startRow,\n\t\t\t\tmaxRowIndex: endRow,\n\t\t\t\tminColumnIndex: columnIndex,\n\t\t\t\tmaxColumnIndex: columnIndex + colSpan - 1\n\t\t\t});\n\t\t}\n\t}\n\tif (spanIndex.colSpans.length) {\n\t\tconst columnIdBySpanIndex = [];\n\t\tfor (const columnId in spanIndex.columnIndexes) columnIdBySpanIndex[spanIndex.columnIndexes[columnId]] = columnId;\n\t\tfor (let r = 0; r < spanIndex.colSpans.length; r++) {\n\t\t\tconst rowColSpans = spanIndex.colSpans[r];\n\t\t\tif (!rowColSpans) continue;\n\t\t\tconst displayRow = spanIndex.rows[r]?.getDisplayIndex() ?? -1;\n\t\t\tif (displayRow < 0) continue;\n\t\t\tfor (let c = 0; c < rowColSpans.length; c++) {\n\t\t\t\tconst span = rowColSpans[c];\n\t\t\t\tif (span <= 1) continue;\n\t\t\t\tconst columnId = columnIdBySpanIndex[c];\n\t\t\t\tif (columnId === void 0) continue;\n\t\t\t\tconst vertical = spanIndex.rowSpans[columnId];\n\t\t\t\tif (vertical && vertical[r] !== 1) continue;\n\t\t\t\tconst columnIndex = columnIndexes[columnId];\n\t\t\t\tif (columnIndex === void 0) continue;\n\t\t\t\tmerges.push({\n\t\t\t\t\tminRowIndex: displayRow,\n\t\t\t\t\tmaxRowIndex: displayRow,\n\t\t\t\t\tminColumnIndex: columnIndex,\n\t\t\t\t\tmaxColumnIndex: columnIndex + span - 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\treturn merges;\n}\nfunction findMergeBoundsAt(merges, rowIndex, columnIndex) {\n\tfor (let i = 0; i < merges.length; i++) {\n\t\tconst merge = merges[i];\n\t\tif (rowIndex >= merge.minRowIndex && rowIndex <= merge.maxRowIndex && columnIndex >= merge.minColumnIndex && columnIndex <= merge.maxColumnIndex) return merge;\n\t}\n}\n/**\n* Resolves a row id to its display-order index, or `-1` when it no longer\n* identifies a row in the current order.\n*\n* Callers must have already called `table.getRowsInDisplayOrder()`, which is\n* what populates the display index cache each row reads.\n*/\nfunction resolveRowIndex(table, rows, rowId) {\n\tconst row = table.getPrePaginatedRowModel().rowsById[rowId] ?? table.getCoreRowModel().rowsById[rowId];\n\tif (!row) return -1;\n\tconst index = row.getDisplayIndex();\n\tif (index < 0 || index >= rows.length || rows[index]?.id !== rowId) return -1;\n\treturn index;\n}\n/**\n* Resolves ordered range operations into disjoint, positive display-order\n* index rectangles.\n*\n* This is the single cache every per-cell read goes through, so index lookups\n* happen once per invalidation rather than once per cell. A range whose corners\n* no longer resolve, for example because its anchor row was filtered out, is\n* omitted rather than clamped, so it contributes nothing while remaining in\n* state and returns intact when the filter clears.\n*\n* @example\n* ```ts\n* const bounds = table_getCellSelectionBounds(table)\n* ```\n*/\nfunction table_getCellSelectionBounds(table) {\n\tconst ranges = table.atoms.cellSelection?.get();\n\tif (!ranges?.length) return [];\n\tconst rows = table.getRowsInDisplayOrder();\n\tconst columnIndexes = callMemoOrStaticFn(table, \"getCellSelectionColumnIndexes\", table_getCellSelectionColumnIndexes);\n\tconst operations = [];\n\tfor (let i = 0; i < ranges.length; i++) {\n\t\tconst range = ranges[i];\n\t\tconst anchorRowIndex = resolveRowIndex(table, rows, range.anchorRowId);\n\t\tconst focusRowIndex = resolveRowIndex(table, rows, range.focusRowId);\n\t\tconst anchorColumnIndex = columnIndexes[range.anchorColumnId] ?? -1;\n\t\tconst focusColumnIndex = columnIndexes[range.focusColumnId] ?? -1;\n\t\tif (anchorRowIndex < 0 || focusRowIndex < 0 || anchorColumnIndex < 0 || focusColumnIndex < 0) continue;\n\t\toperations.push({\n\t\t\tminRowIndex: Math.min(anchorRowIndex, focusRowIndex),\n\t\t\tmaxRowIndex: Math.max(anchorRowIndex, focusRowIndex),\n\t\t\tminColumnIndex: Math.min(anchorColumnIndex, focusColumnIndex),\n\t\t\tmaxColumnIndex: Math.max(anchorColumnIndex, focusColumnIndex),\n\t\t\toperation: range.operation ?? \"include\"\n\t\t});\n\t}\n\tconst merges = callMemoOrStaticFn(table, \"getCellSelectionMergeBounds\", table_getCellSelectionMergeBounds);\n\tif (merges.length) for (let i = 0; i < operations.length; i++) {\n\t\tconst operation = operations[i];\n\t\tconst expanded = expandCellSelectionBounds(operation, merges);\n\t\toperation.minRowIndex = expanded.minRowIndex;\n\t\toperation.maxRowIndex = expanded.maxRowIndex;\n\t\toperation.minColumnIndex = expanded.minColumnIndex;\n\t\toperation.maxColumnIndex = expanded.maxColumnIndex;\n\t}\n\treturn applyCellSelectionBoundsOperations(operations);\n}\n/**\n* Tests whether an index pair falls inside any resolved rectangle.\n*/\nfunction isWithinBounds(bounds, rowIndex, columnIndex) {\n\tfor (let i = 0; i < bounds.length; i++) {\n\t\tconst bound = bounds[i];\n\t\tif (rowIndex >= bound.minRowIndex && rowIndex <= bound.maxRowIndex && columnIndex >= bound.minColumnIndex && columnIndex <= bound.maxColumnIndex) return true;\n\t}\n\treturn false;\n}\n/**\n* Checks whether this cell can currently be selected.\n*\n* A column def opting out with `enableCellSelection: false` wins over the table\n* option, matching how the other per-column enable flags resolve.\n*\n* @example\n* ```ts\n* const canSelect = cell_getCanSelect(cell)\n* ```\n*/\nfunction cell_getCanSelect(cell) {\n\tif (cell.column.columnDef.enableCellSelection === false) return false;\n\tconst enabled = cell.table.options.enableCellSelection;\n\tif (typeof enabled === \"function\") return enabled(cell);\n\treturn enabled ?? true;\n}\n/**\n* Resolves a cell to the coordinates every selection read needs.\n*\n* Shared by `getIsSelected` and `getSelectionEdges` so a render pass resolves\n* each cell once. Resolving in both meant every cell paid for the bounds memo,\n* the display index, and the column index map twice over.\n*\n* Returns `null` when the cell cannot participate in a selection at all.\n*/\nfunction resolveCellPosition(cell) {\n\tconst table = cell.table;\n\tconst bounds = callMemoOrStaticFn(table, \"getCellSelectionBounds\", table_getCellSelectionBounds);\n\tif (!bounds.length) return null;\n\tif (!callMemoOrStaticFn(cell, \"getCanSelect\", cell_getCanSelect)) return null;\n\tconst rowIndex = cell.row.getDisplayIndex();\n\tif (rowIndex < 0) return null;\n\tconst columnIndex = callMemoOrStaticFn(table, \"getCellSelectionColumnIndexes\", table_getCellSelectionColumnIndexes)[cell.column.id] ?? -1;\n\tif (columnIndex < 0) return null;\n\treturn {\n\t\tbounds,\n\t\trowIndex,\n\t\tcolumnIndex\n\t};\n}\n/**\n* Checks whether this cell falls inside the final positive selection.\n*\n* Deliberately not memoized. Registering this through `assignPrototypeAPIs`\n* with `memoDeps` would allocate a memo closure and dependency array per cell,\n* which costs more than the handful of integer comparisons it would save.\n*\n* @example\n* ```ts\n* const isSelected = cell_getIsSelected(cell)\n* ```\n*/\nfunction cell_getIsSelected(cell) {\n\tconst position = resolveCellPosition(cell);\n\tif (!position) return false;\n\treturn isWithinBounds(position.bounds, position.rowIndex, position.columnIndex);\n}\n/**\n* Checks whether this cell is the active cell.\n*\n* @example\n* ```ts\n* const isFocused = cell_getIsFocused(cell)\n* ```\n*/\nfunction cell_getIsFocused(cell) {\n\tconst ranges = cell.table.atoms.cellSelection?.get();\n\tconst active = ranges?.[ranges.length - 1];\n\tif (!active) return false;\n\treturn active.anchorRowId === cell.row.id && active.anchorColumnId === cell.column.id;\n}\n/**\n* Returns `0` for the focused cell and `-1` otherwise, for roving tabindex.\n*\n* @example\n* ```ts\n* const tabIndex = cell_getTabIndex(cell)\n* ```\n*/\nfunction cell_getTabIndex(cell) {\n\treturn callMemoOrStaticFn(cell, \"getIsFocused\", cell_getIsFocused) ? 0 : -1;\n}\n/**\n* Returns which sides of this cell sit on the outer boundary of the selection.\n*\n* A side is an edge when the neighbouring cell in that direction is not itself\n* covered by a range, which is what lets a consumer draw a single outline\n* around an arbitrary union of rectangles.\n*\n* @example\n* ```ts\n* const { top, right, bottom, left } = cell_getSelectionEdges(cell)\n* ```\n*/\nfunction cell_getSelectionEdges(cell) {\n\tconst none = {\n\t\ttop: false,\n\t\tright: false,\n\t\tbottom: false,\n\t\tleft: false\n\t};\n\tconst position = resolveCellPosition(cell);\n\tif (!position) return none;\n\tconst { bounds, rowIndex, columnIndex } = position;\n\tif (!isWithinBounds(bounds, rowIndex, columnIndex)) return none;\n\tconst merges = callMemoOrStaticFn(cell.table, \"getCellSelectionMergeBounds\", table_getCellSelectionMergeBounds);\n\tconst merge = merges.length ? findMergeBoundsAt(merges, rowIndex, columnIndex) : void 0;\n\tif (!merge) return {\n\t\ttop: !isWithinBounds(bounds, rowIndex - 1, columnIndex),\n\t\tright: !isWithinBounds(bounds, rowIndex, columnIndex + 1),\n\t\tbottom: !isWithinBounds(bounds, rowIndex + 1, columnIndex),\n\t\tleft: !isWithinBounds(bounds, rowIndex, columnIndex - 1)\n\t};\n\treturn {\n\t\ttop: isStripOutside(bounds, merge.minRowIndex - 1, merge.minColumnIndex, merge.maxColumnIndex, true),\n\t\tright: isStripOutside(bounds, merge.maxColumnIndex + 1, merge.minRowIndex, merge.maxRowIndex, false),\n\t\tbottom: isStripOutside(bounds, merge.maxRowIndex + 1, merge.minColumnIndex, merge.maxColumnIndex, true),\n\t\tleft: isStripOutside(bounds, merge.minColumnIndex - 1, merge.minRowIndex, merge.maxRowIndex, false)\n\t};\n}\nfunction isStripOutside(bounds, fixedIndex, from, to, fixedIsRow) {\n\tfor (let i = from; i <= to; i++) if (!isWithinBounds(bounds, fixedIsRow ? fixedIndex : i, fixedIsRow ? i : fixedIndex)) return true;\n\treturn false;\n}\n/**\n* Returns the active cell, i.e. the anchor of the most recent operation.\n*\n* Focus is derived rather than stored: in spreadsheet semantics, dragging from\n* A1 to C5 leaves the active cell at A1, so the active range's anchor already\n* is the active cell.\n*\n* @example\n* ```ts\n* const cell = table_getFocusedCell(table)\n* ```\n*/\nfunction table_getFocusedCell(table) {\n\tconst ranges = table.atoms.cellSelection?.get();\n\tconst active = ranges?.[ranges.length - 1];\n\tif (!active) return void 0;\n\treturn (table.getPrePaginatedRowModel().rowsById[active.anchorRowId] ?? table.getCoreRowModel().rowsById[active.anchorRowId])?.getAllCellsByColumnId()[active.anchorColumnId];\n}\n/**\n* Collapses the selection to a single cell at the given coordinates.\n*\n* @example\n* ```ts\n* table_setFocusedCell(table, '3', 'firstName')\n* ```\n*/\nfunction table_setFocusedCell(table, rowId, columnId) {\n\ttable_selectCellRange(table, {\n\t\tanchorRowId: rowId,\n\t\tanchorColumnId: columnId,\n\t\tfocusRowId: rowId,\n\t\tfocusColumnId: columnId\n\t});\n}\n/**\n* Selects a rectangle using replace, include, or exclude semantics.\n*\n* @example\n* ```ts\n* table_selectCellRange(table, range, { mode: 'exclude' })\n* ```\n*/\nfunction table_selectCellRange(table, range, opts) {\n\tconst mode = opts?.mode ?? (opts?.additive ? \"include\" : \"replace\");\n\tconst { operation: _operation, ...coordinates } = range;\n\tconst nextRange = mode === \"exclude\" ? {\n\t\t...coordinates,\n\t\toperation: \"exclude\"\n\t} : coordinates;\n\ttable_setCellSelection(table, (old) => mode === \"replace\" ? [nextRange] : [...old, nextRange]);\n}\n/**\n* Returns the visible leaf columns that permit selection, in display order.\n*\n* A column-level opt-out is enough to exclude a column here; a per-cell\n* predicate is not consulted, since navigation and select-all work in column\n* space rather than cell space.\n*/\nfunction getSelectableColumns(table) {\n\tconst columns = getDisplayOrderedColumns(table);\n\tif (table.options.enableCellSelection === false) return [];\n\treturn columns.filter((column) => column.columnDef.enableCellSelection !== false);\n}\n/**\n* Selects every selectable cell in the table as one range.\n*\n* @example\n* ```ts\n* table_selectAllCells(table)\n* ```\n*/\nfunction table_selectAllCells(table) {\n\tconst rows = table.getRowsInDisplayOrder();\n\tconst columns = getSelectableColumns(table);\n\tif (!rows.length || !columns.length) return;\n\ttable_selectCellRange(table, {\n\t\tanchorRowId: rows[0].id,\n\t\tanchorColumnId: columns[0].id,\n\t\tfocusRowId: rows[rows.length - 1].id,\n\t\tfocusColumnId: columns[columns.length - 1].id\n\t});\n}\n/**\n* Resolves a direction into row and column deltas.\n*/\nfunction getDirectionDelta(direction) {\n\tswitch (direction) {\n\t\tcase \"up\": return {\n\t\t\trowDelta: -1,\n\t\t\tcolumnDelta: 0\n\t\t};\n\t\tcase \"down\": return {\n\t\t\trowDelta: 1,\n\t\t\tcolumnDelta: 0\n\t\t};\n\t\tcase \"left\": return {\n\t\t\trowDelta: 0,\n\t\t\tcolumnDelta: -1\n\t\t};\n\t\tdefault: return {\n\t\t\trowDelta: 0,\n\t\t\tcolumnDelta: 1\n\t\t};\n\t}\n}\n/**\n* Steps one cell in a direction from a starting coordinate.\n*\n* Columns that cannot be selected are skipped over rather than landed on, so\n* arrow navigation never parks on an opted-out column. Returns `null` when the\n* step would leave the grid or find no selectable column.\n*/\nfunction stepCoordinate(table, rowId, columnId, direction) {\n\tconst rows = table.getRowModel().rows;\n\tconst columns = getDisplayOrderedColumns(table);\n\tif (!rows.length || !columns.length) return null;\n\tconst { rowDelta, columnDelta } = getDirectionDelta(direction);\n\tconst rowIndex = rows.findIndex((row) => row.id === rowId);\n\tconst columnIndex = columns.findIndex((column) => column.id === columnId);\n\tif (rowIndex < 0 || columnIndex < 0) return null;\n\tconst merges = callMemoOrStaticFn(table, \"getCellSelectionMergeBounds\", table_getCellSelectionMergeBounds);\n\tlet fromRowIndex = rows[rowIndex].getDisplayIndex();\n\tlet fromColumnIndex = columnIndex;\n\tif (merges.length) {\n\t\tconst startMerge = findMergeBoundsAt(merges, rowIndex, columnIndex);\n\t\tif (startMerge) {\n\t\t\tif (rowDelta > 0) fromRowIndex = startMerge.maxRowIndex;\n\t\t\tif (rowDelta < 0) fromRowIndex = startMerge.minRowIndex;\n\t\t\tif (columnDelta > 0) fromColumnIndex = startMerge.maxColumnIndex;\n\t\t\tif (columnDelta < 0) fromColumnIndex = startMerge.minColumnIndex;\n\t\t}\n\t}\n\tlet nextRowIndex = rowIndex + rowDelta;\n\tif (rowDelta && fromRowIndex !== rows[rowIndex].getDisplayIndex()) {\n\t\tconst edgeRowIndex = rows.findIndex((row) => row.getDisplayIndex() === fromRowIndex);\n\t\tif (edgeRowIndex < 0) return null;\n\t\tnextRowIndex = edgeRowIndex + rowDelta;\n\t}\n\tif (nextRowIndex < 0 || nextRowIndex >= rows.length) return null;\n\tconst selectableColumnIds = new Set(getSelectableColumns(table).map((column) => column.id));\n\tif (!selectableColumnIds.size) return null;\n\tlet nextColumnIndex = fromColumnIndex;\n\tif (columnDelta) do\n\t\tnextColumnIndex += columnDelta;\n\twhile (nextColumnIndex >= 0 && nextColumnIndex < columns.length && !selectableColumnIds.has(columns[nextColumnIndex].id));\n\telse if (!selectableColumnIds.has(columnId)) for (let distance = 1; distance < columns.length; distance++) {\n\t\tconst before = columns[columnIndex - distance];\n\t\tconst after = columns[columnIndex + distance];\n\t\tif (before && selectableColumnIds.has(before.id)) {\n\t\t\tnextColumnIndex = columnIndex - distance;\n\t\t\tbreak;\n\t\t}\n\t\tif (after && selectableColumnIds.has(after.id)) {\n\t\t\tnextColumnIndex = columnIndex + distance;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (nextColumnIndex < 0 || nextColumnIndex >= columns.length || !selectableColumnIds.has(columns[nextColumnIndex].id)) return null;\n\tlet landingRowIndex = nextRowIndex;\n\tlet landingColumnIndex = nextColumnIndex;\n\tif (merges.length) {\n\t\tconst landingMerge = findMergeBoundsAt(merges, rows[nextRowIndex].getDisplayIndex(), nextColumnIndex);\n\t\tif (landingMerge) {\n\t\t\tlandingRowIndex = rows.findIndex((row) => row.getDisplayIndex() === landingMerge.minRowIndex);\n\t\t\tif (landingRowIndex < 0) return null;\n\t\t\tlandingColumnIndex = landingMerge.minColumnIndex;\n\t\t}\n\t}\n\tconst landingRow = rows[landingRowIndex];\n\tconst landingColumn = columns[landingColumnIndex];\n\tif (!landingRow || !landingColumn) return null;\n\treturn {\n\t\trowId: landingRow.id,\n\t\tcolumnId: landingColumn.id\n\t};\n}\n/**\n* Moves the selection one step in a direction, collapsing it to a single cell.\n*\n* With nothing selected, this selects the first selectable cell so keyboard\n* navigation has somewhere to start.\n*\n* @example\n* ```ts\n* table_moveCellSelection(table, 'down')\n* ```\n*/\nfunction table_moveCellSelection(table, direction) {\n\tconst ranges = table.atoms.cellSelection?.get();\n\tconst active = ranges?.[ranges.length - 1];\n\tif (!active) {\n\t\tconst rows = table.getRowModel().rows;\n\t\tconst columns = getSelectableColumns(table);\n\t\tif (!rows.length || !columns.length) return;\n\t\ttable_setFocusedCell(table, rows[0].id, columns[0].id);\n\t\treturn;\n\t}\n\tconst next = stepCoordinate(table, active.anchorRowId, active.anchorColumnId, direction);\n\tif (!next) return;\n\ttable_setFocusedCell(table, next.rowId, next.columnId);\n}\n/**\n* Extends the active range one step in a direction, keeping its anchor fixed.\n*\n* @example\n* ```ts\n* table_extendCellSelection(table, 'right')\n* ```\n*/\nfunction table_extendCellSelection(table, direction) {\n\tconst ranges = table.atoms.cellSelection?.get();\n\tconst active = ranges?.[ranges.length - 1];\n\tif (!active) {\n\t\ttable_moveCellSelection(table, direction);\n\t\treturn;\n\t}\n\tconst next = stepCoordinate(table, active.focusRowId, active.focusColumnId, direction);\n\tif (!next) return;\n\ttable_setCellSelection(table, (old) => {\n\t\tif (!old.length) return old;\n\t\tconst nextRanges = old.slice(0, -1);\n\t\tnextRanges.push({\n\t\t\t...old[old.length - 1],\n\t\t\tfocusRowId: next.rowId,\n\t\t\tfocusColumnId: next.columnId\n\t\t});\n\t\treturn nextRanges;\n\t});\n}\n/**\n* Walks each final positive region, invoking a visitor per selectable cell.\n*\n* Every expansion API shares this so the per-cell enable predicate is applied\n* in exactly one place.\n*/\nfunction forEachSelectedCell(table, visit, skipCovered = false) {\n\tconst bounds = callMemoOrStaticFn(table, \"getCellSelectionBounds\", table_getCellSelectionBounds);\n\tif (!bounds.length) return;\n\tconst rows = table.getRowsInDisplayOrder();\n\tconst columns = getDisplayOrderedColumns(table);\n\tfor (let i = 0; i < bounds.length; i++) {\n\t\tconst bound = bounds[i];\n\t\tfor (let rowIndex = bound.minRowIndex; rowIndex <= bound.maxRowIndex; rowIndex++) {\n\t\t\tconst row = rows[rowIndex];\n\t\t\tif (!row) continue;\n\t\t\tconst cellsByColumnId = row.getAllCellsByColumnId();\n\t\t\tfor (let columnIndex = bound.minColumnIndex; columnIndex <= bound.maxColumnIndex; columnIndex++) {\n\t\t\t\tconst column = columns[columnIndex];\n\t\t\t\tif (!column) continue;\n\t\t\t\tconst cell = cellsByColumnId[column.id];\n\t\t\t\tif (!cell) continue;\n\t\t\t\tif (!callMemoOrStaticFn(cell, \"getCanSelect\", cell_getCanSelect)) continue;\n\t\t\t\tif (skipCovered && cell.getIsCovered?.()) continue;\n\t\t\t\tvisit(cell, i, rowIndex - bound.minRowIndex, columnIndex - bound.minColumnIndex);\n\t\t\t}\n\t\t}\n\t}\n}\n/**\n* Returns the ids of all selected cells, in row-major order.\n*\n* Cells covered by overlapping ranges are returned once, at their first\n* occurrence.\n*\n* @example\n* ```ts\n* const ids = table_getSelectedCellIds(table)\n* ```\n*/\nfunction table_getSelectedCellIds(table) {\n\tconst ids = [];\n\tconst seen = /* @__PURE__ */ new Set();\n\tforEachSelectedCell(table, (cell) => {\n\t\tif (seen.has(cell.id)) return;\n\t\tseen.add(cell.id);\n\t\tids.push(cell.id);\n\t}, true);\n\treturn ids;\n}\n/**\n* Returns each final positive region's values as a row-major grid.\n*\n* This is the raw material for clipboard export. Serializing it to text is left\n* to userland, since the delimiter, the null representation, and whether values\n* containing delimiters get quoted are all application decisions.\n*\n* @example\n* ```ts\n* const [firstRange] = table_getSelectedCellRangesData(table)\n* ```\n*/\nfunction table_getSelectedCellRangesData(table) {\n\tconst grids = [];\n\tforEachSelectedCell(table, (cell, rangeIndex, rowOffset) => {\n\t\tconst grid = grids[rangeIndex] ??= [];\n\t\t(grid[rowOffset] ??= []).push(cell.getValue());\n\t});\n\treturn grids;\n}\n/**\n* Returns the number of selected cells.\n*\n* Uses rectangle arithmetic over the normalized, disjoint positive regions.\n* A per-cell `enableCellSelection` predicate requires enumeration.\n*\n* @example\n* ```ts\n* const count = table_getSelectedCellCount(table)\n* ```\n*/\nfunction table_getSelectedCellCount(table) {\n\tif (table.options.enableCellSelection === false) return 0;\n\tconst bounds = callMemoOrStaticFn(table, \"getCellSelectionBounds\", table_getCellSelectionBounds);\n\tif (!bounds.length) return 0;\n\tconst merges = callMemoOrStaticFn(table, \"getCellSelectionMergeBounds\", table_getCellSelectionMergeBounds);\n\tif (typeof table.options.enableCellSelection === \"function\" || merges.length) {\n\t\tconst ids = /* @__PURE__ */ new Set();\n\t\tforEachSelectedCell(table, (cell) => ids.add(cell.id), true);\n\t\treturn ids.size;\n\t}\n\tconst columns = getDisplayOrderedColumns(table);\n\tlet count = 0;\n\tfor (const bound of bounds) {\n\t\tlet selectableColumns = 0;\n\t\tfor (let columnIndex = bound.minColumnIndex; columnIndex <= bound.maxColumnIndex; columnIndex++) {\n\t\t\tconst column = columns[columnIndex];\n\t\t\tif (!column) continue;\n\t\t\tif (column.columnDef.enableCellSelection !== false) selectableColumns++;\n\t\t}\n\t\tcount += (bound.maxRowIndex - bound.minRowIndex + 1) * selectableColumns;\n\t}\n\treturn count;\n}\n/**\n* Returns the ids of all rows intersected by the selection.\n*\n* @example\n* ```ts\n* const rowIds = table_getCellSelectionRowIds(table)\n* ```\n*/\nfunction table_getCellSelectionRowIds(table) {\n\tconst bounds = callMemoOrStaticFn(table, \"getCellSelectionBounds\", table_getCellSelectionBounds);\n\tif (!bounds.length) return [];\n\tconst rows = table.getRowsInDisplayOrder();\n\tconst seen = /* @__PURE__ */ new Set();\n\tconst ids = [];\n\tfor (let i = 0; i < bounds.length; i++) {\n\t\tconst bound = bounds[i];\n\t\tfor (let index = bound.minRowIndex; index <= bound.maxRowIndex; index++) {\n\t\t\tconst row = rows[index];\n\t\t\tif (!row || seen.has(row.id)) continue;\n\t\t\tseen.add(row.id);\n\t\t\tids.push(row.id);\n\t\t}\n\t}\n\treturn ids;\n}\n/**\n* Returns the ids of all columns intersected by the selection.\n*\n* @example\n* ```ts\n* const columnIds = table_getCellSelectionColumnIds(table)\n* ```\n*/\nfunction table_getCellSelectionColumnIds(table) {\n\tconst bounds = callMemoOrStaticFn(table, \"getCellSelectionBounds\", table_getCellSelectionBounds);\n\tif (!bounds.length) return [];\n\tconst columns = getDisplayOrderedColumns(table);\n\tconst seen = /* @__PURE__ */ new Set();\n\tconst ids = [];\n\tfor (let i = 0; i < bounds.length; i++) {\n\t\tconst bound = bounds[i];\n\t\tfor (let index = bound.minColumnIndex; index <= bound.maxColumnIndex; index++) {\n\t\t\tconst column = columns[index];\n\t\t\tif (!column || seen.has(column.id)) continue;\n\t\t\tif (column.columnDef.enableCellSelection === false) continue;\n\t\t\tseen.add(column.id);\n\t\t\tids.push(column.id);\n\t\t}\n\t}\n\treturn ids;\n}\n/**\n* Creates a handler that begins a selection at this cell.\n*\n* Follows `header_getResizeHandler`: the enable check is resolved once outside\n* the returned closure and guarded again inside it, the document is injectable\n* for SSR and cross-document rendering, and the document-level `mouseup`\n* listener is attached here so a drag released outside the table still ends.\n*\n* @example\n* ```tsx\n* <td onMouseDown={cell.getSelectionStartHandler()} />\n* ```\n*/\nfunction cell_getSelectionStartHandler(cell, _contextDocument) {\n\tconst canSelect = cell_getCanSelect(cell);\n\treturn (e) => {\n\t\tif (!canSelect) return;\n\t\tconst table = cell.table;\n\t\tconst options = table.options;\n\t\tconst contextDocument = _contextDocument ?? (typeof document !== \"undefined\" ? document : null);\n\t\tconst isRangeEvent = options.enableCellRangeSelection !== false && (options.isCellRangeSelectionEvent?.(e) ?? false);\n\t\tconst isMultiRangeEvent = options.enableMultiCellRangeSelection !== false && (options.isMultiCellRangeSelectionEvent?.(e) ?? false);\n\t\tif (options.enableCellSelectionDrag !== false && options.enableCellRangeSelection !== false && contextDocument) {\n\t\t\ttable._isSelectingCells = true;\n\t\t\tconst upHandler = () => {\n\t\t\t\tcontextDocument.removeEventListener(\"mouseup\", upHandler);\n\t\t\t\ttable._isSelectingCells = false;\n\t\t\t};\n\t\t\tcontextDocument.addEventListener(\"mouseup\", upHandler);\n\t\t}\n\t\tconst rowId = cell.row.id;\n\t\tconst columnId = cell.column.id;\n\t\tconst shouldExclude = isMultiRangeEvent && callMemoOrStaticFn(cell, \"getIsSelected\", cell_getIsSelected);\n\t\ttable_setCellSelection(table, (old) => {\n\t\t\tconst active = old[old.length - 1];\n\t\t\tif (isRangeEvent && active) {\n\t\t\t\tconst ranges = old.slice(0, -1);\n\t\t\t\tranges.push({\n\t\t\t\t\t...active,\n\t\t\t\t\tfocusRowId: rowId,\n\t\t\t\t\tfocusColumnId: columnId\n\t\t\t\t});\n\t\t\t\treturn ranges;\n\t\t\t}\n\t\t\tconst range = {\n\t\t\t\tanchorRowId: rowId,\n\t\t\t\tanchorColumnId: columnId,\n\t\t\t\tfocusRowId: rowId,\n\t\t\t\tfocusColumnId: columnId,\n\t\t\t\t...shouldExclude ? { operation: \"exclude\" } : {}\n\t\t\t};\n\t\t\treturn isMultiRangeEvent ? [...old, range] : [range];\n\t\t});\n\t};\n}\n/**\n* Creates a handler that extends the active range to this cell during a drag.\n*\n* No rAF coalescing is needed here, unlike the resize handler: `mouseenter`\n* fires once per cell boundary crossed rather than continuously, and deferring\n* it by a frame would only delay the highlight.\n*\n* @example\n* ```tsx\n* <td onMouseEnter={cell.getSelectionExtendHandler()} />\n* ```\n*/\nfunction cell_getSelectionExtendHandler(cell) {\n\tconst canSelect = cell_getCanSelect(cell);\n\treturn (_e) => {\n\t\tif (!canSelect) return;\n\t\tconst table = cell.table;\n\t\tif (!table._isSelectingCells) return;\n\t\tconst ranges = table.atoms.cellSelection?.get();\n\t\tconst active = ranges?.[ranges.length - 1];\n\t\tif (!active) return;\n\t\tconst rowId = cell.row.id;\n\t\tconst columnId = cell.column.id;\n\t\tif (active.focusRowId === rowId && active.focusColumnId === columnId) return;\n\t\ttable_setCellSelection(table, (old) => {\n\t\t\tif (!old.length) return old;\n\t\t\tconst next = old.slice(0, -1);\n\t\t\tnext.push({\n\t\t\t\t...old[old.length - 1],\n\t\t\t\tfocusRowId: rowId,\n\t\t\t\tfocusColumnId: columnId\n\t\t\t});\n\t\t\treturn next;\n\t\t});\n\t};\n}\n\n//#endregion\nexport { cell_getCanSelect, cell_getIsFocused, cell_getIsSelected, cell_getSelectionEdges, cell_getSelectionExtendHandler, cell_getSelectionStartHandler, cell_getTabIndex, getDefaultCellSelectionState, table_autoResetCellSelection, table_extendCellSelection, table_getCellSelectionBounds, table_getCellSelectionColumnIds, table_getCellSelectionColumnIndexes, table_getCellSelectionMergeBounds, table_getCellSelectionRowIds, table_getFocusedCell, table_getSelectedCellCount, table_getSelectedCellIds, table_getSelectedCellRangesData, table_moveCellSelection, table_resetCellSelection, table_selectAllCells, table_selectCellRange, table_setCellSelection, table_setFocusedCell };","import { cloneState, hasOwn, makeObjectMap, setStateSlice } from \"../../utils.js\";\n\n//#region src/features/row-expanding/rowExpandingFeature.utils.ts\n/**\n* Creates the default expanded state.\n*\n* The feature default is an empty map, meaning no rows are expanded. Reset APIs\n* use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const expanded = getDefaultExpandedState()\n* ```\n*/\nfunction getDefaultExpandedState() {\n\treturn makeObjectMap();\n}\n/**\n* Schedules an expanded-state reset after row-structure changes.\n*\n* The reset runs when `autoResetAll`, `autoResetExpanded`, or the default\n* client-side expanding behavior allows it. Manual expanding opts out unless\n* the reset options explicitly opt back in.\n*\n* @example\n* ```ts\n* table_autoResetExpanded(table)\n* ```\n*/\nfunction table_autoResetExpanded(table) {\n\tif (!table.atoms.expanded) return;\n\tif (table.options.autoResetAll ?? table.options.autoResetExpanded ?? !table.options.manualExpanding) table._reactivity.schedule(() => table_resetExpanded(table));\n}\n/**\n* Routes an expanded-state updater through the table's expanded change handler.\n*\n* The updater may be `true`, a row-id map, or a function of the previous\n* expanded state, matching the instance `table.setExpanded` behavior.\n*\n* @example\n* ```ts\n* table_setExpanded(table, (old) => ({ ...old, [rowId]: true }))\n* ```\n*/\nfunction table_setExpanded(table, updater) {\n\ttable.options.onExpandedChange?.(updater);\n}\n/**\n* Expands or collapses every row.\n*\n* Passing `true` stores the special expanded-all state. Passing `false` stores\n* an empty map. Omitting the value toggles based on whether all rows are\n* currently expanded.\n*\n* The call is a no-op (no `onExpandedChange`) when no row can expand or when\n* the requested state matches the current state exactly.\n*\n* @example\n* ```ts\n* table_toggleAllRowsExpanded(table)\n* ```\n*/\nfunction table_toggleAllRowsExpanded(table, expanded) {\n\tconst currentExpanded = table.atoms.expanded?.get() ?? {};\n\tif (expanded ?? !table_getIsAllRowsExpanded(table)) {\n\t\tif (currentExpanded === true) return;\n\t\tif (!table_getCanSomeRowsExpand(table)) return;\n\t\ttable_setExpanded(table, true);\n\t} else {\n\t\tif (currentExpanded !== true && !Object.keys(currentExpanded).length) return;\n\t\ttable_setExpanded(table, makeObjectMap());\n\t}\n}\n/**\n* Resets `expanded` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.expanded` when it\n* exists. Passing `true` ignores initial state and resets to `{}`.\n*\n* @example\n* ```ts\n* table_resetExpanded(table)\n* table_resetExpanded(table, true)\n* ```\n*/\nfunction table_resetExpanded(table, defaultState) {\n\tconst initialExpanded = table.initialState.expanded;\n\tsetStateSlice(table, \"expanded\", defaultState ? makeObjectMap() : initialExpanded === true ? true : Object.assign(makeObjectMap(), cloneState(initialExpanded ?? {})));\n}\n/**\n* Checks whether at least one pre-paginated row can expand.\n*\n* Pagination is intentionally ignored so controls can reflect expandable rows\n* that may not be on the current page.\n*\n* @example\n* ```ts\n* const canExpand = table_getCanSomeRowsExpand(table)\n* ```\n*/\nfunction table_getCanSomeRowsExpand(table) {\n\treturn table.getPrePaginatedRowModel().flatRows.some((row) => row_getCanExpand(row));\n}\n/**\n* Creates an event handler that toggles all rows expanded.\n*\n* @example\n* ```ts\n* const onClick = table_getToggleAllRowsExpandedHandler(table)\n* ```\n*/\nfunction table_getToggleAllRowsExpandedHandler(table) {\n\treturn (_e) => {\n\t\ttable_toggleAllRowsExpanded(table);\n\t};\n}\n/**\n* Checks whether any row is expanded.\n*\n* The special expanded-all value `true` counts as some rows expanded.\n*\n* @example\n* ```ts\n* const someExpanded = table_getIsSomeRowsExpanded(table)\n* ```\n*/\nfunction table_getIsSomeRowsExpanded(table) {\n\tconst expanded = table.atoms.expanded?.get() ?? {};\n\treturn expanded === true || Object.values(expanded).some(Boolean);\n}\n/**\n* Checks whether every expandable row in the current row model is expanded.\n*\n* The special expanded-all value `true` returns true immediately. Empty\n* expanded state returns false. Rows that cannot expand are ignored, so a\n* materialized expanded-all map (which only contains expandable row ids)\n* still counts as all rows expanded.\n*\n* @example\n* ```ts\n* const allExpanded = table_getIsAllRowsExpanded(table)\n* ```\n*/\nfunction table_getIsAllRowsExpanded(table) {\n\tconst expanded = table.atoms.expanded?.get() ?? {};\n\tif (expanded === true) return true;\n\tif (!Object.keys(expanded).length) return false;\n\tconst expandableRows = table.getRowModel().flatRows.filter((row) => row_getCanExpand(row));\n\tif (!expandableRows.length) return false;\n\tif (expandableRows.some((row) => !row_getIsExpanded(row))) return false;\n\treturn true;\n}\n/**\n* Computes the deepest expanded row id depth.\n*\n* Row ids are split on `.`; expanded-all state scans the current row model's\n* expandable rows, while explicit expanded state scans its expanded id keys.\n*\n* @example\n* ```ts\n* const depth = table_getExpandedDepth(table)\n* ```\n*/\nfunction table_getExpandedDepth(table) {\n\tlet maxDepth = 0;\n\tconst expanded = table.atoms.expanded?.get();\n\t(expanded === true ? Object.values(table.getRowModel().rowsById).filter((row) => row_getCanExpand(row)).map((row) => row.id) : Object.keys(expanded ?? {})).forEach((id) => {\n\t\tconst splitId = id.split(\".\");\n\t\tmaxDepth = Math.max(maxDepth, splitId.length);\n\t});\n\treturn maxDepth;\n}\n/**\n* Expands or collapses this row.\n*\n* Omitting `expanded` toggles the row. If the current state is expanded-all,\n* the function first materializes that state into a row-id map (containing\n* only expandable row ids) before applying the row-specific change.\n*\n* The call is a no-op (no `onExpandedChange`) when the requested state matches\n* the current state, or when expanding a row that cannot expand. Collapsing is\n* always allowed so stale expanded ids can be cleaned up.\n*\n* @example\n* ```ts\n* row_toggleExpanded(row)\n* ```\n*/\nfunction row_toggleExpanded(row, expanded) {\n\tconst currentExpanded = row.table.atoms.expanded?.get() ?? {};\n\tconst currentExists = currentExpanded === true || isExpandedRowId(currentExpanded, row.id);\n\tconst targetExpanded = expanded ?? !currentExists;\n\tif (targetExpanded === currentExists) return;\n\tif (targetExpanded && !row_getCanExpand(row)) return;\n\ttable_setExpanded(row.table, (old) => {\n\t\tconst exists = old === true ? true : isExpandedRowId(old, row.id);\n\t\tlet oldExpanded = makeObjectMap();\n\t\tif (old === true) Object.values(row.table.getRowModel().rowsById).forEach((rowModelRow) => {\n\t\t\tif (row_getCanExpand(rowModelRow)) oldExpanded[rowModelRow.id] = true;\n\t\t});\n\t\telse oldExpanded = Object.assign(makeObjectMap(), old);\n\t\tif (!exists && targetExpanded) {\n\t\t\toldExpanded[row.id] = true;\n\t\t\treturn oldExpanded;\n\t\t}\n\t\tif (exists && !targetExpanded) {\n\t\t\tconst rest = makeObjectMap();\n\t\t\tconst rowIds = Object.keys(oldExpanded);\n\t\t\tfor (let i = 0; i < rowIds.length; i++) {\n\t\t\t\tconst rowId = rowIds[i];\n\t\t\t\tif (rowId !== row.id && oldExpanded[rowId]) rest[rowId] = true;\n\t\t\t}\n\t\t\treturn rest;\n\t\t}\n\t\treturn old;\n\t});\n}\n/**\n* Checks whether this row is expanded.\n*\n* `options.getIsRowExpanded` can override state-derived behavior. Otherwise\n* the row is expanded when expanded state is `true` or contains this row id.\n*\n* @example\n* ```ts\n* const expanded = row_getIsExpanded(row)\n* ```\n*/\nfunction row_getIsExpanded(row) {\n\tconst expanded = row.table.atoms.expanded?.get() ?? {};\n\treturn !!(row.table.options.getIsRowExpanded?.(row) ?? (expanded === true || isExpandedRowId(expanded, row.id)));\n}\nfunction isExpandedRowId(expanded, rowId) {\n\treturn !!(expanded && expanded !== true && hasOwn(expanded, rowId) && expanded[rowId]);\n}\n/**\n* Checks whether this row can be expanded.\n*\n* `options.getRowCanExpand` wins when provided. Otherwise rows can expand when\n* expanding is enabled and the row has subRows.\n*\n* @example\n* ```ts\n* const canExpand = row_getCanExpand(row)\n* ```\n*/\nfunction row_getCanExpand(row) {\n\treturn row.table.options.getRowCanExpand?.(row) ?? ((row.table.options.enableExpanding ?? true) && !!row.subRows.length);\n}\n/**\n* Checks whether every ancestor of this row is expanded.\n*\n* The current row is not considered; only its parent chain is walked.\n*\n* @example\n* ```ts\n* const parentsExpanded = row_getIsAllParentsExpanded(row)\n* ```\n*/\nfunction row_getIsAllParentsExpanded(row) {\n\tlet isFullyExpanded = true;\n\tlet currentRow = row;\n\twhile (isFullyExpanded && currentRow.parentId) {\n\t\tcurrentRow = row.table.getRow(currentRow.parentId, true);\n\t\tisFullyExpanded = row_getIsExpanded(currentRow);\n\t}\n\treturn isFullyExpanded;\n}\n/**\n* Creates a row control handler that toggles this row's expanded state.\n*\n* The handler is a no-op when the row cannot expand.\n*\n* @example\n* ```ts\n* const onClick = row_getToggleExpandedHandler(row)\n* ```\n*/\nfunction row_getToggleExpandedHandler(row) {\n\tconst canExpand = row_getCanExpand(row);\n\treturn () => {\n\t\tif (!canExpand) return;\n\t\trow_toggleExpanded(row);\n\t};\n}\n\n//#endregion\nexport { getDefaultExpandedState, row_getCanExpand, row_getIsAllParentsExpanded, row_getIsExpanded, row_getToggleExpandedHandler, row_toggleExpanded, table_autoResetExpanded, table_getCanSomeRowsExpand, table_getExpandedDepth, table_getIsAllRowsExpanded, table_getIsSomeRowsExpanded, table_getToggleAllRowsExpandedHandler, table_resetExpanded, table_setExpanded, table_toggleAllRowsExpanded };","import { cloneState, functionalUpdate, setStateSlice } from \"../../utils.js\";\n\n//#region src/features/row-pagination/rowPaginationFeature.utils.ts\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\n/**\n* Creates the default pagination state used by the pagination feature.\n*\n* The feature default starts at the first page with a page size of 10. Reset\n* APIs use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const pagination = getDefaultPaginationState()\n* ```\n*/\nfunction getDefaultPaginationState() {\n\treturn {\n\t\tpageIndex: defaultPageIndex,\n\t\tpageSize: defaultPageSize\n\t};\n}\n/**\n* Resets the page index when a page-altering change should return to page 0.\n*\n* The reset runs when `autoResetAll`, `autoResetPageIndex`, or the default\n* client-side pagination behavior allows it. Manual pagination opts out unless\n* the reset options explicitly opt back in.\n*\n* @example\n* ```ts\n* table_autoResetPageIndex(table)\n* ```\n*/\nfunction table_autoResetPageIndex(table) {\n\tif (table.options.autoResetAll ?? table.options.autoResetPageIndex ?? !table.options.manualPagination) {\n\t\tif ((table.atoms.pagination?.get()?.pageIndex ?? defaultPageIndex) === defaultPageIndex) return;\n\t\ttable_resetPageIndex(table, true);\n\t}\n}\n/**\n* Routes a pagination updater through the table's pagination change handler.\n*\n* The updater may be a next state object or a function of the previous\n* `PaginationState`; controlled state and external atoms observe the same\n* updater path as the instance API.\n*\n* @example\n* ```ts\n* table_setPagination(table, (old) => old)\n* ```\n*/\nfunction table_setPagination(table, updater) {\n\tsetStateSlice(table, \"pagination\", updater);\n}\n/**\n* Resets `pagination` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.pagination` when it\n* exists. Passing `true` ignores initial state and resets to\n* `{ pageIndex: 0, pageSize: 10 }`.\n*\n* @example\n* ```ts\n* table_resetPagination(table)\n* table_resetPagination(table, true)\n* ```\n*/\nfunction table_resetPagination(table, defaultState) {\n\ttable_setPagination(table, defaultState ? getDefaultPaginationState() : cloneState(table.initialState.pagination ?? getDefaultPaginationState()));\n}\n/**\n* Updates `pagination.pageIndex` and clamps it to the known page range.\n*\n* Unknown page counts (`undefined` or `-1`) allow any non-negative page index.\n* Known page counts clamp the index between `0` and `pageCount - 1`.\n*\n* @example\n* ```ts\n* table_setPageIndex(table, (old) => old)\n* ```\n*/\nfunction table_setPageIndex(table, updater) {\n\ttable_setPagination(table, (old) => {\n\t\tlet pageIndex = functionalUpdate(updater, old.pageIndex);\n\t\tconst maxPageIndex = typeof table.options.pageCount === \"undefined\" || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n\t\tpageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n\t\treturn {\n\t\t\t...old,\n\t\t\tpageIndex\n\t\t};\n\t});\n}\n/**\n* Resets only `pagination.pageIndex`.\n*\n* With no argument, the reset uses `table.initialState.pagination?.pageIndex`\n* or `0`. Passing `true` always resets the page index to `0`.\n*\n* @example\n* ```ts\n* table_resetPageIndex(table)\n* table_resetPageIndex(table, true)\n* ```\n*/\nfunction table_resetPageIndex(table, defaultState) {\n\ttable_setPageIndex(table, defaultState ? defaultPageIndex : table.initialState.pagination?.pageIndex ?? defaultPageIndex);\n}\n/**\n* Resets only `pagination.pageSize`.\n*\n* With no argument, the reset uses `table.initialState.pagination?.pageSize`\n* or `10`. Passing `true` always resets the page size to `10`.\n*\n* @example\n* ```ts\n* table_resetPageSize(table)\n* table_resetPageSize(table, true)\n* ```\n*/\nfunction table_resetPageSize(table, defaultState) {\n\ttable_setPageSize(table, defaultState ? defaultPageSize : table.initialState.pagination?.pageSize ?? defaultPageSize);\n}\n/**\n* Updates `pagination.pageSize` while preserving the current top row.\n*\n* The new size is clamped to at least `1`, and `pageIndex` is recalculated so\n* the row that was previously at the top of the page remains in view.\n*\n* @example\n* ```ts\n* table_setPageSize(table, (old) => old)\n* ```\n*/\nfunction table_setPageSize(table, updater) {\n\ttable_setPagination(table, (old) => {\n\t\tconst pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n\t\tconst topRowIndex = old.pageSize === Infinity ? 0 : old.pageSize * old.pageIndex;\n\t\tconst pageIndex = pageSize === Infinity ? 0 : Math.floor(topRowIndex / pageSize);\n\t\treturn {\n\t\t\t...old,\n\t\t\tpageIndex,\n\t\t\tpageSize\n\t\t};\n\t});\n}\n/**\n* Builds the zero-based page indexes available for the current page count.\n*\n* Unknown or empty page counts return an empty array; otherwise the result is\n* `[0, 1, ...pageCount - 1]`.\n*\n* @example\n* ```ts\n* const pageIndexes = table_getPageOptions(table)\n* ```\n*/\nfunction table_getPageOptions(table) {\n\tconst pageCount = table_getPageCount(table);\n\tlet pageOptions = [];\n\tif (pageCount && pageCount > 0) pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n\treturn pageOptions;\n}\n/**\n* Checks whether the current page index can move backward.\n*\n* The first page is page index `0`, so only positive page indexes can navigate\n* to a previous page.\n*\n* @example\n* ```ts\n* const canGoBack = table_getCanPreviousPage(table)\n* ```\n*/\nfunction table_getCanPreviousPage(table) {\n\treturn (table.atoms.pagination?.get()?.pageIndex ?? 0) > 0;\n}\n/**\n* Checks whether the current page index can move forward.\n*\n* A `pageCount` of `-1` means the caller does not know the total page count, so\n* this returns `true`. A page count of `0` returns `false`.\n*\n* @example\n* ```ts\n* const canGoForward = table_getCanNextPage(table)\n* ```\n*/\nfunction table_getCanNextPage(table) {\n\tconst pageIndex = table.atoms.pagination?.get()?.pageIndex ?? defaultPageIndex;\n\tconst pageCount = table_getPageCount(table);\n\tif (pageCount === -1) return true;\n\tif (pageCount === 0) return false;\n\treturn pageIndex < pageCount - 1;\n}\n/**\n* Checks whether a known, finite last page exists after the current page.\n*\n* Unknown (`-1`), empty, and non-finite page counts do not have a navigable\n* last page.\n*\n* @example\n* ```ts\n* const canGoToLastPage = table_getCanLastPage(table)\n* ```\n*/\nfunction table_getCanLastPage(table) {\n\tconst pageIndex = table.atoms.pagination?.get()?.pageIndex ?? defaultPageIndex;\n\tconst pageCount = table_getPageCount(table);\n\treturn Number.isFinite(pageCount) && pageCount > 0 && pageIndex < pageCount - 1;\n}\n/**\n* Moves the table to the previous page.\n*\n* This delegates to `table_setPageIndex` so pagination state ownership and\n* updater semantics remain consistent.\n*\n* @example\n* ```ts\n* table_previousPage(table)\n* ```\n*/\nfunction table_previousPage(table) {\n\treturn table_setPageIndex(table, (old) => old - 1);\n}\n/**\n* Moves the table to the next page.\n*\n* This delegates to `table_setPageIndex` so pagination state ownership and\n* updater semantics remain consistent.\n*\n* @example\n* ```ts\n* table_nextPage(table)\n* ```\n*/\nfunction table_nextPage(table) {\n\treturn table_setPageIndex(table, (old) => {\n\t\treturn old + 1;\n\t});\n}\n/**\n* Moves the table to the first page.\n*\n* This is a convenience wrapper around `table_setPageIndex(table, 0)`.\n*\n* @example\n* ```ts\n* table_firstPage(table)\n* ```\n*/\nfunction table_firstPage(table) {\n\treturn table_setPageIndex(table, 0);\n}\n/**\n* Moves the table to the last known page.\n*\n* Unknown, empty, and non-finite page counts do not have a navigable last\n* page, so this does nothing for those states.\n*\n* @example\n* ```ts\n* table_lastPage(table)\n* ```\n*/\nfunction table_lastPage(table) {\n\tconst pageCount = table_getPageCount(table);\n\tif (!Number.isFinite(pageCount) || pageCount <= 0) return;\n\treturn table_setPageIndex(table, pageCount - 1);\n}\n/**\n* Resolves the number of pages for the current pagination state.\n*\n* `options.pageCount` wins for manual pagination. Otherwise the value is\n* calculated from `table_getRowCount(table)` and the current `pageSize`.\n*\n* @example\n* ```ts\n* const pages = table_getPageCount(table)\n* ```\n*/\nfunction table_getPageCount(table) {\n\tconst configuredPageCount = table.options.pageCount;\n\tif (configuredPageCount != null) return configuredPageCount;\n\tconst rowCount = table_getRowCount(table);\n\tconst pageSize = table.atoms.pagination?.get()?.pageSize ?? defaultPageSize;\n\tif (pageSize === Infinity && Number.isFinite(rowCount) && rowCount > 0) return 1;\n\treturn Math.ceil(rowCount / pageSize);\n}\n/**\n* Resolves the total row count used for pagination math.\n*\n* `options.rowCount` wins for manual pagination. Otherwise the count comes\n* from the pre-paginated row model so filtering, grouping, sorting, and\n* expansion are reflected before the page slice is applied.\n*\n* @example\n* ```ts\n* const rows = table_getRowCount(table)\n* ```\n*/\nfunction table_getRowCount(table) {\n\treturn table.options.rowCount ?? table.getPrePaginatedRowModel().rows.length;\n}\n\n//#endregion\nexport { getDefaultPaginationState, table_autoResetPageIndex, table_firstPage, table_getCanLastPage, table_getCanNextPage, table_getCanPreviousPage, table_getPageCount, table_getPageOptions, table_getRowCount, table_lastPage, table_nextPage, table_previousPage, table_resetPageIndex, table_resetPageSize, table_resetPagination, table_setPageIndex, table_setPageSize, table_setPagination };","import { cloneState, isFunction, setStateSlice } from \"../../utils.js\";\nimport { reSplitAlphaNumeric, sortFn_basic } from \"./sortFns.js\";\n\n//#region src/features/row-sorting/rowSortingFeature.utils.ts\n/**\n* Creates the default sorting state.\n*\n* The feature default is an empty array, meaning no columns are sorted. Reset\n* APIs use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const sorting = getDefaultSortingState()\n* ```\n*/\nfunction getDefaultSortingState() {\n\treturn [];\n}\n/**\n* Routes a sorting updater through the table's sorting change handler.\n*\n* The updater may be a next `SortingState` array or a function of the previous\n* sorting state, matching the instance `table.setSorting` behavior. State\n* owners receive an equality-guarded updater so structurally equal sorting\n* values preserve the owner's existing reference.\n*\n* @example\n* ```ts\n* table_setSorting(table, (old) => [...old, { id: 'age', desc: true }])\n* ```\n*/\nfunction table_setSorting(table, updater) {\n\tsetStateSlice(table, \"sorting\", updater);\n}\n/**\n* Resets `sorting` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.sorting` when it\n* exists. Passing `true` ignores initial state and resets to `[]`.\n*\n* @example\n* ```ts\n* table_resetSorting(table)\n* table_resetSorting(table, true)\n* ```\n*/\nfunction table_resetSorting(table, defaultState) {\n\ttable_setSorting(table, defaultState ? [] : cloneState(table.initialState.sorting ?? []));\n}\n/**\n* Resets sorting after the table data changes when explicitly enabled.\n*\n* Unlike other auto-reset behaviors, sorting is preserved by default. An\n* explicit `autoResetAll` value takes precedence over `autoResetSorting`.\n*\n* @example\n* ```ts\n* table_autoResetSorting(table)\n* ```\n*/\nfunction table_autoResetSorting(table) {\n\tif (!table.atoms.sorting) return;\n\tif (table.options.autoResetAll ?? table.options.autoResetSorting ?? false) table_resetSorting(table);\n}\n/**\n* Chooses a built-in sorting function from sampled filtered row values.\n*\n* Date-like values use `datetime`, mixed text/numeric strings use\n* `alphanumeric`, plain strings use `text`, and unknown values fall back to\n* `basic`.\n*\n* @example\n* ```ts\n* const sortFn = column_getAutoSortFn(column)\n* ```\n*/\nfunction column_getAutoSortFn(column) {\n\tconst sortFns = column.table._rowModelFns.sortFns;\n\tconst firstRows = column.table.getFilteredRowModel().flatRows.slice(0, 10);\n\tlet sortFnName;\n\tlet isString = false;\n\tfor (let i = 0; i < firstRows.length; i++) {\n\t\tconst value = firstRows[i].getValue(column.id);\n\t\tif (Object.prototype.toString.call(value) === \"[object Date]\") {\n\t\t\tsortFnName = \"datetime\";\n\t\t\tbreak;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\tisString = true;\n\t\t\tif (value.split(reSplitAlphaNumeric).length > 1) {\n\t\t\t\tsortFnName = \"alphanumeric\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (!sortFnName && isString) sortFnName = \"text\";\n\tif (sortFnName) {\n\t\tlet sortFn = sortFns?.[sortFnName];\n\t\tif (!sortFn) {\n\t\t\tif (process.env.NODE_ENV === \"development\") console.warn(`sortFn '${sortFnName}' (auto) for column '${column.id}' is not registered`);\n\t\t\tif (sortFnName === \"alphanumeric\") sortFn = sortFns?.text;\n\t\t}\n\t\tif (sortFn) return sortFn;\n\t}\n\treturn sortFn_basic;\n}\n/**\n* Chooses the default first sort direction from sampled filtered row values.\n*\n* The first non-nullish value among the sampled rows decides: string columns\n* start ascending so alphabetical order is natural; other value types (or\n* columns with no non-nullish sample) start descending. Sampling past leading\n* nullish values keeps the toggle cycle stable when sorting or a data swap\n* moves an empty value into the first row.\n*\n* @example\n* ```ts\n* const direction = column_getAutoSortDir(column)\n* ```\n*/\nfunction column_getAutoSortDir(column) {\n\tconst firstRows = column.table.getFilteredRowModel().flatRows.slice(0, 10);\n\tfor (let i = 0; i < firstRows.length; i++) {\n\t\tconst value = firstRows[i].getValue(column.id);\n\t\tif (value == null) continue;\n\t\treturn typeof value === \"string\" ? \"asc\" : \"desc\";\n\t}\n\treturn \"desc\";\n}\n/**\n* Resolves the sorting function configured for a column.\n*\n* Function-valued `columnDef.sortFn` is returned directly, `'auto'` delegates\n* to `column_getAutoSortFn`, and string values are looked up in the table's\n* sorting function registry before falling back to `basic`.\n*\n* @example\n* ```ts\n* const sortFn = column_getSortFn(column)\n* ```\n*/\nfunction column_getSortFn(column) {\n\tconst sortFns = column.table._rowModelFns.sortFns;\n\tif (isFunction(column.columnDef.sortFn)) return column.columnDef.sortFn;\n\tif (column.columnDef.sortFn === \"auto\") return column_getAutoSortFn(column);\n\tconst sortFn = sortFns?.[column.columnDef.sortFn];\n\tif (process.env.NODE_ENV === \"development\" && !sortFn) console.warn(`sortFn '${String(column.columnDef.sortFn)}' for column '${column.id}' is not registered`);\n\treturn sortFn ?? sortFn_basic;\n}\n/**\n* Applies the next sorting state for this column.\n*\n* The toggle can add, replace, flip, or remove this column's sort entry. Multi\n* sorting respects `enableMultiSort`, `enableMultiRemove`,\n* `maxMultiSortColCount`, and the `multi` argument.\n*\n* @example\n* ```ts\n* column_toggleSorting(column, undefined, true)\n* ```\n*/\nfunction column_toggleSorting(column, desc, multi) {\n\tconst nextSortingOrder = column_getNextSortingOrder(column, multi && column_getCanMultiSort(column));\n\tconst hasManualValue = typeof desc !== \"undefined\";\n\ttable_setSorting(column.table, (old) => {\n\t\tconst existingIndex = old.findIndex((d) => d.id === column.id);\n\t\tconst existingSorting = existingIndex === -1 ? void 0 : old[existingIndex];\n\t\tlet newSorting = [];\n\t\tlet sortAction;\n\t\tconst nextDesc = hasManualValue ? desc : nextSortingOrder === \"desc\";\n\t\tconst isMultiMode = !!(old.length && column_getCanMultiSort(column) && multi);\n\t\tif (isMultiMode) if (existingSorting) sortAction = \"toggle\";\n\t\telse sortAction = \"add\";\n\t\telse if (existingSorting) sortAction = \"toggle\";\n\t\telse sortAction = \"replace\";\n\t\tif (sortAction === \"toggle\") {\n\t\t\tif (!hasManualValue) {\n\t\t\t\tif (!nextSortingOrder) sortAction = \"remove\";\n\t\t\t}\n\t\t}\n\t\tif (sortAction === \"add\") {\n\t\t\tnewSorting = [...old, {\n\t\t\t\tid: column.id,\n\t\t\t\tdesc: nextDesc\n\t\t\t}];\n\t\t\tnewSorting.splice(0, newSorting.length - (column.table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER));\n\t\t} else if (sortAction === \"toggle\") newSorting = isMultiMode ? old.map((d) => {\n\t\t\tif (d.id === column.id) return {\n\t\t\t\t...d,\n\t\t\t\tdesc: nextDesc\n\t\t\t};\n\t\t\treturn d;\n\t\t}) : [{\n\t\t\tid: column.id,\n\t\t\tdesc: nextDesc\n\t\t}];\n\t\telse if (sortAction === \"remove\") newSorting = isMultiMode ? old.filter((d) => d.id !== column.id) : [];\n\t\telse newSorting = [{\n\t\t\tid: column.id,\n\t\t\tdesc: nextDesc\n\t\t}];\n\t\treturn newSorting;\n\t});\n}\n/**\n* Resolves the first direction used when this column begins sorting.\n*\n* Column-level `sortDescFirst` wins, then table-level `sortDescFirst`, then the\n* auto direction inferred from sampled values.\n*\n* @example\n* ```ts\n* const firstDirection = column_getFirstSortDir(column)\n* ```\n*/\nfunction column_getFirstSortDir(column) {\n\treturn column.columnDef.sortDescFirst ?? column.table.options.sortDescFirst ?? column_getAutoSortDir(column) === \"desc\" ? \"desc\" : \"asc\";\n}\n/**\n* Resolves the next sort order for this column's toggle cycle.\n*\n* The cycle starts with the first sort direction, flips between `asc` and\n* `desc`, and can return `false` when sorting removal is enabled.\n*\n* @example\n* ```ts\n* const nextOrder = column_getNextSortingOrder(column)\n* ```\n*/\nfunction column_getNextSortingOrder(column, multi) {\n\tconst firstSortDirection = column_getFirstSortDir(column);\n\tconst isSorted = column_getIsSorted(column);\n\tif (!isSorted) return firstSortDirection;\n\tif (isSorted !== firstSortDirection && (column.table.options.enableSortingRemoval ?? true) && (multi ? column.table.options.enableMultiRemove ?? true : true)) return false;\n\treturn isSorted === \"desc\" ? \"asc\" : \"desc\";\n}\n/**\n* Checks whether this accessor column can participate in sorting.\n*\n* The column must have an accessor and sorting must be enabled by both the\n* column definition and table options.\n*\n* @example\n* ```ts\n* const canSort = column_getCanSort(column)\n* ```\n*/\nfunction column_getCanSort(column) {\n\treturn (column.columnDef.enableSorting ?? true) && (column.table.options.enableSorting ?? true) && !!column.accessorFn;\n}\n/**\n* Checks whether this column can be added to a multi-sort state.\n*\n* Column-level `enableMultiSort` wins over table-level `enableMultiSort`; if\n* neither is set, accessor columns can multi-sort by default.\n*\n* @example\n* ```ts\n* const canMultiSort = column_getCanMultiSort(column)\n* ```\n*/\nfunction column_getCanMultiSort(column) {\n\treturn column.columnDef.enableMultiSort ?? column.table.options.enableMultiSort ?? !!column.accessorFn;\n}\n/**\n* Reads this column's current sort direction.\n*\n* The result is `false` when the column is not sorted, otherwise `'asc'` or\n* `'desc'` based on the column's entry in `state.sorting`.\n*\n* @example\n* ```ts\n* const direction = column_getIsSorted(column)\n* ```\n*/\nfunction column_getIsSorted(column) {\n\tconst columnSort = column.table.atoms.sorting?.get()?.find((d) => d.id === column.id);\n\treturn !columnSort ? false : columnSort.desc ? \"desc\" : \"asc\";\n}\n/**\n* Finds this column's position in the ordered `state.sorting` array.\n*\n* The result is `-1` when the column is not sorted.\n*\n* @example\n* ```ts\n* const index = column_getSortIndex(column)\n* ```\n*/\nfunction column_getSortIndex(column) {\n\treturn column.table.atoms.sorting?.get()?.findIndex((d) => d.id === column.id) ?? -1;\n}\n/**\n* Removes this column from the sorting state.\n*\n* Other sorted columns are preserved, including their relative order.\n*\n* @example\n* ```ts\n* column_clearSorting(column)\n* ```\n*/\nfunction column_clearSorting(column) {\n\ttable_setSorting(column.table, (old) => old.length ? old.filter((d) => d.id !== column.id) : []);\n}\n/**\n* Creates a header event handler that toggles this column's sorting.\n*\n* The handler ignores events when the column cannot sort, and asks\n* `options.isMultiSortEvent` whether the event should add to a multi-sort.\n*\n* @example\n* ```ts\n* const onClick = column_getToggleSortingHandler(column)\n* ```\n*/\nfunction column_getToggleSortingHandler(column) {\n\tconst canSort = column_getCanSort(column);\n\treturn (e) => {\n\t\tif (!canSort) return;\n\t\tcolumn_toggleSorting(column, void 0, column_getCanMultiSort(column) ? column.table.options.isMultiSortEvent?.(e) : false);\n\t};\n}\n\n//#endregion\nexport { column_clearSorting, column_getAutoSortDir, column_getAutoSortFn, column_getCanMultiSort, column_getCanSort, column_getFirstSortDir, column_getIsSorted, column_getNextSortingOrder, column_getSortFn, column_getSortIndex, column_getToggleSortingHandler, column_toggleSorting, getDefaultSortingState, table_autoResetSorting, table_resetSorting, table_setSorting };","import { makeObjectMap, skipFirstRun, tableMemo } from \"../../utils.js\";\nimport { constructRow } from \"../rows/constructRow.js\";\nimport { table_autoResetCellSelection } from \"../../features/cell-selection/cellSelectionFeature.utils.js\";\nimport { table_autoResetExpanded } from \"../../features/row-expanding/rowExpandingFeature.utils.js\";\nimport { table_autoResetPageIndex } from \"../../features/row-pagination/rowPaginationFeature.utils.js\";\nimport { table_autoResetSorting } from \"../../features/row-sorting/rowSortingFeature.utils.js\";\n\n//#region src/core/row-models/createCoreRowModel.ts\n/**\n* Creates a memoized core row model factory.\n*\n* The factory reads the relevant table state atoms and options, then returns a row model function used by the table row-model pipeline.\n*/\nfunction createCoreRowModel() {\n\treturn (table) => {\n\t\treturn tableMemo({\n\t\t\tfeature: \"coreRowModelsFeature\",\n\t\t\ttable,\n\t\t\tfnName: \"table.getCoreRowModel\",\n\t\t\tmemoDeps: () => [table.options.data],\n\t\t\tfn: () => _createCoreRowModel(table, table.options.data),\n\t\t\tonAfterUpdate: skipFirstRun(() => {\n\t\t\t\ttable_autoResetExpanded(table);\n\t\t\t\ttable_autoResetPageIndex(table);\n\t\t\t\ttable_autoResetSorting(table);\n\t\t\t\ttable_autoResetCellSelection(table);\n\t\t\t})\n\t\t});\n\t};\n}\nfunction accessRows(table, rowModel, originalRows, depth = 0, parentRow) {\n\tconst rows = [];\n\tfor (let i = 0; i < originalRows.length; i++) {\n\t\tconst originalRow = originalRows[i];\n\t\tconst row = constructRow(table, table.getRowId(originalRow, i, parentRow), originalRow, i, depth, void 0, parentRow?.id);\n\t\trowModel.flatRows.push(row);\n\t\trowModel.rowsById[row.id] = row;\n\t\trows.push(row);\n\t\tif (table.options.getSubRows) {\n\t\t\trow.originalSubRows = table.options.getSubRows(originalRow, i);\n\t\t\tif (row.originalSubRows?.length) row.subRows = accessRows(table, rowModel, row.originalSubRows, depth + 1, row);\n\t\t}\n\t}\n\treturn rows;\n}\nfunction _createCoreRowModel(table, data) {\n\tconst rowModel = {\n\t\trows: [],\n\t\tflatRows: [],\n\t\trowsById: makeObjectMap()\n\t};\n\trowModel.rows = accessRows(table, rowModel, data);\n\treturn rowModel;\n}\n\n//#endregion\nexport { createCoreRowModel };","import { createCoreRowModel } from \"./createCoreRowModel.js\";\n\n//#region src/core/row-models/coreRowModelsFeature.utils.ts\n/**\n* Resolves the table's unmodified core row model.\n*\n* The factory is created once per table, either from the `coreRowModel` slot on the `features` option\n* or the built-in `createCoreRowModel()`, then reused for later calls.\n*\n* @example\n* ```ts\n* const coreRows = table_getCoreRowModel(table)\n* ```\n*/\nfunction table_getCoreRowModel(table) {\n\tif (!table._rowModels.coreRowModel) table._rowModels.coreRowModel = table.options.features.coreRowModel?.(table) ?? createCoreRowModel()(table);\n\treturn table._rowModels.coreRowModel();\n}\n/**\n* Reads the row model immediately before column/global filtering.\n*\n* Filtering is the first derived row-model stage, so this currently aliases\n* `table.getCoreRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeFiltering = table_getPreFilteredRowModel(table)\n* ```\n*/\nfunction table_getPreFilteredRowModel(table) {\n\treturn table.getCoreRowModel();\n}\n/**\n* Resolves the row model after column and global filtering.\n*\n* When `manualFiltering` is enabled, or no filtered row-model factory was\n* registered, this returns the pre-filtered row model because filtering is\n* expected to happen outside the table.\n*\n* @example\n* ```ts\n* const filteredRows = table_getFilteredRowModel(table)\n* ```\n*/\nfunction table_getFilteredRowModel(table) {\n\tif (!table._rowModels.filteredRowModel) table._rowModels.filteredRowModel = table.options.features.filteredRowModel?.(table);\n\tif (table.options.manualFiltering || !table._rowModels.filteredRowModel) return table.getPreFilteredRowModel();\n\treturn table._rowModels.filteredRowModel();\n}\n/**\n* Reads the row model immediately before grouping.\n*\n* Grouping runs after filtering, so this aliases `table.getFilteredRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeGrouping = table_getPreGroupedRowModel(table)\n* ```\n*/\nfunction table_getPreGroupedRowModel(table) {\n\treturn table.getFilteredRowModel();\n}\n/**\n* Resolves the row model after grouping has produced grouped rows.\n*\n* When `manualGrouping` is enabled, or no grouped row-model factory was\n* registered, this returns the pre-grouped row model unchanged.\n*\n* @example\n* ```ts\n* const groupedRows = table_getGroupedRowModel(table)\n* ```\n*/\nfunction table_getGroupedRowModel(table) {\n\tif (!table._rowModels.groupedRowModel) table._rowModels.groupedRowModel = table.options.features.groupedRowModel?.(table);\n\tif (table.options.manualGrouping || !table._rowModels.groupedRowModel) return table.getPreGroupedRowModel();\n\treturn table._rowModels.groupedRowModel();\n}\n/**\n* Reads the row model immediately before sorting.\n*\n* Sorting runs after grouping, so this aliases `table.getGroupedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeSorting = table_getPreSortedRowModel(table)\n* ```\n*/\nfunction table_getPreSortedRowModel(table) {\n\treturn table.getGroupedRowModel();\n}\n/**\n* Resolves the row model after sorting has been applied.\n*\n* When `manualSorting` is enabled, or no sorted row-model factory was\n* registered, this returns the pre-sorted row model because sorted data is\n* expected to be supplied by the caller.\n*\n* @example\n* ```ts\n* const sortedRows = table_getSortedRowModel(table)\n* ```\n*/\nfunction table_getSortedRowModel(table) {\n\tif (!table._rowModels.sortedRowModel) table._rowModels.sortedRowModel = table.options.features.sortedRowModel?.(table);\n\tif (table.options.manualSorting || !table._rowModels.sortedRowModel) return table.getPreSortedRowModel();\n\treturn table._rowModels.sortedRowModel();\n}\n/**\n* Reads the row model immediately before row expansion.\n*\n* Expansion runs after sorting, so this aliases `table.getSortedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeExpansion = table_getPreExpandedRowModel(table)\n* ```\n*/\nfunction table_getPreExpandedRowModel(table) {\n\treturn table.getSortedRowModel();\n}\n/**\n* Resolves the row model after expanded rows have been flattened into view.\n*\n* When `manualExpanding` is enabled, or no expanded row-model factory was\n* registered, this returns the pre-expanded row model unchanged.\n*\n* @example\n* ```ts\n* const expandedRows = table_getExpandedRowModel(table)\n* ```\n*/\nfunction table_getExpandedRowModel(table) {\n\tif (!table._rowModels.expandedRowModel) table._rowModels.expandedRowModel = table.options.features.expandedRowModel?.(table);\n\tif (table.options.manualExpanding || !table._rowModels.expandedRowModel) return table.getPreExpandedRowModel();\n\treturn table._rowModels.expandedRowModel();\n}\n/**\n* Reads the row model immediately before pagination.\n*\n* Pagination is the final built-in row-model stage, so this aliases\n* `table.getExpandedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforePagination = table_getPrePaginatedRowModel(table)\n* ```\n*/\nfunction table_getPrePaginatedRowModel(table) {\n\treturn table.getExpandedRowModel();\n}\n/**\n* Resolves the row model after pagination has sliced rows for the current page.\n*\n* When `manualPagination` is enabled, or no paginated row-model factory was\n* registered, this returns the pre-paginated row model because pagination is\n* expected to happen before data reaches the table.\n*\n* @example\n* ```ts\n* const pageRows = table_getPaginatedRowModel(table)\n* ```\n*/\nfunction table_getPaginatedRowModel(table) {\n\tif (!table._rowModels.paginatedRowModel) table._rowModels.paginatedRowModel = table.options.features.paginatedRowModel?.(table);\n\tif (table.options.manualPagination || !table._rowModels.paginatedRowModel) return table.getPrePaginatedRowModel();\n\treturn table._rowModels.paginatedRowModel();\n}\n/**\n* Resolves the final row model consumed by renderers.\n*\n* This is the end of the built-in row-model pipeline: core -> filtering ->\n* grouping -> sorting -> expanding -> pagination.\n*\n* @example\n* ```ts\n* const visibleRows = table_getRowModel(table)\n* ```\n*/\nfunction table_getRowModel(table) {\n\treturn table.getPaginatedRowModel();\n}\n\n//#endregion\nexport { table_getCoreRowModel, table_getExpandedRowModel, table_getFilteredRowModel, table_getGroupedRowModel, table_getPaginatedRowModel, table_getPreExpandedRowModel, table_getPreFilteredRowModel, table_getPreGroupedRowModel, table_getPrePaginatedRowModel, table_getPreSortedRowModel, table_getRowModel, table_getSortedRowModel };","import { assignTableAPIs } from \"../../utils.js\";\nimport { table_getCoreRowModel, table_getExpandedRowModel, table_getFilteredRowModel, table_getGroupedRowModel, table_getPaginatedRowModel, table_getPreExpandedRowModel, table_getPreFilteredRowModel, table_getPreGroupedRowModel, table_getPrePaginatedRowModel, table_getPreSortedRowModel, table_getRowModel, table_getSortedRowModel } from \"./coreRowModelsFeature.utils.js\";\n\n//#region src/core/row-models/coreRowModelsFeature.ts\n/**\n* Core feature that wires table row-model accessors and row-model caches.\n*/\nconst coreRowModelsFeature = { constructTableAPIs: (table) => {\n\tassignTableAPIs(\"coreRowModelsFeature\", table, {\n\t\ttable_getCoreRowModel: { fn: () => table_getCoreRowModel(table) },\n\t\ttable_getPreFilteredRowModel: { fn: () => table_getPreFilteredRowModel(table) },\n\t\ttable_getFilteredRowModel: { fn: () => table_getFilteredRowModel(table) },\n\t\ttable_getPreGroupedRowModel: { fn: () => table_getPreGroupedRowModel(table) },\n\t\ttable_getGroupedRowModel: { fn: () => table_getGroupedRowModel(table) },\n\t\ttable_getPreSortedRowModel: { fn: () => table_getPreSortedRowModel(table) },\n\t\ttable_getSortedRowModel: { fn: () => table_getSortedRowModel(table) },\n\t\ttable_getPreExpandedRowModel: { fn: () => table_getPreExpandedRowModel(table) },\n\t\ttable_getExpandedRowModel: { fn: () => table_getExpandedRowModel(table) },\n\t\ttable_getPrePaginatedRowModel: { fn: () => table_getPrePaginatedRowModel(table) },\n\t\ttable_getPaginatedRowModel: { fn: () => table_getPaginatedRowModel(table) },\n\t\ttable_getRowModel: { fn: () => table_getRowModel(table) }\n\t});\n} };\n\n//#endregion\nexport { coreRowModelsFeature };","//#region src/core/cells/constructCell.ts\n/**\n* Creates or retrieves the cell prototype for a table.\n* The prototype is cached on the table and shared by all cell instances.\n*/\nfunction getCellPrototype(table) {\n\tif (!table._cellPrototype) {\n\t\ttable._cellPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignCellPrototype?.(table._cellPrototype, table);\n\t}\n\treturn table._cellPrototype;\n}\n/**\n* Constructs a cell instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructCell(column, row, table) {\n\tconst cellPrototype = getCellPrototype(table);\n\tconst cell = Object.create(cellPrototype);\n\tcell.column = column;\n\tcell.id = `${row.id}_${column.id}`;\n\tcell.row = row;\n\tconst initFns = table._cellInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](cell);\n\treturn cell;\n}\n\n//#endregion\nexport { constructCell };","import { flattenBy, hasOwn, makeObjectMap } from \"../../utils.js\";\nimport { constructCell } from \"../cells/constructCell.js\";\n\n//#region src/core/rows/coreRowsFeature.utils.ts\n/**\n* Returns this row's zero-based position in the current pre-pagination row\n* model. Rows outside that model return `-1`.\n*/\nfunction row_getDisplayIndex(row) {\n\tconst rows = row.table.getRowsInDisplayOrder();\n\tconst displayIndex = row._displayIndexCache;\n\treturn rows[displayIndex] === row ? displayIndex : -1;\n}\n/**\n* Returns the rows in the current display order after assigning their\n* zero-based display indexes.\n*\n* When expanded rows bypass pagination, expanded descendants are inserted into\n* the returned order even though they are absent from the pre-pagination row\n* model.\n*/\nfunction table_getRowsInDisplayOrder(table) {\n\tconst rows = table.getPrePaginatedRowModel().rows;\n\tif (table.options.paginateExpandedRows === false) {\n\t\tconst displayRows = [];\n\t\tconst handleRow = (row) => {\n\t\t\trow._displayIndexCache = displayRows.length;\n\t\t\tdisplayRows.push(row);\n\t\t\tif (row.subRows.length && row.getIsExpanded?.()) row.subRows.forEach(handleRow);\n\t\t};\n\t\trows.forEach(handleRow);\n\t\treturn displayRows;\n\t}\n\tfor (let i = 0; i < rows.length; i++) rows[i]._displayIndexCache = i;\n\treturn rows;\n}\n/**\n* Reads and caches this row's value for a column.\n*\n* The value is produced by the column accessor. Missing columns or display\n* columns without an accessor return `undefined`.\n*\n* @example\n* ```ts\n* const firstName = row_getValue(row, 'firstName')\n* ```\n*/\nfunction row_getValue(row, columnId) {\n\tif (hasOwn(row._valuesCache, columnId)) return row._valuesCache[columnId];\n\tconst column = row.table.getColumn(columnId);\n\tif (!column?.accessorFn) return;\n\trow._valuesCache[columnId] = column.accessorFn(row.original, row.index);\n\treturn row._valuesCache[columnId];\n}\n/**\n* Reads and caches the values used by faceting/grouping for a column.\n*\n* If the column defines `getUniqueValues`, that result is used. Otherwise the\n* row's accessor value is wrapped in a single-item array.\n*\n* @example\n* ```ts\n* const values = row_getUniqueValues(row, 'tags')\n* ```\n*/\nfunction row_getUniqueValues(row, columnId) {\n\tif (hasOwn(row._uniqueValuesCache, columnId)) return row._uniqueValuesCache[columnId];\n\tconst column = row.table.getColumn(columnId);\n\tif (!column?.accessorFn) return;\n\tif (!column.columnDef.getUniqueValues) {\n\t\trow._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n\t\treturn row._uniqueValuesCache[columnId];\n\t}\n\trow._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, row.index);\n\treturn row._uniqueValuesCache[columnId];\n}\n/**\n* Returns a renderable row value for a column.\n*\n* If the accessor value is nullish, the table's `renderFallbackValue` is used\n* instead.\n*\n* @example\n* ```ts\n* const value = row_renderValue(row, 'firstName')\n* ```\n*/\nfunction row_renderValue(row, columnId) {\n\treturn row.getValue(columnId) ?? row.table.options.renderFallbackValue;\n}\n/**\n* Flattens this row's descendant tree into leaf rows.\n*\n* The row itself is not included; only nested `subRows` are walked.\n*\n* @example\n* ```ts\n* const descendants = row_getLeafRows(row)\n* ```\n*/\nfunction row_getLeafRows(row) {\n\treturn flattenBy(row.subRows, (d) => d.subRows);\n}\n/**\n* Returns the deepest structural row depth in the core row model.\n* Root rows are depth `0`, their direct sub-rows are depth `1`, and so on.\n*/\nfunction table_getMaxSubRowDepth(table) {\n\tconst rows = table.getCoreRowModel().flatRows;\n\tlet maxDepth = 0;\n\tfor (let i = 0; i < rows.length; i++) maxDepth = Math.max(maxDepth, rows[i].depth);\n\treturn maxDepth;\n}\n/**\n* Looks up this row's direct parent, if it has one.\n*\n* Parent lookup prefers the core row model for structural parents, then falls\n* back to the pre-pagination row model for generated parent rows.\n*\n* @example\n* ```ts\n* const parent = row_getParentRow(row)\n* ```\n*/\nfunction row_getParentRow(row) {\n\tif (!row.parentId) return;\n\treturn row.table.getCoreRowModel().rowsById[row.parentId] ?? row.table.getRow(row.parentId, true);\n}\n/**\n* Collects this row's ancestor chain from root to direct parent.\n*\n* The current row is not included. Rows without a parent return an empty array.\n*\n* @example\n* ```ts\n* const ancestors = row_getParentRows(row)\n* ```\n*/\nfunction row_getParentRows(row) {\n\tconst parentRows = [];\n\tlet currentRow = row;\n\twhile (true) {\n\t\tconst parentRow = currentRow.getParentRow();\n\t\tif (!parentRow) break;\n\t\tparentRows.push(parentRow);\n\t\tcurrentRow = parentRow;\n\t}\n\treturn parentRows.reverse();\n}\n/**\n* Constructs one cell for each leaf column in this row.\n*\n* The result follows `table.getAllLeafColumns()` order and includes hidden\n* columns; visibility-specific APIs filter this list later.\n*\n* @example\n* ```ts\n* const cells = row_getAllCells(row)\n* ```\n*/\nfunction row_getAllCells(row) {\n\tconst columns = row.table.getAllLeafColumns();\n\tlet cache = row._cellsCache;\n\tif (!cache) cache = row._cellsCache = /* @__PURE__ */ new WeakMap();\n\tconst cells = new Array(columns.length);\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tlet cell = cache.get(column);\n\t\tif (!cell) {\n\t\t\tcell = constructCell(column, row, row.table);\n\t\t\tcache.set(column, cell);\n\t\t}\n\t\tcells[i] = cell;\n\t}\n\treturn cells;\n}\n/**\n* Builds a lookup map of this row's cells keyed by column id.\n*\n* This is the static implementation behind `row.getAllCellsByColumnId()`.\n*\n* @example\n* ```ts\n* const cellsById = row_getAllCellsByColumnId(row)\n* ```\n*/\nfunction row_getAllCellsByColumnId(row) {\n\tconst result = makeObjectMap();\n\tconst cells = row.getAllCells();\n\tfor (let i = 0; i < cells.length; i++) {\n\t\tconst cell = cells[i];\n\t\tresult[cell.column.id] = cell;\n\t}\n\treturn result;\n}\n/**\n* Resolves the stable id for a row.\n*\n* `options.getRowId` wins when provided. Otherwise root rows use their index\n* and child rows append their index to the parent id, such as `0.2`.\n*\n* @example\n* ```ts\n* const id = table_getRowId(originalRow, table, index, parentRow)\n* ```\n*/\nfunction table_getRowId(originalRow, table, index, parent) {\n\treturn table.options.getRowId?.(originalRow, index, parent) ?? (parent ? `${parent.id}.${index}` : String(index));\n}\n/**\n* Looks up a row by id from the current or full row model.\n*\n* By default this searches `table.getRowModel()`. Passing `searchAll` searches\n* the pre-pagination model first, then falls back to the core model.\n*\n* @example\n* ```ts\n* const row = table_getRow(table, rowId, true)\n* ```\n*/\nfunction table_getRow(table, rowId, searchAll) {\n\tlet row = (searchAll ? table.getPrePaginatedRowModel() : table.getRowModel()).rowsById[rowId];\n\tif (!row) {\n\t\trow = table.getCoreRowModel().rowsById[rowId];\n\t\tif (!row) {\n\t\t\tif (process.env.NODE_ENV === \"development\") throw new Error(`getRow could not find row with ID: ${rowId}`);\n\t\t\tthrow new Error();\n\t\t}\n\t}\n\treturn row;\n}\n\n//#endregion\nexport { row_getAllCells, row_getAllCellsByColumnId, row_getDisplayIndex, row_getLeafRows, row_getParentRow, row_getParentRows, row_getUniqueValues, row_getValue, row_renderValue, table_getMaxSubRowDepth, table_getRow, table_getRowId, table_getRowsInDisplayOrder };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { row_getAllCells, row_getAllCellsByColumnId, row_getDisplayIndex, row_getLeafRows, row_getParentRow, row_getParentRows, row_getUniqueValues, row_getValue, row_renderValue, table_getMaxSubRowDepth, table_getRow, table_getRowId, table_getRowsInDisplayOrder } from \"./coreRowsFeature.utils.js\";\n\n//#region src/core/rows/coreRowsFeature.ts\n/**\n* Core feature that creates row APIs for values, cells, and tree traversal.\n*/\nconst coreRowsFeature = {\n\tassignRowPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreRowsFeature\", prototype, table, {\n\t\t\trow_getDisplayIndex: { fn: (row) => row_getDisplayIndex(row) },\n\t\t\trow_getAllCellsByColumnId: {\n\t\t\t\tfn: (row) => row_getAllCellsByColumnId(row),\n\t\t\t\tmemoDeps: (row) => [row.getAllCells()]\n\t\t\t},\n\t\t\trow_getAllCells: {\n\t\t\t\tfn: (row) => row_getAllCells(row),\n\t\t\t\tmemoDeps: (row) => [row.table.getAllLeafColumns()]\n\t\t\t},\n\t\t\trow_getLeafRows: {\n\t\t\t\tfn: (row) => row_getLeafRows(row),\n\t\t\t\tmemoDeps: (row) => [row.subRows]\n\t\t\t},\n\t\t\trow_getParentRow: { fn: (row) => row_getParentRow(row) },\n\t\t\trow_getParentRows: { fn: (row) => row_getParentRows(row) },\n\t\t\trow_getUniqueValues: { fn: (row, columnId) => row_getUniqueValues(row, columnId) },\n\t\t\trow_getValue: { fn: (row, columnId) => row_getValue(row, columnId) },\n\t\t\trow_renderValue: { fn: (row, columnId) => row_renderValue(row, columnId) }\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreRowsFeature\", table, {\n\t\t\ttable_getRowsInDisplayOrder: {\n\t\t\t\tfn: () => table_getRowsInDisplayOrder(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.getPrePaginatedRowModel().rows,\n\t\t\t\t\ttable.options.paginateExpandedRows,\n\t\t\t\t\ttable.options.paginateExpandedRows === false ? table.atoms.expanded?.get() : void 0\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getRowId: { fn: (originalRow, index, parent) => table_getRowId(originalRow, table, index, parent) },\n\t\t\ttable_getRow: { fn: (id, searchAll) => table_getRow(table, id, searchAll) },\n\t\t\ttable_getMaxSubRowDepth: {\n\t\t\t\tfn: () => table_getMaxSubRowDepth(table),\n\t\t\t\tmemoDeps: () => [table.getCoreRowModel()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreRowsFeature };","import { cloneState, functionalUpdate } from \"../../utils.js\";\n\n//#region src/core/table/coreTablesFeature.utils.ts\n/**\n* Synchronizes externally controlled state slices into the table's base atoms.\n*\n* This keeps `options.state` values mirrored in the atom graph so derived\n* atoms, stores, and table APIs read a consistent snapshot.\n*\n* Adapters that update options during their host's render phase pass the\n* state snapshot captured by the committed render as `capturedState` — the\n* shared options object may already hold values from a newer render that\n* never commits. Pass `null` to publish nothing (a captured \"no controlled\n* state\"); omitting the argument reads the current `table.options.state`\n* instead. An optional `compare` suppresses semantically unchanged slice\n* writes; the default remains reference equality.\n*\n* @example\n* ```ts\n* table_syncExternalStateToBaseAtoms(table)\n* table_syncExternalStateToBaseAtoms(table, capturedState ?? null, shallow)\n* ```\n*/\nfunction table_syncExternalStateToBaseAtoms(table, capturedState, compare = (currentState, externalState) => currentState === externalState) {\n\tconst state = capturedState === void 0 ? table.options.state : capturedState;\n\ttable._reactivity.batch(() => {\n\t\tif (state) for (const key in state) {\n\t\t\tconst baseAtom = table.baseAtoms[key];\n\t\t\tif (!baseAtom) continue;\n\t\t\tconst rawExternalState = state[key];\n\t\t\tconst externalState = rawExternalState === void 0 ? table.initialState[key] : rawExternalState;\n\t\t\tif (!compare(table._reactivity.untrack(() => baseAtom.get()), externalState)) baseAtom.set(() => externalState);\n\t\t}\n\t});\n}\n/**\n* Publishes captured controlled state after a host framework commits.\n*\n* Render-phase adapters stage options without synchronizing base atoms, then\n* pass the state captured by the committed render here. The commit signal also\n* invalidates ownership changes when no base atom was written.\n*/\nfunction table_publishExternalState(table, state, compare = (currentState, externalState) => currentState === externalState) {\n\ttable._reactivity.batch(() => {\n\t\ttable_syncExternalStateToBaseAtoms(table, state, compare);\n\t\ttable._reactivity.commit?.();\n\t});\n}\n/**\n* Resets all internal table base atoms to `table.initialState`, then clears\n* transient instance data through registered feature reset hooks.\n*\n* This resets internally owned state slices in a single reactivity batch. Use\n* feature-specific reset APIs when a slice may be externally owned.\n*\n* @example\n* ```ts\n* table_reset(table)\n* ```\n*/\nfunction table_reset(table) {\n\tconst snap = cloneState(table.initialState);\n\ttable._reactivity.batch(() => {\n\t\tconst keys = Object.keys(snap);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key = keys[i];\n\t\t\ttable.baseAtoms[key].set(snap[key]);\n\t\t}\n\t});\n\tconst features = Object.values(table._features);\n\tfor (let i = 0; i < features.length; i++) features[i].resetTableInstanceData?.(table);\n}\n/**\n* Merges new table options with the current resolved options.\n*\n* If `options.mergeOptions` is provided, it owns the merge behavior; otherwise\n* options are shallow-merged. Static options that should never change after\n* initialization are restored on a fresh object so framework merge helpers may\n* return readonly getter/proxy objects.\n*\n* @example\n* ```ts\n* const options = table_mergeOptions(table, nextOptions)\n* ```\n*/\nfunction table_mergeOptions(table, newOptions) {\n\tconst { features, atoms, initialState } = table.options;\n\tif (!table.options.mergeOptions) return {\n\t\t...table.options,\n\t\t...newOptions,\n\t\tfeatures,\n\t\tatoms,\n\t\tinitialState\n\t};\n\tconst mergedOptions = table.options.mergeOptions(table.options, newOptions);\n\tconst descriptors = { ...Object.getOwnPropertyDescriptors(mergedOptions) };\n\treturn Object.defineProperties(Object.create(Object.getPrototypeOf(mergedOptions)), {\n\t\t...descriptors,\n\t\tfeatures: {\n\t\t\tvalue: features,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t},\n\t\tatoms: {\n\t\t\tvalue: atoms,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t},\n\t\tinitialState: {\n\t\t\tvalue: initialState,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t}\n\t});\n}\n/**\n* Updates the table options object.\n*\n* The updater receives the current resolved options and the merged result is\n* immediately assigned to the table instance.\n*\n* @example\n* ```ts\n* table_setOptions(table, (old) => old)\n* table_setOptions(table, (old) => old, { syncExternalState: false })\n* ```\n*/\nfunction table_setOptions(table, updater, options) {\n\tconst mergedOptions = table_mergeOptions(table, functionalUpdate(updater, table.options));\n\tif (table.optionsStore) table.optionsStore.set(() => mergedOptions);\n\telse table.options = mergedOptions;\n\tif (options?.syncExternalState !== false) table_publishExternalState(table, mergedOptions.state ?? null);\n}\n\n//#endregion\nexport { table_mergeOptions, table_publishExternalState, table_reset, table_setOptions, table_syncExternalStateToBaseAtoms };","import { assignTableAPIs } from \"../../utils.js\";\nimport { table_reset, table_setOptions } from \"./coreTablesFeature.utils.js\";\n\n//#region src/core/table/coreTablesFeature.ts\n/**\n* Core feature that adds base table instance APIs such as reset and setOptions.\n*/\nconst coreTablesFeature = { constructTableAPIs: (table) => {\n\tassignTableAPIs(\"coreTablesFeature\", table, {\n\t\ttable_reset: { fn: () => table_reset(table) },\n\t\ttable_setOptions: { fn: (updater) => table_setOptions(table, updater) }\n\t});\n} };\n\n//#endregion\nexport { coreTablesFeature };","import { coreCellsFeature } from \"./cells/coreCellsFeature.js\";\nimport { coreColumnsFeature } from \"./columns/coreColumnsFeature.js\";\nimport { coreHeadersFeature } from \"./headers/coreHeadersFeature.js\";\nimport { coreRowModelsFeature } from \"./row-models/coreRowModelsFeature.js\";\nimport { coreRowsFeature } from \"./rows/coreRowsFeature.js\";\nimport { coreTablesFeature } from \"./table/coreTablesFeature.js\";\n\n//#region src/core/coreFeatures.ts\n/**\n* The built-in core feature set required by every table.\n*\n* These features provide table, column, row, header, cell, and core row-model behavior before optional feature plugins are added.\n*/\nconst coreFeatures = {\n\tcoreCellsFeature,\n\tcoreColumnsFeature,\n\tcoreHeadersFeature,\n\tcoreRowModelsFeature,\n\tcoreRowsFeature,\n\tcoreTablesFeature\n};\n\n//#endregion\nexport { coreFeatures };","//#region src/core/reactivity/coreReactivityFeature.utils.ts\n/**\n* Bridges atom instances to the `Store`/`ReadonlyStore` API by exposing\n* a `state` getter backed by `atom.get()`, and wiring `setState` for\n* writable atoms.\n*\n* @example\n* ```ts\n* const store = atomToStore(atom)\n* ```\n*/\nfunction atomToStore(atom) {\n\tconst store = atom;\n\tObject.defineProperty(atom, \"state\", { get() {\n\t\treturn atom.get();\n\t} });\n\tif (\"set\" in atom) store.setState = atom.set.bind(atom);\n\treturn store;\n}\n\n//#endregion\nexport { atomToStore };","//#region src/shallow.ts\nfunction shallow(objA, objB) {\n\tif (Object.is(objA, objB)) return true;\n\tif (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) return false;\n\tif (objA instanceof Map && objB instanceof Map) {\n\t\tif (objA.size !== objB.size) return false;\n\t\tfor (const [k, v] of objA) if (!objB.has(k) || !Object.is(v, objB.get(k))) return false;\n\t\treturn true;\n\t}\n\tif (objA instanceof Set && objB instanceof Set) {\n\t\tif (objA.size !== objB.size) return false;\n\t\tfor (const v of objA) if (!objB.has(v)) return false;\n\t\treturn true;\n\t}\n\tif (objA instanceof Date && objB instanceof Date) {\n\t\tif (objA.getTime() !== objB.getTime()) return false;\n\t\treturn true;\n\t}\n\tconst keysA = getOwnKeys(objA);\n\tif (keysA.length !== getOwnKeys(objB).length) return false;\n\tfor (let i = 0; i < keysA.length; i++) if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) return false;\n\treturn true;\n}\nfunction getOwnKeys(obj) {\n\treturn Object.keys(obj).concat(Object.getOwnPropertySymbols(obj));\n}\n\n//#endregion\nexport { shallow };\n//# sourceMappingURL=shallow.js.map","import { cloneState, hasOwn } from \"../../utils.js\";\nimport { table_syncExternalStateToBaseAtoms } from \"./coreTablesFeature.utils.js\";\nimport { coreFeatures } from \"../coreFeatures.js\";\nimport { atomToStore } from \"../reactivity/coreReactivityFeature.utils.js\";\nimport { shallow } from \"@tanstack/store\";\n\n//#region src/core/table/constructTable.ts\n/**\n* Builds the initial table state from registered features and user initial state.\n*\n* Each feature contributes its default state before user-provided `initialState` values are merged in.\n*/\nfunction getInitialTableState(features, initialState = {}) {\n\tObject.values(features).forEach((feature) => {\n\t\tinitialState = feature.getInitialState?.(initialState) ?? initialState;\n\t});\n\treturn cloneState(initialState);\n}\n/**\n* Constructs a table instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructTable(tableOptions) {\n\tconst _reactivity = tableOptions.features.coreReactivityFeature;\n\tconst { aggregationFns, columnMeta: _columnMeta, coreRowModel, expandedRowModel, facetedMinMaxValues, facetedRowModel, facetedUniqueValues, filterFns, filterMeta: _filterMeta, filteredRowModel, groupedRowModel, paginatedRowModel, sortFns, sortedRowModel, tableMeta: _tableMeta, ...features } = tableOptions.features;\n\tconst table = {\n\t\t_cellInstanceInitFns: [],\n\t\t_columnInstanceInitFns: [],\n\t\t_features: {\n\t\t\t...coreFeatures,\n\t\t\t...features\n\t\t},\n\t\t_headerGroupInstanceInitFns: [],\n\t\t_headerInstanceInitFns: [],\n\t\t_reactivity,\n\t\t_rowInstanceInitFns: [],\n\t\t_rowModelFns: {\n\t\t\taggregationFns,\n\t\t\tfilterFns,\n\t\t\tsortFns\n\t\t},\n\t\t_rowModels: {},\n\t\tatoms: {},\n\t\tbaseAtoms: {}\n\t};\n\tconst featuresList = Object.values(table._features);\n\tconst mergedOptions = {\n\t\t...featuresList.reduce((obj, feature) => {\n\t\t\treturn Object.assign(obj, feature.getDefaultTableOptions?.(table));\n\t\t}, {}),\n\t\t...tableOptions\n\t};\n\tif (_reactivity.wrapExternalAtoms && mergedOptions.atoms) for (const [atomKey, _atom] of Object.entries(mergedOptions.atoms)) {\n\t\tconst atom = _atom;\n\t\tconst wrappedAtom = _reactivity.createWritableAtom(atom.get(), { debugName: `externalAtom/${atomKey}` });\n\t\tmergedOptions.atoms[atomKey] = wrappedAtom;\n\t\tlet syncExternal = false;\n\t\tconst syncAtomToWrappedSub = atom.subscribe((value) => {\n\t\t\tif (syncExternal) return;\n\t\t\twrappedAtom.set(value);\n\t\t});\n\t\tconst syncWrappedToAtomSub = wrappedAtom.subscribe((value) => {\n\t\t\tsyncExternal = true;\n\t\t\tatom.set(value);\n\t\t\tsyncExternal = false;\n\t\t});\n\t\t_reactivity.addSubscription(syncAtomToWrappedSub);\n\t\t_reactivity.addSubscription(syncWrappedToAtomSub);\n\t}\n\tif (_reactivity.createOptionsStore) {\n\t\ttable.optionsStore = _reactivity.createWritableAtom(mergedOptions, { debugName: \"table/optionsStore\" });\n\t\tObject.defineProperty(table, \"options\", {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget() {\n\t\t\t\treturn table.optionsStore.get();\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\ttable.optionsStore.set(() => value);\n\t\t\t}\n\t\t});\n\t} else table.options = mergedOptions;\n\ttable.initialState = getInitialTableState(table._features, table.options.initialState);\n\tconst stateKeys = Object.keys(table.initialState);\n\tfor (let i = 0; i < stateKeys.length; i++) {\n\t\tconst key = stateKeys[i];\n\t\ttable.baseAtoms[key] = _reactivity.createWritableAtom(table.initialState[key], { debugName: `table/baseAtoms/${key}` });\n\t\ttable.atoms[key] = _reactivity.createReadonlyAtom(() => {\n\t\t\tconst options = table.options;\n\t\t\tconst externalAtom = options.atoms?.[key];\n\t\t\tconst reactiveState = externalAtom ? externalAtom.get() : table.baseAtoms[key].get();\n\t\t\tif (externalAtom) return reactiveState;\n\t\t\tconst controlledState = options.state;\n\t\t\tif (controlledState && hasOwn(controlledState, key)) {\n\t\t\t\tconst controlledValue = controlledState[key];\n\t\t\t\treturn controlledValue === void 0 ? table.initialState[key] : controlledValue;\n\t\t\t}\n\t\t\treturn reactiveState;\n\t\t}, { debugName: `table/atoms/${key}` });\n\t}\n\ttable_syncExternalStateToBaseAtoms(table);\n\ttable.store = atomToStore(_reactivity.createReadonlyAtom(() => {\n\t\tconst snapshot = {};\n\t\tfor (let i = 0; i < stateKeys.length; i++) {\n\t\t\tconst key = stateKeys[i];\n\t\t\tsnapshot[key] = table.atoms[key].get();\n\t\t}\n\t\treturn snapshot;\n\t}, {\n\t\tcompare: shallow,\n\t\tdebugName: \"table/store\"\n\t}));\n\tfor (let i = 0; i < featuresList.length; i++) {\n\t\tconst feature = featuresList[i];\n\t\tfeature.initTableInstanceData?.(table);\n\t\tif (feature.initCellInstanceData) table._cellInstanceInitFns.push(feature.initCellInstanceData.bind(feature));\n\t\tif (feature.initColumnInstanceData) table._columnInstanceInitFns.push(feature.initColumnInstanceData.bind(feature));\n\t\tif (feature.initHeaderGroupInstanceData) table._headerGroupInstanceInitFns.push(feature.initHeaderGroupInstanceData.bind(feature));\n\t\tif (feature.initHeaderInstanceData) table._headerInstanceInitFns.push(feature.initHeaderInstanceData.bind(feature));\n\t\tif (feature.initRowInstanceData) table._rowInstanceInitFns.push(feature.initRowInstanceData.bind(feature));\n\t\tfeature.constructTableAPIs?.(table);\n\t}\n\tif (process.env.NODE_ENV === \"development\" && (tableOptions.debugAll || tableOptions.debugTable)) {\n\t\tconst features = Object.keys(table._features);\n\t\tconst rowModels = Object.entries({\n\t\t\tcoreRowModel,\n\t\t\tfilteredRowModel,\n\t\t\tgroupedRowModel,\n\t\t\tsortedRowModel,\n\t\t\texpandedRowModel,\n\t\t\tpaginatedRowModel,\n\t\t\tfacetedRowModel,\n\t\t\tfacetedMinMaxValues,\n\t\t\tfacetedUniqueValues\n\t\t}).filter(([, factory]) => factory).map(([key]) => key);\n\t\tconst states = Object.keys(table.initialState);\n\t\tconsole.log(`Constructing Table Instance\n\n Features: ${features.join(\"\\n \")}\n\n Row Models: ${rowModels.length ? rowModels.join(\"\\n \") : \"(none)\"}\n\n States: ${states.join(\"\\n \")}\\n`, { table });\n\t}\n\treturn table;\n}\n\n//#endregion\nexport { constructTable, getInitialTableState };","import { callMemoOrStaticFn, cloneState, hasOwn, makeObjectMap } from \"../../utils.js\";\nimport { table_getCenterHeaderGroups, table_getEndHeaderGroups, table_getPinnedVisibleLeafColumns, table_getStartHeaderGroups } from \"../column-pinning/columnPinningFeature.utils.js\";\n\n//#region src/features/column-sizing/columnSizingFeature.utils.ts\n/**\n* Creates the default committed column sizing state.\n*\n* The feature default is an empty map, so columns fall back to their column def\n* size or the built-in sizing defaults.\n*\n* @example\n* ```ts\n* const sizing = getDefaultColumnSizingState()\n* ```\n*/\nfunction getDefaultColumnSizingState() {\n\treturn makeObjectMap();\n}\n/**\n* Creates the built-in sizing defaults for column definitions.\n*\n* Columns default to `size: 150`, `minSize: 20`, and\n* `maxSize: Number.MAX_SAFE_INTEGER` unless overridden by column definitions or\n* table defaults.\n*\n* @example\n* ```ts\n* const defaults = getDefaultColumnSizingColumnDef()\n* ```\n*/\nfunction getDefaultColumnSizingColumnDef() {\n\treturn {\n\t\tsize: 150,\n\t\tminSize: 20,\n\t\tmaxSize: Number.MAX_SAFE_INTEGER\n\t};\n}\n/**\n* Resolves a column's current pixel size.\n*\n* Committed `state.columnSizing[column.id]` wins over `columnDef.size`, then the\n* built-in default size. The result is clamped between min and max size.\n*\n* @example\n* ```ts\n* const width = column_getSize(column)\n* ```\n*/\nfunction column_getSize(column) {\n\tconst defaultSizes = getDefaultColumnSizingColumnDef();\n\tconst columnSizing = column.table.atoms.columnSizing?.get();\n\tconst columnSize = columnSizing && hasOwn(columnSizing, column.id) ? columnSizing[column.id] : void 0;\n\treturn Math.min(Math.max(column.columnDef.minSize ?? defaultSizes.minSize, columnSize ?? column.columnDef.size ?? defaultSizes.size), column.columnDef.maxSize ?? defaultSizes.maxSize);\n}\nfunction buildColumnOffsets(columns) {\n\tconst starts = makeObjectMap();\n\tconst afters = makeObjectMap();\n\tconst sizes = new Array(columns.length);\n\tlet start = 0;\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tconst size = callMemoOrStaticFn(column, \"getSize\", column_getSize);\n\t\tsizes[i] = size;\n\t\tstarts[column.id] = start;\n\t\tstart += size;\n\t}\n\tlet after = 0;\n\tfor (let i = columns.length - 1; i >= 0; i--) {\n\t\tafters[columns[i].id] = after;\n\t\tafter += sizes[i];\n\t}\n\treturn {\n\t\tstarts,\n\t\tafters\n\t};\n}\n/**\n* Builds start and after offset maps for every visible leaf column, computed\n* once per pinning region plus the full visible list.\n*\n* A single table-level memo of this result backs all `column.getStart()` and\n* `column.getAfter()` calls with O(1) lookups.\n*\n* @example\n* ```ts\n* const offsets = table_getColumnOffsets(table)\n* const startOffset = offsets.start.starts[column.id]\n* ```\n*/\nfunction table_getColumnOffsets(table) {\n\treturn {\n\t\tall: buildColumnOffsets(table_getPinnedVisibleLeafColumns(table)),\n\t\tcenter: buildColumnOffsets(table_getPinnedVisibleLeafColumns(table, \"center\")),\n\t\tstart: buildColumnOffsets(table_getPinnedVisibleLeafColumns(table, \"start\")),\n\t\tend: buildColumnOffsets(table_getPinnedVisibleLeafColumns(table, \"end\"))\n\t};\n}\nfunction toOffsetsKey(position) {\n\treturn position === \"start\" ? \"start\" : position === \"end\" ? \"end\" : position === \"center\" ? \"center\" : \"all\";\n}\n/**\n* Computes the offset from the start edge of a pinning region to this column.\n*\n* The value is the sum of all previous visible leaf column sizes in the\n* requested `'start'`, `'center'`, or `'end'` region.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* const startOffset = column_getStart(column, 'start')\n* ```\n*/\nfunction column_getStart(column, position) {\n\treturn callMemoOrStaticFn(column.table, \"getColumnOffsets\", table_getColumnOffsets)[toOffsetsKey(position)].starts[column.id] ?? 0;\n}\n/**\n* Computes the offset from the end edge of a pinning region after this column.\n*\n* The value is the sum of all following visible leaf column sizes in the\n* requested region.\n*\n* @example\n* ```ts\n* const endOffset = column_getAfter(column, 'end')\n* ```\n*/\nfunction column_getAfter(column, position) {\n\treturn callMemoOrStaticFn(column.table, \"getColumnOffsets\", table_getColumnOffsets)[toOffsetsKey(position)].afters[column.id] ?? 0;\n}\n/**\n* Removes this column's committed size override.\n*\n* After reset, the column resolves size from `columnDef.size` or built-in\n* defaults again.\n*\n* @example\n* ```ts\n* column_resetSize(column)\n* ```\n*/\nfunction column_resetSize(column) {\n\ttable_setColumnSizing(column.table, (old) => {\n\t\tconst rest = makeObjectMap();\n\t\tconst columnIds = Object.keys(old);\n\t\tfor (let i = 0; i < columnIds.length; i++) {\n\t\t\tconst columnId = columnIds[i];\n\t\t\tif (columnId !== column.id) rest[columnId] = old[columnId];\n\t\t}\n\t\treturn rest;\n\t});\n}\nfunction sumHeaderSize(header) {\n\tif (!header.subHeaders.length) return column_getSize(header.column);\n\tlet sum = 0;\n\tfor (let i = 0; i < header.subHeaders.length; i++) sum += sumHeaderSize(header.subHeaders[i]);\n\treturn sum;\n}\n/**\n* Computes a header's rendered size from its leaf headers.\n*\n* Group headers sum the sizes of all descendant leaf columns. Leaf headers use\n* their column's current size.\n*\n* @example\n* ```ts\n* const width = header_getSize(header)\n* ```\n*/\nfunction header_getSize(header) {\n\treturn sumHeaderSize(header);\n}\n/**\n* Computes a header's offset from the start of its header group.\n*\n* The offset is the previous sibling header's start plus size, or `0` for the\n* first header in the group.\n*\n* @example\n* ```ts\n* const offset = header_getStart(header)\n* ```\n*/\nfunction header_getStart(header) {\n\tif (header.index > 0) {\n\t\tconst prevSiblingHeader = header.headerGroup?.headers[header.index - 1];\n\t\tif (prevSiblingHeader) return callMemoOrStaticFn(prevSiblingHeader, \"getStart\", header_getStart) + callMemoOrStaticFn(prevSiblingHeader, \"getSize\", header_getSize);\n\t}\n\treturn 0;\n}\n/**\n* Routes a committed column sizing updater through the table's sizing handler.\n*\n* The updater may be a next size map or a function of the previous map,\n* matching the instance `table.setColumnSizing` behavior.\n*\n* @example\n* ```ts\n* table_setColumnSizing(table, (old) => ({ ...old, age: 96 }))\n* ```\n*/\nfunction table_setColumnSizing(table, updater) {\n\ttable.options.onColumnSizingChange?.(updater);\n}\n/**\n* Resets `columnSizing` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnSizing` when it\n* exists. Passing `true` ignores initial state and resets to `{}`.\n*\n* @example\n* ```ts\n* table_resetColumnSizing(table)\n* table_resetColumnSizing(table, true)\n* ```\n*/\nfunction table_resetColumnSizing(table, defaultState) {\n\ttable_setColumnSizing(table, defaultState ? makeObjectMap() : Object.assign(makeObjectMap(), cloneState(table.initialState.columnSizing ?? {})));\n}\n/**\n* Sums the rendered size of the full table header row.\n*\n* This includes start, center, and end columns in the main header group.\n*\n* @example\n* ```ts\n* const width = table_getTotalSize(table)\n* ```\n*/\nfunction table_getTotalSize(table) {\n\treturn table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n\t\treturn sum + header_getSize(header);\n\t}, 0) ?? 0;\n}\n/**\n* Sums the rendered size of the logical start pinned header region.\n*\n* An empty start pinning region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getStartTotalSize(table)\n* ```\n*/\nfunction table_getStartTotalSize(table) {\n\treturn callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)[0]?.headers.reduce((sum, header) => {\n\t\treturn sum + header_getSize(header);\n\t}, 0) ?? 0;\n}\n/**\n* Sums the rendered size of the center, unpinned header region.\n*\n* An empty center region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getCenterTotalSize(table)\n* ```\n*/\nfunction table_getCenterTotalSize(table) {\n\treturn callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)[0]?.headers.reduce((sum, header) => {\n\t\treturn sum + header_getSize(header);\n\t}, 0) ?? 0;\n}\n/**\n* Sums the rendered size of the logical end pinned header region.\n*\n* An empty end pinning region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getEndTotalSize(table)\n* ```\n*/\nfunction table_getEndTotalSize(table) {\n\treturn callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)[0]?.headers.reduce((sum, header) => {\n\t\treturn sum + header_getSize(header);\n\t}, 0) ?? 0;\n}\n\n//#endregion\nexport { column_getAfter, column_getSize, column_getStart, column_resetSize, getDefaultColumnSizingColumnDef, getDefaultColumnSizingState, header_getSize, header_getStart, table_getCenterTotalSize, table_getColumnOffsets, table_getEndTotalSize, table_getStartTotalSize, table_getTotalSize, table_resetColumnSizing, table_setColumnSizing };","import { cloneState, makeObjectMap } from \"../../utils.js\";\nimport { column_getSize, header_getSize, table_setColumnSizing } from \"../column-sizing/columnSizingFeature.utils.js\";\n\n//#region src/features/column-resizing/columnResizingFeature.utils.ts\n/**\n* Creates the default transient column resizing state.\n*\n* The feature default represents no active drag interaction. Reset APIs use\n* this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const resizeInfo = getDefaultColumnResizingState()\n* ```\n*/\nfunction getDefaultColumnResizingState() {\n\treturn {\n\t\tstartOffset: null,\n\t\tstartSize: null,\n\t\tdeltaOffset: null,\n\t\tdeltaPercentage: null,\n\t\tisResizingColumn: false,\n\t\tcolumnSizingStart: []\n\t};\n}\n/**\n* Checks whether this column can start a resize interaction.\n*\n* Both `columnDef.enableResizing` and table `enableColumnResizing` default to\n* `true`.\n*\n* @example\n* ```ts\n* const canResize = column_getCanResize(column)\n* ```\n*/\nfunction column_getCanResize(column) {\n\treturn (column.columnDef.enableResizing ?? true) && (column.table.options.enableColumnResizing ?? true);\n}\n/**\n* Checks whether this column is the active column resize target.\n*\n* The value is read from `state.columnResizing.isResizingColumn`.\n*\n* @example\n* ```ts\n* const isResizing = column_getIsResizing(column)\n* ```\n*/\nfunction column_getIsResizing(column) {\n\treturn column.table.atoms.columnResizing?.get()?.isResizingColumn === column.id;\n}\n/**\n* Creates the pointer/touch start handler for resizing a header.\n*\n* The handler records starting sizes for all leaf headers, tracks drag deltas,\n* writes transient resize info, and commits column sizes on change or drag end\n* depending on `columnResizeMode`.\n*\n* @example\n* ```ts\n* const onMouseDown = header_getResizeHandler(header)\n* ```\n*/\nfunction header_getResizeHandler(header, _contextDocument) {\n\tconst column = header.table.getColumn(header.column.id);\n\tconst canResize = column_getCanResize(column);\n\treturn (event) => {\n\t\tif (!canResize) return;\n\t\tif (isTouchStartEvent(event)) {\n\t\t\tif (event.touches.length > 1) return;\n\t\t}\n\t\tconst startSize = header_getSize(header);\n\t\tconst columnSizingStart = header.getLeafHeaders().map((leafHeader) => [leafHeader.column.id, column_getSize(leafHeader.column)]);\n\t\tconst clientX = isTouchStartEvent(event) ? Math.round(event.touches[0].clientX) : event.clientX;\n\t\tconst newColumnSizing = makeObjectMap();\n\t\tconst updateOffset = (eventType, clientXPos) => {\n\t\t\tif (typeof clientXPos !== \"number\") return;\n\t\t\tconst table = column.table;\n\t\t\tconst isCommit = table.options.columnResizeMode === \"onChange\" || eventType === \"end\";\n\t\t\ttable._reactivity.batch(() => {\n\t\t\t\ttable_setColumnResizing(table, (old) => {\n\t\t\t\t\tconst deltaDirection = table.options.columnResizeDirection === \"rtl\" ? -1 : 1;\n\t\t\t\t\tconst deltaOffset = (clientXPos - (old.startOffset ?? 0)) * deltaDirection;\n\t\t\t\t\tconst startSize = old.startSize ?? 0;\n\t\t\t\t\tconst deltaPercentage = Math.max(startSize > 0 ? deltaOffset / startSize : 0, -.999999);\n\t\t\t\t\tif (isCommit) {\n\t\t\t\t\t\tconst columnSizingStart = old.columnSizingStart;\n\t\t\t\t\t\tfor (let i = 0; i < columnSizingStart.length; i++) {\n\t\t\t\t\t\t\tconst entry = columnSizingStart[i];\n\t\t\t\t\t\t\tconst headerSize = entry[1];\n\t\t\t\t\t\t\tnewColumnSizing[entry[0]] = Math.round(Math.max(headerSize > 0 ? headerSize + headerSize * deltaPercentage : deltaOffset / columnSizingStart.length, 0) * 100) / 100;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...old,\n\t\t\t\t\t\tdeltaOffset,\n\t\t\t\t\t\tdeltaPercentage\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tif (isCommit) table_setColumnSizing(table, (old) => Object.assign(makeObjectMap(), old, newColumnSizing));\n\t\t\t});\n\t\t};\n\t\tlet moveRafId = null;\n\t\tlet hasPendingMove = false;\n\t\tlet latestMoveX;\n\t\tconst flushMove = () => {\n\t\t\tif (hasPendingMove) {\n\t\t\t\thasPendingMove = false;\n\t\t\t\tupdateOffset(\"move\", latestMoveX);\n\t\t\t\tmoveRafId = requestAnimationFrame(flushMove);\n\t\t\t} else moveRafId = null;\n\t\t};\n\t\tconst onMove = (clientXPos) => {\n\t\t\tlatestMoveX = clientXPos;\n\t\t\tif (typeof requestAnimationFrame !== \"function\") {\n\t\t\t\tupdateOffset(\"move\", clientXPos);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (moveRafId !== null) {\n\t\t\t\thasPendingMove = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tupdateOffset(\"move\", clientXPos);\n\t\t\tmoveRafId = requestAnimationFrame(flushMove);\n\t\t};\n\t\tconst onEnd = (clientXPos) => {\n\t\t\tif (moveRafId !== null) {\n\t\t\t\tcancelAnimationFrame(moveRafId);\n\t\t\t\tmoveRafId = null;\n\t\t\t\thasPendingMove = false;\n\t\t\t}\n\t\t\tcolumn.table._reactivity.batch(() => {\n\t\t\t\tupdateOffset(\"end\", clientXPos ?? latestMoveX);\n\t\t\t\ttable_setColumnResizing(column.table, (old) => ({\n\t\t\t\t\t...old,\n\t\t\t\t\tisResizingColumn: false,\n\t\t\t\t\tstartOffset: null,\n\t\t\t\t\tstartSize: null,\n\t\t\t\t\tdeltaOffset: null,\n\t\t\t\t\tdeltaPercentage: null,\n\t\t\t\t\tcolumnSizingStart: []\n\t\t\t\t}));\n\t\t\t});\n\t\t};\n\t\tconst contextDocument = _contextDocument || (typeof document !== \"undefined\" ? document : null);\n\t\tconst mouseEvents = {\n\t\t\tmoveHandler: (e) => onMove(e.clientX),\n\t\t\tupHandler: (e) => {\n\t\t\t\tcontextDocument?.removeEventListener(\"mousemove\", mouseEvents.moveHandler);\n\t\t\t\tcontextDocument?.removeEventListener(\"mouseup\", mouseEvents.upHandler);\n\t\t\t\tonEnd(e.clientX);\n\t\t\t}\n\t\t};\n\t\tconst touchEvents = {\n\t\t\tmoveHandler: (touchEvent) => {\n\t\t\t\tif (touchEvent.cancelable) {\n\t\t\t\t\ttouchEvent.preventDefault();\n\t\t\t\t\ttouchEvent.stopPropagation();\n\t\t\t\t}\n\t\t\t\tonMove(touchEvent.touches[0].clientX);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tupHandler: (e) => {\n\t\t\t\tremoveTouchEvents();\n\t\t\t\tif (e.cancelable) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tonEnd(e.touches[0]?.clientX);\n\t\t\t},\n\t\t\tcancelHandler: () => {\n\t\t\t\tremoveTouchEvents();\n\t\t\t\tonEnd();\n\t\t\t}\n\t\t};\n\t\tconst removeTouchEvents = () => {\n\t\t\tcontextDocument?.removeEventListener(\"touchmove\", touchEvents.moveHandler);\n\t\t\tcontextDocument?.removeEventListener(\"touchend\", touchEvents.upHandler);\n\t\t\tcontextDocument?.removeEventListener(\"touchcancel\", touchEvents.cancelHandler);\n\t\t};\n\t\tconst passiveIfSupported = passiveEventSupported() ? { passive: false } : false;\n\t\tif (isTouchStartEvent(event)) {\n\t\t\tcontextDocument?.addEventListener(\"touchmove\", touchEvents.moveHandler, passiveIfSupported);\n\t\t\tcontextDocument?.addEventListener(\"touchend\", touchEvents.upHandler, passiveIfSupported);\n\t\t\tcontextDocument?.addEventListener(\"touchcancel\", touchEvents.cancelHandler, passiveIfSupported);\n\t\t} else {\n\t\t\tcontextDocument?.addEventListener(\"mousemove\", mouseEvents.moveHandler, passiveIfSupported);\n\t\t\tcontextDocument?.addEventListener(\"mouseup\", mouseEvents.upHandler, passiveIfSupported);\n\t\t}\n\t\ttable_setColumnResizing(column.table, (old) => ({\n\t\t\t...old,\n\t\t\tstartOffset: clientX,\n\t\t\tstartSize,\n\t\t\tdeltaOffset: 0,\n\t\t\tdeltaPercentage: 0,\n\t\t\tcolumnSizingStart,\n\t\t\tisResizingColumn: column.id\n\t\t}));\n\t};\n}\n/**\n* Routes a transient column resizing updater through the table's resize handler.\n*\n* This state tracks the active drag interaction; committed widths live in\n* `columnSizing`.\n*\n* @example\n* ```ts\n* table_setColumnResizing(table, (old) => ({ ...old, deltaOffset: 12 }))\n* ```\n*/\nfunction table_setColumnResizing(table, updater) {\n\ttable.options.onColumnResizingChange?.(updater);\n}\n/**\n* Resets `columnResizing` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnResizing` when\n* it exists. Passing `true` ignores initial state and resets to the no-drag\n* default state.\n*\n* @example\n* ```ts\n* table_resetHeaderSizeInfo(table)\n* table_resetHeaderSizeInfo(table, true)\n* ```\n*/\nfunction table_resetHeaderSizeInfo(table, defaultState) {\n\ttable_setColumnResizing(table, defaultState ? getDefaultColumnResizingState() : cloneState(table.initialState.columnResizing ?? getDefaultColumnResizingState()));\n}\nlet passiveSupported = null;\n/**\n* Detects whether the current environment supports passive event listeners.\n*\n* Column resizing uses this to register pointer and touch listeners with\n* `passive: false` only when the environment understands passive options.\n*\n* @example\n* ```ts\n* const canUsePassiveListeners = passiveEventSupported()\n* ```\n*/\nfunction passiveEventSupported() {\n\tif (typeof passiveSupported === \"boolean\") return passiveSupported;\n\tlet supported = false;\n\ttry {\n\t\tconst options = { get passive() {\n\t\t\tsupported = true;\n\t\t\treturn false;\n\t\t} };\n\t\tconst noop = () => {};\n\t\twindow.addEventListener(\"test\", noop, options);\n\t\twindow.removeEventListener(\"test\", noop);\n\t} catch (err) {\n\t\tsupported = false;\n\t}\n\tpassiveSupported = supported;\n\treturn passiveSupported;\n}\n/**\n* Narrows an unknown event to a `touchstart` event.\n*\n* Column resizing uses this before reading touch coordinates and installing\n* touch-specific listeners.\n*\n* @example\n* ```ts\n* const isTouch = isTouchStartEvent(event)\n* ```\n*/\nfunction isTouchStartEvent(e) {\n\treturn e.type === \"touchstart\";\n}\n\n//#endregion\nexport { column_getCanResize, column_getIsResizing, getDefaultColumnResizingState, header_getResizeHandler, isTouchStartEvent, passiveEventSupported, table_resetHeaderSizeInfo, table_setColumnResizing };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { column_getCanResize, column_getIsResizing, getDefaultColumnResizingState, header_getResizeHandler, table_resetHeaderSizeInfo, table_setColumnResizing } from \"./columnResizingFeature.utils.js\";\n\n//#region src/features/column-resizing/columnResizingFeature.ts\n/**\n* Feature that adds column resizing state, options, and resize handlers.\n*/\nconst columnResizingFeature = {\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\tcolumnResizing: getDefaultColumnResizingState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn {\n\t\t\tcolumnResizeMode: \"onEnd\",\n\t\t\tcolumnResizeDirection: \"ltr\",\n\t\t\tonColumnResizingChange: makeStateUpdater(\"columnResizing\", table)\n\t\t};\n\t},\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnResizingFeature\", prototype, table, {\n\t\t\tcolumn_getCanResize: { fn: (column) => column_getCanResize(column) },\n\t\t\tcolumn_getIsResizing: { fn: (column) => column_getIsResizing(column) }\n\t\t});\n\t},\n\tassignHeaderPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnResizingFeature\", prototype, table, { header_getResizeHandler: { fn: (header, _contextDocument) => header_getResizeHandler(header, _contextDocument) } });\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"columnResizingFeature\", table, {\n\t\t\ttable_setColumnResizing: { fn: (updater) => table_setColumnResizing(table, updater) },\n\t\t\ttable_resetHeaderSizeInfo: { fn: (defaultState) => table_resetHeaderSizeInfo(table, defaultState) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { columnResizingFeature };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { column_getAfter, column_getSize, column_getStart, column_resetSize, getDefaultColumnSizingColumnDef, getDefaultColumnSizingState, header_getSize, header_getStart, table_getCenterTotalSize, table_getColumnOffsets, table_getEndTotalSize, table_getStartTotalSize, table_getTotalSize, table_resetColumnSizing, table_setColumnSizing } from \"./columnSizingFeature.utils.js\";\n\n//#region src/features/column-sizing/columnSizingFeature.ts\n/**\n* Feature that adds column sizing state, defaults, and size measurement APIs.\n*/\nconst columnSizingFeature = {\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\tcolumnSizing: getDefaultColumnSizingState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultColumnDef: () => {\n\t\treturn getDefaultColumnSizingColumnDef();\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn { onColumnSizingChange: makeStateUpdater(\"columnSizing\", table) };\n\t},\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnSizingFeature\", prototype, table, {\n\t\t\tcolumn_getSize: {\n\t\t\t\tfn: (column) => column_getSize(column),\n\t\t\t\tmemoDeps: (column) => [table.options.columns, table.atoms.columnSizing?.get()?.[column.id]]\n\t\t\t},\n\t\t\tcolumn_getStart: { fn: (column, position) => column_getStart(column, position) },\n\t\t\tcolumn_getAfter: { fn: (column, position) => column_getAfter(column, position) },\n\t\t\tcolumn_resetSize: { fn: (column) => column_resetSize(column) }\n\t\t});\n\t},\n\tassignHeaderPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnSizingFeature\", prototype, table, {\n\t\t\theader_getSize: {\n\t\t\t\tfn: (header) => header_getSize(header),\n\t\t\t\tmemoDeps: (header) => [table.options.columns, header.column.columns.length > 0 ? table.atoms.columnSizing?.get() : table.atoms.columnSizing?.get()?.[header.column.id]]\n\t\t\t},\n\t\t\theader_getStart: {\n\t\t\t\tfn: (header) => header_getStart(header),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnSizing?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"columnSizingFeature\", table, {\n\t\t\ttable_getColumnOffsets: {\n\t\t\t\tfn: () => table_getColumnOffsets(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnSizing?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_setColumnSizing: { fn: (updater) => table_setColumnSizing(table, updater) },\n\t\t\ttable_resetColumnSizing: { fn: (defaultState) => table_resetColumnSizing(table, defaultState) },\n\t\t\ttable_getTotalSize: {\n\t\t\t\tfn: () => table_getTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getStartTotalSize: {\n\t\t\t\tfn: () => table_getStartTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getCenterTotalSize: {\n\t\t\t\tfn: () => table_getCenterTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getEndTotalSize: {\n\t\t\t\tfn: () => table_getEndTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { columnSizingFeature };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { column_getCanHide, column_getIsVisible, column_getToggleVisibilityHandler, column_toggleVisibility, getDefaultColumnVisibilityState, row_getVisibleCells, row_getVisibleCellsByColumnId, table_getIsAllColumnsVisible, table_getIsSomeColumnsVisible, table_getToggleAllColumnsVisibilityHandler, table_getVisibleFlatColumns, table_getVisibleLeafColumns, table_resetColumnVisibility, table_setColumnVisibility, table_toggleAllColumnsVisible } from \"./columnVisibilityFeature.utils.js\";\n\n//#region src/features/column-visibility/columnVisibilityFeature.ts\n/**\n* Feature that adds column visibility state and APIs for hiding and showing columns.\n*/\nconst columnVisibilityFeature = {\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\tcolumnVisibility: getDefaultColumnVisibilityState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn { onColumnVisibilityChange: makeStateUpdater(\"columnVisibility\", table) };\n\t},\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnVisibilityFeature\", prototype, table, {\n\t\t\tcolumn_getIsVisible: {\n\t\t\t\tfn: (column) => column_getIsVisible(column),\n\t\t\t\tmemoDeps: (column) => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\tcolumn.columns\n\t\t\t\t]\n\t\t\t},\n\t\t\tcolumn_getCanHide: { fn: (column) => column_getCanHide(column) },\n\t\t\tcolumn_getToggleVisibilityHandler: { fn: (column) => column_getToggleVisibilityHandler(column) },\n\t\t\tcolumn_toggleVisibility: { fn: (column, visible) => column_toggleVisibility(column, visible) }\n\t\t});\n\t},\n\tassignRowPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnVisibilityFeature\", prototype, table, {\n\t\t\trow_getVisibleCells: {\n\t\t\t\tfn: (row) => row_getVisibleCells(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.getAllCells(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\trow_getVisibleCellsByColumnId: {\n\t\t\t\tfn: (row) => row_getVisibleCellsByColumnId(row),\n\t\t\t\tmemoDeps: (row) => [row.getAllCells(), table.atoms.columnVisibility?.get()]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"columnVisibilityFeature\", table, {\n\t\t\ttable_getVisibleFlatColumns: {\n\t\t\t\tfn: () => table_getVisibleFlatColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getVisibleLeafColumns: {\n\t\t\t\tfn: () => table_getVisibleLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_setColumnVisibility: { fn: (updater) => table_setColumnVisibility(table, updater) },\n\t\t\ttable_resetColumnVisibility: { fn: (defaultState) => table_resetColumnVisibility(table, defaultState) },\n\t\t\ttable_toggleAllColumnsVisible: { fn: (value) => table_toggleAllColumnsVisible(table, value) },\n\t\t\ttable_getIsAllColumnsVisible: { fn: () => table_getIsAllColumnsVisible(table) },\n\t\t\ttable_getIsSomeColumnsVisible: { fn: () => table_getIsSomeColumnsVisible(table) },\n\t\t\ttable_getToggleAllColumnsVisibilityHandler: { fn: () => table_getToggleAllColumnsVisibilityHandler(table) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { columnVisibilityFeature };","import { callMemoOrStaticFn, cloneState, copyInstancePropertiesWithoutMemos, hasOwn, makeObjectMap } from \"../../utils.js\";\n\n//#region src/features/row-selection/rowSelectionFeature.utils.ts\n/**\n* Creates the default row selection state.\n*\n* The feature default is an empty map, meaning no rows are selected. Reset APIs\n* use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const selection = getDefaultRowSelectionState()\n* ```\n*/\nfunction getDefaultRowSelectionState() {\n\treturn makeObjectMap();\n}\n/**\n* Routes a row selection updater through the table's selection change handler.\n*\n* The updater may be a next selection map or a function of the previous map,\n* matching the instance `table.setRowSelection` behavior.\n*\n* @example\n* ```ts\n* table_setRowSelection(table, (old) => ({ ...old, [rowId]: true }))\n* ```\n*/\nfunction table_setRowSelection(table, updater) {\n\ttable.options.onRowSelectionChange?.(updater);\n}\n/**\n* Resets `rowSelection` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.rowSelection` when it\n* exists. Passing `true` ignores initial state and resets to `{}`.\n*\n* @example\n* ```ts\n* table_resetRowSelection(table)\n* table_resetRowSelection(table, true)\n* ```\n*/\nfunction table_resetRowSelection(table, defaultState) {\n\ttable._lastSelectedRowId = null;\n\ttable_setRowSelection(table, defaultState ? makeObjectMap() : Object.assign(makeObjectMap(), cloneState(table.initialState.rowSelection ?? {})));\n}\n/**\n* Selects or deselects every selectable row before grouping.\n*\n* Omitting `value` toggles based on `table_getIsAllRowsSelected(table)`.\n* Selecting skips sub-rows whose ancestors block descent via\n* `enableSubRowSelection`. Deselecting removes matching selectable ids from the\n* existing selection map; rows that cannot be selected keep their selection\n* unless `opts.deselectAll` is `true`.\n*\n* @example\n* ```ts\n* table_toggleAllRowsSelected(table)\n* ```\n*/\nfunction table_toggleAllRowsSelected(table, value, opts) {\n\ttable._lastSelectedRowId = null;\n\ttable_setRowSelection(table, (old) => {\n\t\tvalue = typeof value !== \"undefined\" ? value : !callMemoOrStaticFn(table, \"getIsAllRowsSelected\", table_getIsAllRowsSelected);\n\t\tif (opts?.deselectAll && !value) return makeObjectMap();\n\t\tconst rowSelection = Object.assign(makeObjectMap(), old);\n\t\tconst preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\t\tif (value) {\n\t\t\tconst subtreeCache = /* @__PURE__ */ new Map();\n\t\t\tpreGroupedFlatRows.forEach((row) => {\n\t\t\t\tif (isRowSelectableInSelectAll(row, subtreeCache)) rowSelection[row.id] = true;\n\t\t\t});\n\t\t} else preGroupedFlatRows.forEach((row) => {\n\t\t\tif (row_getCanSelect(row)) delete rowSelection[row.id];\n\t\t});\n\t\treturn rowSelection;\n\t});\n}\n/**\n* Selects or deselects every selectable row on the current page.\n*\n* Omitting `value` toggles based on `table_getIsAllPageRowsSelected(table)`.\n* Child rows are included when sub-row selection allows it.\n*\n* @example\n* ```ts\n* table_toggleAllPageRowsSelected(table)\n* ```\n*/\nfunction table_toggleAllPageRowsSelected(table, value, opts) {\n\ttable._lastSelectedRowId = null;\n\ttable_setRowSelection(table, (old) => {\n\t\tconst resolvedValue = typeof value !== \"undefined\" ? value : !callMemoOrStaticFn(table, \"getIsAllPageRowsSelected\", table_getIsAllPageRowsSelected);\n\t\tif (opts?.deselectAll && !resolvedValue) return makeObjectMap();\n\t\tconst rowSelection = Object.assign(makeObjectMap(), old);\n\t\ttable.getRowModel().rows.forEach((row) => {\n\t\t\tmutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table, true);\n\t\t});\n\t\treturn rowSelection;\n\t});\n}\n/**\n* Reads the row model before row selection is projected into selected rows.\n*\n* Selection does not alter the base row pipeline, so this returns the core row\n* model.\n*\n* @example\n* ```ts\n* const rowsBeforeSelection = table_getPreSelectedRowModel(table)\n* ```\n*/\nfunction table_getPreSelectedRowModel(table) {\n\treturn table.getCoreRowModel();\n}\n/**\n* Builds a row model containing selected rows from the core row model.\n*\n* If no row ids are selected, an empty row model is returned without walking\n* the rows.\n*\n* @example\n* ```ts\n* const selectedRows = table_getSelectedRowModel(table)\n* ```\n*/\nfunction table_getSelectedRowModel(table) {\n\tconst rowModel = table.getCoreRowModel();\n\tif (!callMemoOrStaticFn(table, \"getIsSomeRowsSelected\", table_getIsSomeRowsSelected)) return {\n\t\trows: [],\n\t\tflatRows: [],\n\t\trowsById: makeObjectMap()\n\t};\n\treturn selectRowsFn(rowModel, table);\n}\n/**\n* Builds a row model containing selected rows from the filtered row model.\n*\n* If no row ids are selected, an empty row model is returned without walking\n* the rows.\n*\n* @example\n* ```ts\n* const selectedRows = table_getFilteredSelectedRowModel(table)\n* ```\n*/\nfunction table_getFilteredSelectedRowModel(table) {\n\tconst rowModel = table.getFilteredRowModel();\n\tif (!callMemoOrStaticFn(table, \"getIsSomeRowsSelected\", table_getIsSomeRowsSelected)) return {\n\t\trows: [],\n\t\tflatRows: [],\n\t\trowsById: makeObjectMap()\n\t};\n\treturn selectRowsFn(rowModel, table);\n}\n/**\n* Builds a row model containing selected rows from the grouped row model.\n*\n* If no row ids are selected, an empty row model is returned without walking\n* the rows.\n*\n* @example\n* ```ts\n* const selectedRows = table_getGroupedSelectedRowModel(table)\n* ```\n*/\nfunction table_getGroupedSelectedRowModel(table) {\n\tconst rowModel = table.getSortedRowModel();\n\tif (!callMemoOrStaticFn(table, \"getIsSomeRowsSelected\", table_getIsSomeRowsSelected)) return {\n\t\trows: [],\n\t\tflatRows: [],\n\t\trowsById: makeObjectMap()\n\t};\n\treturn selectRowsFn(rowModel, table);\n}\n/**\n* Returns the ids of all selected rows.\n*\n* @example\n* ```ts\n* const selectedRowIds = table_getSelectedRowIds(table)\n* ```\n*/\nfunction table_getSelectedRowIds(table) {\n\treturn Object.keys(table.atoms.rowSelection?.get() ?? {});\n}\n/**\n* Checks whether every selectable filtered row is selected.\n*\n* The result is false when there are no filtered rows or when selection state is\n* empty. Sub-rows whose ancestors block descent via `enableSubRowSelection` are\n* ignored, matching the rows that `table_toggleAllRowsSelected` selects.\n*\n* @example\n* ```ts\n* const allSelected = table_getIsAllRowsSelected(table)\n* ```\n*/\nfunction table_getIsAllRowsSelected(table) {\n\tconst preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n\tconst rowSelection = table.atoms.rowSelection?.get() ?? {};\n\tlet isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n\tif (isAllRowsSelected) {\n\t\tconst subtreeCache = /* @__PURE__ */ new Map();\n\t\tif (preGroupedFlatRows.some((row) => !isRowSelected(row, rowSelection) && isRowSelectableInSelectAll(row, subtreeCache))) isAllRowsSelected = false;\n\t}\n\treturn isAllRowsSelected;\n}\n/**\n* Checks whether every selectable row on the current page is selected.\n*\n* Non-selectable rows are ignored for this calculation, as are sub-rows whose\n* ancestors block descent via `enableSubRowSelection`.\n*\n* @example\n* ```ts\n* const allPageRowsSelected = table_getIsAllPageRowsSelected(table)\n* ```\n*/\nfunction table_getIsAllPageRowsSelected(table) {\n\tconst paginationFlatRows = table.getPaginatedRowModel().flatRows;\n\tconst rowSelection = table.atoms.rowSelection?.get() ?? {};\n\tconst subtreeCache = /* @__PURE__ */ new Map();\n\tlet sawSelectableRow = false;\n\tfor (let i = 0; i < paginationFlatRows.length; i++) {\n\t\tconst row = paginationFlatRows[i];\n\t\tif (!isRowSelected(row, rowSelection)) {\n\t\t\tif (isRowSelectableInSelectAll(row, subtreeCache)) return false;\n\t\t} else if (!sawSelectableRow && isRowSelectableInSelectAll(row, subtreeCache)) sawSelectableRow = true;\n\t}\n\treturn sawSelectableRow;\n}\n/**\n* Checks whether at least one row id is selected.\n*\n* The result stays true when every row is selected.\n*\n* @example\n* ```ts\n* const someRowsSelected = table_getIsSomeRowsSelected(table)\n* ```\n*/\nfunction table_getIsSomeRowsSelected(table) {\n\treturn callMemoOrStaticFn(table, \"getSelectedRowIds\", table_getSelectedRowIds).length > 0;\n}\n/**\n* Checks whether at least one selectable row on the current page is selected.\n*\n* @example\n* ```ts\n* const somePageRowsSelected = table_getIsSomePageRowsSelected(table)\n* ```\n*/\nfunction table_getIsSomePageRowsSelected(table) {\n\treturn table.getPaginatedRowModel().flatRows.filter((row) => row_getCanSelect(row)).some((row) => row_getIsSelected(row) || callMemoOrStaticFn(row, \"getIsSomeSelected\", row_getIsSomeSelected));\n}\n/**\n* Creates a checkbox-style handler that selects or deselects all rows.\n*\n* The handler reads `event.target.checked`, so it is intended for controls whose\n* checked state means \"all rows selected\".\n*\n* @example\n* ```ts\n* const onChange = table_getToggleAllRowsSelectedHandler(table)\n* ```\n*/\nfunction table_getToggleAllRowsSelectedHandler(table) {\n\treturn (e) => {\n\t\ttable_toggleAllRowsSelected(table, e.target.checked);\n\t};\n}\n/**\n* Creates a checkbox-style handler that selects or deselects current page rows.\n*\n* The handler reads `event.target.checked`, so it is intended for controls whose\n* checked state means \"all page rows selected\".\n*\n* @example\n* ```ts\n* const onChange = table_getToggleAllPageRowsSelectedHandler(table)\n* ```\n*/\nfunction table_getToggleAllPageRowsSelectedHandler(table) {\n\treturn (e) => {\n\t\ttable_toggleAllPageRowsSelected(table, e.target.checked);\n\t};\n}\n/**\n* Selects or deselects this row.\n*\n* Omitting `value` toggles the row. Child rows are selected recursively unless\n* `opts.selectChildren` is `false`, sub-row selection is disabled, or the row\n* only supports single selection. Pass `deselectParents: true` to also remove\n* ancestor row ids from the selection when this row is deselected.\n*\n* @example\n* ```ts\n* row_toggleSelected(row)\n* row_toggleSelected(row, true)\n* row_toggleSelected(row, false)\n* row_toggleSelected(row, true, { selectChildren: false })\n* row_toggleSelected(row, false, { deselectParents: true })\n* ```\n*/\nfunction row_toggleSelected(row, value, opts) {\n\tconst isSelected = row_getIsSelected(row);\n\ttable_setRowSelection(row.table, (old) => {\n\t\tvalue = typeof value !== \"undefined\" ? value : !isSelected;\n\t\tconst rowSelection = Object.assign(makeObjectMap(), old);\n\t\tmutateRowIsSelected(rowSelection, row.id, value, (opts?.selectChildren ?? true) && row_getCanMultiSelect(row), row.table);\n\t\tif (!value && opts?.deselectParents) pruneAncestorRowIds(rowSelection, row);\n\t\treturn rowSelection;\n\t});\n}\n/**\n* Checks whether this row id is selected in `state.rowSelection`.\n*\n* Missing row ids are treated as not selected.\n*\n* @example\n* ```ts\n* const selected = row_getIsSelected(row)\n* ```\n*/\nfunction row_getIsSelected(row) {\n\treturn isRowSelected(row, row.table.atoms.rowSelection?.get() ?? {});\n}\n/**\n* Checks whether some, but not all, selectable descendants are selected.\n*\n* This supports indeterminate selection UI for parent rows.\n*\n* @example\n* ```ts\n* const partial = row_getIsSomeSelected(row)\n* ```\n*/\nfunction row_getIsSomeSelected(row) {\n\treturn isSubRowSelected(row) === \"some\";\n}\n/**\n* Checks whether all selectable descendants are selected.\n*\n* Rows without selectable descendants return false.\n*\n* @example\n* ```ts\n* const allChildrenSelected = row_getIsAllSubRowsSelected(row)\n* ```\n*/\nfunction row_getIsAllSubRowsSelected(row) {\n\treturn isSubRowSelected(row) === \"all\";\n}\n/**\n* Checks whether this row can be selected.\n*\n* `options.enableRowSelection` may be a boolean or a row predicate; it defaults\n* to `true`.\n*\n* @example\n* ```ts\n* const canSelect = row_getCanSelect(row)\n* ```\n*/\nfunction row_getCanSelect(row) {\n\tconst options = row.table.options;\n\tif (typeof options.enableRowSelection === \"function\") return options.enableRowSelection(row);\n\treturn options.enableRowSelection ?? true;\n}\n/**\n* Checks whether selecting this row should also select its subRows.\n*\n* `options.enableSubRowSelection` may be a boolean or a row predicate; it\n* defaults to `true`.\n*\n* @example\n* ```ts\n* const canSelectChildren = row_getCanSelectSubRows(row)\n* ```\n*/\nfunction row_getCanSelectSubRows(row) {\n\tconst options = row.table.options;\n\tif (typeof options.enableSubRowSelection === \"function\") return options.enableSubRowSelection(row);\n\treturn options.enableSubRowSelection ?? true;\n}\n/**\n* Checks whether this row can be selected alongside other rows.\n*\n* `options.enableMultiRowSelection` may be a boolean or a row predicate; it\n* defaults to `true`.\n*\n* @example\n* ```ts\n* const canMultiSelect = row_getCanMultiSelect(row)\n* ```\n*/\nfunction row_getCanMultiSelect(row) {\n\tconst options = row.table.options;\n\tif (typeof options.enableMultiRowSelection === \"function\") return options.enableMultiRowSelection(row);\n\treturn options.enableMultiRowSelection ?? true;\n}\n/**\n* Creates a checkbox-style handler that selects or deselects this row.\n*\n* The handler is a no-op when the row cannot be selected and reads\n* `event.target.checked`. Shift events select or deselect the inclusive range\n* from the most recent selectable row handled by this table. Pass\n* `selectChildren: false` to limit changes to rows explicitly present in the\n* display-order interval, and `deselectParents: true` to remove ancestor row\n* ids from the selection when rows are deselected.\n*\n* @example\n* ```ts\n* const onChange = row_getToggleSelectedHandler(row)\n* ```\n*/\nfunction row_getToggleSelectedHandler(row, opts) {\n\tconst canSelect = row_getCanSelect(row);\n\treturn (e) => {\n\t\tif (!canSelect) return;\n\t\tconst event = e;\n\t\tconst table = row.table;\n\t\tconst checked = event.target.checked;\n\t\tconst anchorId = table._lastSelectedRowId;\n\t\tif (!(table.options.enableRowRangeSelection !== false && anchorId !== null && row_getCanMultiSelect(row) && (table.options.isRowRangeSelectionEvent?.(e) ?? false)) || !selectRowRange(row, anchorId, checked, opts)) row_toggleSelected(row, checked, opts);\n\t\ttable._lastSelectedRowId = row.id;\n\t};\n}\n/**\n* Resolves and mutates an inclusive interval in the table's latest logical\n* display order.\n*\n* The anchor is resolved without throwing from the pre-pagination row model,\n* then the core row model. Both endpoint display indexes must still identify\n* those rows in the current order and both endpoints must support\n* multi-selection. Eligible interval rows are applied through one row\n* selection updater; non-selectable and non-multi-selectable rows are skipped.\n* Returns `false` when the interaction should fall back to an ordinary toggle.\n*/\nfunction selectRowRange(row, anchorId, value, opts) {\n\tconst includeChildren = opts?.selectChildren ?? true;\n\tconst table = row.table;\n\tconst rows = table.getRowsInDisplayOrder();\n\tconst anchorRow = table.getPrePaginatedRowModel().rowsById[anchorId] ?? table.getCoreRowModel().rowsById[anchorId];\n\tif (!anchorRow) return false;\n\tconst anchorIndex = anchorRow.getDisplayIndex();\n\tconst rowIndex = row.getDisplayIndex();\n\tconst anchorAtIndex = rows[anchorIndex];\n\tconst rowAtIndex = rows[rowIndex];\n\tif (anchorIndex < 0 || rowIndex < 0 || anchorIndex >= rows.length || rowIndex >= rows.length || anchorAtIndex?.id !== anchorRow.id || rowAtIndex?.id !== row.id || !row_getCanMultiSelect(anchorRow) || !row_getCanMultiSelect(row)) return false;\n\tconst start = Math.min(anchorIndex, rowIndex);\n\tconst end = Math.max(anchorIndex, rowIndex);\n\ttable_setRowSelection(table, (old) => {\n\t\tconst rowSelection = Object.assign(makeObjectMap(), old);\n\t\tfor (let index = start; index <= end; index++) {\n\t\t\tconst rangeRow = rows[index];\n\t\t\tif (!row_getCanSelect(rangeRow) || !row_getCanMultiSelect(rangeRow)) continue;\n\t\t\tmutateRowIsSelected(rowSelection, rangeRow.id, value, includeChildren, table);\n\t\t\tif (!value && opts?.deselectParents) pruneAncestorRowIds(rowSelection, rangeRow);\n\t\t}\n\t\treturn rowSelection;\n\t});\n\treturn true;\n}\nfunction mutateRowIsSelected(rowSelection, rowId, value, includeChildren, table, respectCanSelectOnDeselect) {\n\tconst row = table.getRow(rowId, true);\n\tif (value) {\n\t\tif (!row_getCanMultiSelect(row)) Object.keys(rowSelection).forEach((key) => delete rowSelection[key]);\n\t\tif (row_getCanSelect(row)) rowSelection[rowId] = true;\n\t} else if (!respectCanSelectOnDeselect || row_getCanSelect(row)) delete rowSelection[rowId];\n\tif (includeChildren && row.subRows.length && row_getCanSelectSubRows(row)) row.subRows.forEach((r) => mutateRowIsSelected(rowSelection, r.id, value, includeChildren, table, respectCanSelectOnDeselect));\n}\n/**\n* Returns whether a select-all cascade can reach this row: the row itself is\n* selectable and no ancestor blocks descent via `enableSubRowSelection`.\n*\n* `subtreeCache` memoizes the per-ancestor verdict for one select-all pass, so\n* ancestor chains shared by sibling rows are only walked (and the\n* `enableSubRowSelection` predicate only invoked) once per unique ancestor.\n*/\nfunction isRowSelectableInSelectAll(row, subtreeCache) {\n\tif (!row_getCanSelect(row)) return false;\n\tconst table = row.table;\n\tif (table.options.enableSubRowSelection === true) return true;\n\tconst parentId = row.parentId;\n\tif (parentId === void 0) return true;\n\tconst cached = subtreeCache.get(parentId);\n\tif (cached !== void 0) return cached;\n\tconst rowsById = table.getCoreRowModel().rowsById;\n\tconst visited = [];\n\tlet selectable = true;\n\tlet currentId = parentId;\n\twhile (currentId !== void 0) {\n\t\tconst known = subtreeCache.get(currentId);\n\t\tif (known !== void 0) {\n\t\t\tselectable = known;\n\t\t\tbreak;\n\t\t}\n\t\tvisited.push(currentId);\n\t\tconst parent = rowsById[currentId] ?? table.getRow(currentId, true);\n\t\tif (!row_getCanSelectSubRows(parent)) {\n\t\t\tselectable = false;\n\t\t\tbreak;\n\t\t}\n\t\tcurrentId = parent.parentId;\n\t}\n\tvisited.forEach((id) => subtreeCache.set(id, selectable));\n\treturn selectable;\n}\nfunction pruneAncestorRowIds(rowSelection, row) {\n\tconst rowsById = row.table.getCoreRowModel().rowsById;\n\tlet parentId = row.parentId;\n\twhile (parentId !== void 0) {\n\t\tdelete rowSelection[parentId];\n\t\tparentId = (rowsById[parentId] ?? row.table.getRow(parentId, true)).parentId;\n\t}\n}\nfunction selectRowsRecursively(rows, rowSelection, selectedFlatRows, selectedRowsById) {\n\tconst result = [];\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tconst row = rows[i];\n\t\tconst isSelected = isRowSelected(row, rowSelection);\n\t\tif (isSelected) {\n\t\t\tselectedFlatRows.push(row);\n\t\t\tselectedRowsById[row.id] = row;\n\t\t}\n\t\tif (row.subRows.length) {\n\t\t\tconst newSubRows = selectRowsRecursively(row.subRows, rowSelection, selectedFlatRows, selectedRowsById);\n\t\t\tif (isSelected) {\n\t\t\t\tconst cloned = Object.create(Object.getPrototypeOf(row));\n\t\t\t\tcopyInstancePropertiesWithoutMemos(cloned, row);\n\t\t\t\tcloned.subRows = newSubRows;\n\t\t\t\tresult.push(cloned);\n\t\t\t}\n\t\t} else if (isSelected) result.push(row);\n\t}\n\treturn result;\n}\n/**\n* Builds a row model containing rows selected by the current row selection state.\n*\n* The result is derived from the supplied row model, so selected ids absent from\n* that model are not materialized as rows.\n*\n* @example\n* ```ts\n* const selectedRows = selectRowsFn(rowModel)\n* ```\n*/\nfunction selectRowsFn(rowModel, table) {\n\tconst newSelectedFlatRows = [];\n\tconst newSelectedRowsById = makeObjectMap();\n\tconst rowSelection = table.atoms.rowSelection?.get() ?? {};\n\treturn {\n\t\trows: selectRowsRecursively(rowModel.rows, rowSelection, newSelectedFlatRows, newSelectedRowsById),\n\t\tflatRows: newSelectedFlatRows,\n\t\trowsById: newSelectedRowsById\n\t};\n}\n/**\n* Returns whether a row id is selected in the current row selection state.\n*\n* @example\n* ```ts\n* const selected = isRowSelected(row)\n* ```\n*/\nfunction isRowSelected(row, rowSelection) {\n\treturn !!(hasOwn(rowSelection, row.id) && rowSelection[row.id]);\n}\n/**\n* Returns whether all, some, or none of a row's selectable descendants are selected.\n*\n* The result is used to drive indeterminate row selection UI.\n*\n* @example\n* ```ts\n* const selectedState = isSubRowSelected(row)\n* ```\n*/\nfunction isSubRowSelected(row) {\n\tif (!row.subRows.length) return false;\n\tconst rowSelection = row.table.atoms.rowSelection?.get() ?? {};\n\tlet someSelected = false;\n\tlet allChildrenSelected = true;\n\tlet someSelectable = false;\n\tfor (let i = 0; i < row.subRows.length; i++) {\n\t\tconst subRow = row.subRows[i];\n\t\tif (someSelected && !allChildrenSelected) break;\n\t\tif (row_getCanSelect(subRow)) {\n\t\t\tsomeSelectable = true;\n\t\t\tif (isRowSelected(subRow, rowSelection)) someSelected = true;\n\t\t\telse allChildrenSelected = false;\n\t\t}\n\t\tif (subRow.subRows.length) {\n\t\t\tconst subRowChildrenSelected = isSubRowSelected(subRow);\n\t\t\tif (subRowChildrenSelected === \"all\") {\n\t\t\t\tsomeSelected = true;\n\t\t\t\tsomeSelectable = true;\n\t\t\t} else if (subRowChildrenSelected === \"some\") {\n\t\t\t\tsomeSelected = true;\n\t\t\t\tallChildrenSelected = false;\n\t\t\t\tsomeSelectable = true;\n\t\t\t} else allChildrenSelected = false;\n\t\t}\n\t}\n\tif (!someSelectable) return false;\n\treturn allChildrenSelected ? \"all\" : someSelected ? \"some\" : false;\n}\n\n//#endregion\nexport { getDefaultRowSelectionState, isRowSelected, isSubRowSelected, row_getCanMultiSelect, row_getCanSelect, row_getCanSelectSubRows, row_getIsAllSubRowsSelected, row_getIsSelected, row_getIsSomeSelected, row_getToggleSelectedHandler, row_toggleSelected, selectRowsFn, table_getFilteredSelectedRowModel, table_getGroupedSelectedRowModel, table_getIsAllPageRowsSelected, table_getIsAllRowsSelected, table_getIsSomePageRowsSelected, table_getIsSomeRowsSelected, table_getPreSelectedRowModel, table_getSelectedRowIds, table_getSelectedRowModel, table_getToggleAllPageRowsSelectedHandler, table_getToggleAllRowsSelectedHandler, table_resetRowSelection, table_setRowSelection, table_toggleAllPageRowsSelected, table_toggleAllRowsSelected };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { getDefaultRowSelectionState, row_getCanMultiSelect, row_getCanSelect, row_getCanSelectSubRows, row_getIsAllSubRowsSelected, row_getIsSelected, row_getIsSomeSelected, row_getToggleSelectedHandler, row_toggleSelected, table_getFilteredSelectedRowModel, table_getGroupedSelectedRowModel, table_getIsAllPageRowsSelected, table_getIsAllRowsSelected, table_getIsSomePageRowsSelected, table_getIsSomeRowsSelected, table_getPreSelectedRowModel, table_getSelectedRowIds, table_getSelectedRowModel, table_getToggleAllPageRowsSelectedHandler, table_getToggleAllRowsSelectedHandler, table_resetRowSelection, table_setRowSelection, table_toggleAllPageRowsSelected, table_toggleAllRowsSelected } from \"./rowSelectionFeature.utils.js\";\n\n//#region src/features/row-selection/rowSelectionFeature.ts\n/**\n* Feature that adds row selection state and APIs for row and page selection.\n*/\nconst rowSelectionFeature = {\n\tinitTableInstanceData: (table) => {\n\t\ttable._lastSelectedRowId = null;\n\t},\n\tresetTableInstanceData: (table) => {\n\t\ttable._lastSelectedRowId = null;\n\t},\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\trowSelection: getDefaultRowSelectionState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn {\n\t\t\tonRowSelectionChange: makeStateUpdater(\"rowSelection\", table),\n\t\t\tenableRowSelection: true,\n\t\t\tenableMultiRowSelection: true,\n\t\t\tenableRowRangeSelection: true,\n\t\t\tenableSubRowSelection: true,\n\t\t\tisRowRangeSelectionEvent: (event) => {\n\t\t\t\tconst rangeEvent = event;\n\t\t\t\treturn Boolean(rangeEvent.shiftKey || rangeEvent.nativeEvent?.shiftKey);\n\t\t\t}\n\t\t};\n\t},\n\tassignRowPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"rowSelectionFeature\", prototype, table, {\n\t\t\trow_toggleSelected: { fn: (row, value, opts) => row_toggleSelected(row, value, opts) },\n\t\t\trow_getIsSelected: { fn: (row) => row_getIsSelected(row) },\n\t\t\trow_getIsSomeSelected: {\n\t\t\t\tfn: (row) => row_getIsSomeSelected(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.subRows,\n\t\t\t\t\trow.table.atoms.rowSelection?.get(),\n\t\t\t\t\trow.table.options.enableRowSelection\n\t\t\t\t]\n\t\t\t},\n\t\t\trow_getIsAllSubRowsSelected: {\n\t\t\t\tfn: (row) => row_getIsAllSubRowsSelected(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.subRows,\n\t\t\t\t\trow.table.atoms.rowSelection?.get(),\n\t\t\t\t\trow.table.options.enableRowSelection\n\t\t\t\t]\n\t\t\t},\n\t\t\trow_getCanSelect: { fn: (row) => row_getCanSelect(row) },\n\t\t\trow_getCanSelectSubRows: { fn: (row) => row_getCanSelectSubRows(row) },\n\t\t\trow_getCanMultiSelect: { fn: (row) => row_getCanMultiSelect(row) },\n\t\t\trow_getToggleSelectedHandler: { fn: (row, opts) => row_getToggleSelectedHandler(row, opts) }\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"rowSelectionFeature\", table, {\n\t\t\ttable_setRowSelection: { fn: (updater) => table_setRowSelection(table, updater) },\n\t\t\ttable_resetRowSelection: { fn: (defaultState) => table_resetRowSelection(table, defaultState) },\n\t\t\ttable_toggleAllRowsSelected: { fn: (value, opts) => table_toggleAllRowsSelected(table, value, opts) },\n\t\t\ttable_toggleAllPageRowsSelected: { fn: (value, opts) => table_toggleAllPageRowsSelected(table, value, opts) },\n\t\t\ttable_getPreSelectedRowModel: { fn: () => table_getPreSelectedRowModel(table) },\n\t\t\ttable_getSelectedRowModel: {\n\t\t\t\tfn: () => table_getSelectedRowModel(table),\n\t\t\t\tmemoDeps: () => [table.atoms.rowSelection?.get(), table.getCoreRowModel()]\n\t\t\t},\n\t\t\ttable_getFilteredSelectedRowModel: {\n\t\t\t\tfn: () => table_getFilteredSelectedRowModel(table),\n\t\t\t\tmemoDeps: () => [table.atoms.rowSelection?.get(), table.getFilteredRowModel()]\n\t\t\t},\n\t\t\ttable_getGroupedSelectedRowModel: {\n\t\t\t\tfn: () => table_getGroupedSelectedRowModel(table),\n\t\t\t\tmemoDeps: () => [table.atoms.rowSelection?.get(), table.getSortedRowModel()]\n\t\t\t},\n\t\t\ttable_getSelectedRowIds: {\n\t\t\t\tfn: () => table_getSelectedRowIds(table),\n\t\t\t\tmemoDeps: () => [table.atoms.rowSelection?.get()]\n\t\t\t},\n\t\t\ttable_getIsAllRowsSelected: {\n\t\t\t\tfn: () => table_getIsAllRowsSelected(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.rowSelection?.get(),\n\t\t\t\t\ttable.getFilteredRowModel(),\n\t\t\t\t\ttable.options.enableRowSelection,\n\t\t\t\t\ttable.options.enableSubRowSelection\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getIsAllPageRowsSelected: {\n\t\t\t\tfn: () => table_getIsAllPageRowsSelected(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.rowSelection?.get(),\n\t\t\t\t\ttable.getPaginatedRowModel(),\n\t\t\t\t\ttable.options.enableRowSelection,\n\t\t\t\t\ttable.options.enableSubRowSelection\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getIsSomeRowsSelected: {\n\t\t\t\tfn: () => table_getIsSomeRowsSelected(table),\n\t\t\t\tmemoDeps: () => [table.atoms.rowSelection?.get()]\n\t\t\t},\n\t\t\ttable_getIsSomePageRowsSelected: {\n\t\t\t\tfn: () => table_getIsSomePageRowsSelected(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.rowSelection?.get(),\n\t\t\t\t\ttable.getPaginatedRowModel(),\n\t\t\t\t\ttable.options.enableRowSelection\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getToggleAllRowsSelectedHandler: { fn: () => table_getToggleAllRowsSelectedHandler(table) },\n\t\t\ttable_getToggleAllPageRowsSelectedHandler: { fn: () => table_getToggleAllPageRowsSelectedHandler(table) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { rowSelectionFeature };","import { flatMerge, mergeProxy } from \"./merge-proxy.js\";\nimport { vueReactivity } from \"./reactivity.js\";\nimport { getCurrentScope, onScopeDispose, unref, watch } from \"vue\";\nimport { constructTable } from \"@tanstack/table-core\";\n\n//#region src/useTable.ts\nfunction getOptionsWithReactiveValues(options) {\n\tconst resolvedOptions = {};\n\tfor (const key of Object.keys(options)) resolvedOptions[key] = unref(options[key]);\n\treturn mergeProxy(options, resolvedOptions);\n}\nfunction getReactiveOptionDeps(options) {\n\treturn Object.keys(options).map((key) => unref(options[key]));\n}\n/**\n* Creates a Vue table instance backed by Vue-aware TanStack Store atoms.\n*\n* Table options may contain Vue refs or computed values. The adapter unwraps\n* those reactive inputs, watches them with synchronous flushing, and keeps the\n* table options in sync. Use `table.Subscribe` or native Vue computed values\n* around `table.atoms.<slice>.get()` for selected reactive reads.\n*\n* @example\n* ```ts\n* const table = useTable(\n* {\n* features,\n* columns,\n* data,\n* },\n* )\n* ```\n*/\nfunction useTable(tableOptions) {\n\tconst syncTableOptions = (table, options) => {\n\t\ttable.setOptions((prev) => flatMerge(prev, getOptionsWithReactiveValues(options)));\n\t};\n\tconst reactivity = vueReactivity();\n\tconst mergedOptions = mergeProxy(tableOptions, { features: {\n\t\tcoreReactivityFeature: reactivity,\n\t\t...unref(tableOptions.features) ?? {}\n\t} });\n\tconst resolvedOptions = mergeProxy(getOptionsWithReactiveValues(mergedOptions), { mergeOptions: (defaultOptions, newOptions) => {\n\t\treturn flatMerge(defaultOptions, newOptions);\n\t} });\n\tconst coreTable = constructTable(resolvedOptions);\n\tconst table = coreTable;\n\tif (getCurrentScope()) onScopeDispose(() => reactivity.unmount?.());\n\twatch(() => getReactiveOptionDeps(mergedOptions), () => {\n\t\tsyncTableOptions(coreTable, mergedOptions);\n\t}, { immediate: true });\n\twatch(() => {\n\t\tconst controlledState = unref(tableOptions.state);\n\t\tconst controlledAtoms = unref(tableOptions.atoms);\n\t\tif (!controlledState) return [];\n\t\tconst controlledValues = [];\n\t\tfor (const key of Object.keys(table.initialState)) {\n\t\t\tif (!(key in controlledState) || controlledAtoms?.[key] !== void 0) continue;\n\t\t\tcontrolledValues.push(controlledState[key]);\n\t\t}\n\t\treturn controlledValues;\n\t}, (controlledValues) => {\n\t\tif (controlledValues.length > 0) syncTableOptions(coreTable, mergedOptions);\n\t}, { immediate: true });\n\ttable.Subscribe = (props) => {\n\t\treturn props.children(table.atoms);\n\t};\n\treturn table;\n}\n\n//#endregion\nexport { useTable };","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nvar defaultAttributes = {\r\n outline: {\r\n xmlns: \"http://www.w3.org/2000/svg\",\r\n width: 24,\r\n height: 24,\r\n viewBox: \"0 0 24 24\",\r\n fill: \"none\",\r\n stroke: \"currentColor\",\r\n \"stroke-width\": 2,\r\n \"stroke-linecap\": \"round\",\r\n \"stroke-linejoin\": \"round\"\r\n },\r\n filled: {\r\n xmlns: \"http://www.w3.org/2000/svg\",\r\n width: 24,\r\n height: 24,\r\n viewBox: \"0 0 24 24\",\r\n fill: \"currentColor\",\r\n stroke: \"none\"\r\n }\r\n};\r\n\r\nexport { defaultAttributes as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport { h } from 'vue';\r\nimport defaultAttributes from './defaultAttributes.mjs';\r\n\r\nconst createVueComponent = (type, iconName, iconNamePascal, iconNode) => ({ color = \"currentColor\", size = 24, stroke = 2, title, class: classes, ...rest }, { attrs, slots }) => {\r\n let children = [...iconNode.map((child) => h(...child)), ...slots.default ? [slots.default()] : []];\r\n if (title)\r\n children = [h(\"title\", title), ...children];\r\n return h(\r\n \"svg\",\r\n {\r\n ...defaultAttributes[type],\r\n width: size,\r\n height: size,\r\n ...attrs,\r\n class: [\"tabler-icon\", `tabler-icon-${iconName}`],\r\n ...type === \"filled\" ? {\r\n fill: color\r\n } : {\r\n \"stroke-width\": stroke ?? defaultAttributes[type][\"stroke-width\"],\r\n stroke: color\r\n },\r\n ...rest\r\n },\r\n children\r\n );\r\n};\r\n\r\nexport { createVueComponent as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconAlertCircle = createVueComponent(\"outline\", \"alert-circle\", \"AlertCircle\", [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 8v4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 16h.01\", \"key\": \"svg-2\" }]]);\r\n\r\nexport { IconAlertCircle as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconArrowsSort = createVueComponent(\"outline\", \"arrows-sort\", \"ArrowsSort\", [[\"path\", { \"d\": \"M3 9l4 -4l4 4m-4 -4v14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M21 15l-4 4l-4 -4m4 4v-14\", \"key\": \"svg-1\" }]]);\r\n\r\nexport { IconArrowsSort as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconChevronLeft = createVueComponent(\"outline\", \"chevron-left\", \"ChevronLeft\", [[\"path\", { \"d\": \"M15 6l-6 6l6 6\", \"key\": \"svg-0\" }]]);\r\n\r\nexport { IconChevronLeft as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconChevronRight = createVueComponent(\"outline\", \"chevron-right\", \"ChevronRight\", [[\"path\", { \"d\": \"M9 6l6 6l-6 6\", \"key\": \"svg-0\" }]]);\r\n\r\nexport { IconChevronRight as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconFilter = createVueComponent(\"outline\", \"filter\", \"Filter\", [[\"path\", { \"d\": \"M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227\", \"key\": \"svg-0\" }]]);\r\n\r\nexport { IconFilter as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconListCheck = createVueComponent(\"outline\", \"list-check\", \"ListCheck\", [[\"path\", { \"d\": \"M3.5 5.5l1.5 1.5l2.5 -2.5\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3.5 11.5l1.5 1.5l2.5 -2.5\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3.5 17.5l1.5 1.5l2.5 -2.5\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M11 6l9 0\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M11 12l9 0\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M11 18l9 0\", \"key\": \"svg-5\" }]]);\r\n\r\nexport { IconListCheck as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconLoader = createVueComponent(\"outline\", \"loader\", \"Loader\", [[\"path\", { \"d\": \"M12 6l0 -3\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16.25 7.75l2.15 -2.15\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M18 12l3 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M16.25 16.25l2.15 2.15\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M12 18l0 3\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M7.75 16.25l-2.15 2.15\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M6 12l-3 0\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M7.75 7.75l-2.15 -2.15\", \"key\": \"svg-7\" }]]);\r\n\r\nexport { IconLoader as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconRefresh = createVueComponent(\"outline\", \"refresh\", \"Refresh\", [[\"path\", { \"d\": \"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4\", \"key\": \"svg-1\" }]]);\r\n\r\nexport { IconRefresh as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconSearch = createVueComponent(\"outline\", \"search\", \"Search\", [[\"path\", { \"d\": \"M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M21 21l-6 -6\", \"key\": \"svg-1\" }]]);\r\n\r\nexport { IconSearch as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconSortAscending = createVueComponent(\"outline\", \"sort-ascending\", \"SortAscending\", [[\"path\", { \"d\": \"M4 6l7 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 12l7 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M4 18l9 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M15 9l3 -3l3 3\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M18 6l0 12\", \"key\": \"svg-4\" }]]);\r\n\r\nexport { IconSortAscending as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconSortDescending = createVueComponent(\"outline\", \"sort-descending\", \"SortDescending\", [[\"path\", { \"d\": \"M4 6l9 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 12l7 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M4 18l7 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M15 15l3 3l3 -3\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M18 6l0 12\", \"key\": \"svg-4\" }]]);\r\n\r\nexport { IconSortDescending as default };\r\n","/**\r\n * Accessibility helpers shared by OdTable popovers (search, filter, column\r\n * settings): focus entry, Escape-to-close with focus restoration, a Tab loop\r\n * that keeps focus inside the open popover, and fixed-position placement that\r\n * survives the horizontally scrolling table viewport.\r\n */\r\n\r\nimport { nextTick, onBeforeUnmount, readonly, ref, type Ref } from 'vue'\r\n\r\nexport type OdTablePopoverPlacement = {\r\n top: number\r\n left: number\r\n}\r\n\r\nexport type OdTablePopoverController = {\r\n isOpen: Readonly<Ref<boolean>>\r\n placement: Readonly<Ref<OdTablePopoverPlacement>>\r\n open: (trigger: HTMLElement, options?: { align?: 'start' | 'end'; width?: number }) => void\r\n close: (options?: { restoreFocus?: boolean }) => void\r\n registerPanel: (element: HTMLElement | null) => void\r\n onKeydown: (event: KeyboardEvent) => void\r\n}\r\n\r\nconst FOCUSABLE_SELECTOR = [\r\n 'a[href]',\r\n 'button:not([disabled])',\r\n 'input:not([disabled])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n].join(', ')\r\n\r\nconst focusableIn = (root: HTMLElement): HTMLElement[] =>\r\n // Visibility filtering stays selector-based so environments without layout\r\n // (jsdom) still resolve the focus list for focus-entry assertions.\r\n Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\r\n (element) => !element.hidden && element.getAttribute('aria-hidden') !== 'true',\r\n )\r\n\r\n/**\r\n * Creates one popover lifecycle. The controller is bound to a single trigger\r\n * at a time; opening another trigger first closes the current popover.\r\n */\r\nexport function useOdTablePopover(onClosed?: () => void): OdTablePopoverController {\r\n const isOpen = ref(false)\r\n const placement = ref<OdTablePopoverPlacement>({ top: 0, left: 0 })\r\n let panel: HTMLElement | null = null\r\n let trigger: HTMLElement | null = null\r\n let align: 'start' | 'end' = 'start'\r\n let wantedWidth: number | undefined\r\n\r\n const updatePlacement = () => {\r\n if (!trigger || !panel) return\r\n const rect = trigger.getBoundingClientRect()\r\n const margin = 4\r\n const width = wantedWidth ?? panel.offsetWidth\r\n const viewportWidth = window.innerWidth || document.documentElement.clientWidth\r\n let left = align === 'start' ? rect.left : rect.right - width\r\n left = Math.max(margin, Math.min(left, viewportWidth - width - margin))\r\n placement.value = {\r\n top: rect.bottom + margin,\r\n left,\r\n }\r\n }\r\n\r\n const onWindowResize = () => {\r\n if (isOpen.value) updatePlacement()\r\n }\r\n\r\n const onDocumentPointerDown = (event: PointerEvent) => {\r\n if (!isOpen.value) return\r\n const target = event.target as Node\r\n if (panel?.contains(target) || trigger?.contains(target)) return\r\n // `close` already invokes the `onClosed` callback exactly once.\r\n close({ restoreFocus: false })\r\n }\r\n\r\n const open: OdTablePopoverController['open'] = (element, options) => {\r\n trigger = element\r\n align = options?.align ?? 'start'\r\n wantedWidth = options?.width\r\n isOpen.value = true\r\n void nextTick(() => {\r\n if (!panel) return\r\n updatePlacement()\r\n const focusable = focusableIn(panel)\r\n focusable[0]?.focus()\r\n })\r\n }\r\n\r\n const close: OdTablePopoverController['close'] = (options) => {\r\n if (!isOpen.value) return\r\n const shouldRestore = options?.restoreFocus ?? false\r\n isOpen.value = false\r\n if (shouldRestore) trigger?.focus()\r\n onClosed?.()\r\n }\r\n\r\n const registerPanel = (element: HTMLElement | null) => {\r\n panel = element\r\n }\r\n\r\n const onKeydown = (event: KeyboardEvent) => {\r\n if (!isOpen.value) return\r\n if (event.key === 'Escape') {\r\n event.preventDefault()\r\n event.stopPropagation()\r\n close({ restoreFocus: true })\r\n return\r\n }\r\n if (event.key === 'Tab' && panel) {\r\n const focusable = focusableIn(panel)\r\n if (focusable.length === 0) return\r\n const first = focusable[0]\r\n const last = focusable[focusable.length - 1]\r\n const active = document.activeElement\r\n if (event.shiftKey && (active === first || !panel.contains(active))) {\r\n event.preventDefault()\r\n last.focus()\r\n } else if (!event.shiftKey && (active === last || !panel.contains(active))) {\r\n event.preventDefault()\r\n first.focus()\r\n }\r\n }\r\n }\r\n\r\n window.addEventListener('resize', onWindowResize)\r\n document.addEventListener('pointerdown', onDocumentPointerDown, true)\r\n\r\n onBeforeUnmount(() => {\r\n window.removeEventListener('resize', onWindowResize)\r\n document.removeEventListener('pointerdown', onDocumentPointerDown, true)\r\n trigger = null\r\n panel = null\r\n })\r\n\r\n return {\r\n isOpen: readonly(isOpen),\r\n placement: readonly(placement),\r\n open,\r\n close,\r\n registerPanel,\r\n onKeydown,\r\n }\r\n}\r\n","/**\r\n * OdTable cell formatting helpers: numbers, booleans, enum labels, and the\r\n * UTC+8 datetime contract (relative body text + exact tooltip text).\r\n *\r\n * Datetime output never depends on the host timezone: every timestamp is\r\n * shifted by the fixed UTC+8 offset and formatted with UTC getters.\r\n */\r\n\r\nimport type { OdTableColumn, OdTableLocale } from './OdTable.types'\r\n\r\nexport const OD_TABLE_NULL_TEXT = '—'\r\n\r\nconst UTC8_OFFSET_MS = 8 * 3_600_000\r\n\r\nconst MINUTE = 60_000\r\nconst HOUR = 3_600_000\r\nconst DAY = 86_400_000\r\nconst MONTH = 30 * DAY\r\nconst YEAR = 365 * DAY\r\n\r\n/** Parses a finite number, accepting numeric strings; anything else is invalid. */\r\nexport function parseOdTableNumber(value: unknown): number | null {\r\n if (typeof value === 'number') return Number.isFinite(value) ? value : null\r\n if (typeof value === 'string' && value.trim() !== '') {\r\n const parsed = Number(value)\r\n return Number.isFinite(parsed) ? parsed : null\r\n }\r\n return null\r\n}\r\n\r\n/** Parses a strict boolean; anything else is invalid. */\r\nexport function parseOdTableBoolean(value: unknown): boolean | null {\r\n return typeof value === 'boolean' ? value : null\r\n}\r\n\r\n/**\r\n * Parses a datetime into a UTC epoch timestamp. Accepts ISO 8601 strings with\r\n * a timezone designator, epoch numbers, and Date instances; null/undefined\r\n * and unparseable values return null.\r\n */\r\nexport function parseOdTableDatetime(value: unknown): number | null {\r\n if (value instanceof Date) {\r\n const time = value.getTime()\r\n return Number.isNaN(time) ? null : time\r\n }\r\n if (typeof value === 'number') return Number.isFinite(value) ? value : null\r\n if (typeof value === 'string' && value.trim() !== '') {\r\n const parsed = Date.parse(value)\r\n return Number.isNaN(parsed) ? null : parsed\r\n }\r\n return null\r\n}\r\n\r\n/** `YYYY-MM-DD HH:mm:ss` in UTC+8 for tooltips and exact display. */\r\nexport function formatOdTableExactDatetime(timestamp: number): string {\r\n const shifted = new Date(timestamp + UTC8_OFFSET_MS)\r\n const pad = (value: number) => String(value).padStart(2, '0')\r\n return [\r\n shifted.getUTCFullYear(),\r\n pad(shifted.getUTCMonth() + 1),\r\n pad(shifted.getUTCDate()),\r\n ].join('-') + ` ${pad(shifted.getUTCHours())}:${pad(shifted.getUTCMinutes())}:${pad(shifted.getUTCSeconds())}`\r\n}\r\n\r\n/** `YYYY-MM-DD` in UTC+8 for callers that need a date-only value. */\r\nexport function formatOdTableDateOnly(timestamp: number): string {\r\n return formatOdTableExactDatetime(timestamp).slice(0, 10)\r\n}\r\n\r\n/**\r\n * Relative-time body text: 刚刚 / N 分钟前 / N 小时前 / N 天前 / N 个月前 /\r\n * N 年前. Month and year buckets use fixed 30-day and 365-day durations so\r\n * output stays deterministic across calendar month lengths. Future timestamps\r\n * render as 刚刚 because relative times never auto-refresh.\r\n */\r\nexport function formatOdTableRelativeTime(\r\n value: unknown,\r\n locale: Required<OdTableLocale>,\r\n now: number = Date.now(),\r\n): string {\r\n const timestamp = parseOdTableDatetime(value)\r\n if (timestamp === null) return OD_TABLE_NULL_TEXT\r\n const diff = now - timestamp\r\n if (diff < MINUTE) return locale.relativeJustNow\r\n if (diff < HOUR) return locale.relativeMinutes(Math.floor(diff / MINUTE))\r\n if (diff < DAY) return locale.relativeHours(Math.floor(diff / HOUR))\r\n if (diff < MONTH) return locale.relativeDays(Math.floor(diff / DAY))\r\n if (diff < YEAR) return locale.relativeMonths(Math.floor(diff / MONTH))\r\n return locale.relativeYears(Math.floor(diff / YEAR))\r\n}\r\n\r\nfunction formatNumberCell(value: unknown, column: OdTableColumn): string {\r\n const parsed = parseOdTableNumber(value)\r\n if (parsed === null) return OD_TABLE_NULL_TEXT\r\n const maximumFractionDigits = column.numberFormat?.maximumFractionDigits\r\n return new Intl.NumberFormat('zh-CN', maximumFractionDigits === undefined ? undefined : { maximumFractionDigits }).format(parsed)\r\n}\r\n\r\nfunction formatBooleanCell(value: unknown, column: OdTableColumn): string {\r\n const parsed = parseOdTableBoolean(value)\r\n if (parsed === null) return OD_TABLE_NULL_TEXT\r\n const labels = column.booleanLabels\r\n return parsed ? labels?.true ?? '是' : labels?.false ?? '否'\r\n}\r\n\r\nfunction formatEnumCell(value: unknown, column: OdTableColumn): string {\r\n if (value === null || value === undefined) return OD_TABLE_NULL_TEXT\r\n const raw = String(value)\r\n return column.options?.find((option) => option.value === raw)?.label ?? raw\r\n}\r\n\r\n/** Formats a cell body value; nullish and invalid inputs render as `—`. */\r\nexport function formatOdTableCell(\r\n column: OdTableColumn,\r\n value: unknown,\r\n context: { locale: Required<OdTableLocale>; now?: number } ,\r\n): string {\r\n if (value === null || value === undefined) return OD_TABLE_NULL_TEXT\r\n switch (column.dataType) {\r\n case 'number':\r\n return formatNumberCell(value, column)\r\n case 'boolean':\r\n return formatBooleanCell(value, column)\r\n case 'enum':\r\n return formatEnumCell(value, column)\r\n case 'datetime':\r\n return formatOdTableRelativeTime(value, context.locale, context.now ?? Date.now())\r\n default:\r\n return String(value)\r\n }\r\n}\r\n\r\n/**\r\n * Returns the exact UTC+8 datetime for tooltips, or null when the value is\r\n * nullish/invalid (those cells render plain `—` without a tooltip).\r\n */\r\nexport function odTableExactDatetimeOrNull(value: unknown): string | null {\r\n const timestamp = parseOdTableDatetime(value)\r\n return timestamp === null ? null : formatOdTableExactDatetime(timestamp)\r\n}\r\n","/**\r\n * OdTable query state machine and local data processing.\r\n *\r\n * This module is the single owner of filtering, sorting, and pagination for\r\n * both data modes. Remote requests serialize the query produced here, and the\r\n * local mode computes page rows with the exact same semantics, so no second\r\n * pipeline can apply duplicate filtering or sorting.\r\n */\r\n\r\nimport type {\r\n OdTableColumn,\r\n OdTableFilter,\r\n OdTableInitialQuery,\r\n OdTableQuery,\r\n OdTableSearch,\r\n OdTableSorting,\r\n OdTableRowKey,\r\n} from './OdTable.types'\r\n\r\nexport const OD_TABLE_DEFAULT_PAGE_SIZE = 20\r\nexport const OD_TABLE_DEFAULT_PAGE_SIZE_OPTIONS: readonly number[] = [10, 20, 50, 100]\r\n\r\nexport function createOdTableQuery(pageSize: number = OD_TABLE_DEFAULT_PAGE_SIZE): OdTableQuery {\r\n return {\r\n page: 1,\r\n pageSize,\r\n searches: [],\r\n filters: [],\r\n sorting: [],\r\n }\r\n}\r\n\r\nconst isPositiveInt = (value: unknown): value is number =>\r\n typeof value === 'number' && Number.isInteger(value) && value > 0\r\n\r\n/**\r\n * Produces the canonical immutable query: page/pageSize bounds enforced,\r\n * empty search values and filters dropped, entries deduplicated per field.\r\n */\r\nexport function normalizeOdTableQuery(query: OdTableQuery): OdTableQuery {\r\n const searches: OdTableSearch[] = []\r\n const searchFields = new Set<string>()\r\n for (const entry of query.searches ?? []) {\r\n if (!entry || typeof entry.field !== 'string' || entry.field === '') continue\r\n if (searchFields.has(entry.field)) continue\r\n const value = typeof entry.value === 'string' ? entry.value : String(entry.value ?? '')\r\n if (value.trim() === '') continue\r\n searchFields.add(entry.field)\r\n searches.push({ field: entry.field, value })\r\n }\r\n\r\n const filters: OdTableFilter[] = []\r\n const filterFields = new Set<string>()\r\n for (const entry of query.filters ?? []) {\r\n if (!entry || typeof entry.field !== 'string' || entry.field === '') continue\r\n if (filterFields.has(entry.field)) continue\r\n const values = Array.isArray(entry.values)\r\n ? [...new Set(entry.values.filter((value): value is string => typeof value === 'string'))]\r\n : []\r\n if (values.length === 0) continue\r\n filterFields.add(entry.field)\r\n filters.push({ field: entry.field, values })\r\n }\r\n\r\n const sorting: OdTableSorting[] = []\r\n const sortingFields = new Set<string>()\r\n for (const entry of query.sorting ?? []) {\r\n if (!entry || typeof entry.field !== 'string' || entry.field === '') continue\r\n if (sortingFields.has(entry.field)) continue\r\n if (entry.direction !== 'asc' && entry.direction !== 'desc') continue\r\n sortingFields.add(entry.field)\r\n sorting.push({ field: entry.field, direction: entry.direction })\r\n }\r\n\r\n return {\r\n page: isPositiveInt(query.page) ? query.page : 1,\r\n pageSize: isPositiveInt(query.pageSize) ? query.pageSize : OD_TABLE_DEFAULT_PAGE_SIZE,\r\n searches,\r\n filters,\r\n sorting,\r\n }\r\n}\r\n\r\n/** Structural equality on the normalized query; guards duplicate submissions. */\r\nexport function odTableQueriesEqual(a: OdTableQuery, b: OdTableQuery): boolean {\r\n return (\r\n a.page === b.page &&\r\n a.pageSize === b.pageSize &&\r\n a.searches.length === b.searches.length &&\r\n a.filters.length === b.filters.length &&\r\n a.sorting.length === b.sorting.length &&\r\n JSON.stringify(a.searches) === JSON.stringify(b.searches) &&\r\n JSON.stringify(a.filters) === JSON.stringify(b.filters) &&\r\n JSON.stringify(a.sorting) === JSON.stringify(b.sorting)\r\n )\r\n}\r\n\r\n/**\r\n * Field-by-field merge with replacement semantics: an array provided by\r\n * `initial` replaces the base array entirely (an explicit empty `sorting`\r\n * clears the schema default) instead of concatenating.\r\n */\r\nexport function mergeOdTableInitialQuery(\r\n base: OdTableQuery,\r\n initial?: OdTableInitialQuery,\r\n): OdTableQuery {\r\n if (!initial) return normalizeOdTableQuery(base)\r\n const merged: OdTableQuery = {\r\n page: initial.page ?? base.page,\r\n pageSize: initial.pageSize ?? base.pageSize,\r\n searches: initial.searches ?? base.searches,\r\n filters: initial.filters ?? base.filters,\r\n sorting: initial.sorting ?? base.sorting,\r\n }\r\n return normalizeOdTableQuery(merged)\r\n}\r\n\r\nexport type OdTableQueryAction =\r\n | { type: 'set-search'; field: string; value: string }\r\n | { type: 'set-filter'; field: string; values: string[] }\r\n | { type: 'sort'; field: string; additive: boolean }\r\n | { type: 'set-page'; page: number }\r\n | { type: 'set-page-size'; pageSize: number }\r\n | { type: 'sync-response'; page?: number; pageSize?: number }\r\n | { type: 'remove-column'; field: string }\r\n | { type: 'replace'; query: OdTableQuery }\r\n\r\nconst nextSortDirection = (direction: 'asc' | 'desc' | undefined): 'asc' | 'desc' | undefined => {\r\n if (direction === 'asc') return 'desc'\r\n if (direction === 'desc') return undefined\r\n return 'asc'\r\n}\r\n\r\n/**\r\n * Pure query reducer. Condition changes (`set-search`, `set-filter`, `sort`,\r\n * `set-page-size`, `remove-column`) reset the page to 1; `set-page` and\r\n * `sync-response` keep the requested page.\r\n */\r\nexport function odTableQueryReducer(query: OdTableQuery, action: OdTableQueryAction): OdTableQuery {\r\n switch (action.type) {\r\n case 'set-search': {\r\n const trimmed = action.value.trim()\r\n const searches = query.searches.filter((entry) => entry.field !== action.field)\r\n if (trimmed !== '') searches.push({ field: action.field, value: action.value })\r\n return normalizeOdTableQuery({ ...query, searches, page: 1 })\r\n }\r\n case 'set-filter': {\r\n const filters = query.filters.filter((entry) => entry.field !== action.field)\r\n if (action.values.length > 0) filters.push({ field: action.field, values: [...action.values] })\r\n return normalizeOdTableQuery({ ...query, filters, page: 1 })\r\n }\r\n case 'sort': {\r\n const existing = query.sorting.find((entry) => entry.field === action.field)\r\n const nextDirection = nextSortDirection(existing?.direction)\r\n let sorting: OdTableSorting[]\r\n if (action.additive) {\r\n sorting = query.sorting.filter((entry) => entry.field !== action.field)\r\n if (nextDirection) sorting.push({ field: action.field, direction: nextDirection })\r\n } else {\r\n sorting = nextDirection ? [{ field: action.field, direction: nextDirection }] : []\r\n }\r\n return normalizeOdTableQuery({ ...query, sorting, page: 1 })\r\n }\r\n case 'set-page': {\r\n if (!isPositiveInt(action.page)) return query\r\n return normalizeOdTableQuery({ ...query, page: action.page })\r\n }\r\n case 'set-page-size': {\r\n if (!isPositiveInt(action.pageSize) || action.pageSize === query.pageSize) return query\r\n return normalizeOdTableQuery({ ...query, pageSize: action.pageSize, page: 1 })\r\n }\r\n case 'sync-response': {\r\n const page = isPositiveInt(action.page) ? action.page : query.page\r\n const pageSize = isPositiveInt(action.pageSize) ? action.pageSize : query.pageSize\r\n return normalizeOdTableQuery({ ...query, page, pageSize })\r\n }\r\n case 'remove-column': {\r\n return normalizeOdTableQuery({\r\n ...query,\r\n page: 1,\r\n searches: query.searches.filter((entry) => entry.field !== action.field),\r\n filters: query.filters.filter((entry) => entry.field !== action.field),\r\n sorting: query.sorting.filter((entry) => entry.field !== action.field),\r\n })\r\n }\r\n case 'replace': {\r\n return normalizeOdTableQuery(action.query)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Drops search/filter/sorting entries whose field no longer exists in the\r\n * provided column set. Returns `null` when nothing changed so callers can\r\n * avoid emitting redundant query events.\r\n */\r\nexport function cleanupOdTableQueryForFields(\r\n query: OdTableQuery,\r\n fields: ReadonlySet<string>,\r\n): OdTableQuery | null {\r\n const searches = query.searches.filter((entry) => fields.has(entry.field))\r\n const filters = query.filters.filter((entry) => fields.has(entry.field))\r\n const sorting = query.sorting.filter((entry) => fields.has(entry.field))\r\n if (\r\n searches.length === query.searches.length &&\r\n filters.length === query.filters.length &&\r\n sorting.length === query.sorting.length\r\n ) {\r\n return null\r\n }\r\n return normalizeOdTableQuery({ ...query, page: 1, searches, filters, sorting })\r\n}\r\n\r\n/** Drops conditions whose surviving column no longer advertises that capability. */\r\nexport function cleanupOdTableQueryForColumns(\r\n query: OdTableQuery,\r\n columns: readonly OdTableColumn[],\r\n): OdTableQuery | null {\r\n const searchable = new Set(columns.filter((column) => column.searchable && column.dataType === 'text').map((column) => column.field))\r\n const filterable = new Set(columns.filter((column) => column.filterable && column.dataType === 'enum').map((column) => column.field))\r\n const sortable = new Set(columns.filter((column) => column.sortable).map((column) => column.field))\r\n const searches = query.searches.filter((entry) => searchable.has(entry.field))\r\n const filters = query.filters.filter((entry) => filterable.has(entry.field))\r\n const sorting = query.sorting.filter((entry) => sortable.has(entry.field))\r\n if (\r\n searches.length === query.searches.length &&\r\n filters.length === query.filters.length &&\r\n sorting.length === query.sorting.length\r\n ) {\r\n return null\r\n }\r\n return normalizeOdTableQuery({ ...query, page: 1, searches, filters, sorting })\r\n}\r\n\r\n/**\r\n * Lossless row-key encoding. Row ids must keep `1` and `\"1\"` distinct, so the\r\n * primitive type is embedded in the id used for selection and dedup maps.\r\n */\r\nexport function encodeOdTableRowKey(key: OdTableRowKey): string {\r\n return `${typeof key}:${String(key)}`\r\n}\r\n\r\nexport function decodeOdTableRowKey(encoded: string): OdTableRowKey | null {\r\n const separator = encoded.indexOf(':')\r\n if (separator <= 0) return null\r\n const type = encoded.slice(0, separator)\r\n const raw = encoded.slice(separator + 1)\r\n if (type === 'string') return raw\r\n if (type === 'number') {\r\n const numeric = Number(raw)\r\n return Number.isFinite(numeric) ? numeric : null\r\n }\r\n return null\r\n}\r\n\r\ntype OdTableSortValue = { rank: number; compareValue: string | number | boolean }\r\n\r\nconst resolveEnumLabel = (column: OdTableColumn, value: unknown): string => {\r\n const raw = String(value)\r\n return column.options?.find((option) => option.value === raw)?.label ?? raw\r\n}\r\n\r\nfunction resolveSortValue(column: OdTableColumn | undefined, value: unknown): OdTableSortValue {\r\n if (value === null || value === undefined) return { rank: 1, compareValue: '' }\r\n switch (column?.dataType) {\r\n case 'number': {\r\n if (typeof value === 'number' && Number.isFinite(value)) return { rank: 0, compareValue: value }\r\n if (typeof value === 'string' && value.trim() !== '' && Number.isFinite(Number(value))) {\r\n return { rank: 0, compareValue: Number(value) }\r\n }\r\n return { rank: 1, compareValue: '' }\r\n }\r\n case 'datetime': {\r\n if (typeof value === 'number' && Number.isFinite(value)) return { rank: 0, compareValue: value }\r\n if (typeof value === 'string' && value.trim() !== '') {\r\n const parsed = Date.parse(value)\r\n if (!Number.isNaN(parsed)) return { rank: 0, compareValue: parsed }\r\n }\r\n return { rank: 1, compareValue: '' }\r\n }\r\n case 'boolean': {\r\n if (typeof value === 'boolean') return { rank: 0, compareValue: value }\r\n return { rank: 1, compareValue: '' }\r\n }\r\n case 'enum': {\r\n return { rank: 0, compareValue: resolveEnumLabel(column, value) }\r\n }\r\n default: {\r\n return { rank: 0, compareValue: String(value) }\r\n }\r\n }\r\n}\r\n\r\nconst compareValues = (a: OdTableSortValue['compareValue'], b: OdTableSortValue['compareValue']): number => {\r\n if (typeof a === 'number' && typeof b === 'number') return a - b\r\n if (typeof a === 'boolean' && typeof b === 'boolean') return (a ? 1 : 0) - (b ? 1 : 0)\r\n // Pinned locale keeps \"本地字典序\" deterministic across hosts and CI.\r\n return String(a).localeCompare(String(b), 'zh-Hans-CN')\r\n}\r\n\r\n/**\r\n * Executes the local query pipeline: text search (case-insensitive contains,\r\n * AND across columns) → enum IN filters → stable multi-column sort → page\r\n * slice. The returned `page` is the effective page after clamping to the last\r\n * page so the component can sync the pager when data shrinks.\r\n */\r\nexport function runOdTableLocalQuery<T extends object>(\r\n rows: readonly T[],\r\n columns: readonly OdTableColumn[],\r\n query: OdTableQuery,\r\n): { rows: T[]; total: number; page: number } {\r\n const columnByField = new Map(columns.map((column) => [column.field, column]))\r\n const normalized = normalizeOdTableQuery(query)\r\n\r\n let filtered: T[] = rows.filter((row) => {\r\n const record = row as Record<string, unknown>\r\n for (const search of normalized.searches) {\r\n const raw = record[search.field]\r\n if (raw === null || raw === undefined) return false\r\n if (!String(raw).toLowerCase().includes(search.value.toLowerCase())) return false\r\n }\r\n for (const filter of normalized.filters) {\r\n const raw = record[filter.field]\r\n if (!filter.values.includes(String(raw))) return false\r\n }\r\n return true\r\n })\r\n\r\n if (normalized.sorting.length > 0) {\r\n const entries = filtered.map((row, index) => ({ row, index }))\r\n entries.sort((a, b) => {\r\n for (const sort of normalized.sorting) {\r\n const column = columnByField.get(sort.field)\r\n const left = resolveSortValue(column, (a.row as Record<string, unknown>)[sort.field])\r\n const right = resolveSortValue(column, (b.row as Record<string, unknown>)[sort.field])\r\n // Nullish/invalid values always sort after valid ones, regardless of direction.\r\n if (left.rank !== right.rank) return left.rank - right.rank\r\n const compared = compareValues(left.compareValue, right.compareValue)\r\n if (compared !== 0) return sort.direction === 'asc' ? compared : -compared\r\n }\r\n return a.index - b.index\r\n })\r\n filtered = entries.map((entry) => entry.row)\r\n }\r\n\r\n const total = filtered.length\r\n const pageCount = Math.max(1, Math.ceil(total / normalized.pageSize))\r\n const page = Math.min(Math.max(1, normalized.page), pageCount)\r\n const start = (page - 1) * normalized.pageSize\r\n return { rows: filtered.slice(start, start + normalized.pageSize), total, page }\r\n}\r\n","/**\r\n * Request primitives used by OdTable's URL data source.\r\n *\r\n * The module deliberately does not import the public table types. This keeps\r\n * the request layer usable while the public type module is being assembled and\r\n * lets consumers provide structurally compatible query/schema values.\r\n */\r\n\r\nexport const OD_TABLE_REQUEST_ERROR_CODES = {\r\n HTTP: 'OD_TABLE_REQUEST_HTTP',\r\n EMPTY_RESPONSE: 'OD_TABLE_REQUEST_EMPTY_RESPONSE',\r\n JSON_PARSE: 'OD_TABLE_REQUEST_JSON_PARSE',\r\n ABORTED: 'OD_TABLE_REQUEST_ABORTED',\r\n REQUEST: 'OD_TABLE_REQUEST_FAILED',\r\n} as const\r\n\r\nexport type OdTableRequestErrorCode =\r\n (typeof OD_TABLE_REQUEST_ERROR_CODES)[keyof typeof OD_TABLE_REQUEST_ERROR_CODES]\r\n\r\nexport type OdTableRequestMethod = 'GET' | 'POST'\r\n\r\nexport type OdTableRequestOptions = {\r\n method: OdTableRequestMethod\r\n headers?: Record<string, string>\r\n body?: unknown\r\n signal: AbortSignal\r\n}\r\n\r\nexport type OdTableRequest = (\r\n url: string,\r\n options: OdTableRequestOptions,\r\n) => Promise<unknown>\r\n\r\nexport type OdTableRequestErrorDetails = {\r\n status?: number\r\n statusText?: string\r\n cause?: unknown\r\n}\r\n\r\nexport class OdTableRequestError extends Error {\r\n readonly code: OdTableRequestErrorCode\r\n readonly status?: number\r\n readonly statusText?: string\r\n readonly cause?: unknown\r\n\r\n constructor(\r\n code: OdTableRequestErrorCode,\r\n message: string,\r\n details: OdTableRequestErrorDetails = {},\r\n ) {\r\n super(message)\r\n this.name = 'OdTableRequestError'\r\n this.code = code\r\n this.status = details.status\r\n this.statusText = details.statusText\r\n this.cause = details.cause\r\n }\r\n}\r\n\r\nconst isAbortError = (error: unknown): boolean =>\r\n error instanceof OdTableRequestError\r\n ? error.code === OD_TABLE_REQUEST_ERROR_CODES.ABORTED\r\n : error instanceof DOMException\r\n ? error.name === 'AbortError'\r\n : typeof error === 'object' &&\r\n error !== null &&\r\n 'name' in error &&\r\n (error as { name?: unknown }).name === 'AbortError'\r\n\r\nconst abortedError = (cause?: unknown): OdTableRequestError =>\r\n new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.ABORTED,\r\n 'The OdTable request was aborted.',\r\n { cause },\r\n )\r\n\r\nconst normalizeHeaders = (\r\n headers: Record<string, string> | undefined,\r\n method: OdTableRequestMethod,\r\n): Record<string, string> => {\r\n const normalized: Record<string, string> = {\r\n Accept: 'application/json',\r\n ...headers,\r\n }\r\n\r\n if (method === 'POST' && !Object.keys(normalized).some((key) => key.toLowerCase() === 'content-type')) {\r\n normalized['Content-Type'] = 'application/json'\r\n }\r\n\r\n return normalized\r\n}\r\n\r\nconst bodyForFetch = (method: OdTableRequestMethod, body: unknown): BodyInit | undefined => {\r\n if (method === 'GET') return undefined\r\n if (body === undefined) return JSON.stringify(null)\r\n return JSON.stringify(body)\r\n}\r\n\r\n/** Default fetch implementation. It always returns an already parsed body. */\r\nexport const fetchOdTableRequest: OdTableRequest = async (url, options) => {\r\n let response: Response\r\n\r\n try {\r\n response = await fetch(url, {\r\n method: options.method,\r\n headers: normalizeHeaders(options.headers, options.method),\r\n body: bodyForFetch(options.method, options.body),\r\n signal: options.signal,\r\n })\r\n } catch (error) {\r\n if (isAbortError(error) || options.signal.aborted) {\r\n throw abortedError(error)\r\n }\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.REQUEST,\r\n 'The OdTable request failed.',\r\n { cause: error },\r\n )\r\n }\r\n\r\n if (!response.ok) {\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.HTTP,\r\n `The OdTable request failed with HTTP ${response.status}.`,\r\n { status: response.status, statusText: response.statusText },\r\n )\r\n }\r\n\r\n if (response.status === 204) {\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.EMPTY_RESPONSE,\r\n 'The OdTable request returned an empty response.',\r\n )\r\n }\r\n\r\n let text: string\r\n try {\r\n text = await response.text()\r\n } catch (error) {\r\n if (isAbortError(error) || options.signal.aborted) {\r\n throw abortedError(error)\r\n }\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.REQUEST,\r\n 'The OdTable response could not be read.',\r\n { cause: error },\r\n )\r\n }\r\n\r\n if (!text.trim()) {\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.EMPTY_RESPONSE,\r\n 'The OdTable request returned an empty response.',\r\n )\r\n }\r\n\r\n try {\r\n return JSON.parse(text) as unknown\r\n } catch (error) {\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.JSON_PARSE,\r\n 'The OdTable response was not valid JSON.',\r\n { cause: error },\r\n )\r\n }\r\n}\r\n\r\n/**\r\n * Execute a custom request implementation while preserving the URL request\r\n * contract. Custom implementations own HTTP and JSON parsing; this wrapper\r\n * only normalizes cancellation and unexpected thrown values.\r\n */\r\nexport const executeOdTableRequest = async (\r\n request: OdTableRequest | undefined,\r\n url: string,\r\n options: OdTableRequestOptions,\r\n): Promise<unknown> => {\r\n try {\r\n const value = await (request ?? fetchOdTableRequest)(url, {\r\n ...options,\r\n headers: normalizeHeaders(options.headers, options.method),\r\n body: options.method === 'GET' ? undefined : options.body,\r\n })\r\n\r\n if (value === null || value === undefined) {\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.EMPTY_RESPONSE,\r\n 'The OdTable request returned an empty response.',\r\n )\r\n }\r\n return value\r\n } catch (error) {\r\n if (isAbortError(error) || options.signal.aborted) {\r\n throw abortedError(error)\r\n }\r\n if (error instanceof OdTableRequestError) throw error\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.REQUEST,\r\n 'The OdTable request failed.',\r\n { cause: error },\r\n )\r\n }\r\n}\r\n\r\nexport type OdTableRequestStage = 'schema' | 'data'\r\n\r\nexport type OdTableRequestAccepted<T> = {\r\n status: 'accepted'\r\n value: T\r\n sequence: number\r\n}\r\n\r\nexport type OdTableRequestIgnored = {\r\n status: 'ignored'\r\n reason: 'aborted' | 'stale' | 'disposed'\r\n sequence: number\r\n}\r\n\r\nexport type OdTableRequestOutcome<T> = OdTableRequestAccepted<T> | OdTableRequestIgnored\r\n\r\nexport type OdTableRequestCoordinator = {\r\n run<T>(\r\n stage: OdTableRequestStage,\r\n operation: (context: { signal: AbortSignal; sequence: number }) => Promise<T>,\r\n ): Promise<OdTableRequestOutcome<T>>\r\n cancel(stage?: OdTableRequestStage): void\r\n isCurrent(stage: OdTableRequestStage, sequence: number): boolean\r\n dispose(): void\r\n}\r\n\r\n/**\r\n * Coordinates independent Schema and Data lifecycles. Starting a request for\r\n * one stage cancels only that stage; a late response is returned as `ignored`\r\n * and never rejects, so callers cannot accidentally surface it as an error.\r\n */\r\nexport const createOdTableRequestCoordinator = (): OdTableRequestCoordinator => {\r\n let disposed = false\r\n let nextSequence = 0\r\n const controllers: Record<OdTableRequestStage, AbortController | undefined> = {\r\n schema: undefined,\r\n data: undefined,\r\n }\r\n const sequences: Record<OdTableRequestStage, number> = { schema: 0, data: 0 }\r\n\r\n const cancel = (stage?: OdTableRequestStage): void => {\r\n const stages: OdTableRequestStage[] = stage ? [stage] : ['schema', 'data']\r\n for (const currentStage of stages) {\r\n controllers[currentStage]?.abort()\r\n controllers[currentStage] = undefined\r\n sequences[currentStage] = ++nextSequence\r\n }\r\n }\r\n\r\n const isCurrent = (stage: OdTableRequestStage, sequence: number): boolean =>\r\n !disposed && sequences[stage] === sequence && !controllers[stage]?.signal.aborted\r\n\r\n const run = async <T>(\r\n stage: OdTableRequestStage,\r\n operation: (context: { signal: AbortSignal; sequence: number }) => Promise<T>,\r\n ): Promise<OdTableRequestOutcome<T>> => {\r\n if (disposed) return { status: 'ignored', reason: 'disposed', sequence: nextSequence }\r\n\r\n cancel(stage)\r\n const controller = new AbortController()\r\n const sequence = ++nextSequence\r\n controllers[stage] = controller\r\n sequences[stage] = sequence\r\n\r\n try {\r\n const value = await operation({ signal: controller.signal, sequence })\r\n if (!isCurrent(stage, sequence)) {\r\n return {\r\n status: 'ignored',\r\n reason: disposed ? 'disposed' : controller.signal.aborted ? 'aborted' : 'stale',\r\n sequence,\r\n }\r\n }\r\n return { status: 'accepted', value, sequence }\r\n } catch (error) {\r\n if (!isCurrent(stage, sequence) || controller.signal.aborted || isAbortError(error)) {\r\n return {\r\n status: 'ignored',\r\n reason: disposed ? 'disposed' : controller.signal.aborted ? 'aborted' : 'stale',\r\n sequence,\r\n }\r\n }\r\n throw error\r\n } finally {\r\n if (sequences[stage] === sequence) controllers[stage] = undefined\r\n }\r\n }\r\n\r\n return {\r\n run,\r\n cancel,\r\n isCurrent,\r\n dispose: () => {\r\n if (disposed) return\r\n disposed = true\r\n cancel()\r\n },\r\n }\r\n}\r\n\r\n","/** Public contracts and input validation shared by OdTable's implementation. */\r\n\r\nexport type OdTableRowKey = string | number\r\n\r\nexport type OdTableDataType = 'text' | 'number' | 'datetime' | 'boolean' | 'enum'\r\n\r\nexport type OdTableOption = {\r\n value: string\r\n label: string\r\n disabled?: boolean\r\n}\r\n\r\nexport type OdTableColumn = {\r\n field: string\r\n title: string\r\n dataType: OdTableDataType\r\n sortable?: boolean\r\n searchable?: boolean\r\n filterable?: boolean\r\n width?: number\r\n minWidth?: number\r\n align?: 'left' | 'center' | 'right'\r\n visible?: boolean\r\n resizable?: boolean\r\n options?: OdTableOption[]\r\n numberFormat?: { maximumFractionDigits?: number }\r\n booleanLabels?: { true: string; false: string }\r\n}\r\n\r\nexport type OdTableSorting = {\r\n field: string\r\n direction: 'asc' | 'desc'\r\n}\r\n\r\nexport type OdTableSearch = { field: string; value: string }\r\nexport type OdTableFilter = { field: string; values: string[] }\r\n\r\nexport type OdTableQuery = {\r\n page: number\r\n pageSize: number\r\n searches: OdTableSearch[]\r\n filters: OdTableFilter[]\r\n sorting: OdTableSorting[]\r\n}\r\n\r\nexport type OdTableInitialQuery = Partial<OdTableQuery>\r\n\r\nexport type OdTableResult<T> = {\r\n items: T[]\r\n total: number\r\n page: number\r\n pageSize: number\r\n}\r\n\r\nexport type OdTablePaginationConfig = {\r\n defaultPageSize?: number\r\n pageSizeOptions?: number[]\r\n}\r\n\r\nexport type OdTableSchema = {\r\n rowKey: string\r\n columns: OdTableColumn[]\r\n defaultSorting?: OdTableSorting[]\r\n pagination?: {\r\n defaultPageSize: number\r\n pageSizeOptions: number[]\r\n }\r\n}\r\n\r\nexport type OdTableRequest = (\r\n url: string,\r\n options: {\r\n method: 'GET' | 'POST'\r\n headers?: Record<string, string>\r\n body?: unknown\r\n signal: AbortSignal\r\n },\r\n) => Promise<unknown>\r\n\r\nexport type OdTableLoadSchema = () => Promise<OdTableSchema>\r\n\r\nexport type OdTableLoadData<T> = (\r\n query: OdTableQuery,\r\n context: { signal: AbortSignal },\r\n) => Promise<OdTableResult<T>>\r\n\r\nexport type OdTableLocale = Partial<{\r\n search: string\r\n filter: string\r\n reset: string\r\n confirm: string\r\n columnSettings: string\r\n restoreDefault: string\r\n loading: string\r\n empty: string\r\n loadError: string\r\n retry: string\r\n relativeJustNow: string\r\n relativeMinutes: (count: number) => string\r\n relativeHours: (count: number) => string\r\n relativeDays: (count: number) => string\r\n relativeMonths: (count: number) => string\r\n relativeYears: (count: number) => string\r\n selectAll: string\r\n deselectAll: string\r\n selectedCount: (count: number) => string\r\n previousPage: string\r\n nextPage: string\r\n pageSize: string\r\n total: (count: number) => string\r\n tableName: string\r\n pagination: string\r\n perPage: (size: number) => string\r\n pageNumber: (page: number) => string\r\n clearCondition: (title: string) => string\r\n clearAllConditions: string\r\n keepOneColumnVisible: string\r\n resizeColumn: (title: string) => string\r\n selectRow: (index: number) => string\r\n}>\r\n\r\n/** Built-in Chinese copy. Consumers override entries through the `locale` prop. */\r\nexport const OD_TABLE_DEFAULT_LOCALE: Required<OdTableLocale> = {\r\n search: '搜索',\r\n filter: '筛选',\r\n reset: '重置',\r\n confirm: '确定',\r\n columnSettings: '列设置',\r\n restoreDefault: '恢复默认',\r\n loading: '加载中…',\r\n empty: '暂无数据',\r\n loadError: '加载失败',\r\n retry: '重试',\r\n relativeJustNow: '刚刚',\r\n relativeMinutes: (count) => `${count} 分钟前`,\r\n relativeHours: (count) => `${count} 小时前`,\r\n relativeDays: (count) => `${count} 天前`,\r\n relativeMonths: (count) => `${count} 个月前`,\r\n relativeYears: (count) => `${count} 年前`,\r\n selectAll: '全选本页',\r\n deselectAll: '取消全选本页',\r\n selectedCount: (count) => `已选 ${count} 项`,\r\n previousPage: '上一页',\r\n nextPage: '下一页',\r\n pageSize: '每页条数',\r\n total: (count) => `共 ${count} 条`,\r\n tableName: '数据表格',\r\n pagination: '分页',\r\n perPage: (size) => `${size} / 页`,\r\n pageNumber: (page) => `第 ${page} 页`,\r\n clearCondition: (title) => `清除 ${title} 的查询条件`,\r\n clearAllConditions: '清除全部条件',\r\n keepOneColumnVisible: '至少需要保留一列可见业务列',\r\n resizeColumn: (title) => `调整 ${title} 列宽`,\r\n selectRow: (index) => `选择第 ${index} 行`,\r\n}\r\n\r\nexport type OdTableProps<T extends object> = {\r\n columns?: OdTableColumn[]\r\n rows?: T[]\r\n rowKey?: string\r\n pagination?: OdTablePaginationConfig\r\n loadSchema?: OdTableLoadSchema\r\n loadData?: OdTableLoadData<T>\r\n schemaUrl?: string\r\n queryUrl?: string\r\n request?: OdTableRequest\r\n initialQuery?: OdTableInitialQuery\r\n selectedRowKeys?: OdTableRowKey[]\r\n locale?: OdTableLocale\r\n density?: 'compact' | 'standard'\r\n striped?: boolean\r\n bordered?: boolean\r\n tableLabel?: string\r\n /** Reference timestamp for relative datetime rendering; captured on mount when omitted. */\r\n now?: number\r\n}\r\n\r\nexport type OdTableExpose = {\r\n refresh: () => Promise<void>\r\n}\r\n\r\nexport type OdTableEvents<T> = {\r\n 'selection-change': (keys: OdTableRowKey[], rows: T[]) => void\r\n 'update:selected-row-keys': (keys: OdTableRowKey[]) => void\r\n 'query-change': (query: OdTableQuery) => void\r\n 'column-visibility-change': (visibility: Record<string, boolean>) => void\r\n 'column-width-change': (payload: { field: string; width: number }) => void\r\n 'schema-error': (error: unknown) => void\r\n 'data-error': (payload: { error: unknown; query: OdTableQuery }) => void\r\n retry: (payload: { stage: 'schema' | 'data' }) => void\r\n 'config-error': (error: OdTableConfigError) => void\r\n}\r\n\r\nexport type OdTableConfigErrorCode =\r\n | 'MODE_MISSING'\r\n | 'MODE_PARTIAL'\r\n | 'MODE_CONFLICT'\r\n | 'REQUEST_WITHOUT_URL_MODE'\r\n | 'REMOTE_PAGINATION'\r\n | 'INVALID_COLUMNS'\r\n | 'DUPLICATE_COLUMN_FIELD'\r\n | 'INVALID_COLUMN_FIELD'\r\n | 'INVALID_COLUMN_WIDTH'\r\n | 'INVALID_NUMBER_FORMAT'\r\n | 'SEARCHABLE_NON_TEXT'\r\n | 'FILTERABLE_NON_ENUM'\r\n | 'ENUM_OPTIONS_REQUIRED'\r\n | 'DUPLICATE_ENUM_OPTION'\r\n | 'INVALID_DEFAULT_SORTING'\r\n | 'INVALID_PAGINATION'\r\n | 'INVALID_ROW_KEY_FIELD'\r\n | 'MISSING_ROW_KEY'\r\n | 'DUPLICATE_ROW_KEY'\r\n | 'INVALID_INITIAL_QUERY'\r\n | 'INVALID_ROWS'\r\n | 'INVALID_RESULT'\r\n | 'RESULT_TOTAL_INVALID'\r\n | 'RESULT_PAGE_INVALID'\r\n | 'RESULT_PAGE_SIZE_INVALID'\r\n | 'RESULT_ITEMS_OVERFLOW'\r\n | 'RESULT_EMPTY_CONFLICT'\r\n\r\nexport class OdTableConfigError extends Error {\r\n override readonly name = 'OdTableConfigError'\r\n readonly code: OdTableConfigErrorCode\r\n readonly details?: unknown\r\n\r\n constructor(code: OdTableConfigErrorCode, message: string, details?: unknown) {\r\n super(message)\r\n this.code = code\r\n this.details = details\r\n Object.setPrototypeOf(this, new.target.prototype)\r\n }\r\n}\r\n\r\nexport type OdTableSourceMode = 'local' | 'function' | 'url'\r\n\r\ntype OdTableSourceInput<T extends object> = Pick<\r\n OdTableProps<T>,\r\n 'columns' | 'rows' | 'rowKey' | 'pagination' | 'loadSchema' | 'loadData' | 'schemaUrl' | 'queryUrl' | 'request'\r\n>\r\n\r\nconst isProvided = (value: unknown): boolean => value !== undefined && value !== null\r\n\r\nconst fail = (code: OdTableConfigErrorCode, message: string, details?: unknown): never => {\r\n throw new OdTableConfigError(code, message, details)\r\n}\r\n\r\nconst isPositiveInteger = (value: unknown): value is number =>\r\n typeof value === 'number' && Number.isInteger(value) && value > 0\r\n\r\nconst isRowKey = (value: unknown): value is OdTableRowKey =>\r\n (typeof value === 'string' && value.length > 0) || (typeof value === 'number' && Number.isFinite(value))\r\n\r\nexport function validateOdTableColumns(columns: unknown): OdTableColumn[] {\r\n if (!Array.isArray(columns) || columns.length === 0) {\r\n return fail('INVALID_COLUMNS', 'OdTable columns must be a non-empty array.')\r\n }\r\n const fields = new Set<string>()\r\n for (const column of columns) {\r\n if (!column || typeof column !== 'object') {\r\n fail('INVALID_COLUMNS', 'Each OdTable column must be an object.')\r\n }\r\n const value = column as Partial<OdTableColumn>\r\n const field = value.field\r\n if (typeof field !== 'string' || field.trim() === '') {\r\n return fail('INVALID_COLUMN_FIELD', 'Each OdTable column requires a non-empty field.')\r\n }\r\n if (fields.has(field)) {\r\n fail('DUPLICATE_COLUMN_FIELD', `Duplicate OdTable column field: ${field}.`, field)\r\n }\r\n fields.add(field)\r\n if (typeof value.title !== 'string' || value.title.length === 0) {\r\n fail('INVALID_COLUMNS', `Column ${value.field} requires a title.`)\r\n }\r\n if (!['text', 'number', 'datetime', 'boolean', 'enum'].includes(value.dataType ?? '')) {\r\n fail('INVALID_COLUMNS', `Column ${value.field} has an unsupported dataType.`)\r\n }\r\n for (const flag of ['sortable', 'searchable', 'filterable', 'visible', 'resizable'] as const) {\r\n if (value[flag] !== undefined && typeof value[flag] !== 'boolean') {\r\n fail('INVALID_COLUMNS', `Column ${value.field} ${flag} must be a boolean.`, value.field)\r\n }\r\n }\r\n if (value.align !== undefined && !['left', 'center', 'right'].includes(value.align)) {\r\n fail('INVALID_COLUMNS', `Column ${value.field} align is invalid.`, value.field)\r\n }\r\n if (value.searchable && value.dataType !== 'text') {\r\n fail('SEARCHABLE_NON_TEXT', `Column ${value.field} is searchable but is not a text column.`, value.field)\r\n }\r\n if (value.filterable && value.dataType !== 'enum') {\r\n fail('FILTERABLE_NON_ENUM', `Column ${value.field} is filterable but is not an enum column.`, value.field)\r\n }\r\n if (value.dataType === 'enum') {\r\n if (!Array.isArray(value.options)) {\r\n fail('ENUM_OPTIONS_REQUIRED', `Enum column ${value.field} requires options.`, value.field)\r\n }\r\n const options = new Set<string>()\r\n for (const option of value.options as OdTableOption[]) {\r\n if (!option || typeof option.value !== 'string' || typeof option.label !== 'string' || (option.disabled !== undefined && typeof option.disabled !== 'boolean')) {\r\n fail('INVALID_COLUMNS', `Enum column ${value.field} has an invalid option.`, value.field)\r\n }\r\n if (options.has(option.value)) {\r\n fail('DUPLICATE_ENUM_OPTION', `Enum column ${value.field} has a duplicate option value.`, option.value)\r\n }\r\n options.add(option.value)\r\n }\r\n }\r\n if (value.width !== undefined && (!Number.isFinite(value.width) || value.width <= 0)) {\r\n fail('INVALID_COLUMN_WIDTH', `Column ${value.field} width must be positive.`, value.field)\r\n }\r\n if (value.minWidth !== undefined && (!Number.isFinite(value.minWidth) || value.minWidth <= 0)) {\r\n fail('INVALID_COLUMN_WIDTH', `Column ${value.field} minWidth must be positive.`, value.field)\r\n }\r\n if (value.width !== undefined && value.minWidth !== undefined && value.width < value.minWidth) {\r\n fail('INVALID_COLUMN_WIDTH', `Column ${value.field} width cannot be less than minWidth.`, value.field)\r\n }\r\n if (value.numberFormat !== undefined) {\r\n if (!value.numberFormat || typeof value.numberFormat !== 'object') {\r\n fail('INVALID_NUMBER_FORMAT', `Column ${value.field} numberFormat is invalid.`, value.field)\r\n }\r\n const maximumFractionDigits = value.numberFormat.maximumFractionDigits\r\n if (\r\n maximumFractionDigits !== undefined &&\r\n (!Number.isInteger(maximumFractionDigits) || maximumFractionDigits < 0 || maximumFractionDigits > 20)\r\n ) {\r\n fail('INVALID_NUMBER_FORMAT', `Column ${value.field} maximumFractionDigits must be an integer from 0 to 20.`, value.field)\r\n }\r\n }\r\n if (value.booleanLabels !== undefined) {\r\n if (\r\n !value.booleanLabels ||\r\n typeof value.booleanLabels !== 'object' ||\r\n typeof value.booleanLabels.true !== 'string' ||\r\n typeof value.booleanLabels.false !== 'string'\r\n ) {\r\n fail('INVALID_COLUMNS', `Column ${value.field} booleanLabels is invalid.`, value.field)\r\n }\r\n }\r\n }\r\n return columns as OdTableColumn[]\r\n}\r\n\r\nexport function validateOdTablePagination(pagination: unknown): OdTablePaginationConfig {\r\n if (pagination === undefined) return {}\r\n if (!pagination || typeof pagination !== 'object') {\r\n return fail('INVALID_PAGINATION', 'OdTable pagination must be an object.')\r\n }\r\n const value = pagination as OdTablePaginationConfig\r\n if (value.defaultPageSize !== undefined && !isPositiveInteger(value.defaultPageSize)) {\r\n fail('INVALID_PAGINATION', 'Pagination defaultPageSize must be a positive integer.')\r\n }\r\n if (value.pageSizeOptions !== undefined) {\r\n if (!Array.isArray(value.pageSizeOptions) || value.pageSizeOptions.length === 0) {\r\n fail('INVALID_PAGINATION', 'Pagination pageSizeOptions must be a non-empty array.')\r\n }\r\n const options = new Set<number>()\r\n for (const pageSize of value.pageSizeOptions) {\r\n if (!isPositiveInteger(pageSize) || options.has(pageSize)) {\r\n fail('INVALID_PAGINATION', 'Pagination pageSizeOptions must contain unique positive integers.')\r\n }\r\n options.add(pageSize)\r\n }\r\n }\r\n return value\r\n}\r\n\r\nexport function validateOdTableSchema(schema: unknown): OdTableSchema {\r\n if (!schema || typeof schema !== 'object') {\r\n fail('INVALID_COLUMNS', 'OdTable Schema must be an object.')\r\n }\r\n const value = schema as Partial<OdTableSchema>\r\n if (typeof value.rowKey !== 'string' || value.rowKey.trim() === '') {\r\n fail('INVALID_ROW_KEY_FIELD', 'OdTable Schema requires a non-empty rowKey.')\r\n }\r\n const columns = validateOdTableColumns(value.columns)\r\n const fields = new Set(columns.map((column) => column.field))\r\n if (value.defaultSorting !== undefined) {\r\n if (!Array.isArray(value.defaultSorting)) {\r\n fail('INVALID_DEFAULT_SORTING', 'Schema defaultSorting must be an array.')\r\n }\r\n const seen = new Set<string>()\r\n for (const sorting of value.defaultSorting) {\r\n if (!sorting || !fields.has(sorting.field) || !['asc', 'desc'].includes(sorting.direction) || seen.has(sorting.field)) {\r\n fail('INVALID_DEFAULT_SORTING', 'Schema defaultSorting contains an invalid or duplicate field.', sorting)\r\n }\r\n const column = columns.find((item) => item.field === sorting.field)\r\n if (!column?.sortable) {\r\n fail('INVALID_DEFAULT_SORTING', `Schema defaultSorting field ${sorting.field} is not sortable.`, sorting.field)\r\n }\r\n seen.add(sorting.field)\r\n }\r\n }\r\n let pagination: OdTableSchema['pagination'] = value.pagination\r\n if (pagination !== undefined) {\r\n if (!pagination || typeof pagination !== 'object' || !isPositiveInteger(pagination.defaultPageSize) || !Array.isArray(pagination.pageSizeOptions)) {\r\n fail('INVALID_PAGINATION', 'Schema pagination is invalid.')\r\n }\r\n validateOdTablePagination(pagination)\r\n if (!pagination.pageSizeOptions.includes(pagination.defaultPageSize)) {\r\n // Keep the appended option sorted so the pager receives a stable order.\r\n // The returned schema is a copy: validating never mutates the payload.\r\n pagination = {\r\n ...pagination,\r\n pageSizeOptions: [...pagination.pageSizeOptions, pagination.defaultPageSize].sort((a, b) => a - b),\r\n }\r\n }\r\n }\r\n return { ...value, pagination } as OdTableSchema\r\n}\r\n\r\nexport function validateOdTableInitialQuery(query: unknown): OdTableInitialQuery | undefined {\r\n if (query === undefined) return undefined\r\n if (!query || typeof query !== 'object') fail('INVALID_INITIAL_QUERY', 'OdTable initialQuery must be an object.')\r\n const value = query as Partial<OdTableQuery>\r\n if (value.page !== undefined && !isPositiveInteger(value.page)) fail('INVALID_INITIAL_QUERY', 'initialQuery.page must be positive.')\r\n if (value.pageSize !== undefined && !isPositiveInteger(value.pageSize)) fail('INVALID_INITIAL_QUERY', 'initialQuery.pageSize must be positive.')\r\n if (value.searches !== undefined && (!Array.isArray(value.searches) || value.searches.some((item) => !item || typeof item.field !== 'string' || typeof item.value !== 'string'))) {\r\n fail('INVALID_INITIAL_QUERY', 'initialQuery.searches is invalid.')\r\n }\r\n if (value.filters !== undefined && (!Array.isArray(value.filters) || value.filters.some((item) => !item || typeof item.field !== 'string' || !Array.isArray(item.values) || item.values.some((entry) => typeof entry !== 'string')))) {\r\n fail('INVALID_INITIAL_QUERY', 'initialQuery.filters is invalid.')\r\n }\r\n if (value.sorting !== undefined && (!Array.isArray(value.sorting) || value.sorting.some((item) => !item || typeof item.field !== 'string' || !['asc', 'desc'].includes(item.direction)))) {\r\n fail('INVALID_INITIAL_QUERY', 'initialQuery.sorting is invalid.')\r\n }\r\n return value\r\n}\r\n\r\n/**\r\n * Checks query conditions against the capabilities advertised by a Schema.\r\n * Keeping this validation next to the shape validator prevents local and\r\n * remote modes from silently accepting conditions the column contract forbids.\r\n */\r\nexport function validateOdTableInitialQueryForColumns(\r\n query: OdTableInitialQuery | undefined,\r\n columns: readonly OdTableColumn[],\r\n): OdTableInitialQuery | undefined {\r\n if (!query) return query\r\n const byField = new Map(columns.map((column) => [column.field, column]))\r\n for (const entry of query.searches ?? []) {\r\n const column = byField.get(entry.field)\r\n if (!column?.searchable || column.dataType !== 'text') {\r\n fail('INVALID_INITIAL_QUERY', `initialQuery search field ${entry.field} is not searchable.`, entry)\r\n }\r\n }\r\n for (const entry of query.filters ?? []) {\r\n const column = byField.get(entry.field)\r\n if (!column?.filterable || column.dataType !== 'enum') {\r\n fail('INVALID_INITIAL_QUERY', `initialQuery filter field ${entry.field} is not filterable.`, entry)\r\n }\r\n }\r\n for (const entry of query.sorting ?? []) {\r\n const column = byField.get(entry.field)\r\n if (!column?.sortable) {\r\n fail('INVALID_INITIAL_QUERY', `initialQuery sort field ${entry.field} is not sortable.`, entry)\r\n }\r\n }\r\n return query\r\n}\r\n\r\nexport function validateOdTableRows<T extends object>(rows: unknown, rowKey: string): T[] {\r\n const entries = Array.isArray(rows) ? rows : fail('INVALID_ROWS', 'OdTable rows must be an array.')\r\n const keys = new Set<string>()\r\n for (const row of entries) {\r\n if (!row || typeof row !== 'object') fail('MISSING_ROW_KEY', 'Every row must be an object.')\r\n const key = (row as Record<string, unknown>)[rowKey]\r\n if (!isRowKey(key)) fail('MISSING_ROW_KEY', `Every row must contain a valid ${rowKey} key.`, row)\r\n const identity = `${typeof key}:${String(key)}`\r\n if (keys.has(identity)) fail('DUPLICATE_ROW_KEY', `Duplicate row key: ${String(key)}.`, key)\r\n keys.add(identity)\r\n }\r\n return entries as T[]\r\n}\r\n\r\nexport function validateOdTableSourceMode<T extends object>(input: OdTableSourceInput<T>): OdTableSourceMode {\r\n const local = ['columns', 'rows', 'rowKey'].some((key) => isProvided(input[key as keyof OdTableSourceInput<T>]))\r\n const functionRemote = ['loadSchema', 'loadData'].some((key) => isProvided(input[key as keyof OdTableSourceInput<T>]))\r\n const url = ['schemaUrl', 'queryUrl'].some((key) => isProvided(input[key as keyof OdTableSourceInput<T>]))\r\n const modes = [local, functionRemote, url].filter(Boolean).length\r\n if (modes === 0) fail('MODE_MISSING', 'OdTable requires a local, function remote, or URL data source.')\r\n if (modes > 1) fail('MODE_CONFLICT', 'OdTable data source modes are mutually exclusive.')\r\n if (local) {\r\n if (!Array.isArray(input.columns) || !Array.isArray(input.rows) || typeof input.rowKey !== 'string' || input.rowKey.trim() === '') {\r\n fail('MODE_PARTIAL', 'Local mode requires columns, rows, and rowKey.')\r\n }\r\n if (input.request !== undefined) fail('REQUEST_WITHOUT_URL_MODE', 'request is only supported in URL mode.')\r\n return 'local'\r\n }\r\n if (functionRemote) {\r\n if (typeof input.loadSchema !== 'function' || typeof input.loadData !== 'function') {\r\n fail('MODE_PARTIAL', 'Function remote mode requires loadSchema and loadData.')\r\n }\r\n if (input.pagination !== undefined) fail('REMOTE_PAGINATION', 'Remote mode pagination must be provided by Schema.')\r\n if (input.request !== undefined) fail('REQUEST_WITHOUT_URL_MODE', 'request is only supported in URL mode.')\r\n return 'function'\r\n }\r\n if (typeof input.schemaUrl !== 'string' || input.schemaUrl.trim() === '' || typeof input.queryUrl !== 'string' || input.queryUrl.trim() === '') {\r\n fail('MODE_PARTIAL', 'URL mode requires schemaUrl and queryUrl.')\r\n }\r\n if (input.pagination !== undefined) fail('REMOTE_PAGINATION', 'Remote mode pagination must be provided by Schema.')\r\n return 'url'\r\n}\r\n\r\nconst isNonNegativeInteger = (value: unknown): value is number =>\r\n typeof value === 'number' && Number.isInteger(value) && value >= 0\r\n\r\n/**\r\n * Validates a remote query response payload against the OdTable result\r\n * contract. Invalid payloads throw an `OdTableConfigError` with a stable code\r\n * so callers can route them to `data-error` without string matching.\r\n */\r\nexport function validateOdTableResult<T>(payload: unknown): OdTableResult<T> {\r\n if (!payload || typeof payload !== 'object' || !Array.isArray((payload as Partial<OdTableResult<T>>).items)) {\r\n fail('INVALID_RESULT', 'OdTable data response must be an object with an items array.', payload)\r\n }\r\n const value = payload as Partial<OdTableResult<T>>\r\n if (!isNonNegativeInteger(value.total)) {\r\n fail('RESULT_TOTAL_INVALID', 'OdTable data response total must be a non-negative integer.', value.total)\r\n }\r\n if (!isPositiveInteger(value.page)) {\r\n fail('RESULT_PAGE_INVALID', 'OdTable data response page must be a positive integer.', value.page)\r\n }\r\n if (!isPositiveInteger(value.pageSize)) {\r\n fail('RESULT_PAGE_SIZE_INVALID', 'OdTable data response pageSize must be a positive integer.', value.pageSize)\r\n }\r\n if (value.items!.length > value.pageSize!) {\r\n fail('RESULT_ITEMS_OVERFLOW', 'OdTable data response items cannot exceed pageSize.', {\r\n items: value.items!.length,\r\n pageSize: value.pageSize,\r\n })\r\n }\r\n if (value.total === 0 && (value.page !== 1 || value.items!.length > 0)) {\r\n fail('RESULT_EMPTY_CONFLICT', 'OdTable data response with total 0 must be page 1 with empty items.', {\r\n page: value.page,\r\n items: value.items!.length,\r\n })\r\n }\r\n return payload as OdTableResult<T>\r\n}\r\n","<script setup lang=\"ts\" generic=\"T extends object\">\r\nimport { computed, getCurrentInstance, onBeforeUnmount, ref, shallowRef, watch } from 'vue'\r\nimport {\r\n columnResizingFeature,\r\n columnSizingFeature,\r\n columnVisibilityFeature,\r\n rowSelectionFeature,\r\n tableFeatures,\r\n useTable,\r\n type ColumnDef,\r\n type ColumnSizingState,\r\n type Updater,\r\n} from '@tanstack/vue-table'\r\nimport {\r\n IconAlertCircle,\r\n IconArrowsSort,\r\n IconChevronLeft,\r\n IconChevronRight,\r\n IconFilter,\r\n IconListCheck,\r\n IconLoader,\r\n IconRefresh,\r\n IconSearch,\r\n IconSortAscending,\r\n IconSortDescending,\r\n} from '../icons'\r\nimport OdIcon from './OdIcon.vue'\r\nimport { useOdTablePopover } from './od-table-a11y'\r\nimport { formatOdTableCell, odTableExactDatetimeOrNull, parseOdTableDatetime } from './od-table-formatters'\r\nimport {\r\n cleanupOdTableQueryForColumns,\r\n createOdTableQuery,\r\n decodeOdTableRowKey,\r\n encodeOdTableRowKey,\r\n mergeOdTableInitialQuery,\r\n normalizeOdTableQuery,\r\n OD_TABLE_DEFAULT_PAGE_SIZE_OPTIONS,\r\n odTableQueriesEqual,\r\n odTableQueryReducer,\r\n runOdTableLocalQuery,\r\n type OdTableQueryAction,\r\n} from './od-table-query'\r\nimport { createOdTableRequestCoordinator, executeOdTableRequest } from './od-table-request'\r\nimport {\r\n OD_TABLE_DEFAULT_LOCALE,\r\n OdTableConfigError,\r\n validateOdTableColumns,\r\n validateOdTableInitialQuery,\r\n validateOdTableInitialQueryForColumns,\r\n validateOdTablePagination,\r\n validateOdTableResult,\r\n validateOdTableRows,\r\n validateOdTableSchema,\r\n validateOdTableSourceMode,\r\n type OdTableColumn,\r\n type OdTableLocale,\r\n type OdTableProps,\r\n type OdTableQuery,\r\n type OdTableRowKey,\r\n type OdTableSchema,\r\n type OdTableSourceMode,\r\n} from './OdTable.types'\r\n\r\ndefineOptions({ name: 'OdTable', inheritAttrs: false })\r\n\r\nconst props = withDefaults(defineProps<OdTableProps<T>>(), {\r\n density: 'standard',\r\n striped: false,\r\n bordered: true,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'selection-change': [keys: OdTableRowKey[], rows: T[]]\r\n 'update:selected-row-keys': [keys: OdTableRowKey[]]\r\n 'query-change': [query: OdTableQuery]\r\n 'column-visibility-change': [visibility: Record<string, boolean>]\r\n 'column-width-change': [payload: { field: string; width: number }]\r\n 'schema-error': [error: unknown]\r\n 'data-error': [payload: { error: unknown; query: OdTableQuery }]\r\n retry: [payload: { stage: 'schema' | 'data' }]\r\n 'config-error': [error: OdTableConfigError]\r\n}>()\r\n\r\n/* ------------------------------------------------------------------ *\r\n * TanStack v9 feature registration (ODT-004)\r\n * ------------------------------------------------------------------ */\r\n\r\ntype OdTableColumnMeta = { odColumn: OdTableColumn }\r\n\r\nconst odTableFeatures = tableFeatures({\r\n rowSelectionFeature,\r\n columnVisibilityFeature,\r\n columnSizingFeature,\r\n columnResizingFeature,\r\n columnMeta: {} as OdTableColumnMeta,\r\n})\r\n\r\nconst SELECTION_COLUMN_ID = '__od_table_selection'\r\nconst DEFAULT_COLUMN_WIDTH = 160\r\nconst MIN_COLUMN_WIDTH = 48\r\nconst SEARCH_DEBOUNCE_MS = 300\r\nconst KEYBOARD_RESIZE_STEP = 8\r\n/** Instance-scoped suffix so tooltip ids never collide across tables. */\r\nconst DESCRIBE_SCOPE = getCurrentInstance()?.uid ?? 0\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Resolved configuration state (ODT-005)\r\n * ------------------------------------------------------------------ */\r\n\r\ntype SourceMode = 'local' | 'function' | 'url' | 'invalid'\r\ntype SchemaStatus = 'idle' | 'loading' | 'ready' | 'error'\r\ntype DataStatus = 'idle' | 'loading' | 'refreshing' | 'ready' | 'error'\r\n\r\nconst sourceMode = ref<SourceMode>('invalid')\r\nconst configError = ref<OdTableConfigError | null>(null)\r\nconst schemaStatus = ref<SchemaStatus>('idle')\r\nconst dataStatus = ref<DataStatus>('idle')\r\nconst schema = shallowRef<OdTableSchema | null>(null)\r\nconst schemaErrorValue = ref<unknown>(null)\r\nconst dataErrorValue = ref<unknown>(null)\r\n\r\nconst columnsResolved = shallowRef<OdTableColumn[]>([])\r\nconst rowKeyField = ref('id')\r\nconst paginationConfig = ref<{ defaultPageSize: number; pageSizeOptions: number[] }>({\r\n defaultPageSize: 20,\r\n pageSizeOptions: [10, 20, 50, 100],\r\n})\r\n\r\nconst query = ref<OdTableQuery>(createOdTableQuery())\r\nconst displayRows = shallowRef<T[]>([])\r\nconst total = ref(0)\r\nconst selectedKeysInternal = ref<OdTableRowKey[]>([])\r\nconst columnVisibility = ref<Record<string, boolean>>({})\r\nconst columnWidths = ref<Record<string, number>>({})\r\nlet suppressQueryWatch = false\r\nlet configErrorEmitted = false\r\nlet schemaLoadedOnce = false\r\nlet preserveQueryOnNextSchema = false\r\n/** `initialQuery` is validated and read exactly once, at first initialization. */\r\nlet initialQuerySnapshot: import('./OdTable.types').OdTableInitialQuery | undefined\r\n\r\nconst locale = computed<Required<OdTableLocale>>(() => ({ ...OD_TABLE_DEFAULT_LOCALE, ...props.locale }))\r\nconst mountedNow = Date.now()\r\nconst relativeNow = computed(() => (Number.isFinite(props.now) ? props.now! : mountedNow))\r\n\r\nconst coordinator = createOdTableRequestCoordinator()\r\n\r\nfunction asConfigError(error: unknown): OdTableConfigError {\r\n return error instanceof OdTableConfigError\r\n ? error\r\n : new OdTableConfigError('INVALID_COLUMNS', describeError(error), error)\r\n}\r\n\r\nfunction handleConfigError(error: unknown) {\r\n const configErrorValue = asConfigError(error)\r\n configError.value = configErrorValue\r\n sourceMode.value = 'invalid'\r\n if (!configErrorEmitted) {\r\n configErrorEmitted = true\r\n emit('config-error', configErrorValue)\r\n }\r\n if (import.meta.env.DEV) throw configErrorValue\r\n}\r\n\r\nfunction describeError(error: unknown): string {\r\n if (error instanceof OdTableConfigError) return `${error.message}(${error.code})`\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\nfunction resetColumnVisibility(columns: readonly OdTableColumn[]) {\r\n const next: Record<string, boolean> = {}\r\n for (const column of columns) next[column.field] = column.visible !== false\r\n columnVisibility.value = next\r\n}\r\n\r\nfunction withDefaultPagination(input: { defaultPageSize?: number; pageSizeOptions?: number[] }) {\r\n const defaultPageSize = input.defaultPageSize ?? 20\r\n const options = [...(input.pageSizeOptions ?? OD_TABLE_DEFAULT_PAGE_SIZE_OPTIONS)]\r\n if (!options.includes(defaultPageSize)) options.push(defaultPageSize)\r\n options.sort((a, b) => a - b)\r\n return { defaultPageSize, pageSizeOptions: options }\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Initialization: Schema → query → data (ODT-005)\r\n * ------------------------------------------------------------------ */\r\n\r\nfunction setQuerySilently(next: OdTableQuery) {\r\n suppressQueryWatch = true\r\n try {\r\n query.value = next\r\n } finally {\r\n suppressQueryWatch = false\r\n }\r\n}\r\n\r\nfunction initialize() {\r\n // A source identity change starts a fresh schema lifecycle. Existing query\r\n // conditions are retained when switching sources, while the first lifecycle\r\n // still receives Schema defaults and the one-time initialQuery merge.\r\n preserveQueryOnNextSchema = schemaLoadedOnce\r\n schemaLoadedOnce = false\r\n configErrorEmitted = false\r\n configError.value = null\r\n if (initialQuerySnapshot === undefined) {\r\n try {\r\n initialQuerySnapshot = validateOdTableInitialQuery(props.initialQuery)\r\n } catch (error) {\r\n handleConfigError(error)\r\n return\r\n }\r\n }\r\n schema.value = null\r\n schemaStatus.value = 'idle'\r\n schemaErrorValue.value = null\r\n dataErrorValue.value = null\r\n dataStatus.value = 'idle'\r\n displayRows.value = []\r\n total.value = 0\r\n // Re-seed the selection from the controlled prop (or clear it in\r\n // uncontrolled mode) so a source re-init never silently wipes parent state.\r\n applySelection(props.selectedRowKeys ?? [], false)\r\n columnWidths.value = {}\r\n clearSearchDebounce()\r\n closeHeaderPopover(false)\r\n columnSettings.close()\r\n coordinator.cancel()\r\n\r\n let mode: OdTableSourceMode\r\n try {\r\n mode = validateOdTableSourceMode(props)\r\n } catch (error) {\r\n handleConfigError(error)\r\n return\r\n }\r\n sourceMode.value = mode\r\n\r\n if (mode === 'local') {\r\n try {\r\n const columns = validateOdTableColumns(props.columns)\r\n validateOdTablePagination(props.pagination)\r\n validateOdTableRows<T>(props.rows, props.rowKey!)\r\n columnsResolved.value = columns\r\n rowKeyField.value = props.rowKey!\r\n paginationConfig.value = withDefaultPagination(props.pagination ?? {})\r\n resetColumnVisibility(columns)\r\n if (!preserveQueryOnNextSchema) validateOdTableInitialQueryForColumns(initialQuerySnapshot, columns)\r\n if (preserveQueryOnNextSchema) {\r\n const cleaned = cleanupOdTableQueryForColumns(query.value, columns)\r\n if (cleaned) {\r\n setQuerySilently(cleaned)\r\n emit('query-change', cleaned)\r\n }\r\n } else {\r\n const base = createOdTableQuery(paginationConfig.value.defaultPageSize)\r\n setQuerySilently(mergeOdTableInitialQuery(base, initialQuerySnapshot))\r\n }\r\n preserveQueryOnNextSchema = false\r\n runLocalCompute()\r\n } catch (error) {\r\n handleConfigError(error)\r\n }\r\n return\r\n }\r\n void loadSchemaFlow()\r\n}\r\n\r\nasync function loadSchemaFlow() {\r\n if (sourceMode.value !== 'function' && sourceMode.value !== 'url') return\r\n schemaStatus.value = 'loading'\r\n schemaErrorValue.value = null\r\n try {\r\n const outcome = await coordinator.run('schema', async ({ signal }) => {\r\n let payload: unknown\r\n if (sourceMode.value === 'function') {\r\n payload = await props.loadSchema!()\r\n } else {\r\n payload = await executeOdTableRequest(props.request, props.schemaUrl!, { method: 'GET', signal })\r\n }\r\n return validateOdTableSchema(payload)\r\n })\r\n if (outcome.status === 'ignored') return\r\n if (!preserveQueryOnNextSchema) {\r\n try {\r\n validateOdTableInitialQueryForColumns(initialQuerySnapshot, outcome.value.columns)\r\n } catch (error) {\r\n handleConfigError(error)\r\n return\r\n }\r\n }\r\n applySchema(outcome.value)\r\n } catch (error) {\r\n if (error instanceof OdTableConfigError) {\r\n handleConfigError(error)\r\n return\r\n }\r\n schemaStatus.value = 'error'\r\n schemaErrorValue.value = error\r\n emit('schema-error', error)\r\n }\r\n}\r\n\r\nfunction applySchema(nextSchema: OdTableSchema) {\r\n schema.value = nextSchema\r\n schemaStatus.value = 'ready'\r\n columnsResolved.value = nextSchema.columns\r\n rowKeyField.value = nextSchema.rowKey\r\n paginationConfig.value = withDefaultPagination(nextSchema.pagination ?? {})\r\n // Preserve the user's visibility choices for surviving columns; new columns\r\n // start from their schema default.\r\n const preserved: Record<string, boolean> = {}\r\n for (const column of nextSchema.columns) {\r\n preserved[column.field] = columnVisibility.value[column.field] ?? (column.visible !== false)\r\n }\r\n columnVisibility.value = preserved\r\n\r\n if (!schemaLoadedOnce) {\r\n schemaLoadedOnce = true\r\n if (!preserveQueryOnNextSchema) {\r\n const base = createOdTableQuery(paginationConfig.value.defaultPageSize)\r\n base.sorting = nextSchema.defaultSorting ? [...nextSchema.defaultSorting] : []\r\n setQuerySilently(mergeOdTableInitialQuery(base, initialQuerySnapshot))\r\n } else {\r\n // Source switches keep active conditions, but drop fields removed by the\r\n // new Schema before issuing its first data request.\r\n const cleaned = cleanupOdTableQueryForColumns(query.value, nextSchema.columns)\r\n if (cleaned) {\r\n setQuerySilently(cleaned)\r\n emit('query-change', cleaned)\r\n }\r\n }\r\n preserveQueryOnNextSchema = false\r\n void requestData()\r\n } else {\r\n // Schema retry: mirror the local columns-change contract — stale conditions\r\n // are removed through commitQuery (query-change emitted, selection cleared),\r\n // and its query watcher fires the follow-up data request exactly once.\r\n const cleaned = cleanupOdTableQueryForColumns(query.value, nextSchema.columns)\r\n if (cleaned) commitQuery(cleaned)\r\n else void requestData()\r\n }\r\n}\r\n\r\nasync function requestData() {\r\n if (sourceMode.value !== 'function' && sourceMode.value !== 'url') return\r\n if (schemaStatus.value !== 'ready') return\r\n const currentQuery = query.value\r\n const hadRows = displayRows.value.length > 0\r\n dataStatus.value = hadRows ? 'refreshing' : 'loading'\r\n dataErrorValue.value = null\r\n try {\r\n const outcome = await coordinator.run('data', async ({ signal }) => {\r\n if (sourceMode.value === 'function') {\r\n const result = await props.loadData!(currentQuery, { signal })\r\n const validated = validateOdTableResult<T>(result)\r\n validateOdTableRows<T>(validated.items, rowKeyField.value)\r\n return validated\r\n }\r\n const payload = await executeOdTableRequest(props.request, props.queryUrl!, {\r\n method: 'POST',\r\n body: currentQuery,\r\n signal,\r\n })\r\n const validated = validateOdTableResult<T>(payload)\r\n validateOdTableRows<T>(validated.items, rowKeyField.value)\r\n return validated\r\n })\r\n if (outcome.status === 'ignored') return\r\n displayRows.value = outcome.value.items\r\n total.value = outcome.value.total\r\n dataStatus.value = 'ready'\r\n // Sync the pager to the backend's actual page/pageSize. This never emits\r\n // query-change and never triggers a second request.\r\n setQuerySilently(\r\n odTableQueryReducer(query.value, {\r\n type: 'sync-response',\r\n page: outcome.value.page,\r\n pageSize: outcome.value.pageSize,\r\n }),\r\n )\r\n } catch (error) {\r\n dataStatus.value = 'error'\r\n dataErrorValue.value = error\r\n emit('data-error', { error, query: currentQuery })\r\n }\r\n}\r\n\r\nfunction runLocalCompute() {\r\n try {\r\n validateOdTableRows<T>(props.rows ?? [], rowKeyField.value)\r\n } catch (error) {\r\n handleConfigError(error)\r\n return\r\n }\r\n const result = runOdTableLocalQuery(props.rows ?? [], columnsResolved.value, query.value)\r\n displayRows.value = result.rows\r\n total.value = result.total\r\n dataStatus.value = 'ready'\r\n if (result.page !== query.value.page) {\r\n setQuerySilently({ ...query.value, page: result.page })\r\n }\r\n pruneSelectionToRows(props.rows ?? [])\r\n}\r\n\r\n/** Removes selected keys that no longer exist in the dataset (需求 6.2). */\r\nfunction pruneSelectionToRows(rows: readonly T[]) {\r\n if (selectedKeysInternal.value.length === 0) return\r\n const available = new Set(rows.map((row) => encodeOdTableRowKey((row as Record<string, unknown>)[rowKeyField.value] as OdTableRowKey)))\r\n const pruned = selectedKeysInternal.value.filter((key) => available.has(encodeOdTableRowKey(key)))\r\n if (pruned.length !== selectedKeysInternal.value.length) applySelection(pruned, true)\r\n}\r\n\r\nasync function refresh() {\r\n if (configError.value) return\r\n if (sourceMode.value === 'local') {\r\n runLocalCompute()\r\n return\r\n }\r\n if (schemaStatus.value !== 'ready') {\r\n await loadSchemaFlow()\r\n return\r\n }\r\n await requestData()\r\n}\r\n\r\ndefineExpose({ refresh })\r\n\r\nfunction retry(stage: 'schema' | 'data') {\r\n emit('retry', { stage })\r\n if (stage === 'schema') void loadSchemaFlow()\r\n else void requestData()\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Query commits and event contract (ODT-006)\r\n * ------------------------------------------------------------------ */\r\n\r\nfunction commitQuery(next: OdTableQuery) {\r\n const normalized = normalizeOdTableQuery(next)\r\n if (odTableQueriesEqual(normalized, query.value)) return\r\n if (selectedKeysInternal.value.length > 0) applySelection([], true)\r\n query.value = normalized\r\n emit('query-change', normalized)\r\n}\r\n\r\nfunction dispatchQuery(action: OdTableQueryAction) {\r\n commitQuery(odTableQueryReducer(query.value, action))\r\n}\r\n\r\nfunction recoverLocalConfig(): boolean {\r\n if (!configError.value) return false\r\n try {\r\n const mode = validateOdTableSourceMode(props)\r\n if (mode !== 'local') return false\r\n const columns = validateOdTableColumns(props.columns)\r\n validateOdTablePagination(props.pagination)\r\n validateOdTableRows<T>(props.rows, props.rowKey!)\r\n validateOdTableInitialQueryForColumns(initialQuerySnapshot, columns)\r\n sourceMode.value = 'local'\r\n columnsResolved.value = columns\r\n rowKeyField.value = props.rowKey!\r\n paginationConfig.value = withDefaultPagination(props.pagination ?? {})\r\n resetColumnVisibility(columns)\r\n configError.value = null\r\n configErrorEmitted = false\r\n runLocalCompute()\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n// Remote data is requested by the query watcher; local mode recomputes in its\r\n// own watcher. `flush: 'sync'` keeps the suppression flag deterministic.\r\nwatch(\r\n query,\r\n () => {\r\n if (suppressQueryWatch) return\r\n if (sourceMode.value !== 'function' && sourceMode.value !== 'url') return\r\n if (schemaStatus.value !== 'ready') return\r\n void requestData()\r\n },\r\n { flush: 'sync' },\r\n)\r\n\r\nwatch(\r\n [() => props.rows, query, columnsResolved],\r\n () => {\r\n if (configError.value) {\r\n recoverLocalConfig()\r\n return\r\n }\r\n if (sourceMode.value === 'local' && !configError.value) runLocalCompute()\r\n },\r\n { deep: true },\r\n)\r\n\r\n// Full re-initialization when the data source identity changes.\r\nwatch(\r\n () => [\r\n props.loadSchema,\r\n props.loadData,\r\n props.schemaUrl,\r\n props.queryUrl,\r\n props.request,\r\n props.rowKey,\r\n JSON.stringify(props.pagination ?? null),\r\n ],\r\n () => initialize(),\r\n)\r\n\r\n// Local columns changes rebuild column state and clean stale query fields.\r\n// A previously invalid configuration can self-heal: valid columns clear the\r\n// config error and re-run the full local pipeline (rows re-validated inside).\r\nwatch(\r\n () => props.columns,\r\n (columns) => {\r\n if (configError.value) {\r\n recoverLocalConfig()\r\n return\r\n }\r\n if (sourceMode.value !== 'local') return\r\n try {\r\n const validated = validateOdTableColumns(columns)\r\n columnsResolved.value = validated\r\n const preserved: Record<string, boolean> = {}\r\n for (const column of validated) {\r\n preserved[column.field] = columnVisibility.value[column.field] ?? (column.visible !== false)\r\n }\r\n columnVisibility.value = preserved\r\n const cleaned = cleanupOdTableQueryForColumns(query.value, validated)\r\n if (cleaned) commitQuery(cleaned)\r\n else runLocalCompute()\r\n } catch (error) {\r\n handleConfigError(error)\r\n }\r\n },\r\n { deep: true },\r\n)\r\n\r\n/* ------------------------------------------------------------------ *\r\n * TanStack table instance (ODT-004)\r\n * ------------------------------------------------------------------ */\r\n\r\nconst tanstackColumns = computed<ColumnDef<typeof odTableFeatures, T>[]>(() => {\r\n const defs: ColumnDef<typeof odTableFeatures, T>[] = [\r\n {\r\n id: SELECTION_COLUMN_ID,\r\n enableHiding: false,\r\n enableResizing: false,\r\n size: MIN_COLUMN_WIDTH,\r\n },\r\n ]\r\n for (const column of columnsResolved.value) {\r\n defs.push({\r\n id: column.field,\r\n accessorKey: column.field,\r\n header: column.title,\r\n enableResizing: column.resizable !== false,\r\n size: column.width ?? column.minWidth ?? DEFAULT_COLUMN_WIDTH,\r\n minSize: Math.max(column.minWidth ?? 0, MIN_COLUMN_WIDTH),\r\n meta: { odColumn: column },\r\n })\r\n }\r\n return defs\r\n})\r\n\r\n// A fresh array identity on every relevant change guarantees the table\r\n// rebuilds rows (and therefore re-reads `getRowId`) when the row key changes.\r\nconst tanstackData = computed<Readonly<T[]>>(() => {\r\n void rowKeyField.value\r\n return displayRows.value.map((row) => row)\r\n})\r\n\r\nconst rowSelectionMap = computed<Record<string, true>>(() => {\r\n const map: Record<string, true> = {}\r\n for (const key of selectedKeysInternal.value) map[encodeOdTableRowKey(key)] = true\r\n return map\r\n})\r\n\r\nconst minColumnWidths = computed(() => {\r\n const map: Record<string, number> = { [SELECTION_COLUMN_ID]: MIN_COLUMN_WIDTH }\r\n for (const column of columnsResolved.value) {\r\n map[column.field] = Math.max(column.minWidth ?? 0, MIN_COLUMN_WIDTH)\r\n }\r\n return map\r\n})\r\n\r\nfunction handleColumnSizingChange(updater: Updater<ColumnSizingState>) {\r\n const next = typeof updater === 'function' ? updater(columnWidths.value) : updater\r\n const clamped: Record<string, number> = {}\r\n for (const [field, width] of Object.entries(next)) {\r\n clamped[field] = Math.max(minColumnWidths.value[field] ?? MIN_COLUMN_WIDTH, Math.round(width))\r\n }\r\n columnWidths.value = clamped\r\n}\r\n\r\nconst table = useTable<typeof odTableFeatures, T>({\r\n features: odTableFeatures,\r\n columns: tanstackColumns,\r\n data: tanstackData,\r\n getRowId: (row) => encodeOdTableRowKey((row as Record<string, unknown>)[rowKeyField.value] as OdTableRowKey),\r\n state: computed(() => ({\r\n rowSelection: rowSelectionMap.value,\r\n columnVisibility: { ...columnVisibility.value },\r\n columnSizing: { ...columnWidths.value },\r\n })),\r\n onColumnSizingChange: handleColumnSizingChange,\r\n columnResizeMode: 'onChange',\r\n})\r\n\r\nconst headers = computed(() => table.getHeaderGroups()[0]?.headers ?? [])\r\nconst tableRows = computed(() => table.getRowModel().rows)\r\nconst tableWidth = computed(() => table.getTotalSize())\r\n\r\n// Emit the final width once a mouse drag finishes.\r\nwatch(\r\n () => table.atoms.columnResizing?.get().isResizingColumn ?? false,\r\n (isResizing, wasResizing) => {\r\n if (!isResizing && typeof wasResizing === 'string') {\r\n emitColumnWidth(wasResizing)\r\n }\r\n },\r\n)\r\n\r\nfunction emitColumnWidth(field: string) {\r\n if (field === SELECTION_COLUMN_ID) return\r\n emit('column-width-change', { field, width: columnWidths.value[field] ?? currentColumnSize(field) })\r\n}\r\n\r\nfunction currentColumnSize(field: string): number {\r\n return table.getColumn(field)?.getSize() ?? DEFAULT_COLUMN_WIDTH\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Row selection (ODT-007)\r\n * ------------------------------------------------------------------ */\r\n\r\nwatch(\r\n () => props.selectedRowKeys,\r\n (next) => {\r\n if (next) applySelection(next, false)\r\n },\r\n { immediate: true, deep: true },\r\n)\r\n\r\nconst selectedIdSet = computed(() => new Set(selectedKeysInternal.value.map(encodeOdTableRowKey)))\r\n\r\nfunction applySelection(keys: OdTableRowKey[], emitEvents: boolean) {\r\n const seen = new Set<string>()\r\n const next: OdTableRowKey[] = []\r\n for (const key of keys) {\r\n const id = encodeOdTableRowKey(key)\r\n if (seen.has(id)) continue\r\n seen.add(id)\r\n next.push(key)\r\n }\r\n selectedKeysInternal.value = next\r\n if (!emitEvents) return\r\n emit('update:selected-row-keys', next)\r\n const rowById = new Map(tableRows.value.map((row) => [row.id, row.original]))\r\n const matched: T[] = []\r\n for (const key of next) {\r\n const row = rowById.get(encodeOdTableRowKey(key))\r\n if (row !== undefined) matched.push(row)\r\n }\r\n emit('selection-change', next, matched)\r\n}\r\n\r\nfunction toggleRowSelected(rowId: string, checked: boolean) {\r\n const key = decodeOdTableRowKey(rowId)\r\n if (key === null) return\r\n const next = checked\r\n ? [...selectedKeysInternal.value, key]\r\n : selectedKeysInternal.value.filter((existing) => encodeOdTableRowKey(existing) !== rowId)\r\n applySelection(next, true)\r\n}\r\n\r\nconst allPageRowsSelected = computed(\r\n () => tableRows.value.length > 0 && tableRows.value.every((row) => selectedIdSet.value.has(row.id)),\r\n)\r\nconst somePageRowsSelected = computed(() => {\r\n if (allPageRowsSelected.value) return false\r\n return tableRows.value.some((row) => selectedIdSet.value.has(row.id))\r\n})\r\n\r\nfunction toggleAllPageRows(checked: boolean) {\r\n if (checked) {\r\n const next = [...selectedKeysInternal.value]\r\n for (const row of tableRows.value) {\r\n const key = decodeOdTableRowKey(row.id)\r\n if (key !== null && !selectedIdSet.value.has(row.id)) next.push(key)\r\n }\r\n applySelection(next, true)\r\n return\r\n }\r\n const pageIds = new Set(tableRows.value.map((row) => row.id))\r\n const next = selectedKeysInternal.value.filter((key) => !pageIds.has(encodeOdTableRowKey(key)))\r\n applySelection(next, true)\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Header interactions: sort / search / filter (ODT-006)\r\n * ------------------------------------------------------------------ */\r\n\r\nfunction toggleSort(field: string, additive: boolean) {\r\n dispatchQuery({ type: 'sort', field, additive })\r\n}\r\n\r\nconst searchDraft = ref('')\r\nconst filterDraft = ref<string[]>([])\r\nconst headerPopoverState = ref<{ kind: 'search' | 'filter'; field: string } | null>(null)\r\nconst headerPopover = useOdTablePopover(() => {\r\n if (headerPopoverState.value?.kind === 'search') commitSearchFromDraft()\r\n headerPopoverState.value = null\r\n})\r\nlet searchDebounceTimer: number | undefined\r\n\r\nfunction clearSearchDebounce() {\r\n if (searchDebounceTimer !== undefined) {\r\n window.clearTimeout(searchDebounceTimer)\r\n searchDebounceTimer = undefined\r\n }\r\n}\r\n\r\nfunction columnByField(field: string): OdTableColumn | undefined {\r\n return columnsResolved.value.find((column) => column.field === field)\r\n}\r\n\r\nfunction currentSearchValue(field: string): string {\r\n return query.value.searches.find((entry) => entry.field === field)?.value ?? ''\r\n}\r\n\r\nfunction currentFilterValues(field: string): string[] {\r\n return query.value.filters.find((entry) => entry.field === field)?.values ?? []\r\n}\r\n\r\nfunction toggleHeaderPopover(kind: 'search' | 'filter', field: string, trigger: HTMLElement) {\r\n if (headerPopoverState.value?.kind === kind && headerPopoverState.value.field === field) {\r\n headerPopover.close({ restoreFocus: true })\r\n return\r\n }\r\n if (headerPopoverState.value) headerPopover.close()\r\n headerPopoverState.value = { kind, field }\r\n if (kind === 'search') {\r\n clearSearchDebounce()\r\n searchDraft.value = currentSearchValue(field)\r\n } else {\r\n filterDraft.value = [...currentFilterValues(field)]\r\n }\r\n headerPopover.open(trigger, { align: 'end', width: kind === 'search' ? 260 : 240 })\r\n}\r\n\r\nfunction closeHeaderPopover(restoreFocus: boolean) {\r\n if (!headerPopoverState.value) return\r\n headerPopover.close({ restoreFocus })\r\n}\r\n\r\nfunction scheduleSearchCommit() {\r\n clearSearchDebounce()\r\n searchDebounceTimer = window.setTimeout(() => commitSearchFromDraft(), SEARCH_DEBOUNCE_MS)\r\n}\r\n\r\nfunction commitSearchFromDraft() {\r\n clearSearchDebounce()\r\n const state = headerPopoverState.value\r\n if (!state || state.kind !== 'search') return\r\n dispatchQuery({ type: 'set-search', field: state.field, value: searchDraft.value })\r\n}\r\n\r\nfunction commitSearchNow() {\r\n commitSearchFromDraft()\r\n}\r\n\r\nfunction toggleFilterDraft(value: string, checked: boolean) {\r\n const option = headerPopoverColumn()?.options?.find((item) => item.value === value)\r\n if (option?.disabled) return\r\n filterDraft.value = checked ? [...filterDraft.value, value] : filterDraft.value.filter((entry) => entry !== value)\r\n}\r\n\r\nfunction confirmFilter() {\r\n const state = headerPopoverState.value\r\n if (!state) return\r\n dispatchQuery({ type: 'set-filter', field: state.field, values: filterDraft.value })\r\n headerPopover.close({ restoreFocus: true })\r\n}\r\n\r\nfunction resetFilter() {\r\n const state = headerPopoverState.value\r\n if (!state) return\r\n filterDraft.value = []\r\n dispatchQuery({ type: 'set-filter', field: state.field, values: [] })\r\n}\r\n\r\nfunction hasSearchCondition(field: string): boolean {\r\n return query.value.searches.some((entry) => entry.field === field)\r\n}\r\n\r\nfunction hasFilterCondition(field: string): boolean {\r\n return query.value.filters.some((entry) => entry.field === field)\r\n}\r\n\r\nfunction sortDirectionOf(field: string): 'asc' | 'desc' | undefined {\r\n return query.value.sorting.find((entry) => entry.field === field)?.direction\r\n}\r\n\r\nfunction sortPriorityOf(field: string): number {\r\n const index = query.value.sorting.findIndex((entry) => entry.field === field)\r\n return index >= 0 && query.value.sorting.length > 1 ? index + 1 : 0\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Column settings: visibility, hidden conditions, widths (ODT-008)\r\n * ------------------------------------------------------------------ */\r\n\r\nconst columnSettingsHint = ref('')\r\nconst columnSettings = useOdTablePopover()\r\n\r\nconst activeConditionFields = computed(() => {\r\n const fields = new Set<string>()\r\n for (const entry of query.value.searches) fields.add(entry.field)\r\n for (const entry of query.value.filters) fields.add(entry.field)\r\n for (const entry of query.value.sorting) fields.add(entry.field)\r\n return fields\r\n})\r\n\r\nconst visibleBusinessColumnCount = computed(\r\n () => Object.values(columnVisibility.value).filter(Boolean).length,\r\n)\r\n\r\nfunction toggleColumnVisible(field: string, visible: boolean) {\r\n if (!visible && visibleBusinessColumnCount.value <= 1) {\r\n columnSettingsHint.value = locale.value.keepOneColumnVisible\r\n return\r\n }\r\n columnSettingsHint.value = ''\r\n columnVisibility.value = { ...columnVisibility.value, [field]: visible }\r\n emit('column-visibility-change', { ...columnVisibility.value })\r\n}\r\n\r\nfunction restoreDefaultVisibility() {\r\n const next: Record<string, boolean> = {}\r\n for (const column of columnsResolved.value) next[column.field] = column.visible !== false\r\n columnVisibility.value = next\r\n columnSettingsHint.value = ''\r\n emit('column-visibility-change', { ...columnVisibility.value })\r\n}\r\n\r\nfunction clearColumnConditions(field: string) {\r\n dispatchQuery({ type: 'remove-column', field })\r\n}\r\n\r\nfunction clearAllColumnConditions() {\r\n let next = query.value\r\n for (const field of activeConditionFields.value) {\r\n next = odTableQueryReducer(next, { type: 'remove-column', field })\r\n }\r\n commitQuery(next)\r\n}\r\n\r\n/** Keyboard column resize: arrows step 8px, Enter/Space commits, Escape restores. */\r\nconst keyboardResize = ref<{ field: string; startWidth: number } | null>(null)\r\n\r\nfunction minWidthOf(field: string): number {\r\n return minColumnWidths.value[field] ?? MIN_COLUMN_WIDTH\r\n}\r\n\r\nfunction setColumnWidth(field: string, width: number) {\r\n const clamped = Math.max(minWidthOf(field), Math.round(width))\r\n columnWidths.value = { ...columnWidths.value, [field]: clamped }\r\n}\r\n\r\nfunction startKeyboardResize(field: string) {\r\n if (keyboardResize.value?.field === field) {\r\n emitColumnWidth(field)\r\n keyboardResize.value = null\r\n return\r\n }\r\n keyboardResize.value = { field, startWidth: columnWidths.value[field] ?? currentColumnSize(field) }\r\n}\r\n\r\nfunction keyboardResizeStep(field: string, delta: number) {\r\n if (keyboardResize.value?.field !== field) return\r\n setColumnWidth(field, (columnWidths.value[field] ?? currentColumnSize(field)) + delta)\r\n}\r\n\r\nfunction cancelKeyboardResize(field: string) {\r\n const session = keyboardResize.value\r\n if (session?.field !== field) return\r\n setColumnWidth(field, session.startWidth)\r\n keyboardResize.value = null\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Pagination (ODT-006)\r\n * ------------------------------------------------------------------ */\r\n\r\nconst effectivePageSizeOptions = computed(() => {\r\n const options = [...paginationConfig.value.pageSizeOptions]\r\n if (!options.includes(query.value.pageSize)) options.push(query.value.pageSize)\r\n return options.sort((a, b) => a - b)\r\n})\r\n\r\nconst pageCount = computed(() => Math.max(1, Math.ceil(total.value / query.value.pageSize)))\r\n\r\ntype PageListItem = { type: 'page'; page: number } | { type: 'ellipsis'; key: string }\r\n\r\nconst pageList = computed<PageListItem[]>(() => {\r\n const current = query.value.page\r\n const count = pageCount.value\r\n if (count <= 7) {\r\n return Array.from({ length: count }, (_, index) => ({ type: 'page', page: index + 1 }) as PageListItem)\r\n }\r\n const items: PageListItem[] = [{ type: 'page', page: 1 }]\r\n const windowStart = Math.max(2, current - 1)\r\n const windowEnd = Math.min(count - 1, current + 1)\r\n if (windowStart > 2) items.push({ type: 'ellipsis', key: 'start' })\r\n for (let page = windowStart; page <= windowEnd; page += 1) items.push({ type: 'page', page })\r\n if (windowEnd < count - 1) items.push({ type: 'ellipsis', key: 'end' })\r\n items.push({ type: 'page', page: count })\r\n return items\r\n})\r\n\r\nfunction gotoPage(page: number) {\r\n dispatchQuery({ type: 'set-page', page })\r\n}\r\n\r\nfunction changePageSize(event: Event) {\r\n const value = Number((event.target as HTMLSelectElement).value)\r\n if (Number.isInteger(value) && value > 0) dispatchQuery({ type: 'set-page-size', pageSize: value })\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * View state (ODT-009)\r\n * ------------------------------------------------------------------ */\r\n\r\nconst showLoading = computed(() => !configError.value && (schemaStatus.value === 'loading' || dataStatus.value === 'loading'))\r\nconst showRefreshing = computed(() => dataStatus.value === 'refreshing')\r\nconst showEmpty = computed(\r\n () =>\r\n !configError.value &&\r\n schemaStatus.value !== 'loading' &&\r\n dataStatus.value === 'ready' &&\r\n displayRows.value.length === 0,\r\n)\r\nconst showErrorState = computed(() => {\r\n if (configError.value) return false\r\n if (schemaStatus.value === 'error') return true\r\n return dataStatus.value === 'error' && displayRows.value.length === 0\r\n})\r\nconst showErrorBanner = computed(() => dataStatus.value === 'error' && displayRows.value.length > 0)\r\nconst errorStage = computed<'schema' | 'data'>(() => (schemaStatus.value === 'error' ? 'schema' : 'data'))\r\nconst errorMessage = computed(() => describeError((errorStage.value === 'schema' ? schemaErrorValue.value : dataErrorValue.value) ?? configError.value))\r\nconst stateColumnCount = computed(() => headers.value.length)\r\n\r\nconst rootClasses = computed(() => [\r\n 'od-table',\r\n `od-table--${props.density}`,\r\n {\r\n 'od-table--striped': props.striped,\r\n 'od-table--bordered': props.bordered,\r\n },\r\n])\r\n\r\nconst tableAriaLabel = computed(() => props.tableLabel ?? locale.value.tableName)\r\n\r\nfunction cellText(column: OdTableColumn, value: unknown): string {\r\n return formatOdTableCell(column, value, { locale: locale.value, now: relativeNow.value })\r\n}\r\n\r\nfunction exactDatetime(value: unknown): string | null {\r\n return odTableExactDatetimeOrNull(value)\r\n}\r\n\r\nfunction isDatetimeSortable(value: unknown): boolean {\r\n return parseOdTableDatetime(value) !== null\r\n}\r\n\r\nfunction headerPopoverColumn(): OdTableColumn | undefined {\r\n const state = headerPopoverState.value\r\n return state ? columnByField(state.field) : undefined\r\n}\r\n\r\nonBeforeUnmount(() => {\r\n clearSearchDebounce()\r\n coordinator.dispose()\r\n})\r\n\r\ninitialize()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"rootClasses\" data-testid=\"od-table\" v-bind=\"$attrs\">\r\n <div v-if=\"configError\" class=\"od-table__state od-table__state--error od-table__state--root\" data-testid=\"od-table-error\" role=\"alert\">\r\n <OdIcon :icon=\"IconAlertCircle\" :size=\"20\" />\r\n <div>\r\n <p class=\"od-table__state-title\">{{ locale.loadError }}</p>\r\n <p class=\"od-table__state-detail\">{{ describeError(configError) }}</p>\r\n </div>\r\n </div>\r\n\r\n <template v-else>\r\n <div class=\"od-table__toolbar\" data-testid=\"od-table-toolbar\">\r\n <div class=\"od-table__toolbar-meta\">\r\n <span class=\"od-table__total\">{{ locale.total(total) }}</span>\r\n <span v-if=\"selectedKeysInternal.length > 0\" class=\"od-table__selected\">{{ locale.selectedCount(selectedKeysInternal.length) }}</span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"od-table__toolbar-button\"\r\n data-testid=\"od-table-column-settings\"\r\n :aria-expanded=\"columnSettings.isOpen.value\"\r\n @click=\"\r\n ($event) => {\r\n if (columnSettings.isOpen.value) columnSettings.close({ restoreFocus: true })\r\n else {\r\n columnSettingsHint = ''\r\n columnSettings.open($event.currentTarget as HTMLElement, { align: 'end', width: 280 })\r\n }\r\n }\r\n \"\r\n >\r\n <OdIcon :icon=\"IconListCheck\" :size=\"16\" />\r\n {{ locale.columnSettings }}\r\n </button>\r\n <div\r\n v-if=\"columnSettings.isOpen.value\"\r\n :ref=\"(element) => columnSettings.registerPanel(element as HTMLElement | null)\"\r\n class=\"od-table__popover od-table__column-panel\"\r\n role=\"dialog\"\r\n :aria-label=\"locale.columnSettings\"\r\n data-testid=\"od-table-column-settings-panel\"\r\n :style=\"{ top: `${columnSettings.placement.value.top}px`, left: `${columnSettings.placement.value.left}px` }\"\r\n @keydown=\"columnSettings.onKeydown\"\r\n >\r\n <ul class=\"od-table__column-list\">\r\n <li v-for=\"column in columnsResolved\" :key=\"column.field\" class=\"od-table__column-item\">\r\n <label class=\"od-table__column-label\">\r\n <input\r\n type=\"checkbox\"\r\n :data-testid=\"`od-table-column-visibility-${column.field}`\"\r\n :checked=\"columnVisibility[column.field] !== false\"\r\n @change=\"toggleColumnVisible(column.field, ($event.target as HTMLInputElement).checked)\"\r\n />\r\n <span>{{ column.title }}</span>\r\n </label>\r\n <template v-if=\"activeConditionFields.has(column.field)\">\r\n <span class=\"od-table__condition-dot\" aria-hidden=\"true\"></span>\r\n <button\r\n type=\"button\"\r\n class=\"od-table__link-button\"\r\n :data-testid=\"`od-table-clear-condition-${column.field}`\"\r\n @click=\"clearColumnConditions(column.field)\"\r\n >\r\n {{ locale.clearCondition(column.title) }}\r\n </button>\r\n </template>\r\n </li>\r\n </ul>\r\n <p class=\"od-table__hint\" role=\"status\">{{ columnSettingsHint }}</p>\r\n <div class=\"od-table__column-actions\">\r\n <button\r\n type=\"button\"\r\n class=\"od-table__link-button\"\r\n data-testid=\"od-table-clear-all-conditions\"\r\n :disabled=\"activeConditionFields.size === 0\"\r\n @click=\"clearAllColumnConditions\"\r\n >\r\n {{ locale.clearAllConditions }}\r\n </button>\r\n <button type=\"button\" class=\"od-table__link-button\" data-testid=\"od-table-restore-default\" @click=\"restoreDefaultVisibility\">\r\n {{ locale.restoreDefault }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"od-table__viewport\">\r\n <table class=\"od-table__table\" :aria-label=\"tableAriaLabel\" :aria-rowcount=\"total + 1\" :style=\"{ width: `${tableWidth}px` }\">\r\n <colgroup>\r\n <col\r\n v-for=\"header in headers\"\r\n :key=\"header.id\"\r\n :style=\"{ width: `${header.getSize()}px` }\"\r\n />\r\n </colgroup>\r\n <thead>\r\n <tr class=\"od-table__head-row\">\r\n <th\r\n v-for=\"(header, headerIndex) in headers\"\r\n :key=\"header.id\"\r\n class=\"od-table__head\"\r\n :class=\"{ 'od-table__head--selection': header.id === '__od_table_selection' }\"\r\n :aria-colindex=\"headerIndex + 1\"\r\n :aria-sort=\"\r\n header.column.columnDef.meta?.odColumn?.sortable\r\n ? sortDirectionOf(header.id) === 'asc'\r\n ? 'ascending'\r\n : sortDirectionOf(header.id) === 'desc'\r\n ? 'descending'\r\n : 'none'\r\n : undefined\r\n \"\r\n >\r\n <div v-if=\"header.id === '__od_table_selection'\" class=\"od-table__head-inner od-table__head-inner--selection\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"od-table__checkbox\"\r\n data-testid=\"od-table-select-all\"\r\n :aria-label=\"allPageRowsSelected ? locale.deselectAll : locale.selectAll\"\r\n :checked=\"allPageRowsSelected\"\r\n :indeterminate=\"somePageRowsSelected\"\r\n @change=\"toggleAllPageRows(($event.target as HTMLInputElement).checked)\"\r\n />\r\n </div>\r\n <div v-else class=\"od-table__head-inner\" :class=\"`od-table__head-inner--${header.column.columnDef.meta?.odColumn?.align ?? 'left'}`\">\r\n <button\r\n v-if=\"header.column.columnDef.meta?.odColumn?.sortable\"\r\n type=\"button\"\r\n class=\"od-table__sort\"\r\n :class=\"{ 'is-active': sortDirectionOf(header.id) !== undefined }\"\r\n :data-testid=\"`od-table-sort-${header.id}`\"\r\n @click=\"toggleSort(header.id, ($event as MouseEvent).shiftKey)\"\r\n >\r\n <span class=\"od-table__sort-title\">{{ header.column.columnDef.meta?.odColumn?.title }}</span>\r\n <OdIcon\r\n :icon=\"sortDirectionOf(header.id) === 'asc' ? IconSortAscending : sortDirectionOf(header.id) === 'desc' ? IconSortDescending : IconArrowsSort\"\r\n :size=\"14\"\r\n class=\"od-table__sort-icon\"\r\n />\r\n <span v-if=\"sortPriorityOf(header.id) > 0\" class=\"od-table__sort-priority\">{{ sortPriorityOf(header.id) }}</span>\r\n </button>\r\n <span v-else class=\"od-table__head-title\">{{ header.column.columnDef.meta?.odColumn?.title }}</span>\r\n <span v-if=\"header.column.columnDef.meta?.odColumn\" class=\"od-table__head-actions\">\r\n <button\r\n v-if=\"header.column.columnDef.meta.odColumn.searchable\"\r\n type=\"button\"\r\n class=\"od-table__icon-button\"\r\n :class=\"{ 'is-active': hasSearchCondition(header.id) }\"\r\n :data-testid=\"`od-table-search-trigger-${header.id}`\"\r\n :aria-label=\"`${locale.search} ${header.column.columnDef.meta.odColumn.title}`\"\r\n :aria-expanded=\"headerPopoverState?.kind === 'search' && headerPopoverState.field === header.id\"\r\n @click=\"toggleHeaderPopover('search', header.id, $event.currentTarget as HTMLElement)\"\r\n >\r\n <OdIcon :icon=\"IconSearch\" :size=\"16\" />\r\n </button>\r\n <button\r\n v-if=\"header.column.columnDef.meta.odColumn.filterable\"\r\n type=\"button\"\r\n class=\"od-table__icon-button\"\r\n :class=\"{ 'is-active': hasFilterCondition(header.id) }\"\r\n :data-testid=\"`od-table-filter-${header.id}`\"\r\n :aria-label=\"`${locale.filter} ${header.column.columnDef.meta.odColumn.title}`\"\r\n :aria-expanded=\"headerPopoverState?.kind === 'filter' && headerPopoverState.field === header.id\"\r\n @click=\"toggleHeaderPopover('filter', header.id, $event.currentTarget as HTMLElement)\"\r\n >\r\n <OdIcon :icon=\"IconFilter\" :size=\"16\" />\r\n </button>\r\n </span>\r\n <span\r\n v-if=\"header.column.getCanResize()\"\r\n class=\"od-table__resize-handle\"\r\n :class=\"{ 'is-adjusting': keyboardResize?.field === header.id }\"\r\n role=\"separator\"\r\n tabindex=\"0\"\r\n :aria-orientation=\"'vertical'\"\r\n :aria-label=\"locale.resizeColumn(header.column.columnDef.meta?.odColumn?.title ?? header.id)\"\r\n :aria-valuenow=\"header.getSize()\"\r\n :data-testid=\"`od-table-resize-${header.id}`\"\r\n @mousedown=\"header.getResizeHandler()($event)\"\r\n @keydown=\"\r\n (event) => {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault()\r\n startKeyboardResize(header.id)\r\n } else if (event.key === 'ArrowLeft') {\r\n event.preventDefault()\r\n keyboardResizeStep(header.id, -KEYBOARD_RESIZE_STEP)\r\n } else if (event.key === 'ArrowRight') {\r\n event.preventDefault()\r\n keyboardResizeStep(header.id, KEYBOARD_RESIZE_STEP)\r\n } else if (event.key === 'Escape') {\r\n event.preventDefault()\r\n cancelKeyboardResize(header.id)\r\n }\r\n }\r\n \"\r\n ></span>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n v-for=\"row in tableRows\"\r\n :key=\"row.id\"\r\n class=\"od-table__row\"\r\n :aria-rowindex=\"(query.page - 1) * query.pageSize + row.index + 2\"\r\n >\r\n <td v-if=\"row.getVisibleCells().length > 0 && row.getVisibleCells()[0]?.column.id === '__od_table_selection'\" class=\"od-table__cell od-table__cell--selection\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"od-table__checkbox\"\r\n :data-testid=\"`od-table-select-${row.id}`\"\r\n :aria-label=\"locale.selectRow((query.page - 1) * query.pageSize + row.index + 1)\"\r\n :checked=\"row.getIsSelected()\"\r\n @change=\"toggleRowSelected(row.id, ($event.target as HTMLInputElement).checked)\"\r\n />\r\n </td>\r\n <td\r\n v-for=\"(cell, cellIndex) in row.getVisibleCells().filter((item) => item.column.id !== '__od_table_selection')\"\r\n :key=\"cell.id\"\r\n class=\"od-table__cell\"\r\n :class=\"[\r\n `od-table__cell--${cell.column.columnDef.meta?.odColumn?.align ?? 'left'}`,\r\n { 'od-table__cell--datetime': cell.column.columnDef.meta?.odColumn?.dataType === 'datetime' },\r\n ]\"\r\n :aria-colindex=\"cellIndex + 2\"\r\n >\r\n <span\r\n v-if=\"cell.column.columnDef.meta?.odColumn?.dataType === 'datetime' && isDatetimeSortable(cell.getValue())\"\r\n class=\"od-table__time\"\r\n tabindex=\"0\"\r\n :title=\"exactDatetime(cell.getValue()) ?? undefined\"\r\n :aria-describedby=\"`od-table-tip-${DESCRIBE_SCOPE}-${cell.column.id}-${row.index}`\"\r\n >\r\n {{ cellText(cell.column.columnDef.meta!.odColumn, cell.getValue()) }}\r\n <span\r\n class=\"od-table__tooltip\"\r\n role=\"tooltip\"\r\n :id=\"`od-table-tip-${DESCRIBE_SCOPE}-${cell.column.id}-${row.index}`\"\r\n >\r\n {{ exactDatetime(cell.getValue()) }}\r\n </span>\r\n </span>\r\n <span v-else>{{ cellText(cell.column.columnDef.meta?.odColumn ?? { field: cell.column.id, title: cell.column.id, dataType: 'text' }, cell.getValue()) }}</span>\r\n </td>\r\n </tr>\r\n <tr v-if=\"showEmpty\">\r\n <td class=\"od-table__state-cell\" :colspan=\"stateColumnCount\">\r\n <div class=\"od-table__state od-table__state--empty\" data-testid=\"od-table-empty\">\r\n {{ locale.empty }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr v-else-if=\"showErrorState\">\r\n <td class=\"od-table__state-cell\" :colspan=\"stateColumnCount\">\r\n <div class=\"od-table__state od-table__state--error\" data-testid=\"od-table-error\" role=\"alert\">\r\n <OdIcon :icon=\"IconAlertCircle\" :size=\"20\" />\r\n <p class=\"od-table__state-detail\">{{ errorMessage }}</p>\r\n <button type=\"button\" class=\"od-table__state-retry\" data-testid=\"od-table-retry\" @click=\"retry(errorStage)\">\r\n <OdIcon :icon=\"IconRefresh\" :size=\"14\" />\r\n {{ locale.retry }}\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <div\r\n v-if=\"showLoading || showRefreshing\"\r\n class=\"od-table__overlay\"\r\n :class=\"{ 'od-table__overlay--dense': showRefreshing && displayRows.length > 0 }\"\r\n data-testid=\"od-table-loading\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n >\r\n <OdIcon :icon=\"IconLoader\" :size=\"18\" class=\"od-table__spinner\" />\r\n <span>{{ locale.loading }}</span>\r\n </div>\r\n </div>\r\n\r\n <div v-if=\"showErrorBanner\" class=\"od-table__banner\" data-testid=\"od-table-error-banner\" role=\"alert\">\r\n <OdIcon :icon=\"IconAlertCircle\" :size=\"16\" />\r\n <span class=\"od-table__state-detail\">{{ errorMessage }}</span>\r\n <button type=\"button\" class=\"od-table__state-retry\" data-testid=\"od-table-retry\" @click=\"retry('data')\">\r\n <OdIcon :icon=\"IconRefresh\" :size=\"14\" />\r\n {{ locale.retry }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"od-table__pagination\" data-testid=\"od-table-pagination\">\r\n <span class=\"od-table__pagination-total\">{{ locale.total(total) }}</span>\r\n <label class=\"od-table__page-size\">\r\n {{ locale.pageSize }}\r\n <select\r\n class=\"od-table__page-size-select\"\r\n data-testid=\"od-table-page-size\"\r\n name=\"od-table-page-size\"\r\n :aria-label=\"locale.pageSize\"\r\n :value=\"query.pageSize\"\r\n @change=\"changePageSize\"\r\n >\r\n <option v-for=\"size in effectivePageSizeOptions\" :key=\"size\" :value=\"size\">{{ locale.perPage(size) }}</option>\r\n </select>\r\n </label>\r\n <nav class=\"od-table__pager\" :aria-label=\"locale.pagination\">\r\n <button\r\n type=\"button\"\r\n class=\"od-table__pager-button\"\r\n data-testid=\"od-table-prev-page\"\r\n :aria-label=\"locale.previousPage\"\r\n :disabled=\"query.page <= 1\"\r\n @click=\"gotoPage(query.page - 1)\"\r\n >\r\n <OdIcon :icon=\"IconChevronLeft\" :size=\"16\" />\r\n </button>\r\n <template v-for=\"item in pageList\" :key=\"item.type === 'page' ? `page-${item.page}` : `ellipsis-${item.key}`\">\r\n <button\r\n v-if=\"item.type === 'page'\"\r\n type=\"button\"\r\n class=\"od-table__pager-button\"\r\n :class=\"{ 'is-current': item.page === query.page }\"\r\n :data-testid=\"`od-table-page-${item.page}`\"\r\n :aria-current=\"item.page === query.page ? 'page' : undefined\"\r\n :aria-label=\"locale.pageNumber(item.page)\"\r\n @click=\"gotoPage(item.page)\"\r\n >\r\n {{ item.page }}\r\n </button>\r\n <span v-else class=\"od-table__pager-ellipsis\" aria-hidden=\"true\">…</span>\r\n </template>\r\n <button\r\n type=\"button\"\r\n class=\"od-table__pager-button\"\r\n data-testid=\"od-table-next-page\"\r\n :aria-label=\"locale.nextPage\"\r\n :disabled=\"query.page >= pageCount\"\r\n @click=\"gotoPage(query.page + 1)\"\r\n >\r\n <OdIcon :icon=\"IconChevronRight\" :size=\"16\" />\r\n </button>\r\n </nav>\r\n </div>\r\n </template>\r\n\r\n <div\r\n v-if=\"headerPopover.isOpen.value && headerPopoverState\"\r\n :ref=\"(element) => headerPopover.registerPanel(element as HTMLElement | null)\"\r\n class=\"od-table__popover\"\r\n role=\"dialog\"\r\n :aria-label=\"headerPopoverState.kind === 'search' ? `${locale.search} ${columnByField(headerPopoverState.field)?.title ?? ''}` : `${locale.filter} ${columnByField(headerPopoverState.field)?.title ?? ''}`\"\r\n :style=\"{ top: `${headerPopover.placement.value.top}px`, left: `${headerPopover.placement.value.left}px` }\"\r\n @keydown=\"headerPopover.onKeydown\"\r\n >\r\n <template v-if=\"headerPopoverState.kind === 'search'\">\r\n <input\r\n v-model=\"searchDraft\"\r\n type=\"text\"\r\n class=\"od-table__search-input\"\r\n :data-testid=\"`od-table-search-${headerPopoverState.field}`\"\r\n :aria-label=\"`${locale.search} ${columnByField(headerPopoverState.field)?.title ?? ''}`\"\r\n @input=\"scheduleSearchCommit\"\r\n @keydown.enter.prevent=\"commitSearchNow\"\r\n />\r\n </template>\r\n <template v-else-if=\"headerPopoverColumn()?.options?.length\">\r\n <ul class=\"od-table__filter-list\">\r\n <li v-for=\"option in headerPopoverColumn()?.options\" :key=\"option.value\" class=\"od-table__filter-item\">\r\n <label class=\"od-table__column-label\">\r\n <input\r\n type=\"checkbox\"\r\n :data-testid=\"`od-table-filter-option-${headerPopoverState.field}-${option.value}`\"\r\n :disabled=\"option.disabled\"\r\n :checked=\"filterDraft.includes(option.value)\"\r\n @change=\"toggleFilterDraft(option.value, ($event.target as HTMLInputElement).checked)\"\r\n />\r\n <span>{{ option.label }}</span>\r\n </label>\r\n </li>\r\n </ul>\r\n <div class=\"od-table__filter-actions\">\r\n <button\r\n type=\"button\"\r\n class=\"od-table__link-button\"\r\n :data-testid=\"`od-table-filter-reset-${headerPopoverState.field}`\"\r\n @click=\"resetFilter\"\r\n >\r\n {{ locale.reset }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"od-table__filter-confirm\"\r\n :data-testid=\"`od-table-filter-confirm-${headerPopoverState.field}`\"\r\n @click=\"confirmFilter\"\r\n >\r\n {{ locale.confirm }}\r\n </button>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.od-table {\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--od-space-3);\r\n min-width: 0;\r\n color: var(--od-color-text-primary);\r\n font-family: var(--od-font-family);\r\n font-size: var(--od-font-size-md);\r\n line-height: var(--od-line-height-normal);\r\n}\r\n\r\n.od-table * {\r\n box-sizing: border-box;\r\n}\r\n\r\n/* ------------------------------- toolbar ------------------------------- */\r\n\r\n.od-table__toolbar {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--od-space-3);\r\n min-height: 32px;\r\n}\r\n\r\n.od-table__toolbar-meta {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--od-space-3);\r\n min-width: 0;\r\n}\r\n\r\n.od-table__total {\r\n color: var(--od-color-text-secondary);\r\n font-size: var(--od-font-size-sm);\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__selected {\r\n color: var(--od-color-primary);\r\n font-size: var(--od-font-size-sm);\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__toolbar-button {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--od-space-1);\r\n padding: var(--od-space-1) var(--od-space-2);\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-text-primary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n transition: border-color var(--od-transition-fast), color var(--od-transition-fast);\r\n}\r\n\r\n.od-table__toolbar-button:hover {\r\n border-color: var(--od-color-primary-hover);\r\n color: var(--od-color-primary-hover);\r\n}\r\n\r\n/* ------------------------------- viewport ------------------------------ */\r\n\r\n.od-table__viewport {\r\n position: relative;\r\n min-height: 120px;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-md);\r\n background: var(--od-color-bg-primary);\r\n}\r\n\r\n.od-table--bordered .od-table__viewport {\r\n border-color: var(--od-color-border);\r\n}\r\n\r\n.od-table:not(.od-table--bordered) .od-table__viewport {\r\n border-bottom: 1px solid var(--od-color-border-light);\r\n}\r\n\r\n.od-table__table {\r\n table-layout: fixed;\r\n border-collapse: collapse;\r\n font-size: var(--od-font-size-md);\r\n}\r\n\r\n.od-table__head-row {\r\n background: var(--od-color-bg-tertiary);\r\n}\r\n\r\n.od-table__head {\r\n position: relative;\r\n height: 44px;\r\n padding: 0;\r\n border-bottom: 1px solid var(--od-color-border);\r\n text-align: left;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table--bordered .od-table__head:not(:last-child) {\r\n border-right: 1px solid var(--od-color-border-light);\r\n}\r\n\r\n.od-table--compact .od-table__head {\r\n height: 36px;\r\n}\r\n\r\n.od-table__head--selection {\r\n width: 48px;\r\n}\r\n\r\n.od-table__head-inner {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--od-space-1);\r\n padding: 0 var(--od-space-3);\r\n}\r\n\r\n.od-table--compact .od-table__head-inner {\r\n padding: 0 var(--od-space-2);\r\n}\r\n\r\n.od-table__head-inner--center {\r\n justify-content: center;\r\n}\r\n\r\n.od-table__head-inner--right {\r\n justify-content: flex-end;\r\n}\r\n\r\n.od-table__head-inner--selection {\r\n justify-content: center;\r\n padding: 0;\r\n}\r\n\r\n.od-table__head-title {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__sort {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--od-space-1);\r\n padding: var(--od-space-1) 0;\r\n border: 0;\r\n background: transparent;\r\n color: inherit;\r\n font: inherit;\r\n font-weight: 600;\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__sort:hover .od-table__sort-title,\r\n.od-table__sort:hover .od-table__sort-icon {\r\n color: var(--od-color-primary-hover);\r\n}\r\n\r\n.od-table__sort.is-active {\r\n color: var(--od-color-primary);\r\n}\r\n\r\n.od-table__sort-title {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__sort-priority {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 16px;\r\n height: 16px;\r\n padding: 0 2px;\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-primary-light);\r\n color: var(--od-color-primary-active);\r\n font-size: var(--od-font-size-xs);\r\n font-weight: 600;\r\n}\r\n\r\n.od-table__head-actions {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 2px;\r\n margin-left: auto;\r\n}\r\n\r\n.od-table__icon-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n border: 0;\r\n border-radius: var(--od-radius-sm);\r\n background: transparent;\r\n color: var(--od-color-text-tertiary);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__icon-button:hover {\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-text-secondary);\r\n}\r\n\r\n.od-table__icon-button.is-active {\r\n color: var(--od-color-primary);\r\n}\r\n\r\n.od-table__resize-handle {\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n width: 6px;\r\n height: 100%;\r\n margin-left: -3px;\r\n background-clip: content-box;\r\n background-color: transparent;\r\n cursor: col-resize;\r\n touch-action: none;\r\n user-select: none;\r\n}\r\n\r\n.od-table__resize-handle::after {\r\n content: '';\r\n display: block;\r\n width: 2px;\r\n height: 100%;\r\n margin: 0 auto;\r\n background-color: transparent;\r\n transition: background-color var(--od-transition-fast);\r\n}\r\n\r\n.od-table__resize-handle:hover::after,\r\n.od-table__resize-handle.is-adjusting::after {\r\n background-color: var(--od-color-primary);\r\n}\r\n\r\n/* -------------------------------- rows --------------------------------- */\r\n\r\n.od-table__row {\r\n border-bottom: 1px solid var(--od-color-border-light);\r\n transition: background-color var(--od-transition-fast);\r\n}\r\n\r\n.od-table__row:hover {\r\n background: var(--od-color-bg-secondary);\r\n}\r\n\r\n.od-table__row:last-child {\r\n border-bottom: 0;\r\n}\r\n\r\n.od-table--striped .od-table__row:nth-child(even) {\r\n background: var(--od-color-bg-tertiary);\r\n}\r\n\r\n.od-table--bordered .od-table__row .od-table__cell:not(:last-child) {\r\n border-right: 1px solid var(--od-color-border-light);\r\n}\r\n\r\n.od-table__cell {\r\n height: 44px;\r\n padding: var(--od-space-2) var(--od-space-3);\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n color: var(--od-color-text-primary);\r\n}\r\n\r\n.od-table--compact .od-table__cell {\r\n height: 34px;\r\n padding: var(--od-space-1) var(--od-space-2);\r\n}\r\n\r\n.od-table__cell--center {\r\n text-align: center;\r\n}\r\n\r\n.od-table__cell--right {\r\n text-align: right;\r\n}\r\n\r\n.od-table__cell--datetime {\r\n overflow: visible;\r\n}\r\n\r\n.od-table__cell--selection {\r\n text-align: center;\r\n padding: 0;\r\n}\r\n\r\n.od-table__checkbox {\r\n width: 16px;\r\n height: 16px;\r\n accent-color: var(--od-color-primary);\r\n cursor: pointer;\r\n}\r\n\r\n/* ------------------------------- datetime ------------------------------ */\r\n\r\n.od-table__time {\r\n position: relative;\r\n display: inline-block;\r\n cursor: default;\r\n}\r\n\r\n.od-table__tooltip {\r\n position: absolute;\r\n bottom: calc(100% + 6px);\r\n left: 50%;\r\n z-index: var(--od-z-dropdown);\r\n padding: var(--od-space-1) var(--od-space-2);\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-text-primary);\r\n box-shadow: var(--od-shadow);\r\n color: var(--od-color-bg-primary);\r\n font-size: var(--od-font-size-xs);\r\n white-space: nowrap;\r\n opacity: 0;\r\n pointer-events: none;\r\n transform: translateX(-50%);\r\n transition: opacity var(--od-transition-fast);\r\n}\r\n\r\n.od-table__time:hover .od-table__tooltip,\r\n.od-table__time:focus-visible .od-table__tooltip {\r\n opacity: 1;\r\n}\r\n\r\n/* ------------------------------- states -------------------------------- */\r\n\r\n.od-table__state-cell {\r\n padding: 0 !important;\r\n border-right: 0 !important;\r\n}\r\n\r\n.od-table__state {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: var(--od-space-2);\r\n min-height: 160px;\r\n padding: var(--od-space-6);\r\n color: var(--od-color-text-tertiary);\r\n}\r\n\r\n.od-table__state--error {\r\n flex-direction: column;\r\n color: var(--od-color-error);\r\n}\r\n\r\n.od-table__state-title {\r\n margin: 0;\r\n font-weight: 600;\r\n}\r\n\r\n.od-table__state-detail {\r\n margin: 0;\r\n color: var(--od-color-text-secondary);\r\n font-size: var(--od-font-size-sm);\r\n text-align: center;\r\n word-break: break-all;\r\n}\r\n\r\n.od-table__state--root .od-table__state-detail {\r\n color: var(--od-color-error);\r\n}\r\n\r\n.od-table__state-retry {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--od-space-1);\r\n padding: var(--od-space-1) var(--od-space-3);\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-primary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__state-retry:hover {\r\n border-color: var(--od-color-primary-hover);\r\n}\r\n\r\n.od-table__overlay {\r\n position: absolute;\r\n inset: 0;\r\n z-index: var(--od-z-dropdown);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: var(--od-space-2);\r\n background: color-mix(in srgb, var(--od-color-bg-primary) 78%, transparent);\r\n color: var(--od-color-text-secondary);\r\n}\r\n\r\n.od-table__banner {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--od-space-2);\r\n padding: var(--od-space-2) var(--od-space-3);\r\n border: 1px solid var(--od-color-error);\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-error);\r\n}\r\n\r\n.od-table__banner .od-table__state-retry {\r\n margin-left: auto;\r\n}\r\n\r\n.od-table__spinner {\r\n animation: od-table-spin 1s linear infinite;\r\n}\r\n\r\n@keyframes od-table-spin {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n .od-table__spinner {\r\n animation: none;\r\n }\r\n}\r\n\r\n/* ------------------------------ pagination ----------------------------- */\r\n\r\n.od-table__pagination {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--od-space-3);\r\n flex-wrap: wrap;\r\n}\r\n\r\n.od-table__pagination-total {\r\n color: var(--od-color-text-secondary);\r\n font-size: var(--od-font-size-sm);\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__page-size {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--od-space-2);\r\n color: var(--od-color-text-secondary);\r\n font-size: var(--od-font-size-sm);\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__page-size-select {\r\n padding: var(--od-space-1) var(--od-space-2);\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-text-primary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__pager {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--od-space-1);\r\n}\r\n\r\n.od-table__pager-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 28px;\r\n height: 28px;\r\n padding: 0 var(--od-space-1);\r\n border: 1px solid transparent;\r\n border-radius: var(--od-radius-sm);\r\n background: transparent;\r\n color: var(--od-color-text-secondary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__pager-button:hover:not(:disabled):not(.is-current) {\r\n border-color: var(--od-color-border);\r\n color: var(--od-color-primary-hover);\r\n}\r\n\r\n.od-table__pager-button.is-current {\r\n border-color: var(--od-color-primary);\r\n background: var(--od-color-primary-light);\r\n color: var(--od-color-primary-active);\r\n font-weight: 600;\r\n}\r\n\r\n.od-table__pager-button:disabled {\r\n color: var(--od-color-text-disabled);\r\n cursor: not-allowed;\r\n}\r\n\r\n.od-table__pager-ellipsis {\r\n min-width: 20px;\r\n text-align: center;\r\n color: var(--od-color-text-tertiary);\r\n}\r\n\r\n/* ------------------------------- popovers ------------------------------ */\r\n\r\n.od-table__popover {\r\n position: fixed;\r\n z-index: var(--od-z-dropdown);\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--od-space-2);\r\n padding: var(--od-space-3);\r\n border: 1px solid var(--od-color-border-light);\r\n border-radius: var(--od-radius-md);\r\n background: var(--od-color-bg-primary);\r\n box-shadow: var(--od-shadow-dialog);\r\n}\r\n\r\n.od-table__search-input {\r\n padding: var(--od-space-1) var(--od-space-2);\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-sm);\r\n font-size: var(--od-font-size-sm);\r\n}\r\n\r\n.od-table__search-input:focus-visible {\r\n outline: none;\r\n box-shadow: var(--od-focus-ring);\r\n}\r\n\r\n.od-table__filter-list,\r\n.od-table__column-list {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--od-space-1);\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n max-height: 264px;\r\n overflow-y: auto;\r\n}\r\n\r\n.od-table__filter-item,\r\n.od-table__column-item {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--od-space-2);\r\n}\r\n\r\n.od-table__column-label {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--od-space-2);\r\n flex: 1;\r\n min-width: 0;\r\n font-size: var(--od-font-size-sm);\r\n font-weight: 400;\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__column-label span {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__condition-dot {\r\n width: 6px;\r\n height: 6px;\r\n flex: none;\r\n border-radius: 50%;\r\n background: var(--od-color-primary);\r\n}\r\n\r\n.od-table__filter-actions,\r\n.od-table__column-actions {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--od-space-2);\r\n padding-top: var(--od-space-2);\r\n border-top: 1px solid var(--od-color-border-light);\r\n}\r\n\r\n.od-table__link-button {\r\n padding: 0;\r\n border: 0;\r\n background: transparent;\r\n color: var(--od-color-primary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__link-button:hover {\r\n color: var(--od-color-primary-hover);\r\n}\r\n\r\n.od-table__link-button:disabled {\r\n color: var(--od-color-text-disabled);\r\n cursor: not-allowed;\r\n}\r\n\r\n.od-table__filter-confirm {\r\n padding: var(--od-space-1) var(--od-space-3);\r\n border: 0;\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-primary);\r\n color: var(--od-color-bg-primary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__filter-confirm:hover {\r\n background: var(--od-color-primary-hover);\r\n}\r\n\r\n.od-table__hint {\r\n margin: 0;\r\n min-height: 18px;\r\n color: var(--od-color-warning);\r\n font-size: var(--od-font-size-xs);\r\n}\r\n\r\n/* ------------------------------- focus --------------------------------- */\r\n\r\n.od-table__sort:focus-visible,\r\n.od-table__icon-button:focus-visible,\r\n.od-table__toolbar-button:focus-visible,\r\n.od-table__pager-button:focus-visible,\r\n.od-table__state-retry:focus-visible,\r\n.od-table__link-button:focus-visible,\r\n.od-table__filter-confirm:focus-visible,\r\n.od-table__checkbox:focus-visible,\r\n.od-table__resize-handle:focus-visible,\r\n.od-table__search-input:focus-visible,\r\n.od-table__page-size-select:focus-visible {\r\n outline: none;\r\n box-shadow: var(--od-focus-ring);\r\n}\r\n</style>\r\n","import type { App } from 'vue'\r\nimport './theme/index.css'\r\nimport OdButton from './components/OdButton.vue'\r\nimport OdIcon from './components/OdIcon.vue'\nimport OdTable from './components/OdTable.vue'\n\nexport { OdButton, OdIcon, OdTable }\nexport { OdTableConfigError } from './components/OdTable.types'\nexport type { OdButtonVariant, OdSize } from './components/OdButton.vue'\r\nexport type {\r\n OdTableColumn,\r\n OdTableConfigErrorCode,\r\n OdTableDataType,\r\n OdTableEvents,\r\n OdTableExpose,\r\n OdTableFilter,\r\n OdTableInitialQuery,\r\n OdTableLocale,\r\n OdTableOption,\r\n OdTablePaginationConfig,\r\n OdTableProps,\r\n OdTableQuery,\r\n OdTableRequest,\r\n OdTableResult,\r\n OdTableRowKey,\r\n OdTableSchema,\r\n OdTableSearch,\r\n OdTableSorting,\r\n OdTableLoadData,\r\n OdTableLoadSchema,\r\n} from './components/OdTable.types'\r\n\r\nexport const OnedotUI = {\r\n install(app: App) {\r\n app.component('OdButton', OdButton)\r\n app.component('OdIcon', OdIcon)\n app.component('OdTable', OdTable)\r\n },\r\n}\r\n"],"names":["props","__props","emit","__emit","classes","computed","handleClick","event","_createElementBlock","_mergeProps","_ctx","$slots","_openBlock","_hoisted_2","_renderSlot","_hoisted_3","_createElementVNode","_hoisted_4","iconStyle","_createBlock","_resolveDynamicComponent","trueFn","$PROXY","$SOURCES","propTraps","_","property","receiver","resolveSource","s","mergeProxy","sources","flattenedSources","source","i","v","keys","flatMerge","result","key","value","observerToCallback","observerOrNext","_a","refToReadonlyAtom","watch","refToWritableAtom","updater","vueReactivity","subscriptions","subscription","fn","_options","shallowRef","functionalUpdate","input","cloneState","proto","copy","makeObjectMap","copyInstancePropertiesWithoutMemos","target","targetRecord","hasOwn","obj","makeStateUpdater","instance","old","isPlainContainer","getEnumerableOwnKeys","MAX_STATE_COMPARE_DEPTH","stateSlicesEqual","a","b","stateSlicesEqualAtDepth","depth","keysA","keysB","recordA","recordB","setStateSlice","isEqual","onChangeKey","onChange","current","next","flattenBy","arr","getChildren","flat","recurse","subArr","item","children","memo","memoDeps","onAfterCompare","onAfterUpdate","onBeforeCompare","onBeforeUpdate","deps","depArgs","newDeps","depsChanged","skipFirstRun","hasRun","pad","str","num","tableMemo","feature","fnName","objectId","table","memoOptions","startCalcTime","endCalcTime","runCount","debug","debugAll","parentName","getFunctionNameInfo","debugByParent","debugByFeature","logTime","time","runType","onAfterUpdateHandler","schedule","untrack","debugOptions","staticFnName","splitBy","fnKey","assignTableAPIs","apis","assignPrototypeAPIs","prototype","memoKey","args","self","callMemoOrStaticFn","staticFn","cell_getValue","cell","cell_renderValue","cell_getContext","coreCellsFeature","getHeaderPrototype","features","_b","constructHeader","column","options","headerPrototype","header","initFns","getDefaultColumnPinningState","table_getStartHeaderGroups","allColumns","leafColumnsById","start","orderedLeafColumns","column_getIsVisible","buildHeaderGroups","table_getEndHeaderGroups","end","table_getCenterHeaderGroups","leafColumns","table_getVisibleLeafColumns","startAndEnd","table_getStartLeafColumns","table_getEndLeafColumns","table_getCenterLeafColumns","d","table_getStartVisibleLeafColumns","table_getEndVisibleLeafColumns","table_getCenterVisibleLeafColumns","table_getPinnedVisibleLeafColumns","position","getDefaultColumnVisibilityState","column_toggleVisibility","visible","column_getCanHide","table_setColumnVisibility","nextVisible","leafColumn","columnVisibility","childColumns","childColumn","column_getToggleVisibilityHandler","e","row_getVisibleCells","row","allCells","visibleCells","visibleCellsByColumnId","row_getVisibleCellsByColumnId","startCells","endCells","centerCells","id","table_getVisibleFlatColumns","table_resetColumnVisibility","defaultState","table_toggleAllColumnsVisible","table_getIsAllColumnsVisible","visibility","table_getIsSomeColumnsVisible","table_getToggleAllColumnsVisibilityHandler","getMaxHeaderDepth","columns","maxDepth","formatHeaderGroupId","headerFamily","formatHeaderId","columnId","childHeaderId","countPendingHeadersForColumn","headers","count","constructHeaderGroup","headersToGroup","headerGroups","headerGroupInitFns","headerGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","updateHeaderSpans","colSpan","j","child","rowSpan","chainChild","columnsToGroup","bottomHeaders","getColumnPrototype","constructColumn","columnDef","parent","resolvedColumnDef","accessorKey","accessorKeyString","accessorFn","originalRow","columnPrototype","table_getOrderColumnsFn","columnOrder","orderedColumns","remaining","orderColumns","grouping","groupedColumnMode","nonGroupingColumns","col","groupingColumns","column_getFlatColumns","column_getLeafColumns","table_getDefaultColumnDef","constructColumns","columnDefs","groupingColumnDef","table_getAllColumns","table_getAllFlatColumns","table_getAllFlatColumnsById","flatColumns","table_getAllLeafColumns","c","table_getAllLeafColumnsById","table_getColumn","coreColumnsFeature","collectLeafHeaders","leafHeaders","header_getLeafHeaders","header_getContext","table_getHeaderGroups","leftColumns","rightColumns","centerColumns","table_getFooterGroups","table_getFlatHeaders","table_getLeafHeaders","topHeaders","coreHeadersFeature","_c","_d","getRowPrototype","constructRow","original","rowIndex","subRows","parentId","rowPrototype","getDefaultCellSelectionState","table_resetCellSelection","table_autoResetCellSelection","table_autoResetExpanded","table_resetExpanded","initialExpanded","defaultPageIndex","table_autoResetPageIndex","table_resetPageIndex","table_setPagination","table_setPageIndex","pageIndex","maxPageIndex","table_setSorting","table_resetSorting","table_autoResetSorting","createCoreRowModel","_createCoreRowModel","accessRows","rowModel","originalRows","parentRow","rows","data","table_getCoreRowModel","table_getPreFilteredRowModel","table_getFilteredRowModel","table_getPreGroupedRowModel","table_getGroupedRowModel","table_getPreSortedRowModel","table_getSortedRowModel","table_getPreExpandedRowModel","table_getExpandedRowModel","table_getPrePaginatedRowModel","table_getPaginatedRowModel","table_getRowModel","coreRowModelsFeature","getCellPrototype","constructCell","cellPrototype","row_getDisplayIndex","displayIndex","table_getRowsInDisplayOrder","displayRows","handleRow","row_getValue","row_getUniqueValues","row_renderValue","row_getLeafRows","table_getMaxSubRowDepth","row_getParentRow","row_getParentRows","parentRows","currentRow","row_getAllCells","cache","cells","row_getAllCellsByColumnId","table_getRowId","index","table_getRow","rowId","searchAll","coreRowsFeature","table_syncExternalStateToBaseAtoms","capturedState","compare","currentState","externalState","state","baseAtom","rawExternalState","table_publishExternalState","table_reset","snap","table_mergeOptions","newOptions","atoms","initialState","mergedOptions","descriptors","table_setOptions","coreTablesFeature","coreFeatures","atomToStore","atom","store","shallow","objA","objB","k","getOwnKeys","getInitialTableState","constructTable","tableOptions","_reactivity","aggregationFns","_columnMeta","coreRowModel","expandedRowModel","facetedMinMaxValues","facetedRowModel","facetedUniqueValues","filterFns","_filterMeta","filteredRowModel","groupedRowModel","paginatedRowModel","sortFns","sortedRowModel","_tableMeta","featuresList","atomKey","_atom","wrappedAtom","syncExternal","syncAtomToWrappedSub","syncWrappedToAtomSub","stateKeys","externalAtom","reactiveState","controlledState","controlledValue","snapshot","rowModels","factory","states","getDefaultColumnSizingState","getDefaultColumnSizingColumnDef","column_getSize","defaultSizes","columnSizing","columnSize","buildColumnOffsets","starts","afters","sizes","size","after","table_getColumnOffsets","toOffsetsKey","column_getStart","column_getAfter","column_resetSize","table_setColumnSizing","rest","columnIds","sumHeaderSize","sum","header_getSize","header_getStart","prevSiblingHeader","table_resetColumnSizing","table_getTotalSize","table_getStartTotalSize","table_getCenterTotalSize","table_getEndTotalSize","getDefaultColumnResizingState","column_getCanResize","column_getIsResizing","header_getResizeHandler","_contextDocument","canResize","isTouchStartEvent","startSize","columnSizingStart","leafHeader","clientX","newColumnSizing","updateOffset","eventType","clientXPos","isCommit","table_setColumnResizing","deltaDirection","deltaOffset","deltaPercentage","entry","headerSize","moveRafId","hasPendingMove","latestMoveX","flushMove","onMove","onEnd","contextDocument","mouseEvents","touchEvents","touchEvent","removeTouchEvents","passiveIfSupported","passiveEventSupported","table_resetHeaderSizeInfo","passiveSupported","supported","noop","columnResizingFeature","columnSizingFeature","_e","columnVisibilityFeature","getDefaultRowSelectionState","table_setRowSelection","table_resetRowSelection","table_toggleAllRowsSelected","opts","table_getIsAllRowsSelected","rowSelection","preGroupedFlatRows","subtreeCache","isRowSelectableInSelectAll","row_getCanSelect","table_toggleAllPageRowsSelected","resolvedValue","table_getIsAllPageRowsSelected","mutateRowIsSelected","table_getPreSelectedRowModel","table_getSelectedRowModel","table_getIsSomeRowsSelected","selectRowsFn","table_getFilteredSelectedRowModel","table_getGroupedSelectedRowModel","table_getSelectedRowIds","isAllRowsSelected","isRowSelected","paginationFlatRows","sawSelectableRow","table_getIsSomePageRowsSelected","row_getIsSelected","row_getIsSomeSelected","table_getToggleAllRowsSelectedHandler","table_getToggleAllPageRowsSelectedHandler","row_toggleSelected","isSelected","row_getCanMultiSelect","pruneAncestorRowIds","isSubRowSelected","row_getIsAllSubRowsSelected","row_getCanSelectSubRows","row_getToggleSelectedHandler","canSelect","checked","anchorId","selectRowRange","includeChildren","anchorRow","anchorIndex","anchorAtIndex","rowAtIndex","rangeRow","respectCanSelectOnDeselect","r","cached","rowsById","visited","selectable","currentId","known","selectRowsRecursively","selectedFlatRows","selectedRowsById","newSubRows","cloned","newSelectedFlatRows","newSelectedRowsById","someSelected","allChildrenSelected","someSelectable","subRow","subRowChildrenSelected","rowSelectionFeature","rangeEvent","getOptionsWithReactiveValues","resolvedOptions","unref","getReactiveOptionDeps","useTable","syncTableOptions","prev","reactivity","defaultOptions","coreTable","getCurrentScope","onScopeDispose","controlledAtoms","controlledValues","defaultAttributes","createVueComponent","type","iconName","iconNamePascal","iconNode","color","stroke","title","attrs","slots","h","IconAlertCircle","IconArrowsSort","IconChevronLeft","IconChevronRight","IconFilter","IconListCheck","IconLoader","IconRefresh","IconSearch","IconSortAscending","IconSortDescending","FOCUSABLE_SELECTOR","focusableIn","root","element","useOdTablePopover","onClosed","isOpen","ref","placement","panel","trigger","align","wantedWidth","updatePlacement","rect","margin","width","viewportWidth","left","onWindowResize","onDocumentPointerDown","close","open","nextTick","shouldRestore","registerPanel","onKeydown","focusable","first","last","active","onBeforeUnmount","readonly","OD_TABLE_NULL_TEXT","UTC8_OFFSET_MS","MINUTE","HOUR","DAY","MONTH","YEAR","parseOdTableNumber","parsed","parseOdTableBoolean","parseOdTableDatetime","formatOdTableExactDatetime","timestamp","shifted","formatOdTableRelativeTime","locale","now","diff","formatNumberCell","maximumFractionDigits","formatBooleanCell","labels","formatEnumCell","raw","option","formatOdTableCell","context","odTableExactDatetimeOrNull","OD_TABLE_DEFAULT_PAGE_SIZE","OD_TABLE_DEFAULT_PAGE_SIZE_OPTIONS","createOdTableQuery","pageSize","isPositiveInt","normalizeOdTableQuery","query","searches","searchFields","filters","filterFields","values","sorting","sortingFields","odTableQueriesEqual","mergeOdTableInitialQuery","base","initial","merged","nextSortDirection","direction","odTableQueryReducer","action","trimmed","existing","nextDirection","page","cleanupOdTableQueryForColumns","searchable","filterable","sortable","encodeOdTableRowKey","decodeOdTableRowKey","encoded","separator","numeric","resolveEnumLabel","resolveSortValue","compareValues","runOdTableLocalQuery","columnByField","normalized","filtered","record","search","filter","entries","sort","right","compared","total","pageCount","OD_TABLE_REQUEST_ERROR_CODES","OdTableRequestError","code","message","details","__publicField","isAbortError","error","abortedError","cause","normalizeHeaders","method","bodyForFetch","body","fetchOdTableRequest","url","response","text","executeOdTableRequest","request","createOdTableRequestCoordinator","disposed","nextSequence","controllers","sequences","cancel","stage","stages","currentStage","isCurrent","sequence","operation","controller","OD_TABLE_DEFAULT_LOCALE","OdTableConfigError","isProvided","fail","isPositiveInteger","isRowKey","validateOdTableColumns","fields","field","flag","validateOdTablePagination","pagination","validateOdTableSchema","schema","seen","validateOdTableInitialQuery","validateOdTableInitialQueryForColumns","byField","validateOdTableRows","rowKey","identity","validateOdTableSourceMode","local","functionRemote","modes","isNonNegativeInteger","validateOdTableResult","payload","SELECTION_COLUMN_ID","DEFAULT_COLUMN_WIDTH","MIN_COLUMN_WIDTH","SEARCH_DEBOUNCE_MS","KEYBOARD_RESIZE_STEP","odTableFeatures","DESCRIBE_SCOPE","getCurrentInstance","sourceMode","configError","schemaStatus","dataStatus","schemaErrorValue","dataErrorValue","columnsResolved","rowKeyField","paginationConfig","selectedKeysInternal","columnWidths","suppressQueryWatch","configErrorEmitted","schemaLoadedOnce","preserveQueryOnNextSchema","initialQuerySnapshot","mountedNow","relativeNow","coordinator","asConfigError","describeError","handleConfigError","configErrorValue","resetColumnVisibility","withDefaultPagination","defaultPageSize","setQuerySilently","initialize","applySelection","clearSearchDebounce","closeHeaderPopover","columnSettings","mode","cleaned","runLocalCompute","loadSchemaFlow","outcome","signal","applySchema","nextSchema","preserved","requestData","currentQuery","hadRows","validated","pruneSelectionToRows","available","pruned","refresh","__expose","retry","commitQuery","dispatchQuery","recoverLocalConfig","tanstackColumns","defs","tanstackData","rowSelectionMap","map","minColumnWidths","handleColumnSizingChange","clamped","tableRows","tableWidth","isResizing","wasResizing","emitColumnWidth","currentColumnSize","selectedIdSet","emitEvents","rowById","matched","toggleRowSelected","allPageRowsSelected","somePageRowsSelected","toggleAllPageRows","pageIds","toggleSort","additive","searchDraft","filterDraft","headerPopoverState","headerPopover","commitSearchFromDraft","searchDebounceTimer","currentSearchValue","currentFilterValues","toggleHeaderPopover","kind","restoreFocus","scheduleSearchCommit","commitSearchNow","toggleFilterDraft","headerPopoverColumn","confirmFilter","resetFilter","hasSearchCondition","hasFilterCondition","sortDirectionOf","sortPriorityOf","columnSettingsHint","activeConditionFields","visibleBusinessColumnCount","toggleColumnVisible","restoreDefaultVisibility","clearColumnConditions","clearAllColumnConditions","keyboardResize","minWidthOf","setColumnWidth","startKeyboardResize","keyboardResizeStep","delta","cancelKeyboardResize","session","effectivePageSizeOptions","pageList","items","windowStart","windowEnd","gotoPage","changePageSize","showLoading","showRefreshing","showEmpty","showErrorState","showErrorBanner","errorStage","errorMessage","stateColumnCount","rootClasses","tableAriaLabel","cellText","exactDatetime","isDatetimeSortable","$attrs","_hoisted_1","_createVNode","OdIcon","_unref","_toDisplayString","_Fragment","_hoisted_5","_hoisted_6","_hoisted_7","_cache","$event","_normalizeStyle","_hoisted_10","_renderList","_hoisted_11","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_19","headerIndex","_normalizeClass","_hoisted_21","_f","_hoisted_24","_h","_g","_hoisted_25","_hoisted_26","_j","_i","_k","_hoisted_27","_l","_m","_n","_p","_o","_hoisted_32","cellIndex","_createTextVNode","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_40","_hoisted_41","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_51","_hoisted_54","_hoisted_55","_hoisted_59","_hoisted_60","_hoisted_62","_hoisted_63","_hoisted_64","OnedotUI","app","OdButton","OdTable"],"mappings":"+vBAQA,MAAMA,EAAQC,EAmBRC,EAAOC,EAIPC,EAAUC,EAAAA,SAAS,IAAM,CAC7B,YACA,cAAcL,EAAM,OAAO,GAC3B,cAAcA,EAAM,IAAI,GACxB,CACE,YAAaA,EAAM,OACnB,aAAcA,EAAM,OAAA,CACtB,CACD,EAED,SAASM,EAAYC,EAAmB,CACtC,GAAIP,EAAM,UAAYA,EAAM,QAAS,CACnCO,EAAM,eAAA,EACN,MACF,CACAL,EAAK,QAASK,CAAK,CACrB,6BAIEC,EAAAA,mBAYS,SAZTC,EAAAA,WAYSC,EAAA,OAXO,CACb,MAAON,EAAA,MACP,KAAMJ,EAAM,WACZ,SAAUA,EAAM,UAAYA,EAAM,QAClC,gBAAeA,EAAM,UAAYA,EAAM,SAAW,OAClD,YAAWA,EAAM,SAAW,OAC5B,QAAOM,CAAA,IAEIK,EAAAA,OAAO,MAAI,CAAKX,EAAM,SAAlCY,EAAAA,YAAAJ,EAAAA,mBAAiH,OAAjHK,GAAiH,CAA3BC,EAAAA,WAAoBJ,EAAA,OAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gCAC9FV,EAAM,SAAlBY,EAAAA,UAAA,EAAAJ,EAAAA,mBAA2E,OAA3EO,EAA2E,+BAC3EC,EAAAA,mBAA8C,OAA9CC,GAA8C,CAAfH,EAAAA,WAAQJ,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,+SCxD3C,MAAMV,EAAQC,EAcRiB,EAAYb,EAAAA,SAAS,KAAO,CAChC,MAAO,OAAOL,EAAM,MAAS,SAAW,GAAGA,EAAM,IAAI,KAAOA,EAAM,KAClE,OAAQ,OAAOA,EAAM,MAAS,SAAW,GAAGA,EAAM,IAAI,KAAOA,EAAM,KACnE,MAAOA,EAAM,KAAA,EACb,8BAIAQ,EAAAA,mBAeO,OAAA,CAdL,MAAM,UACL,uBAAOU,EAAA,KAAS,EAChB,cAAalB,EAAM,UAAY,OAAS,GACxC,aAAYA,EAAM,UAClB,KAAMA,EAAM,gBAAoB,MAAA,kBAEjCmB,EAAAA,YAOEC,EAAAA,wBANKpB,EAAM,IAAI,EAAA,CACd,KAAMA,EAAM,KACZ,OAAQA,EAAM,OACd,MAAOA,EAAM,MACd,cAAY,OACZ,UAAU,OAAA,iDCxChB,SAASqB,IAAS,CACjB,MAAO,EACR,CACA,MAAMC,GAAS,OAAO,aAAa,EAC7BC,GAAW,OAAO,qBAAqB,EACvCC,GAAY,CACjB,IAAIC,EAAGC,EAAUC,EAAU,CAC1B,OAAID,IAAaJ,GAAeK,EAC5BD,IAAaH,GAAiBE,EAAE,QAC7BA,EAAE,IAAIC,CAAQ,CACtB,EACA,IAAID,EAAGC,EAAU,CAChB,OAAOD,EAAE,IAAIC,CAAQ,CACtB,EACA,IAAKL,GACL,eAAgBA,GAChB,yBAAyBI,EAAGC,EAAU,CACrC,MAAO,CACN,aAAc,GACd,WAAY,GACZ,KAAM,CACL,OAAOD,EAAE,IAAIC,CAAQ,CACtB,EACA,IAAKL,GACL,eAAgBA,EACnB,CACC,EACA,QAAQI,EAAG,CACV,OAAOA,EAAE,KAAI,CACd,CACD,EACA,SAASG,GAAcC,EAAG,CACzB,OAAOA,GAAK,OAAOA,GAAM,UAAY,UAAWA,EAAIA,EAAE,MAAQA,CAC/D,CACA,SAASC,MAAcC,EAAS,CAC/B,MAAMC,EAAmBD,EAAQ,QAASE,GACrC,OAAOA,GAAW,UAAYA,IAAW,MAAQV,MAAYU,GAAU,MAAM,QAAQA,EAAOV,EAAQ,CAAC,EAAUU,EAAOV,EAAQ,EAC3H,CAACU,CAAM,CACd,EACD,OAAO,IAAI,MAAM,CAChB,QAASD,EACT,IAAIN,EAAU,CACb,QAASQ,EAAIF,EAAiB,OAAS,EAAGE,GAAK,EAAGA,IAAK,CACtD,MAAMC,EAAIP,GAAcI,EAAiBE,CAAC,CAAC,EAAER,CAAQ,EACrD,GAAIS,IAAM,OAAQ,OAAOA,CAC1B,CACD,EACA,IAAIT,EAAU,CACb,QAASQ,EAAIF,EAAiB,OAAS,EAAGE,GAAK,EAAGA,IAAK,GAAIR,KAAYE,GAAcI,EAAiBE,CAAC,CAAC,EAAG,MAAO,GAClH,MAAO,EACR,EACA,MAAO,CACN,MAAME,EAAO,CAAA,EACb,UAAWH,KAAUD,EAAkBI,EAAK,KAAK,GAAG,OAAO,KAAKR,GAAcK,CAAM,CAAC,CAAC,EACtF,MAAO,CAAC,GAAG,MAAM,KAAK,IAAI,IAAIG,CAAI,CAAC,CAAC,CACrC,CACF,EAAIZ,EAAS,CACb,CACA,SAASa,MAAaN,EAAS,CAC9B,MAAMO,EAAS,CAAA,EACf,QAASL,KAAUF,EAElB,GADAE,EAASL,GAAcK,CAAM,EACzB,EAACA,EACL,UAAWM,KAAO,QAAQ,QAAQN,CAAM,EAAG,CAC1C,MAAMO,EAAQP,EAAOM,CAAG,EACpBC,IAAU,SAAQF,EAAOC,CAAG,EAAIC,EACrC,CAED,OAAOF,CACR,CCnEA,SAASG,GAAmBC,EAAgB,CAC3C,OAAO,OAAOA,GAAmB,WAAaA,EAAkBF,UAAU,OAAAG,EAAAD,EAAe,OAAf,YAAAC,EAAA,KAAAD,EAAsBF,GACjG,CACA,SAASI,GAAkBX,EAAQ,CAClC,OAAO,OAAO,OAAOA,EAAQ,CAC5B,IAAK,IAAMA,EAAO,MAClB,WAAaS,IACL,CAAE,YAAaG,EAAAA,MAAMZ,EAAQQ,GAAmBC,CAAc,EAAG,CAAE,MAAO,MAAM,CAAE,CAAC,GAE7F,CAAE,CACF,CACA,SAASI,GAAkBb,EAAQ,CAClC,OAAO,OAAO,OAAOA,EAAQ,CAC5B,IAAMc,GAAY,CACjBd,EAAO,MAAQ,OAAOc,GAAY,WAAaA,EAAQd,EAAO,KAAK,EAAIc,CACxE,EACA,IAAK,IAAMd,EAAO,MAClB,WAAaS,IACL,CAAE,YAAaG,EAAAA,MAAMZ,EAAQQ,GAAmBC,CAAc,EAAG,CAAE,MAAO,MAAM,CAAE,CAAC,GAE7F,CAAE,CACF,CASA,SAASM,IAAgB,CACxB,MAAMC,EAAgC,IAAI,IAC1C,MAAO,CACN,mBAAoB,GACpB,kBAAmB,GACnB,gBAAkBC,GAAiB,CAClCD,EAAc,IAAIC,CAAY,CAC/B,EACA,QAAS,IAAM,CACdD,EAAc,QAASpB,GAAMA,EAAE,YAAW,CAAE,EAC5CoB,EAAc,MAAK,CACpB,EACA,SAAWE,GAAO,eAAe,IAAMA,EAAE,CAAE,EAC3C,mBAAoB,CAACA,EAAIC,IACjBR,GAAkBvC,EAAAA,SAAS,IAAM8C,EAAE,CAAE,CAAC,EAE9C,mBAAoB,CAACX,EAAOY,IACpBN,GAAkBO,aAAWb,CAAK,CAAC,EAE3C,QAAUW,GAAOA,EAAE,EACnB,MAAQA,GAAOA,EAAE,CACnB,CACA,CCjDA,SAASG,GAAiBP,EAASQ,EAAO,CACzC,OAAO,OAAOR,GAAY,WAAaA,EAAQQ,CAAK,EAAIR,CACzD,CAMA,SAASS,EAAWhB,EAAO,CAC1B,GAAI,MAAM,QAAQA,CAAK,EAAG,OAAOA,EAAM,IAAIgB,CAAU,EACrD,GAAIhB,GAAS,OAAOA,GAAU,SAAU,CACvC,MAAMiB,EAAQ,OAAO,eAAejB,CAAK,EACzC,GAAIiB,IAAU,OAAO,WAAaA,IAAU,KAAM,OAAOjB,EACzD,MAAMkB,EAAOD,IAAU,KAAOE,EAAa,EAAK,CAAA,EAC1CvB,EAAO,OAAO,KAAKI,CAAK,EAC9B,QAASN,EAAI,EAAGA,EAAIE,EAAK,OAAQF,IAAK,CACrC,MAAMK,EAAMH,EAAKF,CAAC,EAClB,OAAO,eAAewB,EAAMnB,EAAK,CAChC,aAAc,GACd,WAAY,GACZ,MAAOiB,EAAWhB,EAAMD,CAAG,CAAC,EAC5B,SAAU,EACd,CAAI,CACF,CACA,OAAOmB,CACR,CACA,OAAOlB,CACR,CAMA,SAASoB,GAAmCC,EAAQ5B,EAAQ,CAC3D,MAAMG,EAAO,OAAO,KAAKH,CAAM,EACzB6B,EAAeD,EACrB,QAAS3B,EAAI,EAAGA,EAAIE,EAAK,OAAQF,IAAK,CACrC,MAAMK,EAAMH,EAAKF,CAAC,EACd,CAACK,EAAI,WAAW,QAAQ,GAAKA,IAAQ,gBAAeuB,EAAavB,CAAG,EAAIN,EAAOM,CAAG,EACvF,CACA,OAAOsB,CACR,CAOA,SAASF,GAAgB,CACxB,OAAO,OAAO,OAAO,IAAI,CAC1B,CAIA,SAASI,GAAOC,EAAKzB,EAAK,CACzB,OAAO,OAAO,UAAU,eAAe,KAAKyB,EAAKzB,CAAG,CACrD,CAMA,SAAS0B,GAAiB1B,EAAK2B,EAAU,CACxC,OAAQnB,GAAY,UAClBJ,EAAAuB,EAAS,QAAQ,QAAjB,YAAAvB,EAAyBJ,KAAQ2B,EAAS,UAAU3B,CAAG,GAAG,IAAK4B,GAAQb,GAAiBP,EAASoB,CAAG,CAAC,CACvG,CACD,CAMA,SAASC,GAAiB5B,EAAO,CAChC,GAAI,OAAOA,GAAU,UAAYA,IAAU,KAAM,MAAO,GACxD,GAAI,MAAM,QAAQA,CAAK,EAAG,MAAO,GACjC,MAAMiB,EAAQ,OAAO,eAAejB,CAAK,EACzC,OAAOiB,IAAU,OAAO,WAAaA,IAAU,IAChD,CAMA,SAASY,GAAqB7B,EAAO,CACpC,OAAO,QAAQ,QAAQA,CAAK,EAAE,OAAQD,GAAQ,OAAO,UAAU,qBAAqB,KAAKC,EAAOD,CAAG,CAAC,CACrG,CACA,MAAM+B,GAA0B,EAUhC,SAASC,GAAiBC,EAAGC,EAAG,CAC/B,OAAOC,GAAwBF,EAAGC,EAAGH,EAAuB,CAC7D,CACA,SAASI,GAAwBF,EAAGC,EAAGE,EAAO,CAC7C,GAAI,OAAO,GAAGH,EAAGC,CAAC,EAAG,MAAO,GAE5B,GADIE,GAAS,GAAK,CAACP,GAAiBI,CAAC,GAAK,CAACJ,GAAiBK,CAAC,IACzD,MAAM,QAAQD,CAAC,GAAK,MAAM,QAAQC,CAAC,KAClC,CAAC,MAAM,QAAQD,CAAC,GAAK,CAAC,MAAM,QAAQC,CAAC,GAAKD,EAAE,SAAWC,EAAE,QAAQ,MAAO,GAE7E,MAAMG,EAAQP,GAAqBG,CAAC,EAC9BK,EAAQR,GAAqBI,CAAC,EACpC,GAAIG,EAAM,SAAWC,EAAM,OAAQ,MAAO,GAC1C,MAAMC,EAAUN,EACVO,EAAUN,EAChB,QAASvC,EAAI,EAAGA,EAAI0C,EAAM,OAAQ1C,IAAK,CACtC,MAAMK,EAAMqC,EAAM1C,CAAC,EAEnB,GADI,CAAC,OAAO,UAAU,qBAAqB,KAAKuC,EAAGlC,CAAG,GAClD,CAACmC,GAAwBI,EAAQvC,CAAG,EAAGwC,EAAQxC,CAAG,EAAGoC,EAAQ,CAAC,EAAG,MAAO,EAC7E,CACA,MAAO,EACR,CAsBA,SAASK,GAAcd,EAAU3B,EAAKQ,EAASkC,EAAUV,GAAkB,CAC1E,MAAMW,EAAc,KAAK3C,EAAI,OAAO,CAAC,EAAE,YAAW,CAAE,GAAGA,EAAI,MAAM,CAAC,CAAC,SAC7D4C,EAAWjB,EAAS,QAAQgB,CAAW,EACxCC,GACLA,EAAUC,GAAY,CACrB,MAAMC,EAAO/B,GAAiBP,EAASqC,CAAO,EAC9C,OAAOH,EAAQG,EAASC,CAAI,EAAID,EAAUC,CAC3C,CAAC,CACF,CAYA,SAASC,GAAUC,EAAKC,EAAa,CACpC,MAAMC,EAAO,CAAA,EACPC,EAAWC,GAAW,CAC3BA,EAAO,QAASC,GAAS,CACxBH,EAAK,KAAKG,CAAI,EACd,MAAMC,EAAWL,EAAYI,CAAI,EAC7BC,EAAS,QAAQH,EAAQG,CAAQ,CACtC,CAAC,CACF,EACA,OAAAH,EAAQH,CAAG,EACJE,CACR,CAMA,MAAMK,GAAO,CAAC,CAAE,GAAA3C,EAAI,SAAA4C,EAAU,eAAAC,EAAgB,cAAAC,EAAe,gBAAAC,EAAiB,eAAAC,KAAqB,CAClG,IAAIC,EAAO,CAAA,EACP9D,EAmBJ,OAlBoB+D,GAAY,CAC/BH,GAAA,MAAAA,IACA,MAAMI,EAAUP,GAAA,YAAAA,EAAWM,GAC3B,IAAIE,EAAc,CAACD,GAAWA,EAAQ,UAAWF,GAAA,YAAAA,EAAM,QACvD,GAAI,CAACG,GAAeD,GACnB,QAASpE,EAAI,EAAGA,EAAIoE,EAAQ,OAAQpE,IAAK,GAAIoE,EAAQpE,CAAC,IAAMkE,EAAKlE,CAAC,EAAG,CACpEqE,EAAc,GACd,KACD,EAGD,OADAP,GAAA,MAAAA,EAAiBO,GACZA,IACLH,EAAOE,EACPH,GAAA,MAAAA,IACA7D,EAASa,EAAG,GAAGmD,GAAW,EAAE,EAC5BL,GAAA,MAAAA,EAAgB3D,IACTA,CACR,CAED,EASA,SAASkE,GAAarD,EAAI,CACzB,IAAIsD,EAAS,GACb,MAAO,IAAM,CACZ,GAAI,CAACA,EAAQ,CACZA,EAAS,GACT,MACD,CACAtD,EAAE,CACH,CACD,CACA,MAAMuD,GAAM,CAACC,EAAKC,IAAQ,CAEzB,IADAD,EAAM,OAAOA,CAAG,EACTA,EAAI,OAASC,GAAKD,EAAM,IAAMA,EACrC,OAAOA,CACR,EAMA,SAASE,GAAU,CAAE,QAAAC,EAAS,OAAAC,EAAQ,SAAAC,EAAU,cAAAf,EAAe,MAAAgB,EAAO,GAAGC,GAAe,CACvF,IAAIC,EACAC,EACAC,EAAW,EACXC,EACJ,GAAI,QAAQ,IAAI,WAAa,cAAe,CAC3C,KAAM,CAAE,SAAAC,GAAaN,EAAM,QACrB,CAAE,WAAAO,CAAU,EAAKC,GAAoBV,EAAQ,GAAG,EAChDW,EAAgBT,EAAM,QAAQ,SAASO,GAAc,QAAUA,EAAa,IAAMA,GAAY,QAAQA,EAAYA,EAAW,OAAO,CAAC,EAAE,YAAW,EAAKA,EAAW,MAAM,CAAC,CAAC,CAAC,EAAE,EAC7KG,EAAiBb,EAAUG,EAAM,QAAQ,QAAQH,EAAQ,OAAO,CAAC,EAAE,YAAW,EAAKA,EAAQ,MAAM,CAAC,CAAC,EAAE,EAAI,GAC/GQ,EAAQC,GAAYG,GAAiBC,CACtC,CACA,SAASC,EAAQC,EAAMtB,EAAa,OACnC,MAAMuB,EAAUT,IAAa,EAAI,YAA4B,WAAaA,EAAW,IACrFA,IACA,QAAQ,eAAe,OAAOX,GAAI,GAAGmB,EAAK,QAAQ,CAAC,CAAC,MAAO,EAAE,CAAC,MAAMC,CAAO,MAAMf,CAAM,MAAMC,EAAW,IAAID,EAAO,MAAM,GAAG,EAAE,CAAC,CAAC,OAAOC,CAAQ,IAAM,EAAE,GAAI,wCAAsD;AAAA,UACzM,KAAK,IAAI,EAAG,KAAK,IAAI,IAAM,KAAK,MAAMa,CAAI,EAAI,GAAI,GAAG,CAAC,CAAC,gBAAqB,IAAK,UAAUR,EAAW,EAAI,UAAY,SAAS,GAAI,cAAe,gBAAgB,EAC1K,QAAQ,KAAK,CACZ,QAAAP,EACA,MAAOG,EAAM,MAAM,MACnB,MAAMtE,EAAAuE,EAAY,WAAZ,YAAAvE,EAAsB,UAC/B,CAAG,EACD,QAAQ,MAAK,EACb,QAAQ,SAAQ,CACjB,CACA,MAAMoF,EAAuB,IAAM,CAClC,GAAI,CAAC9B,EAAe,OACpB,KAAM,CAAE,SAAA+B,EAAU,QAAAC,CAAO,EAAKhB,EAAM,YACpCe,EAAS,IAAMC,EAAQ,IAAMhC,EAAa,CAAE,CAAC,CAC9C,EACMiC,EAAe,QAAQ,IAAI,WAAa,cAAgB,CAC7D,gBAAiB,IAAM,CAAC,EACxB,eAAiB3B,GAAgB,CAAC,EAClC,eAAgB,IAAM,CACjBe,IAAOH,EAAgB,YAAY,IAAG,EAC3C,EACA,cAAe,IAAM,CAChBG,IACHF,EAAc,YAAY,IAAG,EAC7BQ,EAAQ,KAAK,OAAOR,EAAcD,GAAiB,GAAG,EAAI,GAAS,GAEpEY,EAAoB,CACrB,CACF,EAAK,CAAE,cAAe,IAAM,CAC1BA,EAAoB,CACrB,CAAC,EACD,OAAOjC,GAAK,CACX,GAAGoB,EACH,GAAGgB,CACL,CAAE,CACF,CAIA,SAAST,GAAoBU,EAAcC,EAAU,IAAK,CACzD,KAAM,CAACZ,EAAYa,CAAK,EAAIF,EAAa,MAAMC,CAAO,EACtD,MAAO,CACN,MAAAC,EACA,OAAQ,GAAGb,CAAU,IAAIa,CAAK,GAC9B,WAAAb,CACF,CACA,CAKA,SAASc,GAAgBxB,EAASG,EAAOsB,EAAM,CAC9C,SAAW,CAACJ,EAAc,CAAE,GAAAhF,EAAI,SAAA4C,CAAQ,CAAE,IAAK,OAAO,QAAQwC,CAAI,EAAG,CACpE,KAAM,CAAE,MAAAF,EAAO,OAAAtB,GAAWU,GAAoBU,CAAY,EAC1DlB,EAAMoB,CAAK,EAAItC,EAAWc,GAAU,CACnC,SAAAd,EACA,GAAA5C,EACA,OAAA4D,EACA,MAAAE,EACA,QAAAH,CACH,CAAG,EAAI3D,CACN,CACD,CAQA,SAASqF,GAAoB1B,EAAS2B,EAAWxB,EAAOsB,EAAM,CAC7D,SAAW,CAACJ,EAAc,CAAE,GAAAhF,EAAI,SAAA4C,CAAQ,CAAE,IAAK,OAAO,QAAQwC,CAAI,EAAG,CACpE,KAAM,CAAE,MAAAF,EAAO,OAAAtB,GAAWU,GAAoBU,CAAY,EAC1D,GAAIpC,EAAU,CACb,MAAM2C,EAAU,SAASL,CAAK,GAC9BI,EAAUJ,CAAK,EAAI,YAAYM,EAAM,CACpC,GAAI,CAAC,KAAKD,CAAO,EAAG,CACnB,MAAME,EAAO,KACb,KAAKF,CAAO,EAAI7B,GAAU,CACzB,SAAWR,GAAYN,EAAS6C,EAAMvC,CAAO,EAC7C,GAAI,IAAID,IAASjD,EAAGyF,EAAM,GAAGxC,CAAI,EACjC,OAAAW,EACA,SAAU6B,EAAK,GACf,MAAA3B,EACA,QAAAH,CACN,CAAM,CACF,CACA,OAAO,KAAK4B,CAAO,EAAE,GAAGC,CAAI,CAC7B,CACD,MAAOF,EAAUJ,CAAK,EAAI,YAAYM,EAAM,CAC3C,OAAOxF,EAAG,KAAM,GAAGwF,CAAI,CACxB,CACD,CACD,CAIA,SAASE,EAAmB7E,EAAKqE,EAAOS,KAAaH,EAAM,OAC1D,QAAOhG,EAAAqB,EAAIqE,KAAJ,YAAA1F,EAAA,KAAAqB,EAAa,GAAG2E,KAASG,EAAS9E,EAAK,GAAG2E,CAAI,CACtD,CC9UA,SAASI,GAAcC,EAAM,CAC5B,OAAOA,EAAK,IAAI,SAASA,EAAK,OAAO,EAAE,CACxC,CAYA,SAASC,GAAiBD,EAAM,CAC/B,OAAOA,EAAK,SAAQ,GAAMA,EAAK,MAAM,QAAQ,mBAC9C,CAYA,SAASE,GAAgBF,EAAM,CAC9B,MAAO,CACN,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,IAAKA,EAAK,IACV,KAAAA,EACA,SAAU,IAAMA,EAAK,SAAQ,EAC7B,YAAa,IAAMA,EAAK,YAAW,CACrC,CACA,CC1CA,MAAMG,GAAmB,CAAE,oBAAqB,CAACV,EAAWxB,IAAU,CACrEuB,GAAoB,mBAAoBC,EAAWxB,EAAO,CACzD,cAAe,CAAE,GAAK+B,GAASD,GAAcC,CAAI,CAAC,EAClD,iBAAkB,CAAE,GAAKA,GAASC,GAAiBD,CAAI,CAAC,EACxD,gBAAiB,CAChB,GAAKA,GAASE,GAAgBF,CAAI,EAClC,SAAWA,GAAS,CAACA,CAAI,CAC5B,CACA,CAAE,CACF,CAAC,ECXD,SAASI,GAAmBnC,EAAO,SAClC,GAAI,CAACA,EAAM,iBAAkB,CAC5BA,EAAM,iBAAmB,CAAE,MAAAA,CAAK,EAChC,MAAMoC,EAAW,OAAO,OAAOpC,EAAM,SAAS,EAC9C,QAAS/E,EAAI,EAAGA,EAAImH,EAAS,OAAQnH,KAAKoH,GAAA3G,EAAA0G,EAASnH,CAAC,GAAE,wBAAZ,MAAAoH,EAAA,KAAA3G,EAAoCsE,EAAM,iBAAkBA,EACvG,CACA,OAAOA,EAAM,gBACd,CAMA,SAASsC,GAAgBtC,EAAOuC,EAAQC,EAAS,CAChD,MAAMC,EAAkBN,GAAmBnC,CAAK,EAC1C0C,EAAS,OAAO,OAAOD,CAAe,EAC5CC,EAAO,QAAU,EACjBA,EAAO,OAASH,EAChBG,EAAO,MAAQF,EAAQ,MACvBE,EAAO,YAAc,KACrBA,EAAO,GAAKF,EAAQ,IAAMD,EAAO,GACjCG,EAAO,MAAQF,EAAQ,MACvBE,EAAO,cAAgB,CAAC,CAACF,EAAQ,cACjCE,EAAO,cAAgBF,EAAQ,cAC/BE,EAAO,QAAU,EACjBA,EAAO,WAAa,CAAA,EACpB,MAAMC,EAAU3C,EAAM,uBACtB,QAAS,EAAI,EAAG,EAAI2C,EAAQ,OAAQ,IAAKA,EAAQ,CAAC,EAAED,CAAM,EAC1D,OAAOA,CACR,CClBA,SAASE,IAA+B,CACvC,MAAO,CACN,MAAO,CAAA,EACP,IAAK,CAAA,CACP,CACA,CAsNA,SAASC,GAA2B7C,EAAO,OAC1C,MAAM8C,EAAa9C,EAAM,cAAa,EAChC+C,EAAkB/C,EAAM,sBAAqB,EAC7C,CAAE,MAAAgD,CAAK,IAAKtH,EAAAsE,EAAM,MAAM,gBAAZ,YAAAtE,EAA2B,QAASkH,GAA4B,EAC5EK,EAAqB,CAAA,EAC3B,QAAS,EAAI,EAAG,EAAID,EAAM,OAAQ,IAAK,CACtC,MAAMT,EAASQ,EAAgBC,EAAM,CAAC,CAAC,EACnCT,GAAUX,EAAmBW,EAAQ,eAAgBW,CAAmB,GAAGD,EAAmB,KAAKV,CAAM,CAC9G,CACA,OAAOY,GAAkBL,EAAYG,EAAoBjD,EAAO,OAAO,CACxE,CAYA,SAASoD,GAAyBpD,EAAO,OACxC,MAAM8C,EAAa9C,EAAM,cAAa,EAChC+C,EAAkB/C,EAAM,sBAAqB,EAC7C,CAAE,IAAAqD,CAAG,IAAK3H,EAAAsE,EAAM,MAAM,gBAAZ,YAAAtE,EAA2B,QAASkH,GAA4B,EAC1EK,EAAqB,CAAA,EAC3B,QAAS,EAAI,EAAG,EAAII,EAAI,OAAQ,IAAK,CACpC,MAAMd,EAASQ,EAAgBM,EAAI,CAAC,CAAC,EACjCd,GAAUX,EAAmBW,EAAQ,eAAgBW,CAAmB,GAAGD,EAAmB,KAAKV,CAAM,CAC9G,CACA,OAAOY,GAAkBL,EAAYG,EAAoBjD,EAAO,KAAK,CACtE,CAYA,SAASsD,GAA4BtD,EAAO,OAC3C,MAAM8C,EAAa9C,EAAM,cAAa,EACtC,IAAIuD,EAAc3B,EAAmB5B,EAAO,wBAAyBwD,EAA2B,EAChG,KAAM,CAAE,MAAAR,EAAO,IAAAK,KAAQ3H,EAAAsE,EAAM,MAAM,gBAAZ,YAAAtE,EAA2B,QAASkH,GAA4B,EACvF,GAAII,EAAM,QAAUK,EAAI,OAAQ,CAC/B,MAAMI,EAAc,CAAC,GAAGT,EAAO,GAAGK,CAAG,EACrCE,EAAcA,EAAY,OAAQhB,GAAW,CAACkB,EAAY,SAASlB,EAAO,EAAE,CAAC,CAC9E,CACA,OAAOY,GAAkBL,EAAYS,EAAavD,EAAO,QAAQ,CAClE,CAmJA,SAAS0D,GAA0B1D,EAAO,OACzC,KAAM,CAAE,MAAAgD,CAAK,IAAKtH,EAAAsE,EAAM,MAAM,gBAAZ,YAAAtE,EAA2B,QAASkH,GAA4B,EAC5EG,EAAkB/C,EAAM,sBAAqB,EAC7C3E,EAAS,CAAA,EACf,QAASJ,EAAI,EAAGA,EAAI+H,EAAM,OAAQ/H,IAAK,CACtC,MAAMsH,EAASQ,EAAgBC,EAAM/H,CAAC,CAAC,EACnCsH,GAAQlH,EAAO,KAAKkH,CAAM,CAC/B,CACA,OAAOlH,CACR,CAYA,SAASsI,GAAwB3D,EAAO,OACvC,KAAM,CAAE,IAAAqD,CAAG,IAAK3H,EAAAsE,EAAM,MAAM,gBAAZ,YAAAtE,EAA2B,QAASkH,GAA4B,EAC1EG,EAAkB/C,EAAM,sBAAqB,EAC7C3E,EAAS,CAAA,EACf,QAASJ,EAAI,EAAGA,EAAIoI,EAAI,OAAQpI,IAAK,CACpC,MAAMsH,EAASQ,EAAgBM,EAAIpI,CAAC,CAAC,EACjCsH,GAAQlH,EAAO,KAAKkH,CAAM,CAC/B,CACA,OAAOlH,CACR,CAWA,SAASuI,GAA2B5D,EAAO,OAC1C,KAAM,CAAE,MAAAgD,EAAO,IAAAK,KAAQ3H,EAAAsE,EAAM,MAAM,gBAAZ,YAAAtE,EAA2B,QAASkH,GAA4B,EACvF,GAAI,CAACI,EAAM,QAAU,CAACK,EAAI,OAAQ,OAAOrD,EAAM,kBAAiB,EAChE,MAAMyD,EAAc,CAAC,GAAGT,EAAO,GAAGK,CAAG,EACrC,OAAOrD,EAAM,oBAAoB,OAAQ6D,GAAM,CAACJ,EAAY,SAASI,EAAE,EAAE,CAAC,CAC3E,CAyBA,SAASC,GAAiC9D,EAAO,CAChD,OAAO4B,EAAmB5B,EAAO,sBAAuB0D,EAAyB,EAAE,OAAQnB,GAAWX,EAAmBW,EAAQ,eAAgBW,CAAmB,CAAC,CACtK,CAWA,SAASa,GAA+B/D,EAAO,CAC9C,OAAO4B,EAAmB5B,EAAO,oBAAqB2D,EAAuB,EAAE,OAAQpB,GAAWX,EAAmBW,EAAQ,eAAgBW,CAAmB,CAAC,CAClK,CAYA,SAASc,GAAkChE,EAAO,CACjD,OAAO4B,EAAmB5B,EAAO,uBAAwB4D,EAA0B,EAAE,OAAQrB,GAAWX,EAAmBW,EAAQ,eAAgBW,CAAmB,CAAC,CACxK,CAYA,SAASe,GAAkCjE,EAAOkE,EAAU,CAC3D,OAAQA,EAA6FA,IAAa,QAAUtC,EAAmB5B,EAAO,6BAA8B8D,EAAgC,EAAII,IAAa,MAAQtC,EAAmB5B,EAAO,2BAA4B+D,EAA8B,EAAInC,EAAmB5B,EAAO,8BAA+BgE,EAAiC,EAA5YpC,EAAmB5B,EAAO,wBAAyBwD,EAA2B,CAClG,CCthBA,SAASW,IAAkC,CAC1C,OAAOzH,EAAa,CACrB,CAcA,SAAS0H,GAAwB7B,EAAQ8B,EAAS,CAC7CC,GAAkB/B,CAAM,GAAGgC,GAA0BhC,EAAO,MAAQrF,GAAQ,CAC/E,MAAMkB,EAAO,OAAO,OAAO1B,EAAa,EAAIQ,CAAG,EACzCsH,EAAcH,GAAW,CAACzC,EAAmBW,EAAQ,eAAgBW,CAAmB,EACxFK,EAAchB,EAAO,eAAc,EACzC,QAAS,EAAI,EAAG,EAAIgB,EAAY,OAAQ,IAAK,CAC5C,MAAMkB,EAAalB,EAAY,CAAC,EAC5Be,GAAkBG,CAAU,IAAGrG,EAAKqG,EAAW,EAAE,EAAID,EAC1D,CACA,OAAOpG,CACR,CAAC,CACF,CAaA,SAAS8E,EAAoBX,EAAQ,OACpC,MAAMmC,GAAmBhJ,EAAA6G,EAAO,MAAM,MAAM,mBAAnB,YAAA7G,EAAqC,MAC9D,GAAI,CAACgJ,EAAkB,MAAO,GAC9B,MAAMC,EAAepC,EAAO,QAC5B,OAAIoC,EAAa,OAAeA,EAAa,KAAMC,GAAgBhD,EAAmBgD,EAAa,eAAgB1B,CAAmB,CAAC,GAC/HpG,GAAO4H,EAAkBnC,EAAO,EAAE,EAAImC,EAAiBnC,EAAO,EAAE,EAAI,SAAW,EACxF,CAWA,SAAS+B,GAAkB/B,EAAQ,CAClC,OAAQA,EAAO,UAAU,cAAgB,MAAUA,EAAO,MAAM,QAAQ,cAAgB,GACzF,CAYA,SAASsC,GAAkCtC,EAAQ,CAClD,OAAQuC,GAAM,CACbV,GAAwB7B,EAAQuC,EAAE,OAAO,OAAO,CACjD,CACD,CAYA,SAASC,GAAoBC,EAAK,OACjC,MAAMC,EAAWD,EAAI,YAAW,EAC1BE,EAAe,CAAA,EACrB,QAASjK,EAAI,EAAGA,EAAIgK,EAAS,OAAQhK,IAAK,CACzC,MAAM8G,EAAOkD,EAAShK,CAAC,EACnB2G,EAAmBG,EAAK,OAAQ,eAAgBmB,CAAmB,GAAGgC,EAAa,KAAKnD,CAAI,CACjG,CACA,KAAM,CAAE,MAAAiB,EAAO,IAAAK,CAAG,IAAK3H,EAAAsJ,EAAI,MAAM,MAAM,gBAAhB,YAAAtJ,EAA+B,QAASkH,GAA4B,EAC3F,GAAI,CAACI,EAAM,QAAU,CAACK,EAAI,OAAQ,OAAO6B,EACzC,MAAMC,EAAyBvD,EAAmBoD,EAAK,4BAA6BI,EAA6B,EAC3GC,EAAa,CAAA,EACnB,QAASpK,EAAI,EAAGA,EAAI+H,EAAM,OAAQ/H,IAAK,CACtC,MAAM8G,EAAOoD,EAAuBnC,EAAM/H,CAAC,CAAC,EACxC8G,GAAMsD,EAAW,KAAKtD,CAAI,CAC/B,CACA,MAAMuD,EAAW,CAAA,EACjB,QAASrK,EAAI,EAAGA,EAAIoI,EAAI,OAAQpI,IAAK,CACpC,MAAM8G,EAAOoD,EAAuB9B,EAAIpI,CAAC,CAAC,EACtC8G,GAAMuD,EAAS,KAAKvD,CAAI,CAC7B,CACA,MAAMwD,EAAc,CAAA,EACpB,QAAStK,EAAI,EAAGA,EAAIiK,EAAa,OAAQjK,IAAK,CAC7C,MAAM8G,EAAOmD,EAAajK,CAAC,EACrBuK,EAAKzD,EAAK,OAAO,GACnB,CAACiB,EAAM,SAASwC,CAAE,GAAK,CAACnC,EAAI,SAASmC,CAAE,GAAGD,EAAY,KAAKxD,CAAI,CACpE,CACA,MAAO,CACN,GAAGsD,EACH,GAAGE,EACH,GAAGD,CACL,CACA,CAWA,SAASF,GAA8BJ,EAAK,CAC3C,MAAM3J,EAASqB,EAAa,EACtBuI,EAAWD,EAAI,YAAW,EAChC,QAAS/J,EAAI,EAAGA,EAAIgK,EAAS,OAAQhK,IAAK,CACzC,MAAM8G,EAAOkD,EAAShK,CAAC,EACnB2G,EAAmBG,EAAK,OAAQ,eAAgBmB,CAAmB,IAAG7H,EAAO0G,EAAK,OAAO,EAAE,EAAIA,EACpG,CACA,OAAO1G,CACR,CAYA,SAASoK,GAA4BzF,EAAO,CAC3C,OAAOA,EAAM,kBAAiB,EAAG,OAAQuC,GAAWX,EAAmBW,EAAQ,eAAgBW,CAAmB,CAAC,CACpH,CAYA,SAASM,GAA4BxD,EAAO,CAC3C,OAAOA,EAAM,kBAAiB,EAAG,OAAQuC,GAAWX,EAAmBW,EAAQ,eAAgBW,CAAmB,CAAC,CACpH,CAYA,SAASqB,GAA0BvE,EAAOlE,EAAS,CAClDiC,GAAciC,EAAO,mBAAoBlE,CAAO,CACjD,CAaA,SAAS4J,GAA4B1F,EAAO2F,EAAc,CACzDpB,GAA0BvE,EAAO2F,EAAejJ,EAAa,EAAK,OAAO,OAAOA,EAAa,EAAIH,EAAWyD,EAAM,aAAa,kBAAoB,CAAA,CAAE,CAAC,CAAC,CACxJ,CAWA,SAAS4F,GAA8B5F,EAAOzE,EAAO,CACpDA,EAAQA,GAAS,CAACsK,GAA6B7F,CAAK,EACpD,MAAM8F,EAAapJ,EAAa,EAC1B6G,EAAcvD,EAAM,kBAAiB,EAC3C,QAAS/E,EAAI,EAAGA,EAAIsI,EAAY,OAAQtI,IAAK,CAC5C,MAAMsH,EAASgB,EAAYtI,CAAC,EAC5B6K,EAAWvD,EAAO,EAAE,EAAKhH,GAAQ,CAAC+I,GAAkB/B,CAAM,CAC3D,CACAgC,GAA0BvE,EAAO8F,CAAU,CAC5C,CAYA,SAASD,GAA6B7F,EAAO,CAC5C,MAAO,CAACA,EAAM,kBAAiB,EAAG,KAAMuC,GAAW,CAACX,EAAmBW,EAAQ,eAAgBW,CAAmB,CAAC,CACpH,CAWA,SAAS6C,GAA8B/F,EAAO,CAC7C,OAAOA,EAAM,kBAAiB,EAAG,KAAMuC,GAAWX,EAAmBW,EAAQ,eAAgBW,CAAmB,CAAC,CAClH,CAYA,SAAS8C,GAA2ChG,EAAO,CAC1D,OAAQ8E,GAAM,CACbc,GAA8B5F,EAAO8E,EAAE,OAAO,OAAO,CACtD,CACD,CC3QA,SAASmB,GAAkBC,EAASxI,EAAQ,EAAG,CAC9C,IAAIyI,EAAWzI,EACf,QAASzC,EAAI,EAAGA,EAAIiL,EAAQ,OAAQjL,IAAK,CACxC,MAAMsH,EAAS2D,EAAQjL,CAAC,EACpB2G,EAAmBW,EAAQ,eAAgBW,CAAmB,GAAKX,EAAO,QAAQ,SAAQ4D,EAAW,KAAK,IAAIA,EAAUF,GAAkB1D,EAAO,QAAS7E,EAAQ,CAAC,CAAC,EACzK,CACA,OAAOyI,CACR,CACA,SAASC,GAAoBC,EAAc3I,EAAO,CACjD,OAAO2I,EAAe,GAAGA,CAAY,IAAI3I,CAAK,GAAK,OAAOA,CAAK,CAChE,CACA,SAAS4I,GAAeD,EAAc3I,EAAO6I,EAAUC,EAAe,CACrE,IAAIhB,EAAKa,GAAgB,GACzB,OAAI3I,IAAO8H,EAAKA,EAAK,GAAGA,CAAE,IAAI9H,CAAK,GAAK,OAAOA,CAAK,GAChD6I,IAAUf,EAAKA,EAAK,GAAGA,CAAE,IAAIe,CAAQ,GAAKA,GAC1CC,IAAehB,EAAKA,EAAK,GAAGA,CAAE,IAAIgB,CAAa,GAAKA,GACjDhB,CACR,CACA,SAASiB,GAA6BC,EAASnE,EAAQ,CACtD,IAAIoE,EAAQ,EACZ,QAAS1L,EAAI,EAAGA,EAAIyL,EAAQ,OAAQzL,IAASyL,EAAQzL,CAAC,EAAE,SAAWsH,GAAQoE,IAC3E,OAAOA,CACR,CACA,SAASC,GAAqBC,EAAgBnJ,EAAOsC,EAAOqG,EAAcS,EAAcC,EAAoB,CAC3G,MAAMC,EAAc,CACnB,MAAAtJ,EACA,GAAI0I,GAAoBC,EAAc3I,CAAK,EAC3C,QAAS,CAAA,CACX,EACOuJ,EAAuB,CAAA,EAC7B,QAAShM,EAAI,EAAGA,EAAI4L,EAAe,OAAQ5L,IAAK,CAC/C,GAAI,EAAEA,KAAK4L,GAAiB,SAC5B,MAAMK,EAAgBL,EAAe5L,CAAC,EAChCkM,EAA4BF,EAAqBA,EAAqB,OAAS,CAAC,EAChFG,EAAeF,EAAc,OAAO,QAAUF,EAAY,MAChE,IAAIzE,EACA8E,EAAgB,GAMpB,GALID,GAAgBF,EAAc,OAAO,OAAQ3E,EAAS2E,EAAc,OAAO,QAE9E3E,EAAS2E,EAAc,OACvBG,EAAgB,IAEbF,GAA6BA,EAA0B,SAAW5E,EAAQ4E,EAA0B,WAAW,KAAKD,CAAa,MAChI,CACJ,MAAMxE,EAASJ,GAAgBtC,EAAOuC,EAAQ,CAC7C,GAAI+D,GAAeD,EAAc3I,EAAO6E,EAAO,GAAI2E,EAAc,EAAE,EACnE,cAAAG,EACA,cAAeA,EAAgB,OAAOZ,GAA6BQ,EAAsB1E,CAAM,CAAC,EAAI,OACpG,MAAA7E,EACA,MAAOuJ,EAAqB,MAChC,CAAI,EACDvE,EAAO,WAAW,KAAKwE,CAAa,EACpCD,EAAqB,KAAKvE,CAAM,CACjC,CACAsE,EAAY,QAAQ,KAAKE,CAAa,EACtCA,EAAc,YAAcF,CAC7B,CACA,QAAS/L,EAAI,EAAGA,EAAI8L,EAAmB,OAAQ9L,IAAK8L,EAAmB9L,CAAC,EAAE+L,CAAW,EACrFF,EAAa,KAAKE,CAAW,EACzBtJ,EAAQ,GAAGkJ,GAAqBK,EAAsBvJ,EAAQ,EAAGsC,EAAOqG,EAAcS,EAAcC,CAAkB,CAC3H,CACA,SAASO,GAAkBZ,EAAS,CACnC,QAASzL,EAAI,EAAGA,EAAIyL,EAAQ,OAAQzL,IAAK,CACxC,MAAMyH,EAASgE,EAAQzL,CAAC,EACxB,GAAI,CAAC2G,EAAmBc,EAAO,OAAQ,eAAgBQ,CAAmB,EAAG,SAC7E,IAAIqE,EAAU,EACd,GAAI7E,EAAO,WAAW,OAAQ,CAC7B4E,GAAkB5E,EAAO,UAAU,EACnC,QAAS8E,EAAI,EAAGA,EAAI9E,EAAO,WAAW,OAAQ8E,IAAK,CAClD,MAAMC,EAAQ/E,EAAO,WAAW8E,CAAC,EAC5B5F,EAAmB6F,EAAM,OAAQ,eAAgBvE,CAAmB,IACzEqE,GAAWE,EAAM,QAClB,CACD,MAAOF,EAAU,EAEjB,GADA7E,EAAO,QAAU6E,EACb7E,EAAO,eAAiBA,EAAO,WAAW,SAAW,GAAKA,EAAO,WAAW,CAAC,EAAE,SAAWA,EAAO,OAAQ,CAC5G,IAAIgF,EAAU,EACVC,EAAajF,EAAO,WAAW,CAAC,EACpC,KAAOiF,GACNA,EAAW,QAAU,EACrBD,IACAC,EAAaA,EAAW,WAAW,SAAW,GAAKA,EAAW,WAAW,CAAC,EAAE,SAAWjF,EAAO,OAASiF,EAAW,WAAW,CAAC,EAAI,OAEnIjF,EAAO,QAAUgF,CAClB,MAAOhF,EAAO,QAAU,CACzB,CACD,CAMA,SAASS,GAAkBL,EAAY8E,EAAgB5H,EAAOqG,EAAc,OAC3E,MAAMF,EAAWF,GAAkBnD,CAAU,EACvCgE,EAAe,CAAA,EACfC,EAAqB/G,EAAM,4BAC3B6H,EAAgB,IAAI,MAAMD,EAAe,MAAM,EACrD,QAAS3M,EAAI,EAAGA,EAAI2M,EAAe,OAAQ3M,IACpCA,KAAK2M,IACXC,EAAc5M,CAAC,EAAIqH,GAAgBtC,EAAO4H,EAAe3M,CAAC,EAAG,CAC5D,MAAOkL,EACP,MAAOlL,CACV,CAAG,GAEF,OAAA2L,GAAqBiB,EAAe1B,EAAW,EAAGnG,EAAOqG,EAAcS,EAAcC,CAAkB,EACvGD,EAAa,QAAO,EACpBQ,KAAkB5L,EAAAoL,EAAa,CAAC,IAAd,YAAApL,EAAiB,UAAW,CAAA,CAAE,EACzCoL,CACR,CC5GA,SAASgB,GAAmB9H,EAAO,SAClC,GAAI,CAACA,EAAM,iBAAkB,CAC5BA,EAAM,iBAAmB,CAAE,MAAAA,CAAK,EAChC,MAAMoC,EAAW,OAAO,OAAOpC,EAAM,SAAS,EAC9C,QAAS/E,EAAI,EAAGA,EAAImH,EAAS,OAAQnH,KAAKoH,GAAA3G,EAAA0G,EAASnH,CAAC,GAAE,wBAAZ,MAAAoH,EAAA,KAAA3G,EAAoCsE,EAAM,iBAAkBA,EACvG,CACA,OAAOA,EAAM,gBACd,CAMA,SAAS+H,GAAgB/H,EAAOgI,EAAWtK,EAAOuK,EAAQ,CACzD,MAAMC,EAAoB,CACzB,GAAGlI,EAAM,oBAAmB,EAC5B,GAAGgI,CACL,EACOG,EAAcD,EAAkB,YAChCE,EAAoBD,IAAgB,OAAS,OAAS,OAAOA,CAAW,EACxE3C,EAAK0C,EAAkB,KAAME,GAAA,YAAAA,EAAmB,WAAW,IAAK,QAAS,OAAOF,EAAkB,QAAW,SAAWA,EAAkB,OAAS,QACzJ,IAAIG,EACJ,GAAIH,EAAkB,WAAYG,EAAaH,EAAkB,mBACxDC,IAAgB,OAAQ,GAAI,OAAOA,GAAgB,UAAYA,EAAY,SAAS,GAAG,EAAG,CAClG,MAAMhN,EAAOgN,EAAY,MAAM,GAAG,EAClCE,EAAcC,GAAgB,CAC7B,IAAIjN,EAASiN,EACb,QAASrN,EAAI,EAAGA,EAAIE,EAAK,OAAQF,IAAK,CACrC,MAAMK,EAAMH,EAAKF,CAAC,EAClBI,EAASA,GAAA,YAAAA,EAASC,GACd,QAAQ,IAAI,WAAa,eAAiBD,IAAW,QAAQ,QAAQ,KAAK,IAAIC,CAAG,2BAA2B6M,CAAW,uBAAuB,CACnJ,CACA,OAAO9M,CACR,CACD,MAAOgN,EAAcC,GAAgBA,EAAYJ,EAAkB,WAAW,EAC9E,GAAI,CAAC1C,EACJ,MAAI,QAAQ,IAAI,WAAa,cAAqB,IAAI,MAAM0C,EAAkB,WAAa,4DAA8D,iEAAiE,EACpN,IAAI,MAEX,MAAMK,EAAkBT,GAAmB9H,CAAK,EAC1CuC,EAAS,OAAO,OAAOgG,CAAe,EAC5ChG,EAAO,WAAa8F,EACpB9F,EAAO,UAAY2F,EACnB3F,EAAO,QAAU,CAAA,EACjBA,EAAO,MAAQ7E,EACf6E,EAAO,GAAK,GAAG,OAAOiD,CAAE,CAAC,GACzBjD,EAAO,OAAS0F,EAChB,MAAMtF,EAAU3C,EAAM,uBACtB,QAAS/E,EAAI,EAAGA,EAAI0H,EAAQ,OAAQ1H,IAAK0H,EAAQ1H,CAAC,EAAEsH,CAAM,EAC1D,OAAOA,CACR,CCoEA,SAASiG,GAAwBxI,EAAO,OACvC,MAAMyI,GAAc/M,EAAAsE,EAAM,MAAM,cAAZ,YAAAtE,EAAyB,MAC7C,OAAQwK,GAAY,CACnB,IAAIwC,EAAiB,CAAA,EACrB,GAAI,EAACD,GAAA,MAAAA,EAAa,QAAQC,EAAiBxC,MACtC,CACJ,MAAMyC,EAA4B,IAAI,IACtC,QAAS,EAAI,EAAG,EAAIzC,EAAQ,OAAQ,IAAK,CACxC,MAAM3D,EAAS2D,EAAQ,CAAC,EACxByC,EAAU,IAAIpG,EAAO,GAAIA,CAAM,CAChC,CACA,QAAS,EAAI,EAAG,EAAIkG,EAAY,OAAQ,IAAK,CAC5C,MAAMjD,EAAKiD,EAAY,CAAC,EAClBlG,EAASoG,EAAU,IAAInD,CAAE,EAC3BjD,IACHmG,EAAe,KAAKnG,CAAM,EAC1BoG,EAAU,OAAOnD,CAAE,EAErB,CACA,QAAS,EAAI,EAAG,EAAIU,EAAQ,OAAQ,IAAK,CACxC,MAAM3D,EAAS2D,EAAQ,CAAC,EACpByC,EAAU,IAAIpG,EAAO,EAAE,GAAGmG,EAAe,KAAKnG,CAAM,CACzD,CACD,CACA,OAAOqG,GAAa5I,EAAO0I,CAAc,CAC1C,CACD,CAaA,SAASE,GAAa5I,EAAOuD,EAAa,OACzC,MAAMsF,IAAWnN,EAAAsE,EAAM,MAAM,WAAZ,YAAAtE,EAAsB,QAAS,CAAA,EAC1C,CAAE,kBAAAoN,GAAsB9I,EAAM,QACpC,GAAI,CAAC6I,EAAS,QAAU,CAACC,EAAmB,OAAOvF,EACnD,MAAMwF,EAAqBxF,EAAY,OAAQyF,GAAQ,CAACH,EAAS,SAASG,EAAI,EAAE,CAAC,EACjF,GAAIF,IAAsB,SAAU,OAAOC,EAC3C,MAAMhG,EAAkC,IAAI,IAC5C,QAAS9H,EAAI,EAAGA,EAAIsI,EAAY,OAAQtI,IAAK,CAC5C,MAAM+N,EAAMzF,EAAYtI,CAAC,EACzB8H,EAAgB,IAAIiG,EAAI,GAAIA,CAAG,CAChC,CACA,MAAMC,EAAkB,CAAA,EACxB,QAAShO,EAAI,EAAGA,EAAI4N,EAAS,OAAQ5N,IAAK,CACzC,MAAM+N,EAAMjG,EAAgB,IAAI8F,EAAS5N,CAAC,CAAC,EACvC+N,GAAKC,EAAgB,KAAKD,CAAG,CAClC,CACA,MAAO,CAAC,GAAGC,EAAiB,GAAGF,CAAkB,CAClD,CCnKA,SAASG,GAAsB3G,EAAQ,CACtC,MAAO,CAACA,EAAQ,GAAGA,EAAO,QAAQ,QAASyG,GAAQA,EAAI,eAAc,CAAE,CAAC,CACzE,CAYA,SAASG,GAAsB5G,EAAQ,CACtC,GAAIA,EAAO,QAAQ,OAAQ,CAC1B,MAAMgB,EAAchB,EAAO,QAAQ,QAASyG,GAAQA,EAAI,gBAAgB,EACxE,OAAOpH,EAAmBW,EAAO,MAAO,kBAAmBiG,EAAuB,EAAEjF,CAAW,CAChG,CACA,MAAO,CAAChB,CAAM,CACf,CAaA,SAAS6G,GAA0BpJ,EAAO,CACzC,MAAO,CACN,OAASjH,GAAU,CAClB,MAAMmP,EAAoBnP,EAAM,OAAO,OAAO,UAC9C,OAAImP,EAAkB,YAAoBA,EAAkB,YACxDA,EAAkB,WAAmBA,EAAkB,GACpD,IACR,EACA,KAAOnP,GAAK,SAAK,QAAAsJ,GAAA3G,EAAA3C,EAAM,YAAW,IAAjB,YAAA2C,EAAqB,WAArB,YAAA2G,EAAA,KAAA3G,KAAqC,MACtD,GAAG,OAAO,OAAOsE,EAAM,SAAS,EAAE,OAAO,CAACjD,EAAK8C,IAAY,OAC1D,OAAO,OAAO,OAAO9C,GAAKrB,EAAAmE,EAAQ,sBAAR,YAAAnE,EAAA,KAAAmE,EAA+B,CAC1D,EAAG,CAAA,CAAE,EACL,GAAGG,EAAM,QAAQ,aACnB,CACA,CACA,SAASqJ,GAAiBrJ,EAAOsJ,EAAYrB,EAAQvK,EAAQ,EAAG,CAC/D,MAAMwI,EAAU,IAAI,MAAMoD,EAAW,MAAM,EAC3C,QAASrO,EAAI,EAAGA,EAAIqO,EAAW,OAAQrO,IAAK,CAC3C,GAAI,EAAEA,KAAKqO,GAAa,SACxB,MAAMtB,EAAYsB,EAAWrO,CAAC,EACxBsH,EAASwF,GAAgB/H,EAAOgI,EAAWtK,EAAOuK,CAAM,EACxDsB,EAAoBvB,EAC1BzF,EAAO,QAAUgH,EAAkB,QAAUF,GAAiBrJ,EAAOuJ,EAAkB,QAAShH,EAAQ7E,EAAQ,CAAC,EAAI,CAAA,EACrHwI,EAAQjL,CAAC,EAAIsH,CACd,CACA,OAAO2D,CACR,CAYA,SAASsD,GAAoBxJ,EAAO,CACnC,OAAOqJ,GAAiBrJ,EAAOA,EAAM,QAAQ,OAAO,CACrD,CAYA,SAASyJ,GAAwBzJ,EAAO,CACvC,OAAOA,EAAM,gBAAgB,QAASuC,GAAWA,EAAO,gBAAgB,CACzE,CAYA,SAASmH,GAA4B1J,EAAO,CAC3C,MAAM3E,EAASqB,EAAa,EACtBiN,EAAc3J,EAAM,kBAAiB,EAC3C,QAAS/E,EAAI,EAAGA,EAAI0O,EAAY,OAAQ1O,IAAK,CAC5C,MAAMsH,EAASoH,EAAY1O,CAAC,EAC5BI,EAAOkH,EAAO,EAAE,EAAIA,CACrB,CACA,OAAOlH,CACR,CAYA,SAASuO,GAAwB5J,EAAO,CACvC,MAAMuD,EAAcvD,EAAM,cAAa,EAAG,QAAS6J,GAAMA,EAAE,gBAAgB,EAC3E,OAAOjI,EAAmB5B,EAAO,kBAAmBwI,EAAuB,EAAEjF,CAAW,CACzF,CAYA,SAASuG,GAA4B9J,EAAO,CAC3C,MAAM3E,EAASqB,EAAa,EACtB6G,EAAcvD,EAAM,kBAAiB,EAC3C,QAAS/E,EAAI,EAAGA,EAAIsI,EAAY,OAAQtI,IAAK,CAC5C,MAAMsH,EAASgB,EAAYtI,CAAC,EAC5BI,EAAOkH,EAAO,EAAE,EAAIA,CACrB,CACA,OAAOlH,CACR,CAYA,SAAS0O,GAAgB/J,EAAOuG,EAAU,CACzC,MAAMhE,EAASvC,EAAM,sBAAqB,EAAGuG,CAAQ,EACrD,OAAI,QAAQ,IAAI,WAAa,eAAiB,CAAChE,GAAQ,QAAQ,KAAK,2BAA2BgE,CAAQ,mBAAmB,EACnHhE,CACR,CCvKA,MAAMyH,GAAqB,CAC1B,sBAAuB,CAACxI,EAAWxB,IAAU,CAC5CuB,GAAoB,qBAAsBC,EAAWxB,EAAO,CAC3D,sBAAuB,CACtB,GAAKuC,GAAW2G,GAAsB3G,CAAM,EAC5C,SAAWA,GAAW,CAACA,EAAO,MAAM,QAAQ,OAAO,CACvD,EACG,sBAAuB,CACtB,GAAKA,GAAW4G,GAAsB5G,CAAM,EAC5C,SAAWA,GAAM,SAAK,QACrB7G,EAAA6G,EAAO,MAAM,MAAM,cAAnB,YAAA7G,EAAgC,OAChC2G,EAAAE,EAAO,MAAM,MAAM,WAAnB,YAAAF,EAA6B,MAC7BE,EAAO,MAAM,QAAQ,QACrBA,EAAO,MAAM,QAAQ,iBAC1B,EACA,CACA,CAAG,CACF,EACA,mBAAqBvC,GAAU,CAC9BqB,GAAgB,qBAAsBrB,EAAO,CAC5C,0BAA2B,CAC1B,GAAI,IAAMoJ,GAA0BpJ,CAAK,EACzC,SAAU,IAAM,CAACA,EAAM,QAAQ,aAAa,CAChD,EACG,oBAAqB,CACpB,GAAI,IAAMwJ,GAAoBxJ,CAAK,EACnC,SAAU,IAAM,CAACA,EAAM,QAAQ,OAAO,CAC1C,EACG,wBAAyB,CACxB,GAAI,IAAMyJ,GAAwBzJ,CAAK,EACvC,SAAU,IAAM,CAACA,EAAM,QAAQ,OAAO,CAC1C,EACG,4BAA6B,CAC5B,GAAI,IAAM0J,GAA4B1J,CAAK,EAC3C,SAAU,IAAM,CAACA,EAAM,QAAQ,OAAO,CAC1C,EACG,wBAAyB,CACxB,GAAI,IAAM4J,GAAwB5J,CAAK,EACvC,SAAU,IAAA,SAAM,QACftE,EAAAsE,EAAM,MAAM,cAAZ,YAAAtE,EAAyB,OACzB2G,EAAArC,EAAM,MAAM,WAAZ,YAAAqC,EAAsB,MACtBrC,EAAM,QAAQ,QACdA,EAAM,QAAQ,iBACnB,EACA,EACG,4BAA6B,CAC5B,GAAI,IAAM8J,GAA4B9J,CAAK,EAC3C,SAAU,IAAM,CAACA,EAAM,kBAAiB,CAAE,CAC9C,EACG,gBAAiB,CAAE,GAAKuG,GAAawD,GAAgB/J,EAAOuG,CAAQ,CAAC,CACxE,CAAG,CACF,CACD,ECrDA,SAAS0D,GAAmBvH,EAAQwH,EAAa,CAChD,QAASjP,EAAI,EAAGA,EAAIyH,EAAO,WAAW,OAAQzH,IAAKgP,GAAmBvH,EAAO,WAAWzH,CAAC,EAAGiP,CAAW,EACvGA,EAAY,KAAKxH,CAAM,CACxB,CAYA,SAASyH,GAAsBzH,EAAQ,CACtC,MAAMwH,EAAc,CAAA,EACpB,OAAAD,GAAmBvH,EAAQwH,CAAW,EAC/BA,CACR,CAWA,SAASE,GAAkB1H,EAAQ,CAClC,MAAO,CACN,OAAQA,EAAO,OACf,OAAAA,EACA,MAAOA,EAAO,OAAO,KACvB,CACA,CAYA,SAAS2H,GAAsBrK,EAAO,OACrC,KAAM,CAAE,MAAAgD,EAAO,IAAAK,KAAQ3H,EAAAsE,EAAM,MAAM,gBAAZ,YAAAtE,EAA2B,QAASkH,GAA4B,EACjFE,EAAa9C,EAAM,cAAa,EAChCuD,EAAc3B,EAAmB5B,EAAO,wBAAyBwD,EAA2B,EAClG,GAAI,CAACR,EAAM,QAAU,CAACK,EAAI,OAAQ,OAAOF,GAAkBL,EAAYS,EAAavD,CAAK,EACzF,MAAM+C,EAAkB/C,EAAM,sBAAqB,EAC7CsK,EAAc,CAAA,EACpB,QAASrP,EAAI,EAAGA,EAAI+H,EAAM,OAAQ/H,IAAK,CACtC,MAAMsH,EAASQ,EAAgBC,EAAM/H,CAAC,CAAC,EACnCsH,GAAUX,EAAmBW,EAAQ,eAAgBW,CAAmB,GAAGoH,EAAY,KAAK/H,CAAM,CACvG,CACA,MAAMgI,EAAe,CAAA,EACrB,QAAStP,EAAI,EAAGA,EAAIoI,EAAI,OAAQpI,IAAK,CACpC,MAAMsH,EAASQ,EAAgBM,EAAIpI,CAAC,CAAC,EACjCsH,GAAUX,EAAmBW,EAAQ,eAAgBW,CAAmB,GAAGqH,EAAa,KAAKhI,CAAM,CACxG,CACA,MAAMiI,EAAgBjH,EAAY,OAAQhB,GAAW,CAACS,EAAM,SAAST,EAAO,EAAE,GAAK,CAACc,EAAI,SAASd,EAAO,EAAE,CAAC,EAC3G,OAAOY,GAAkBL,EAAY,CACpC,GAAGwH,EACH,GAAGE,EACH,GAAGD,CACL,EAAIvK,CAAK,CACT,CAYA,SAASyK,GAAsBzK,EAAO,CACrC,MAAO,CAAC,GAAGA,EAAM,gBAAe,CAAE,EAAE,QAAO,CAC5C,CAYA,SAAS0K,GAAqB1K,EAAO,CACpC,MAAM8G,EAAe9G,EAAM,gBAAe,EACpC3E,EAAS,CAAA,EACf,QAASJ,EAAI,EAAGA,EAAI6L,EAAa,OAAQ7L,IAAK,CAC7C,MAAMyL,EAAUI,EAAa7L,CAAC,EAAE,QAChC,QAASuM,EAAI,EAAGA,EAAId,EAAQ,OAAQc,IAAKnM,EAAO,KAAKqL,EAAQc,CAAC,CAAC,CAChE,CACA,OAAOnM,CACR,CAYA,SAASsP,GAAqB3K,EAAO,OACpC,MAAM4K,IAAalP,EAAAsE,EAAM,gBAAe,EAAG,CAAC,IAAzB,YAAAtE,EAA4B,UAAW,CAAA,EACpDL,EAAS,CAAA,EACf,QAASJ,EAAI,EAAGA,EAAI2P,EAAW,OAAQ3P,IAAK,CAC3C,MAAMiP,EAAcU,EAAW3P,CAAC,EAAE,eAAc,EAChD,QAASuM,EAAI,EAAGA,EAAI0C,EAAY,OAAQ1C,IAAKnM,EAAO,KAAK6O,EAAY1C,CAAC,CAAC,CACxE,CACA,OAAOnM,CACR,CC3HA,MAAMwP,GAAqB,CAC1B,sBAAuB,CAACrJ,EAAWxB,IAAU,CAC5CuB,GAAoB,qBAAsBC,EAAWxB,EAAO,CAC3D,sBAAuB,CACtB,GAAK0C,GAAWyH,GAAsBzH,CAAM,EAC5C,SAAWA,GAAW,CAACA,EAAO,OAAO,MAAM,QAAQ,OAAO,CAC9D,EACG,kBAAmB,CAClB,GAAKA,GAAW0H,GAAkB1H,CAAM,EACxC,SAAWA,GAAW,CAACA,EAAO,OAAO,MAAM,QAAQ,OAAO,CAC9D,CACA,CAAG,CACF,EACA,mBAAqB1C,GAAU,CAC9BqB,GAAgB,qBAAsBrB,EAAO,CAC5C,sBAAuB,CACtB,GAAI,IAAMqK,GAAsBrK,CAAK,EACrC,SAAU,IAAA,aAAM,OACfA,EAAM,QAAQ,SACdtE,EAAAsE,EAAM,MAAM,cAAZ,YAAAtE,EAAyB,OACzB2G,EAAArC,EAAM,MAAM,WAAZ,YAAAqC,EAAsB,OACtByI,EAAA9K,EAAM,MAAM,gBAAZ,YAAA8K,EAA2B,OAC3BC,EAAA/K,EAAM,MAAM,mBAAZ,YAAA+K,EAA8B,MAC9B/K,EAAM,QAAQ,iBACnB,EACA,EACG,sBAAuB,CACtB,GAAI,IAAMyK,GAAsBzK,CAAK,EACrC,SAAU,IAAM,CAACA,EAAM,gBAAe,CAAE,CAC5C,EACG,qBAAsB,CACrB,GAAI,IAAM0K,GAAqB1K,CAAK,EACpC,SAAU,IAAM,CAACA,EAAM,gBAAe,CAAE,CAC5C,EACG,qBAAsB,CACrB,GAAI,IAAM2K,GAAqB3K,CAAK,EACpC,SAAU,IAAM,CAACA,EAAM,gBAAe,CAAE,CAC5C,CACA,CAAG,CACF,CACD,ECxCA,SAASgL,GAAgBhL,EAAO,SAC/B,GAAI,CAACA,EAAM,cAAe,CACzBA,EAAM,cAAgB,CAAE,MAAAA,CAAK,EAC7B,MAAMoC,EAAW,OAAO,OAAOpC,EAAM,SAAS,EAC9C,QAAS/E,EAAI,EAAGA,EAAImH,EAAS,OAAQnH,KAAKoH,GAAA3G,EAAA0G,EAASnH,CAAC,GAAE,qBAAZ,MAAAoH,EAAA,KAAA3G,EAAiCsE,EAAM,cAAeA,EACjG,CACA,OAAOA,EAAM,aACd,CAMA,MAAMiL,GAAe,CAACjL,EAAOwF,EAAI0F,EAAUC,EAAUzN,EAAO0N,EAASC,IAAa,CACjF,MAAMC,EAAeN,GAAgBhL,CAAK,EACpCgF,EAAM,OAAO,OAAOsG,CAAY,EACtCtG,EAAI,mBAAqB,GACzBA,EAAI,mBAAqBtI,EAAa,EACtCsI,EAAI,aAAetI,EAAa,EAChCsI,EAAI,MAAQtH,EACZsH,EAAI,GAAKQ,EACTR,EAAI,MAAQmG,EACZnG,EAAI,SAAWkG,EACflG,EAAI,SAAWqG,EACfrG,EAAI,QAAqB,CAAA,EACzB,MAAMrC,EAAU3C,EAAM,oBACtB,QAAS/E,EAAI,EAAGA,EAAI0H,EAAQ,OAAQ1H,IAAK0H,EAAQ1H,CAAC,EAAE+J,CAAG,EACvD,OAAOA,CACR,ECnBA,SAASuG,IAA+B,CACvC,MAAO,CAAA,CACR,CAuBA,SAASC,GAAyBxL,EAAO2F,EAAc,CACtD5H,GAAciC,EAAO,gBAAiEzD,EAAWyD,EAAM,aAAa,aAAa,GAAKuL,IAA8B,CACrK,CAiBA,SAASE,GAA6BzL,EAAO,CACvCA,EAAM,MAAM,gBACbA,EAAM,QAAQ,cAAgBA,EAAM,QAAQ,wBAA0B,KAAMA,EAAM,YAAY,SAAS,IAAMwL,GAAyBxL,CAAK,CAAC,CACjJ,CClCA,SAAS0L,GAAwB1L,EAAO,CAClCA,EAAM,MAAM,WACbA,EAAM,QAAQ,cAAgBA,EAAM,QAAQ,mBAAqB,CAACA,EAAM,QAAQ,kBAAiBA,EAAM,YAAY,SAAS,IAAM2L,GAAoB3L,CAAK,CAAC,CACjK,CAqDA,SAAS2L,GAAoB3L,EAAO2F,EAAc,CACjD,MAAMiG,EAAkB5L,EAAM,aAAa,SAC3CjC,GAAciC,EAAO,WAA6C4L,IAAoB,GAAO,GAAO,OAAO,OAAOlP,EAAa,EAAIH,EAAWqP,GAAmB,CAAA,CAAE,CAAC,CAAC,CACtK,CCrFA,MAAMC,GAAmB,EA+BzB,SAASC,GAAyB9L,EAAO,SACxC,GAAIA,EAAM,QAAQ,cAAgBA,EAAM,QAAQ,oBAAsB,CAACA,EAAM,QAAQ,iBAAkB,CACtG,MAAKqC,GAAA3G,EAAAsE,EAAM,MAAM,aAAZ,YAAAtE,EAAwB,QAAxB,YAAA2G,EAA+B,YAAawJ,MAAsBA,GAAkB,OACzFE,GAAqB/L,CAAW,CACjC,CACD,CAaA,SAASgM,GAAoBhM,EAAOlE,EAAS,CAC5CiC,GAAciC,EAAO,aAAclE,CAAO,CAC3C,CA4BA,SAASmQ,GAAmBjM,EAAOlE,EAAS,CAC3CkQ,GAAoBhM,EAAQ9C,GAAQ,CACnC,IAAIgP,EAAY7P,GAAiBP,EAASoB,EAAI,SAAS,EACvD,MAAMiP,EAAe,OAAOnM,EAAM,QAAQ,UAAc,KAAeA,EAAM,QAAQ,YAAc,GAAK,OAAO,iBAAmBA,EAAM,QAAQ,UAAY,EAC5J,OAAAkM,EAAY,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAWC,CAAY,CAAC,EAClD,CACN,GAAGjP,EACH,UAAAgP,CACH,CACC,CAAC,CACF,CAaA,SAASH,GAAqB/L,EAAO2F,EAAc,CAClDsG,GAAmBjM,EAAsB6L,EAA+E,CACzH,CC5EA,SAASO,GAAiBpM,EAAOlE,EAAS,CACzCiC,GAAciC,EAAO,UAAWlE,CAAO,CACxC,CAaA,SAASuQ,GAAmBrM,EAAO2F,EAAc,CAChDyG,GAAiBpM,EAA2BzD,EAAWyD,EAAM,aAAa,SAAW,CAAA,CAAE,CAAC,CACzF,CAYA,SAASsM,GAAuBtM,EAAO,CACjCA,EAAM,MAAM,UACbA,EAAM,QAAQ,cAAgBA,EAAM,QAAQ,kBAAoB,KAAOqM,GAAmBrM,CAAK,CACpG,CClDA,SAASuM,IAAqB,CAC7B,OAAQvM,GACAJ,GAAU,CAChB,QAAS,uBACT,MAAAI,EACA,OAAQ,wBACR,SAAU,IAAM,CAACA,EAAM,QAAQ,IAAI,EACnC,GAAI,IAAMwM,GAAoBxM,EAAOA,EAAM,QAAQ,IAAI,EACvD,cAAeT,GAAa,IAAM,CACjCmM,GAAwB1L,CAAK,EAC7B8L,GAAyB9L,CAAK,EAC9BsM,GAAuBtM,CAAK,EAC5ByL,GAA6BzL,CAAK,CACnC,CAAC,CACJ,CAAG,CAEH,CACA,SAASyM,GAAWzM,EAAO0M,EAAUC,EAAcjP,EAAQ,EAAGkP,EAAW,OACxE,MAAMC,EAAO,CAAA,EACb,QAAS5R,EAAI,EAAGA,EAAI0R,EAAa,OAAQ1R,IAAK,CAC7C,MAAMqN,EAAcqE,EAAa1R,CAAC,EAC5B+J,EAAMiG,GAAajL,EAAOA,EAAM,SAASsI,EAAarN,EAAG2R,CAAS,EAAGtE,EAAarN,EAAGyC,EAAO,OAAQkP,GAAA,YAAAA,EAAW,EAAE,EACvHF,EAAS,SAAS,KAAK1H,CAAG,EAC1B0H,EAAS,SAAS1H,EAAI,EAAE,EAAIA,EAC5B6H,EAAK,KAAK7H,CAAG,EACThF,EAAM,QAAQ,aACjBgF,EAAI,gBAAkBhF,EAAM,QAAQ,WAAWsI,EAAarN,CAAC,GACzDS,EAAAsJ,EAAI,kBAAJ,MAAAtJ,EAAqB,SAAQsJ,EAAI,QAAUyH,GAAWzM,EAAO0M,EAAU1H,EAAI,gBAAiBtH,EAAQ,EAAGsH,CAAG,GAEhH,CACA,OAAO6H,CACR,CACA,SAASL,GAAoBxM,EAAO8M,EAAM,CACzC,MAAMJ,EAAW,CAChB,KAAM,CAAA,EACN,SAAU,CAAA,EACV,SAAUhQ,EAAa,CACzB,EACC,OAAAgQ,EAAS,KAAOD,GAAWzM,EAAO0M,EAAUI,CAAI,EACzCJ,CACR,CCvCA,SAASK,GAAsB/M,EAAO,SACrC,OAAKA,EAAM,WAAW,eAAcA,EAAM,WAAW,eAAeqC,GAAA3G,EAAAsE,EAAM,QAAQ,UAAS,eAAvB,YAAAqC,EAAA,KAAA3G,EAAsCsE,KAAUuM,GAAkB,EAAGvM,CAAK,GACvIA,EAAM,WAAW,aAAY,CACrC,CAYA,SAASgN,GAA6BhN,EAAO,CAC5C,OAAOA,EAAM,gBAAe,CAC7B,CAaA,SAASiN,GAA0BjN,EAAO,SAEzC,OADKA,EAAM,WAAW,mBAAkBA,EAAM,WAAW,kBAAmBqC,GAAA3G,EAAAsE,EAAM,QAAQ,UAAS,mBAAvB,YAAAqC,EAAA,KAAA3G,EAA0CsE,IAClHA,EAAM,QAAQ,iBAAmB,CAACA,EAAM,WAAW,iBAAyBA,EAAM,uBAAsB,EACrGA,EAAM,WAAW,iBAAgB,CACzC,CAWA,SAASkN,GAA4BlN,EAAO,CAC3C,OAAOA,EAAM,oBAAmB,CACjC,CAYA,SAASmN,GAAyBnN,EAAO,SAExC,OADKA,EAAM,WAAW,kBAAiBA,EAAM,WAAW,iBAAkBqC,GAAA3G,EAAAsE,EAAM,QAAQ,UAAS,kBAAvB,YAAAqC,EAAA,KAAA3G,EAAyCsE,IAC/GA,EAAM,QAAQ,gBAAkB,CAACA,EAAM,WAAW,gBAAwBA,EAAM,sBAAqB,EAClGA,EAAM,WAAW,gBAAe,CACxC,CAWA,SAASoN,GAA2BpN,EAAO,CAC1C,OAAOA,EAAM,mBAAkB,CAChC,CAaA,SAASqN,GAAwBrN,EAAO,SAEvC,OADKA,EAAM,WAAW,iBAAgBA,EAAM,WAAW,gBAAiBqC,GAAA3G,EAAAsE,EAAM,QAAQ,UAAS,iBAAvB,YAAAqC,EAAA,KAAA3G,EAAwCsE,IAC5GA,EAAM,QAAQ,eAAiB,CAACA,EAAM,WAAW,eAAuBA,EAAM,qBAAoB,EAC/FA,EAAM,WAAW,eAAc,CACvC,CAWA,SAASsN,GAA6BtN,EAAO,CAC5C,OAAOA,EAAM,kBAAiB,CAC/B,CAYA,SAASuN,GAA0BvN,EAAO,SAEzC,OADKA,EAAM,WAAW,mBAAkBA,EAAM,WAAW,kBAAmBqC,GAAA3G,EAAAsE,EAAM,QAAQ,UAAS,mBAAvB,YAAAqC,EAAA,KAAA3G,EAA0CsE,IAClHA,EAAM,QAAQ,iBAAmB,CAACA,EAAM,WAAW,iBAAyBA,EAAM,uBAAsB,EACrGA,EAAM,WAAW,iBAAgB,CACzC,CAYA,SAASwN,GAA8BxN,EAAO,CAC7C,OAAOA,EAAM,oBAAmB,CACjC,CAaA,SAASyN,GAA2BzN,EAAO,SAE1C,OADKA,EAAM,WAAW,oBAAmBA,EAAM,WAAW,mBAAoBqC,GAAA3G,EAAAsE,EAAM,QAAQ,UAAS,oBAAvB,YAAAqC,EAAA,KAAA3G,EAA2CsE,IACrHA,EAAM,QAAQ,kBAAoB,CAACA,EAAM,WAAW,kBAA0BA,EAAM,wBAAuB,EACxGA,EAAM,WAAW,kBAAiB,CAC1C,CAYA,SAAS0N,GAAkB1N,EAAO,CACjC,OAAOA,EAAM,qBAAoB,CAClC,CC9KA,MAAM2N,GAAuB,CAAE,mBAAqB3N,GAAU,CAC7DqB,GAAgB,uBAAwBrB,EAAO,CAC9C,sBAAuB,CAAE,GAAI,IAAM+M,GAAsB/M,CAAK,CAAC,EAC/D,6BAA8B,CAAE,GAAI,IAAMgN,GAA6BhN,CAAK,CAAC,EAC7E,0BAA2B,CAAE,GAAI,IAAMiN,GAA0BjN,CAAK,CAAC,EACvE,4BAA6B,CAAE,GAAI,IAAMkN,GAA4BlN,CAAK,CAAC,EAC3E,yBAA0B,CAAE,GAAI,IAAMmN,GAAyBnN,CAAK,CAAC,EACrE,2BAA4B,CAAE,GAAI,IAAMoN,GAA2BpN,CAAK,CAAC,EACzE,wBAAyB,CAAE,GAAI,IAAMqN,GAAwBrN,CAAK,CAAC,EACnE,6BAA8B,CAAE,GAAI,IAAMsN,GAA6BtN,CAAK,CAAC,EAC7E,0BAA2B,CAAE,GAAI,IAAMuN,GAA0BvN,CAAK,CAAC,EACvE,8BAA+B,CAAE,GAAI,IAAMwN,GAA8BxN,CAAK,CAAC,EAC/E,2BAA4B,CAAE,GAAI,IAAMyN,GAA2BzN,CAAK,CAAC,EACzE,kBAAmB,CAAE,GAAI,IAAM0N,GAAkB1N,CAAK,CAAC,CACzD,CAAE,CACF,CAAC,ECjBD,SAAS4N,GAAiB5N,EAAO,SAChC,GAAI,CAACA,EAAM,eAAgB,CAC1BA,EAAM,eAAiB,CAAE,MAAAA,CAAK,EAC9B,MAAMoC,EAAW,OAAO,OAAOpC,EAAM,SAAS,EAC9C,QAAS/E,EAAI,EAAGA,EAAImH,EAAS,OAAQnH,KAAKoH,GAAA3G,EAAA0G,EAASnH,CAAC,GAAE,sBAAZ,MAAAoH,EAAA,KAAA3G,EAAkCsE,EAAM,eAAgBA,EACnG,CACA,OAAOA,EAAM,cACd,CAMA,SAAS6N,GAActL,EAAQyC,EAAKhF,EAAO,CAC1C,MAAM8N,EAAgBF,GAAiB5N,CAAK,EACtC+B,EAAO,OAAO,OAAO+L,CAAa,EACxC/L,EAAK,OAASQ,EACdR,EAAK,GAAK,GAAGiD,EAAI,EAAE,IAAIzC,EAAO,EAAE,GAChCR,EAAK,IAAMiD,EACX,MAAMrC,EAAU3C,EAAM,qBACtB,QAAS,EAAI,EAAG,EAAI2C,EAAQ,OAAQ,IAAKA,EAAQ,CAAC,EAAEZ,CAAI,EACxD,OAAOA,CACR,CCnBA,SAASgM,GAAoB/I,EAAK,CACjC,MAAM6H,EAAO7H,EAAI,MAAM,sBAAqB,EACtCgJ,EAAehJ,EAAI,mBACzB,OAAO6H,EAAKmB,CAAY,IAAMhJ,EAAMgJ,EAAe,EACpD,CASA,SAASC,GAA4BjO,EAAO,CAC3C,MAAM6M,EAAO7M,EAAM,wBAAuB,EAAG,KAC7C,GAAIA,EAAM,QAAQ,uBAAyB,GAAO,CACjD,MAAMkO,EAAc,CAAA,EACdC,EAAanJ,GAAQ,OAC1BA,EAAI,mBAAqBkJ,EAAY,OACrCA,EAAY,KAAKlJ,CAAG,EAChBA,EAAI,QAAQ,UAAUtJ,EAAAsJ,EAAI,gBAAJ,MAAAtJ,EAAA,KAAAsJ,KAAuBA,EAAI,QAAQ,QAAQmJ,CAAS,CAC/E,EACA,OAAAtB,EAAK,QAAQsB,CAAS,EACfD,CACR,CACA,QAASjT,EAAI,EAAGA,EAAI4R,EAAK,OAAQ5R,IAAK4R,EAAK5R,CAAC,EAAE,mBAAqBA,EACnE,OAAO4R,CACR,CAYA,SAASuB,GAAapJ,EAAKuB,EAAU,CACpC,GAAIzJ,GAAOkI,EAAI,aAAcuB,CAAQ,EAAG,OAAOvB,EAAI,aAAauB,CAAQ,EACxE,MAAMhE,EAASyC,EAAI,MAAM,UAAUuB,CAAQ,EAC3C,GAAKhE,GAAA,MAAAA,EAAQ,WACb,OAAAyC,EAAI,aAAauB,CAAQ,EAAIhE,EAAO,WAAWyC,EAAI,SAAUA,EAAI,KAAK,EAC/DA,EAAI,aAAauB,CAAQ,CACjC,CAYA,SAAS8H,GAAoBrJ,EAAKuB,EAAU,CAC3C,GAAIzJ,GAAOkI,EAAI,mBAAoBuB,CAAQ,EAAG,OAAOvB,EAAI,mBAAmBuB,CAAQ,EACpF,MAAMhE,EAASyC,EAAI,MAAM,UAAUuB,CAAQ,EAC3C,GAAKhE,GAAA,MAAAA,EAAQ,WACb,OAAKA,EAAO,UAAU,iBAItByC,EAAI,mBAAmBuB,CAAQ,EAAIhE,EAAO,UAAU,gBAAgByC,EAAI,SAAUA,EAAI,KAAK,EACpFA,EAAI,mBAAmBuB,CAAQ,IAJrCvB,EAAI,mBAAmBuB,CAAQ,EAAI,CAACvB,EAAI,SAASuB,CAAQ,CAAC,EACnDvB,EAAI,mBAAmBuB,CAAQ,EAIxC,CAYA,SAAS+H,GAAgBtJ,EAAKuB,EAAU,CACvC,OAAOvB,EAAI,SAASuB,CAAQ,GAAKvB,EAAI,MAAM,QAAQ,mBACpD,CAWA,SAASuJ,GAAgBvJ,EAAK,CAC7B,OAAO3G,GAAU2G,EAAI,QAAUnB,GAAMA,EAAE,OAAO,CAC/C,CAKA,SAAS2K,GAAwBxO,EAAO,CACvC,MAAM6M,EAAO7M,EAAM,gBAAe,EAAG,SACrC,IAAImG,EAAW,EACf,QAASlL,EAAI,EAAGA,EAAI4R,EAAK,OAAQ5R,IAAKkL,EAAW,KAAK,IAAIA,EAAU0G,EAAK5R,CAAC,EAAE,KAAK,EACjF,OAAOkL,CACR,CAYA,SAASsI,GAAiBzJ,EAAK,CAC9B,GAAKA,EAAI,SACT,OAAOA,EAAI,MAAM,gBAAe,EAAG,SAASA,EAAI,QAAQ,GAAKA,EAAI,MAAM,OAAOA,EAAI,SAAU,EAAI,CACjG,CAWA,SAAS0J,GAAkB1J,EAAK,CAC/B,MAAM2J,EAAa,CAAA,EACnB,IAAIC,EAAa5J,EACjB,OAAa,CACZ,MAAM4H,EAAYgC,EAAW,aAAY,EACzC,GAAI,CAAChC,EAAW,MAChB+B,EAAW,KAAK/B,CAAS,EACzBgC,EAAahC,CACd,CACA,OAAO+B,EAAW,QAAO,CAC1B,CAYA,SAASE,GAAgB7J,EAAK,CAC7B,MAAMkB,EAAUlB,EAAI,MAAM,kBAAiB,EAC3C,IAAI8J,EAAQ9J,EAAI,YACX8J,IAAOA,EAAQ9J,EAAI,YAA8B,IAAI,SAC1D,MAAM+J,EAAQ,IAAI,MAAM7I,EAAQ,MAAM,EACtC,QAASjL,EAAI,EAAGA,EAAIiL,EAAQ,OAAQjL,IAAK,CACxC,MAAMsH,EAAS2D,EAAQjL,CAAC,EACxB,IAAI8G,EAAO+M,EAAM,IAAIvM,CAAM,EACtBR,IACJA,EAAO8L,GAActL,EAAQyC,EAAKA,EAAI,KAAK,EAC3C8J,EAAM,IAAIvM,EAAQR,CAAI,GAEvBgN,EAAM9T,CAAC,EAAI8G,CACZ,CACA,OAAOgN,CACR,CAWA,SAASC,GAA0BhK,EAAK,CACvC,MAAM3J,EAASqB,EAAa,EACtBqS,EAAQ/J,EAAI,YAAW,EAC7B,QAAS/J,EAAI,EAAGA,EAAI8T,EAAM,OAAQ9T,IAAK,CACtC,MAAM8G,EAAOgN,EAAM9T,CAAC,EACpBI,EAAO0G,EAAK,OAAO,EAAE,EAAIA,CAC1B,CACA,OAAO1G,CACR,CAYA,SAAS4T,GAAe3G,EAAatI,EAAOkP,EAAOjH,EAAQ,SAC1D,QAAO5F,GAAA3G,EAAAsE,EAAM,SAAQ,WAAd,YAAAqC,EAAA,KAAA3G,EAAyB4M,EAAa4G,EAAOjH,MAAYA,EAAS,GAAGA,EAAO,EAAE,IAAIiH,CAAK,GAAK,OAAOA,CAAK,EAChH,CAYA,SAASC,GAAanP,EAAOoP,EAAOC,EAAW,CAC9C,IAAIrK,GAAOqK,EAAYrP,EAAM,0BAA4BA,EAAM,YAAW,GAAI,SAASoP,CAAK,EAC5F,GAAI,CAACpK,IACJA,EAAMhF,EAAM,kBAAkB,SAASoP,CAAK,EACxC,CAACpK,GACJ,MAAI,QAAQ,IAAI,WAAa,cAAqB,IAAI,MAAM,sCAAsCoK,CAAK,EAAE,EACnG,IAAI,MAGZ,OAAOpK,CACR,CC/NA,MAAMsK,GAAkB,CACvB,mBAAoB,CAAC9N,EAAWxB,IAAU,CACzCuB,GAAoB,kBAAmBC,EAAWxB,EAAO,CACxD,oBAAqB,CAAE,GAAKgF,GAAQ+I,GAAoB/I,CAAG,CAAC,EAC5D,0BAA2B,CAC1B,GAAKA,GAAQgK,GAA0BhK,CAAG,EAC1C,SAAWA,GAAQ,CAACA,EAAI,YAAW,CAAE,CACzC,EACG,gBAAiB,CAChB,GAAKA,GAAQ6J,GAAgB7J,CAAG,EAChC,SAAWA,GAAQ,CAACA,EAAI,MAAM,kBAAiB,CAAE,CACrD,EACG,gBAAiB,CAChB,GAAKA,GAAQuJ,GAAgBvJ,CAAG,EAChC,SAAWA,GAAQ,CAACA,EAAI,OAAO,CACnC,EACG,iBAAkB,CAAE,GAAKA,GAAQyJ,GAAiBzJ,CAAG,CAAC,EACtD,kBAAmB,CAAE,GAAKA,GAAQ0J,GAAkB1J,CAAG,CAAC,EACxD,oBAAqB,CAAE,GAAI,CAACA,EAAKuB,IAAa8H,GAAoBrJ,EAAKuB,CAAQ,CAAC,EAChF,aAAc,CAAE,GAAI,CAACvB,EAAKuB,IAAa6H,GAAapJ,EAAKuB,CAAQ,CAAC,EAClE,gBAAiB,CAAE,GAAI,CAACvB,EAAKuB,IAAa+H,GAAgBtJ,EAAKuB,CAAQ,CAAC,CAC3E,CAAG,CACF,EACA,mBAAqBvG,GAAU,CAC9BqB,GAAgB,kBAAmBrB,EAAO,CACzC,4BAA6B,CAC5B,GAAI,IAAMiO,GAA4BjO,CAAK,EAC3C,SAAU,IAAA,OAAM,OACfA,EAAM,wBAAuB,EAAG,KAChCA,EAAM,QAAQ,qBACdA,EAAM,QAAQ,uBAAyB,IAAQtE,EAAAsE,EAAM,MAAM,WAAZ,YAAAtE,EAAsB,MAAQ,MAClF,EACA,EACG,eAAgB,CAAE,GAAI,CAAC4M,EAAa4G,EAAOjH,IAAWgH,GAAe3G,EAAatI,EAAOkP,EAAOjH,CAAM,CAAC,EACvG,aAAc,CAAE,GAAI,CAACzC,EAAI6J,IAAcF,GAAanP,EAAOwF,EAAI6J,CAAS,CAAC,EACzE,wBAAyB,CACxB,GAAI,IAAMb,GAAwBxO,CAAK,EACvC,SAAU,IAAM,CAACA,EAAM,gBAAe,CAAE,CAC5C,CACA,CAAG,CACF,CACD,ECzBA,SAASuP,GAAmCvP,EAAOwP,EAAeC,EAAU,CAACC,EAAcC,IAAkBD,IAAiBC,EAAe,CAC5I,MAAMC,EAAQJ,IAAkB,OAASxP,EAAM,QAAQ,MAAQwP,EAC/DxP,EAAM,YAAY,MAAM,IAAM,CAC7B,GAAI4P,EAAO,UAAWtU,KAAOsU,EAAO,CACnC,MAAMC,EAAW7P,EAAM,UAAU1E,CAAG,EACpC,GAAI,CAACuU,EAAU,SACf,MAAMC,EAAmBF,EAAMtU,CAAG,EAC5BqU,EAAgBG,IAAqB,OAAS9P,EAAM,aAAa1E,CAAG,EAAIwU,EACzEL,EAAQzP,EAAM,YAAY,QAAQ,IAAM6P,EAAS,IAAG,CAAE,EAAGF,CAAa,GAAGE,EAAS,IAAI,IAAMF,CAAa,CAC/G,CACD,CAAC,CACF,CAQA,SAASI,GAA2B/P,EAAO4P,EAAOH,EAAU,CAACC,EAAcC,IAAkBD,IAAiBC,EAAe,CAC5H3P,EAAM,YAAY,MAAM,IAAM,SAC7BuP,GAAmCvP,EAAO4P,EAAOH,CAAO,GACxDpN,GAAA3G,EAAAsE,EAAM,aAAY,SAAlB,MAAAqC,EAAA,KAAA3G,EACD,CAAC,CACF,CAaA,SAASsU,GAAYhQ,EAAO,SAC3B,MAAMiQ,EAAO1T,EAAWyD,EAAM,YAAY,EAC1CA,EAAM,YAAY,MAAM,IAAM,CAC7B,MAAM7E,EAAO,OAAO,KAAK8U,CAAI,EAC7B,QAAS,EAAI,EAAG,EAAI9U,EAAK,OAAQ,IAAK,CACrC,MAAMG,EAAMH,EAAK,CAAC,EAClB6E,EAAM,UAAU1E,CAAG,EAAE,IAAI2U,EAAK3U,CAAG,CAAC,CACnC,CACD,CAAC,EACD,MAAM8G,EAAW,OAAO,OAAOpC,EAAM,SAAS,EAC9C,QAAS/E,EAAI,EAAGA,EAAImH,EAAS,OAAQnH,KAAKoH,GAAA3G,EAAA0G,EAASnH,CAAC,GAAE,yBAAZ,MAAAoH,EAAA,KAAA3G,EAAqCsE,EAChF,CAcA,SAASkQ,GAAmBlQ,EAAOmQ,EAAY,CAC9C,KAAM,CAAE,SAAA/N,EAAU,MAAAgO,EAAO,aAAAC,CAAY,EAAKrQ,EAAM,QAChD,GAAI,CAACA,EAAM,QAAQ,aAAc,MAAO,CACvC,GAAGA,EAAM,QACT,GAAGmQ,EACH,SAAA/N,EACA,MAAAgO,EACA,aAAAC,CACF,EACC,MAAMC,EAAgBtQ,EAAM,QAAQ,aAAaA,EAAM,QAASmQ,CAAU,EACpEI,EAAc,CAAE,GAAG,OAAO,0BAA0BD,CAAa,CAAC,EACxE,OAAO,OAAO,iBAAiB,OAAO,OAAO,OAAO,eAAeA,CAAa,CAAC,EAAG,CACnF,GAAGC,EACH,SAAU,CACT,MAAOnO,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EACb,EACE,MAAO,CACN,MAAOgO,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EACb,EACE,aAAc,CACb,MAAOC,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EACb,CACA,CAAE,CACF,CAaA,SAASG,GAAiBxQ,EAAOlE,EAAS0G,EAAS,CAClD,MAAM8N,EAAgBJ,GAAmBlQ,EAAO3D,GAAiBP,EAASkE,EAAM,OAAO,CAAC,EACpFA,EAAM,aAAcA,EAAM,aAAa,IAAI,IAAMsQ,CAAa,EAC7DtQ,EAAM,QAAUsQ,EACqBP,GAA2B/P,EAAOsQ,EAAc,OAAS,IAAI,CACxG,CChIA,MAAMG,GAAoB,CAAE,mBAAqBzQ,GAAU,CAC1DqB,GAAgB,oBAAqBrB,EAAO,CAC3C,YAAa,CAAE,GAAI,IAAMgQ,GAAYhQ,CAAK,CAAC,EAC3C,iBAAkB,CAAE,GAAKlE,GAAY0U,GAAiBxQ,EAAOlE,CAAO,CAAC,CACvE,CAAE,CACF,CAAC,ECCK4U,GAAe,CACpB,iBAAAxO,GACA,mBAAA8H,GACA,mBAAAa,GACA,qBAAA8C,GACA,gBAAA2B,GACA,kBAAAmB,EACD,ECTA,SAASE,GAAYC,EAAM,CAC1B,MAAMC,EAAQD,EACd,cAAO,eAAeA,EAAM,QAAS,CAAE,KAAM,CAC5C,OAAOA,EAAK,IAAG,CAChB,EAAG,EACC,QAASA,IAAMC,EAAM,SAAWD,EAAK,IAAI,KAAKA,CAAI,GAC/CC,CACR,CCjBA,SAASC,GAAQC,EAAMC,EAAM,CAC5B,GAAI,OAAO,GAAGD,EAAMC,CAAI,EAAG,MAAO,GAClC,GAAI,OAAOD,GAAS,UAAYA,IAAS,MAAQ,OAAOC,GAAS,UAAYA,IAAS,KAAM,MAAO,GACnG,GAAID,aAAgB,KAAOC,aAAgB,IAAK,CAC/C,GAAID,EAAK,OAASC,EAAK,KAAM,MAAO,GACpC,SAAW,CAACC,EAAG/V,CAAC,IAAK6V,EAAM,GAAI,CAACC,EAAK,IAAIC,CAAC,GAAK,CAAC,OAAO,GAAG/V,EAAG8V,EAAK,IAAIC,CAAC,CAAC,EAAG,MAAO,GAClF,MAAO,EACR,CACA,GAAIF,aAAgB,KAAOC,aAAgB,IAAK,CAC/C,GAAID,EAAK,OAASC,EAAK,KAAM,MAAO,GACpC,UAAW9V,KAAK6V,EAAM,GAAI,CAACC,EAAK,IAAI9V,CAAC,EAAG,MAAO,GAC/C,MAAO,EACR,CACA,GAAI6V,aAAgB,MAAQC,aAAgB,KAC3C,OAAID,EAAK,QAAO,IAAOC,EAAK,QAAO,EAGpC,MAAMrT,EAAQuT,GAAWH,CAAI,EAC7B,GAAIpT,EAAM,SAAWuT,GAAWF,CAAI,EAAE,OAAQ,MAAO,GACrD,QAAS/V,EAAI,EAAGA,EAAI0C,EAAM,OAAQ1C,IAAK,GAAI,CAAC,OAAO,UAAU,eAAe,KAAK+V,EAAMrT,EAAM1C,CAAC,CAAC,GAAK,CAAC,OAAO,GAAG8V,EAAKpT,EAAM1C,CAAC,CAAC,EAAG+V,EAAKrT,EAAM1C,CAAC,CAAC,CAAC,EAAG,MAAO,GACvJ,MAAO,EACR,CACA,SAASiW,GAAWnU,EAAK,CACxB,OAAO,OAAO,KAAKA,CAAG,EAAE,OAAO,OAAO,sBAAsBA,CAAG,CAAC,CACjE,CCbA,SAASoU,GAAqB/O,EAAUiO,EAAe,GAAI,CAC1D,cAAO,OAAOjO,CAAQ,EAAE,QAASvC,GAAY,OAC5CwQ,IAAe3U,EAAAmE,EAAQ,kBAAR,YAAAnE,EAAA,KAAAmE,EAA0BwQ,KAAiBA,CAC3D,CAAC,EACM9T,EAAW8T,CAAY,CAC/B,CAMA,SAASe,GAAeC,EAAc,SACrC,MAAMC,EAAcD,EAAa,SAAS,sBACpC,CAAE,eAAAE,EAAgB,WAAYC,EAAa,aAAAC,EAAc,iBAAAC,EAAkB,oBAAAC,EAAqB,gBAAAC,EAAiB,oBAAAC,EAAqB,UAAAC,EAAW,WAAYC,EAAa,iBAAAC,EAAkB,gBAAAC,EAAiB,kBAAAC,EAAmB,QAAAC,EAAS,eAAAC,EAAgB,UAAWC,EAAY,GAAGjQ,GAAaiP,EAAa,SAC7SrR,EAAQ,CACb,qBAAsB,CAAA,EACtB,uBAAwB,CAAA,EACxB,UAAW,CACV,GAAG0Q,GACH,GAAGtO,CACN,EACE,4BAA6B,CAAA,EAC7B,uBAAwB,CAAA,EACxB,YAAAkP,EACA,oBAAqB,CAAA,EACrB,aAAc,CACb,eAAAC,EACA,UAAAO,EACA,QAAAK,CACH,EACE,WAAY,CAAA,EACZ,MAAO,CAAA,EACP,UAAW,CAAA,CACb,EACOG,EAAe,OAAO,OAAOtS,EAAM,SAAS,EAC5CsQ,EAAgB,CACrB,GAAGgC,EAAa,OAAO,CAACvV,EAAK8C,IAAY,OACxC,OAAO,OAAO,OAAO9C,GAAKrB,EAAAmE,EAAQ,yBAAR,YAAAnE,EAAA,KAAAmE,EAAiCG,EAAM,CAClE,EAAG,CAAA,CAAE,EACL,GAAGqR,CACL,EACC,GAAIC,EAAY,mBAAqBhB,EAAc,MAAO,SAAW,CAACiC,EAASC,CAAK,IAAK,OAAO,QAAQlC,EAAc,KAAK,EAAG,CAC7H,MAAMM,EAAO4B,EACPC,EAAcnB,EAAY,mBAAmBV,EAAK,IAAG,EAAI,CAAE,UAAW,gBAAgB2B,CAAO,EAAE,CAAE,EACvGjC,EAAc,MAAMiC,CAAO,EAAIE,EAC/B,IAAIC,EAAe,GACnB,MAAMC,GAAuB/B,EAAK,UAAWrV,GAAU,CAClDmX,GACJD,EAAY,IAAIlX,CAAK,CACtB,CAAC,EACKqX,GAAuBH,EAAY,UAAWlX,GAAU,CAC7DmX,EAAe,GACf9B,EAAK,IAAIrV,CAAK,EACdmX,EAAe,EAChB,CAAC,EACDpB,EAAY,gBAAgBqB,EAAoB,EAChDrB,EAAY,gBAAgBsB,EAAoB,CACjD,CACItB,EAAY,oBACftR,EAAM,aAAesR,EAAY,mBAAmBhB,EAAe,CAAE,UAAW,qBAAsB,EACtG,OAAO,eAAetQ,EAAO,UAAW,CACvC,aAAc,GACd,WAAY,GACZ,KAAM,CACL,OAAOA,EAAM,aAAa,IAAG,CAC9B,EACA,IAAIzE,EAAO,CACVyE,EAAM,aAAa,IAAI,IAAMzE,CAAK,CACnC,CACH,CAAG,GACKyE,EAAM,QAAUsQ,EACvBtQ,EAAM,aAAemR,GAAqBnR,EAAM,UAAWA,EAAM,QAAQ,YAAY,EACrF,MAAM6S,EAAY,OAAO,KAAK7S,EAAM,YAAY,EAChD,QAAS/E,EAAI,EAAGA,EAAI4X,EAAU,OAAQ5X,IAAK,CAC1C,MAAMK,EAAMuX,EAAU5X,CAAC,EACvB+E,EAAM,UAAU1E,CAAG,EAAIgW,EAAY,mBAAmBtR,EAAM,aAAa1E,CAAG,EAAG,CAAE,UAAW,mBAAmBA,CAAG,EAAE,CAAE,EACtH0E,EAAM,MAAM1E,CAAG,EAAIgW,EAAY,mBAAmB,IAAM,QACvD,MAAM9O,EAAUxC,EAAM,QAChB8S,GAAepX,GAAA8G,EAAQ,QAAR,YAAA9G,GAAgBJ,GAC/ByX,EAAgBD,EAAeA,EAAa,IAAG,EAAK9S,EAAM,UAAU1E,CAAG,EAAE,IAAG,EAClF,GAAIwX,EAAc,OAAOC,EACzB,MAAMC,GAAkBxQ,EAAQ,MAChC,GAAIwQ,IAAmBlW,GAAOkW,GAAiB1X,CAAG,EAAG,CACpD,MAAM2X,EAAkBD,GAAgB1X,CAAG,EAC3C,OAAO2X,IAAoB,OAASjT,EAAM,aAAa1E,CAAG,EAAI2X,CAC/D,CACA,OAAOF,CACR,EAAG,CAAE,UAAW,eAAezX,CAAG,EAAE,CAAE,CACvC,CACAiU,GAAmCvP,CAAK,EACxCA,EAAM,MAAQ2Q,GAAYW,EAAY,mBAAmB,IAAM,CAC9D,MAAM4B,EAAW,CAAA,EACjB,QAASjY,EAAI,EAAGA,EAAI4X,EAAU,OAAQ5X,IAAK,CAC1C,MAAMK,EAAMuX,EAAU5X,CAAC,EACvBiY,EAAS5X,CAAG,EAAI0E,EAAM,MAAM1E,CAAG,EAAE,IAAG,CACrC,CACA,OAAO4X,CACR,EAAG,CACF,QAASpC,GACT,UAAW,aACb,CAAE,CAAC,EACF,QAAS7V,EAAI,EAAGA,EAAIqX,EAAa,OAAQrX,IAAK,CAC7C,MAAM4E,EAAUyS,EAAarX,CAAC,GAC9BS,EAAAmE,EAAQ,wBAAR,MAAAnE,EAAA,KAAAmE,EAAgCG,GAC5BH,EAAQ,sBAAsBG,EAAM,qBAAqB,KAAKH,EAAQ,qBAAqB,KAAKA,CAAO,CAAC,EACxGA,EAAQ,wBAAwBG,EAAM,uBAAuB,KAAKH,EAAQ,uBAAuB,KAAKA,CAAO,CAAC,EAC9GA,EAAQ,6BAA6BG,EAAM,4BAA4B,KAAKH,EAAQ,4BAA4B,KAAKA,CAAO,CAAC,EAC7HA,EAAQ,wBAAwBG,EAAM,uBAAuB,KAAKH,EAAQ,uBAAuB,KAAKA,CAAO,CAAC,EAC9GA,EAAQ,qBAAqBG,EAAM,oBAAoB,KAAKH,EAAQ,oBAAoB,KAAKA,CAAO,CAAC,GACzGwC,EAAAxC,EAAQ,qBAAR,MAAAwC,EAAA,KAAAxC,EAA6BG,EAC9B,CACA,GAAI,QAAQ,IAAI,WAAa,gBAAkBqR,EAAa,UAAYA,EAAa,YAAa,CACjG,MAAMjP,EAAW,OAAO,KAAKpC,EAAM,SAAS,EACtCmT,EAAY,OAAO,QAAQ,CAChC,aAAA1B,EACA,iBAAAO,EACA,gBAAAC,EACA,eAAAG,EACA,iBAAAV,EACA,kBAAAQ,EACA,gBAAAN,EACA,oBAAAD,EACA,oBAAAE,CACH,CAAG,EAAE,OAAO,CAAC,CAAA,CAAGuB,CAAO,IAAMA,CAAO,EAAE,IAAI,CAAC,CAAC9X,CAAG,IAAMA,CAAG,EAChD+X,EAAS,OAAO,KAAKrT,EAAM,YAAY,EAC7C,QAAQ,IAAI;AAAA;AAAA,gBAEEoC,EAAS,KAAK;AAAA,eAAkB,CAAC;AAAA;AAAA,gBAEjC+Q,EAAU,OAASA,EAAU,KAAK;AAAA,eAAkB,EAAI,QAAQ;AAAA;AAAA,gBAEhEE,EAAO,KAAK;AAAA,eAAkB,CAAC;AAAA,EAAM,CAAE,MAAArT,EAAO,CAC7D,CACA,OAAOA,CACR,CCnIA,SAASsT,IAA8B,CACtC,OAAO5W,EAAa,CACrB,CAaA,SAAS6W,IAAkC,CAC1C,MAAO,CACN,KAAM,IACN,QAAS,GACT,QAAS,OAAO,gBAClB,CACA,CAYA,SAASC,GAAejR,EAAQ,OAC/B,MAAMkR,EAAeF,GAA+B,EAC9CG,GAAehY,EAAA6G,EAAO,MAAM,MAAM,eAAnB,YAAA7G,EAAiC,MAChDiY,EAAaD,GAAgB5W,GAAO4W,EAAcnR,EAAO,EAAE,EAAImR,EAAanR,EAAO,EAAE,EAAI,OAC/F,OAAO,KAAK,IAAI,KAAK,IAAIA,EAAO,UAAU,SAAWkR,EAAa,QAASE,GAAcpR,EAAO,UAAU,MAAQkR,EAAa,IAAI,EAAGlR,EAAO,UAAU,SAAWkR,EAAa,OAAO,CACvL,CACA,SAASG,GAAmB1N,EAAS,CACpC,MAAM2N,EAASnX,EAAa,EACtBoX,EAASpX,EAAa,EACtBqX,EAAQ,IAAI,MAAM7N,EAAQ,MAAM,EACtC,IAAIlD,EAAQ,EACZ,QAAS,EAAI,EAAG,EAAIkD,EAAQ,OAAQ,IAAK,CACxC,MAAM3D,EAAS2D,EAAQ,CAAC,EAClB8N,EAAOpS,EAAmBW,EAAQ,UAAWiR,EAAc,EACjEO,EAAM,CAAC,EAAIC,EACXH,EAAOtR,EAAO,EAAE,EAAIS,EACpBA,GAASgR,CACV,CACA,IAAIC,EAAQ,EACZ,QAAS,EAAI/N,EAAQ,OAAS,EAAG,GAAK,EAAG,IACxC4N,EAAO5N,EAAQ,CAAC,EAAE,EAAE,EAAI+N,EACxBA,GAASF,EAAM,CAAC,EAEjB,MAAO,CACN,OAAAF,EACA,OAAAC,CACF,CACA,CAcA,SAASI,GAAuBlU,EAAO,CACtC,MAAO,CACN,IAAK4T,GAAmB3P,GAAkCjE,CAAK,CAAC,EAChE,OAAQ4T,GAAmB3P,GAAkCjE,EAAO,QAAQ,CAAC,EAC7E,MAAO4T,GAAmB3P,GAAkCjE,EAAO,OAAO,CAAC,EAC3E,IAAK4T,GAAmB3P,GAAkCjE,EAAO,KAAK,CAAC,CACzE,CACA,CACA,SAASmU,GAAajQ,EAAU,CAC/B,OAAOA,IAAa,QAAU,QAAUA,IAAa,MAAQ,MAAQA,IAAa,SAAW,SAAW,KACzG,CAgBA,SAASkQ,GAAgB7R,EAAQ2B,EAAU,CAC1C,OAAOtC,EAAmBW,EAAO,MAAO,mBAAoB2R,EAAsB,EAAEC,GAAajQ,CAAQ,CAAC,EAAE,OAAO3B,EAAO,EAAE,GAAK,CAClI,CAYA,SAAS8R,GAAgB9R,EAAQ2B,EAAU,CAC1C,OAAOtC,EAAmBW,EAAO,MAAO,mBAAoB2R,EAAsB,EAAEC,GAAajQ,CAAQ,CAAC,EAAE,OAAO3B,EAAO,EAAE,GAAK,CAClI,CAYA,SAAS+R,GAAiB/R,EAAQ,CACjCgS,GAAsBhS,EAAO,MAAQrF,GAAQ,CAC5C,MAAMsX,EAAO9X,EAAa,EACpB+X,EAAY,OAAO,KAAKvX,CAAG,EACjC,QAASjC,EAAI,EAAGA,EAAIwZ,EAAU,OAAQxZ,IAAK,CAC1C,MAAMsL,EAAWkO,EAAUxZ,CAAC,EACxBsL,IAAahE,EAAO,KAAIiS,EAAKjO,CAAQ,EAAIrJ,EAAIqJ,CAAQ,EAC1D,CACA,OAAOiO,CACR,CAAC,CACF,CACA,SAASE,GAAchS,EAAQ,CAC9B,GAAI,CAACA,EAAO,WAAW,OAAQ,OAAO8Q,GAAe9Q,EAAO,MAAM,EAClE,IAAIiS,EAAM,EACV,QAAS1Z,EAAI,EAAGA,EAAIyH,EAAO,WAAW,OAAQzH,IAAK0Z,GAAOD,GAAchS,EAAO,WAAWzH,CAAC,CAAC,EAC5F,OAAO0Z,CACR,CAYA,SAASC,GAAelS,EAAQ,CAC/B,OAAOgS,GAAchS,CAAM,CAC5B,CAYA,SAASmS,GAAgBnS,EAAQ,OAChC,GAAIA,EAAO,MAAQ,EAAG,CACrB,MAAMoS,GAAoBpZ,EAAAgH,EAAO,cAAP,YAAAhH,EAAoB,QAAQgH,EAAO,MAAQ,GACrE,GAAIoS,EAAmB,OAAOlT,EAAmBkT,EAAmB,WAAYD,EAAe,EAAIjT,EAAmBkT,EAAmB,UAAWF,EAAc,CACnK,CACA,MAAO,EACR,CAYA,SAASL,GAAsBvU,EAAOlE,EAAS,UAC9CuG,GAAA3G,EAAAsE,EAAM,SAAQ,uBAAd,MAAAqC,EAAA,KAAA3G,EAAqCI,EACtC,CAaA,SAASiZ,GAAwB/U,EAAO2F,EAAc,CACrD4O,GAAsBvU,EAAO2F,EAAejJ,EAAa,EAAK,OAAO,OAAOA,EAAa,EAAIH,EAAWyD,EAAM,aAAa,cAAgB,CAAA,CAAE,CAAC,CAAC,CAChJ,CAWA,SAASgV,GAAmBhV,EAAO,OAClC,QAAOtE,EAAAsE,EAAM,gBAAe,EAAG,CAAC,IAAzB,YAAAtE,EAA4B,QAAQ,OAAO,CAACiZ,EAAKjS,IAChDiS,EAAMC,GAAelS,CAAM,EAChC,KAAM,CACV,CAWA,SAASuS,GAAwBjV,EAAO,OACvC,QAAOtE,EAAAkG,EAAmB5B,EAAO,uBAAwB6C,EAA0B,EAAE,CAAC,IAA/E,YAAAnH,EAAkF,QAAQ,OAAO,CAACiZ,EAAKjS,IACtGiS,EAAMC,GAAelS,CAAM,EAChC,KAAM,CACV,CAWA,SAASwS,GAAyBlV,EAAO,OACxC,QAAOtE,EAAAkG,EAAmB5B,EAAO,wBAAyBsD,EAA2B,EAAE,CAAC,IAAjF,YAAA5H,EAAoF,QAAQ,OAAO,CAACiZ,EAAKjS,IACxGiS,EAAMC,GAAelS,CAAM,EAChC,KAAM,CACV,CAWA,SAASyS,GAAsBnV,EAAO,OACrC,QAAOtE,EAAAkG,EAAmB5B,EAAO,qBAAsBoD,EAAwB,EAAE,CAAC,IAA3E,YAAA1H,EAA8E,QAAQ,OAAO,CAACiZ,EAAKjS,IAClGiS,EAAMC,GAAelS,CAAM,EAChC,KAAM,CACV,CCzQA,SAAS0S,IAAgC,CACxC,MAAO,CACN,YAAa,KACb,UAAW,KACX,YAAa,KACb,gBAAiB,KACjB,iBAAkB,GAClB,kBAAmB,CAAA,CACrB,CACA,CAYA,SAASC,GAAoB9S,EAAQ,CACpC,OAAQA,EAAO,UAAU,gBAAkB,MAAUA,EAAO,MAAM,QAAQ,sBAAwB,GACnG,CAWA,SAAS+S,GAAqB/S,EAAQ,SACrC,QAAOF,GAAA3G,EAAA6G,EAAO,MAAM,MAAM,iBAAnB,YAAA7G,EAAmC,QAAnC,YAAA2G,EAA0C,oBAAqBE,EAAO,EAC9E,CAaA,SAASgT,GAAwB7S,EAAQ8S,EAAkB,CAC1D,MAAMjT,EAASG,EAAO,MAAM,UAAUA,EAAO,OAAO,EAAE,EAChD+S,EAAYJ,GAAoB9S,CAAM,EAC5C,OAAQjJ,GAAU,CAEjB,GADI,CAACmc,GACDC,GAAkBpc,CAAK,GACtBA,EAAM,QAAQ,OAAS,EAAG,OAE/B,MAAMqc,EAAYf,GAAelS,CAAM,EACjCkT,EAAoBlT,EAAO,eAAc,EAAG,IAAKmT,GAAe,CAACA,EAAW,OAAO,GAAIrC,GAAeqC,EAAW,MAAM,CAAC,CAAC,EACzHC,EAAUJ,GAAkBpc,CAAK,EAAI,KAAK,MAAMA,EAAM,QAAQ,CAAC,EAAE,OAAO,EAAIA,EAAM,QAClFyc,EAAkBrZ,EAAa,EAC/BsZ,EAAe,CAACC,EAAWC,IAAe,CAC/C,GAAI,OAAOA,GAAe,SAAU,OACpC,MAAMlW,EAAQuC,EAAO,MACf4T,EAAWnW,EAAM,QAAQ,mBAAqB,YAAciW,IAAc,MAChFjW,EAAM,YAAY,MAAM,IAAM,CAC7BoW,GAAwBpW,EAAQ9C,GAAQ,CACvC,MAAMmZ,EAAiBrW,EAAM,QAAQ,wBAA0B,MAAQ,GAAK,EACtEsW,GAAeJ,GAAchZ,EAAI,aAAe,IAAMmZ,EACtDV,EAAYzY,EAAI,WAAa,EAC7BqZ,GAAkB,KAAK,IAAIZ,EAAY,EAAIW,EAAcX,EAAY,EAAG,QAAQ,EACtF,GAAIQ,EAAU,CACb,MAAMP,GAAoB1Y,EAAI,kBAC9B,QAASjC,EAAI,EAAGA,EAAI2a,GAAkB,OAAQ3a,IAAK,CAClD,MAAMub,GAAQZ,GAAkB3a,CAAC,EAC3Bwb,EAAaD,GAAM,CAAC,EAC1BT,EAAgBS,GAAM,CAAC,CAAC,EAAI,KAAK,MAAM,KAAK,IAAIC,EAAa,EAAIA,EAAaA,EAAaF,GAAkBD,EAAcV,GAAkB,OAAQ,CAAC,EAAI,GAAG,EAAI,GAClK,CACD,CACA,MAAO,CACN,GAAG1Y,EACH,YAAAoZ,EACA,gBAAAC,EACN,CACI,CAAC,EACGJ,GAAU5B,GAAsBvU,EAAQ9C,GAAQ,OAAO,OAAOR,EAAa,EAAIQ,EAAK6Y,CAAe,CAAC,CACzG,CAAC,CACF,EACA,IAAIW,EAAY,KACZC,EAAiB,GACjBC,EACJ,MAAMC,EAAY,IAAM,CACnBF,GACHA,EAAiB,GACjBX,EAAa,OAAQY,CAAW,EAChCF,EAAY,sBAAsBG,CAAS,GACrCH,EAAY,IACpB,EACMI,EAAUZ,GAAe,CAE9B,GADAU,EAAcV,EACV,OAAO,uBAA0B,WAAY,CAChDF,EAAa,OAAQE,CAAU,EAC/B,MACD,CACA,GAAIQ,IAAc,KAAM,CACvBC,EAAiB,GACjB,MACD,CACAX,EAAa,OAAQE,CAAU,EAC/BQ,EAAY,sBAAsBG,CAAS,CAC5C,EACME,EAASb,GAAe,CACzBQ,IAAc,OACjB,qBAAqBA,CAAS,EAC9BA,EAAY,KACZC,EAAiB,IAElBpU,EAAO,MAAM,YAAY,MAAM,IAAM,CACpCyT,EAAa,MAAOE,GAAcU,CAAW,EAC7CR,GAAwB7T,EAAO,MAAQrF,IAAS,CAC/C,GAAGA,EACH,iBAAkB,GAClB,YAAa,KACb,UAAW,KACX,YAAa,KACb,gBAAiB,KACjB,kBAAmB,CAAA,CACxB,EAAM,CACH,CAAC,CACF,EACM8Z,EAAkBxB,IAAqB,OAAO,SAAa,IAAc,SAAW,MACpFyB,EAAc,CACnB,YAAcnS,GAAMgS,EAAOhS,EAAE,OAAO,EACpC,UAAYA,GAAM,CACjBkS,GAAA,MAAAA,EAAiB,oBAAoB,YAAaC,EAAY,aAC9DD,GAAA,MAAAA,EAAiB,oBAAoB,UAAWC,EAAY,WAC5DF,EAAMjS,EAAE,OAAO,CAChB,CACH,EACQoS,EAAc,CACnB,YAAcC,IACTA,EAAW,aACdA,EAAW,eAAc,EACzBA,EAAW,gBAAe,GAE3BL,EAAOK,EAAW,QAAQ,CAAC,EAAE,OAAO,EAC7B,IAER,UAAYrS,GAAM,OACjBsS,EAAiB,EACbtS,EAAE,aACLA,EAAE,eAAc,EAChBA,EAAE,gBAAe,GAElBiS,GAAMrb,EAAAoJ,EAAE,QAAQ,CAAC,IAAX,YAAApJ,EAAc,OAAO,CAC5B,EACA,cAAe,IAAM,CACpB0b,EAAiB,EACjBL,EAAK,CACN,CACH,EACQK,EAAoB,IAAM,CAC/BJ,GAAA,MAAAA,EAAiB,oBAAoB,YAAaE,EAAY,aAC9DF,GAAA,MAAAA,EAAiB,oBAAoB,WAAYE,EAAY,WAC7DF,GAAA,MAAAA,EAAiB,oBAAoB,cAAeE,EAAY,cACjE,EACMG,EAAqBC,GAAqB,EAAK,CAAE,QAAS,EAAK,EAAK,GACtE5B,GAAkBpc,CAAK,GAC1B0d,GAAA,MAAAA,EAAiB,iBAAiB,YAAaE,EAAY,YAAaG,GACxEL,GAAA,MAAAA,EAAiB,iBAAiB,WAAYE,EAAY,UAAWG,GACrEL,GAAA,MAAAA,EAAiB,iBAAiB,cAAeE,EAAY,cAAeG,KAE5EL,GAAA,MAAAA,EAAiB,iBAAiB,YAAaC,EAAY,YAAaI,GACxEL,GAAA,MAAAA,EAAiB,iBAAiB,UAAWC,EAAY,UAAWI,IAErEjB,GAAwB7T,EAAO,MAAQrF,IAAS,CAC/C,GAAGA,EACH,YAAa4Y,EACb,UAAAH,EACA,YAAa,EACb,gBAAiB,EACjB,kBAAAC,EACA,iBAAkBrT,EAAO,EAC5B,EAAI,CACH,CACD,CAYA,SAAS6T,GAAwBpW,EAAOlE,EAAS,UAChDuG,GAAA3G,EAAAsE,EAAM,SAAQ,yBAAd,MAAAqC,EAAA,KAAA3G,EAAuCI,EACxC,CAcA,SAASyb,GAA0BvX,EAAO2F,EAAc,CACvDyQ,GAAwBpW,EAAO2F,EAAeyP,KAAkC7Y,EAAWyD,EAAM,aAAa,gBAAkBoV,GAA6B,CAAE,CAAC,CACjK,CACA,IAAIoC,GAAmB,KAYvB,SAASF,IAAwB,CAChC,GAAI,OAAOE,IAAqB,UAAW,OAAOA,GAClD,IAAIC,EAAY,GAChB,GAAI,CACH,MAAMjV,EAAU,CAAE,IAAI,SAAU,CAC/B,OAAAiV,EAAY,GACL,EACR,CAAC,EACKC,EAAO,IAAM,CAAC,EACpB,OAAO,iBAAiB,OAAQA,EAAMlV,CAAO,EAC7C,OAAO,oBAAoB,OAAQkV,CAAI,CACxC,MAAc,CACbD,EAAY,EACb,CACA,OAAAD,GAAmBC,EACZD,EACR,CAYA,SAAS9B,GAAkB,EAAG,CAC7B,OAAO,EAAE,OAAS,YACnB,CC1QA,MAAMiC,GAAwB,CAC7B,gBAAkBtH,IACV,CACN,eAAgB+E,GAA6B,EAC7C,GAAG/E,CACN,GAEC,uBAAyBrQ,IACjB,CACN,iBAAkB,QAClB,sBAAuB,MACvB,uBAAwBhD,GAAiB,iBAAkBgD,CAAK,CACnE,GAEC,sBAAuB,CAACwB,EAAWxB,IAAU,CAC5CuB,GAAoB,wBAAyBC,EAAWxB,EAAO,CAC9D,oBAAqB,CAAE,GAAKuC,GAAW8S,GAAoB9S,CAAM,CAAC,EAClE,qBAAsB,CAAE,GAAKA,GAAW+S,GAAqB/S,CAAM,CAAC,CACvE,CAAG,CACF,EACA,sBAAuB,CAACf,EAAWxB,IAAU,CAC5CuB,GAAoB,wBAAyBC,EAAWxB,EAAO,CAAE,wBAAyB,CAAE,GAAI,CAAC0C,EAAQ8S,IAAqBD,GAAwB7S,EAAQ8S,CAAgB,CAAC,CAAE,CAAE,CACpL,EACA,mBAAqBxV,GAAU,CAC9BqB,GAAgB,wBAAyBrB,EAAO,CAC/C,wBAAyB,CAAE,GAAKlE,GAAYsa,GAAwBpW,EAAOlE,CAAO,CAAC,EACnF,0BAA2B,CAAE,GAAK6J,GAAiB4R,GAA0BvX,EAAO2F,CAAY,CAAC,CACpG,CAAG,CACF,CACD,EC7BMiS,GAAsB,CAC3B,gBAAkBvH,IACV,CACN,aAAciD,GAA2B,EACzC,GAAGjD,CACN,GAEC,oBAAqB,IACbkD,GAA+B,EAEvC,uBAAyBvT,IACjB,CAAE,qBAAsBhD,GAAiB,eAAgBgD,CAAK,CAAC,GAEvE,sBAAuB,CAACwB,EAAWxB,IAAU,CAC5CuB,GAAoB,sBAAuBC,EAAWxB,EAAO,CAC5D,eAAgB,CACf,GAAKuC,GAAWiR,GAAejR,CAAM,EACrC,SAAWA,GAAM,SAAK,OAACvC,EAAM,QAAQ,SAASqC,GAAA3G,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,QAA1B,YAAA2G,EAAkCE,EAAO,GAAG,EAC9F,EACG,gBAAiB,CAAE,GAAI,CAACA,EAAQ2B,IAAakQ,GAAgB7R,EAAQ2B,CAAQ,CAAC,EAC9E,gBAAiB,CAAE,GAAI,CAAC3B,EAAQ2B,IAAamQ,GAAgB9R,EAAQ2B,CAAQ,CAAC,EAC9E,iBAAkB,CAAE,GAAK3B,GAAW+R,GAAiB/R,CAAM,CAAC,CAC/D,CAAG,CACF,EACA,sBAAuB,CAACf,EAAWxB,IAAU,CAC5CuB,GAAoB,sBAAuBC,EAAWxB,EAAO,CAC5D,eAAgB,CACf,GAAK0C,GAAWkS,GAAelS,CAAM,EACrC,SAAWA,cAAW,OAAC1C,EAAM,QAAQ,QAAS0C,EAAO,OAAO,QAAQ,OAAS,GAAIhH,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,OAAQoP,GAAAzI,EAAArC,EAAM,MAAM,eAAZ,YAAAqC,EAA0B,QAA1B,YAAAyI,EAAkCpI,EAAO,OAAO,GAAG,EAC1K,EACG,gBAAiB,CAChB,GAAKA,GAAWmS,GAAgBnS,CAAM,EACtC,SAAU,IAAA,eAAM,OACf1C,EAAM,QAAQ,SACdtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,OAC1B2G,EAAArC,EAAM,MAAM,cAAZ,YAAAqC,EAAyB,OACzByI,EAAA9K,EAAM,MAAM,gBAAZ,YAAA8K,EAA2B,OAC3BC,EAAA/K,EAAM,MAAM,mBAAZ,YAAA+K,EAA8B,OAC9B8M,EAAA7X,EAAM,MAAM,WAAZ,YAAA6X,EAAsB,MACtB7X,EAAM,QAAQ,iBACnB,EACA,CACA,CAAG,CACF,EACA,mBAAqBA,GAAU,CAC9BqB,GAAgB,sBAAuBrB,EAAO,CAC7C,uBAAwB,CACvB,GAAI,IAAMkU,GAAuBlU,CAAK,EACtC,SAAU,IAAA,eAAM,OACfA,EAAM,QAAQ,SACdtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,OAC1B2G,EAAArC,EAAM,MAAM,cAAZ,YAAAqC,EAAyB,OACzByI,EAAA9K,EAAM,MAAM,gBAAZ,YAAA8K,EAA2B,OAC3BC,EAAA/K,EAAM,MAAM,mBAAZ,YAAA+K,EAA8B,OAC9B8M,EAAA7X,EAAM,MAAM,WAAZ,YAAA6X,EAAsB,MACtB7X,EAAM,QAAQ,iBACnB,EACA,EACG,sBAAuB,CAAE,GAAKlE,GAAYyY,GAAsBvU,EAAOlE,CAAO,CAAC,EAC/E,wBAAyB,CAAE,GAAK6J,GAAiBoP,GAAwB/U,EAAO2F,CAAY,CAAC,EAC7F,mBAAoB,CACnB,GAAI,IAAMqP,GAAmBhV,CAAK,EAClC,SAAU,IAAA,OAAM,QAACtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,MAAOsE,EAAM,gBAAe,CAAE,EAC7E,EACG,wBAAyB,CACxB,GAAI,IAAMiV,GAAwBjV,CAAK,EACvC,SAAU,IAAA,OAAM,QAACtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,MAAOsE,EAAM,gBAAe,CAAE,EAC7E,EACG,yBAA0B,CACzB,GAAI,IAAMkV,GAAyBlV,CAAK,EACxC,SAAU,IAAA,OAAM,QAACtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,MAAOsE,EAAM,gBAAe,CAAE,EAC7E,EACG,sBAAuB,CACtB,GAAI,IAAMmV,GAAsBnV,CAAK,EACrC,SAAU,IAAA,OAAM,QAACtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,MAAOsE,EAAM,gBAAe,CAAE,EAC7E,CACA,CAAG,CACF,CACD,EC9EM8X,GAA0B,CAC/B,gBAAkBzH,IACV,CACN,iBAAkBlM,GAA+B,EACjD,GAAGkM,CACN,GAEC,uBAAyBrQ,IACjB,CAAE,yBAA0BhD,GAAiB,mBAAoBgD,CAAK,CAAC,GAE/E,sBAAuB,CAACwB,EAAWxB,IAAU,CAC5CuB,GAAoB,0BAA2BC,EAAWxB,EAAO,CAChE,oBAAqB,CACpB,GAAKuC,GAAWW,EAAoBX,CAAM,EAC1C,SAAWA,GAAM,OAAK,OACrBvC,EAAM,QAAQ,SACdtE,EAAAsE,EAAM,MAAM,mBAAZ,YAAAtE,EAA8B,MAC9B6G,EAAO,OACZ,EACA,EACG,kBAAmB,CAAE,GAAKA,GAAW+B,GAAkB/B,CAAM,CAAC,EAC9D,kCAAmC,CAAE,GAAKA,GAAWsC,GAAkCtC,CAAM,CAAC,EAC9F,wBAAyB,CAAE,GAAI,CAACA,EAAQ8B,IAAYD,GAAwB7B,EAAQ8B,CAAO,CAAC,CAC/F,CAAG,CACF,EACA,mBAAoB,CAAC7C,EAAWxB,IAAU,CACzCuB,GAAoB,0BAA2BC,EAAWxB,EAAO,CAChE,oBAAqB,CACpB,GAAKgF,GAAQD,GAAoBC,CAAG,EACpC,SAAWA,GAAG,SAAK,OAClBA,EAAI,YAAW,GACftJ,EAAAsE,EAAM,MAAM,gBAAZ,YAAAtE,EAA2B,OAC3B2G,EAAArC,EAAM,MAAM,mBAAZ,YAAAqC,EAA8B,KACnC,EACA,EACG,8BAA+B,CAC9B,GAAK2C,GAAQI,GAA8BJ,CAAG,EAC9C,SAAWA,GAAG,OAAK,OAACA,EAAI,YAAW,GAAItJ,EAAAsE,EAAM,MAAM,mBAAZ,YAAAtE,EAA8B,KAAK,EAC9E,CACA,CAAG,CACF,EACA,mBAAqBsE,GAAU,CAC9BqB,GAAgB,0BAA2BrB,EAAO,CACjD,4BAA6B,CAC5B,GAAI,IAAMyF,GAA4BzF,CAAK,EAC3C,SAAU,IAAA,WAAM,QACftE,EAAAsE,EAAM,MAAM,mBAAZ,YAAAtE,EAA8B,OAC9B2G,EAAArC,EAAM,MAAM,cAAZ,YAAAqC,EAAyB,OACzByI,EAAA9K,EAAM,MAAM,WAAZ,YAAA8K,EAAsB,MACtB9K,EAAM,QAAQ,QACdA,EAAM,QAAQ,iBACnB,EACA,EACG,4BAA6B,CAC5B,GAAI,IAAMwD,GAA4BxD,CAAK,EAC3C,SAAU,IAAA,WAAM,QACftE,EAAAsE,EAAM,MAAM,mBAAZ,YAAAtE,EAA8B,OAC9B2G,EAAArC,EAAM,MAAM,cAAZ,YAAAqC,EAAyB,OACzByI,EAAA9K,EAAM,MAAM,WAAZ,YAAA8K,EAAsB,MACtB9K,EAAM,QAAQ,QACdA,EAAM,QAAQ,iBACnB,EACA,EACG,0BAA2B,CAAE,GAAKlE,GAAYyI,GAA0BvE,EAAOlE,CAAO,CAAC,EACvF,4BAA6B,CAAE,GAAK6J,GAAiBD,GAA4B1F,EAAO2F,CAAY,CAAC,EACrG,8BAA+B,CAAE,GAAKpK,GAAUqK,GAA8B5F,EAAOzE,CAAK,CAAC,EAC3F,6BAA8B,CAAE,GAAI,IAAMsK,GAA6B7F,CAAK,CAAC,EAC7E,8BAA+B,CAAE,GAAI,IAAM+F,GAA8B/F,CAAK,CAAC,EAC/E,2CAA4C,CAAE,GAAI,IAAMgG,GAA2ChG,CAAK,CAAC,CAC5G,CAAG,CACF,CACD,EChEA,SAAS+X,IAA8B,CACtC,OAAOrb,EAAa,CACrB,CAYA,SAASsb,GAAsBhY,EAAOlE,EAAS,UAC9CuG,GAAA3G,EAAAsE,EAAM,SAAQ,uBAAd,MAAAqC,EAAA,KAAA3G,EAAqCI,EACtC,CAaA,SAASmc,GAAwBjY,EAAO2F,EAAc,CACrD3F,EAAM,mBAAqB,KAC3BgY,GAAsBhY,EAAO2F,EAAejJ,EAAa,EAAK,OAAO,OAAOA,EAAa,EAAIH,EAAWyD,EAAM,aAAa,cAAgB,CAAA,CAAE,CAAC,CAAC,CAChJ,CAeA,SAASkY,GAA4BlY,EAAOzE,EAAO4c,EAAM,CACxDnY,EAAM,mBAAqB,KAC3BgY,GAAsBhY,EAAQ9C,GAAQ,CAErC,GADA3B,EAAQ,OAAOA,EAAU,IAAcA,EAAQ,CAACqG,EAAmB5B,EAAO,uBAAwBoY,EAA0B,EACxHD,GAAA,MAAAA,EAAM,aAAe,CAAC5c,EAAO,OAAOmB,EAAa,EACrD,MAAM2b,EAAe,OAAO,OAAO3b,EAAa,EAAIQ,CAAG,EACjDob,EAAqBtY,EAAM,sBAAqB,EAAG,SACzD,GAAIzE,EAAO,CACV,MAAMgd,EAA+B,IAAI,IACzCD,EAAmB,QAAStT,GAAQ,CAC/BwT,GAA2BxT,EAAKuT,CAAY,IAAGF,EAAarT,EAAI,EAAE,EAAI,GAC3E,CAAC,CACF,MAAOsT,EAAmB,QAAStT,GAAQ,CACtCyT,GAAiBzT,CAAG,GAAG,OAAOqT,EAAarT,EAAI,EAAE,CACtD,CAAC,EACD,OAAOqT,CACR,CAAC,CACF,CAYA,SAASK,GAAgC1Y,EAAOzE,EAAO4c,EAAM,CAC5DnY,EAAM,mBAAqB,KAC3BgY,GAAsBhY,EAAQ9C,GAAQ,CACrC,MAAMyb,EAAgB,OAAOpd,EAAU,IAAcA,EAAQ,CAACqG,EAAmB5B,EAAO,2BAA4B4Y,EAA8B,EAClJ,GAAIT,GAAA,MAAAA,EAAM,aAAe,CAACQ,EAAe,OAAOjc,EAAa,EAC7D,MAAM2b,EAAe,OAAO,OAAO3b,EAAa,EAAIQ,CAAG,EACvD,OAAA8C,EAAM,YAAW,EAAG,KAAK,QAASgF,GAAQ,CACzC6T,GAAoBR,EAAcrT,EAAI,GAAI2T,EAAe,GAAM3Y,EAAO,EAAI,CAC3E,CAAC,EACMqY,CACR,CAAC,CACF,CAYA,SAASS,GAA6B9Y,EAAO,CAC5C,OAAOA,EAAM,gBAAe,CAC7B,CAYA,SAAS+Y,GAA0B/Y,EAAO,CACzC,MAAM0M,EAAW1M,EAAM,gBAAe,EACtC,OAAK4B,EAAmB5B,EAAO,wBAAyBgZ,EAA2B,EAK5EC,GAAavM,EAAU1M,CAAK,EAL0D,CAC5F,KAAM,CAAA,EACN,SAAU,CAAA,EACV,SAAUtD,EAAa,CACzB,CAEA,CAYA,SAASwc,GAAkClZ,EAAO,CACjD,MAAM0M,EAAW1M,EAAM,oBAAmB,EAC1C,OAAK4B,EAAmB5B,EAAO,wBAAyBgZ,EAA2B,EAK5EC,GAAavM,EAAU1M,CAAK,EAL0D,CAC5F,KAAM,CAAA,EACN,SAAU,CAAA,EACV,SAAUtD,EAAa,CACzB,CAEA,CAYA,SAASyc,GAAiCnZ,EAAO,CAChD,MAAM0M,EAAW1M,EAAM,kBAAiB,EACxC,OAAK4B,EAAmB5B,EAAO,wBAAyBgZ,EAA2B,EAK5EC,GAAavM,EAAU1M,CAAK,EAL0D,CAC5F,KAAM,CAAA,EACN,SAAU,CAAA,EACV,SAAUtD,EAAa,CACzB,CAEA,CASA,SAAS0c,GAAwBpZ,EAAO,OACvC,OAAO,OAAO,OAAKtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,QAAS,EAAE,CACzD,CAaA,SAAS0c,GAA2BpY,EAAO,OAC1C,MAAMsY,EAAqBtY,EAAM,oBAAmB,EAAG,SACjDqY,IAAe3c,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,QAAS,CAAA,EACxD,IAAI2d,EAAoB,GAAQf,EAAmB,QAAU,OAAO,KAAKD,CAAY,EAAE,QACvF,GAAIgB,EAAmB,CACtB,MAAMd,EAA+B,IAAI,IACrCD,EAAmB,KAAMtT,GAAQ,CAACsU,GAActU,EAAKqT,CAAY,GAAKG,GAA2BxT,EAAKuT,CAAY,CAAC,IAAGc,EAAoB,GAC/I,CACA,OAAOA,CACR,CAYA,SAAST,GAA+B5Y,EAAO,OAC9C,MAAMuZ,EAAqBvZ,EAAM,qBAAoB,EAAG,SAClDqY,IAAe3c,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,QAAS,CAAA,EAClD6c,EAA+B,IAAI,IACzC,IAAIiB,EAAmB,GACvB,QAAS,EAAI,EAAG,EAAID,EAAmB,OAAQ,IAAK,CACnD,MAAMvU,EAAMuU,EAAmB,CAAC,EAChC,GAAKD,GAActU,EAAKqT,CAAY,EAEzB,CAACmB,GAAoBhB,GAA2BxT,EAAKuT,CAAY,IAAGiB,EAAmB,YAD7FhB,GAA2BxT,EAAKuT,CAAY,EAAG,MAAO,EAE5D,CACA,OAAOiB,CACR,CAWA,SAASR,GAA4BhZ,EAAO,CAC3C,OAAO4B,EAAmB5B,EAAO,oBAAqBoZ,EAAuB,EAAE,OAAS,CACzF,CASA,SAASK,GAAgCzZ,EAAO,CAC/C,OAAOA,EAAM,qBAAoB,EAAG,SAAS,OAAQgF,GAAQyT,GAAiBzT,CAAG,CAAC,EAAE,KAAMA,GAAQ0U,GAAkB1U,CAAG,GAAKpD,EAAmBoD,EAAK,oBAAqB2U,EAAqB,CAAC,CAChM,CAYA,SAASC,GAAsC5Z,EAAO,CACrD,OAAQ8E,GAAM,CACboT,GAA4BlY,EAAO8E,EAAE,OAAO,OAAO,CACpD,CACD,CAYA,SAAS+U,GAA0C7Z,EAAO,CACzD,OAAQ8E,GAAM,CACb4T,GAAgC1Y,EAAO8E,EAAE,OAAO,OAAO,CACxD,CACD,CAkBA,SAASgV,GAAmB9U,EAAKzJ,EAAO4c,EAAM,CAC7C,MAAM4B,EAAaL,GAAkB1U,CAAG,EACxCgT,GAAsBhT,EAAI,MAAQ9H,GAAQ,CACzC3B,EAAQ,OAAOA,EAAU,IAAcA,EAAQ,CAACwe,EAChD,MAAM1B,EAAe,OAAO,OAAO3b,EAAa,EAAIQ,CAAG,EACvD,OAAA2b,GAAoBR,EAAcrT,EAAI,GAAIzJ,IAAQ4c,GAAA,YAAAA,EAAM,iBAAkB,KAAS6B,GAAsBhV,CAAG,EAAGA,EAAI,KAAK,EACpH,CAACzJ,IAAS4c,GAAA,MAAAA,EAAM,kBAAiB8B,GAAoB5B,EAAcrT,CAAG,EACnEqT,CACR,CAAC,CACF,CAWA,SAASqB,GAAkB1U,EAAK,OAC/B,OAAOsU,GAActU,IAAKtJ,EAAAsJ,EAAI,MAAM,MAAM,eAAhB,YAAAtJ,EAA8B,QAAS,EAAE,CACpE,CAWA,SAASie,GAAsB3U,EAAK,CACnC,OAAOkV,GAAiBlV,CAAG,IAAM,MAClC,CAWA,SAASmV,GAA4BnV,EAAK,CACzC,OAAOkV,GAAiBlV,CAAG,IAAM,KAClC,CAYA,SAASyT,GAAiBzT,EAAK,CAC9B,MAAMxC,EAAUwC,EAAI,MAAM,QAC1B,OAAI,OAAOxC,EAAQ,oBAAuB,WAAmBA,EAAQ,mBAAmBwC,CAAG,EACpFxC,EAAQ,oBAAsB,EACtC,CAYA,SAAS4X,GAAwBpV,EAAK,CACrC,MAAMxC,EAAUwC,EAAI,MAAM,QAC1B,OAAI,OAAOxC,EAAQ,uBAA0B,WAAmBA,EAAQ,sBAAsBwC,CAAG,EAC1FxC,EAAQ,uBAAyB,EACzC,CAYA,SAASwX,GAAsBhV,EAAK,CACnC,MAAMxC,EAAUwC,EAAI,MAAM,QAC1B,OAAI,OAAOxC,EAAQ,yBAA4B,WAAmBA,EAAQ,wBAAwBwC,CAAG,EAC9FxC,EAAQ,yBAA2B,EAC3C,CAgBA,SAAS6X,GAA6BrV,EAAKmT,EAAM,CAChD,MAAMmC,EAAY7B,GAAiBzT,CAAG,EACtC,OAAQF,GAAM,SACb,GAAI,CAACwV,EAAW,OAChB,MAAMhhB,EAAQwL,EACR9E,EAAQgF,EAAI,MACZuV,EAAUjhB,EAAM,OAAO,QACvBkhB,EAAWxa,EAAM,oBACnB,EAAEA,EAAM,QAAQ,0BAA4B,IAASwa,IAAa,MAAQR,GAAsBhV,CAAG,MAAM3C,GAAA3G,EAAAsE,EAAM,SAAQ,2BAAd,YAAAqC,EAAA,KAAA3G,EAAyCoJ,KAAM,MAAW,CAAC2V,GAAezV,EAAKwV,EAAUD,EAASpC,CAAI,IAAG2B,GAAmB9U,EAAKuV,EAASpC,CAAI,EAC3PnY,EAAM,mBAAqBgF,EAAI,EAChC,CACD,CAYA,SAASyV,GAAezV,EAAKwV,EAAUjf,EAAO4c,EAAM,CACnD,MAAMuC,GAAkBvC,GAAA,YAAAA,EAAM,iBAAkB,GAC1CnY,EAAQgF,EAAI,MACZ6H,EAAO7M,EAAM,sBAAqB,EAClC2a,EAAY3a,EAAM,wBAAuB,EAAG,SAASwa,CAAQ,GAAKxa,EAAM,kBAAkB,SAASwa,CAAQ,EACjH,GAAI,CAACG,EAAW,MAAO,GACvB,MAAMC,EAAcD,EAAU,gBAAe,EACvCxP,EAAWnG,EAAI,gBAAe,EAC9B6V,EAAgBhO,EAAK+N,CAAW,EAChCE,EAAajO,EAAK1B,CAAQ,EAChC,GAAIyP,EAAc,GAAKzP,EAAW,GAAKyP,GAAe/N,EAAK,QAAU1B,GAAY0B,EAAK,SAAUgO,GAAA,YAAAA,EAAe,MAAOF,EAAU,KAAMG,GAAA,YAAAA,EAAY,MAAO9V,EAAI,IAAM,CAACgV,GAAsBW,CAAS,GAAK,CAACX,GAAsBhV,CAAG,EAAG,MAAO,GAC5O,MAAMhC,EAAQ,KAAK,IAAI4X,EAAazP,CAAQ,EACtC9H,EAAM,KAAK,IAAIuX,EAAazP,CAAQ,EAC1C,OAAA6M,GAAsBhY,EAAQ9C,GAAQ,CACrC,MAAMmb,EAAe,OAAO,OAAO3b,EAAa,EAAIQ,CAAG,EACvD,QAASgS,EAAQlM,EAAOkM,GAAS7L,EAAK6L,IAAS,CAC9C,MAAM6L,EAAWlO,EAAKqC,CAAK,EACvB,CAACuJ,GAAiBsC,CAAQ,GAAK,CAACf,GAAsBe,CAAQ,IAClElC,GAAoBR,EAAc0C,EAAS,GAAIxf,EAAOmf,EAAiB1a,CAAK,EACxE,CAACzE,IAAS4c,GAAA,MAAAA,EAAM,kBAAiB8B,GAAoB5B,EAAc0C,CAAQ,EAChF,CACA,OAAO1C,CACR,CAAC,EACM,EACR,CACA,SAASQ,GAAoBR,EAAcjJ,EAAO7T,EAAOmf,EAAiB1a,EAAOgb,EAA4B,CAC5G,MAAMhW,EAAMhF,EAAM,OAAOoP,EAAO,EAAI,EAChC7T,GACEye,GAAsBhV,CAAG,GAAG,OAAO,KAAKqT,CAAY,EAAE,QAAS/c,GAAQ,OAAO+c,EAAa/c,CAAG,CAAC,EAChGmd,GAAiBzT,CAAG,IAAGqT,EAAajJ,CAAK,EAAI,MACvC,CAAC4L,GAA8BvC,GAAiBzT,CAAG,IAAG,OAAOqT,EAAajJ,CAAK,EACtFsL,GAAmB1V,EAAI,QAAQ,QAAUoV,GAAwBpV,CAAG,GAAGA,EAAI,QAAQ,QAASiW,GAAMpC,GAAoBR,EAAc4C,EAAE,GAAI1f,EAAOmf,EAAiB1a,EAAOgb,CAA0B,CAAC,CACzM,CASA,SAASxC,GAA2BxT,EAAKuT,EAAc,CACtD,GAAI,CAACE,GAAiBzT,CAAG,EAAG,MAAO,GACnC,MAAMhF,EAAQgF,EAAI,MAClB,GAAIhF,EAAM,QAAQ,wBAA0B,GAAM,MAAO,GACzD,MAAMqL,EAAWrG,EAAI,SACrB,GAAIqG,IAAa,OAAQ,MAAO,GAChC,MAAM6P,EAAS3C,EAAa,IAAIlN,CAAQ,EACxC,GAAI6P,IAAW,OAAQ,OAAOA,EAC9B,MAAMC,EAAWnb,EAAM,gBAAe,EAAG,SACnCob,EAAU,CAAA,EAChB,IAAIC,EAAa,GACbC,EAAYjQ,EAChB,KAAOiQ,IAAc,QAAQ,CAC5B,MAAMC,EAAQhD,EAAa,IAAI+C,CAAS,EACxC,GAAIC,IAAU,OAAQ,CACrBF,EAAaE,EACb,KACD,CACAH,EAAQ,KAAKE,CAAS,EACtB,MAAMrT,EAASkT,EAASG,CAAS,GAAKtb,EAAM,OAAOsb,EAAW,EAAI,EAClE,GAAI,CAAClB,GAAwBnS,CAAM,EAAG,CACrCoT,EAAa,GACb,KACD,CACAC,EAAYrT,EAAO,QACpB,CACA,OAAAmT,EAAQ,QAAS5V,GAAO+S,EAAa,IAAI/S,EAAI6V,CAAU,CAAC,EACjDA,CACR,CACA,SAASpB,GAAoB5B,EAAcrT,EAAK,CAC/C,MAAMmW,EAAWnW,EAAI,MAAM,gBAAe,EAAG,SAC7C,IAAIqG,EAAWrG,EAAI,SACnB,KAAOqG,IAAa,QACnB,OAAOgN,EAAahN,CAAQ,EAC5BA,GAAY8P,EAAS9P,CAAQ,GAAKrG,EAAI,MAAM,OAAOqG,EAAU,EAAI,GAAG,QAEtE,CACA,SAASmQ,GAAsB3O,EAAMwL,EAAcoD,EAAkBC,EAAkB,CACtF,MAAMrgB,EAAS,CAAA,EACf,QAASJ,EAAI,EAAGA,EAAI4R,EAAK,OAAQ5R,IAAK,CACrC,MAAM+J,EAAM6H,EAAK5R,CAAC,EACZ8e,EAAaT,GAActU,EAAKqT,CAAY,EAKlD,GAJI0B,IACH0B,EAAiB,KAAKzW,CAAG,EACzB0W,EAAiB1W,EAAI,EAAE,EAAIA,GAExBA,EAAI,QAAQ,OAAQ,CACvB,MAAM2W,EAAaH,GAAsBxW,EAAI,QAASqT,EAAcoD,EAAkBC,CAAgB,EACtG,GAAI3B,EAAY,CACf,MAAM6B,EAAS,OAAO,OAAO,OAAO,eAAe5W,CAAG,CAAC,EACvDrI,GAAmCif,EAAQ5W,CAAG,EAC9C4W,EAAO,QAAUD,EACjBtgB,EAAO,KAAKugB,CAAM,CACnB,CACD,MAAW7B,GAAY1e,EAAO,KAAK2J,CAAG,CACvC,CACA,OAAO3J,CACR,CAYA,SAAS4d,GAAavM,EAAU1M,EAAO,OACtC,MAAM6b,EAAsB,CAAA,EACtBC,EAAsBpf,EAAa,EACnC2b,IAAe3c,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,QAAS,CAAA,EACxD,MAAO,CACN,KAAM8f,GAAsB9O,EAAS,KAAM2L,EAAcwD,EAAqBC,CAAmB,EACjG,SAAUD,EACV,SAAUC,CACZ,CACA,CASA,SAASxC,GAActU,EAAKqT,EAAc,CACzC,MAAO,CAAC,EAAEvb,GAAOub,EAAcrT,EAAI,EAAE,GAAKqT,EAAarT,EAAI,EAAE,EAC9D,CAWA,SAASkV,GAAiBlV,EAAK,OAC9B,GAAI,CAACA,EAAI,QAAQ,OAAQ,MAAO,GAChC,MAAMqT,IAAe3c,EAAAsJ,EAAI,MAAM,MAAM,eAAhB,YAAAtJ,EAA8B,QAAS,CAAA,EAC5D,IAAIqgB,EAAe,GACfC,EAAsB,GACtBC,EAAiB,GACrB,QAAS,EAAI,EAAG,EAAIjX,EAAI,QAAQ,OAAQ,IAAK,CAC5C,MAAMkX,EAASlX,EAAI,QAAQ,CAAC,EAC5B,GAAI+W,GAAgB,CAACC,EAAqB,MAM1C,GALIvD,GAAiByD,CAAM,IAC1BD,EAAiB,GACb3C,GAAc4C,EAAQ7D,CAAY,EAAG0D,EAAe,GACnDC,EAAsB,IAExBE,EAAO,QAAQ,OAAQ,CAC1B,MAAMC,EAAyBjC,GAAiBgC,CAAM,EAClDC,IAA2B,OAC9BJ,EAAe,GACfE,EAAiB,IACPE,IAA2B,QACrCJ,EAAe,GACfC,EAAsB,GACtBC,EAAiB,IACXD,EAAsB,EAC9B,CACD,CACA,OAAKC,EACED,EAAsB,MAAQD,EAAe,OAAS,GADjC,EAE7B,CC3lBA,MAAMK,GAAsB,CAC3B,sBAAwBpc,GAAU,CACjCA,EAAM,mBAAqB,IAC5B,EACA,uBAAyBA,GAAU,CAClCA,EAAM,mBAAqB,IAC5B,EACA,gBAAkBqQ,IACV,CACN,aAAc0H,GAA2B,EACzC,GAAG1H,CACN,GAEC,uBAAyBrQ,IACjB,CACN,qBAAsBhD,GAAiB,eAAgBgD,CAAK,EAC5D,mBAAoB,GACpB,wBAAyB,GACzB,wBAAyB,GACzB,sBAAuB,GACvB,yBAA2B1G,GAAU,OACpC,MAAM+iB,EAAa/iB,EACnB,MAAO,GAAQ+iB,EAAW,WAAY3gB,EAAA2gB,EAAW,cAAX,MAAA3gB,EAAwB,SAC/D,CACH,GAEC,mBAAoB,CAAC8F,EAAWxB,IAAU,CACzCuB,GAAoB,sBAAuBC,EAAWxB,EAAO,CAC5D,mBAAoB,CAAE,GAAI,CAACgF,EAAKzJ,EAAO4c,IAAS2B,GAAmB9U,EAAKzJ,EAAO4c,CAAI,CAAC,EACpF,kBAAmB,CAAE,GAAKnT,GAAQ0U,GAAkB1U,CAAG,CAAC,EACxD,sBAAuB,CACtB,GAAKA,GAAQ2U,GAAsB3U,CAAG,EACtC,SAAWA,GAAG,OAAK,OAClBA,EAAI,SACJtJ,EAAAsJ,EAAI,MAAM,MAAM,eAAhB,YAAAtJ,EAA8B,MAC9BsJ,EAAI,MAAM,QAAQ,kBACvB,EACA,EACG,4BAA6B,CAC5B,GAAKA,GAAQmV,GAA4BnV,CAAG,EAC5C,SAAWA,GAAG,OAAK,OAClBA,EAAI,SACJtJ,EAAAsJ,EAAI,MAAM,MAAM,eAAhB,YAAAtJ,EAA8B,MAC9BsJ,EAAI,MAAM,QAAQ,kBACvB,EACA,EACG,iBAAkB,CAAE,GAAKA,GAAQyT,GAAiBzT,CAAG,CAAC,EACtD,wBAAyB,CAAE,GAAKA,GAAQoV,GAAwBpV,CAAG,CAAC,EACpE,sBAAuB,CAAE,GAAKA,GAAQgV,GAAsBhV,CAAG,CAAC,EAChE,6BAA8B,CAAE,GAAI,CAACA,EAAKmT,IAASkC,GAA6BrV,EAAKmT,CAAI,CAAC,CAC7F,CAAG,CACF,EACA,mBAAqBnY,GAAU,CAC9BqB,GAAgB,sBAAuBrB,EAAO,CAC7C,sBAAuB,CAAE,GAAKlE,GAAYkc,GAAsBhY,EAAOlE,CAAO,CAAC,EAC/E,wBAAyB,CAAE,GAAK6J,GAAiBsS,GAAwBjY,EAAO2F,CAAY,CAAC,EAC7F,4BAA6B,CAAE,GAAI,CAACpK,EAAO4c,IAASD,GAA4BlY,EAAOzE,EAAO4c,CAAI,CAAC,EACnG,gCAAiC,CAAE,GAAI,CAAC5c,EAAO4c,IAASO,GAAgC1Y,EAAOzE,EAAO4c,CAAI,CAAC,EAC3G,6BAA8B,CAAE,GAAI,IAAMW,GAA6B9Y,CAAK,CAAC,EAC7E,0BAA2B,CAC1B,GAAI,IAAM+Y,GAA0B/Y,CAAK,EACzC,SAAU,IAAA,OAAM,QAACtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,MAAOsE,EAAM,gBAAe,CAAE,EAC7E,EACG,kCAAmC,CAClC,GAAI,IAAMkZ,GAAkClZ,CAAK,EACjD,SAAU,IAAA,OAAM,QAACtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,MAAOsE,EAAM,oBAAmB,CAAE,EACjF,EACG,iCAAkC,CACjC,GAAI,IAAMmZ,GAAiCnZ,CAAK,EAChD,SAAU,IAAA,OAAM,QAACtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,MAAOsE,EAAM,kBAAiB,CAAE,EAC/E,EACG,wBAAyB,CACxB,GAAI,IAAMoZ,GAAwBpZ,CAAK,EACvC,SAAU,IAAA,OAAM,QAACtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,KAAK,EACpD,EACG,2BAA4B,CAC3B,GAAI,IAAM0c,GAA2BpY,CAAK,EAC1C,SAAU,IAAA,OAAM,QACftE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,MAC1BsE,EAAM,oBAAmB,EACzBA,EAAM,QAAQ,mBACdA,EAAM,QAAQ,qBACnB,EACA,EACG,+BAAgC,CAC/B,GAAI,IAAM4Y,GAA+B5Y,CAAK,EAC9C,SAAU,IAAA,OAAM,QACftE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,MAC1BsE,EAAM,qBAAoB,EAC1BA,EAAM,QAAQ,mBACdA,EAAM,QAAQ,qBACnB,EACA,EACG,4BAA6B,CAC5B,GAAI,IAAMgZ,GAA4BhZ,CAAK,EAC3C,SAAU,IAAA,OAAM,QAACtE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,KAAK,EACpD,EACG,gCAAiC,CAChC,GAAI,IAAM+d,GAAgCzZ,CAAK,EAC/C,SAAU,IAAA,OAAM,QACftE,EAAAsE,EAAM,MAAM,eAAZ,YAAAtE,EAA0B,MAC1BsE,EAAM,qBAAoB,EAC1BA,EAAM,QAAQ,kBACnB,EACA,EACG,sCAAuC,CAAE,GAAI,IAAM4Z,GAAsC5Z,CAAK,CAAC,EAC/F,0CAA2C,CAAE,GAAI,IAAM6Z,GAA0C7Z,CAAK,CAAC,CAC1G,CAAG,CACF,CACD,EC9GA,SAASsc,GAA6B9Z,EAAS,CAC9C,MAAM+Z,EAAkB,CAAA,EACxB,UAAWjhB,KAAO,OAAO,KAAKkH,CAAO,EAAG+Z,EAAgBjhB,CAAG,EAAIkhB,EAAAA,MAAMha,EAAQlH,CAAG,CAAC,EACjF,OAAOT,GAAW2H,EAAS+Z,CAAe,CAC3C,CACA,SAASE,GAAsBja,EAAS,CACvC,OAAO,OAAO,KAAKA,CAAO,EAAE,IAAKlH,GAAQkhB,QAAMha,EAAQlH,CAAG,CAAC,CAAC,CAC7D,CAoBA,SAASohB,GAASrL,EAAc,CAC/B,MAAMsL,EAAmB,CAAC3c,EAAOwC,IAAY,CAC5CxC,EAAM,WAAY4c,GAASxhB,GAAUwhB,EAAMN,GAA6B9Z,CAAO,CAAC,CAAC,CAClF,EACMqa,EAAa9gB,GAAa,EAC1BuU,EAAgBzV,GAAWwW,EAAc,CAAE,SAAU,CAC1D,sBAAuBwL,EACvB,GAAGL,EAAAA,MAAMnL,EAAa,QAAQ,GAAK,CAAA,CACrC,EAAI,EACGkL,EAAkB1hB,GAAWyhB,GAA6BhM,CAAa,EAAG,CAAE,aAAc,CAACwM,EAAgB3M,IACzG/U,GAAU0hB,EAAgB3M,CAAU,EACzC,EACG4M,EAAY3L,GAAemL,CAAe,EAC1Cvc,EAAQ+c,EACd,OAAIC,EAAAA,gBAAe,GAAIC,EAAAA,eAAe,IAAA,OAAM,OAAAvhB,EAAAmhB,EAAW,UAAX,YAAAnhB,EAAA,KAAAmhB,GAAsB,EAClEjhB,EAAAA,MAAM,IAAM6gB,GAAsBnM,CAAa,EAAG,IAAM,CACvDqM,EAAiBI,EAAWzM,CAAa,CAC1C,EAAG,CAAE,UAAW,GAAM,EACtB1U,EAAAA,MAAM,IAAM,CACX,MAAMoX,EAAkBwJ,EAAAA,MAAMnL,EAAa,KAAK,EAC1C6L,EAAkBV,EAAAA,MAAMnL,EAAa,KAAK,EAChD,GAAI,CAAC2B,EAAiB,MAAO,CAAA,EAC7B,MAAMmK,EAAmB,CAAA,EACzB,UAAW7hB,KAAO,OAAO,KAAK0E,EAAM,YAAY,EAC3C,EAAE1E,KAAO0X,KAAoBkK,GAAA,YAAAA,EAAkB5hB,MAAS,QAC5D6hB,EAAiB,KAAKnK,EAAgB1X,CAAG,CAAC,EAE3C,OAAO6hB,CACR,EAAIA,GAAqB,CACpBA,EAAiB,OAAS,GAAGR,EAAiBI,EAAWzM,CAAa,CAC3E,EAAG,CAAE,UAAW,GAAM,EACtBtQ,EAAM,UAAajH,GACXA,EAAM,SAASiH,EAAM,KAAK,EAE3BA,CACR,CCpEA;AAAA;AAAA;AAAA;AAAA;AAAA,GAOA,IAAIod,GAAoB,CACtB,QAAS,CACP,MAAO,6BACP,MAAO,GACP,OAAQ,GACR,QAAS,YACT,KAAM,OACN,OAAQ,eACR,eAAgB,EAChB,iBAAkB,QAClB,kBAAmB,OACvB,EACE,OAAQ,CACN,MAAO,6BACP,MAAO,GACP,OAAQ,GACR,QAAS,YACT,KAAM,eACN,OAAQ,MACZ,CACA,EC3BA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUA,MAAMC,GAAqB,CAACC,EAAMC,EAAUC,EAAgBC,IAAa,CAAC,CAAE,MAAAC,EAAQ,eAAgB,KAAA1J,EAAO,GAAI,OAAA2J,EAAS,EAAG,MAAAC,EAAO,MAAOzkB,EAAS,GAAGqb,GAAQ,CAAE,MAAAqJ,EAAO,MAAAC,KAAY,CAChL,IAAIlf,EAAW,CAAC,GAAG6e,EAAS,IAAKhW,GAAUsW,EAAAA,EAAE,GAAGtW,CAAK,CAAC,EAAG,GAAGqW,EAAM,QAAU,CAACA,EAAM,QAAO,CAAE,EAAI,CAAA,CAAE,EAClG,OAAIF,IACFhf,EAAW,CAACmf,EAAAA,EAAE,QAASH,CAAK,EAAG,GAAGhf,CAAQ,GACrCmf,EAAAA,EACL,MACA,CACE,GAAGX,GAAkBE,CAAI,EACzB,MAAOtJ,EACP,OAAQA,EACR,GAAG6J,EACH,MAAO,CAAC,cAAe,eAAeN,CAAQ,EAAE,EAI9C,eAAgBI,GAAUP,GAAkBE,CAAI,EAAE,cAAc,EAChE,OAAQI,EAEV,GAAGlJ,CACT,EACI5V,CACJ,CACA,EChCA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAIof,GAAkBX,GAAmB,UAAW,eAAgB,cAAe,CAAC,CAAC,OAAQ,CAAE,EAAK,uCAAwC,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,UAAW,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,aAAc,IAAO,OAAO,CAAE,CAAC,CAAC,ECT7P;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAIY,GAAiBZ,GAAmB,UAAW,cAAe,aAAc,CAAC,CAAC,OAAQ,CAAE,EAAK,yBAA0B,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,4BAA6B,IAAO,OAAO,CAAE,CAAC,CAAC,ECT7M;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAIa,GAAkBb,GAAmB,UAAW,eAAgB,cAAe,CAAC,CAAC,OAAQ,CAAE,EAAK,iBAAkB,IAAO,OAAO,CAAE,CAAC,CAAC,ECTxI;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAIc,GAAmBd,GAAmB,UAAW,gBAAiB,eAAgB,CAAC,CAAC,OAAQ,CAAE,EAAK,gBAAiB,IAAO,OAAO,CAAE,CAAC,CAAC,ECT1I;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAIe,GAAaf,GAAmB,UAAW,SAAU,SAAU,CAAC,CAAC,OAAQ,CAAE,EAAK,yGAA0G,IAAO,OAAO,CAAE,CAAC,CAAC,ECThN;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAIgB,GAAgBhB,GAAmB,UAAW,aAAc,YAAa,CAAC,CAAC,OAAQ,CAAE,EAAK,4BAA6B,IAAO,QAAS,EAAG,CAAC,OAAQ,CAAE,EAAK,6BAA8B,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,6BAA8B,IAAO,QAAS,EAAG,CAAC,OAAQ,CAAE,EAAK,YAAa,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,aAAc,IAAO,QAAS,EAAG,CAAC,OAAQ,CAAE,EAAK,aAAc,IAAO,OAAO,CAAE,CAAC,CAAC,ECTja;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAIiB,GAAajB,GAAmB,UAAW,SAAU,SAAU,CAAC,CAAC,OAAQ,CAAE,EAAK,aAAc,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,yBAA0B,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,aAAc,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,yBAA0B,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,aAAc,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,yBAA0B,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,aAAc,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,yBAA0B,IAAO,OAAO,CAAE,CAAC,CAAC,ECT3f;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAIkB,GAAclB,GAAmB,UAAW,UAAW,UAAW,CAAC,CAAC,OAAQ,CAAE,EAAK,2CAA4C,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,wCAAyC,IAAO,OAAO,CAAE,CAAC,CAAC,ECTjO;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAImB,GAAanB,GAAmB,UAAW,SAAU,SAAU,CAAC,CAAC,OAAQ,CAAE,EAAK,uCAAwC,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,eAAgB,IAAO,OAAO,CAAE,CAAC,CAAC,ECTjM;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAIoB,GAAoBpB,GAAmB,UAAW,iBAAkB,gBAAiB,CAAC,CAAC,OAAQ,CAAE,EAAK,WAAY,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,YAAa,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,YAAa,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,iBAAkB,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,aAAc,IAAO,OAAO,CAAE,CAAC,CAAC,ECT9U;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,IAAIqB,GAAqBrB,GAAmB,UAAW,kBAAmB,iBAAkB,CAAC,CAAC,OAAQ,CAAE,EAAK,WAAY,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,YAAa,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,YAAa,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,kBAAmB,IAAO,OAAO,CAAE,EAAG,CAAC,OAAQ,CAAE,EAAK,aAAc,IAAO,OAAO,CAAE,CAAC,CAAC,ECclV,MAAMsB,GAAqB,CACzB,UACA,yBACA,wBACA,yBACA,2BACA,iCACF,EAAE,KAAK,IAAI,EAELC,GAAeC,GAGnB,MAAM,KAAKA,EAAK,iBAA8BF,EAAkB,CAAC,EAAE,OAChEG,GAAY,CAACA,EAAQ,QAAUA,EAAQ,aAAa,aAAa,IAAM,MAAA,EAOrE,SAASC,GAAkBC,EAAiD,CACjF,MAAMC,EAASC,EAAAA,IAAI,EAAK,EAClBC,EAAYD,EAAAA,IAA6B,CAAE,IAAK,EAAG,KAAM,EAAG,EAClE,IAAIE,EAA4B,KAC5BC,EAA8B,KAC9BC,EAAyB,QACzBC,EAEJ,MAAMC,EAAkB,IAAM,CAC5B,GAAI,CAACH,GAAW,CAACD,EAAO,OACxB,MAAMK,EAAOJ,EAAQ,sBAAA,EACfK,EAAS,EACTC,EAAQJ,GAAeH,EAAM,YAC7BQ,EAAgB,OAAO,YAAc,SAAS,gBAAgB,YACpE,IAAIC,EAAOP,IAAU,QAAUG,EAAK,KAAOA,EAAK,MAAQE,EACxDE,EAAO,KAAK,IAAIH,EAAQ,KAAK,IAAIG,EAAMD,EAAgBD,EAAQD,CAAM,CAAC,EACtEP,EAAU,MAAQ,CAChB,IAAKM,EAAK,OAASC,EACnB,KAAAG,CAAA,CAEJ,EAEMC,EAAiB,IAAM,CACvBb,EAAO,OAAOO,EAAA,CACpB,EAEMO,EAAyBzmB,GAAwB,CACrD,GAAI,CAAC2lB,EAAO,MAAO,OACnB,MAAMriB,EAAStD,EAAM,OACjB8lB,GAAA,MAAAA,EAAO,SAASxiB,IAAWyiB,GAAA,MAAAA,EAAS,SAASziB,IAEjDojB,EAAM,CAAE,aAAc,GAAO,CAC/B,EAEMC,EAAyC,CAACnB,EAAStc,IAAY,CACnE6c,EAAUP,EACVQ,GAAQ9c,GAAA,YAAAA,EAAS,QAAS,QAC1B+c,EAAc/c,GAAA,YAAAA,EAAS,MACvByc,EAAO,MAAQ,GACViB,EAAAA,SAAS,IAAM,OAClB,GAAI,CAACd,EAAO,OACZI,EAAA,GAEA9jB,EADkBkjB,GAAYQ,CAAK,EACzB,CAAC,IAAX,MAAA1jB,EAAc,OAChB,CAAC,CACH,EAEMskB,EAA4Cxd,GAAY,CAC5D,GAAI,CAACyc,EAAO,MAAO,OACnB,MAAMkB,GAAgB3d,GAAA,YAAAA,EAAS,eAAgB,GAC/Cyc,EAAO,MAAQ,GACXkB,eAAwB,SAC5BnB,GAAA,MAAAA,GACF,EAEMoB,EAAiBtB,GAAgC,CACrDM,EAAQN,CACV,EAEMuB,EAAa/mB,GAAyB,CAC1C,GAAK2lB,EAAO,MACZ,IAAI3lB,EAAM,MAAQ,SAAU,CAC1BA,EAAM,eAAA,EACNA,EAAM,gBAAA,EACN0mB,EAAM,CAAE,aAAc,GAAM,EAC5B,MACF,CACA,GAAI1mB,EAAM,MAAQ,OAAS8lB,EAAO,CAChC,MAAMkB,EAAY1B,GAAYQ,CAAK,EACnC,GAAIkB,EAAU,SAAW,EAAG,OAC5B,MAAMC,EAAQD,EAAU,CAAC,EACnBE,EAAOF,EAAUA,EAAU,OAAS,CAAC,EACrCG,EAAS,SAAS,cACpBnnB,EAAM,WAAamnB,IAAWF,GAAS,CAACnB,EAAM,SAASqB,CAAM,IAC/DnnB,EAAM,eAAA,EACNknB,EAAK,MAAA,GACI,CAAClnB,EAAM,WAAamnB,IAAWD,GAAQ,CAACpB,EAAM,SAASqB,CAAM,KACtEnnB,EAAM,eAAA,EACNinB,EAAM,MAAA,EAEV,EACF,EAEA,cAAO,iBAAiB,SAAUT,CAAc,EAChD,SAAS,iBAAiB,cAAeC,EAAuB,EAAI,EAEpEW,EAAAA,gBAAgB,IAAM,CACpB,OAAO,oBAAoB,SAAUZ,CAAc,EACnD,SAAS,oBAAoB,cAAeC,EAAuB,EAAI,EACvEV,EAAU,KACVD,EAAQ,IACV,CAAC,EAEM,CACL,OAAQuB,EAAAA,SAAS1B,CAAM,EACvB,UAAW0B,EAAAA,SAASxB,CAAS,EAC7B,KAAAc,EACA,MAAAD,EACA,cAAAI,EACA,UAAAC,CAAA,CAEJ,CCtIO,MAAMO,GAAqB,IAE5BC,GAAiB,EAAI,KAErBC,GAAS,IACTC,GAAO,KACPC,GAAM,MACNC,GAAQ,GAAKD,GACbE,GAAO,IAAMF,GAGZ,SAASG,GAAmB5lB,EAA+B,CAChE,GAAI,OAAOA,GAAU,SAAU,OAAO,OAAO,SAASA,CAAK,EAAIA,EAAQ,KACvE,GAAI,OAAOA,GAAU,UAAYA,EAAM,KAAA,IAAW,GAAI,CACpD,MAAM6lB,EAAS,OAAO7lB,CAAK,EAC3B,OAAO,OAAO,SAAS6lB,CAAM,EAAIA,EAAS,IAC5C,CACA,OAAO,IACT,CAGO,SAASC,GAAoB9lB,EAAgC,CAClE,OAAO,OAAOA,GAAU,UAAYA,EAAQ,IAC9C,CAOO,SAAS+lB,GAAqB/lB,EAA+B,CAClE,GAAIA,aAAiB,KAAM,CACzB,MAAMqF,EAAOrF,EAAM,QAAA,EACnB,OAAO,OAAO,MAAMqF,CAAI,EAAI,KAAOA,CACrC,CACA,GAAI,OAAOrF,GAAU,SAAU,OAAO,OAAO,SAASA,CAAK,EAAIA,EAAQ,KACvE,GAAI,OAAOA,GAAU,UAAYA,EAAM,KAAA,IAAW,GAAI,CACpD,MAAM6lB,EAAS,KAAK,MAAM7lB,CAAK,EAC/B,OAAO,OAAO,MAAM6lB,CAAM,EAAI,KAAOA,CACvC,CACA,OAAO,IACT,CAGO,SAASG,GAA2BC,EAA2B,CACpE,MAAMC,EAAU,IAAI,KAAKD,EAAYX,EAAc,EAC7CphB,EAAOlE,GAAkB,OAAOA,CAAK,EAAE,SAAS,EAAG,GAAG,EAC5D,MAAO,CACLkmB,EAAQ,eAAA,EACRhiB,EAAIgiB,EAAQ,YAAA,EAAgB,CAAC,EAC7BhiB,EAAIgiB,EAAQ,WAAA,CAAY,CAAA,EACxB,KAAK,GAAG,EAAI,IAAIhiB,EAAIgiB,EAAQ,aAAa,CAAC,IAAIhiB,EAAIgiB,EAAQ,eAAe,CAAC,IAAIhiB,EAAIgiB,EAAQ,cAAA,CAAe,CAAC,EAC9G,CAaO,SAASC,GACdnmB,EACAomB,EACAC,EAAc,KAAK,MACX,CACR,MAAMJ,EAAYF,GAAqB/lB,CAAK,EAC5C,GAAIimB,IAAc,KAAM,OAAOZ,GAC/B,MAAMiB,EAAOD,EAAMJ,EACnB,OAAIK,EAAOf,GAAea,EAAO,gBAC7BE,EAAOd,GAAaY,EAAO,gBAAgB,KAAK,MAAME,EAAOf,EAAM,CAAC,EACpEe,EAAOb,GAAYW,EAAO,cAAc,KAAK,MAAME,EAAOd,EAAI,CAAC,EAC/Dc,EAAOZ,GAAcU,EAAO,aAAa,KAAK,MAAME,EAAOb,EAAG,CAAC,EAC/Da,EAAOX,GAAaS,EAAO,eAAe,KAAK,MAAME,EAAOZ,EAAK,CAAC,EAC/DU,EAAO,cAAc,KAAK,MAAME,EAAOX,EAAI,CAAC,CACrD,CAEA,SAASY,GAAiBvmB,EAAgBgH,EAA+B,OACvE,MAAM6e,EAASD,GAAmB5lB,CAAK,EACvC,GAAI6lB,IAAW,KAAM,OAAOR,GAC5B,MAAMmB,GAAwBrmB,EAAA6G,EAAO,eAAP,YAAA7G,EAAqB,sBACnD,OAAO,IAAI,KAAK,aAAa,QAASqmB,IAA0B,OAAY,OAAY,CAAE,sBAAAA,CAAA,CAAuB,EAAE,OAAOX,CAAM,CAClI,CAEA,SAASY,GAAkBzmB,EAAgBgH,EAA+B,CACxE,MAAM6e,EAASC,GAAoB9lB,CAAK,EACxC,GAAI6lB,IAAW,KAAM,OAAOR,GAC5B,MAAMqB,EAAS1f,EAAO,cACtB,OAAO6e,GAASa,GAAA,YAAAA,EAAQ,OAAQ,KAAMA,GAAA,YAAAA,EAAQ,QAAS,GACzD,CAEA,SAASC,GAAe3mB,EAAgBgH,EAA+B,SACrE,GAAIhH,GAAU,KAA6B,OAAOqlB,GAClD,MAAMuB,EAAM,OAAO5mB,CAAK,EACxB,QAAO8G,GAAA3G,EAAA6G,EAAO,UAAP,YAAA7G,EAAgB,KAAM0mB,GAAWA,EAAO,QAAUD,KAAlD,YAAA9f,EAAwD,QAAS8f,CAC1E,CAGO,SAASE,GACd9f,EACAhH,EACA+mB,EACQ,CACR,GAAI/mB,GAAU,KAA6B,OAAOqlB,GAClD,OAAQre,EAAO,SAAA,CACb,IAAK,SACH,OAAOuf,GAAiBvmB,EAAOgH,CAAM,EACvC,IAAK,UACH,OAAOyf,GAAkBzmB,EAAOgH,CAAM,EACxC,IAAK,OACH,OAAO2f,GAAe3mB,EAAOgH,CAAM,EACrC,IAAK,WACH,OAAOmf,GAA0BnmB,EAAO+mB,EAAQ,OAAQA,EAAQ,KAAO,KAAK,KAAK,EACnF,QACE,OAAO,OAAO/mB,CAAK,CAAA,CAEzB,CAMO,SAASgnB,GAA2BhnB,EAA+B,CACxE,MAAMimB,EAAYF,GAAqB/lB,CAAK,EAC5C,OAAOimB,IAAc,KAAO,KAAOD,GAA2BC,CAAS,CACzE,CCxHO,MAAMgB,GAA6B,GAC7BC,GAAwD,CAAC,GAAI,GAAI,GAAI,GAAG,EAE9E,SAASC,GAAmBC,EAAmBH,GAA0C,CAC9F,MAAO,CACL,KAAM,EACN,SAAAG,EACA,SAAU,CAAA,EACV,QAAS,CAAA,EACT,QAAS,CAAA,CAAC,CAEd,CAEA,MAAMC,GAAiBrnB,GACrB,OAAOA,GAAU,UAAY,OAAO,UAAUA,CAAK,GAAKA,EAAQ,EAM3D,SAASsnB,EAAsBC,EAAmC,CACvE,MAAMC,EAA4B,CAAA,EAC5BC,MAAmB,IACzB,UAAWxM,KAASsM,EAAM,UAAY,CAAA,EAAI,CAExC,GADI,CAACtM,GAAS,OAAOA,EAAM,OAAU,UAAYA,EAAM,QAAU,IAC7DwM,EAAa,IAAIxM,EAAM,KAAK,EAAG,SACnC,MAAMjb,EAAQ,OAAOib,EAAM,OAAU,SAAWA,EAAM,MAAQ,OAAOA,EAAM,OAAS,EAAE,EAClFjb,EAAM,KAAA,IAAW,KACrBynB,EAAa,IAAIxM,EAAM,KAAK,EAC5BuM,EAAS,KAAK,CAAE,MAAOvM,EAAM,MAAO,MAAAjb,EAAO,EAC7C,CAEA,MAAM0nB,EAA2B,CAAA,EAC3BC,MAAmB,IACzB,UAAW1M,KAASsM,EAAM,SAAW,CAAA,EAAI,CAEvC,GADI,CAACtM,GAAS,OAAOA,EAAM,OAAU,UAAYA,EAAM,QAAU,IAC7D0M,EAAa,IAAI1M,EAAM,KAAK,EAAG,SACnC,MAAM2M,EAAS,MAAM,QAAQ3M,EAAM,MAAM,EACrC,CAAC,GAAG,IAAI,IAAIA,EAAM,OAAO,OAAQjb,GAA2B,OAAOA,GAAU,QAAQ,CAAC,CAAC,EACvF,CAAA,EACA4nB,EAAO,SAAW,IACtBD,EAAa,IAAI1M,EAAM,KAAK,EAC5ByM,EAAQ,KAAK,CAAE,MAAOzM,EAAM,MAAO,OAAA2M,EAAQ,EAC7C,CAEA,MAAMC,EAA4B,CAAA,EAC5BC,MAAoB,IAC1B,UAAW7M,KAASsM,EAAM,SAAW,CAAA,EAC/B,CAACtM,GAAS,OAAOA,EAAM,OAAU,UAAYA,EAAM,QAAU,IAC7D6M,EAAc,IAAI7M,EAAM,KAAK,GAC7BA,EAAM,YAAc,OAASA,EAAM,YAAc,SACrD6M,EAAc,IAAI7M,EAAM,KAAK,EAC7B4M,EAAQ,KAAK,CAAE,MAAO5M,EAAM,MAAO,UAAWA,EAAM,UAAW,GAGjE,MAAO,CACL,KAAMoM,GAAcE,EAAM,IAAI,EAAIA,EAAM,KAAO,EAC/C,SAAUF,GAAcE,EAAM,QAAQ,EAAIA,EAAM,SAAWN,GAC3D,SAAAO,EACA,QAAAE,EACA,QAAAG,CAAA,CAEJ,CAGO,SAASE,GAAoB/lB,EAAiBC,EAA0B,CAC7E,OACED,EAAE,OAASC,EAAE,MACbD,EAAE,WAAaC,EAAE,UACjBD,EAAE,SAAS,SAAWC,EAAE,SAAS,QACjCD,EAAE,QAAQ,SAAWC,EAAE,QAAQ,QAC/BD,EAAE,QAAQ,SAAWC,EAAE,QAAQ,QAC/B,KAAK,UAAUD,EAAE,QAAQ,IAAM,KAAK,UAAUC,EAAE,QAAQ,GACxD,KAAK,UAAUD,EAAE,OAAO,IAAM,KAAK,UAAUC,EAAE,OAAO,GACtD,KAAK,UAAUD,EAAE,OAAO,IAAM,KAAK,UAAUC,EAAE,OAAO,CAE1D,CAOO,SAAS+lB,GACdC,EACAC,EACc,CACd,GAAI,CAACA,EAAS,OAAOZ,EAAsBW,CAAI,EAC/C,MAAME,EAAuB,CAC3B,KAAMD,EAAQ,MAAQD,EAAK,KAC3B,SAAUC,EAAQ,UAAYD,EAAK,SACnC,SAAUC,EAAQ,UAAYD,EAAK,SACnC,QAASC,EAAQ,SAAWD,EAAK,QACjC,QAASC,EAAQ,SAAWD,EAAK,OAAA,EAEnC,OAAOX,EAAsBa,CAAM,CACrC,CAYA,MAAMC,GAAqBC,GAAsE,CAC/F,GAAIA,IAAc,MAAO,MAAO,OAChC,GAAIA,IAAc,OAClB,MAAO,KACT,EAOO,SAASC,GAAoBf,EAAqBgB,EAA0C,CACjG,OAAQA,EAAO,KAAA,CACb,IAAK,aAAc,CACjB,MAAMC,EAAUD,EAAO,MAAM,KAAA,EACvBf,EAAWD,EAAM,SAAS,OAAQtM,GAAUA,EAAM,QAAUsN,EAAO,KAAK,EAC9E,OAAIC,IAAY,IAAIhB,EAAS,KAAK,CAAE,MAAOe,EAAO,MAAO,MAAOA,EAAO,KAAA,CAAO,EACvEjB,EAAsB,CAAE,GAAGC,EAAO,SAAAC,EAAU,KAAM,EAAG,CAC9D,CACA,IAAK,aAAc,CACjB,MAAME,EAAUH,EAAM,QAAQ,OAAQtM,GAAUA,EAAM,QAAUsN,EAAO,KAAK,EAC5E,OAAIA,EAAO,OAAO,OAAS,GAAGb,EAAQ,KAAK,CAAE,MAAOa,EAAO,MAAO,OAAQ,CAAC,GAAGA,EAAO,MAAM,EAAG,EACvFjB,EAAsB,CAAE,GAAGC,EAAO,QAAAG,EAAS,KAAM,EAAG,CAC7D,CACA,IAAK,OAAQ,CACX,MAAMe,EAAWlB,EAAM,QAAQ,KAAMtM,GAAUA,EAAM,QAAUsN,EAAO,KAAK,EACrEG,EAAgBN,GAAkBK,GAAA,YAAAA,EAAU,SAAS,EAC3D,IAAIZ,EACJ,OAAIU,EAAO,UACTV,EAAUN,EAAM,QAAQ,OAAQtM,GAAUA,EAAM,QAAUsN,EAAO,KAAK,EAClEG,KAAuB,KAAK,CAAE,MAAOH,EAAO,MAAO,UAAWG,EAAe,GAEjFb,EAAUa,EAAgB,CAAC,CAAE,MAAOH,EAAO,MAAO,UAAWG,CAAA,CAAe,EAAI,CAAA,EAE3EpB,EAAsB,CAAE,GAAGC,EAAO,QAAAM,EAAS,KAAM,EAAG,CAC7D,CACA,IAAK,WACH,OAAKR,GAAckB,EAAO,IAAI,EACvBjB,EAAsB,CAAE,GAAGC,EAAO,KAAMgB,EAAO,KAAM,EADpBhB,EAG1C,IAAK,gBACH,MAAI,CAACF,GAAckB,EAAO,QAAQ,GAAKA,EAAO,WAAahB,EAAM,SAAiBA,EAC3ED,EAAsB,CAAE,GAAGC,EAAO,SAAUgB,EAAO,SAAU,KAAM,EAAG,EAE/E,IAAK,gBAAiB,CACpB,MAAMI,EAAOtB,GAAckB,EAAO,IAAI,EAAIA,EAAO,KAAOhB,EAAM,KACxDH,EAAWC,GAAckB,EAAO,QAAQ,EAAIA,EAAO,SAAWhB,EAAM,SAC1E,OAAOD,EAAsB,CAAE,GAAGC,EAAO,KAAAoB,EAAM,SAAAvB,EAAU,CAC3D,CACA,IAAK,gBACH,OAAOE,EAAsB,CAC3B,GAAGC,EACH,KAAM,EACN,SAAUA,EAAM,SAAS,OAAQtM,GAAUA,EAAM,QAAUsN,EAAO,KAAK,EACvE,QAAShB,EAAM,QAAQ,OAAQtM,GAAUA,EAAM,QAAUsN,EAAO,KAAK,EACrE,QAAShB,EAAM,QAAQ,OAAQtM,GAAUA,EAAM,QAAUsN,EAAO,KAAK,CAAA,CACtE,EAEH,IAAK,UACH,OAAOjB,EAAsBiB,EAAO,KAAK,CAC3C,CAEJ,CAyBO,SAASK,GACdrB,EACA5c,EACqB,CACrB,MAAMke,EAAa,IAAI,IAAIle,EAAQ,OAAQ3D,GAAWA,EAAO,YAAcA,EAAO,WAAa,MAAM,EAAE,IAAKA,GAAWA,EAAO,KAAK,CAAC,EAC9H8hB,EAAa,IAAI,IAAIne,EAAQ,OAAQ3D,GAAWA,EAAO,YAAcA,EAAO,WAAa,MAAM,EAAE,IAAKA,GAAWA,EAAO,KAAK,CAAC,EAC9H+hB,EAAW,IAAI,IAAIpe,EAAQ,OAAQ3D,GAAWA,EAAO,QAAQ,EAAE,IAAKA,GAAWA,EAAO,KAAK,CAAC,EAC5FwgB,EAAWD,EAAM,SAAS,OAAQtM,GAAU4N,EAAW,IAAI5N,EAAM,KAAK,CAAC,EACvEyM,EAAUH,EAAM,QAAQ,OAAQtM,GAAU6N,EAAW,IAAI7N,EAAM,KAAK,CAAC,EACrE4M,EAAUN,EAAM,QAAQ,OAAQtM,GAAU8N,EAAS,IAAI9N,EAAM,KAAK,CAAC,EACzE,OACEuM,EAAS,SAAWD,EAAM,SAAS,QACnCG,EAAQ,SAAWH,EAAM,QAAQ,QACjCM,EAAQ,SAAWN,EAAM,QAAQ,OAE1B,KAEFD,EAAsB,CAAE,GAAGC,EAAO,KAAM,EAAG,SAAAC,EAAU,QAAAE,EAAS,QAAAG,EAAS,CAChF,CAMO,SAASmB,GAAoBjpB,EAA4B,CAC9D,MAAO,GAAG,OAAOA,CAAG,IAAI,OAAOA,CAAG,CAAC,EACrC,CAEO,SAASkpB,GAAoBC,EAAuC,CACzE,MAAMC,EAAYD,EAAQ,QAAQ,GAAG,EACrC,GAAIC,GAAa,EAAG,OAAO,KAC3B,MAAMpH,EAAOmH,EAAQ,MAAM,EAAGC,CAAS,EACjCvC,EAAMsC,EAAQ,MAAMC,EAAY,CAAC,EACvC,GAAIpH,IAAS,SAAU,OAAO6E,EAC9B,GAAI7E,IAAS,SAAU,CACrB,MAAMqH,EAAU,OAAOxC,CAAG,EAC1B,OAAO,OAAO,SAASwC,CAAO,EAAIA,EAAU,IAC9C,CACA,OAAO,IACT,CAIA,MAAMC,GAAmB,CAACriB,EAAuBhH,IAA2B,SAC1E,MAAM4mB,EAAM,OAAO5mB,CAAK,EACxB,QAAO8G,GAAA3G,EAAA6G,EAAO,UAAP,YAAA7G,EAAgB,KAAM0mB,GAAWA,EAAO,QAAUD,KAAlD,YAAA9f,EAAwD,QAAS8f,CAC1E,EAEA,SAAS0C,GAAiBtiB,EAAmChH,EAAkC,CAC7F,GAAIA,GAAU,WAAoC,CAAE,KAAM,EAAG,aAAc,EAAA,EAC3E,OAAQgH,GAAA,YAAAA,EAAQ,SAAA,CACd,IAAK,SACH,OAAI,OAAOhH,GAAU,UAAY,OAAO,SAASA,CAAK,EAAU,CAAE,KAAM,EAAG,aAAcA,CAAA,EACrF,OAAOA,GAAU,UAAYA,EAAM,KAAA,IAAW,IAAM,OAAO,SAAS,OAAOA,CAAK,CAAC,EAC5E,CAAE,KAAM,EAAG,aAAc,OAAOA,CAAK,CAAA,EAEvC,CAAE,KAAM,EAAG,aAAc,EAAA,EAElC,IAAK,WAAY,CACf,GAAI,OAAOA,GAAU,UAAY,OAAO,SAASA,CAAK,EAAG,MAAO,CAAE,KAAM,EAAG,aAAcA,CAAA,EACzF,GAAI,OAAOA,GAAU,UAAYA,EAAM,KAAA,IAAW,GAAI,CACpD,MAAM6lB,EAAS,KAAK,MAAM7lB,CAAK,EAC/B,GAAI,CAAC,OAAO,MAAM6lB,CAAM,QAAU,CAAE,KAAM,EAAG,aAAcA,CAAA,CAC7D,CACA,MAAO,CAAE,KAAM,EAAG,aAAc,EAAA,CAClC,CACA,IAAK,UACH,OAAI,OAAO7lB,GAAU,UAAkB,CAAE,KAAM,EAAG,aAAcA,CAAA,EACzD,CAAE,KAAM,EAAG,aAAc,EAAA,EAElC,IAAK,OACH,MAAO,CAAE,KAAM,EAAG,aAAcqpB,GAAiBriB,EAAQhH,CAAK,CAAA,EAEhE,QACE,MAAO,CAAE,KAAM,EAAG,aAAc,OAAOA,CAAK,CAAA,CAC9C,CAEJ,CAEA,MAAMupB,GAAgB,CAACvnB,EAAqCC,IACtD,OAAOD,GAAM,UAAY,OAAOC,GAAM,SAAiBD,EAAIC,EAC3D,OAAOD,GAAM,WAAa,OAAOC,GAAM,WAAmBD,EAAI,EAAI,IAAMC,EAAI,EAAI,GAE7E,OAAOD,CAAC,EAAE,cAAc,OAAOC,CAAC,EAAG,YAAY,EASjD,SAASunB,GACdlY,EACA3G,EACA4c,EAC4C,CAC5C,MAAMkC,EAAgB,IAAI,IAAI9e,EAAQ,IAAK3D,GAAW,CAACA,EAAO,MAAOA,CAAM,CAAC,CAAC,EACvE0iB,EAAapC,EAAsBC,CAAK,EAE9C,IAAIoC,EAAgBrY,EAAK,OAAQ7H,GAAQ,CACvC,MAAMmgB,EAASngB,EACf,UAAWogB,KAAUH,EAAW,SAAU,CACxC,MAAM9C,EAAMgD,EAAOC,EAAO,KAAK,EAE/B,GADIjD,GAAQ,MACR,CAAC,OAAOA,CAAG,EAAE,YAAA,EAAc,SAASiD,EAAO,MAAM,YAAA,CAAa,EAAG,MAAO,EAC9E,CACA,UAAWC,KAAUJ,EAAW,QAAS,CACvC,MAAM9C,EAAMgD,EAAOE,EAAO,KAAK,EAC/B,GAAI,CAACA,EAAO,OAAO,SAAS,OAAOlD,CAAG,CAAC,EAAG,MAAO,EACnD,CACA,MAAO,EACT,CAAC,EAED,GAAI8C,EAAW,QAAQ,OAAS,EAAG,CACjC,MAAMK,EAAUJ,EAAS,IAAI,CAAClgB,EAAKkK,KAAW,CAAE,IAAAlK,EAAK,MAAAkK,CAAA,EAAQ,EAC7DoW,EAAQ,KAAK,CAAC/nB,EAAGC,IAAM,CACrB,UAAW+nB,KAAQN,EAAW,QAAS,CACrC,MAAM1iB,EAASyiB,EAAc,IAAIO,EAAK,KAAK,EACrC1F,EAAOgF,GAAiBtiB,EAAShF,EAAE,IAAgCgoB,EAAK,KAAK,CAAC,EAC9EC,EAAQX,GAAiBtiB,EAAS/E,EAAE,IAAgC+nB,EAAK,KAAK,CAAC,EAErF,GAAI1F,EAAK,OAAS2F,EAAM,KAAM,OAAO3F,EAAK,KAAO2F,EAAM,KACvD,MAAMC,EAAWX,GAAcjF,EAAK,aAAc2F,EAAM,YAAY,EACpE,GAAIC,IAAa,EAAG,OAAOF,EAAK,YAAc,MAAQE,EAAW,CAACA,CACpE,CACA,OAAOloB,EAAE,MAAQC,EAAE,KACrB,CAAC,EACD0nB,EAAWI,EAAQ,IAAK9O,GAAUA,EAAM,GAAG,CAC7C,CAEA,MAAMkP,EAAQR,EAAS,OACjBS,EAAY,KAAK,IAAI,EAAG,KAAK,KAAKD,EAAQT,EAAW,QAAQ,CAAC,EAC9Df,EAAO,KAAK,IAAI,KAAK,IAAI,EAAGe,EAAW,IAAI,EAAGU,CAAS,EACvD3iB,GAASkhB,EAAO,GAAKe,EAAW,SACtC,MAAO,CAAE,KAAMC,EAAS,MAAMliB,EAAOA,EAAQiiB,EAAW,QAAQ,EAAG,MAAAS,EAAO,KAAAxB,CAAA,CAC5E,CCtVO,MAAM0B,GAA+B,CAC1C,KAAM,wBACN,eAAgB,kCAChB,WAAY,8BACZ,QAAS,2BACT,QAAS,yBACX,EAyBO,MAAMC,UAA4B,KAAM,CAM7C,YACEC,EACAC,EACAC,EAAsC,CAAA,EACtC,CACA,MAAMD,CAAO,EAVNE,GAAA,aACAA,GAAA,eACAA,GAAA,mBACAA,GAAA,cAQP,KAAK,KAAO,sBACZ,KAAK,KAAOH,EACZ,KAAK,OAASE,EAAQ,OACtB,KAAK,WAAaA,EAAQ,WAC1B,KAAK,MAAQA,EAAQ,KACvB,CACF,CAEA,MAAME,GAAgBC,GACpBA,aAAiBN,EACbM,EAAM,OAASP,GAA6B,SAC5CO,aAAiB,cAEf,OAAOA,GAAU,UACfA,IAAU,MACV,SAAUA,IACTA,EAA6B,OAAS,aAE3CC,GAAgBC,GACpB,IAAIR,EACFD,GAA6B,QAC7B,mCACA,CAAE,MAAAS,CAAA,CACJ,EAEIC,GAAmB,CACvB5f,EACA6f,IAC2B,CAC3B,MAAMtB,EAAqC,CACzC,OAAQ,mBACR,GAAGve,CAAA,EAGL,OAAI6f,IAAW,QAAU,CAAC,OAAO,KAAKtB,CAAU,EAAE,KAAM3pB,GAAQA,EAAI,YAAA,IAAkB,cAAc,IAClG2pB,EAAW,cAAc,EAAI,oBAGxBA,CACT,EAEMuB,GAAe,CAACD,EAA8BE,IAAwC,CAC1F,GAAIF,IAAW,MACf,OAA+B,KAAK,UAAhCE,IAAS,OAAiC,KACxBA,CAD4B,CAEpD,EAGaC,GAAsC,MAAOC,EAAKnkB,IAAY,CACzE,IAAIokB,EAEJ,GAAI,CACFA,EAAW,MAAM,MAAMD,EAAK,CAC1B,OAAQnkB,EAAQ,OAChB,QAAS8jB,GAAiB9jB,EAAQ,QAASA,EAAQ,MAAM,EACzD,KAAMgkB,GAAahkB,EAAQ,OAAQA,EAAQ,IAAI,EAC/C,OAAQA,EAAQ,MAAA,CACjB,CACH,OAAS2jB,EAAO,CACd,MAAID,GAAaC,CAAK,GAAK3jB,EAAQ,OAAO,QAClC4jB,GAAaD,CAAK,EAEpB,IAAIN,EACRD,GAA6B,QAC7B,8BACA,CAAE,MAAOO,CAAA,CAAM,CAEnB,CAEA,GAAI,CAACS,EAAS,GACZ,MAAM,IAAIf,EACRD,GAA6B,KAC7B,wCAAwCgB,EAAS,MAAM,IACvD,CAAE,OAAQA,EAAS,OAAQ,WAAYA,EAAS,UAAA,CAAW,EAI/D,GAAIA,EAAS,SAAW,IACtB,MAAM,IAAIf,EACRD,GAA6B,eAC7B,iDAAA,EAIJ,IAAIiB,EACJ,GAAI,CACFA,EAAO,MAAMD,EAAS,KAAA,CACxB,OAAST,EAAO,CACd,MAAID,GAAaC,CAAK,GAAK3jB,EAAQ,OAAO,QAClC4jB,GAAaD,CAAK,EAEpB,IAAIN,EACRD,GAA6B,QAC7B,0CACA,CAAE,MAAOO,CAAA,CAAM,CAEnB,CAEA,GAAI,CAACU,EAAK,OACR,MAAM,IAAIhB,EACRD,GAA6B,eAC7B,iDAAA,EAIJ,GAAI,CACF,OAAO,KAAK,MAAMiB,CAAI,CACxB,OAASV,EAAO,CACd,MAAM,IAAIN,EACRD,GAA6B,WAC7B,2CACA,CAAE,MAAOO,CAAA,CAAM,CAEnB,CACF,EAOaW,GAAwB,MACnCC,EACAJ,EACAnkB,IACqB,CACrB,GAAI,CACF,MAAMjH,EAAQ,MAAOwrB,GAAWL,IAAqBC,EAAK,CACxD,GAAGnkB,EACH,QAAS8jB,GAAiB9jB,EAAQ,QAASA,EAAQ,MAAM,EACzD,KAAMA,EAAQ,SAAW,MAAQ,OAAYA,EAAQ,IAAA,CACtD,EAED,GAAIjH,GAAU,KACZ,MAAM,IAAIsqB,EACRD,GAA6B,eAC7B,iDAAA,EAGJ,OAAOrqB,CACT,OAAS4qB,EAAO,CACd,MAAID,GAAaC,CAAK,GAAK3jB,EAAQ,OAAO,QAClC4jB,GAAaD,CAAK,EAEtBA,aAAiBN,EAA2BM,EAC1C,IAAIN,EACRD,GAA6B,QAC7B,8BACA,CAAE,MAAOO,CAAA,CAAM,CAEnB,CACF,EAiCaa,GAAkC,IAAiC,CAC9E,IAAIC,EAAW,GACXC,EAAe,EACnB,MAAMC,EAAwE,CAC5E,OAAQ,OACR,KAAM,MAAA,EAEFC,EAAiD,CAAE,OAAQ,EAAG,KAAM,CAAA,EAEpEC,EAAUC,GAAsC,OACpD,MAAMC,EAAgCD,EAAQ,CAACA,CAAK,EAAI,CAAC,SAAU,MAAM,EACzE,UAAWE,KAAgBD,GACzB7rB,EAAAyrB,EAAYK,CAAY,IAAxB,MAAA9rB,EAA2B,QAC3ByrB,EAAYK,CAAY,EAAI,OAC5BJ,EAAUI,CAAY,EAAI,EAAEN,CAEhC,EAEMO,EAAY,CAACH,EAA4BI,IAAA,OAC7C,OAACT,GAAYG,EAAUE,CAAK,IAAMI,GAAY,GAAChsB,EAAAyrB,EAAYG,CAAK,IAAjB,MAAA5rB,EAAoB,OAAO,UAsC5E,MAAO,CACL,IArCU,MACV4rB,EACAK,IACsC,CACtC,GAAIV,QAAiB,CAAE,OAAQ,UAAW,OAAQ,WAAY,SAAUC,CAAA,EAExEG,EAAOC,CAAK,EACZ,MAAMM,EAAa,IAAI,gBACjBF,EAAW,EAAER,EACnBC,EAAYG,CAAK,EAAIM,EACrBR,EAAUE,CAAK,EAAII,EAEnB,GAAI,CACF,MAAMnsB,EAAQ,MAAMosB,EAAU,CAAE,OAAQC,EAAW,OAAQ,SAAAF,EAAU,EACrE,OAAKD,EAAUH,EAAOI,CAAQ,EAOvB,CAAE,OAAQ,WAAY,MAAAnsB,EAAO,SAAAmsB,CAAA,EAN3B,CACL,OAAQ,UACR,OAAQT,EAAW,WAAaW,EAAW,OAAO,QAAU,UAAY,QACxE,SAAAF,CAAA,CAIN,OAASvB,EAAO,CACd,GAAI,CAACsB,EAAUH,EAAOI,CAAQ,GAAKE,EAAW,OAAO,SAAW1B,GAAaC,CAAK,EAChF,MAAO,CACL,OAAQ,UACR,OAAQc,EAAW,WAAaW,EAAW,OAAO,QAAU,UAAY,QACxE,SAAAF,CAAA,EAGJ,MAAMvB,CACR,QAAA,CACMiB,EAAUE,CAAK,IAAMI,IAAUP,EAAYG,CAAK,EAAI,OAC1D,CACF,EAIE,OAAAD,EACA,UAAAI,EACA,QAAS,IAAM,CACTR,IACJA,EAAW,GACXI,EAAA,EACF,CAAA,CAEJ,ECpLaQ,GAAmD,CAC9D,OAAQ,KACR,OAAQ,KACR,MAAO,KACP,QAAS,KACT,eAAgB,MAChB,eAAgB,OAChB,QAAS,OACT,MAAO,OACP,UAAW,OACX,MAAO,KACP,gBAAiB,KACjB,gBAAkBlhB,GAAU,GAAGA,CAAK,OACpC,cAAgBA,GAAU,GAAGA,CAAK,OAClC,aAAeA,GAAU,GAAGA,CAAK,MACjC,eAAiBA,GAAU,GAAGA,CAAK,OACnC,cAAgBA,GAAU,GAAGA,CAAK,MAClC,UAAW,OACX,YAAa,SACb,cAAgBA,GAAU,MAAMA,CAAK,KACrC,aAAc,MACd,SAAU,MACV,SAAU,OACV,MAAQA,GAAU,KAAKA,CAAK,KAC5B,UAAW,OACX,WAAY,KACZ,QAAUqN,GAAS,GAAGA,CAAI,OAC1B,WAAakQ,GAAS,KAAKA,CAAI,KAC/B,eAAiBtG,GAAU,MAAMA,CAAK,SACtC,mBAAoB,SACpB,qBAAsB,gBACtB,aAAeA,GAAU,MAAMA,CAAK,MACpC,UAAY1O,GAAU,OAAOA,CAAK,IACpC,EAoEO,MAAM4Y,WAA2B,KAAM,CAK5C,YAAYhC,EAA8BC,EAAiBC,EAAmB,CAC5E,MAAMD,CAAO,EALGE,GAAA,YAAO,sBAChBA,GAAA,aACAA,GAAA,gBAIP,KAAK,KAAOH,EACZ,KAAK,QAAUE,EACf,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,CASA,MAAM+B,GAAcxsB,GAAmDA,GAAU,KAE3EysB,EAAO,CAAClC,EAA8BC,EAAiBC,IAA6B,CACxF,MAAM,IAAI8B,GAAmBhC,EAAMC,EAASC,CAAO,CACrD,EAEMiC,GAAqB1sB,GACzB,OAAOA,GAAU,UAAY,OAAO,UAAUA,CAAK,GAAKA,EAAQ,EAE5D2sB,GAAY3sB,GACf,OAAOA,GAAU,UAAYA,EAAM,OAAS,GAAO,OAAOA,GAAU,UAAY,OAAO,SAASA,CAAK,EAEjG,SAAS4sB,GAAuBjiB,EAAmC,CACxE,GAAI,CAAC,MAAM,QAAQA,CAAO,GAAKA,EAAQ,SAAW,EAChD,OAAO8hB,EAAK,kBAAmB,4CAA4C,EAE7E,MAAMI,MAAa,IACnB,UAAW7lB,KAAU2D,EAAS,EACxB,CAAC3D,GAAU,OAAOA,GAAW,WAC/BylB,EAAK,kBAAmB,wCAAwC,EAElE,MAAMzsB,EAAQgH,EACR8lB,EAAQ9sB,EAAM,MACpB,GAAI,OAAO8sB,GAAU,UAAYA,EAAM,KAAA,IAAW,GAChD,OAAOL,EAAK,uBAAwB,iDAAiD,EAEnFI,EAAO,IAAIC,CAAK,GAClBL,EAAK,yBAA0B,mCAAmCK,CAAK,IAAKA,CAAK,EAEnFD,EAAO,IAAIC,CAAK,GACZ,OAAO9sB,EAAM,OAAU,UAAYA,EAAM,MAAM,SAAW,IAC5DysB,EAAK,kBAAmB,UAAUzsB,EAAM,KAAK,oBAAoB,EAE9D,CAAC,OAAQ,SAAU,WAAY,UAAW,MAAM,EAAE,SAASA,EAAM,UAAY,EAAE,GAClFysB,EAAK,kBAAmB,UAAUzsB,EAAM,KAAK,+BAA+B,EAE9E,UAAW+sB,IAAQ,CAAC,WAAY,aAAc,aAAc,UAAW,WAAW,EAC5E/sB,EAAM+sB,CAAI,IAAM,QAAa,OAAO/sB,EAAM+sB,CAAI,GAAM,WACtDN,EAAK,kBAAmB,UAAUzsB,EAAM,KAAK,IAAI+sB,CAAI,sBAAuB/sB,EAAM,KAAK,EAY3F,GATIA,EAAM,QAAU,QAAa,CAAC,CAAC,OAAQ,SAAU,OAAO,EAAE,SAASA,EAAM,KAAK,GAChFysB,EAAK,kBAAmB,UAAUzsB,EAAM,KAAK,qBAAsBA,EAAM,KAAK,EAE5EA,EAAM,YAAcA,EAAM,WAAa,QACzCysB,EAAK,sBAAuB,UAAUzsB,EAAM,KAAK,2CAA4CA,EAAM,KAAK,EAEtGA,EAAM,YAAcA,EAAM,WAAa,QACzCysB,EAAK,sBAAuB,UAAUzsB,EAAM,KAAK,4CAA6CA,EAAM,KAAK,EAEvGA,EAAM,WAAa,OAAQ,CACxB,MAAM,QAAQA,EAAM,OAAO,GAC9BysB,EAAK,wBAAyB,eAAezsB,EAAM,KAAK,qBAAsBA,EAAM,KAAK,EAE3F,MAAMiH,MAAc,IACpB,UAAW4f,KAAU7mB,EAAM,SACrB,CAAC6mB,GAAU,OAAOA,EAAO,OAAU,UAAY,OAAOA,EAAO,OAAU,UAAaA,EAAO,WAAa,QAAa,OAAOA,EAAO,UAAa,YAClJ4F,EAAK,kBAAmB,eAAezsB,EAAM,KAAK,0BAA2BA,EAAM,KAAK,EAEtFiH,EAAQ,IAAI4f,EAAO,KAAK,GAC1B4F,EAAK,wBAAyB,eAAezsB,EAAM,KAAK,iCAAkC6mB,EAAO,KAAK,EAExG5f,EAAQ,IAAI4f,EAAO,KAAK,CAE5B,CAUA,GATI7mB,EAAM,QAAU,SAAc,CAAC,OAAO,SAASA,EAAM,KAAK,GAAKA,EAAM,OAAS,IAChFysB,EAAK,uBAAwB,UAAUzsB,EAAM,KAAK,2BAA4BA,EAAM,KAAK,EAEvFA,EAAM,WAAa,SAAc,CAAC,OAAO,SAASA,EAAM,QAAQ,GAAKA,EAAM,UAAY,IACzFysB,EAAK,uBAAwB,UAAUzsB,EAAM,KAAK,8BAA+BA,EAAM,KAAK,EAE1FA,EAAM,QAAU,QAAaA,EAAM,WAAa,QAAaA,EAAM,MAAQA,EAAM,UACnFysB,EAAK,uBAAwB,UAAUzsB,EAAM,KAAK,uCAAwCA,EAAM,KAAK,EAEnGA,EAAM,eAAiB,OAAW,EAChC,CAACA,EAAM,cAAgB,OAAOA,EAAM,cAAiB,WACvDysB,EAAK,wBAAyB,UAAUzsB,EAAM,KAAK,4BAA6BA,EAAM,KAAK,EAE7F,MAAMwmB,EAAwBxmB,EAAM,aAAa,sBAE/CwmB,IAA0B,SACzB,CAAC,OAAO,UAAUA,CAAqB,GAAKA,EAAwB,GAAKA,EAAwB,KAElGiG,EAAK,wBAAyB,UAAUzsB,EAAM,KAAK,0DAA2DA,EAAM,KAAK,CAE7H,CACIA,EAAM,gBAAkB,SAExB,CAACA,EAAM,eACP,OAAOA,EAAM,eAAkB,UAC/B,OAAOA,EAAM,cAAc,MAAS,UACpC,OAAOA,EAAM,cAAc,OAAU,WAErCysB,EAAK,kBAAmB,UAAUzsB,EAAM,KAAK,6BAA8BA,EAAM,KAAK,CAG5F,CACA,OAAO2K,CACT,CAEO,SAASqiB,GAA0BC,EAA8C,CACtF,GAAIA,IAAe,OAAW,MAAO,CAAA,EACrC,GAAI,CAACA,GAAc,OAAOA,GAAe,SACvC,OAAOR,EAAK,qBAAsB,uCAAuC,EAE3E,MAAMzsB,EAAQitB,EAId,GAHIjtB,EAAM,kBAAoB,QAAa,CAAC0sB,GAAkB1sB,EAAM,eAAe,GACjFysB,EAAK,qBAAsB,wDAAwD,EAEjFzsB,EAAM,kBAAoB,OAAW,EACnC,CAAC,MAAM,QAAQA,EAAM,eAAe,GAAKA,EAAM,gBAAgB,SAAW,IAC5EysB,EAAK,qBAAsB,uDAAuD,EAEpF,MAAMxlB,MAAc,IACpB,UAAWmgB,KAAYpnB,EAAM,iBACvB,CAAC0sB,GAAkBtF,CAAQ,GAAKngB,EAAQ,IAAImgB,CAAQ,IACtDqF,EAAK,qBAAsB,mEAAmE,EAEhGxlB,EAAQ,IAAImgB,CAAQ,CAExB,CACA,OAAOpnB,CACT,CAEO,SAASktB,GAAsBC,EAAgC,EAChE,CAACA,GAAU,OAAOA,GAAW,WAC/BV,EAAK,kBAAmB,mCAAmC,EAE7D,MAAMzsB,EAAQmtB,GACV,OAAOntB,EAAM,QAAW,UAAYA,EAAM,OAAO,KAAA,IAAW,KAC9DysB,EAAK,wBAAyB,6CAA6C,EAE7E,MAAM9hB,EAAUiiB,GAAuB5sB,EAAM,OAAO,EAC9C6sB,EAAS,IAAI,IAAIliB,EAAQ,IAAK3D,GAAWA,EAAO,KAAK,CAAC,EAC5D,GAAIhH,EAAM,iBAAmB,OAAW,CACjC,MAAM,QAAQA,EAAM,cAAc,GACrCysB,EAAK,0BAA2B,yCAAyC,EAE3E,MAAMW,MAAW,IACjB,UAAWvF,KAAW7nB,EAAM,eAAgB,EACtC,CAAC6nB,GAAW,CAACgF,EAAO,IAAIhF,EAAQ,KAAK,GAAK,CAAC,CAAC,MAAO,MAAM,EAAE,SAASA,EAAQ,SAAS,GAAKuF,EAAK,IAAIvF,EAAQ,KAAK,IAClH4E,EAAK,0BAA2B,gEAAiE5E,CAAO,EAE1G,MAAM7gB,EAAS2D,EAAQ,KAAMvH,GAASA,EAAK,QAAUykB,EAAQ,KAAK,EAC7D7gB,GAAA,MAAAA,EAAQ,UACXylB,EAAK,0BAA2B,+BAA+B5E,EAAQ,KAAK,oBAAqBA,EAAQ,KAAK,EAEhHuF,EAAK,IAAIvF,EAAQ,KAAK,CACxB,CACF,CACA,IAAIoF,EAA0CjtB,EAAM,WACpD,OAAIitB,IAAe,UACb,CAACA,GAAc,OAAOA,GAAe,UAAY,CAACP,GAAkBO,EAAW,eAAe,GAAK,CAAC,MAAM,QAAQA,EAAW,eAAe,IAC9IR,EAAK,qBAAsB,+BAA+B,EAE5DO,GAA0BC,CAAU,EAC/BA,EAAW,gBAAgB,SAASA,EAAW,eAAe,IAGjEA,EAAa,CACX,GAAGA,EACH,gBAAiB,CAAC,GAAGA,EAAW,gBAAiBA,EAAW,eAAe,EAAE,KAAK,CAACjrB,EAAGC,IAAMD,EAAIC,CAAC,CAAA,IAIhG,CAAE,GAAGjC,EAAO,WAAAitB,CAAA,CACrB,CAEO,SAASI,GAA4B9F,EAAiD,CAC3F,GAAIA,IAAU,OAAW,QACrB,CAACA,GAAS,OAAOA,GAAU,WAAUkF,EAAK,wBAAyB,yCAAyC,EAChH,MAAMzsB,EAAQunB,EACd,OAAIvnB,EAAM,OAAS,QAAa,CAAC0sB,GAAkB1sB,EAAM,IAAI,GAAGysB,EAAK,wBAAyB,qCAAqC,EAC/HzsB,EAAM,WAAa,QAAa,CAAC0sB,GAAkB1sB,EAAM,QAAQ,GAAGysB,EAAK,wBAAyB,yCAAyC,EAC3IzsB,EAAM,WAAa,SAAc,CAAC,MAAM,QAAQA,EAAM,QAAQ,GAAKA,EAAM,SAAS,KAAMoD,GAAS,CAACA,GAAQ,OAAOA,EAAK,OAAU,UAAY,OAAOA,EAAK,OAAU,QAAQ,IAC5KqpB,EAAK,wBAAyB,mCAAmC,EAE/DzsB,EAAM,UAAY,SAAc,CAAC,MAAM,QAAQA,EAAM,OAAO,GAAKA,EAAM,QAAQ,KAAMoD,GAAS,CAACA,GAAQ,OAAOA,EAAK,OAAU,UAAY,CAAC,MAAM,QAAQA,EAAK,MAAM,GAAKA,EAAK,OAAO,KAAM6X,GAAU,OAAOA,GAAU,QAAQ,CAAC,IAChOwR,EAAK,wBAAyB,kCAAkC,EAE9DzsB,EAAM,UAAY,SAAc,CAAC,MAAM,QAAQA,EAAM,OAAO,GAAKA,EAAM,QAAQ,KAAMoD,GAAS,CAACA,GAAQ,OAAOA,EAAK,OAAU,UAAY,CAAC,CAAC,MAAO,MAAM,EAAE,SAASA,EAAK,SAAS,CAAC,IACpLqpB,EAAK,wBAAyB,kCAAkC,EAE3DzsB,CACT,CAOO,SAASstB,GACd/F,EACA5c,EACiC,CACjC,GAAI,CAAC4c,EAAO,OAAOA,EACnB,MAAMgG,EAAU,IAAI,IAAI5iB,EAAQ,IAAK3D,GAAW,CAACA,EAAO,MAAOA,CAAM,CAAC,CAAC,EACvE,UAAWiU,KAASsM,EAAM,UAAY,CAAA,EAAI,CACxC,MAAMvgB,EAASumB,EAAQ,IAAItS,EAAM,KAAK,GAClC,EAACjU,GAAA,MAAAA,EAAQ,aAAcA,EAAO,WAAa,SAC7CylB,EAAK,wBAAyB,6BAA6BxR,EAAM,KAAK,sBAAuBA,CAAK,CAEtG,CACA,UAAWA,KAASsM,EAAM,SAAW,CAAA,EAAI,CACvC,MAAMvgB,EAASumB,EAAQ,IAAItS,EAAM,KAAK,GAClC,EAACjU,GAAA,MAAAA,EAAQ,aAAcA,EAAO,WAAa,SAC7CylB,EAAK,wBAAyB,6BAA6BxR,EAAM,KAAK,sBAAuBA,CAAK,CAEtG,CACA,UAAWA,KAASsM,EAAM,SAAW,CAAA,EAAI,CACvC,MAAMvgB,EAASumB,EAAQ,IAAItS,EAAM,KAAK,EACjCjU,GAAA,MAAAA,EAAQ,UACXylB,EAAK,wBAAyB,2BAA2BxR,EAAM,KAAK,oBAAqBA,CAAK,CAElG,CACA,OAAOsM,CACT,CAEO,SAASiG,GAAsClc,EAAemc,EAAqB,CACxF,MAAM1D,EAAU,MAAM,QAAQzY,CAAI,EAAIA,EAAOmb,EAAK,eAAgB,gCAAgC,EAC5F7sB,MAAW,IACjB,UAAW6J,KAAOsgB,EAAS,EACrB,CAACtgB,GAAO,OAAOA,GAAQ,WAAUgjB,EAAK,kBAAmB,8BAA8B,EAC3F,MAAM1sB,EAAO0J,EAAgCgkB,CAAM,EAC9Cd,GAAS5sB,CAAG,KAAQ,kBAAmB,kCAAkC0tB,CAAM,QAAShkB,CAAG,EAChG,MAAMikB,EAAW,GAAG,OAAO3tB,CAAG,IAAI,OAAOA,CAAG,CAAC,GACzCH,EAAK,IAAI8tB,CAAQ,GAAGjB,EAAK,oBAAqB,sBAAsB,OAAO1sB,CAAG,CAAC,IAAKA,CAAG,EAC3FH,EAAK,IAAI8tB,CAAQ,CACnB,CACA,OAAO3D,CACT,CAEO,SAAS4D,GAA4C5sB,EAAiD,CAC3G,MAAM6sB,EAAQ,CAAC,UAAW,OAAQ,QAAQ,EAAE,KAAM7tB,GAAQysB,GAAWzrB,EAAMhB,CAAkC,CAAC,CAAC,EACzG8tB,EAAiB,CAAC,aAAc,UAAU,EAAE,KAAM9tB,GAAQysB,GAAWzrB,EAAMhB,CAAkC,CAAC,CAAC,EAC/GqrB,EAAM,CAAC,YAAa,UAAU,EAAE,KAAMrrB,GAAQysB,GAAWzrB,EAAMhB,CAAkC,CAAC,CAAC,EACnG+tB,EAAQ,CAACF,EAAOC,EAAgBzC,CAAG,EAAE,OAAO,OAAO,EAAE,OAG3D,OAFI0C,IAAU,GAAGrB,EAAK,eAAgB,gEAAgE,EAClGqB,EAAQ,GAAGrB,EAAK,gBAAiB,mDAAmD,EACpFmB,IACE,CAAC,MAAM,QAAQ7sB,EAAM,OAAO,GAAK,CAAC,MAAM,QAAQA,EAAM,IAAI,GAAK,OAAOA,EAAM,QAAW,UAAYA,EAAM,OAAO,KAAA,IAAW,KAC7H0rB,EAAK,eAAgB,gDAAgD,EAEnE1rB,EAAM,UAAY,QAAW0rB,EAAK,2BAA4B,wCAAwC,EACnG,SAELoB,IACE,OAAO9sB,EAAM,YAAe,YAAc,OAAOA,EAAM,UAAa,aACtE0rB,EAAK,eAAgB,wDAAwD,EAE3E1rB,EAAM,aAAe,QAAW0rB,EAAK,oBAAqB,oDAAoD,EAC9G1rB,EAAM,UAAY,QAAW0rB,EAAK,2BAA4B,wCAAwC,EACnG,cAEL,OAAO1rB,EAAM,WAAc,UAAYA,EAAM,UAAU,SAAW,IAAM,OAAOA,EAAM,UAAa,UAAYA,EAAM,SAAS,KAAA,IAAW,KAC1I0rB,EAAK,eAAgB,2CAA2C,EAE9D1rB,EAAM,aAAe,QAAW0rB,EAAK,oBAAqB,oDAAoD,EAC3G,MACT,CAEA,MAAMsB,GAAwB/tB,GAC5B,OAAOA,GAAU,UAAY,OAAO,UAAUA,CAAK,GAAKA,GAAS,EAO5D,SAASguB,GAAyBC,EAAoC,EACvE,CAACA,GAAW,OAAOA,GAAY,UAAY,CAAC,MAAM,QAASA,EAAsC,KAAK,IACxGxB,EAAK,iBAAkB,+DAAgEwB,CAAO,EAEhG,MAAMjuB,EAAQiuB,EACd,OAAKF,GAAqB/tB,EAAM,KAAK,GACnCysB,EAAK,uBAAwB,8DAA+DzsB,EAAM,KAAK,EAEpG0sB,GAAkB1sB,EAAM,IAAI,GAC/BysB,EAAK,sBAAuB,yDAA0DzsB,EAAM,IAAI,EAE7F0sB,GAAkB1sB,EAAM,QAAQ,GACnCysB,EAAK,2BAA4B,6DAA8DzsB,EAAM,QAAQ,EAE3GA,EAAM,MAAO,OAASA,EAAM,UAC9BysB,EAAK,wBAAyB,sDAAuD,CACnF,MAAOzsB,EAAM,MAAO,OACpB,SAAUA,EAAM,QAAA,CACjB,EAECA,EAAM,QAAU,IAAMA,EAAM,OAAS,GAAKA,EAAM,MAAO,OAAS,IAClEysB,EAAK,wBAAyB,sEAAuE,CACnG,KAAMzsB,EAAM,KACZ,MAAOA,EAAM,MAAO,MAAA,CACrB,EAEIiuB,CACT,28EC1bMC,GAAsB,uBACtBC,GAAuB,IACvBC,GAAmB,GACnBC,GAAqB,IACrBC,GAAuB,wiBApC7B,MAAM9wB,EAAQC,EAMRC,EAAOC,EAkBP4wB,EAAgC,CACpC,oBAAA1N,GACA,wBAAAtE,GACA,oBAAAF,GACA,sBAAAD,GACA,WAAY,CAAA,CAAC,EASToS,IAAiBC,GAAAA,EAAAA,uBAAAA,YAAAA,GAAsB,MAAO,EAU9CC,EAAa/K,EAAAA,IAAgB,SAAS,EACtCgL,EAAchL,EAAAA,IAA+B,IAAI,EACjDiL,EAAejL,EAAAA,IAAkB,MAAM,EACvCkL,EAAalL,EAAAA,IAAgB,MAAM,EACnCwJ,EAAStsB,EAAAA,WAAiC,IAAI,EAC9CiuB,EAAmBnL,EAAAA,IAAa,IAAI,EACpCoL,EAAiBpL,EAAAA,IAAa,IAAI,EAElCqL,EAAkBnuB,EAAAA,WAA4B,EAAE,EAChDouB,EAActL,EAAAA,IAAI,IAAI,EACtBuL,EAAmBvL,EAAAA,IAA4D,CACnF,gBAAiB,GACjB,gBAAiB,CAAC,GAAI,GAAI,GAAI,GAAG,CAAA,CAClC,EAEK4D,EAAQ5D,MAAkBwD,IAAoB,EAC9CxU,EAAc9R,EAAAA,WAAgB,EAAE,EAChCspB,EAAQxG,EAAAA,IAAI,CAAC,EACbwL,EAAuBxL,EAAAA,IAAqB,EAAE,EAC9Cxa,EAAmBwa,EAAAA,IAA6B,EAAE,EAClDyL,EAAezL,EAAAA,IAA4B,EAAE,EACnD,IAAI0L,EAAqB,GACrBC,EAAqB,GACrBC,EAAmB,GACnBC,EAA4B,GAE5BC,EAEJ,MAAMrJ,EAASvoB,EAAAA,SAAkC,KAAO,CAAE,GAAGyuB,GAAyB,GAAG9uB,EAAM,MAAA,EAAS,EAClGkyB,GAAa,KAAK,IAAA,EAClBC,GAAc9xB,EAAAA,SAAS,IAAO,OAAO,SAASL,EAAM,GAAG,EAAIA,EAAM,IAAOkyB,EAAW,EAEnFE,EAAcnE,GAAA,EAEpB,SAASoE,GAAcjF,EAAoC,CACzD,OAAOA,aAAiB2B,GACpB3B,EACA,IAAI2B,GAAmB,kBAAmBuD,GAAclF,CAAK,EAAGA,CAAK,CAC3E,CAEA,SAASmF,EAAkBnF,EAAgB,CACzC,MAAMoF,EAAmBH,GAAcjF,CAAK,EAC5C+D,EAAY,MAAQqB,EACpBtB,EAAW,MAAQ,UACdY,IACHA,EAAqB,GACrB5xB,EAAK,eAAgBsyB,CAAgB,EAGzC,CAEA,SAASF,GAAclF,EAAwB,CAC7C,OAAIA,aAAiB2B,GAA2B,GAAG3B,EAAM,OAAO,IAAIA,EAAM,IAAI,IAC1EA,aAAiB,MAAcA,EAAM,QAClC,OAAOA,CAAK,CACrB,CAEA,SAASqF,GAAsBtlB,EAAmC,CAChE,MAAM9H,EAAgC,CAAA,EACtC,UAAWmE,KAAU2D,EAAS9H,EAAKmE,EAAO,KAAK,EAAIA,EAAO,UAAY,GACtEmC,EAAiB,MAAQtG,CAC3B,CAEA,SAASqtB,GAAsBnvB,EAAiE,CAC9F,MAAMovB,EAAkBpvB,EAAM,iBAAmB,GAC3CkG,EAAU,CAAC,GAAIlG,EAAM,iBAAmBmmB,EAAmC,EACjF,OAAKjgB,EAAQ,SAASkpB,CAAe,GAAGlpB,EAAQ,KAAKkpB,CAAe,EACpElpB,EAAQ,KAAK,CAACjF,EAAGC,IAAMD,EAAIC,CAAC,EACrB,CAAE,gBAAAkuB,EAAiB,gBAAiBlpB,CAAA,CAC7C,CAMA,SAASmpB,GAAiBvtB,EAAoB,CAC5CwsB,EAAqB,GACrB,GAAI,CACF9H,EAAM,MAAQ1kB,CAChB,QAAA,CACEwsB,EAAqB,EACvB,CACF,CAEA,SAASgB,IAAa,CAQpB,GAJAb,EAA4BD,EAC5BA,EAAmB,GACnBD,EAAqB,GACrBX,EAAY,MAAQ,KAChBc,IAAyB,OAC3B,GAAI,CACFA,EAAuBpC,GAA4B7vB,EAAM,YAAY,CACvE,OAASotB,EAAO,CACdmF,EAAkBnF,CAAK,EACvB,MACF,CAEFuC,EAAO,MAAQ,KACfyB,EAAa,MAAQ,OACrBE,EAAiB,MAAQ,KACzBC,EAAe,MAAQ,KACvBF,EAAW,MAAQ,OACnBlc,EAAY,MAAQ,CAAA,EACpBwX,EAAM,MAAQ,EAGdmG,GAAe9yB,EAAM,iBAAmB,CAAA,EAAI,EAAK,EACjD4xB,EAAa,MAAQ,CAAA,EACrBmB,GAAA,EACAC,GAAmB,EAAK,EACxBC,EAAe,MAAA,EACfb,EAAY,OAAA,EAEZ,IAAIc,EACJ,GAAI,CACFA,EAAO/C,GAA0BnwB,CAAK,CACxC,OAASotB,EAAO,CACdmF,EAAkBnF,CAAK,EACvB,MACF,CAGA,GAFA8D,EAAW,MAAQgC,EAEfA,IAAS,QAAS,CACpB,GAAI,CACF,MAAM/lB,EAAUiiB,GAAuBpvB,EAAM,OAAO,EAQpD,GAPAwvB,GAA0BxvB,EAAM,UAAU,EAC1CgwB,GAAuBhwB,EAAM,KAAMA,EAAM,MAAO,EAChDwxB,EAAgB,MAAQrkB,EACxBskB,EAAY,MAAQzxB,EAAM,OAC1B0xB,EAAiB,MAAQgB,GAAsB1yB,EAAM,YAAc,CAAA,CAAE,EACrEyyB,GAAsBtlB,CAAO,EACxB6kB,GAA2BlC,GAAsCmC,EAAsB9kB,CAAO,EAC/F6kB,EAA2B,CAC7B,MAAMmB,EAAU/H,GAA8BrB,EAAM,MAAO5c,CAAO,EAC9DgmB,IACFP,GAAiBO,CAAO,EACxBjzB,EAAK,eAAgBizB,CAAO,EAEhC,KAAO,CACL,MAAM1I,EAAOd,GAAmB+H,EAAiB,MAAM,eAAe,EACtEkB,GAAiBpI,GAAyBC,EAAMwH,CAAoB,CAAC,CACvE,CACAD,EAA4B,GAC5BoB,GAAA,CACF,OAAShG,EAAO,CACdmF,EAAkBnF,CAAK,CACzB,CACA,MACF,CACKiG,GAAA,CACP,CAEA,eAAeA,IAAiB,CAC9B,GAAI,EAAAnC,EAAW,QAAU,YAAcA,EAAW,QAAU,OAC5D,CAAAE,EAAa,MAAQ,UACrBE,EAAiB,MAAQ,KACzB,GAAI,CACF,MAAMgC,EAAU,MAAMlB,EAAY,IAAI,SAAU,MAAO,CAAE,OAAAmB,KAAa,CACpE,IAAI9C,EACJ,OAAIS,EAAW,QAAU,WACvBT,EAAU,MAAMzwB,EAAM,WAAA,EAEtBywB,EAAU,MAAM1C,GAAsB/tB,EAAM,QAASA,EAAM,UAAY,CAAE,OAAQ,MAAO,OAAAuzB,EAAQ,EAE3F7D,GAAsBe,CAAO,CACtC,CAAC,EACD,GAAI6C,EAAQ,SAAW,UAAW,OAClC,GAAI,CAACtB,EACH,GAAI,CACFlC,GAAsCmC,EAAsBqB,EAAQ,MAAM,OAAO,CACnF,OAASlG,EAAO,CACdmF,EAAkBnF,CAAK,EACvB,MACF,CAEFoG,GAAYF,EAAQ,KAAK,CAC3B,OAASlG,EAAO,CACd,GAAIA,aAAiB2B,GAAoB,CACvCwD,EAAkBnF,CAAK,EACvB,MACF,CACAgE,EAAa,MAAQ,QACrBE,EAAiB,MAAQlE,EACzBltB,EAAK,eAAgBktB,CAAK,CAC5B,EACF,CAEA,SAASoG,GAAYC,EAA2B,CAC9C9D,EAAO,MAAQ8D,EACfrC,EAAa,MAAQ,QACrBI,EAAgB,MAAQiC,EAAW,QACnChC,EAAY,MAAQgC,EAAW,OAC/B/B,EAAiB,MAAQgB,GAAsBe,EAAW,YAAc,CAAA,CAAE,EAG1E,MAAMC,EAAqC,CAAA,EAC3C,UAAWlqB,KAAUiqB,EAAW,QAC9BC,EAAUlqB,EAAO,KAAK,EAAImC,EAAiB,MAAMnC,EAAO,KAAK,GAAMA,EAAO,UAAY,GAIxF,GAFAmC,EAAiB,MAAQ+nB,EAEpB3B,EAiBE,CAIL,MAAMoB,EAAU/H,GAA8BrB,EAAM,MAAO0J,EAAW,OAAO,EACzEN,KAAqBA,CAAO,EACtBQ,GAAA,CACZ,KAxBuB,CAErB,GADA5B,EAAmB,GACdC,EAIE,CAGL,MAAMmB,EAAU/H,GAA8BrB,EAAM,MAAO0J,EAAW,OAAO,EACzEN,IACFP,GAAiBO,CAAO,EACxBjzB,EAAK,eAAgBizB,CAAO,EAEhC,KAZgC,CAC9B,MAAM1I,EAAOd,GAAmB+H,EAAiB,MAAM,eAAe,EACtEjH,EAAK,QAAUgJ,EAAW,eAAiB,CAAC,GAAGA,EAAW,cAAc,EAAI,CAAA,EAC5Eb,GAAiBpI,GAAyBC,EAAMwH,CAAoB,CAAC,CACvE,CASAD,EAA4B,GACvB2B,GAAA,CACP,CAQF,CAEA,eAAeA,IAAc,CAE3B,GADIzC,EAAW,QAAU,YAAcA,EAAW,QAAU,OACxDE,EAAa,QAAU,QAAS,OACpC,MAAMwC,EAAe7J,EAAM,MACrB8J,EAAU1e,EAAY,MAAM,OAAS,EAC3Ckc,EAAW,MAAQwC,EAAU,aAAe,UAC5CtC,EAAe,MAAQ,KACvB,GAAI,CACF,MAAM+B,EAAU,MAAMlB,EAAY,IAAI,OAAQ,MAAO,CAAE,OAAAmB,KAAa,CAClE,GAAIrC,EAAW,QAAU,WAAY,CACnC,MAAM5uB,EAAS,MAAMtC,EAAM,SAAU4zB,EAAc,CAAE,OAAAL,EAAQ,EACvDO,EAAYtD,GAAyBluB,CAAM,EACjD,OAAA0tB,GAAuB8D,EAAU,MAAOrC,EAAY,KAAK,EAClDqC,CACT,CACA,MAAMrD,EAAU,MAAM1C,GAAsB/tB,EAAM,QAASA,EAAM,SAAW,CAC1E,OAAQ,OACR,KAAM4zB,EACN,OAAAL,CAAA,CACD,EACKO,EAAYtD,GAAyBC,CAAO,EAClD,OAAAT,GAAuB8D,EAAU,MAAOrC,EAAY,KAAK,EAClDqC,CACT,CAAC,EACD,GAAIR,EAAQ,SAAW,UAAW,OAClCne,EAAY,MAAQme,EAAQ,MAAM,MAClC3G,EAAM,MAAQ2G,EAAQ,MAAM,MAC5BjC,EAAW,MAAQ,QAGnBuB,GACE9H,GAAoBf,EAAM,MAAO,CAC/B,KAAM,gBACN,KAAMuJ,EAAQ,MAAM,KACpB,SAAUA,EAAQ,MAAM,QAAA,CACzB,CAAA,CAEL,OAASlG,EAAO,CACdiE,EAAW,MAAQ,QACnBE,EAAe,MAAQnE,EACvBltB,EAAK,aAAc,CAAE,MAAAktB,EAAO,MAAOwG,EAAc,CACnD,CACF,CAEA,SAASR,IAAkB,CACzB,GAAI,CACFpD,GAAuBhwB,EAAM,MAAQ,CAAA,EAAIyxB,EAAY,KAAK,CAC5D,OAASrE,EAAO,CACdmF,EAAkBnF,CAAK,EACvB,MACF,CACA,MAAM9qB,EAAS0pB,GAAqBhsB,EAAM,MAAQ,CAAA,EAAIwxB,EAAgB,MAAOzH,EAAM,KAAK,EACxF5U,EAAY,MAAQ7S,EAAO,KAC3BqqB,EAAM,MAAQrqB,EAAO,MACrB+uB,EAAW,MAAQ,QACf/uB,EAAO,OAASynB,EAAM,MAAM,MAC9B6I,GAAiB,CAAE,GAAG7I,EAAM,MAAO,KAAMznB,EAAO,KAAM,EAExDyxB,GAAqB/zB,EAAM,MAAQ,EAAE,CACvC,CAGA,SAAS+zB,GAAqBjgB,EAAoB,CAChD,GAAI6d,EAAqB,MAAM,SAAW,EAAG,OAC7C,MAAMqC,EAAY,IAAI,IAAIlgB,EAAK,IAAK7H,GAAQuf,GAAqBvf,EAAgCwlB,EAAY,KAAK,CAAkB,CAAC,CAAC,EAChIwC,EAAStC,EAAqB,MAAM,OAAQpvB,GAAQyxB,EAAU,IAAIxI,GAAoBjpB,CAAG,CAAC,CAAC,EAC7F0xB,EAAO,SAAWtC,EAAqB,MAAM,QAAQmB,GAAemB,EAAQ,EAAI,CACtF,CAEA,eAAeC,IAAU,CACvB,GAAI,CAAA/C,EAAY,MAChB,IAAID,EAAW,QAAU,QAAS,CAChCkC,GAAA,EACA,MACF,CACA,GAAIhC,EAAa,QAAU,QAAS,CAClC,MAAMiC,GAAA,EACN,MACF,CACA,MAAMM,GAAA,EACR,CAEAQ,EAAa,CAAE,QAAAD,GAAS,EAExB,SAASE,GAAM7F,EAA0B,CACvCruB,EAAK,QAAS,CAAE,MAAAquB,EAAO,EACnBA,IAAU,SAAe8E,GAAA,EACnBM,GAAA,CACZ,CAMA,SAASU,GAAYhvB,EAAoB,CACvC,MAAM6mB,EAAapC,EAAsBzkB,CAAI,EACzCklB,GAAoB2B,EAAYnC,EAAM,KAAK,IAC3C4H,EAAqB,MAAM,OAAS,GAAGmB,GAAe,CAAA,EAAI,EAAI,EAClE/I,EAAM,MAAQmC,EACdhsB,EAAK,eAAgBgsB,CAAU,EACjC,CAEA,SAASoI,GAAcvJ,EAA4B,CACjDsJ,GAAYvJ,GAAoBf,EAAM,MAAOgB,CAAM,CAAC,CACtD,CAEA,SAASwJ,IAA8B,CACrC,GAAI,CAACpD,EAAY,MAAO,MAAO,GAC/B,GAAI,CAEF,GADahB,GAA0BnwB,CAAK,IAC/B,QAAS,MAAO,GAC7B,MAAMmN,EAAUiiB,GAAuBpvB,EAAM,OAAO,EACpD,OAAAwvB,GAA0BxvB,EAAM,UAAU,EAC1CgwB,GAAuBhwB,EAAM,KAAMA,EAAM,MAAO,EAChD8vB,GAAsCmC,EAAsB9kB,CAAO,EACnE+jB,EAAW,MAAQ,QACnBM,EAAgB,MAAQrkB,EACxBskB,EAAY,MAAQzxB,EAAM,OAC1B0xB,EAAiB,MAAQgB,GAAsB1yB,EAAM,YAAc,CAAA,CAAE,EACrEyyB,GAAsBtlB,CAAO,EAC7BgkB,EAAY,MAAQ,KACpBW,EAAqB,GACrBsB,GAAA,EACO,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAIAvwB,EAAAA,MACEknB,EACA,IAAM,CACA8H,GACAX,EAAW,QAAU,YAAcA,EAAW,QAAU,OACxDE,EAAa,QAAU,SACtBuC,GAAA,CACP,EACA,CAAE,MAAO,MAAA,CAAO,EAGlB9wB,EAAAA,MACE,CAAC,IAAM7C,EAAM,KAAM+pB,EAAOyH,CAAe,EACzC,IAAM,CACJ,GAAIL,EAAY,MAAO,CACrBoD,GAAA,EACA,MACF,CACIrD,EAAW,QAAU,SAAW,CAACC,EAAY,OAAOiC,GAAA,CAC1D,EACA,CAAE,KAAM,EAAA,CAAK,EAIfvwB,EAAAA,MACE,IAAM,CACJ7C,EAAM,WACNA,EAAM,SACNA,EAAM,UACNA,EAAM,SACNA,EAAM,QACNA,EAAM,OACN,KAAK,UAAUA,EAAM,YAAc,IAAI,CAAA,EAEzC,IAAM6yB,GAAA,CAAW,EAMnBhwB,EAAAA,MACE,IAAM7C,EAAM,QACXmN,GAAY,CACX,GAAIgkB,EAAY,MAAO,CACrBoD,GAAA,EACA,MACF,CACA,GAAIrD,EAAW,QAAU,QACzB,GAAI,CACF,MAAM4C,EAAY1E,GAAuBjiB,CAAO,EAChDqkB,EAAgB,MAAQsC,EACxB,MAAMJ,EAAqC,CAAA,EAC3C,UAAWlqB,KAAUsqB,EACnBJ,EAAUlqB,EAAO,KAAK,EAAImC,EAAiB,MAAMnC,EAAO,KAAK,GAAMA,EAAO,UAAY,GAExFmC,EAAiB,MAAQ+nB,EACzB,MAAMP,EAAU/H,GAA8BrB,EAAM,MAAO+J,CAAS,EAChEX,KAAqBA,CAAO,EAC3BC,GAAA,CACP,OAAShG,EAAO,CACdmF,EAAkBnF,CAAK,CACzB,CACF,EACA,CAAE,KAAM,EAAA,CAAK,EAOf,MAAMoH,GAAkBn0B,EAAAA,SAAiD,IAAM,CAC7E,MAAMo0B,EAA+C,CACnD,CACE,GAAI/D,GACJ,aAAc,GACd,eAAgB,GAChB,KAAME,EAAA,CACR,EAEF,UAAWpnB,KAAUgoB,EAAgB,MACnCiD,EAAK,KAAK,CACR,GAAIjrB,EAAO,MACX,YAAaA,EAAO,MACpB,OAAQA,EAAO,MACf,eAAgBA,EAAO,YAAc,GACrC,KAAMA,EAAO,OAASA,EAAO,UAAYmnB,GACzC,QAAS,KAAK,IAAInnB,EAAO,UAAY,EAAGonB,EAAgB,EACxD,KAAM,CAAE,SAAUpnB,CAAA,CAAO,CAC1B,EAEH,OAAOirB,CACT,CAAC,EAIKC,GAAer0B,EAAAA,SAAwB,KACtCoxB,EAAY,MACVtc,EAAY,MAAM,IAAKlJ,GAAQA,CAAG,EAC1C,EAEK0oB,GAAkBt0B,EAAAA,SAA+B,IAAM,CAC3D,MAAMu0B,EAA4B,CAAA,EAClC,UAAWryB,KAAOovB,EAAqB,QAAWnG,GAAoBjpB,CAAG,CAAC,EAAI,GAC9E,OAAOqyB,CACT,CAAC,EAEKC,GAAkBx0B,EAAAA,SAAS,IAAM,CACrC,MAAMu0B,EAA8B,CAAE,CAAClE,EAAmB,EAAGE,EAAA,EAC7D,UAAWpnB,KAAUgoB,EAAgB,MACnCoD,EAAIprB,EAAO,KAAK,EAAI,KAAK,IAAIA,EAAO,UAAY,EAAGonB,EAAgB,EAErE,OAAOgE,CACT,CAAC,EAED,SAASE,GAAyB/xB,EAAqC,CACrE,MAAMsC,EAAO,OAAOtC,GAAY,WAAaA,EAAQ6uB,EAAa,KAAK,EAAI7uB,EACrEgyB,EAAkC,CAAA,EACxC,SAAW,CAACzF,EAAO1I,CAAK,IAAK,OAAO,QAAQvhB,CAAI,EAC9C0vB,EAAQzF,CAAK,EAAI,KAAK,IAAIuF,GAAgB,MAAMvF,CAAK,GAAKsB,GAAkB,KAAK,MAAMhK,CAAK,CAAC,EAE/FgL,EAAa,MAAQmD,CACvB,CAEA,MAAM9tB,GAAQ0c,GAAoC,CAChD,SAAUoN,EACV,QAASyD,GACT,KAAME,GACN,SAAWzoB,GAAQuf,GAAqBvf,EAAgCwlB,EAAY,KAAK,CAAkB,EAC3G,MAAOpxB,EAAAA,SAAS,KAAO,CACrB,aAAcs0B,GAAgB,MAC9B,iBAAkB,CAAE,GAAGhpB,EAAiB,KAAA,EACxC,aAAc,CAAE,GAAGimB,EAAa,KAAA,CAAM,EACtC,EACF,qBAAsBkD,GACtB,iBAAkB,UAAA,CACnB,EAEKnnB,GAAUtN,EAAAA,SAAS,WAAM,QAAAsC,EAAAsE,GAAM,gBAAA,EAAkB,CAAC,IAAzB,YAAAtE,EAA4B,UAAW,GAAE,EAClEqyB,GAAY30B,EAAAA,SAAS,IAAM4G,GAAM,YAAA,EAAc,IAAI,EACnDguB,GAAa50B,EAAAA,SAAS,IAAM4G,GAAM,cAAc,EAGtDpE,EAAAA,MACE,IAAA,OAAM,QAAAF,EAAAsE,GAAM,MAAM,iBAAZ,YAAAtE,EAA4B,MAAM,mBAAoB,IAC5D,CAACuyB,EAAYC,IAAgB,CACvB,CAACD,GAAc,OAAOC,GAAgB,UACxCC,GAAgBD,CAAW,CAE/B,CAAA,EAGF,SAASC,GAAgB9F,EAAe,CAClCA,IAAUoB,IACdxwB,EAAK,sBAAuB,CAAE,MAAAovB,EAAO,MAAOsC,EAAa,MAAMtC,CAAK,GAAK+F,GAAkB/F,CAAK,CAAA,CAAG,CACrG,CAEA,SAAS+F,GAAkB/F,EAAuB,OAChD,QAAO3sB,EAAAsE,GAAM,UAAUqoB,CAAK,IAArB,YAAA3sB,EAAwB,YAAaguB,EAC9C,CAMA9tB,EAAAA,MACE,IAAM7C,EAAM,gBACXqF,GAAS,CACJA,GAAMytB,GAAeztB,EAAM,EAAK,CACtC,EACA,CAAE,UAAW,GAAM,KAAM,EAAA,CAAK,EAGhC,MAAMiwB,GAAgBj1B,WAAS,IAAM,IAAI,IAAIsxB,EAAqB,MAAM,IAAInG,EAAmB,CAAC,CAAC,EAEjG,SAASsH,GAAe1wB,EAAuBmzB,EAAqB,CAClE,MAAM3F,MAAW,IACXvqB,EAAwB,CAAA,EAC9B,UAAW9C,KAAOH,EAAM,CACtB,MAAMqK,EAAK+e,GAAoBjpB,CAAG,EAC9BqtB,EAAK,IAAInjB,CAAE,IACfmjB,EAAK,IAAInjB,CAAE,EACXpH,EAAK,KAAK9C,CAAG,EACf,CAEA,GADAovB,EAAqB,MAAQtsB,EACzB,CAACkwB,EAAY,OACjBr1B,EAAK,2BAA4BmF,CAAI,EACrC,MAAMmwB,EAAU,IAAI,IAAIR,GAAU,MAAM,IAAK/oB,GAAQ,CAACA,EAAI,GAAIA,EAAI,QAAQ,CAAC,CAAC,EACtEwpB,EAAe,CAAA,EACrB,UAAWlzB,KAAO8C,EAAM,CACtB,MAAM4G,EAAMupB,EAAQ,IAAIhK,GAAoBjpB,CAAG,CAAC,EAC5C0J,IAAQ,QAAWwpB,EAAQ,KAAKxpB,CAAG,CACzC,CACA/L,EAAK,mBAAoBmF,EAAMowB,CAAO,CACxC,CAEA,SAASC,GAAkBrf,EAAemL,EAAkB,CAC1D,MAAMjf,EAAMkpB,GAAoBpV,CAAK,EACrC,GAAI9T,IAAQ,KAAM,OAClB,MAAM8C,EAAOmc,EACT,CAAC,GAAGmQ,EAAqB,MAAOpvB,CAAG,EACnCovB,EAAqB,MAAM,OAAQ1G,GAAaO,GAAoBP,CAAQ,IAAM5U,CAAK,EAC3Fyc,GAAeztB,EAAM,EAAI,CAC3B,CAEA,MAAMswB,GAAsBt1B,EAAAA,SAC1B,IAAM20B,GAAU,MAAM,OAAS,GAAKA,GAAU,MAAM,MAAO/oB,GAAQqpB,GAAc,MAAM,IAAIrpB,EAAI,EAAE,CAAC,CAAA,EAE9F2pB,GAAuBv1B,EAAAA,SAAS,IAChCs1B,GAAoB,MAAc,GAC/BX,GAAU,MAAM,KAAM/oB,GAAQqpB,GAAc,MAAM,IAAIrpB,EAAI,EAAE,CAAC,CACrE,EAED,SAAS4pB,GAAkBrU,EAAkB,CAC3C,GAAIA,EAAS,CACX,MAAMnc,EAAO,CAAC,GAAGssB,EAAqB,KAAK,EAC3C,UAAW1lB,KAAO+oB,GAAU,MAAO,CACjC,MAAMzyB,EAAMkpB,GAAoBxf,EAAI,EAAE,EAClC1J,IAAQ,MAAQ,CAAC+yB,GAAc,MAAM,IAAIrpB,EAAI,EAAE,GAAG5G,EAAK,KAAK9C,CAAG,CACrE,CACAuwB,GAAeztB,EAAM,EAAI,EACzB,MACF,CACA,MAAMywB,EAAU,IAAI,IAAId,GAAU,MAAM,IAAK/oB,GAAQA,EAAI,EAAE,CAAC,EACtD5G,EAAOssB,EAAqB,MAAM,OAAQpvB,GAAQ,CAACuzB,EAAQ,IAAItK,GAAoBjpB,CAAG,CAAC,CAAC,EAC9FuwB,GAAeztB,EAAM,EAAI,CAC3B,CAMA,SAAS0wB,GAAWzG,EAAe0G,EAAmB,CACpD1B,GAAc,CAAE,KAAM,OAAQ,MAAAhF,EAAO,SAAA0G,EAAU,CACjD,CAEA,MAAMC,GAAc9P,EAAAA,IAAI,EAAE,EACpB+P,GAAc/P,EAAAA,IAAc,EAAE,EAC9BgQ,EAAqBhQ,EAAAA,IAAyD,IAAI,EAClFiQ,EAAgBpQ,GAAkB,IAAM,SACxCrjB,EAAAwzB,EAAmB,QAAnB,YAAAxzB,EAA0B,QAAS,UAAU0zB,GAAA,EACjDF,EAAmB,MAAQ,IAC7B,CAAC,EACD,IAAIG,GAEJ,SAASvD,IAAsB,CACzBuD,KAAwB,SAC1B,OAAO,aAAaA,EAAmB,EACvCA,GAAsB,OAE1B,CAEA,SAASrK,GAAcqD,EAA0C,CAC/D,OAAOkC,EAAgB,MAAM,KAAMhoB,GAAWA,EAAO,QAAU8lB,CAAK,CACtE,CAEA,SAASiH,GAAmBjH,EAAuB,OACjD,QAAO3sB,EAAAonB,EAAM,MAAM,SAAS,KAAMtM,GAAUA,EAAM,QAAU6R,CAAK,IAA1D,YAAA3sB,EAA6D,QAAS,EAC/E,CAEA,SAAS6zB,GAAoBlH,EAAyB,OACpD,QAAO3sB,EAAAonB,EAAM,MAAM,QAAQ,KAAMtM,GAAUA,EAAM,QAAU6R,CAAK,IAAzD,YAAA3sB,EAA4D,SAAU,CAAA,CAC/E,CAEA,SAAS8zB,GAAoBC,EAA2BpH,EAAehJ,EAAsB,OAC3F,KAAI3jB,EAAAwzB,EAAmB,QAAnB,YAAAxzB,EAA0B,QAAS+zB,GAAQP,EAAmB,MAAM,QAAU7G,EAAO,CACvF8G,EAAc,MAAM,CAAE,aAAc,EAAA,CAAM,EAC1C,MACF,CACID,EAAmB,OAAOC,EAAc,MAAA,EAC5CD,EAAmB,MAAQ,CAAE,KAAAO,EAAM,MAAApH,CAAA,EAC/BoH,IAAS,UACX3D,GAAA,EACAkD,GAAY,MAAQM,GAAmBjH,CAAK,GAE5C4G,GAAY,MAAQ,CAAC,GAAGM,GAAoBlH,CAAK,CAAC,EAEpD8G,EAAc,KAAK9P,EAAS,CAAE,MAAO,MAAO,MAAOoQ,IAAS,SAAW,IAAM,GAAA,CAAK,CACpF,CAEA,SAAS1D,GAAmB2D,EAAuB,CAC5CR,EAAmB,OACxBC,EAAc,MAAM,CAAE,aAAAO,EAAc,CACtC,CAEA,SAASC,IAAuB,CAC9B7D,GAAA,EACAuD,GAAsB,OAAO,WAAW,IAAMD,GAAA,EAAyBxF,EAAkB,CAC3F,CAEA,SAASwF,IAAwB,CAC/BtD,GAAA,EACA,MAAMlc,EAAQsf,EAAmB,MAC7B,CAACtf,GAASA,EAAM,OAAS,UAC7Byd,GAAc,CAAE,KAAM,aAAc,MAAOzd,EAAM,MAAO,MAAOof,GAAY,MAAO,CACpF,CAEA,SAASY,IAAkB,CACzBR,GAAA,CACF,CAEA,SAASS,GAAkBt0B,EAAegf,EAAkB,SAC1D,MAAM6H,GAAS/f,GAAA3G,EAAAo0B,OAAA,YAAAp0B,EAAuB,UAAvB,YAAA2G,EAAgC,KAAM1D,GAASA,EAAK,QAAUpD,GACzE6mB,GAAA,MAAAA,EAAQ,WACZ6M,GAAY,MAAQ1U,EAAU,CAAC,GAAG0U,GAAY,MAAO1zB,CAAK,EAAI0zB,GAAY,MAAM,OAAQzY,GAAUA,IAAUjb,CAAK,EACnH,CAEA,SAASw0B,IAAgB,CACvB,MAAMngB,EAAQsf,EAAmB,MAC5Btf,IACLyd,GAAc,CAAE,KAAM,aAAc,MAAOzd,EAAM,MAAO,OAAQqf,GAAY,MAAO,EACnFE,EAAc,MAAM,CAAE,aAAc,EAAA,CAAM,EAC5C,CAEA,SAASa,IAAc,CACrB,MAAMpgB,EAAQsf,EAAmB,MAC5Btf,IACLqf,GAAY,MAAQ,CAAA,EACpB5B,GAAc,CAAE,KAAM,aAAc,MAAOzd,EAAM,MAAO,OAAQ,CAAA,EAAI,EACtE,CAEA,SAASqgB,GAAmB5H,EAAwB,CAClD,OAAOvF,EAAM,MAAM,SAAS,KAAMtM,GAAUA,EAAM,QAAU6R,CAAK,CACnE,CAEA,SAAS6H,GAAmB7H,EAAwB,CAClD,OAAOvF,EAAM,MAAM,QAAQ,KAAMtM,GAAUA,EAAM,QAAU6R,CAAK,CAClE,CAEA,SAAS8H,GAAgB9H,EAA2C,OAClE,OAAO3sB,EAAAonB,EAAM,MAAM,QAAQ,KAAMtM,GAAUA,EAAM,QAAU6R,CAAK,IAAzD,YAAA3sB,EAA4D,SACrE,CAEA,SAAS00B,GAAe/H,EAAuB,CAC7C,MAAMnZ,EAAQ4T,EAAM,MAAM,QAAQ,UAAWtM,GAAUA,EAAM,QAAU6R,CAAK,EAC5E,OAAOnZ,GAAS,GAAK4T,EAAM,MAAM,QAAQ,OAAS,EAAI5T,EAAQ,EAAI,CACpE,CAMA,MAAMmhB,GAAqBnR,EAAAA,IAAI,EAAE,EAC3B8M,EAAiBjN,GAAA,EAEjBuR,GAAwBl3B,EAAAA,SAAS,IAAM,CAC3C,MAAMgvB,MAAa,IACnB,UAAW5R,KAASsM,EAAM,MAAM,SAAUsF,EAAO,IAAI5R,EAAM,KAAK,EAChE,UAAWA,KAASsM,EAAM,MAAM,QAASsF,EAAO,IAAI5R,EAAM,KAAK,EAC/D,UAAWA,KAASsM,EAAM,MAAM,QAASsF,EAAO,IAAI5R,EAAM,KAAK,EAC/D,OAAO4R,CACT,CAAC,EAEKmI,GAA6Bn3B,EAAAA,SACjC,IAAM,OAAO,OAAOsL,EAAiB,KAAK,EAAE,OAAO,OAAO,EAAE,MAAA,EAG9D,SAAS8rB,GAAoBnI,EAAehkB,EAAkB,CAC5D,GAAI,CAACA,GAAWksB,GAA2B,OAAS,EAAG,CACrDF,GAAmB,MAAQ1O,EAAO,MAAM,qBACxC,MACF,CACA0O,GAAmB,MAAQ,GAC3B3rB,EAAiB,MAAQ,CAAE,GAAGA,EAAiB,MAAO,CAAC2jB,CAAK,EAAGhkB,CAAA,EAC/DpL,EAAK,2BAA4B,CAAE,GAAGyL,EAAiB,MAAO,CAChE,CAEA,SAAS+rB,IAA2B,CAClC,MAAMryB,EAAgC,CAAA,EACtC,UAAWmE,KAAUgoB,EAAgB,MAAOnsB,EAAKmE,EAAO,KAAK,EAAIA,EAAO,UAAY,GACpFmC,EAAiB,MAAQtG,EACzBiyB,GAAmB,MAAQ,GAC3Bp3B,EAAK,2BAA4B,CAAE,GAAGyL,EAAiB,MAAO,CAChE,CAEA,SAASgsB,GAAsBrI,EAAe,CAC5CgF,GAAc,CAAE,KAAM,gBAAiB,MAAAhF,CAAA,CAAO,CAChD,CAEA,SAASsI,IAA2B,CAClC,IAAIvyB,EAAO0kB,EAAM,MACjB,UAAWuF,KAASiI,GAAsB,MACxClyB,EAAOylB,GAAoBzlB,EAAM,CAAE,KAAM,gBAAiB,MAAAiqB,EAAO,EAEnE+E,GAAYhvB,CAAI,CAClB,CAGA,MAAMwyB,GAAiB1R,EAAAA,IAAkD,IAAI,EAE7E,SAAS2R,GAAWxI,EAAuB,CACzC,OAAOuF,GAAgB,MAAMvF,CAAK,GAAKsB,EACzC,CAEA,SAASmH,GAAezI,EAAe1I,EAAe,CACpD,MAAMmO,EAAU,KAAK,IAAI+C,GAAWxI,CAAK,EAAG,KAAK,MAAM1I,CAAK,CAAC,EAC7DgL,EAAa,MAAQ,CAAE,GAAGA,EAAa,MAAO,CAACtC,CAAK,EAAGyF,CAAA,CACzD,CAEA,SAASiD,GAAoB1I,EAAe,OAC1C,KAAI3sB,EAAAk1B,GAAe,QAAf,YAAAl1B,EAAsB,SAAU2sB,EAAO,CACzC8F,GAAgB9F,CAAK,EACrBuI,GAAe,MAAQ,KACvB,MACF,CACAA,GAAe,MAAQ,CAAE,MAAAvI,EAAO,WAAYsC,EAAa,MAAMtC,CAAK,GAAK+F,GAAkB/F,CAAK,CAAA,CAClG,CAEA,SAAS2I,GAAmB3I,EAAe4I,EAAe,SACpDv1B,EAAAk1B,GAAe,QAAf,YAAAl1B,EAAsB,SAAU2sB,GACpCyI,GAAezI,GAAQsC,EAAa,MAAMtC,CAAK,GAAK+F,GAAkB/F,CAAK,GAAK4I,CAAK,CACvF,CAEA,SAASC,GAAqB7I,EAAe,CAC3C,MAAM8I,EAAUP,GAAe,OAC3BO,GAAA,YAAAA,EAAS,SAAU9I,IACvByI,GAAezI,EAAO8I,EAAQ,UAAU,EACxCP,GAAe,MAAQ,KACzB,CAMA,MAAMQ,GAA2Bh4B,EAAAA,SAAS,IAAM,CAC9C,MAAMoJ,EAAU,CAAC,GAAGioB,EAAiB,MAAM,eAAe,EAC1D,OAAKjoB,EAAQ,SAASsgB,EAAM,MAAM,QAAQ,GAAGtgB,EAAQ,KAAKsgB,EAAM,MAAM,QAAQ,EACvEtgB,EAAQ,KAAK,CAACjF,EAAGC,IAAMD,EAAIC,CAAC,CACrC,CAAC,EAEKmoB,GAAYvsB,EAAAA,SAAS,IAAM,KAAK,IAAI,EAAG,KAAK,KAAKssB,EAAM,MAAQ5C,EAAM,MAAM,QAAQ,CAAC,CAAC,EAIrFuO,GAAWj4B,EAAAA,SAAyB,IAAM,CAC9C,MAAM+E,EAAU2kB,EAAM,MAAM,KACtBnc,EAAQgf,GAAU,MACxB,GAAIhf,GAAS,EACX,OAAO,MAAM,KAAK,CAAE,OAAQA,GAAS,CAACnM,EAAG0U,KAAW,CAAE,KAAM,OAAQ,KAAMA,EAAQ,GAAoB,EAExG,MAAMoiB,EAAwB,CAAC,CAAE,KAAM,OAAQ,KAAM,EAAG,EAClDC,EAAc,KAAK,IAAI,EAAGpzB,EAAU,CAAC,EACrCqzB,EAAY,KAAK,IAAI7qB,EAAQ,EAAGxI,EAAU,CAAC,EAC7CozB,EAAc,GAAGD,EAAM,KAAK,CAAE,KAAM,WAAY,IAAK,QAAS,EAClE,QAASpN,EAAOqN,EAAarN,GAAQsN,EAAWtN,GAAQ,EAAGoN,EAAM,KAAK,CAAE,KAAM,OAAQ,KAAApN,CAAA,CAAM,EAC5F,OAAIsN,EAAY7qB,EAAQ,GAAG2qB,EAAM,KAAK,CAAE,KAAM,WAAY,IAAK,MAAO,EACtEA,EAAM,KAAK,CAAE,KAAM,OAAQ,KAAM3qB,EAAO,EACjC2qB,CACT,CAAC,EAED,SAASG,GAASvN,EAAc,CAC9BmJ,GAAc,CAAE,KAAM,WAAY,KAAAnJ,CAAA,CAAM,CAC1C,CAEA,SAASwN,GAAep4B,EAAc,CACpC,MAAMiC,EAAQ,OAAQjC,EAAM,OAA6B,KAAK,EAC1D,OAAO,UAAUiC,CAAK,GAAKA,EAAQ,GAAG8xB,GAAc,CAAE,KAAM,gBAAiB,SAAU9xB,CAAA,CAAO,CACpG,CAMA,MAAMo2B,GAAcv4B,EAAAA,SAAS,IAAM,CAAC8wB,EAAY,QAAUC,EAAa,QAAU,WAAaC,EAAW,QAAU,UAAU,EACvHwH,GAAiBx4B,EAAAA,SAAS,IAAMgxB,EAAW,QAAU,YAAY,EACjEyH,GAAYz4B,EAAAA,SAChB,IACE,CAAC8wB,EAAY,OACbC,EAAa,QAAU,WACvBC,EAAW,QAAU,SACrBlc,EAAY,MAAM,SAAW,CAAA,EAE3B4jB,GAAiB14B,EAAAA,SAAS,IAC1B8wB,EAAY,MAAc,GAC1BC,EAAa,QAAU,QAAgB,GACpCC,EAAW,QAAU,SAAWlc,EAAY,MAAM,SAAW,CACrE,EACK6jB,GAAkB34B,WAAS,IAAMgxB,EAAW,QAAU,SAAWlc,EAAY,MAAM,OAAS,CAAC,EAC7F8jB,GAAa54B,EAAAA,SAA4B,IAAO+wB,EAAa,QAAU,QAAU,SAAW,MAAO,EACnG8H,GAAe74B,EAAAA,SAAS,IAAMiyB,IAAe2G,GAAW,QAAU,SAAW3H,EAAiB,MAAQC,EAAe,QAAUJ,EAAY,KAAK,CAAC,EACjJgI,GAAmB94B,EAAAA,SAAS,IAAMsN,GAAQ,MAAM,MAAM,EAEtDyrB,GAAc/4B,EAAAA,SAAS,IAAM,CACjC,WACA,aAAaL,EAAM,OAAO,GAC1B,CACE,oBAAqBA,EAAM,QAC3B,qBAAsBA,EAAM,QAAA,CAC9B,CACD,EAEKq5B,GAAiBh5B,EAAAA,SAAS,IAAML,EAAM,YAAc4oB,EAAO,MAAM,SAAS,EAEhF,SAAS0Q,GAAS9vB,EAAuBhH,EAAwB,CAC/D,OAAO8mB,GAAkB9f,EAAQhH,EAAO,CAAE,OAAQomB,EAAO,MAAO,IAAKuJ,GAAY,MAAO,CAC1F,CAEA,SAASoH,GAAc/2B,EAA+B,CACpD,OAAOgnB,GAA2BhnB,CAAK,CACzC,CAEA,SAASg3B,GAAmBh3B,EAAyB,CACnD,OAAO+lB,GAAqB/lB,CAAK,IAAM,IACzC,CAEA,SAASu0B,IAAiD,CACxD,MAAMlgB,EAAQsf,EAAmB,MACjC,OAAOtf,EAAQoV,GAAcpV,EAAM,KAAK,EAAI,MAC9C,CAEA8Q,OAAAA,EAAAA,gBAAgB,IAAM,CACpBoL,GAAA,EACAX,EAAY,QAAA,CACd,CAAC,EAEDS,GAAA,0BAIE,OAAAjyB,YAAA,EAAAJ,qBAgZM,MAhZNC,EAAAA,WAgZM,CAhZA,MAAO24B,GAAA,MAAa,cAAY,UAAA,EAAmBK,EAAAA,MAAM,EAAA,CAClDtI,EAAA,OAAXvwB,EAAAA,UAAA,EAAAJ,EAAAA,mBAMM,MANNk5B,GAMM,CALJC,EAAAA,YAA6CC,EAAA,CAApC,KAAMC,EAAAA,MAAA5U,EAAA,EAAkB,KAAM,EAAA,mBACvCjkB,EAAAA,mBAGM,MAAA,KAAA,CAFJA,qBAA2D,IAA3DH,GAA2Di5B,EAAAA,gBAAvBlR,EAAA,MAAO,SAAS,EAAA,CAAA,EACpD5nB,qBAAsE,IAAtED,GAAsE+4B,EAAAA,gBAAjCxH,GAAcnB,EAAA,KAAW,CAAA,EAAA,CAAA,CAAA,qBAIlE3wB,EAAAA,mBA8UWu5B,EAAAA,SAAA,CAAA,IAAA,GAAA,CA7UT/4B,EAAAA,mBAyEM,MAzENC,GAyEM,CAxEJD,EAAAA,mBAGM,MAHNg5B,GAGM,CAFJh5B,EAAAA,mBAA8D,OAA9Di5B,GAA8DH,EAAAA,gBAA7BlR,QAAO,MAAM+D,EAAA,KAAK,CAAA,EAAA,CAAA,EACvCgF,EAAA,MAAqB,OAAM,iBAAvCnxB,qBAAsI,OAAtI05B,GAAsIJ,kBAA3DlR,EAAA,MAAO,cAAc+I,EAAA,MAAqB,MAAM,CAAA,EAAA,CAAA,iCAE7H3wB,EAAAA,mBAiBS,SAAA,CAhBP,KAAK,SACL,MAAM,2BACN,cAAY,2BACX,gBAAe64B,EAAAA,MAAA5G,CAAA,EAAe,OAAO,MACrC,QAAKkH,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAiBC,GAAM,CAA0BP,QAAA5G,CAAA,EAAe,OAAO,MAAO4G,EAAAA,MAAA5G,CAAA,EAAe,MAAK,CAAA,aAAA,EAAA,CAAA,GAAgEqE,GAAA,MAAkB,GAAuBuC,EAAAA,MAAA5G,CAAA,EAAe,KAAKmH,EAAO,cAAa,CAAA,MAAA,MAAA,MAAA,IAAA,OAUzPT,EAAAA,YAA2CC,EAAA,CAAlC,KAAMC,EAAAA,MAAAvU,EAAA,EAAgB,KAAM,EAAA,qCAAM,IAC3CwU,EAAAA,gBAAGlR,EAAA,MAAO,cAAc,EAAA,CAAA,CAAA,QAGlBiR,EAAAA,MAAA5G,CAAA,EAAe,OAAO,qBAD9BzyB,EAAAA,mBAiDM,MAAA,OA/CH,IAAMulB,GAAY8T,EAAAA,SAAe,cAAc9T,CAAO,EACvD,MAAM,2CACN,KAAK,SACJ,aAAY6C,EAAA,MAAO,eACpB,cAAY,iCACX,MAAKyR,EAAAA,eAAA,CAAA,IAAA,GAAYR,EAAAA,MAAA5G,CAAA,EAAe,UAAU,MAAM,GAAG,KAAA,KAAA,GAAe4G,EAAAA,SAAe,UAAU,MAAM,IAAI,KAAA,EACrG,UAAOM,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAE,IAAAxxB,IAAAkxB,QAAA5G,CAAA,EAAe,WAAf4G,EAAAA,MAAA5G,CAAA,EAAe,UAAS,GAAAtqB,CAAA,EAAA,GAElC3H,EAAAA,mBAuBK,KAvBLs5B,GAuBK,kBAtBH95B,EAAAA,mBAqBKu5B,EAAAA,SAAA,KAAAQ,EAAAA,WArBgB/I,EAAA,MAAVhoB,kBAAXhJ,EAAAA,mBAqBK,KAAA,CArBkC,IAAKgJ,EAAO,MAAO,MAAM,uBAAA,GAC9DxI,EAAAA,mBAQQ,QARRw5B,GAQQ,CAPNx5B,EAAAA,mBAKE,QAAA,CAJA,KAAK,WACJ,cAAW,8BAAgCwI,EAAO,KAAK,GACvD,QAASmC,EAAA,MAAiBnC,EAAO,KAAK,IAAA,GACtC,SAAM4wB,IAAE3C,GAAoBjuB,EAAO,MAAQ4wB,GAAO,OAA4B,OAAO,CAAA,cAExFp5B,EAAAA,mBAA+B,OAAA,KAAA84B,EAAAA,gBAAtBtwB,EAAO,KAAK,EAAA,CAAA,CAAA,GAEP+tB,GAAA,MAAsB,IAAI/tB,EAAO,KAAK,iBAAtDhJ,EAAAA,mBAUWu5B,EAAAA,SAAA,CAAA,IAAA,GAAA,aATT/4B,EAAAA,mBAAgE,OAAA,CAA1D,MAAM,0BAA0B,cAAY,MAAA,YAClDA,EAAAA,mBAOS,SAAA,CANP,KAAK,SACL,MAAM,wBACL,cAAW,4BAA8BwI,EAAO,KAAK,GACrD,QAAK4wB,IAAEzC,GAAsBnuB,EAAO,KAAK,CAAA,EAEvCswB,EAAAA,gBAAAlR,EAAA,MAAO,eAAepf,EAAO,KAAK,CAAA,EAAA,EAAAixB,EAAA,CAAA,+CAK7Cz5B,EAAAA,mBAAoE,IAApE05B,GAAoEZ,EAAAA,gBAAzBxC,GAAA,KAAkB,EAAA,CAAA,EAC7Dt2B,EAAAA,mBAaM,MAbN25B,GAaM,CAZJ35B,EAAAA,mBAQS,SAAA,CAPP,KAAK,SACL,MAAM,wBACN,cAAY,gCACX,SAAUu2B,GAAA,MAAsB,OAAI,EACpC,QAAOK,EAAA,EAELkC,EAAAA,gBAAAlR,EAAA,MAAO,kBAAkB,EAAA,EAAAgS,EAAA,EAE9B55B,EAAAA,mBAES,SAAA,CAFD,KAAK,SAAS,MAAM,wBAAwB,cAAY,2BAA4B,QAAO02B,EAAA,EAC9FoC,EAAAA,gBAAAlR,EAAA,MAAO,cAAc,EAAA,CAAA,CAAA,0CAMhC5nB,EAAAA,mBAkMM,MAlMN65B,GAkMM,CAjMJ75B,EAAAA,mBAoLQ,QAAA,CApLD,MAAM,kBAAmB,aAAYq4B,GAAA,MAAiB,gBAAe1M,EAAA,MAAK,EAAO,iCAAmBsI,GAAA,KAAU,KAAA,CAAA,GACnHj0B,EAAAA,mBAMW,WAAA,KAAA,kBALTR,EAAAA,mBAIEu5B,EAAAA,SAAA,KAAAQ,EAAAA,WAHiB5sB,GAAA,MAAVhE,kBADTnJ,EAAAA,mBAIE,MAAA,CAFC,IAAKmJ,EAAO,GACZ,MAAK0wB,EAAAA,eAAA,CAAA,MAAA,GAAc1wB,EAAO,QAAA,CAAO,IAAA,CAAA,CAAA,oBAGtC3I,EAAAA,mBAyGQ,QAAA,KAAA,CAxGNA,EAAAA,mBAuGK,KAvGL85B,GAuGK,EAtGHl6B,EAAAA,UAAA,EAAA,EAAAJ,EAAAA,mBAqGKu5B,WAAA,KAAAQ,EAAAA,WApG6B5sB,GAAA,MAAO,CAA/BhE,EAAQoxB,KAAW,yEAD7Bv6B,EAAAA,mBAqGK,KAAA,CAnGF,IAAKmJ,EAAO,GACb,MAAKqxB,EAAAA,eAAA,CAAC,iBAAgB,CAAA,4BACiBrxB,EAAO,KAAE,sBAAA,CAAA,CAAA,EAC/C,gBAAeoxB,GAAW,EAC1B,aAA+BzxB,IAAA3G,EAAAgH,EAAO,OAAO,UAAU,OAAxB,YAAAhH,EAA8B,WAA9B,MAAA2G,GAAwC,SAAgC8tB,GAAgBztB,EAAO,EAAE,IAAA,kBAA0EytB,GAAgBztB,EAAO,EAAE,IAAA,2BAA8G,MAAA,GAUvUA,EAAO,KAAE,wBAApB/I,EAAAA,YAAAJ,EAAAA,mBAUM,MAVNy6B,GAUM,CATJj6B,EAAAA,mBAQE,QAAA,CAPA,KAAK,WACL,MAAM,qBACN,cAAY,sBACX,aAAY20B,SAAsB/M,EAAA,MAAO,YAAcA,EAAA,MAAO,UAC9D,QAAS+M,GAAA,MACT,cAAeC,GAAA,MACf,wBAAQC,GAAmBuE,EAAO,OAA4B,OAAO,EAAA,gCAG1E55B,EAAAA,mBAyEM,MAAA,OAzEM,MAAKw6B,EAAAA,eAAA,CAAC,uBAAsB,2BAAkChpB,IAAAD,GAAApI,EAAO,OAAO,UAAU,OAAxB,YAAAoI,GAA8B,WAA9B,YAAAC,GAAwC,QAAK,MAAA,EAAA,CAAA,CAAA,IAE7GkpB,IAAApc,GAAAnV,EAAO,OAAO,UAAU,OAAxB,YAAAmV,GAA8B,WAA9B,MAAAoc,GAAwC,wBADhD16B,EAAAA,mBAeS,SAAA,OAbP,KAAK,SACL,MAAKw6B,EAAAA,eAAA,CAAC,iBAAgB,CAAA,YACC5D,GAAgBztB,EAAO,EAAE,IAAM,MAAA,CAAS,CAAA,EAC9D,cAAW,iBAAmBA,EAAO,EAAE,GACvC,QAAKywB,GAAErE,GAAWpsB,EAAO,GAAKywB,EAAsB,QAAQ,CAAA,GAE7Dp5B,EAAAA,mBAA6F,OAA7Fm6B,GAA6FrB,EAAAA,iBAAvDsB,IAAAC,GAAA1xB,EAAO,OAAO,UAAU,OAAxB,YAAA0xB,GAA8B,WAA9B,YAAAD,GAAwC,KAAK,EAAA,CAAA,EACnFzB,EAAAA,YAIEC,EAAA,CAHC,KAAMxC,GAAgBztB,EAAO,EAAE,IAAA,MAAckwB,EAAAA,MAAAnU,EAAA,EAAoB0R,GAAgBztB,EAAO,EAAE,IAAA,OAAekwB,EAAAA,MAAAlU,EAAA,EAAqBkU,EAAAA,MAAA3U,EAAA,EAC9H,KAAM,GACP,MAAM,qBAAA,mBAEImS,GAAe1tB,EAAO,EAAE,EAAA,GAApC/I,YAAA,EAAAJ,EAAAA,mBAAiH,OAAjH86B,GAAiHxB,EAAAA,gBAAnCzC,GAAe1tB,EAAO,EAAE,CAAA,EAAA,CAAA,yCAExG/I,EAAAA,UAAA,EAAAJ,EAAAA,mBAAoG,OAApG+6B,GAAoGzB,EAAAA,iBAAvD0B,IAAAC,GAAA9xB,EAAO,OAAO,UAAU,OAAxB,YAAA8xB,GAA8B,WAA9B,YAAAD,GAAwC,KAAK,EAAA,CAAA,IAC9EE,GAAA/xB,EAAO,OAAO,UAAU,OAAxB,MAAA+xB,GAA8B,UAA1C96B,EAAAA,YAAAJ,EAAAA,mBAyBO,OAzBPm7B,GAyBO,CAvBGhyB,EAAO,OAAO,UAAU,KAAK,SAAS,0BAD9CnJ,EAAAA,mBAWS,SAAA,OATP,KAAK,SACL,wBAAM,wBAAuB,CAAA,YACN02B,GAAmBvtB,EAAO,EAAE,CAAA,CAAA,CAAA,EAClD,cAAW,2BAA6BA,EAAO,EAAE,GACjD,aAAU,GAAKif,EAAA,MAAO,MAAM,IAAIjf,EAAO,OAAO,UAAU,KAAK,SAAS,KAAK,GAC3E,kBAAeiyB,GAAAzF,EAAA,QAAA,YAAAyF,GAAoB,QAAI,UAAiBzF,EAAA,MAAmB,QAAUxsB,EAAO,GAC5F,QAAKywB,GAAE3D,GAAmB,SAAW9sB,EAAO,GAAIywB,EAAO,aAAa,CAAA,GAErET,EAAAA,YAAwCC,EAAA,CAA/B,KAAMC,EAAAA,MAAApU,EAAA,EAAa,KAAM,EAAA,wDAG5B9b,EAAO,OAAO,UAAU,KAAK,SAAS,0BAD9CnJ,EAAAA,mBAWS,SAAA,OATP,KAAK,SACL,wBAAM,wBAAuB,CAAA,YACN22B,GAAmBxtB,EAAO,EAAE,CAAA,CAAA,CAAA,EAClD,cAAW,mBAAqBA,EAAO,EAAE,GACzC,aAAU,GAAKif,EAAA,MAAO,MAAM,IAAIjf,EAAO,OAAO,UAAU,KAAK,SAAS,KAAK,GAC3E,kBAAekyB,GAAA1F,EAAA,QAAA,YAAA0F,GAAoB,QAAI,UAAiB1F,EAAA,MAAmB,QAAUxsB,EAAO,GAC5F,QAAKywB,GAAE3D,GAAmB,SAAW9sB,EAAO,GAAIywB,EAAO,aAAa,CAAA,GAErET,EAAAA,YAAwCC,EAAA,CAA/B,KAAMC,EAAAA,MAAAxU,EAAA,EAAa,KAAM,EAAA,uFAI9B1b,EAAO,OAAO,aAAA,iBADtBnJ,EAAAA,mBA4BQ,OAAA,OA1BN,MAAKw6B,EAAAA,eAAA,CAAC,0BAAyB,CAAA,iBACLc,GAAAjE,GAAA,QAAA,YAAAiE,GAAgB,SAAUnyB,EAAO,EAAA,CAAE,CAAA,EAC7D,KAAK,YACL,SAAS,IACR,mBAAkB,WAClB,aAAYif,EAAA,MAAO,eAAamT,IAAAC,GAAAryB,EAAO,OAAO,UAAU,OAAxB,YAAAqyB,GAA8B,WAA9B,YAAAD,GAAwC,QAASpyB,EAAO,EAAE,EAC1F,gBAAeA,EAAO,QAAA,EACtB,cAAW,mBAAqBA,EAAO,EAAE,GACzC,YAASywB,GAAEzwB,EAAO,iBAAA,EAAmBywB,CAAM,EAC3C,UAAkC75B,GAAK,CAAoCA,EAAM,MAAG,SAAgBA,EAAM,MAAG,KAAuCA,EAAM,eAAA,EAA4Cy3B,GAAoBruB,EAAO,EAAE,GAAsCpJ,EAAM,MAAG,aAA+CA,EAAM,eAAA,EAA4C03B,GAAmBtuB,EAAO,IAAKmnB,EAAoB,GAAsCvwB,EAAM,MAAG,cAAgDA,EAAM,eAAA,EAA4C03B,GAAmBtuB,EAAO,GAAImnB,EAAoB,GAAsCvwB,EAAM,MAAG,WAA4CA,EAAM,eAAA,EAA4C43B,GAAqBxuB,EAAO,EAAE,uEAsB/xB3I,EAAAA,mBAiEQ,QAAA,KAAA,kBAhENR,EAAAA,mBA4CKu5B,EAAAA,SAAA,KAAAQ,EAAAA,WA3CWvF,GAAA,MAAP/oB,GAAG,6BADZzL,EAAAA,mBA4CK,KAAA,CA1CF,IAAKyL,EAAI,GACV,MAAM,gBACL,iBAAgB8d,EAAA,MAAM,KAAI,GAAQA,EAAA,MAAM,SAAW9d,EAAI,MAAK,CAAA,GAEnDA,EAAI,gBAAA,EAAkB,OAAM,KAAQtJ,GAAAsJ,EAAI,kBAAe,CAAA,IAAnB,YAAAtJ,GAA0B,OAAO,MAAE,wBAAjF/B,EAAAA,YAAAJ,EAAAA,mBASK,KATLy7B,GASK,CARHj7B,EAAAA,mBAOE,QAAA,CANA,KAAK,WACL,MAAM,qBACL,cAAW,mBAAqBiL,EAAI,EAAE,GACtC,aAAY2c,EAAA,MAAO,WAAWmB,EAAA,MAAM,KAAI,GAAQA,QAAM,SAAW9d,EAAI,MAAK,CAAA,EAC1E,QAASA,EAAI,cAAA,EACb,SAAMmuB,GAAE1E,GAAkBzpB,EAAI,GAAKmuB,EAAO,OAA4B,OAAO,CAAA,8CAGhFx5B,YAAA,EAAA,EAAAJ,qBA2BGu5B,EAAAA,2BA1B2B9tB,EAAI,gBAAA,EAAkB,OAAQrG,GAASA,EAAK,OAAO,KAAE,sBAAA,EAAA,CAAzEoD,EAAMkzB,KAAS,+CADzB17B,EAAAA,mBA2BG,KAAA,CAzBA,IAAKwI,EAAK,GACX,wBAAM,iBAAgB,sBAC4BM,IAAA3G,GAAAqG,EAAK,OAAO,UAAU,OAAtB,YAAArG,GAA4B,WAA5B,YAAA2G,GAAsC,QAAK,MAAA,iCAAiE0I,IAAAD,GAAA/I,EAAK,OAAO,UAAU,OAAtB,YAAA+I,GAA4B,WAA5B,YAAAC,GAAsC,YAAQ,UAAA,CAAA,IAI7M,gBAAekqB,GAAS,CAAA,KAGjBhB,IAAApc,GAAA9V,EAAK,OAAO,UAAU,OAAtB,YAAA8V,GAA4B,WAA5B,YAAAoc,GAAsC,YAAQ,YAAmB1B,GAAmBxwB,EAAK,UAAQ,iBADzGxI,EAAAA,mBAeO,OAAA,OAbL,MAAM,iBACN,SAAS,IACR,MAAO+4B,GAAcvwB,EAAK,SAAA,IAAe,OACzC,mBAAgB,gBAAkB6wB,EAAAA,MAAA7I,CAAA,CAAc,IAAIhoB,EAAK,OAAO,EAAE,IAAIiD,EAAI,KAAK,EAAA,GAE7EkwB,EAAAA,gBAAArC,EAAAA,gBAAAR,GAAStwB,EAAK,OAAO,UAAU,KAAM,SAAUA,EAAK,SAAA,IAAc,IACrE,CAAA,EAAAhI,EAAAA,mBAMO,OAAA,CALL,MAAM,oBACN,KAAK,UACJ,GAAE,gBAAkB64B,EAAAA,MAAA7I,CAAA,CAAc,IAAIhoB,EAAK,OAAO,EAAE,IAAIiD,EAAI,KAAK,EAAA,oBAE/DstB,GAAcvwB,EAAK,UAAQ,CAAA,EAAA,EAAAozB,EAAA,CAAA,wBAGlC57B,EAAAA,mBAA+J,OAAA67B,GAAAvC,EAAAA,gBAA/IR,KAAS+B,GAAAryB,EAAK,OAAO,UAAU,OAAtB,YAAAqyB,GAA4B,WAAQ,CAAA,MAAaryB,EAAK,OAAO,GAAE,MAASA,EAAK,OAAO,GAAE,SAAA,MAAA,EAAsBA,EAAK,SAAA,CAAQ,CAAA,EAAA,CAAA,EAAA,gCAG5I8vB,GAAA,qBAAVt4B,EAAAA,mBAMK,KAAA87B,GAAA,CALHt7B,EAAAA,mBAIK,KAAA,CAJD,MAAM,uBAAwB,QAASm4B,GAAA,KAAA,GACzCn4B,EAAAA,mBAEM,MAFNu7B,GAEMzC,EAAAA,gBADDlR,EAAA,MAAO,KAAK,EAAA,CAAA,CAAA,WAINmQ,GAAA,qBAAfv4B,EAAAA,mBAWK,KAAAg8B,GAAA,CAVHx7B,EAAAA,mBASK,KAAA,CATD,MAAM,uBAAwB,QAASm4B,GAAA,KAAA,GACzCn4B,EAAAA,mBAOM,MAPNy7B,GAOM,CANJ9C,EAAAA,YAA6CC,EAAA,CAApC,KAAMC,EAAAA,MAAA5U,EAAA,EAAkB,KAAM,EAAA,mBACvCjkB,EAAAA,mBAAwD,IAAxD07B,GAAwD5C,EAAAA,gBAAnBZ,GAAA,KAAY,EAAA,CAAA,EACjDl4B,EAAAA,mBAGS,SAAA,CAHD,KAAK,SAAS,MAAM,wBAAwB,cAAY,iBAAkB,QAAKm5B,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEhG,GAAM6E,GAAA,KAAU,EAAA,GACvGU,EAAAA,YAAyCC,EAAA,CAAhC,KAAMC,EAAAA,MAAArU,EAAA,EAAc,KAAM,EAAA,qCAAM,IACzCsU,EAAAA,gBAAGlR,EAAA,MAAO,KAAK,EAAA,CAAA,CAAA,qDASnBgQ,GAAA,OAAeC,GAAA,qBADvBr4B,EAAAA,mBAUM,MAAA,OARJ,wBAAM,oBAAmB,CAAA,2BACaq4B,UAAkB1jB,EAAA,MAAY,OAAM,CAAA,CAAA,CAAA,EAC1E,cAAY,mBACZ,KAAK,SACL,YAAU,QAAA,GAEVwkB,EAAAA,YAAkEC,EAAA,CAAzD,KAAMC,EAAAA,MAAAtU,EAAA,EAAa,KAAM,GAAI,MAAM,mBAAA,mBAC5CvkB,EAAAA,mBAAiC,OAAA,KAAA84B,EAAAA,gBAAxBlR,EAAA,MAAO,OAAO,EAAA,CAAA,CAAA,oCAIhBoQ,GAAA,OAAXp4B,EAAAA,UAAA,EAAAJ,EAAAA,mBAOM,MAPNm8B,GAOM,CANJhD,EAAAA,YAA6CC,EAAA,CAApC,KAAMC,EAAAA,MAAA5U,EAAA,EAAkB,KAAM,EAAA,mBACvCjkB,EAAAA,mBAA8D,OAA9D47B,GAA8D9C,EAAAA,gBAAtBZ,GAAA,KAAY,EAAA,CAAA,EACpDl4B,EAAAA,mBAGS,SAAA,CAHD,KAAK,SAAS,MAAM,wBAAwB,cAAY,iBAAkB,uBAAOozB,GAAK,MAAA,EAAA,GAC5FuF,EAAAA,YAAyCC,EAAA,CAAhC,KAAMC,EAAAA,MAAArU,EAAA,EAAc,KAAM,EAAA,qCAAM,IACzCsU,EAAAA,gBAAGlR,EAAA,MAAO,KAAK,EAAA,CAAA,CAAA,kCAInB5nB,EAAAA,mBAoDM,MApDN67B,GAoDM,CAnDJ77B,EAAAA,mBAAyE,OAAzE87B,GAAyEhD,EAAAA,gBAA7BlR,QAAO,MAAM+D,EAAA,KAAK,CAAA,EAAA,CAAA,EAC9D3rB,EAAAA,mBAYQ,QAZR+7B,GAYQ,qCAXHnU,EAAA,MAAO,QAAQ,EAAG,IACrB,CAAA,EAAA5nB,EAAAA,mBASS,SAAA,CARP,MAAM,6BACN,cAAY,qBACZ,KAAK,qBACJ,aAAY4nB,EAAA,MAAO,SACnB,MAAOmB,EAAA,MAAM,SACb,SAAQ4O,EAAA,oBAETn4B,EAAAA,mBAA8Gu5B,EAAAA,SAAA,KAAAQ,EAAAA,WAAvFlC,GAAA,MAARpd,kBAAfza,EAAAA,mBAA8G,SAAA,CAA5D,IAAKya,EAAO,MAAOA,CAAA,oBAAS2N,EAAA,MAAO,QAAQ3N,CAAI,CAAA,EAAA,EAAA+hB,EAAA,oBAGrGh8B,EAAAA,mBAoCM,MAAA,CApCD,MAAM,kBAAmB,aAAY4nB,EAAA,MAAO,UAAA,GAC/C5nB,EAAAA,mBASS,SAAA,CARP,KAAK,SACL,MAAM,yBACN,cAAY,qBACX,aAAY4nB,EAAA,MAAO,aACnB,SAAUmB,EAAA,MAAM,MAAI,EACpB,QAAKoQ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAE1B,GAAS3O,EAAA,MAAM,KAAI,CAAA,EAAA,GAE3B4P,EAAAA,YAA6CC,EAAA,CAApC,KAAMC,EAAAA,MAAA1U,EAAA,EAAkB,KAAM,EAAA,2CAEzC3kB,EAAAA,mBAcWu5B,EAAAA,SAAA,KAAAQ,EAAAA,WAdcjC,GAAA,MAAR1yB,uDAAwBA,EAAK,OAAI,OAAA,QAAsBA,EAAK,IAAI,GAAA,YAAiBA,EAAK,GAAG,EAAA,GAEhGA,EAAK,OAAI,sBADjBpF,EAAAA,mBAWS,SAAA,OATP,KAAK,SACL,MAAKw6B,EAAAA,eAAA,CAAC,yBAAwB,CAAA,aACNp1B,EAAK,OAASmkB,EAAA,MAAM,IAAA,CAAI,CAAA,EAC/C,cAAW,iBAAmBnkB,EAAK,IAAI,GACvC,eAAcA,EAAK,OAASmkB,EAAA,MAAM,KAAI,OAAY,OAClD,aAAYnB,EAAA,MAAO,WAAWhjB,EAAK,IAAI,EACvC,QAAKw0B,IAAE1B,GAAS9yB,EAAK,IAAI,CAAA,EAEvBk0B,kBAAAl0B,EAAK,IAAI,EAAA,GAAAq3B,EAAA,kBAEdz8B,EAAAA,mBAAyE,OAAzE08B,GAAiE,GAAC,EAAA,cAEpEl8B,EAAAA,mBASS,SAAA,CARP,KAAK,SACL,MAAM,yBACN,cAAY,qBACX,aAAY4nB,EAAA,MAAO,SACnB,SAAUmB,EAAA,MAAM,MAAQ6C,GAAA,MACxB,QAAKuN,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAE1B,GAAS3O,EAAA,MAAM,KAAI,CAAA,EAAA,GAE3B4P,EAAAA,YAA8CC,EAAA,CAArC,KAAMC,EAAAA,MAAAzU,EAAA,EAAmB,KAAM,EAAA,yCAOxCyU,QAAAzD,CAAA,EAAc,OAAO,OAASD,EAAA,qBADtC31B,EAAAA,mBAsDM,MAAA,OApDH,IAAMulB,GAAY8T,EAAAA,SAAc,cAAc9T,CAAO,EACtD,MAAM,oBACN,KAAK,SACJ,aAAYoQ,EAAA,MAAmB,OAAI,SAAA,GAAmBvN,EAAA,MAAO,MAAM,MAAIjmB,EAAAspB,GAAckK,EAAA,MAAmB,KAAK,IAAtC,YAAAxzB,EAAyC,QAAK,EAAA,GAAA,GAAcimB,EAAA,MAAO,MAAM,MAAItf,EAAA2iB,GAAckK,EAAA,MAAmB,KAAK,IAAtC,YAAA7sB,EAAyC,QAAK,EAAA,GAClM,MAAK+wB,EAAAA,eAAA,CAAA,IAAA,GAAYR,EAAAA,MAAAzD,CAAA,EAAc,UAAU,MAAM,GAAG,KAAA,KAAA,GAAeyD,EAAAA,SAAc,UAAU,MAAM,IAAI,KAAA,EACnG,UAAOM,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAE,IAAAxxB,IAAAkxB,QAAAzD,CAAA,EAAc,WAAdyD,EAAAA,MAAAzD,CAAA,EAAc,UAAS,GAAAztB,CAAA,EAAA,GAEjBwtB,EAAA,MAAmB,OAAI,yCACrC31B,EAAAA,mBAQE,QAAA,4CAPSy1B,GAAW,MAAAmE,GACpB,KAAK,OACL,MAAM,yBACL,cAAW,mBAAqBjE,EAAA,MAAmB,KAAK,GACxD,aAAU,GAAKvN,EAAA,MAAO,MAAM,MAAI7W,EAAAka,GAAckK,EAAA,MAAmB,KAAK,IAAtC,YAAApkB,EAAyC,QAAK,EAAA,GAC9E,QAAO6kB,GACP,qCAAuBC,GAAe,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,8BAN9BZ,GAAA,KAAW,CAAA,IASHnX,GAAA9M,EAAA+kB,GAAA,IAAA,YAAA/kB,EAAuB,UAAvB,MAAA8M,EAAgC,sBAArDte,EAAAA,mBAiCWu5B,EAAAA,SAAA,CAAA,IAAA,GAAA,CAhCT/4B,EAAAA,mBAaK,KAbLm8B,GAaK,EAZHv8B,EAAAA,UAAA,EAAA,EAAAJ,EAAAA,mBAWKu5B,WAAA,KAAAQ,EAAAA,YAXgBW,EAAAnE,GAAA,IAAA,YAAAmE,EAAuB,QAAjC7R,kBAAX7oB,EAAAA,mBAWK,KAAA,CAXiD,IAAK6oB,EAAO,MAAO,MAAM,uBAAA,GAC7EroB,EAAAA,mBASQ,QATRo8B,GASQ,CARNp8B,EAAAA,mBAME,QAAA,CALA,KAAK,WACJ,wCAAuCm1B,EAAA,MAAmB,KAAK,IAAI9M,EAAO,KAAK,GAC/E,SAAUA,EAAO,SACjB,QAAS6M,GAAA,MAAY,SAAS7M,EAAO,KAAK,EAC1C,SAAM+Q,IAAEtD,GAAkBzN,EAAO,MAAQ+Q,GAAO,OAA4B,OAAO,CAAA,cAEtFp5B,EAAAA,mBAA+B,OAAA,KAAA84B,EAAAA,gBAAtBzQ,EAAO,KAAK,EAAA,CAAA,CAAA,eAI3BroB,EAAAA,mBAiBM,MAjBNq8B,GAiBM,CAhBJr8B,EAAAA,mBAOS,SAAA,CANP,KAAK,SACL,MAAM,wBACL,cAAW,yBAA2Bm1B,EAAA,MAAmB,KAAK,GAC9D,QAAOc,EAAA,EAEL6C,EAAAA,gBAAAlR,EAAA,MAAO,KAAK,EAAA,EAAA0U,EAAA,EAEjBt8B,EAAAA,mBAOS,SAAA,CANP,KAAK,SACL,MAAM,2BACL,cAAW,2BAA6Bm1B,EAAA,MAAmB,KAAK,GAChE,QAAOa,EAAA,EAEL8C,EAAAA,gBAAAlR,EAAA,MAAO,OAAO,EAAA,EAAA2U,EAAA,CAAA,+HC50ChBC,GAAW,CACtB,QAAQC,EAAU,CAChBA,EAAI,UAAU,WAAYC,EAAQ,EAClCD,EAAI,UAAU,SAAU7D,CAAM,EAC9B6D,EAAI,UAAU,UAAWE,EAAO,CAClC,CACF","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]}
1
+ {"version":3,"file":"onedot-ui.cjs","sources":["../src/components/OdButton.vue","../src/components/OdIcon.vue","../node_modules/.pnpm/@tanstack+vue-table@9.2.4_vue@3.5.42_typescript@5.9.3_/node_modules/@tanstack/vue-table/dist/merge-proxy.js","../node_modules/.pnpm/@tanstack+vue-table@9.2.4_vue@3.5.42_typescript@5.9.3_/node_modules/@tanstack/vue-table/dist/reactivity.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/cells/coreCellsFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/cells/coreCellsFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/headers/constructHeader.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-pinning/columnPinningFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-visibility/columnVisibilityFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/headers/buildHeaderGroups.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/columns/constructColumn.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-ordering/columnOrderingFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/columns/coreColumnsFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/columns/coreColumnsFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/headers/coreHeadersFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/headers/coreHeadersFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/rows/constructRow.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/cell-selection/cellSelectionFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/row-expanding/rowExpandingFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/row-pagination/rowPaginationFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/row-sorting/rowSortingFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/row-models/createCoreRowModel.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/row-models/coreRowModelsFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/row-models/coreRowModelsFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/cells/constructCell.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/rows/coreRowsFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/rows/coreRowsFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/table/coreTablesFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/table/coreTablesFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/coreFeatures.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/reactivity/coreReactivityFeature.utils.js","../node_modules/.pnpm/@tanstack+store@0.11.1/node_modules/@tanstack/store/dist/shallow.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/core/table/constructTable.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-sizing/columnSizingFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-resizing/columnResizingFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-resizing/columnResizingFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-sizing/columnSizingFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/column-visibility/columnVisibilityFeature.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/row-selection/rowSelectionFeature.utils.js","../node_modules/.pnpm/@tanstack+table-core@9.2.4/node_modules/@tanstack/table-core/dist/features/row-selection/rowSelectionFeature.js","../node_modules/.pnpm/@tanstack+vue-table@9.2.4_vue@3.5.42_typescript@5.9.3_/node_modules/@tanstack/vue-table/dist/useTable.js","../vendor/tabler-icons/vue/esm/defaultAttributes.mjs","../vendor/tabler-icons/vue/esm/createVueComponent.mjs","../vendor/tabler-icons/vue/esm/icons/IconAlertCircle.mjs","../vendor/tabler-icons/vue/esm/icons/IconArrowsSort.mjs","../vendor/tabler-icons/vue/esm/icons/IconChevronLeft.mjs","../vendor/tabler-icons/vue/esm/icons/IconChevronRight.mjs","../vendor/tabler-icons/vue/esm/icons/IconFilter.mjs","../vendor/tabler-icons/vue/esm/icons/IconListCheck.mjs","../vendor/tabler-icons/vue/esm/icons/IconLoader.mjs","../vendor/tabler-icons/vue/esm/icons/IconRefresh.mjs","../vendor/tabler-icons/vue/esm/icons/IconSearch.mjs","../vendor/tabler-icons/vue/esm/icons/IconSortAscending.mjs","../vendor/tabler-icons/vue/esm/icons/IconSortDescending.mjs","../src/components/od-table-a11y.ts","../src/components/od-table-formatters.ts","../src/components/od-table-query.ts","../src/components/od-table-request.ts","../src/components/OdTable.types.ts","../src/components/OdTable.vue","../src/index.ts"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\ndefineOptions({ name: 'OdButton', inheritAttrs: false })\r\n\r\nexport type OdButtonVariant = 'primary' | 'default' | 'text'\r\nexport type OdSize = 'small' | 'default' | 'large'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n variant?: OdButtonVariant\r\n size?: OdSize\r\n danger?: boolean\r\n loading?: boolean\r\n disabled?: boolean\r\n nativeType?: 'button' | 'submit' | 'reset'\r\n }>(),\r\n {\r\n variant: 'default',\r\n size: 'default',\r\n danger: false,\r\n loading: false,\r\n disabled: false,\r\n nativeType: 'button',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\nconst classes = computed(() => [\r\n 'od-button',\r\n `od-button--${props.variant}`,\r\n `od-button--${props.size}`,\r\n {\r\n 'is-danger': props.danger,\r\n 'is-loading': props.loading,\r\n },\r\n])\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n if (props.disabled || props.loading) {\r\n event.preventDefault()\r\n return\r\n }\r\n emit('click', event)\r\n}\r\n</script>\r\n\r\n<template>\r\n <button\r\n v-bind=\"$attrs\"\r\n :class=\"classes\"\r\n :type=\"props.nativeType\"\r\n :disabled=\"props.disabled || props.loading\"\r\n :aria-disabled=\"props.disabled || props.loading || undefined\"\r\n :aria-busy=\"props.loading || undefined\"\r\n @click=\"handleClick\"\r\n >\r\n <span v-if=\"$slots.icon && !props.loading\" class=\"od-button__icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <span v-if=\"props.loading\" class=\"od-button__spinner\" aria-hidden=\"true\" />\r\n <span class=\"od-button__label\"><slot /></span>\r\n </button>\r\n</template>\r\n\r\n<style scoped>\r\n.od-button {\r\n position: relative;\r\n box-sizing: border-box;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: var(--od-space-2);\r\n min-width: 76px;\r\n height: 36px;\r\n padding: 0 15px;\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-control);\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-text-primary);\r\n font-size: var(--od-font-size-md);\r\n font-weight: 500;\r\n line-height: 1;\r\n letter-spacing: 0;\r\n white-space: nowrap;\r\n cursor: pointer;\r\n box-shadow: var(--od-shadow-control);\r\n transform: translateY(0) scale(1);\r\n transition: background-color var(--od-transition-fast), border-color var(--od-transition-fast),\r\n box-shadow var(--od-transition-fast), color var(--od-transition-fast),\r\n transform var(--od-transition-fast);\r\n}\r\n\r\n.od-button:hover:not(:disabled) {\r\n border-color: color-mix(in srgb, var(--od-color-text-tertiary) 55%, var(--od-color-border));\r\n background: var(--od-color-bg-secondary);\r\n color: var(--od-color-text-primary);\r\n box-shadow: var(--od-shadow-control-hover);\r\n transform: translateY(-1px);\r\n}\r\n\r\n.od-button:active:not(:disabled) {\r\n border-color: color-mix(in srgb, var(--od-color-text-tertiary) 70%, var(--od-color-border));\r\n background: var(--od-color-bg-tertiary);\r\n box-shadow: inset 0 1px 2px rgb(16 24 40 / 10%);\r\n transform: translateY(0) scale(0.985);\r\n}\r\n\r\n.od-button:disabled {\r\n background: var(--od-button-disabled-bg);\r\n border-color: var(--od-button-disabled-border);\r\n color: var(--od-button-disabled-fg);\r\n cursor: not-allowed;\r\n box-shadow: none;\r\n transform: none;\r\n}\r\n\r\n.od-button--primary {\r\n border-color: var(--od-button-primary-bg);\r\n background: var(--od-button-primary-bg);\r\n color: #fff;\r\n box-shadow: var(--od-shadow-primary);\r\n}\r\n\r\n.od-button--primary:hover:not(:disabled) {\r\n border-color: var(--od-button-primary-bg-hover);\r\n background: var(--od-button-primary-bg-hover);\r\n color: #fff;\r\n box-shadow: var(--od-shadow-primary-hover);\r\n}\r\n\r\n.od-button--primary:active:not(:disabled) {\r\n border-color: var(--od-button-primary-bg-active);\r\n background: var(--od-button-primary-bg-active);\r\n color: #fff;\r\n box-shadow: inset 0 2px 4px rgb(18 55 84 / 28%);\r\n}\r\n\r\n.od-button--text {\r\n min-width: auto;\r\n padding: 0 var(--od-space-3);\r\n border-color: transparent;\r\n background: transparent;\r\n color: var(--od-button-accent-fg);\r\n box-shadow: none;\r\n}\r\n\r\n.od-button--text:hover:not(:disabled) {\r\n border-color: transparent;\r\n background: color-mix(in srgb, var(--od-button-accent-fg) 9%, transparent);\r\n color: var(--od-button-accent-fg-hover);\r\n box-shadow: none;\r\n}\r\n\r\n.od-button--text:active:not(:disabled) {\r\n border-color: transparent;\r\n background: color-mix(in srgb, var(--od-button-accent-fg) 15%, transparent);\r\n color: var(--od-button-accent-fg-hover);\r\n box-shadow: none;\r\n}\r\n\r\n.od-button.is-danger:not(.od-button--primary) {\r\n color: var(--od-button-danger-bg);\r\n}\r\n\r\n.od-button.is-danger:not(.od-button--primary):hover:not(:disabled) {\r\n border-color: color-mix(in srgb, var(--od-button-danger-bg) 45%, var(--od-color-border));\r\n background: color-mix(in srgb, var(--od-button-danger-bg) 7%, transparent);\r\n color: var(--od-button-danger-bg-hover);\r\n}\r\n\r\n.od-button--primary.is-danger {\r\n border-color: var(--od-button-danger-bg);\r\n background: var(--od-button-danger-bg);\r\n box-shadow: var(--od-shadow-danger);\r\n}\r\n\r\n.od-button--primary.is-danger:hover:not(:disabled) {\r\n border-color: var(--od-button-danger-bg-hover);\r\n background: var(--od-button-danger-bg-hover);\r\n box-shadow: var(--od-shadow-danger-hover);\r\n}\r\n\r\n.od-button--primary.is-danger:active:not(:disabled) {\r\n border-color: var(--od-button-danger-bg-active);\r\n background: var(--od-button-danger-bg-active);\r\n box-shadow: inset 0 2px 4px rgb(84 22 30 / 28%);\r\n}\r\n\r\n.od-button--primary:disabled:not(.is-loading) {\r\n border-color: var(--od-button-disabled-border);\r\n background: var(--od-button-disabled-bg);\r\n color: var(--od-button-disabled-fg);\r\n box-shadow: none;\r\n}\r\n\r\n.od-button--primary.is-loading:disabled {\r\n border-color: var(--od-button-primary-bg);\r\n background: var(--od-button-primary-bg);\r\n color: #fff;\r\n box-shadow: var(--od-shadow-button-loading);\r\n}\r\n\r\n.od-button--primary.is-danger.is-loading:disabled {\r\n border-color: var(--od-button-danger-bg);\r\n background: var(--od-button-danger-bg);\r\n}\r\n\r\n.od-button--small {\r\n min-width: 64px;\r\n height: 30px;\r\n padding: 0 11px;\r\n gap: 6px;\r\n font-size: var(--od-font-size-sm);\r\n}\r\n\r\n.od-button--large {\r\n height: 44px;\r\n padding: 0 19px;\r\n gap: 10px;\r\n font-size: var(--od-font-size-lg);\r\n}\r\n\r\n.od-button__icon,\r\n.od-button__spinner {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n line-height: 0;\r\n}\r\n\r\n.od-button__spinner {\r\n width: 14px;\r\n height: 14px;\r\n border: 2px solid currentColor;\r\n border-right-color: transparent;\r\n border-radius: 50%;\r\n animation: od-button-spin 700ms linear infinite;\r\n}\r\n\r\n.od-button.is-loading {\r\n cursor: wait;\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n .od-button {\r\n transition: none;\r\n }\r\n\r\n .od-button__spinner {\r\n animation-duration: 1400ms;\r\n }\r\n}\r\n\r\n@keyframes od-button-spin {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport type { Component } from 'vue'\r\n\r\ndefineOptions({ name: 'OdIcon' })\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n icon: Component\r\n size?: string | number\r\n color?: string\r\n stroke?: string | number\r\n ariaLabel?: string\r\n }>(),\r\n {\r\n size: 20,\r\n stroke: 2,\r\n },\r\n)\r\n\r\nconst iconStyle = computed(() => ({\r\n width: typeof props.size === 'number' ? `${props.size}px` : props.size,\r\n height: typeof props.size === 'number' ? `${props.size}px` : props.size,\r\n color: props.color,\r\n}))\r\n</script>\r\n\r\n<template>\r\n <span\r\n class=\"od-icon\"\r\n :style=\"iconStyle\"\r\n :aria-hidden=\"props.ariaLabel ? undefined : true\"\r\n :aria-label=\"props.ariaLabel\"\r\n :role=\"props.ariaLabel ? 'img' : undefined\"\r\n >\r\n <component\r\n :is=\"props.icon\"\r\n :size=\"props.size\"\r\n :stroke=\"props.stroke\"\r\n :color=\"props.color\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n />\r\n </span>\r\n</template>\r\n","//#region src/merge-proxy.ts\nfunction trueFn() {\n\treturn true;\n}\nconst $PROXY = Symbol(\"merge-proxy\");\nconst $SOURCES = Symbol(\"merge-proxy-sources\");\nconst propTraps = {\n\tget(_, property, receiver) {\n\t\tif (property === $PROXY) return receiver;\n\t\tif (property === $SOURCES) return _.sources;\n\t\treturn _.get(property);\n\t},\n\thas(_, property) {\n\t\treturn _.has(property);\n\t},\n\tset: trueFn,\n\tdeleteProperty: trueFn,\n\tgetOwnPropertyDescriptor(_, property) {\n\t\treturn {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget() {\n\t\t\t\treturn _.get(property);\n\t\t\t},\n\t\t\tset: trueFn,\n\t\t\tdeleteProperty: trueFn\n\t\t};\n\t},\n\townKeys(_) {\n\t\treturn _.keys();\n\t}\n};\nfunction resolveSource(s) {\n\treturn s && typeof s === \"object\" && \"value\" in s ? s.value : s;\n}\nfunction mergeProxy(...sources) {\n\tconst flattenedSources = sources.flatMap((source) => {\n\t\tif (typeof source === \"object\" && source !== null && $SOURCES in source && Array.isArray(source[$SOURCES])) return source[$SOURCES];\n\t\treturn [source];\n\t});\n\treturn new Proxy({\n\t\tsources: flattenedSources,\n\t\tget(property) {\n\t\t\tfor (let i = flattenedSources.length - 1; i >= 0; i--) {\n\t\t\t\tconst v = resolveSource(flattenedSources[i])[property];\n\t\t\t\tif (v !== void 0) return v;\n\t\t\t}\n\t\t},\n\t\thas(property) {\n\t\t\tfor (let i = flattenedSources.length - 1; i >= 0; i--) if (property in resolveSource(flattenedSources[i])) return true;\n\t\t\treturn false;\n\t\t},\n\t\tkeys() {\n\t\t\tconst keys = [];\n\t\t\tfor (const source of flattenedSources) keys.push(...Object.keys(resolveSource(source)));\n\t\t\treturn [...Array.from(new Set(keys))];\n\t\t}\n\t}, propTraps);\n}\nfunction flatMerge(...sources) {\n\tconst result = {};\n\tfor (let source of sources) {\n\t\tsource = resolveSource(source);\n\t\tif (!source) continue;\n\t\tfor (const key of Reflect.ownKeys(source)) {\n\t\t\tconst value = source[key];\n\t\t\tif (value !== void 0) result[key] = value;\n\t\t}\n\t}\n\treturn result;\n}\n\n//#endregion\nexport { flatMerge, mergeProxy };","import { computed, shallowRef, watch } from \"vue\";\n\n//#region src/reactivity.ts\nfunction observerToCallback(observerOrNext) {\n\treturn typeof observerOrNext === \"function\" ? observerOrNext : (value) => observerOrNext.next?.(value);\n}\nfunction refToReadonlyAtom(source) {\n\treturn Object.assign(source, {\n\t\tget: () => source.value,\n\t\tsubscribe: ((observerOrNext) => {\n\t\t\treturn { unsubscribe: watch(source, observerToCallback(observerOrNext), { flush: \"sync\" }) };\n\t\t})\n\t});\n}\nfunction refToWritableAtom(source) {\n\treturn Object.assign(source, {\n\t\tset: (updater) => {\n\t\t\tsource.value = typeof updater === \"function\" ? updater(source.value) : updater;\n\t\t},\n\t\tget: () => source.value,\n\t\tsubscribe: ((observerOrNext) => {\n\t\t\treturn { unsubscribe: watch(source, observerToCallback(observerOrNext), { flush: \"sync\" }) };\n\t\t})\n\t});\n}\n/**\n* Creates the table-core reactivity bindings used by the Vue adapter.\n*\n* Table state atoms are backed by TanStack Store atoms. The options store stays\n* framework-native because row-model APIs read `table.options` directly during\n* render. Readonly table atoms bridge Store dependency tracking into Vue computed\n* refs.\n*/\nfunction vueReactivity() {\n\tconst subscriptions = /* @__PURE__ */ new Set();\n\treturn {\n\t\tcreateOptionsStore: true,\n\t\twrapExternalAtoms: true,\n\t\taddSubscription: (subscription) => {\n\t\t\tsubscriptions.add(subscription);\n\t\t},\n\t\tunmount: () => {\n\t\t\tsubscriptions.forEach((s) => s.unsubscribe());\n\t\t\tsubscriptions.clear();\n\t\t},\n\t\tschedule: (fn) => queueMicrotask(() => fn()),\n\t\tcreateReadonlyAtom: (fn, _options) => {\n\t\t\treturn refToReadonlyAtom(computed(() => fn()));\n\t\t},\n\t\tcreateWritableAtom: (value, _options) => {\n\t\t\treturn refToWritableAtom(shallowRef(value));\n\t\t},\n\t\tuntrack: (fn) => fn(),\n\t\tbatch: (fn) => fn()\n\t};\n}\n\n//#endregion\nexport { vueReactivity };","//#region src/utils.ts\n/**\n* Applies a TanStack updater to a value.\n*\n* If the updater is a function it is called with the previous value; otherwise the updater value is returned directly.\n*/\nfunction functionalUpdate(updater, input) {\n\treturn typeof updater === \"function\" ? updater(input) : updater;\n}\n/**\n* Clones table state values while preserving non-plain objects.\n*\n* Plain objects and arrays are copied recursively so state updates can avoid mutating existing references.\n*/\nfunction cloneState(value) {\n\tif (Array.isArray(value)) return value.map(cloneState);\n\tif (value && typeof value === \"object\") {\n\t\tconst proto = Object.getPrototypeOf(value);\n\t\tif (proto !== Object.prototype && proto !== null) return value;\n\t\tconst copy = proto === null ? makeObjectMap() : {};\n\t\tconst keys = Object.keys(value);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key = keys[i];\n\t\t\tObject.defineProperty(copy, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: cloneState(value[key]),\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t\treturn copy;\n\t}\n\treturn value;\n}\n/**\n* Copies prototype-instance own properties without carrying over lazy memo\n* closures or the per-row cell cache, both of which are bound to the source\n* instance (cached cells reference the source row).\n*/\nfunction copyInstancePropertiesWithoutMemos(target, source) {\n\tconst keys = Object.keys(source);\n\tconst targetRecord = target;\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key = keys[i];\n\t\tif (!key.startsWith(\"_memo_\") && key !== \"_cellsCache\") targetRecord[key] = source[key];\n\t}\n\treturn target;\n}\n/**\n* Creates an object intended only for string-keyed dictionary lookups.\n*\n* The null prototype keeps user-controlled ids such as `__proto__` and\n* `hasOwnProperty` as plain data keys.\n*/\nfunction makeObjectMap() {\n\treturn Object.create(null);\n}\n/**\n* Checks whether an object owns a key, including null-prototype dictionaries.\n*/\nfunction hasOwn(obj, key) {\n\treturn Object.prototype.hasOwnProperty.call(obj, key);\n}\n/**\n* Creates a table state updater for a single state slice.\n*\n* The updater writes through the table base atom for the slice and supports both value and functional updater forms.\n*/\nfunction makeStateUpdater(key, instance) {\n\treturn (updater) => {\n\t\t(instance.options.atoms?.[key] ?? instance.baseAtoms[key]).set((old) => functionalUpdate(updater, old));\n\t};\n}\n/**\n* Checks whether a value is an array or a plain (or null-prototype) object.\n* Class instances, dates, and other exotic values compare by reference only,\n* mirroring the `cloneState` plain-object policy.\n*/\nfunction isPlainContainer(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (Array.isArray(value)) return true;\n\tconst proto = Object.getPrototypeOf(value);\n\treturn proto === Object.prototype || proto === null;\n}\n/**\n* Returns every enumerable own key, including symbols and non-index array\n* properties. Keeping key presence explicit distinguishes sparse array holes\n* from entries whose value is `undefined`.\n*/\nfunction getEnumerableOwnKeys(value) {\n\treturn Reflect.ownKeys(value).filter((key) => Object.prototype.propertyIsEnumerable.call(value, key));\n}\nconst MAX_STATE_COMPARE_DEPTH = 3;\n/**\n* Structurally compares two state slice values as deeply as stock feature\n* state can nest and no deeper.\n*\n* Three container levels cover flat maps and arrays, arrays of state objects,\n* array-valued filter values, and `columnResizing.columnSizingStart` tuples.\n* Deeper containers and non-plain values compare by reference. A `false`\n* result is always safe: the state update simply proceeds.\n*/\nfunction stateSlicesEqual(a, b) {\n\treturn stateSlicesEqualAtDepth(a, b, MAX_STATE_COMPARE_DEPTH);\n}\nfunction stateSlicesEqualAtDepth(a, b, depth) {\n\tif (Object.is(a, b)) return true;\n\tif (depth <= 0 || !isPlainContainer(a) || !isPlainContainer(b)) return false;\n\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\tif (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n\t}\n\tconst keysA = getEnumerableOwnKeys(a);\n\tconst keysB = getEnumerableOwnKeys(b);\n\tif (keysA.length !== keysB.length) return false;\n\tconst recordA = a;\n\tconst recordB = b;\n\tfor (let i = 0; i < keysA.length; i++) {\n\t\tconst key = keysA[i];\n\t\tif (!Object.prototype.propertyIsEnumerable.call(b, key)) return false;\n\t\tif (!stateSlicesEqualAtDepth(recordA[key], recordB[key], depth - 1)) return false;\n\t}\n\treturn true;\n}\n/**\n* Routes a state slice update through the slice's `on<State>Change` handler,\n* preserving the owner's current reference for structural no-ops.\n*\n* Equality is evaluated inside the updater received by the state owner, never\n* against the table's potentially stale controlled snapshot. This keeps\n* same-tick updates composable in queued host containers such as React state,\n* evaluates the original updater only when the owner applies it, and lets atom\n* owners suppress notifications by returning their existing reference.\n*\n* A user-provided change handler is still invoked for a no-op because only that\n* handler's state container can know its latest queued value. The guarded\n* updater returns that container's previous reference, preventing a state write\n* or render in state containers with identity bailout semantics.\n*\n* Hot-path slices that skip guarding entirely (selection maps that scale with\n* row count, pointer-frequency resize state) call their change handler\n* directly instead of routing through this util. Custom feature slices with a\n* cheaper or semantic-aware comparison can pass `isEqual` to override the\n* structural default.\n*/\nfunction setStateSlice(instance, key, updater, isEqual = stateSlicesEqual) {\n\tconst onChangeKey = `on${key.charAt(0).toUpperCase()}${key.slice(1)}Change`;\n\tconst onChange = instance.options[onChangeKey];\n\tif (!onChange) return;\n\tonChange((current) => {\n\t\tconst next = functionalUpdate(updater, current);\n\t\treturn isEqual(current, next) ? current : next;\n\t});\n}\n/**\n* Returns whether a value is a function.\n*/\nfunction isFunction(d) {\n\treturn d instanceof Function;\n}\n/**\n* Flattens a tree of nodes by recursively reading child nodes.\n*\n* The original nodes are preserved in depth-first order.\n*/\nfunction flattenBy(arr, getChildren) {\n\tconst flat = [];\n\tconst recurse = (subArr) => {\n\t\tsubArr.forEach((item) => {\n\t\t\tflat.push(item);\n\t\t\tconst children = getChildren(item);\n\t\t\tif (children.length) recurse(children);\n\t\t});\n\t};\n\trecurse(arr);\n\treturn flat;\n}\n/**\n* Creates a dependency-tracked memoized function for table internals.\n*\n* The memo recomputes only when its dependency tuple changes and can emit debug timing information.\n*/\nconst memo = ({ fn, memoDeps, onAfterCompare, onAfterUpdate, onBeforeCompare, onBeforeUpdate }) => {\n\tlet deps = [];\n\tlet result;\n\tconst memoizedFn = (depArgs) => {\n\t\tonBeforeCompare?.();\n\t\tconst newDeps = memoDeps?.(depArgs);\n\t\tlet depsChanged = !newDeps || newDeps.length !== deps?.length;\n\t\tif (!depsChanged && newDeps) {\n\t\t\tfor (let i = 0; i < newDeps.length; i++) if (newDeps[i] !== deps[i]) {\n\t\t\t\tdepsChanged = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tonAfterCompare?.(depsChanged);\n\t\tif (!depsChanged) return result;\n\t\tdeps = newDeps;\n\t\tonBeforeUpdate?.();\n\t\tresult = fn(...newDeps ?? []);\n\t\tonAfterUpdate?.(result);\n\t\treturn result;\n\t};\n\treturn memoizedFn;\n};\n/**\n* Wraps a callback so that its first invocation is skipped.\n*\n* Row-model `onAfterUpdate` hooks schedule auto-resets when their inputs\n* change. The initial computation of a row model is not a change, so state\n* resets must not fire for it — otherwise merely reading a row model on mount\n* would wipe initial or controlled state.\n*/\nfunction skipFirstRun(fn) {\n\tlet hasRun = false;\n\treturn () => {\n\t\tif (!hasRun) {\n\t\t\thasRun = true;\n\t\t\treturn;\n\t\t}\n\t\tfn();\n\t};\n}\nconst pad = (str, num) => {\n\tstr = String(str);\n\twhile (str.length < num) str = \" \" + str;\n\treturn str;\n};\n/**\n* Creates a table-aware memoized function.\n*\n* This wraps `memo` with table debug options and feature metadata so row models and derived APIs can share consistent diagnostics.\n*/\nfunction tableMemo({ feature, fnName, objectId, onAfterUpdate, table, ...memoOptions }) {\n\tlet startCalcTime;\n\tlet endCalcTime;\n\tlet runCount = 0;\n\tlet debug;\n\tif (process.env.NODE_ENV === \"development\") {\n\t\tconst { debugAll } = table.options;\n\t\tconst { parentName } = getFunctionNameInfo(fnName, \".\");\n\t\tconst debugByParent = table.options[`debug${(parentName != \"table\" ? parentName + \"s\" : parentName).replace(parentName, parentName.charAt(0).toUpperCase() + parentName.slice(1))}`];\n\t\tconst debugByFeature = feature ? table.options[`debug${feature.charAt(0).toUpperCase() + feature.slice(1)}`] : false;\n\t\tdebug = debugAll || debugByParent || debugByFeature;\n\t}\n\tfunction logTime(time, depsChanged) {\n\t\tconst runType = runCount === 0 ? \"(1st run)\" : depsChanged ? \"(rerun #\" + runCount + \")\" : \"(cache)\";\n\t\trunCount++;\n\t\tconsole.groupCollapsed(`%c⏱ ${pad(`${time.toFixed(1)} ms`, 12)} %c${runType}%c ${fnName}%c ${objectId ? `(${fnName.split(\".\")[0]}Id: ${objectId})` : \"\"}`, `font-size: .6rem; font-weight: bold; ${depsChanged ? `color: hsl(\n ${Math.max(0, Math.min(120 - Math.log10(time) * 60, 120))}deg 100% 31%);` : \"\"} `, `color: ${runCount < 2 ? \"#FF00FF\" : \"#FF1493\"}`, \"color: #666\", \"color: #87CEEB\");\n\t\tconsole.info({\n\t\t\tfeature,\n\t\t\tstate: table.store.state,\n\t\t\tdeps: memoOptions.memoDeps?.toString()\n\t\t});\n\t\tconsole.trace();\n\t\tconsole.groupEnd();\n\t}\n\tconst onAfterUpdateHandler = () => {\n\t\tif (!onAfterUpdate) return;\n\t\tconst { schedule, untrack } = table._reactivity;\n\t\tschedule(() => untrack(() => onAfterUpdate()));\n\t};\n\tconst debugOptions = process.env.NODE_ENV === \"development\" ? {\n\t\tonBeforeCompare: () => {},\n\t\tonAfterCompare: (depsChanged) => {},\n\t\tonBeforeUpdate: () => {\n\t\t\tif (debug) startCalcTime = performance.now();\n\t\t},\n\t\tonAfterUpdate: () => {\n\t\t\tif (debug) {\n\t\t\t\tendCalcTime = performance.now();\n\t\t\t\tlogTime(Math.round((endCalcTime - startCalcTime) * 100) / 100, true);\n\t\t\t}\n\t\t\tonAfterUpdateHandler();\n\t\t}\n\t} : { onAfterUpdate: () => {\n\t\tonAfterUpdateHandler();\n\t} };\n\treturn memo({\n\t\t...memoOptions,\n\t\t...debugOptions\n\t});\n}\n/**\n* Assumes that a function name is in the format of `parentName_fnKey` and returns the `fnKey` and `fnName` in the format of `parentName.fnKey`.\n*/\nfunction getFunctionNameInfo(staticFnName, splitBy = \"_\") {\n\tconst [parentName, fnKey] = staticFnName.split(splitBy);\n\treturn {\n\t\tfnKey,\n\t\tfnName: `${parentName}.${fnKey}`,\n\t\tparentName\n\t};\n}\n/**\n* Assigns Table API methods directly to the table instance.\n* Unlike row/cell/column/header, the table is a singleton so methods are assigned directly.\n*/\nfunction assignTableAPIs(feature, table, apis) {\n\tfor (const [staticFnName, { fn, memoDeps }] of Object.entries(apis)) {\n\t\tconst { fnKey, fnName } = getFunctionNameInfo(staticFnName);\n\t\ttable[fnKey] = memoDeps ? tableMemo({\n\t\t\tmemoDeps,\n\t\t\tfn,\n\t\t\tfnName,\n\t\t\ttable,\n\t\t\tfeature\n\t\t}) : fn;\n\t}\n}\n/**\n* Assigns API methods to a prototype object for memory-efficient method sharing.\n* All instances created with this prototype will share the same method references.\n*\n* For memoized methods, the memo state is lazily created and stored on each instance.\n* This provides the best of both worlds: shared method code + per-instance caching.\n*/\nfunction assignPrototypeAPIs(feature, prototype, table, apis) {\n\tfor (const [staticFnName, { fn, memoDeps }] of Object.entries(apis)) {\n\t\tconst { fnKey, fnName } = getFunctionNameInfo(staticFnName);\n\t\tif (memoDeps) {\n\t\t\tconst memoKey = `_memo_${fnKey}`;\n\t\t\tprototype[fnKey] = function(...args) {\n\t\t\t\tif (!this[memoKey]) {\n\t\t\t\t\tconst self = this;\n\t\t\t\t\tthis[memoKey] = tableMemo({\n\t\t\t\t\t\tmemoDeps: (depArgs) => memoDeps(self, depArgs),\n\t\t\t\t\t\tfn: (...deps) => fn(self, ...deps),\n\t\t\t\t\t\tfnName,\n\t\t\t\t\t\tobjectId: self.id,\n\t\t\t\t\t\ttable,\n\t\t\t\t\t\tfeature\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this[memoKey](...args);\n\t\t\t};\n\t\t} else prototype[fnKey] = function(...args) {\n\t\t\treturn fn(this, ...args);\n\t\t};\n\t}\n}\n/**\n* Looks to run the memoized function with the builder pattern on the object if it exists, otherwise fall back to the static method passed in.\n*/\nfunction callMemoOrStaticFn(obj, fnKey, staticFn, ...args) {\n\treturn obj[fnKey]?.(...args) ?? staticFn(obj, ...args);\n}\n\n//#endregion\nexport { assignPrototypeAPIs, assignTableAPIs, callMemoOrStaticFn, cloneState, copyInstancePropertiesWithoutMemos, flattenBy, functionalUpdate, getFunctionNameInfo, hasOwn, isFunction, makeObjectMap, makeStateUpdater, memo, setStateSlice, skipFirstRun, stateSlicesEqual, tableMemo };","//#region src/core/cells/coreCellsFeature.utils.ts\n/**\n* Reads this cell's accessor value from its owning row and column.\n*\n* This is the standalone implementation behind `cell.getValue()`, useful when\n* importing static APIs instead of calling methods from the cell prototype.\n*\n* @example\n* ```ts\n* const value = cell_getValue(cell)\n* ```\n*/\nfunction cell_getValue(cell) {\n\treturn cell.row.getValue(cell.column.id);\n}\n/**\n* Reads the value that should be rendered for this cell.\n*\n* Nullish accessor values are replaced with `table.options.renderFallbackValue`,\n* matching the behavior of `cell.renderValue()`.\n*\n* @example\n* ```ts\n* const rendered = cell_renderValue(cell)\n* ```\n*/\nfunction cell_renderValue(cell) {\n\treturn cell.getValue() ?? cell.table.options.renderFallbackValue;\n}\n/**\n* Builds the render context passed to a column's `cell` template.\n*\n* The returned object includes stable references to the table, row, column, and\n* cell, plus bound `getValue` and `renderValue` helpers for render functions.\n*\n* @example\n* ```ts\n* const context = cell_getContext(cell)\n* ```\n*/\nfunction cell_getContext(cell) {\n\treturn {\n\t\ttable: cell.table,\n\t\tcolumn: cell.column,\n\t\trow: cell.row,\n\t\tcell,\n\t\tgetValue: () => cell.getValue(),\n\t\trenderValue: () => cell.renderValue()\n\t};\n}\n\n//#endregion\nexport { cell_getContext, cell_getValue, cell_renderValue };","import { assignPrototypeAPIs } from \"../../utils.js\";\nimport { cell_getContext, cell_getValue, cell_renderValue } from \"./coreCellsFeature.utils.js\";\n\n//#region src/core/cells/coreCellsFeature.ts\n/**\n* Core feature that adds cell value, render, and context APIs.\n*/\nconst coreCellsFeature = { assignCellPrototype: (prototype, table) => {\n\tassignPrototypeAPIs(\"coreCellsFeature\", prototype, table, {\n\t\tcell_getValue: { fn: (cell) => cell_getValue(cell) },\n\t\tcell_renderValue: { fn: (cell) => cell_renderValue(cell) },\n\t\tcell_getContext: {\n\t\t\tfn: (cell) => cell_getContext(cell),\n\t\t\tmemoDeps: (cell) => [cell]\n\t\t}\n\t});\n} };\n\n//#endregion\nexport { coreCellsFeature };","//#region src/core/headers/constructHeader.ts\n/**\n* Creates or retrieves the header prototype for a table.\n* The prototype is cached on the table and shared by all header instances.\n*/\nfunction getHeaderPrototype(table) {\n\tif (!table._headerPrototype) {\n\t\ttable._headerPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignHeaderPrototype?.(table._headerPrototype, table);\n\t}\n\treturn table._headerPrototype;\n}\n/**\n* Constructs a header instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructHeader(table, column, options) {\n\tconst headerPrototype = getHeaderPrototype(table);\n\tconst header = Object.create(headerPrototype);\n\theader.colSpan = 0;\n\theader.column = column;\n\theader.depth = options.depth;\n\theader.headerGroup = null;\n\theader.id = options.id ?? column.id;\n\theader.index = options.index;\n\theader.isPlaceholder = !!options.isPlaceholder;\n\theader.placeholderId = options.placeholderId;\n\theader.rowSpan = 0;\n\theader.subHeaders = [];\n\tconst initFns = table._headerInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](header);\n\treturn header;\n}\n\n//#endregion\nexport { constructHeader };","import { callMemoOrStaticFn, cloneState, setStateSlice } from \"../../utils.js\";\nimport { column_getIsVisible, row_getVisibleCells, row_getVisibleCellsByColumnId, table_getVisibleLeafColumns } from \"../column-visibility/columnVisibilityFeature.utils.js\";\nimport { buildHeaderGroups } from \"../../core/headers/buildHeaderGroups.js\";\n\n//#region src/features/column-pinning/columnPinningFeature.utils.ts\n/**\n* Creates the default column pinning state.\n*\n* Both pinning regions start empty. Reset APIs use this value when\n* `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const pinning = getDefaultColumnPinningState()\n* ```\n*/\nfunction getDefaultColumnPinningState() {\n\treturn {\n\t\tstart: [],\n\t\tend: []\n\t};\n}\n/**\n* Moves this column's leaf column ids into a pinning region.\n*\n* Pinning a group column pins all of its leaves. The leaf ids are first removed\n* from both regions, then appended to the requested `'start'` or `'end'`\n* region. Passing `false` unpins them back to the center.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* column_pin(column, 'start')\n* ```\n*/\nfunction column_pin(column, position) {\n\tconst leafColumns = column.getLeafColumns();\n\tconst columnIds = [];\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst id = leafColumns[i].id;\n\t\tif (id) columnIds.push(id);\n\t}\n\ttable_setColumnPinning(column.table, (old) => {\n\t\tif (position === \"end\") return {\n\t\t\tstart: old.start.filter((d) => !columnIds.includes(d)),\n\t\t\tend: [...old.end.filter((d) => !columnIds.includes(d)), ...columnIds]\n\t\t};\n\t\tif (position === \"start\") return {\n\t\t\tstart: [...old.start.filter((d) => !columnIds.includes(d)), ...columnIds],\n\t\t\tend: old.end.filter((d) => !columnIds.includes(d))\n\t\t};\n\t\treturn {\n\t\t\tstart: old.start.filter((d) => !columnIds.includes(d)),\n\t\t\tend: old.end.filter((d) => !columnIds.includes(d))\n\t\t};\n\t});\n}\n/**\n* Checks whether this column or any of its leaf columns can be pinned.\n*\n* Column-level `enablePinning` and table `enableColumnPinning` both default to\n* `true`; at least one leaf column must allow pinning.\n*\n* @example\n* ```ts\n* const canPin = column_getCanPin(column)\n* ```\n*/\nfunction column_getCanPin(column) {\n\treturn column.getLeafColumns().some((leafColumn) => (leafColumn.columnDef.enablePinning ?? true) && (column.table.options.enableColumnPinning ?? true));\n}\n/**\n* Reads this column's current pinning region.\n*\n* Group columns report `'start'` or `'end'` when any leaf column is pinned in\n* that region. Unpinned columns return `false`.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* const position = column_getIsPinned(column)\n* ```\n*/\nfunction column_getIsPinned(column) {\n\tconst leafColumns = column.getLeafColumns();\n\tconst { start, end } = column.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tfor (let i = 0; i < leafColumns.length; i++) if (start.includes(leafColumns[i].id)) return \"start\";\n\tfor (let i = 0; i < leafColumns.length; i++) if (end.includes(leafColumns[i].id)) return \"end\";\n\treturn false;\n}\n/**\n* Finds this column's index within its pinned region.\n*\n* Unpinned columns return `0`; pinned columns return their position in\n* `state.columnPinning.start` or `state.columnPinning.end`.\n*\n* @example\n* ```ts\n* const index = column_getPinnedIndex(column)\n* ```\n*/\nfunction column_getPinnedIndex(column) {\n\tconst position = column_getIsPinned(column);\n\treturn position ? column.table.atoms.columnPinning?.get()?.[position].indexOf(column.id) ?? -1 : 0;\n}\n/**\n* Collects visible cells whose columns are not pinned start or end.\n*\n* The result preserves the row's visible-cell order for center columns.\n*\n* @example\n* ```ts\n* const centerCells = row_getCenterVisibleCells(row)\n* ```\n*/\nfunction row_getCenterVisibleCells(row) {\n\tconst allCells = callMemoOrStaticFn(row, \"getVisibleCells\", row_getVisibleCells);\n\tconst { start, end } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length && !end.length) return allCells;\n\tconst startAndEnd = [...start, ...end];\n\treturn allCells.filter((d) => !startAndEnd.includes(d.column.id));\n}\n/**\n* Collects visible cells for columns pinned to the start region.\n*\n* Cells are returned in `state.columnPinning.start` order and are marked with\n* `cell.position = 'start'`.\n*\n* @example\n* ```ts\n* const startCells = row_getStartVisibleCells(row)\n* ```\n*/\nfunction row_getStartVisibleCells(row) {\n\tconst { start } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length) return [];\n\tconst allVisibleCells = callMemoOrStaticFn(row, \"getVisibleCellsByColumnId\", row_getVisibleCellsByColumnId);\n\tconst cells = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst cell = allVisibleCells[start[i]];\n\t\tif (cell) {\n\t\t\tcell.position = \"start\";\n\t\t\tcells.push(cell);\n\t\t}\n\t}\n\treturn cells;\n}\n/**\n* Collects visible cells for columns pinned to the end region.\n*\n* Cells are returned in `state.columnPinning.end` order and are marked with\n* `cell.position = 'end'`.\n*\n* @example\n* ```ts\n* const endCells = row_getEndVisibleCells(row)\n* ```\n*/\nfunction row_getEndVisibleCells(row) {\n\tconst { end } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!end.length) return [];\n\tconst allVisibleCells = callMemoOrStaticFn(row, \"getVisibleCellsByColumnId\", row_getVisibleCellsByColumnId);\n\tconst cells = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst cell = allVisibleCells[end[i]];\n\t\tif (cell) {\n\t\t\tcell.position = \"end\";\n\t\t\tcells.push(cell);\n\t\t}\n\t}\n\treturn cells;\n}\n/**\n* Routes a column pinning updater through the table's pinning change handler.\n*\n* The updater may be a next `{ start, end }` state or a function of the\n* previous state, matching the instance `table.setColumnPinning` behavior.\n*\n* @example\n* ```ts\n* table_setColumnPinning(table, (old) => ({ ...old, start: ['select'] }))\n* ```\n*/\nfunction table_setColumnPinning(table, updater) {\n\tsetStateSlice(table, \"columnPinning\", updater);\n}\n/**\n* Resets `columnPinning` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnPinning` when it\n* exists. Passing `true` ignores initial state and resets to empty start/end\n* arrays.\n*\n* @example\n* ```ts\n* table_resetColumnPinning(table)\n* table_resetColumnPinning(table, true)\n* ```\n*/\nfunction table_resetColumnPinning(table, defaultState) {\n\ttable_setColumnPinning(table, defaultState ? getDefaultColumnPinningState() : cloneState(table.initialState.columnPinning ?? getDefaultColumnPinningState()));\n}\n/**\n* Checks whether any columns are pinned.\n*\n* Omit `position` to check both sides, or pass `'start'`/`'end'` to inspect a\n* single pinning region.\n*\n* @example\n* ```ts\n* const hasPinnedColumns = table_getIsSomeColumnsPinned(table)\n* ```\n*/\nfunction table_getIsSomeColumnsPinned(table, position) {\n\tconst pinningState = table.atoms.columnPinning?.get();\n\tif (!position) return Boolean(pinningState?.start.length || pinningState?.end.length);\n\treturn Boolean(pinningState?.[position].length);\n}\n/**\n* Builds header groups for visible columns pinned to the start region.\n*\n* The leaf columns are read in `state.columnPinning.start` order and then passed\n* through the same header-group builder as the unpinned table.\n*\n* @example\n* ```ts\n* const headerGroups = table_getStartHeaderGroups(table)\n* ```\n*/\nfunction table_getStartHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst { start } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst orderedLeafColumns = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst column = leafColumnsById[start[i]];\n\t\tif (column && callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible)) orderedLeafColumns.push(column);\n\t}\n\treturn buildHeaderGroups(allColumns, orderedLeafColumns, table, \"start\");\n}\n/**\n* Builds header groups for visible columns pinned to the end region.\n*\n* The leaf columns are read in `state.columnPinning.end` order and then\n* passed through the same header-group builder as the unpinned table.\n*\n* @example\n* ```ts\n* const headerGroups = table_getEndHeaderGroups(table)\n* ```\n*/\nfunction table_getEndHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst { end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst orderedLeafColumns = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst column = leafColumnsById[end[i]];\n\t\tif (column && callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible)) orderedLeafColumns.push(column);\n\t}\n\treturn buildHeaderGroups(allColumns, orderedLeafColumns, table, \"end\");\n}\n/**\n* Builds header groups for visible columns that are not pinned.\n*\n* Start- and end-pinned column ids are removed from the visible leaf column\n* list before header groups are built for the center region.\n*\n* @example\n* ```ts\n* const headerGroups = table_getCenterHeaderGroups(table)\n* ```\n*/\nfunction table_getCenterHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tlet leafColumns = callMemoOrStaticFn(table, \"getVisibleLeafColumns\", table_getVisibleLeafColumns);\n\tconst { start, end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (start.length || end.length) {\n\t\tconst startAndEnd = [...start, ...end];\n\t\tleafColumns = leafColumns.filter((column) => !startAndEnd.includes(column.id));\n\t}\n\treturn buildHeaderGroups(allColumns, leafColumns, table, \"center\");\n}\n/**\n* Builds footer groups for the start pinned region.\n*\n* Footer groups reuse the start header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getStartFooterGroups(table)\n* ```\n*/\nfunction table_getStartFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)].reverse();\n}\n/**\n* Builds footer groups for the end pinned region.\n*\n* Footer groups reuse the end header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getEndFooterGroups(table)\n* ```\n*/\nfunction table_getEndFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)].reverse();\n}\n/**\n* Builds footer groups for the center, unpinned region.\n*\n* Footer groups reuse the center header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getCenterFooterGroups(table)\n* ```\n*/\nfunction table_getCenterFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)].reverse();\n}\n/**\n* Flattens every header from the start pinned header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getStartFlatHeaders(table)\n* ```\n*/\nfunction table_getStartFlatHeaders(table) {\n\tconst leftHeaderGroups = callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < leftHeaderGroups.length; i++) {\n\t\tconst headers = leftHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Flattens every header from the end pinned header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getEndFlatHeaders(table)\n* ```\n*/\nfunction table_getEndFlatHeaders(table) {\n\tconst rightHeaderGroups = callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < rightHeaderGroups.length; i++) {\n\t\tconst headers = rightHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Flattens every header from the center header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getCenterFlatHeaders(table)\n* ```\n*/\nfunction table_getCenterFlatHeaders(table) {\n\tconst centerHeaderGroups = callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < centerHeaderGroups.length; i++) {\n\t\tconst headers = centerHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Collects leaf headers for the start pinned region.\n*\n* Parent headers are filtered out from the start flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getStartLeafHeaders(table)\n* ```\n*/\nfunction table_getStartLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getStartFlatHeaders\", table_getStartFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Collects leaf headers for the end pinned region.\n*\n* Parent headers are filtered out from the end flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getEndLeafHeaders(table)\n* ```\n*/\nfunction table_getEndLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getEndFlatHeaders\", table_getEndFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Collects leaf headers for the center, unpinned region.\n*\n* Parent headers are filtered out from the center flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getCenterLeafHeaders(table)\n* ```\n*/\nfunction table_getCenterLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getCenterFlatHeaders\", table_getCenterFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Resolves leaf columns pinned to the start region.\n*\n* The result follows `state.columnPinning.start` order and skips stale ids that\n* no longer correspond to a leaf column.\n*\n* @example\n* ```ts\n* const columns = table_getStartLeafColumns(table)\n* ```\n*/\nfunction table_getStartLeafColumns(table) {\n\tconst { start } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst result = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst column = leafColumnsById[start[i]];\n\t\tif (column) result.push(column);\n\t}\n\treturn result;\n}\n/**\n* Resolves leaf columns pinned to the end region.\n*\n* The result follows `state.columnPinning.end` order and skips stale ids that\n* no longer correspond to a leaf column.\n*\n* @example\n* ```ts\n* const columns = table_getEndLeafColumns(table)\n* ```\n*/\nfunction table_getEndLeafColumns(table) {\n\tconst { end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst result = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst column = leafColumnsById[end[i]];\n\t\tif (column) result.push(column);\n\t}\n\treturn result;\n}\n/**\n* Resolves leaf columns that are not pinned to either logical side.\n*\n* Start- and end-pinned ids are removed from `table.getAllLeafColumns()`.\n*\n* @example\n* ```ts\n* const columns = table_getCenterLeafColumns(table)\n* ```\n*/\nfunction table_getCenterLeafColumns(table) {\n\tconst { start, end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length && !end.length) return table.getAllLeafColumns();\n\tconst startAndEnd = [...start, ...end];\n\treturn table.getAllLeafColumns().filter((d) => !startAndEnd.includes(d.id));\n}\n/**\n* Resolves leaf columns for a requested pinning region.\n*\n* Pass `'start'`, `'center'`, or `'end'` for a partition, or pass `false` to\n* read all leaf columns without partitioning.\n*\n* @example\n* ```ts\n* const columns = table_getPinnedLeafColumns(table, 'center')\n* ```\n*/\nfunction table_getPinnedLeafColumns(table, position) {\n\treturn !position ? table.getAllLeafColumns() : position === \"start\" ? callMemoOrStaticFn(table, \"getStartLeafColumns\", table_getStartLeafColumns) : position === \"end\" ? callMemoOrStaticFn(table, \"getEndLeafColumns\", table_getEndLeafColumns) : callMemoOrStaticFn(table, \"getCenterLeafColumns\", table_getCenterLeafColumns);\n}\n/**\n* Resolves visible leaf columns pinned to the start region.\n*\n* Hidden pinned columns are filtered out after the start pin order is applied.\n*\n* @example\n* ```ts\n* const columns = table_getStartVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getStartVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getStartLeafColumns\", table_getStartLeafColumns).filter((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Resolves visible leaf columns pinned to the end region.\n*\n* Hidden pinned columns are filtered out after the end pin order is applied.\n*\n* @example\n* ```ts\n* const columns = table_getEndVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getEndVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getEndLeafColumns\", table_getEndLeafColumns).filter((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Resolves visible leaf columns that are not pinned.\n*\n* This is the center partition used by layouts that render pinned columns\n* separately from the scrollable middle region.\n*\n* @example\n* ```ts\n* const columns = table_getCenterVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getCenterVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getCenterLeafColumns\", table_getCenterLeafColumns).filter((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Resolves visible leaf columns for a requested pinning region.\n*\n* Omit `position` to get all visible leaf columns, or pass `'start'`, `'center'`,\n* or `'end'` to get one partition.\n*\n* @example\n* ```ts\n* const columns = table_getPinnedVisibleLeafColumns(table, 'start')\n* ```\n*/\nfunction table_getPinnedVisibleLeafColumns(table, position) {\n\treturn !position ? callMemoOrStaticFn(table, \"getVisibleLeafColumns\", table_getVisibleLeafColumns) : position === \"start\" ? callMemoOrStaticFn(table, \"getStartVisibleLeafColumns\", table_getStartVisibleLeafColumns) : position === \"end\" ? callMemoOrStaticFn(table, \"getEndVisibleLeafColumns\", table_getEndVisibleLeafColumns) : callMemoOrStaticFn(table, \"getCenterVisibleLeafColumns\", table_getCenterVisibleLeafColumns);\n}\n\n//#endregion\nexport { column_getCanPin, column_getIsPinned, column_getPinnedIndex, column_pin, getDefaultColumnPinningState, row_getCenterVisibleCells, row_getEndVisibleCells, row_getStartVisibleCells, table_getCenterFlatHeaders, table_getCenterFooterGroups, table_getCenterHeaderGroups, table_getCenterLeafColumns, table_getCenterLeafHeaders, table_getCenterVisibleLeafColumns, table_getEndFlatHeaders, table_getEndFooterGroups, table_getEndHeaderGroups, table_getEndLeafColumns, table_getEndLeafHeaders, table_getEndVisibleLeafColumns, table_getIsSomeColumnsPinned, table_getPinnedLeafColumns, table_getPinnedVisibleLeafColumns, table_getStartFlatHeaders, table_getStartFooterGroups, table_getStartHeaderGroups, table_getStartLeafColumns, table_getStartLeafHeaders, table_getStartVisibleLeafColumns, table_resetColumnPinning, table_setColumnPinning };","import { callMemoOrStaticFn, cloneState, hasOwn, makeObjectMap, setStateSlice } from \"../../utils.js\";\nimport { getDefaultColumnPinningState } from \"../column-pinning/columnPinningFeature.utils.js\";\n\n//#region src/features/column-visibility/columnVisibilityFeature.utils.ts\n/**\n* Creates the default column visibility state.\n*\n* The feature default is an empty object, where missing column ids are treated\n* as visible. Reset APIs use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const visibility = getDefaultColumnVisibilityState()\n* ```\n*/\nfunction getDefaultColumnVisibilityState() {\n\treturn makeObjectMap();\n}\n/**\n* Updates this column's visibility when hiding is allowed.\n*\n* Passing `visible` stores that value. Omitting it flips the column's current\n* visibility state. Group columns update their hideable leaf columns because\n* visibility state is keyed by leaf column ids. Columns that cannot hide stay\n* unchanged.\n*\n* @example\n* ```ts\n* column_toggleVisibility(column)\n* ```\n*/\nfunction column_toggleVisibility(column, visible) {\n\tif (column_getCanHide(column)) table_setColumnVisibility(column.table, (old) => {\n\t\tconst next = Object.assign(makeObjectMap(), old);\n\t\tconst nextVisible = visible ?? !callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible);\n\t\tconst leafColumns = column.getLeafColumns();\n\t\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\t\tconst leafColumn = leafColumns[i];\n\t\t\tif (column_getCanHide(leafColumn)) next[leafColumn.id] = nextVisible;\n\t\t}\n\t\treturn next;\n\t});\n}\n/**\n* Checks whether this column is visible.\n*\n* Leaf columns read `state.columnVisibility[column.id]`, where missing entries\n* default to visible. Parent columns are visible when at least one child column\n* is visible.\n*\n* @example\n* ```ts\n* const visible = column_getIsVisible(column)\n* ```\n*/\nfunction column_getIsVisible(column) {\n\tconst columnVisibility = column.table.atoms.columnVisibility?.get();\n\tif (!columnVisibility) return true;\n\tconst childColumns = column.columns;\n\tif (childColumns.length) return childColumns.some((childColumn) => callMemoOrStaticFn(childColumn, \"getIsVisible\", column_getIsVisible));\n\treturn (hasOwn(columnVisibility, column.id) ? columnVisibility[column.id] : void 0) ?? true;\n}\n/**\n* Checks whether this column is allowed to be hidden.\n*\n* Both `columnDef.enableHiding` and table `enableHiding` default to `true`.\n*\n* @example\n* ```ts\n* const canHide = column_getCanHide(column)\n* ```\n*/\nfunction column_getCanHide(column) {\n\treturn (column.columnDef.enableHiding ?? true) && (column.table.options.enableHiding ?? true);\n}\n/**\n* Creates a checkbox-style handler that writes this column's visibility.\n*\n* The handler reads `event.target.checked`, so it is intended for visibility\n* controls whose checked state means \"visible\".\n*\n* @example\n* ```ts\n* const onChange = column_getToggleVisibilityHandler(column)\n* ```\n*/\nfunction column_getToggleVisibilityHandler(column) {\n\treturn (e) => {\n\t\tcolumn_toggleVisibility(column, e.target.checked);\n\t};\n}\n/**\n* Collects the cells from this row whose columns are visible.\n*\n* When column pinning is active, the result is ordered as start-pinned cells,\n* center cells, then end-pinned cells.\n*\n* @example\n* ```ts\n* const visibleCells = row_getVisibleCells(row)\n* ```\n*/\nfunction row_getVisibleCells(row) {\n\tconst allCells = row.getAllCells();\n\tconst visibleCells = [];\n\tfor (let i = 0; i < allCells.length; i++) {\n\t\tconst cell = allCells[i];\n\t\tif (callMemoOrStaticFn(cell.column, \"getIsVisible\", column_getIsVisible)) visibleCells.push(cell);\n\t}\n\tconst { start, end } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length && !end.length) return visibleCells;\n\tconst visibleCellsByColumnId = callMemoOrStaticFn(row, \"getVisibleCellsByColumnId\", row_getVisibleCellsByColumnId);\n\tconst startCells = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst cell = visibleCellsByColumnId[start[i]];\n\t\tif (cell) startCells.push(cell);\n\t}\n\tconst endCells = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst cell = visibleCellsByColumnId[end[i]];\n\t\tif (cell) endCells.push(cell);\n\t}\n\tconst centerCells = [];\n\tfor (let i = 0; i < visibleCells.length; i++) {\n\t\tconst cell = visibleCells[i];\n\t\tconst id = cell.column.id;\n\t\tif (!start.includes(id) && !end.includes(id)) centerCells.push(cell);\n\t}\n\treturn [\n\t\t...startCells,\n\t\t...centerCells,\n\t\t...endCells\n\t];\n}\n/**\n* Builds a lookup map of this row's visible cells keyed by column id.\n*\n* Hidden columns are omitted from the map.\n*\n* @example\n* ```ts\n* const visibleCellsById = row_getVisibleCellsByColumnId(row)\n* ```\n*/\nfunction row_getVisibleCellsByColumnId(row) {\n\tconst result = makeObjectMap();\n\tconst allCells = row.getAllCells();\n\tfor (let i = 0; i < allCells.length; i++) {\n\t\tconst cell = allCells[i];\n\t\tif (callMemoOrStaticFn(cell.column, \"getIsVisible\", column_getIsVisible)) result[cell.column.id] = cell;\n\t}\n\treturn result;\n}\n/**\n* Filters the flat column list down to visible columns.\n*\n* Parent/group columns are included when `column_getIsVisible` considers them\n* visible.\n*\n* @example\n* ```ts\n* const columns = table_getVisibleFlatColumns(table)\n* ```\n*/\nfunction table_getVisibleFlatColumns(table) {\n\treturn table.getAllFlatColumns().filter((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Filters leaf columns down to those currently visible.\n*\n* This is the column list most row rendering code uses before pinning-specific\n* partitioning.\n*\n* @example\n* ```ts\n* const columns = table_getVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getVisibleLeafColumns(table) {\n\treturn table.getAllLeafColumns().filter((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Routes a column visibility updater through the table's visibility change handler.\n*\n* The updater may be a next visibility map or a function of the previous map,\n* matching the instance `table.setColumnVisibility` behavior.\n*\n* @example\n* ```ts\n* table_setColumnVisibility(table, (old) => ({ ...old, age: false }))\n* ```\n*/\nfunction table_setColumnVisibility(table, updater) {\n\tsetStateSlice(table, \"columnVisibility\", updater);\n}\n/**\n* Resets `columnVisibility` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnVisibility` when\n* it exists. Passing `true` ignores initial state and resets to `{}`.\n*\n* @example\n* ```ts\n* table_resetColumnVisibility(table)\n* table_resetColumnVisibility(table, true)\n* ```\n*/\nfunction table_resetColumnVisibility(table, defaultState) {\n\ttable_setColumnVisibility(table, defaultState ? makeObjectMap() : Object.assign(makeObjectMap(), cloneState(table.initialState.columnVisibility ?? {})));\n}\n/**\n* Shows or hides every hideable leaf column.\n*\n* Columns that cannot hide stay visible when toggling all columns off.\n*\n* @example\n* ```ts\n* table_toggleAllColumnsVisible(table)\n* ```\n*/\nfunction table_toggleAllColumnsVisible(table, value) {\n\tvalue = value ?? !table_getIsAllColumnsVisible(table);\n\tconst visibility = makeObjectMap();\n\tconst leafColumns = table.getAllLeafColumns();\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst column = leafColumns[i];\n\t\tvisibility[column.id] = !value ? !column_getCanHide(column) : value;\n\t}\n\ttable_setColumnVisibility(table, visibility);\n}\n/**\n* Checks whether every leaf column is currently visible.\n*\n* Non-hideable columns are naturally visible because missing visibility entries\n* default to `true`.\n*\n* @example\n* ```ts\n* const allVisible = table_getIsAllColumnsVisible(table)\n* ```\n*/\nfunction table_getIsAllColumnsVisible(table) {\n\treturn !table.getAllLeafColumns().some((column) => !callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Checks whether at least one leaf column is currently visible.\n*\n* This is useful for tri-state \"show all columns\" controls.\n*\n* @example\n* ```ts\n* const someVisible = table_getIsSomeColumnsVisible(table)\n* ```\n*/\nfunction table_getIsSomeColumnsVisible(table) {\n\treturn table.getAllLeafColumns().some((column) => callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible));\n}\n/**\n* Creates a checkbox-style handler that shows or hides all columns.\n*\n* The handler reads `event.target.checked`, so it is intended for controls whose\n* checked state means \"all columns visible\".\n*\n* @example\n* ```ts\n* const onChange = table_getToggleAllColumnsVisibilityHandler(table)\n* ```\n*/\nfunction table_getToggleAllColumnsVisibilityHandler(table) {\n\treturn (e) => {\n\t\ttable_toggleAllColumnsVisible(table, e.target.checked);\n\t};\n}\n\n//#endregion\nexport { column_getCanHide, column_getIsVisible, column_getToggleVisibilityHandler, column_toggleVisibility, getDefaultColumnVisibilityState, row_getVisibleCells, row_getVisibleCellsByColumnId, table_getIsAllColumnsVisible, table_getIsSomeColumnsVisible, table_getToggleAllColumnsVisibilityHandler, table_getVisibleFlatColumns, table_getVisibleLeafColumns, table_resetColumnVisibility, table_setColumnVisibility, table_toggleAllColumnsVisible };","import { callMemoOrStaticFn } from \"../../utils.js\";\nimport { column_getIsVisible } from \"../../features/column-visibility/columnVisibilityFeature.utils.js\";\nimport { constructHeader } from \"./constructHeader.js\";\n\n//#region src/core/headers/buildHeaderGroups.ts\nfunction getMaxHeaderDepth(columns, depth = 1) {\n\tlet maxDepth = depth;\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tif (callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible) && column.columns.length) maxDepth = Math.max(maxDepth, getMaxHeaderDepth(column.columns, depth + 1));\n\t}\n\treturn maxDepth;\n}\nfunction formatHeaderGroupId(headerFamily, depth) {\n\treturn headerFamily ? `${headerFamily}_${depth}` : String(depth);\n}\nfunction formatHeaderId(headerFamily, depth, columnId, childHeaderId) {\n\tlet id = headerFamily ?? \"\";\n\tif (depth) id = id ? `${id}_${depth}` : String(depth);\n\tif (columnId) id = id ? `${id}_${columnId}` : columnId;\n\tif (childHeaderId) id = id ? `${id}_${childHeaderId}` : childHeaderId;\n\treturn id;\n}\nfunction countPendingHeadersForColumn(headers, column) {\n\tlet count = 0;\n\tfor (let i = 0; i < headers.length; i++) if (headers[i].column === column) count++;\n\treturn count;\n}\nfunction constructHeaderGroup(headersToGroup, depth, table, headerFamily, headerGroups, headerGroupInitFns) {\n\tconst headerGroup = {\n\t\tdepth,\n\t\tid: formatHeaderGroupId(headerFamily, depth),\n\t\theaders: []\n\t};\n\tconst pendingParentHeaders = [];\n\tfor (let i = 0; i < headersToGroup.length; i++) {\n\t\tif (!(i in headersToGroup)) continue;\n\t\tconst headerToGroup = headersToGroup[i];\n\t\tconst latestPendingParentHeader = pendingParentHeaders[pendingParentHeaders.length - 1];\n\t\tconst isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n\t\tlet column;\n\t\tlet isPlaceholder = false;\n\t\tif (isLeafHeader && headerToGroup.column.parent) column = headerToGroup.column.parent;\n\t\telse {\n\t\t\tcolumn = headerToGroup.column;\n\t\t\tisPlaceholder = true;\n\t\t}\n\t\tif (latestPendingParentHeader && latestPendingParentHeader.column === column) latestPendingParentHeader.subHeaders.push(headerToGroup);\n\t\telse {\n\t\t\tconst header = constructHeader(table, column, {\n\t\t\t\tid: formatHeaderId(headerFamily, depth, column.id, headerToGroup.id),\n\t\t\t\tisPlaceholder,\n\t\t\t\tplaceholderId: isPlaceholder ? String(countPendingHeadersForColumn(pendingParentHeaders, column)) : void 0,\n\t\t\t\tdepth,\n\t\t\t\tindex: pendingParentHeaders.length\n\t\t\t});\n\t\t\theader.subHeaders.push(headerToGroup);\n\t\t\tpendingParentHeaders.push(header);\n\t\t}\n\t\theaderGroup.headers.push(headerToGroup);\n\t\theaderToGroup.headerGroup = headerGroup;\n\t}\n\tfor (let i = 0; i < headerGroupInitFns.length; i++) headerGroupInitFns[i](headerGroup);\n\theaderGroups.push(headerGroup);\n\tif (depth > 0) constructHeaderGroup(pendingParentHeaders, depth - 1, table, headerFamily, headerGroups, headerGroupInitFns);\n}\nfunction updateHeaderSpans(headers) {\n\tfor (let i = 0; i < headers.length; i++) {\n\t\tconst header = headers[i];\n\t\tif (!callMemoOrStaticFn(header.column, \"getIsVisible\", column_getIsVisible)) continue;\n\t\tlet colSpan = 0;\n\t\tif (header.subHeaders.length) {\n\t\t\tupdateHeaderSpans(header.subHeaders);\n\t\t\tfor (let j = 0; j < header.subHeaders.length; j++) {\n\t\t\t\tconst child = header.subHeaders[j];\n\t\t\t\tif (!callMemoOrStaticFn(child.column, \"getIsVisible\", column_getIsVisible)) continue;\n\t\t\t\tcolSpan += child.colSpan;\n\t\t\t}\n\t\t} else colSpan = 1;\n\t\theader.colSpan = colSpan;\n\t\tif (header.isPlaceholder && header.subHeaders.length === 1 && header.subHeaders[0].column === header.column) {\n\t\t\tlet rowSpan = 1;\n\t\t\tlet chainChild = header.subHeaders[0];\n\t\t\twhile (chainChild) {\n\t\t\t\tchainChild.rowSpan = 0;\n\t\t\t\trowSpan++;\n\t\t\t\tchainChild = chainChild.subHeaders.length === 1 && chainChild.subHeaders[0].column === header.column ? chainChild.subHeaders[0] : void 0;\n\t\t\t}\n\t\t\theader.rowSpan = rowSpan;\n\t\t} else header.rowSpan = 1;\n\t}\n}\n/**\n* Builds the nested header group structure for a table.\n*\n* The result accounts for visible leaf columns, pinned column groups, and placeholder headers needed to render multi-level headers.\n*/\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n\tconst maxDepth = getMaxHeaderDepth(allColumns);\n\tconst headerGroups = [];\n\tconst headerGroupInitFns = table._headerGroupInstanceInitFns;\n\tconst bottomHeaders = new Array(columnsToGroup.length);\n\tfor (let i = 0; i < columnsToGroup.length; i++) {\n\t\tif (!(i in columnsToGroup)) continue;\n\t\tbottomHeaders[i] = constructHeader(table, columnsToGroup[i], {\n\t\t\tdepth: maxDepth,\n\t\t\tindex: i\n\t\t});\n\t}\n\tconstructHeaderGroup(bottomHeaders, maxDepth - 1, table, headerFamily, headerGroups, headerGroupInitFns);\n\theaderGroups.reverse();\n\tupdateHeaderSpans(headerGroups[0]?.headers ?? []);\n\treturn headerGroups;\n}\n\n//#endregion\nexport { buildHeaderGroups };","//#region src/core/columns/constructColumn.ts\n/**\n* Creates or retrieves the column prototype for a table.\n* The prototype is cached on the table and shared by all column instances.\n*/\nfunction getColumnPrototype(table) {\n\tif (!table._columnPrototype) {\n\t\ttable._columnPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignColumnPrototype?.(table._columnPrototype, table);\n\t}\n\treturn table._columnPrototype;\n}\n/**\n* Constructs a column instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructColumn(table, columnDef, depth, parent) {\n\tconst resolvedColumnDef = {\n\t\t...table.getDefaultColumnDef(),\n\t\t...columnDef\n\t};\n\tconst accessorKey = resolvedColumnDef.accessorKey;\n\tconst accessorKeyString = accessorKey === void 0 ? void 0 : String(accessorKey);\n\tconst id = resolvedColumnDef.id ?? accessorKeyString?.replaceAll(\".\", \"_\") ?? (typeof resolvedColumnDef.header === \"string\" ? resolvedColumnDef.header : void 0);\n\tlet accessorFn;\n\tif (resolvedColumnDef.accessorFn) accessorFn = resolvedColumnDef.accessorFn;\n\telse if (accessorKey !== void 0) if (typeof accessorKey === \"string\" && accessorKey.includes(\".\")) {\n\t\tconst keys = accessorKey.split(\".\");\n\t\taccessorFn = (originalRow) => {\n\t\t\tlet result = originalRow;\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\tconst key = keys[i];\n\t\t\t\tresult = result?.[key];\n\t\t\t\tif (process.env.NODE_ENV === \"development\" && result === void 0) console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t} else accessorFn = (originalRow) => originalRow[resolvedColumnDef.accessorKey];\n\tif (!id) {\n\t\tif (process.env.NODE_ENV === \"development\") throw new Error(resolvedColumnDef.accessorFn ? `coreColumnsFeature require an id when using an accessorFn` : `coreColumnsFeature require an id when using a non-string header`);\n\t\tthrow new Error();\n\t}\n\tconst columnPrototype = getColumnPrototype(table);\n\tconst column = Object.create(columnPrototype);\n\tcolumn.accessorFn = accessorFn;\n\tcolumn.columnDef = resolvedColumnDef;\n\tcolumn.columns = [];\n\tcolumn.depth = depth;\n\tcolumn.id = `${String(id)}`;\n\tcolumn.parent = parent;\n\tconst initFns = table._columnInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](column);\n\treturn column;\n}\n\n//#endregion\nexport { constructColumn };","import { callMemoOrStaticFn, cloneState, makeObjectMap, setStateSlice } from \"../../utils.js\";\nimport { table_getPinnedVisibleLeafColumns } from \"../column-pinning/columnPinningFeature.utils.js\";\n\n//#region src/features/column-ordering/columnOrderingFeature.utils.ts\n/**\n* Creates the default column order state.\n*\n* The feature default is an empty array, meaning leaf columns keep their natural\n* definition order. Reset APIs use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const order = getDefaultColumnOrderState()\n* ```\n*/\nfunction getDefaultColumnOrderState() {\n\treturn [];\n}\n/**\n* Builds column-id to index records for each visible pinning region.\n*\n* All four regions are built in one pass so a single memo entry serves every\n* `column_getIndex` lookup without per-column scans.\n*\n* @example\n* ```ts\n* const indexes = table_getColumnIndexes(table)\n* ```\n*/\nfunction table_getColumnIndexes(table) {\n\tconst buildIndexes = (columns) => {\n\t\tconst indexes = makeObjectMap();\n\t\tfor (let i = 0; i < columns.length; i++) indexes[columns[i].id] = i;\n\t\treturn indexes;\n\t};\n\treturn {\n\t\tall: buildIndexes(table_getPinnedVisibleLeafColumns(table)),\n\t\tcenter: buildIndexes(table_getPinnedVisibleLeafColumns(table, \"center\")),\n\t\tstart: buildIndexes(table_getPinnedVisibleLeafColumns(table, \"start\")),\n\t\tend: buildIndexes(table_getPinnedVisibleLeafColumns(table, \"end\"))\n\t};\n}\n/**\n* Finds this column's index within a visible pinning region.\n*\n* Pass `'start'`, `'center'`, or `'end'` to search that region; omit the\n* position to search the full visible leaf column list.\n*\n* @example\n* ```ts\n* const index = column_getIndex(column, 'center')\n* ```\n*/\nfunction column_getIndex(column, position) {\n\treturn callMemoOrStaticFn(column.table, \"getColumnIndexes\", table_getColumnIndexes)[position === \"start\" ? \"start\" : position === \"end\" ? \"end\" : position === \"center\" ? \"center\" : \"all\"][column.id] ?? -1;\n}\n/**\n* Checks whether this column is the first visible column in a pinning region.\n*\n* The same `position` semantics as `column_getIndex` apply.\n*\n* @example\n* ```ts\n* const isFirst = column_getIsFirstColumn(column, 'start')\n* ```\n*/\nfunction column_getIsFirstColumn(column, position) {\n\treturn table_getPinnedVisibleLeafColumns(column.table, position)[0]?.id === column.id;\n}\n/**\n* Checks whether this column is the last visible column in a pinning region.\n*\n* The same `position` semantics as `column_getIndex` apply.\n*\n* @example\n* ```ts\n* const isLast = column_getIsLastColumn(column, 'end')\n* ```\n*/\nfunction column_getIsLastColumn(column, position) {\n\tconst columns = table_getPinnedVisibleLeafColumns(column.table, position);\n\treturn columns[columns.length - 1]?.id === column.id;\n}\n/**\n* Routes a column order updater through the table's column-order change handler.\n*\n* The updater may be a next ordered id array or a function of the previous\n* array, matching the instance `table.setColumnOrder` behavior.\n*\n* @example\n* ```ts\n* table_setColumnOrder(table, ['firstName', 'lastName', 'age'])\n* ```\n*/\nfunction table_setColumnOrder(table, updater) {\n\tsetStateSlice(table, \"columnOrder\", updater);\n}\n/**\n* Resets `columnOrder` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnOrder` when it\n* exists. Passing `true` ignores initial state and resets to `[]`.\n*\n* @example\n* ```ts\n* table_resetColumnOrder(table)\n* table_resetColumnOrder(table, true)\n* ```\n*/\nfunction table_resetColumnOrder(table, defaultState) {\n\ttable_setColumnOrder(table, defaultState ? [] : cloneState(table.initialState.columnOrder ?? []));\n}\n/**\n* Creates the ordering function used to arrange leaf columns.\n*\n* The returned function applies `state.columnOrder`, preserves unspecified\n* columns in their original order, then delegates to grouping rules.\n*\n* @example\n* ```ts\n* const orderColumnsForTable = table_getOrderColumnsFn(table)\n* ```\n*/\nfunction table_getOrderColumnsFn(table) {\n\tconst columnOrder = table.atoms.columnOrder?.get();\n\treturn (columns) => {\n\t\tlet orderedColumns = [];\n\t\tif (!columnOrder?.length) orderedColumns = columns;\n\t\telse {\n\t\t\tconst remaining = /* @__PURE__ */ new Map();\n\t\t\tfor (let i = 0; i < columns.length; i++) {\n\t\t\t\tconst column = columns[i];\n\t\t\t\tremaining.set(column.id, column);\n\t\t\t}\n\t\t\tfor (let i = 0; i < columnOrder.length; i++) {\n\t\t\t\tconst id = columnOrder[i];\n\t\t\t\tconst column = remaining.get(id);\n\t\t\t\tif (column) {\n\t\t\t\t\torderedColumns.push(column);\n\t\t\t\t\tremaining.delete(id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let i = 0; i < columns.length; i++) {\n\t\t\t\tconst column = columns[i];\n\t\t\t\tif (remaining.has(column.id)) orderedColumns.push(column);\n\t\t\t}\n\t\t}\n\t\treturn orderColumns(table, orderedColumns);\n\t};\n}\n/**\n* Applies grouped-column placement rules to an already ordered leaf-column list.\n*\n* `groupedColumnMode: 'remove'` drops grouped columns from the list.\n* `groupedColumnMode: 'reorder'` moves grouped columns to the front in grouping\n* state order.\n*\n* @example\n* ```ts\n* const orderedColumns = orderColumns(table, leafColumns)\n* ```\n*/\nfunction orderColumns(table, leafColumns) {\n\tconst grouping = table.atoms.grouping?.get() ?? [];\n\tconst { groupedColumnMode } = table.options;\n\tif (!grouping.length || !groupedColumnMode) return leafColumns;\n\tconst nonGroupingColumns = leafColumns.filter((col) => !grouping.includes(col.id));\n\tif (groupedColumnMode === \"remove\") return nonGroupingColumns;\n\tconst leafColumnsById = /* @__PURE__ */ new Map();\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst col = leafColumns[i];\n\t\tleafColumnsById.set(col.id, col);\n\t}\n\tconst groupingColumns = [];\n\tfor (let i = 0; i < grouping.length; i++) {\n\t\tconst col = leafColumnsById.get(grouping[i]);\n\t\tif (col) groupingColumns.push(col);\n\t}\n\treturn [...groupingColumns, ...nonGroupingColumns];\n}\n\n//#endregion\nexport { column_getIndex, column_getIsFirstColumn, column_getIsLastColumn, getDefaultColumnOrderState, orderColumns, table_getColumnIndexes, table_getOrderColumnsFn, table_resetColumnOrder, table_setColumnOrder };","import { callMemoOrStaticFn, makeObjectMap } from \"../../utils.js\";\nimport { table_getOrderColumnsFn } from \"../../features/column-ordering/columnOrderingFeature.utils.js\";\nimport { constructColumn } from \"./constructColumn.js\";\n\n//#region src/core/columns/coreColumnsFeature.utils.ts\n/**\n* Flattens this column and every descendant column into a single array.\n*\n* Group columns appear before their child columns, which matches the normalized\n* column hierarchy produced during table construction.\n*\n* @example\n* ```ts\n* const flatColumns = column_getFlatColumns(column)\n* ```\n*/\nfunction column_getFlatColumns(column) {\n\treturn [column, ...column.columns.flatMap((col) => col.getFlatColumns())];\n}\n/**\n* Collects the terminal leaf columns below this column.\n*\n* Group columns return their ordered descendants. Non-group columns return an\n* array containing only the column itself.\n*\n* @example\n* ```ts\n* const leafColumns = column_getLeafColumns(column)\n* ```\n*/\nfunction column_getLeafColumns(column) {\n\tif (column.columns.length) {\n\t\tconst leafColumns = column.columns.flatMap((col) => col.getLeafColumns());\n\t\treturn callMemoOrStaticFn(column.table, \"getOrderColumns\", table_getOrderColumnsFn)(leafColumns);\n\t}\n\treturn [column];\n}\n/**\n* Merges built-in, feature, and user default column definitions.\n*\n* Built-in defaults provide a header and fallback cell renderer, feature\n* defaults can add feature-specific column options, and\n* `options.defaultColumn` wins last.\n*\n* @example\n* ```ts\n* const defaultColumn = table_getDefaultColumnDef(table)\n* ```\n*/\nfunction table_getDefaultColumnDef(table) {\n\treturn {\n\t\theader: (props) => {\n\t\t\tconst resolvedColumnDef = props.header.column.columnDef;\n\t\t\tif (resolvedColumnDef.accessorKey) return resolvedColumnDef.accessorKey;\n\t\t\tif (resolvedColumnDef.accessorFn) return resolvedColumnDef.id;\n\t\t\treturn null;\n\t\t},\n\t\tcell: (props) => props.renderValue()?.toString?.() ?? null,\n\t\t...Object.values(table._features).reduce((obj, feature) => {\n\t\t\treturn Object.assign(obj, feature.getDefaultColumnDef?.());\n\t\t}, {}),\n\t\t...table.options.defaultColumn\n\t};\n}\nfunction constructColumns(table, columnDefs, parent, depth = 0) {\n\tconst columns = new Array(columnDefs.length);\n\tfor (let i = 0; i < columnDefs.length; i++) {\n\t\tif (!(i in columnDefs)) continue;\n\t\tconst columnDef = columnDefs[i];\n\t\tconst column = constructColumn(table, columnDef, depth, parent);\n\t\tconst groupingColumnDef = columnDef;\n\t\tcolumn.columns = groupingColumnDef.columns ? constructColumns(table, groupingColumnDef.columns, column, depth + 1) : [];\n\t\tcolumns[i] = column;\n\t}\n\treturn columns;\n}\n/**\n* Normalizes `options.columns` into the table's nested column tree.\n*\n* Each column definition is constructed with its parent and depth, and group\n* column children are recursively constructed.\n*\n* @example\n* ```ts\n* const columns = table_getAllColumns(table)\n* ```\n*/\nfunction table_getAllColumns(table) {\n\treturn constructColumns(table, table.options.columns);\n}\n/**\n* Flattens every table column, including group columns and leaf columns.\n*\n* Use this when parent/group columns must be included in addition to data leaf\n* columns.\n*\n* @example\n* ```ts\n* const flatColumns = table_getAllFlatColumns(table)\n* ```\n*/\nfunction table_getAllFlatColumns(table) {\n\treturn table.getAllColumns().flatMap((column) => column.getFlatColumns());\n}\n/**\n* Builds an id lookup for every flat column in the table.\n*\n* Group columns and leaf columns are included. Later columns with the same id\n* replace earlier entries.\n*\n* @example\n* ```ts\n* const columnsById = table_getAllFlatColumnsById(table)\n* ```\n*/\nfunction table_getAllFlatColumnsById(table) {\n\tconst result = makeObjectMap();\n\tconst flatColumns = table.getAllFlatColumns();\n\tfor (let i = 0; i < flatColumns.length; i++) {\n\t\tconst column = flatColumns[i];\n\t\tresult[column.id] = column;\n\t}\n\treturn result;\n}\n/**\n* Collects all terminal leaf columns in their current table order.\n*\n* Column ordering features can reorder the collected leaves before the result\n* is returned.\n*\n* @example\n* ```ts\n* const leafColumns = table_getAllLeafColumns(table)\n* ```\n*/\nfunction table_getAllLeafColumns(table) {\n\tconst leafColumns = table.getAllColumns().flatMap((c) => c.getLeafColumns());\n\treturn callMemoOrStaticFn(table, \"getOrderColumns\", table_getOrderColumnsFn)(leafColumns);\n}\n/**\n* Builds an id lookup for terminal leaf columns only.\n*\n* Parent/group columns are excluded, making this lookup appropriate for row\n* cells and feature state keyed by data columns.\n*\n* @example\n* ```ts\n* const leavesById = table_getAllLeafColumnsById(table)\n* ```\n*/\nfunction table_getAllLeafColumnsById(table) {\n\tconst result = makeObjectMap();\n\tconst leafColumns = table.getAllLeafColumns();\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst column = leafColumns[i];\n\t\tresult[column.id] = column;\n\t}\n\treturn result;\n}\n/**\n* Looks up a column by id from the flat column map.\n*\n* The lookup can return group columns or leaf columns. In development, a\n* missing id logs a warning to help catch stale column references.\n*\n* @example\n* ```ts\n* const column = table_getColumn(table, 'firstName')\n* ```\n*/\nfunction table_getColumn(table, columnId) {\n\tconst column = table.getAllFlatColumnsById()[columnId];\n\tif (process.env.NODE_ENV === \"development\" && !column) console.warn(`[Table] Column with id '${columnId}' does not exist.`);\n\treturn column;\n}\n\n//#endregion\nexport { column_getFlatColumns, column_getLeafColumns, table_getAllColumns, table_getAllFlatColumns, table_getAllFlatColumnsById, table_getAllLeafColumns, table_getAllLeafColumnsById, table_getColumn, table_getDefaultColumnDef };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { column_getFlatColumns, column_getLeafColumns, table_getAllColumns, table_getAllFlatColumns, table_getAllFlatColumnsById, table_getAllLeafColumns, table_getAllLeafColumnsById, table_getColumn, table_getDefaultColumnDef } from \"./coreColumnsFeature.utils.js\";\n\n//#region src/core/columns/coreColumnsFeature.ts\n/**\n* Core feature that builds the column tree and exposes table/column APIs.\n*/\nconst coreColumnsFeature = {\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreColumnsFeature\", prototype, table, {\n\t\t\tcolumn_getFlatColumns: {\n\t\t\t\tfn: (column) => column_getFlatColumns(column),\n\t\t\t\tmemoDeps: (column) => [column.table.options.columns]\n\t\t\t},\n\t\t\tcolumn_getLeafColumns: {\n\t\t\t\tfn: (column) => column_getLeafColumns(column),\n\t\t\t\tmemoDeps: (column) => [\n\t\t\t\t\tcolumn.table.atoms.columnOrder?.get(),\n\t\t\t\t\tcolumn.table.atoms.grouping?.get(),\n\t\t\t\t\tcolumn.table.options.columns,\n\t\t\t\t\tcolumn.table.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreColumnsFeature\", table, {\n\t\t\ttable_getDefaultColumnDef: {\n\t\t\t\tfn: () => table_getDefaultColumnDef(table),\n\t\t\t\tmemoDeps: () => [table.options.defaultColumn]\n\t\t\t},\n\t\t\ttable_getAllColumns: {\n\t\t\t\tfn: () => table_getAllColumns(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllFlatColumns: {\n\t\t\t\tfn: () => table_getAllFlatColumns(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllFlatColumnsById: {\n\t\t\t\tfn: () => table_getAllFlatColumnsById(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllLeafColumns: {\n\t\t\t\tfn: () => table_getAllLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getAllLeafColumnsById: {\n\t\t\t\tfn: () => table_getAllLeafColumnsById(table),\n\t\t\t\tmemoDeps: () => [table.getAllLeafColumns()]\n\t\t\t},\n\t\t\ttable_getColumn: { fn: (columnId) => table_getColumn(table, columnId) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreColumnsFeature };","import { callMemoOrStaticFn } from \"../../utils.js\";\nimport { column_getIsVisible, table_getVisibleLeafColumns } from \"../../features/column-visibility/columnVisibilityFeature.utils.js\";\nimport { buildHeaderGroups } from \"./buildHeaderGroups.js\";\nimport { getDefaultColumnPinningState } from \"../../features/column-pinning/columnPinningFeature.utils.js\";\n\n//#region src/core/headers/coreHeadersFeature.utils.ts\nfunction collectLeafHeaders(header, leafHeaders) {\n\tfor (let i = 0; i < header.subHeaders.length; i++) collectLeafHeaders(header.subHeaders[i], leafHeaders);\n\tleafHeaders.push(header);\n}\n/**\n* Walks a header tree and collects all descendant leaf headers.\n*\n* The header itself is included after its descendants, matching the recursive\n* shape used by nested header groups.\n*\n* @example\n* ```ts\n* const leafHeaders = header_getLeafHeaders(header)\n* ```\n*/\nfunction header_getLeafHeaders(header) {\n\tconst leafHeaders = [];\n\tcollectLeafHeaders(header, leafHeaders);\n\treturn leafHeaders;\n}\n/**\n* Builds the render context passed to a column's `header` or `footer` template.\n*\n* The context contains the header, its column, and the owning table instance.\n*\n* @example\n* ```ts\n* const context = header_getContext(header)\n* ```\n*/\nfunction header_getContext(header) {\n\treturn {\n\t\tcolumn: header.column,\n\t\theader,\n\t\ttable: header.column.table\n\t};\n}\n/**\n* Builds visible header groups for the current column tree.\n*\n* Column visibility and pinning are applied before groups are built. When no\n* columns are pinned, the fast path skips pin partitioning.\n*\n* @example\n* ```ts\n* const headerGroups = table_getHeaderGroups(table)\n* ```\n*/\nfunction table_getHeaderGroups(table) {\n\tconst { start, end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst allColumns = table.getAllColumns();\n\tconst leafColumns = callMemoOrStaticFn(table, \"getVisibleLeafColumns\", table_getVisibleLeafColumns);\n\tif (!start.length && !end.length) return buildHeaderGroups(allColumns, leafColumns, table);\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst leftColumns = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst column = leafColumnsById[start[i]];\n\t\tif (column && callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible)) leftColumns.push(column);\n\t}\n\tconst rightColumns = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst column = leafColumnsById[end[i]];\n\t\tif (column && callMemoOrStaticFn(column, \"getIsVisible\", column_getIsVisible)) rightColumns.push(column);\n\t}\n\tconst centerColumns = leafColumns.filter((column) => !start.includes(column.id) && !end.includes(column.id));\n\treturn buildHeaderGroups(allColumns, [\n\t\t...leftColumns,\n\t\t...centerColumns,\n\t\t...rightColumns\n\t], table);\n}\n/**\n* Builds footer groups by reversing the current header groups.\n*\n* Footer rendering uses the same header objects and grouping structure, but\n* renders them from leaf level back toward the root.\n*\n* @example\n* ```ts\n* const footerGroups = table_getFooterGroups(table)\n* ```\n*/\nfunction table_getFooterGroups(table) {\n\treturn [...table.getHeaderGroups()].reverse();\n}\n/**\n* Flattens every header from every header group into one array.\n*\n* The result includes parent headers and placeholder headers, in header-group\n* order from top to bottom.\n*\n* @example\n* ```ts\n* const flatHeaders = table_getFlatHeaders(table)\n* ```\n*/\nfunction table_getFlatHeaders(table) {\n\tconst headerGroups = table.getHeaderGroups();\n\tconst result = [];\n\tfor (let i = 0; i < headerGroups.length; i++) {\n\t\tconst headers = headerGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Collects only the leaf headers from the current header tree.\n*\n* Parent/group headers are skipped, making the result suitable for rendering\n* one header per visible leaf column.\n*\n* @example\n* ```ts\n* const leafHeaders = table_getLeafHeaders(table)\n* ```\n*/\nfunction table_getLeafHeaders(table) {\n\tconst topHeaders = table.getHeaderGroups()[0]?.headers ?? [];\n\tconst result = [];\n\tfor (let i = 0; i < topHeaders.length; i++) {\n\t\tconst leafHeaders = topHeaders[i].getLeafHeaders();\n\t\tfor (let j = 0; j < leafHeaders.length; j++) result.push(leafHeaders[j]);\n\t}\n\treturn result;\n}\n\n//#endregion\nexport { header_getContext, header_getLeafHeaders, table_getFlatHeaders, table_getFooterGroups, table_getHeaderGroups, table_getLeafHeaders };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { header_getContext, header_getLeafHeaders, table_getFlatHeaders, table_getFooterGroups, table_getHeaderGroups, table_getLeafHeaders } from \"./coreHeadersFeature.utils.js\";\n\n//#region src/core/headers/coreHeadersFeature.ts\n/**\n* Core feature that builds header groups and exposes header context APIs.\n*/\nconst coreHeadersFeature = {\n\tassignHeaderPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreHeadersFeature\", prototype, table, {\n\t\t\theader_getLeafHeaders: {\n\t\t\t\tfn: (header) => header_getLeafHeaders(header),\n\t\t\t\tmemoDeps: (header) => [header.column.table.options.columns]\n\t\t\t},\n\t\t\theader_getContext: {\n\t\t\t\tfn: (header) => header_getContext(header),\n\t\t\t\tmemoDeps: (header) => [header.column.table.options.columns]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreHeadersFeature\", table, {\n\t\t\ttable_getHeaderGroups: {\n\t\t\t\tfn: () => table_getHeaderGroups(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getFooterGroups: {\n\t\t\t\tfn: () => table_getFooterGroups(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getFlatHeaders: {\n\t\t\t\tfn: () => table_getFlatHeaders(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getLeafHeaders: {\n\t\t\t\tfn: () => table_getLeafHeaders(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreHeadersFeature };","import { makeObjectMap } from \"../../utils.js\";\n\n//#region src/core/rows/constructRow.ts\n/**\n* Creates or retrieves the row prototype for a table.\n* The prototype is cached on the table and shared by all row instances.\n*/\nfunction getRowPrototype(table) {\n\tif (!table._rowPrototype) {\n\t\ttable._rowPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignRowPrototype?.(table._rowPrototype, table);\n\t}\n\treturn table._rowPrototype;\n}\n/**\n* Constructs a row instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nconst constructRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n\tconst rowPrototype = getRowPrototype(table);\n\tconst row = Object.create(rowPrototype);\n\trow._displayIndexCache = -1;\n\trow._uniqueValuesCache = makeObjectMap();\n\trow._valuesCache = makeObjectMap();\n\trow.depth = depth;\n\trow.id = id;\n\trow.index = rowIndex;\n\trow.original = original;\n\trow.parentId = parentId;\n\trow.subRows = subRows ?? [];\n\tconst initFns = table._rowInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](row);\n\treturn row;\n};\n\n//#endregion\nexport { constructRow };","import { callMemoOrStaticFn, cloneState, makeObjectMap, setStateSlice } from \"../../utils.js\";\nimport { table_getVisibleLeafColumns } from \"../column-visibility/columnVisibilityFeature.utils.js\";\nimport { applyCellSelectionBoundsOperations, expandCellSelectionBounds } from \"./cellSelectionGeometry.js\";\n\n//#region src/features/cell-selection/cellSelectionFeature.utils.ts\n/**\n* Creates the default cell selection state.\n*\n* The feature default is an empty selection. Reset APIs use this value when\n* `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const selection = getDefaultCellSelectionState()\n* ```\n*/\nfunction getDefaultCellSelectionState() {\n\treturn [];\n}\n/**\n* Routes a cell selection updater through the table's selection change handler.\n*\n* @example\n* ```ts\n* table_setCellSelection(table, (old) => old.slice(0, -1))\n* ```\n*/\nfunction table_setCellSelection(table, updater) {\n\ttable.options.onCellSelectionChange?.(updater);\n}\n/**\n* Resets `cellSelection` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.cellSelection` when it\n* exists. Passing `true` ignores initial state and resets to an empty selection.\n*\n* @example\n* ```ts\n* table_resetCellSelection(table, true)\n* ```\n*/\nfunction table_resetCellSelection(table, defaultState) {\n\tsetStateSlice(table, \"cellSelection\", defaultState ? getDefaultCellSelectionState() : cloneState(table.initialState.cellSelection) ?? getDefaultCellSelectionState());\n}\n/**\n* Schedules a cell selection reset after `data` changes.\n*\n* Ranges are stored as row and column ids, so without this a data swap would\n* leave a selection pointing at rows that no longer exist, or silently\n* re-select cells whenever new data reuses ids. The reset runs when\n* `autoResetAll` or `autoResetCellSelection` allows it, defaulting to on.\n*\n* Resetting to `initialState.cellSelection` rather than to empty means the\n* first row-model computation is a no-op, matching `table_autoResetExpanded`.\n*\n* @example\n* ```ts\n* table_autoResetCellSelection(table)\n* ```\n*/\nfunction table_autoResetCellSelection(table) {\n\tif (!table.atoms.cellSelection) return;\n\tif (table.options.autoResetAll ?? table.options.autoResetCellSelection ?? true) table._reactivity.schedule(() => table_resetCellSelection(table));\n}\n/**\n* Returns the visible leaf columns in the order their cells actually render.\n*\n* This is deliberately not `getVisibleLeafColumns()`, which is\n* visibility-filtered but *not* pinning-reordered, and not `column_getIndex()`,\n* which indexes that same unpinned list. Cells render start-pinned first, then\n* center, then end (see `row_getVisibleCells`), so indexing a selection in the\n* unpinned order would make a dragged rectangle contiguous in index space but\n* visually scattered the moment a column is pinned.\n*\n* The pinning read is inlined rather than delegated to the column pinning\n* utils so this stays correct when that feature is absent, and so the ordering\n* provably matches `row_getVisibleCells`.\n*/\nfunction getDisplayOrderedColumns(table) {\n\tconst columns = callMemoOrStaticFn(table, \"getVisibleLeafColumns\", table_getVisibleLeafColumns);\n\tconst pinning = table.atoms.columnPinning?.get();\n\tif (!pinning || !pinning.start.length && !pinning.end.length) return columns;\n\tconst byId = makeObjectMap();\n\tfor (let i = 0; i < columns.length; i++) byId[columns[i].id] = columns[i];\n\tconst start = [];\n\tfor (let i = 0; i < pinning.start.length; i++) {\n\t\tconst column = byId[pinning.start[i]];\n\t\tif (column) start.push(column);\n\t}\n\tconst end = [];\n\tfor (let i = 0; i < pinning.end.length; i++) {\n\t\tconst column = byId[pinning.end[i]];\n\t\tif (column) end.push(column);\n\t}\n\tconst center = [];\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tif (!pinning.start.includes(column.id) && !pinning.end.includes(column.id)) center.push(column);\n\t}\n\treturn [\n\t\t...start,\n\t\t...center,\n\t\t...end\n\t];\n}\n/**\n* Builds a column id to render-order index map.\n*\n* Registered by this feature so the lookup stays memoized even when\n* `columnOrderingFeature` is absent, since that feature's `getColumnIndexes`\n* static rebuilds all four maps on every call, which would make per-cell reads\n* O(columns).\n*\n* @example\n* ```ts\n* const index = table_getCellSelectionColumnIndexes(table)[columnId]\n* ```\n*/\nfunction table_getCellSelectionColumnIndexes(table) {\n\tconst columns = getDisplayOrderedColumns(table);\n\tconst indexes = makeObjectMap();\n\tfor (let i = 0; i < columns.length; i++) indexes[columns[i].id] = i;\n\treturn indexes;\n}\nconst EMPTY_MERGE_BOUNDS = [];\nfunction probeCellSpanIndex(table) {\n\treturn table.getCellSpanIndex?.();\n}\n/**\n* Resolves the merged-cell rectangles of the rendered rows into selection's\n* own index space.\n*\n* The span index positions rows by their paginated render order while\n* selection positions them by pre-paginated display order, so each merge is\n* mapped through `row.getDisplayIndex()`. A merge whose rows do not map to a\n* contiguous display range is skipped defensively; it then behaves like\n* unmerged cells instead of corrupting the geometry.\n*\n* Returns an empty array when `cellSpanningFeature` is not registered, which\n* keeps every selection code path identical to the span-unaware behavior.\n*\n* @example\n* ```ts\n* const merges = table_getCellSelectionMergeBounds(table)\n* ```\n*/\nfunction table_getCellSelectionMergeBounds(table) {\n\tconst spanIndex = probeCellSpanIndex(table);\n\tif (!spanIndex) return EMPTY_MERGE_BOUNDS;\n\tconst columnIndexes = callMemoOrStaticFn(table, \"getCellSelectionColumnIndexes\", table_getCellSelectionColumnIndexes);\n\tconst merges = [];\n\tfor (const columnId in spanIndex.rowSpans) {\n\t\tconst columnIndex = columnIndexes[columnId];\n\t\tif (columnIndex === void 0) continue;\n\t\tconst spans = spanIndex.rowSpans[columnId];\n\t\tconst spanColumnIndex = spanIndex.columnIndexes[columnId];\n\t\tfor (let r = 0; r < spans.length; r++) {\n\t\t\tconst span = spans[r];\n\t\t\tif (span <= 1) continue;\n\t\t\tconst startRow = spanIndex.rows[r].getDisplayIndex();\n\t\t\tconst endRow = spanIndex.rows[r + span - 1].getDisplayIndex();\n\t\t\tif (startRow < 0 || endRow - startRow !== span - 1) continue;\n\t\t\tconst colSpan = spanColumnIndex === void 0 ? 1 : Math.max(spanIndex.colSpans[r]?.[spanColumnIndex] ?? 1, 1);\n\t\t\tmerges.push({\n\t\t\t\tminRowIndex: startRow,\n\t\t\t\tmaxRowIndex: endRow,\n\t\t\t\tminColumnIndex: columnIndex,\n\t\t\t\tmaxColumnIndex: columnIndex + colSpan - 1\n\t\t\t});\n\t\t}\n\t}\n\tif (spanIndex.colSpans.length) {\n\t\tconst columnIdBySpanIndex = [];\n\t\tfor (const columnId in spanIndex.columnIndexes) columnIdBySpanIndex[spanIndex.columnIndexes[columnId]] = columnId;\n\t\tfor (let r = 0; r < spanIndex.colSpans.length; r++) {\n\t\t\tconst rowColSpans = spanIndex.colSpans[r];\n\t\t\tif (!rowColSpans) continue;\n\t\t\tconst displayRow = spanIndex.rows[r]?.getDisplayIndex() ?? -1;\n\t\t\tif (displayRow < 0) continue;\n\t\t\tfor (let c = 0; c < rowColSpans.length; c++) {\n\t\t\t\tconst span = rowColSpans[c];\n\t\t\t\tif (span <= 1) continue;\n\t\t\t\tconst columnId = columnIdBySpanIndex[c];\n\t\t\t\tif (columnId === void 0) continue;\n\t\t\t\tconst vertical = spanIndex.rowSpans[columnId];\n\t\t\t\tif (vertical && vertical[r] !== 1) continue;\n\t\t\t\tconst columnIndex = columnIndexes[columnId];\n\t\t\t\tif (columnIndex === void 0) continue;\n\t\t\t\tmerges.push({\n\t\t\t\t\tminRowIndex: displayRow,\n\t\t\t\t\tmaxRowIndex: displayRow,\n\t\t\t\t\tminColumnIndex: columnIndex,\n\t\t\t\t\tmaxColumnIndex: columnIndex + span - 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\treturn merges;\n}\nfunction findMergeBoundsAt(merges, rowIndex, columnIndex) {\n\tfor (let i = 0; i < merges.length; i++) {\n\t\tconst merge = merges[i];\n\t\tif (rowIndex >= merge.minRowIndex && rowIndex <= merge.maxRowIndex && columnIndex >= merge.minColumnIndex && columnIndex <= merge.maxColumnIndex) return merge;\n\t}\n}\n/**\n* Resolves a row id to its display-order index, or `-1` when it no longer\n* identifies a row in the current order.\n*\n* Callers must have already called `table.getRowsInDisplayOrder()`, which is\n* what populates the display index cache each row reads.\n*/\nfunction resolveRowIndex(table, rows, rowId) {\n\tconst row = table.getPrePaginatedRowModel().rowsById[rowId] ?? table.getCoreRowModel().rowsById[rowId];\n\tif (!row) return -1;\n\tconst index = row.getDisplayIndex();\n\tif (index < 0 || index >= rows.length || rows[index]?.id !== rowId) return -1;\n\treturn index;\n}\n/**\n* Resolves ordered range operations into disjoint, positive display-order\n* index rectangles.\n*\n* This is the single cache every per-cell read goes through, so index lookups\n* happen once per invalidation rather than once per cell. A range whose corners\n* no longer resolve, for example because its anchor row was filtered out, is\n* omitted rather than clamped, so it contributes nothing while remaining in\n* state and returns intact when the filter clears.\n*\n* @example\n* ```ts\n* const bounds = table_getCellSelectionBounds(table)\n* ```\n*/\nfunction table_getCellSelectionBounds(table) {\n\tconst ranges = table.atoms.cellSelection?.get();\n\tif (!ranges?.length) return [];\n\tconst rows = table.getRowsInDisplayOrder();\n\tconst columnIndexes = callMemoOrStaticFn(table, \"getCellSelectionColumnIndexes\", table_getCellSelectionColumnIndexes);\n\tconst operations = [];\n\tfor (let i = 0; i < ranges.length; i++) {\n\t\tconst range = ranges[i];\n\t\tconst anchorRowIndex = resolveRowIndex(table, rows, range.anchorRowId);\n\t\tconst focusRowIndex = resolveRowIndex(table, rows, range.focusRowId);\n\t\tconst anchorColumnIndex = columnIndexes[range.anchorColumnId] ?? -1;\n\t\tconst focusColumnIndex = columnIndexes[range.focusColumnId] ?? -1;\n\t\tif (anchorRowIndex < 0 || focusRowIndex < 0 || anchorColumnIndex < 0 || focusColumnIndex < 0) continue;\n\t\toperations.push({\n\t\t\tminRowIndex: Math.min(anchorRowIndex, focusRowIndex),\n\t\t\tmaxRowIndex: Math.max(anchorRowIndex, focusRowIndex),\n\t\t\tminColumnIndex: Math.min(anchorColumnIndex, focusColumnIndex),\n\t\t\tmaxColumnIndex: Math.max(anchorColumnIndex, focusColumnIndex),\n\t\t\toperation: range.operation ?? \"include\"\n\t\t});\n\t}\n\tconst merges = callMemoOrStaticFn(table, \"getCellSelectionMergeBounds\", table_getCellSelectionMergeBounds);\n\tif (merges.length) for (let i = 0; i < operations.length; i++) {\n\t\tconst operation = operations[i];\n\t\tconst expanded = expandCellSelectionBounds(operation, merges);\n\t\toperation.minRowIndex = expanded.minRowIndex;\n\t\toperation.maxRowIndex = expanded.maxRowIndex;\n\t\toperation.minColumnIndex = expanded.minColumnIndex;\n\t\toperation.maxColumnIndex = expanded.maxColumnIndex;\n\t}\n\treturn applyCellSelectionBoundsOperations(operations);\n}\n/**\n* Tests whether an index pair falls inside any resolved rectangle.\n*/\nfunction isWithinBounds(bounds, rowIndex, columnIndex) {\n\tfor (let i = 0; i < bounds.length; i++) {\n\t\tconst bound = bounds[i];\n\t\tif (rowIndex >= bound.minRowIndex && rowIndex <= bound.maxRowIndex && columnIndex >= bound.minColumnIndex && columnIndex <= bound.maxColumnIndex) return true;\n\t}\n\treturn false;\n}\n/**\n* Checks whether this cell can currently be selected.\n*\n* A column def opting out with `enableCellSelection: false` wins over the table\n* option, matching how the other per-column enable flags resolve.\n*\n* @example\n* ```ts\n* const canSelect = cell_getCanSelect(cell)\n* ```\n*/\nfunction cell_getCanSelect(cell) {\n\tif (cell.column.columnDef.enableCellSelection === false) return false;\n\tconst enabled = cell.table.options.enableCellSelection;\n\tif (typeof enabled === \"function\") return enabled(cell);\n\treturn enabled ?? true;\n}\n/**\n* Resolves a cell to the coordinates every selection read needs.\n*\n* Shared by `getIsSelected` and `getSelectionEdges` so a render pass resolves\n* each cell once. Resolving in both meant every cell paid for the bounds memo,\n* the display index, and the column index map twice over.\n*\n* Returns `null` when the cell cannot participate in a selection at all.\n*/\nfunction resolveCellPosition(cell) {\n\tconst table = cell.table;\n\tconst bounds = callMemoOrStaticFn(table, \"getCellSelectionBounds\", table_getCellSelectionBounds);\n\tif (!bounds.length) return null;\n\tif (!callMemoOrStaticFn(cell, \"getCanSelect\", cell_getCanSelect)) return null;\n\tconst rowIndex = cell.row.getDisplayIndex();\n\tif (rowIndex < 0) return null;\n\tconst columnIndex = callMemoOrStaticFn(table, \"getCellSelectionColumnIndexes\", table_getCellSelectionColumnIndexes)[cell.column.id] ?? -1;\n\tif (columnIndex < 0) return null;\n\treturn {\n\t\tbounds,\n\t\trowIndex,\n\t\tcolumnIndex\n\t};\n}\n/**\n* Checks whether this cell falls inside the final positive selection.\n*\n* Deliberately not memoized. Registering this through `assignPrototypeAPIs`\n* with `memoDeps` would allocate a memo closure and dependency array per cell,\n* which costs more than the handful of integer comparisons it would save.\n*\n* @example\n* ```ts\n* const isSelected = cell_getIsSelected(cell)\n* ```\n*/\nfunction cell_getIsSelected(cell) {\n\tconst position = resolveCellPosition(cell);\n\tif (!position) return false;\n\treturn isWithinBounds(position.bounds, position.rowIndex, position.columnIndex);\n}\n/**\n* Checks whether this cell is the active cell.\n*\n* @example\n* ```ts\n* const isFocused = cell_getIsFocused(cell)\n* ```\n*/\nfunction cell_getIsFocused(cell) {\n\tconst ranges = cell.table.atoms.cellSelection?.get();\n\tconst active = ranges?.[ranges.length - 1];\n\tif (!active) return false;\n\treturn active.anchorRowId === cell.row.id && active.anchorColumnId === cell.column.id;\n}\n/**\n* Returns `0` for the focused cell and `-1` otherwise, for roving tabindex.\n*\n* @example\n* ```ts\n* const tabIndex = cell_getTabIndex(cell)\n* ```\n*/\nfunction cell_getTabIndex(cell) {\n\treturn callMemoOrStaticFn(cell, \"getIsFocused\", cell_getIsFocused) ? 0 : -1;\n}\n/**\n* Returns which sides of this cell sit on the outer boundary of the selection.\n*\n* A side is an edge when the neighbouring cell in that direction is not itself\n* covered by a range, which is what lets a consumer draw a single outline\n* around an arbitrary union of rectangles.\n*\n* @example\n* ```ts\n* const { top, right, bottom, left } = cell_getSelectionEdges(cell)\n* ```\n*/\nfunction cell_getSelectionEdges(cell) {\n\tconst none = {\n\t\ttop: false,\n\t\tright: false,\n\t\tbottom: false,\n\t\tleft: false\n\t};\n\tconst position = resolveCellPosition(cell);\n\tif (!position) return none;\n\tconst { bounds, rowIndex, columnIndex } = position;\n\tif (!isWithinBounds(bounds, rowIndex, columnIndex)) return none;\n\tconst merges = callMemoOrStaticFn(cell.table, \"getCellSelectionMergeBounds\", table_getCellSelectionMergeBounds);\n\tconst merge = merges.length ? findMergeBoundsAt(merges, rowIndex, columnIndex) : void 0;\n\tif (!merge) return {\n\t\ttop: !isWithinBounds(bounds, rowIndex - 1, columnIndex),\n\t\tright: !isWithinBounds(bounds, rowIndex, columnIndex + 1),\n\t\tbottom: !isWithinBounds(bounds, rowIndex + 1, columnIndex),\n\t\tleft: !isWithinBounds(bounds, rowIndex, columnIndex - 1)\n\t};\n\treturn {\n\t\ttop: isStripOutside(bounds, merge.minRowIndex - 1, merge.minColumnIndex, merge.maxColumnIndex, true),\n\t\tright: isStripOutside(bounds, merge.maxColumnIndex + 1, merge.minRowIndex, merge.maxRowIndex, false),\n\t\tbottom: isStripOutside(bounds, merge.maxRowIndex + 1, merge.minColumnIndex, merge.maxColumnIndex, true),\n\t\tleft: isStripOutside(bounds, merge.minColumnIndex - 1, merge.minRowIndex, merge.maxRowIndex, false)\n\t};\n}\nfunction isStripOutside(bounds, fixedIndex, from, to, fixedIsRow) {\n\tfor (let i = from; i <= to; i++) if (!isWithinBounds(bounds, fixedIsRow ? fixedIndex : i, fixedIsRow ? i : fixedIndex)) return true;\n\treturn false;\n}\n/**\n* Returns the active cell, i.e. the anchor of the most recent operation.\n*\n* Focus is derived rather than stored: in spreadsheet semantics, dragging from\n* A1 to C5 leaves the active cell at A1, so the active range's anchor already\n* is the active cell.\n*\n* @example\n* ```ts\n* const cell = table_getFocusedCell(table)\n* ```\n*/\nfunction table_getFocusedCell(table) {\n\tconst ranges = table.atoms.cellSelection?.get();\n\tconst active = ranges?.[ranges.length - 1];\n\tif (!active) return void 0;\n\treturn (table.getPrePaginatedRowModel().rowsById[active.anchorRowId] ?? table.getCoreRowModel().rowsById[active.anchorRowId])?.getAllCellsByColumnId()[active.anchorColumnId];\n}\n/**\n* Collapses the selection to a single cell at the given coordinates.\n*\n* @example\n* ```ts\n* table_setFocusedCell(table, '3', 'firstName')\n* ```\n*/\nfunction table_setFocusedCell(table, rowId, columnId) {\n\ttable_selectCellRange(table, {\n\t\tanchorRowId: rowId,\n\t\tanchorColumnId: columnId,\n\t\tfocusRowId: rowId,\n\t\tfocusColumnId: columnId\n\t});\n}\n/**\n* Selects a rectangle using replace, include, or exclude semantics.\n*\n* @example\n* ```ts\n* table_selectCellRange(table, range, { mode: 'exclude' })\n* ```\n*/\nfunction table_selectCellRange(table, range, opts) {\n\tconst mode = opts?.mode ?? (opts?.additive ? \"include\" : \"replace\");\n\tconst { operation: _operation, ...coordinates } = range;\n\tconst nextRange = mode === \"exclude\" ? {\n\t\t...coordinates,\n\t\toperation: \"exclude\"\n\t} : coordinates;\n\ttable_setCellSelection(table, (old) => mode === \"replace\" ? [nextRange] : [...old, nextRange]);\n}\n/**\n* Returns the visible leaf columns that permit selection, in display order.\n*\n* A column-level opt-out is enough to exclude a column here; a per-cell\n* predicate is not consulted, since navigation and select-all work in column\n* space rather than cell space.\n*/\nfunction getSelectableColumns(table) {\n\tconst columns = getDisplayOrderedColumns(table);\n\tif (table.options.enableCellSelection === false) return [];\n\treturn columns.filter((column) => column.columnDef.enableCellSelection !== false);\n}\n/**\n* Selects every selectable cell in the table as one range.\n*\n* @example\n* ```ts\n* table_selectAllCells(table)\n* ```\n*/\nfunction table_selectAllCells(table) {\n\tconst rows = table.getRowsInDisplayOrder();\n\tconst columns = getSelectableColumns(table);\n\tif (!rows.length || !columns.length) return;\n\ttable_selectCellRange(table, {\n\t\tanchorRowId: rows[0].id,\n\t\tanchorColumnId: columns[0].id,\n\t\tfocusRowId: rows[rows.length - 1].id,\n\t\tfocusColumnId: columns[columns.length - 1].id\n\t});\n}\n/**\n* Resolves a direction into row and column deltas.\n*/\nfunction getDirectionDelta(direction) {\n\tswitch (direction) {\n\t\tcase \"up\": return {\n\t\t\trowDelta: -1,\n\t\t\tcolumnDelta: 0\n\t\t};\n\t\tcase \"down\": return {\n\t\t\trowDelta: 1,\n\t\t\tcolumnDelta: 0\n\t\t};\n\t\tcase \"left\": return {\n\t\t\trowDelta: 0,\n\t\t\tcolumnDelta: -1\n\t\t};\n\t\tdefault: return {\n\t\t\trowDelta: 0,\n\t\t\tcolumnDelta: 1\n\t\t};\n\t}\n}\n/**\n* Steps one cell in a direction from a starting coordinate.\n*\n* Columns that cannot be selected are skipped over rather than landed on, so\n* arrow navigation never parks on an opted-out column. Returns `null` when the\n* step would leave the grid or find no selectable column.\n*/\nfunction stepCoordinate(table, rowId, columnId, direction) {\n\tconst rows = table.getRowModel().rows;\n\tconst columns = getDisplayOrderedColumns(table);\n\tif (!rows.length || !columns.length) return null;\n\tconst { rowDelta, columnDelta } = getDirectionDelta(direction);\n\tconst rowIndex = rows.findIndex((row) => row.id === rowId);\n\tconst columnIndex = columns.findIndex((column) => column.id === columnId);\n\tif (rowIndex < 0 || columnIndex < 0) return null;\n\tconst merges = callMemoOrStaticFn(table, \"getCellSelectionMergeBounds\", table_getCellSelectionMergeBounds);\n\tlet fromRowIndex = rows[rowIndex].getDisplayIndex();\n\tlet fromColumnIndex = columnIndex;\n\tif (merges.length) {\n\t\tconst startMerge = findMergeBoundsAt(merges, rowIndex, columnIndex);\n\t\tif (startMerge) {\n\t\t\tif (rowDelta > 0) fromRowIndex = startMerge.maxRowIndex;\n\t\t\tif (rowDelta < 0) fromRowIndex = startMerge.minRowIndex;\n\t\t\tif (columnDelta > 0) fromColumnIndex = startMerge.maxColumnIndex;\n\t\t\tif (columnDelta < 0) fromColumnIndex = startMerge.minColumnIndex;\n\t\t}\n\t}\n\tlet nextRowIndex = rowIndex + rowDelta;\n\tif (rowDelta && fromRowIndex !== rows[rowIndex].getDisplayIndex()) {\n\t\tconst edgeRowIndex = rows.findIndex((row) => row.getDisplayIndex() === fromRowIndex);\n\t\tif (edgeRowIndex < 0) return null;\n\t\tnextRowIndex = edgeRowIndex + rowDelta;\n\t}\n\tif (nextRowIndex < 0 || nextRowIndex >= rows.length) return null;\n\tconst selectableColumnIds = new Set(getSelectableColumns(table).map((column) => column.id));\n\tif (!selectableColumnIds.size) return null;\n\tlet nextColumnIndex = fromColumnIndex;\n\tif (columnDelta) do\n\t\tnextColumnIndex += columnDelta;\n\twhile (nextColumnIndex >= 0 && nextColumnIndex < columns.length && !selectableColumnIds.has(columns[nextColumnIndex].id));\n\telse if (!selectableColumnIds.has(columnId)) for (let distance = 1; distance < columns.length; distance++) {\n\t\tconst before = columns[columnIndex - distance];\n\t\tconst after = columns[columnIndex + distance];\n\t\tif (before && selectableColumnIds.has(before.id)) {\n\t\t\tnextColumnIndex = columnIndex - distance;\n\t\t\tbreak;\n\t\t}\n\t\tif (after && selectableColumnIds.has(after.id)) {\n\t\t\tnextColumnIndex = columnIndex + distance;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (nextColumnIndex < 0 || nextColumnIndex >= columns.length || !selectableColumnIds.has(columns[nextColumnIndex].id)) return null;\n\tlet landingRowIndex = nextRowIndex;\n\tlet landingColumnIndex = nextColumnIndex;\n\tif (merges.length) {\n\t\tconst landingMerge = findMergeBoundsAt(merges, rows[nextRowIndex].getDisplayIndex(), nextColumnIndex);\n\t\tif (landingMerge) {\n\t\t\tlandingRowIndex = rows.findIndex((row) => row.getDisplayIndex() === landingMerge.minRowIndex);\n\t\t\tif (landingRowIndex < 0) return null;\n\t\t\tlandingColumnIndex = landingMerge.minColumnIndex;\n\t\t}\n\t}\n\tconst landingRow = rows[landingRowIndex];\n\tconst landingColumn = columns[landingColumnIndex];\n\tif (!landingRow || !landingColumn) return null;\n\treturn {\n\t\trowId: landingRow.id,\n\t\tcolumnId: landingColumn.id\n\t};\n}\n/**\n* Moves the selection one step in a direction, collapsing it to a single cell.\n*\n* With nothing selected, this selects the first selectable cell so keyboard\n* navigation has somewhere to start.\n*\n* @example\n* ```ts\n* table_moveCellSelection(table, 'down')\n* ```\n*/\nfunction table_moveCellSelection(table, direction) {\n\tconst ranges = table.atoms.cellSelection?.get();\n\tconst active = ranges?.[ranges.length - 1];\n\tif (!active) {\n\t\tconst rows = table.getRowModel().rows;\n\t\tconst columns = getSelectableColumns(table);\n\t\tif (!rows.length || !columns.length) return;\n\t\ttable_setFocusedCell(table, rows[0].id, columns[0].id);\n\t\treturn;\n\t}\n\tconst next = stepCoordinate(table, active.anchorRowId, active.anchorColumnId, direction);\n\tif (!next) return;\n\ttable_setFocusedCell(table, next.rowId, next.columnId);\n}\n/**\n* Extends the active range one step in a direction, keeping its anchor fixed.\n*\n* @example\n* ```ts\n* table_extendCellSelection(table, 'right')\n* ```\n*/\nfunction table_extendCellSelection(table, direction) {\n\tconst ranges = table.atoms.cellSelection?.get();\n\tconst active = ranges?.[ranges.length - 1];\n\tif (!active) {\n\t\ttable_moveCellSelection(table, direction);\n\t\treturn;\n\t}\n\tconst next = stepCoordinate(table, active.focusRowId, active.focusColumnId, direction);\n\tif (!next) return;\n\ttable_setCellSelection(table, (old) => {\n\t\tif (!old.length) return old;\n\t\tconst nextRanges = old.slice(0, -1);\n\t\tnextRanges.push({\n\t\t\t...old[old.length - 1],\n\t\t\tfocusRowId: next.rowId,\n\t\t\tfocusColumnId: next.columnId\n\t\t});\n\t\treturn nextRanges;\n\t});\n}\n/**\n* Walks each final positive region, invoking a visitor per selectable cell.\n*\n* Every expansion API shares this so the per-cell enable predicate is applied\n* in exactly one place.\n*/\nfunction forEachSelectedCell(table, visit, skipCovered = false) {\n\tconst bounds = callMemoOrStaticFn(table, \"getCellSelectionBounds\", table_getCellSelectionBounds);\n\tif (!bounds.length) return;\n\tconst rows = table.getRowsInDisplayOrder();\n\tconst columns = getDisplayOrderedColumns(table);\n\tfor (let i = 0; i < bounds.length; i++) {\n\t\tconst bound = bounds[i];\n\t\tfor (let rowIndex = bound.minRowIndex; rowIndex <= bound.maxRowIndex; rowIndex++) {\n\t\t\tconst row = rows[rowIndex];\n\t\t\tif (!row) continue;\n\t\t\tconst cellsByColumnId = row.getAllCellsByColumnId();\n\t\t\tfor (let columnIndex = bound.minColumnIndex; columnIndex <= bound.maxColumnIndex; columnIndex++) {\n\t\t\t\tconst column = columns[columnIndex];\n\t\t\t\tif (!column) continue;\n\t\t\t\tconst cell = cellsByColumnId[column.id];\n\t\t\t\tif (!cell) continue;\n\t\t\t\tif (!callMemoOrStaticFn(cell, \"getCanSelect\", cell_getCanSelect)) continue;\n\t\t\t\tif (skipCovered && cell.getIsCovered?.()) continue;\n\t\t\t\tvisit(cell, i, rowIndex - bound.minRowIndex, columnIndex - bound.minColumnIndex);\n\t\t\t}\n\t\t}\n\t}\n}\n/**\n* Returns the ids of all selected cells, in row-major order.\n*\n* Cells covered by overlapping ranges are returned once, at their first\n* occurrence.\n*\n* @example\n* ```ts\n* const ids = table_getSelectedCellIds(table)\n* ```\n*/\nfunction table_getSelectedCellIds(table) {\n\tconst ids = [];\n\tconst seen = /* @__PURE__ */ new Set();\n\tforEachSelectedCell(table, (cell) => {\n\t\tif (seen.has(cell.id)) return;\n\t\tseen.add(cell.id);\n\t\tids.push(cell.id);\n\t}, true);\n\treturn ids;\n}\n/**\n* Returns each final positive region's values as a row-major grid.\n*\n* This is the raw material for clipboard export. Serializing it to text is left\n* to userland, since the delimiter, the null representation, and whether values\n* containing delimiters get quoted are all application decisions.\n*\n* @example\n* ```ts\n* const [firstRange] = table_getSelectedCellRangesData(table)\n* ```\n*/\nfunction table_getSelectedCellRangesData(table) {\n\tconst grids = [];\n\tforEachSelectedCell(table, (cell, rangeIndex, rowOffset) => {\n\t\tconst grid = grids[rangeIndex] ??= [];\n\t\t(grid[rowOffset] ??= []).push(cell.getValue());\n\t});\n\treturn grids;\n}\n/**\n* Returns the number of selected cells.\n*\n* Uses rectangle arithmetic over the normalized, disjoint positive regions.\n* A per-cell `enableCellSelection` predicate requires enumeration.\n*\n* @example\n* ```ts\n* const count = table_getSelectedCellCount(table)\n* ```\n*/\nfunction table_getSelectedCellCount(table) {\n\tif (table.options.enableCellSelection === false) return 0;\n\tconst bounds = callMemoOrStaticFn(table, \"getCellSelectionBounds\", table_getCellSelectionBounds);\n\tif (!bounds.length) return 0;\n\tconst merges = callMemoOrStaticFn(table, \"getCellSelectionMergeBounds\", table_getCellSelectionMergeBounds);\n\tif (typeof table.options.enableCellSelection === \"function\" || merges.length) {\n\t\tconst ids = /* @__PURE__ */ new Set();\n\t\tforEachSelectedCell(table, (cell) => ids.add(cell.id), true);\n\t\treturn ids.size;\n\t}\n\tconst columns = getDisplayOrderedColumns(table);\n\tlet count = 0;\n\tfor (const bound of bounds) {\n\t\tlet selectableColumns = 0;\n\t\tfor (let columnIndex = bound.minColumnIndex; columnIndex <= bound.maxColumnIndex; columnIndex++) {\n\t\t\tconst column = columns[columnIndex];\n\t\t\tif (!column) continue;\n\t\t\tif (column.columnDef.enableCellSelection !== false) selectableColumns++;\n\t\t}\n\t\tcount += (bound.maxRowIndex - bound.minRowIndex + 1) * selectableColumns;\n\t}\n\treturn count;\n}\n/**\n* Returns the ids of all rows intersected by the selection.\n*\n* @example\n* ```ts\n* const rowIds = table_getCellSelectionRowIds(table)\n* ```\n*/\nfunction table_getCellSelectionRowIds(table) {\n\tconst bounds = callMemoOrStaticFn(table, \"getCellSelectionBounds\", table_getCellSelectionBounds);\n\tif (!bounds.length) return [];\n\tconst rows = table.getRowsInDisplayOrder();\n\tconst seen = /* @__PURE__ */ new Set();\n\tconst ids = [];\n\tfor (let i = 0; i < bounds.length; i++) {\n\t\tconst bound = bounds[i];\n\t\tfor (let index = bound.minRowIndex; index <= bound.maxRowIndex; index++) {\n\t\t\tconst row = rows[index];\n\t\t\tif (!row || seen.has(row.id)) continue;\n\t\t\tseen.add(row.id);\n\t\t\tids.push(row.id);\n\t\t}\n\t}\n\treturn ids;\n}\n/**\n* Returns the ids of all columns intersected by the selection.\n*\n* @example\n* ```ts\n* const columnIds = table_getCellSelectionColumnIds(table)\n* ```\n*/\nfunction table_getCellSelectionColumnIds(table) {\n\tconst bounds = callMemoOrStaticFn(table, \"getCellSelectionBounds\", table_getCellSelectionBounds);\n\tif (!bounds.length) return [];\n\tconst columns = getDisplayOrderedColumns(table);\n\tconst seen = /* @__PURE__ */ new Set();\n\tconst ids = [];\n\tfor (let i = 0; i < bounds.length; i++) {\n\t\tconst bound = bounds[i];\n\t\tfor (let index = bound.minColumnIndex; index <= bound.maxColumnIndex; index++) {\n\t\t\tconst column = columns[index];\n\t\t\tif (!column || seen.has(column.id)) continue;\n\t\t\tif (column.columnDef.enableCellSelection === false) continue;\n\t\t\tseen.add(column.id);\n\t\t\tids.push(column.id);\n\t\t}\n\t}\n\treturn ids;\n}\n/**\n* Creates a handler that begins a selection at this cell.\n*\n* Follows `header_getResizeHandler`: the enable check is resolved once outside\n* the returned closure and guarded again inside it, the document is injectable\n* for SSR and cross-document rendering, and the document-level `mouseup`\n* listener is attached here so a drag released outside the table still ends.\n*\n* @example\n* ```tsx\n* <td onMouseDown={cell.getSelectionStartHandler()} />\n* ```\n*/\nfunction cell_getSelectionStartHandler(cell, _contextDocument) {\n\tconst canSelect = cell_getCanSelect(cell);\n\treturn (e) => {\n\t\tif (!canSelect) return;\n\t\tconst table = cell.table;\n\t\tconst options = table.options;\n\t\tconst contextDocument = _contextDocument ?? (typeof document !== \"undefined\" ? document : null);\n\t\tconst isRangeEvent = options.enableCellRangeSelection !== false && (options.isCellRangeSelectionEvent?.(e) ?? false);\n\t\tconst isMultiRangeEvent = options.enableMultiCellRangeSelection !== false && (options.isMultiCellRangeSelectionEvent?.(e) ?? false);\n\t\tif (options.enableCellSelectionDrag !== false && options.enableCellRangeSelection !== false && contextDocument) {\n\t\t\ttable._isSelectingCells = true;\n\t\t\tconst upHandler = () => {\n\t\t\t\tcontextDocument.removeEventListener(\"mouseup\", upHandler);\n\t\t\t\ttable._isSelectingCells = false;\n\t\t\t};\n\t\t\tcontextDocument.addEventListener(\"mouseup\", upHandler);\n\t\t}\n\t\tconst rowId = cell.row.id;\n\t\tconst columnId = cell.column.id;\n\t\tconst shouldExclude = isMultiRangeEvent && callMemoOrStaticFn(cell, \"getIsSelected\", cell_getIsSelected);\n\t\ttable_setCellSelection(table, (old) => {\n\t\t\tconst active = old[old.length - 1];\n\t\t\tif (isRangeEvent && active) {\n\t\t\t\tconst ranges = old.slice(0, -1);\n\t\t\t\tranges.push({\n\t\t\t\t\t...active,\n\t\t\t\t\tfocusRowId: rowId,\n\t\t\t\t\tfocusColumnId: columnId\n\t\t\t\t});\n\t\t\t\treturn ranges;\n\t\t\t}\n\t\t\tconst range = {\n\t\t\t\tanchorRowId: rowId,\n\t\t\t\tanchorColumnId: columnId,\n\t\t\t\tfocusRowId: rowId,\n\t\t\t\tfocusColumnId: columnId,\n\t\t\t\t...shouldExclude ? { operation: \"exclude\" } : {}\n\t\t\t};\n\t\t\treturn isMultiRangeEvent ? [...old, range] : [range];\n\t\t});\n\t};\n}\n/**\n* Creates a handler that extends the active range to this cell during a drag.\n*\n* No rAF coalescing is needed here, unlike the resize handler: `mouseenter`\n* fires once per cell boundary crossed rather than continuously, and deferring\n* it by a frame would only delay the highlight.\n*\n* @example\n* ```tsx\n* <td onMouseEnter={cell.getSelectionExtendHandler()} />\n* ```\n*/\nfunction cell_getSelectionExtendHandler(cell) {\n\tconst canSelect = cell_getCanSelect(cell);\n\treturn (_e) => {\n\t\tif (!canSelect) return;\n\t\tconst table = cell.table;\n\t\tif (!table._isSelectingCells) return;\n\t\tconst ranges = table.atoms.cellSelection?.get();\n\t\tconst active = ranges?.[ranges.length - 1];\n\t\tif (!active) return;\n\t\tconst rowId = cell.row.id;\n\t\tconst columnId = cell.column.id;\n\t\tif (active.focusRowId === rowId && active.focusColumnId === columnId) return;\n\t\ttable_setCellSelection(table, (old) => {\n\t\t\tif (!old.length) return old;\n\t\t\tconst next = old.slice(0, -1);\n\t\t\tnext.push({\n\t\t\t\t...old[old.length - 1],\n\t\t\t\tfocusRowId: rowId,\n\t\t\t\tfocusColumnId: columnId\n\t\t\t});\n\t\t\treturn next;\n\t\t});\n\t};\n}\n\n//#endregion\nexport { cell_getCanSelect, cell_getIsFocused, cell_getIsSelected, cell_getSelectionEdges, cell_getSelectionExtendHandler, cell_getSelectionStartHandler, cell_getTabIndex, getDefaultCellSelectionState, table_autoResetCellSelection, table_extendCellSelection, table_getCellSelectionBounds, table_getCellSelectionColumnIds, table_getCellSelectionColumnIndexes, table_getCellSelectionMergeBounds, table_getCellSelectionRowIds, table_getFocusedCell, table_getSelectedCellCount, table_getSelectedCellIds, table_getSelectedCellRangesData, table_moveCellSelection, table_resetCellSelection, table_selectAllCells, table_selectCellRange, table_setCellSelection, table_setFocusedCell };","import { cloneState, hasOwn, makeObjectMap, setStateSlice } from \"../../utils.js\";\n\n//#region src/features/row-expanding/rowExpandingFeature.utils.ts\n/**\n* Creates the default expanded state.\n*\n* The feature default is an empty map, meaning no rows are expanded. Reset APIs\n* use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const expanded = getDefaultExpandedState()\n* ```\n*/\nfunction getDefaultExpandedState() {\n\treturn makeObjectMap();\n}\n/**\n* Schedules an expanded-state reset after row-structure changes.\n*\n* The reset runs when `autoResetAll`, `autoResetExpanded`, or the default\n* client-side expanding behavior allows it. Manual expanding opts out unless\n* the reset options explicitly opt back in.\n*\n* @example\n* ```ts\n* table_autoResetExpanded(table)\n* ```\n*/\nfunction table_autoResetExpanded(table) {\n\tif (!table.atoms.expanded) return;\n\tif (table.options.autoResetAll ?? table.options.autoResetExpanded ?? !table.options.manualExpanding) table._reactivity.schedule(() => table_resetExpanded(table));\n}\n/**\n* Routes an expanded-state updater through the table's expanded change handler.\n*\n* The updater may be `true`, a row-id map, or a function of the previous\n* expanded state, matching the instance `table.setExpanded` behavior.\n*\n* @example\n* ```ts\n* table_setExpanded(table, (old) => ({ ...old, [rowId]: true }))\n* ```\n*/\nfunction table_setExpanded(table, updater) {\n\ttable.options.onExpandedChange?.(updater);\n}\n/**\n* Expands or collapses every row.\n*\n* Passing `true` stores the special expanded-all state. Passing `false` stores\n* an empty map. Omitting the value toggles based on whether all rows are\n* currently expanded.\n*\n* The call is a no-op (no `onExpandedChange`) when no row can expand or when\n* the requested state matches the current state exactly.\n*\n* @example\n* ```ts\n* table_toggleAllRowsExpanded(table)\n* ```\n*/\nfunction table_toggleAllRowsExpanded(table, expanded) {\n\tconst currentExpanded = table.atoms.expanded?.get() ?? {};\n\tif (expanded ?? !table_getIsAllRowsExpanded(table)) {\n\t\tif (currentExpanded === true) return;\n\t\tif (!table_getCanSomeRowsExpand(table)) return;\n\t\ttable_setExpanded(table, true);\n\t} else {\n\t\tif (currentExpanded !== true && !Object.keys(currentExpanded).length) return;\n\t\ttable_setExpanded(table, makeObjectMap());\n\t}\n}\n/**\n* Resets `expanded` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.expanded` when it\n* exists. Passing `true` ignores initial state and resets to `{}`.\n*\n* @example\n* ```ts\n* table_resetExpanded(table)\n* table_resetExpanded(table, true)\n* ```\n*/\nfunction table_resetExpanded(table, defaultState) {\n\tconst initialExpanded = table.initialState.expanded;\n\tsetStateSlice(table, \"expanded\", defaultState ? makeObjectMap() : initialExpanded === true ? true : Object.assign(makeObjectMap(), cloneState(initialExpanded ?? {})));\n}\n/**\n* Checks whether at least one pre-paginated row can expand.\n*\n* Pagination is intentionally ignored so controls can reflect expandable rows\n* that may not be on the current page.\n*\n* @example\n* ```ts\n* const canExpand = table_getCanSomeRowsExpand(table)\n* ```\n*/\nfunction table_getCanSomeRowsExpand(table) {\n\treturn table.getPrePaginatedRowModel().flatRows.some((row) => row_getCanExpand(row));\n}\n/**\n* Creates an event handler that toggles all rows expanded.\n*\n* @example\n* ```ts\n* const onClick = table_getToggleAllRowsExpandedHandler(table)\n* ```\n*/\nfunction table_getToggleAllRowsExpandedHandler(table) {\n\treturn (_e) => {\n\t\ttable_toggleAllRowsExpanded(table);\n\t};\n}\n/**\n* Checks whether any row is expanded.\n*\n* The special expanded-all value `true` counts as some rows expanded.\n*\n* @example\n* ```ts\n* const someExpanded = table_getIsSomeRowsExpanded(table)\n* ```\n*/\nfunction table_getIsSomeRowsExpanded(table) {\n\tconst expanded = table.atoms.expanded?.get() ?? {};\n\treturn expanded === true || Object.values(expanded).some(Boolean);\n}\n/**\n* Checks whether every expandable row in the current row model is expanded.\n*\n* The special expanded-all value `true` returns true immediately. Empty\n* expanded state returns false. Rows that cannot expand are ignored, so a\n* materialized expanded-all map (which only contains expandable row ids)\n* still counts as all rows expanded.\n*\n* @example\n* ```ts\n* const allExpanded = table_getIsAllRowsExpanded(table)\n* ```\n*/\nfunction table_getIsAllRowsExpanded(table) {\n\tconst expanded = table.atoms.expanded?.get() ?? {};\n\tif (expanded === true) return true;\n\tif (!Object.keys(expanded).length) return false;\n\tconst expandableRows = table.getRowModel().flatRows.filter((row) => row_getCanExpand(row));\n\tif (!expandableRows.length) return false;\n\tif (expandableRows.some((row) => !row_getIsExpanded(row))) return false;\n\treturn true;\n}\n/**\n* Computes the deepest expanded row id depth.\n*\n* Row ids are split on `.`; expanded-all state scans the current row model's\n* expandable rows, while explicit expanded state scans its expanded id keys.\n*\n* @example\n* ```ts\n* const depth = table_getExpandedDepth(table)\n* ```\n*/\nfunction table_getExpandedDepth(table) {\n\tlet maxDepth = 0;\n\tconst expanded = table.atoms.expanded?.get();\n\t(expanded === true ? Object.values(table.getRowModel().rowsById).filter((row) => row_getCanExpand(row)).map((row) => row.id) : Object.keys(expanded ?? {})).forEach((id) => {\n\t\tconst splitId = id.split(\".\");\n\t\tmaxDepth = Math.max(maxDepth, splitId.length);\n\t});\n\treturn maxDepth;\n}\n/**\n* Expands or collapses this row.\n*\n* Omitting `expanded` toggles the row. If the current state is expanded-all,\n* the function first materializes that state into a row-id map (containing\n* only expandable row ids) before applying the row-specific change.\n*\n* The call is a no-op (no `onExpandedChange`) when the requested state matches\n* the current state, or when expanding a row that cannot expand. Collapsing is\n* always allowed so stale expanded ids can be cleaned up.\n*\n* @example\n* ```ts\n* row_toggleExpanded(row)\n* ```\n*/\nfunction row_toggleExpanded(row, expanded) {\n\tconst currentExpanded = row.table.atoms.expanded?.get() ?? {};\n\tconst currentExists = currentExpanded === true || isExpandedRowId(currentExpanded, row.id);\n\tconst targetExpanded = expanded ?? !currentExists;\n\tif (targetExpanded === currentExists) return;\n\tif (targetExpanded && !row_getCanExpand(row)) return;\n\ttable_setExpanded(row.table, (old) => {\n\t\tconst exists = old === true ? true : isExpandedRowId(old, row.id);\n\t\tlet oldExpanded = makeObjectMap();\n\t\tif (old === true) Object.values(row.table.getRowModel().rowsById).forEach((rowModelRow) => {\n\t\t\tif (row_getCanExpand(rowModelRow)) oldExpanded[rowModelRow.id] = true;\n\t\t});\n\t\telse oldExpanded = Object.assign(makeObjectMap(), old);\n\t\tif (!exists && targetExpanded) {\n\t\t\toldExpanded[row.id] = true;\n\t\t\treturn oldExpanded;\n\t\t}\n\t\tif (exists && !targetExpanded) {\n\t\t\tconst rest = makeObjectMap();\n\t\t\tconst rowIds = Object.keys(oldExpanded);\n\t\t\tfor (let i = 0; i < rowIds.length; i++) {\n\t\t\t\tconst rowId = rowIds[i];\n\t\t\t\tif (rowId !== row.id && oldExpanded[rowId]) rest[rowId] = true;\n\t\t\t}\n\t\t\treturn rest;\n\t\t}\n\t\treturn old;\n\t});\n}\n/**\n* Checks whether this row is expanded.\n*\n* `options.getIsRowExpanded` can override state-derived behavior. Otherwise\n* the row is expanded when expanded state is `true` or contains this row id.\n*\n* @example\n* ```ts\n* const expanded = row_getIsExpanded(row)\n* ```\n*/\nfunction row_getIsExpanded(row) {\n\tconst expanded = row.table.atoms.expanded?.get() ?? {};\n\treturn !!(row.table.options.getIsRowExpanded?.(row) ?? (expanded === true || isExpandedRowId(expanded, row.id)));\n}\nfunction isExpandedRowId(expanded, rowId) {\n\treturn !!(expanded && expanded !== true && hasOwn(expanded, rowId) && expanded[rowId]);\n}\n/**\n* Checks whether this row can be expanded.\n*\n* `options.getRowCanExpand` wins when provided. Otherwise rows can expand when\n* expanding is enabled and the row has subRows.\n*\n* @example\n* ```ts\n* const canExpand = row_getCanExpand(row)\n* ```\n*/\nfunction row_getCanExpand(row) {\n\treturn row.table.options.getRowCanExpand?.(row) ?? ((row.table.options.enableExpanding ?? true) && !!row.subRows.length);\n}\n/**\n* Checks whether every ancestor of this row is expanded.\n*\n* The current row is not considered; only its parent chain is walked.\n*\n* @example\n* ```ts\n* const parentsExpanded = row_getIsAllParentsExpanded(row)\n* ```\n*/\nfunction row_getIsAllParentsExpanded(row) {\n\tlet isFullyExpanded = true;\n\tlet currentRow = row;\n\twhile (isFullyExpanded && currentRow.parentId) {\n\t\tcurrentRow = row.table.getRow(currentRow.parentId, true);\n\t\tisFullyExpanded = row_getIsExpanded(currentRow);\n\t}\n\treturn isFullyExpanded;\n}\n/**\n* Creates a row control handler that toggles this row's expanded state.\n*\n* The handler is a no-op when the row cannot expand.\n*\n* @example\n* ```ts\n* const onClick = row_getToggleExpandedHandler(row)\n* ```\n*/\nfunction row_getToggleExpandedHandler(row) {\n\tconst canExpand = row_getCanExpand(row);\n\treturn () => {\n\t\tif (!canExpand) return;\n\t\trow_toggleExpanded(row);\n\t};\n}\n\n//#endregion\nexport { getDefaultExpandedState, row_getCanExpand, row_getIsAllParentsExpanded, row_getIsExpanded, row_getToggleExpandedHandler, row_toggleExpanded, table_autoResetExpanded, table_getCanSomeRowsExpand, table_getExpandedDepth, table_getIsAllRowsExpanded, table_getIsSomeRowsExpanded, table_getToggleAllRowsExpandedHandler, table_resetExpanded, table_setExpanded, table_toggleAllRowsExpanded };","import { cloneState, functionalUpdate, setStateSlice } from \"../../utils.js\";\n\n//#region src/features/row-pagination/rowPaginationFeature.utils.ts\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\n/**\n* Creates the default pagination state used by the pagination feature.\n*\n* The feature default starts at the first page with a page size of 10. Reset\n* APIs use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const pagination = getDefaultPaginationState()\n* ```\n*/\nfunction getDefaultPaginationState() {\n\treturn {\n\t\tpageIndex: defaultPageIndex,\n\t\tpageSize: defaultPageSize\n\t};\n}\n/**\n* Resets the page index when a page-altering change should return to page 0.\n*\n* The reset runs when `autoResetAll`, `autoResetPageIndex`, or the default\n* client-side pagination behavior allows it. Manual pagination opts out unless\n* the reset options explicitly opt back in.\n*\n* @example\n* ```ts\n* table_autoResetPageIndex(table)\n* ```\n*/\nfunction table_autoResetPageIndex(table) {\n\tif (table.options.autoResetAll ?? table.options.autoResetPageIndex ?? !table.options.manualPagination) {\n\t\tif ((table.atoms.pagination?.get()?.pageIndex ?? defaultPageIndex) === defaultPageIndex) return;\n\t\ttable_resetPageIndex(table, true);\n\t}\n}\n/**\n* Routes a pagination updater through the table's pagination change handler.\n*\n* The updater may be a next state object or a function of the previous\n* `PaginationState`; controlled state and external atoms observe the same\n* updater path as the instance API.\n*\n* @example\n* ```ts\n* table_setPagination(table, (old) => old)\n* ```\n*/\nfunction table_setPagination(table, updater) {\n\tsetStateSlice(table, \"pagination\", updater);\n}\n/**\n* Resets `pagination` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.pagination` when it\n* exists. Passing `true` ignores initial state and resets to\n* `{ pageIndex: 0, pageSize: 10 }`.\n*\n* @example\n* ```ts\n* table_resetPagination(table)\n* table_resetPagination(table, true)\n* ```\n*/\nfunction table_resetPagination(table, defaultState) {\n\ttable_setPagination(table, defaultState ? getDefaultPaginationState() : cloneState(table.initialState.pagination ?? getDefaultPaginationState()));\n}\n/**\n* Updates `pagination.pageIndex` and clamps it to the known page range.\n*\n* Unknown page counts (`undefined` or `-1`) allow any non-negative page index.\n* Known page counts clamp the index between `0` and `pageCount - 1`.\n*\n* @example\n* ```ts\n* table_setPageIndex(table, (old) => old)\n* ```\n*/\nfunction table_setPageIndex(table, updater) {\n\ttable_setPagination(table, (old) => {\n\t\tlet pageIndex = functionalUpdate(updater, old.pageIndex);\n\t\tconst maxPageIndex = typeof table.options.pageCount === \"undefined\" || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n\t\tpageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n\t\treturn {\n\t\t\t...old,\n\t\t\tpageIndex\n\t\t};\n\t});\n}\n/**\n* Resets only `pagination.pageIndex`.\n*\n* With no argument, the reset uses `table.initialState.pagination?.pageIndex`\n* or `0`. Passing `true` always resets the page index to `0`.\n*\n* @example\n* ```ts\n* table_resetPageIndex(table)\n* table_resetPageIndex(table, true)\n* ```\n*/\nfunction table_resetPageIndex(table, defaultState) {\n\ttable_setPageIndex(table, defaultState ? defaultPageIndex : table.initialState.pagination?.pageIndex ?? defaultPageIndex);\n}\n/**\n* Resets only `pagination.pageSize`.\n*\n* With no argument, the reset uses `table.initialState.pagination?.pageSize`\n* or `10`. Passing `true` always resets the page size to `10`.\n*\n* @example\n* ```ts\n* table_resetPageSize(table)\n* table_resetPageSize(table, true)\n* ```\n*/\nfunction table_resetPageSize(table, defaultState) {\n\ttable_setPageSize(table, defaultState ? defaultPageSize : table.initialState.pagination?.pageSize ?? defaultPageSize);\n}\n/**\n* Updates `pagination.pageSize` while preserving the current top row.\n*\n* The new size is clamped to at least `1`, and `pageIndex` is recalculated so\n* the row that was previously at the top of the page remains in view.\n*\n* @example\n* ```ts\n* table_setPageSize(table, (old) => old)\n* ```\n*/\nfunction table_setPageSize(table, updater) {\n\ttable_setPagination(table, (old) => {\n\t\tconst pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n\t\tconst topRowIndex = old.pageSize === Infinity ? 0 : old.pageSize * old.pageIndex;\n\t\tconst pageIndex = pageSize === Infinity ? 0 : Math.floor(topRowIndex / pageSize);\n\t\treturn {\n\t\t\t...old,\n\t\t\tpageIndex,\n\t\t\tpageSize\n\t\t};\n\t});\n}\n/**\n* Builds the zero-based page indexes available for the current page count.\n*\n* Unknown or empty page counts return an empty array; otherwise the result is\n* `[0, 1, ...pageCount - 1]`.\n*\n* @example\n* ```ts\n* const pageIndexes = table_getPageOptions(table)\n* ```\n*/\nfunction table_getPageOptions(table) {\n\tconst pageCount = table_getPageCount(table);\n\tlet pageOptions = [];\n\tif (pageCount && pageCount > 0) pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n\treturn pageOptions;\n}\n/**\n* Checks whether the current page index can move backward.\n*\n* The first page is page index `0`, so only positive page indexes can navigate\n* to a previous page.\n*\n* @example\n* ```ts\n* const canGoBack = table_getCanPreviousPage(table)\n* ```\n*/\nfunction table_getCanPreviousPage(table) {\n\treturn (table.atoms.pagination?.get()?.pageIndex ?? 0) > 0;\n}\n/**\n* Checks whether the current page index can move forward.\n*\n* A `pageCount` of `-1` means the caller does not know the total page count, so\n* this returns `true`. A page count of `0` returns `false`.\n*\n* @example\n* ```ts\n* const canGoForward = table_getCanNextPage(table)\n* ```\n*/\nfunction table_getCanNextPage(table) {\n\tconst pageIndex = table.atoms.pagination?.get()?.pageIndex ?? defaultPageIndex;\n\tconst pageCount = table_getPageCount(table);\n\tif (pageCount === -1) return true;\n\tif (pageCount === 0) return false;\n\treturn pageIndex < pageCount - 1;\n}\n/**\n* Checks whether a known, finite last page exists after the current page.\n*\n* Unknown (`-1`), empty, and non-finite page counts do not have a navigable\n* last page.\n*\n* @example\n* ```ts\n* const canGoToLastPage = table_getCanLastPage(table)\n* ```\n*/\nfunction table_getCanLastPage(table) {\n\tconst pageIndex = table.atoms.pagination?.get()?.pageIndex ?? defaultPageIndex;\n\tconst pageCount = table_getPageCount(table);\n\treturn Number.isFinite(pageCount) && pageCount > 0 && pageIndex < pageCount - 1;\n}\n/**\n* Moves the table to the previous page.\n*\n* This delegates to `table_setPageIndex` so pagination state ownership and\n* updater semantics remain consistent.\n*\n* @example\n* ```ts\n* table_previousPage(table)\n* ```\n*/\nfunction table_previousPage(table) {\n\treturn table_setPageIndex(table, (old) => old - 1);\n}\n/**\n* Moves the table to the next page.\n*\n* This delegates to `table_setPageIndex` so pagination state ownership and\n* updater semantics remain consistent.\n*\n* @example\n* ```ts\n* table_nextPage(table)\n* ```\n*/\nfunction table_nextPage(table) {\n\treturn table_setPageIndex(table, (old) => {\n\t\treturn old + 1;\n\t});\n}\n/**\n* Moves the table to the first page.\n*\n* This is a convenience wrapper around `table_setPageIndex(table, 0)`.\n*\n* @example\n* ```ts\n* table_firstPage(table)\n* ```\n*/\nfunction table_firstPage(table) {\n\treturn table_setPageIndex(table, 0);\n}\n/**\n* Moves the table to the last known page.\n*\n* Unknown, empty, and non-finite page counts do not have a navigable last\n* page, so this does nothing for those states.\n*\n* @example\n* ```ts\n* table_lastPage(table)\n* ```\n*/\nfunction table_lastPage(table) {\n\tconst pageCount = table_getPageCount(table);\n\tif (!Number.isFinite(pageCount) || pageCount <= 0) return;\n\treturn table_setPageIndex(table, pageCount - 1);\n}\n/**\n* Resolves the number of pages for the current pagination state.\n*\n* `options.pageCount` wins for manual pagination. Otherwise the value is\n* calculated from `table_getRowCount(table)` and the current `pageSize`.\n*\n* @example\n* ```ts\n* const pages = table_getPageCount(table)\n* ```\n*/\nfunction table_getPageCount(table) {\n\tconst configuredPageCount = table.options.pageCount;\n\tif (configuredPageCount != null) return configuredPageCount;\n\tconst rowCount = table_getRowCount(table);\n\tconst pageSize = table.atoms.pagination?.get()?.pageSize ?? defaultPageSize;\n\tif (pageSize === Infinity && Number.isFinite(rowCount) && rowCount > 0) return 1;\n\treturn Math.ceil(rowCount / pageSize);\n}\n/**\n* Resolves the total row count used for pagination math.\n*\n* `options.rowCount` wins for manual pagination. Otherwise the count comes\n* from the pre-paginated row model so filtering, grouping, sorting, and\n* expansion are reflected before the page slice is applied.\n*\n* @example\n* ```ts\n* const rows = table_getRowCount(table)\n* ```\n*/\nfunction table_getRowCount(table) {\n\treturn table.options.rowCount ?? table.getPrePaginatedRowModel().rows.length;\n}\n\n//#endregion\nexport { getDefaultPaginationState, table_autoResetPageIndex, table_firstPage, table_getCanLastPage, table_getCanNextPage, table_getCanPreviousPage, table_getPageCount, table_getPageOptions, table_getRowCount, table_lastPage, table_nextPage, table_previousPage, table_resetPageIndex, table_resetPageSize, table_resetPagination, table_setPageIndex, table_setPageSize, table_setPagination };","import { cloneState, isFunction, setStateSlice } from \"../../utils.js\";\nimport { reSplitAlphaNumeric, sortFn_basic } from \"./sortFns.js\";\n\n//#region src/features/row-sorting/rowSortingFeature.utils.ts\n/**\n* Creates the default sorting state.\n*\n* The feature default is an empty array, meaning no columns are sorted. Reset\n* APIs use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const sorting = getDefaultSortingState()\n* ```\n*/\nfunction getDefaultSortingState() {\n\treturn [];\n}\n/**\n* Routes a sorting updater through the table's sorting change handler.\n*\n* The updater may be a next `SortingState` array or a function of the previous\n* sorting state, matching the instance `table.setSorting` behavior. State\n* owners receive an equality-guarded updater so structurally equal sorting\n* values preserve the owner's existing reference.\n*\n* @example\n* ```ts\n* table_setSorting(table, (old) => [...old, { id: 'age', desc: true }])\n* ```\n*/\nfunction table_setSorting(table, updater) {\n\tsetStateSlice(table, \"sorting\", updater);\n}\n/**\n* Resets `sorting` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.sorting` when it\n* exists. Passing `true` ignores initial state and resets to `[]`.\n*\n* @example\n* ```ts\n* table_resetSorting(table)\n* table_resetSorting(table, true)\n* ```\n*/\nfunction table_resetSorting(table, defaultState) {\n\ttable_setSorting(table, defaultState ? [] : cloneState(table.initialState.sorting ?? []));\n}\n/**\n* Resets sorting after the table data changes when explicitly enabled.\n*\n* Unlike other auto-reset behaviors, sorting is preserved by default. An\n* explicit `autoResetAll` value takes precedence over `autoResetSorting`.\n*\n* @example\n* ```ts\n* table_autoResetSorting(table)\n* ```\n*/\nfunction table_autoResetSorting(table) {\n\tif (!table.atoms.sorting) return;\n\tif (table.options.autoResetAll ?? table.options.autoResetSorting ?? false) table_resetSorting(table);\n}\n/**\n* Chooses a built-in sorting function from sampled filtered row values.\n*\n* Date-like values use `datetime`, mixed text/numeric strings use\n* `alphanumeric`, plain strings use `text`, and unknown values fall back to\n* `basic`.\n*\n* @example\n* ```ts\n* const sortFn = column_getAutoSortFn(column)\n* ```\n*/\nfunction column_getAutoSortFn(column) {\n\tconst sortFns = column.table._rowModelFns.sortFns;\n\tconst firstRows = column.table.getFilteredRowModel().flatRows.slice(0, 10);\n\tlet sortFnName;\n\tlet isString = false;\n\tfor (let i = 0; i < firstRows.length; i++) {\n\t\tconst value = firstRows[i].getValue(column.id);\n\t\tif (Object.prototype.toString.call(value) === \"[object Date]\") {\n\t\t\tsortFnName = \"datetime\";\n\t\t\tbreak;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\tisString = true;\n\t\t\tif (value.split(reSplitAlphaNumeric).length > 1) {\n\t\t\t\tsortFnName = \"alphanumeric\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (!sortFnName && isString) sortFnName = \"text\";\n\tif (sortFnName) {\n\t\tlet sortFn = sortFns?.[sortFnName];\n\t\tif (!sortFn) {\n\t\t\tif (process.env.NODE_ENV === \"development\") console.warn(`sortFn '${sortFnName}' (auto) for column '${column.id}' is not registered`);\n\t\t\tif (sortFnName === \"alphanumeric\") sortFn = sortFns?.text;\n\t\t}\n\t\tif (sortFn) return sortFn;\n\t}\n\treturn sortFn_basic;\n}\n/**\n* Chooses the default first sort direction from sampled filtered row values.\n*\n* The first non-nullish value among the sampled rows decides: string columns\n* start ascending so alphabetical order is natural; other value types (or\n* columns with no non-nullish sample) start descending. Sampling past leading\n* nullish values keeps the toggle cycle stable when sorting or a data swap\n* moves an empty value into the first row.\n*\n* @example\n* ```ts\n* const direction = column_getAutoSortDir(column)\n* ```\n*/\nfunction column_getAutoSortDir(column) {\n\tconst firstRows = column.table.getFilteredRowModel().flatRows.slice(0, 10);\n\tfor (let i = 0; i < firstRows.length; i++) {\n\t\tconst value = firstRows[i].getValue(column.id);\n\t\tif (value == null) continue;\n\t\treturn typeof value === \"string\" ? \"asc\" : \"desc\";\n\t}\n\treturn \"desc\";\n}\n/**\n* Resolves the sorting function configured for a column.\n*\n* Function-valued `columnDef.sortFn` is returned directly, `'auto'` delegates\n* to `column_getAutoSortFn`, and string values are looked up in the table's\n* sorting function registry before falling back to `basic`.\n*\n* @example\n* ```ts\n* const sortFn = column_getSortFn(column)\n* ```\n*/\nfunction column_getSortFn(column) {\n\tconst sortFns = column.table._rowModelFns.sortFns;\n\tif (isFunction(column.columnDef.sortFn)) return column.columnDef.sortFn;\n\tif (column.columnDef.sortFn === \"auto\") return column_getAutoSortFn(column);\n\tconst sortFn = sortFns?.[column.columnDef.sortFn];\n\tif (process.env.NODE_ENV === \"development\" && !sortFn) console.warn(`sortFn '${String(column.columnDef.sortFn)}' for column '${column.id}' is not registered`);\n\treturn sortFn ?? sortFn_basic;\n}\n/**\n* Applies the next sorting state for this column.\n*\n* The toggle can add, replace, flip, or remove this column's sort entry. Multi\n* sorting respects `enableMultiSort`, `enableMultiRemove`,\n* `maxMultiSortColCount`, and the `multi` argument.\n*\n* @example\n* ```ts\n* column_toggleSorting(column, undefined, true)\n* ```\n*/\nfunction column_toggleSorting(column, desc, multi) {\n\tconst nextSortingOrder = column_getNextSortingOrder(column, multi && column_getCanMultiSort(column));\n\tconst hasManualValue = typeof desc !== \"undefined\";\n\ttable_setSorting(column.table, (old) => {\n\t\tconst existingIndex = old.findIndex((d) => d.id === column.id);\n\t\tconst existingSorting = existingIndex === -1 ? void 0 : old[existingIndex];\n\t\tlet newSorting = [];\n\t\tlet sortAction;\n\t\tconst nextDesc = hasManualValue ? desc : nextSortingOrder === \"desc\";\n\t\tconst isMultiMode = !!(old.length && column_getCanMultiSort(column) && multi);\n\t\tif (isMultiMode) if (existingSorting) sortAction = \"toggle\";\n\t\telse sortAction = \"add\";\n\t\telse if (existingSorting) sortAction = \"toggle\";\n\t\telse sortAction = \"replace\";\n\t\tif (sortAction === \"toggle\") {\n\t\t\tif (!hasManualValue) {\n\t\t\t\tif (!nextSortingOrder) sortAction = \"remove\";\n\t\t\t}\n\t\t}\n\t\tif (sortAction === \"add\") {\n\t\t\tnewSorting = [...old, {\n\t\t\t\tid: column.id,\n\t\t\t\tdesc: nextDesc\n\t\t\t}];\n\t\t\tnewSorting.splice(0, newSorting.length - (column.table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER));\n\t\t} else if (sortAction === \"toggle\") newSorting = isMultiMode ? old.map((d) => {\n\t\t\tif (d.id === column.id) return {\n\t\t\t\t...d,\n\t\t\t\tdesc: nextDesc\n\t\t\t};\n\t\t\treturn d;\n\t\t}) : [{\n\t\t\tid: column.id,\n\t\t\tdesc: nextDesc\n\t\t}];\n\t\telse if (sortAction === \"remove\") newSorting = isMultiMode ? old.filter((d) => d.id !== column.id) : [];\n\t\telse newSorting = [{\n\t\t\tid: column.id,\n\t\t\tdesc: nextDesc\n\t\t}];\n\t\treturn newSorting;\n\t});\n}\n/**\n* Resolves the first direction used when this column begins sorting.\n*\n* Column-level `sortDescFirst` wins, then table-level `sortDescFirst`, then the\n* auto direction inferred from sampled values.\n*\n* @example\n* ```ts\n* const firstDirection = column_getFirstSortDir(column)\n* ```\n*/\nfunction column_getFirstSortDir(column) {\n\treturn column.columnDef.sortDescFirst ?? column.table.options.sortDescFirst ?? column_getAutoSortDir(column) === \"desc\" ? \"desc\" : \"asc\";\n}\n/**\n* Resolves the next sort order for this column's toggle cycle.\n*\n* The cycle starts with the first sort direction, flips between `asc` and\n* `desc`, and can return `false` when sorting removal is enabled.\n*\n* @example\n* ```ts\n* const nextOrder = column_getNextSortingOrder(column)\n* ```\n*/\nfunction column_getNextSortingOrder(column, multi) {\n\tconst firstSortDirection = column_getFirstSortDir(column);\n\tconst isSorted = column_getIsSorted(column);\n\tif (!isSorted) return firstSortDirection;\n\tif (isSorted !== firstSortDirection && (column.table.options.enableSortingRemoval ?? true) && (multi ? column.table.options.enableMultiRemove ?? true : true)) return false;\n\treturn isSorted === \"desc\" ? \"asc\" : \"desc\";\n}\n/**\n* Checks whether this accessor column can participate in sorting.\n*\n* The column must have an accessor and sorting must be enabled by both the\n* column definition and table options.\n*\n* @example\n* ```ts\n* const canSort = column_getCanSort(column)\n* ```\n*/\nfunction column_getCanSort(column) {\n\treturn (column.columnDef.enableSorting ?? true) && (column.table.options.enableSorting ?? true) && !!column.accessorFn;\n}\n/**\n* Checks whether this column can be added to a multi-sort state.\n*\n* Column-level `enableMultiSort` wins over table-level `enableMultiSort`; if\n* neither is set, accessor columns can multi-sort by default.\n*\n* @example\n* ```ts\n* const canMultiSort = column_getCanMultiSort(column)\n* ```\n*/\nfunction column_getCanMultiSort(column) {\n\treturn column.columnDef.enableMultiSort ?? column.table.options.enableMultiSort ?? !!column.accessorFn;\n}\n/**\n* Reads this column's current sort direction.\n*\n* The result is `false` when the column is not sorted, otherwise `'asc'` or\n* `'desc'` based on the column's entry in `state.sorting`.\n*\n* @example\n* ```ts\n* const direction = column_getIsSorted(column)\n* ```\n*/\nfunction column_getIsSorted(column) {\n\tconst columnSort = column.table.atoms.sorting?.get()?.find((d) => d.id === column.id);\n\treturn !columnSort ? false : columnSort.desc ? \"desc\" : \"asc\";\n}\n/**\n* Finds this column's position in the ordered `state.sorting` array.\n*\n* The result is `-1` when the column is not sorted.\n*\n* @example\n* ```ts\n* const index = column_getSortIndex(column)\n* ```\n*/\nfunction column_getSortIndex(column) {\n\treturn column.table.atoms.sorting?.get()?.findIndex((d) => d.id === column.id) ?? -1;\n}\n/**\n* Removes this column from the sorting state.\n*\n* Other sorted columns are preserved, including their relative order.\n*\n* @example\n* ```ts\n* column_clearSorting(column)\n* ```\n*/\nfunction column_clearSorting(column) {\n\ttable_setSorting(column.table, (old) => old.length ? old.filter((d) => d.id !== column.id) : []);\n}\n/**\n* Creates a header event handler that toggles this column's sorting.\n*\n* The handler ignores events when the column cannot sort, and asks\n* `options.isMultiSortEvent` whether the event should add to a multi-sort.\n*\n* @example\n* ```ts\n* const onClick = column_getToggleSortingHandler(column)\n* ```\n*/\nfunction column_getToggleSortingHandler(column) {\n\tconst canSort = column_getCanSort(column);\n\treturn (e) => {\n\t\tif (!canSort) return;\n\t\tcolumn_toggleSorting(column, void 0, column_getCanMultiSort(column) ? column.table.options.isMultiSortEvent?.(e) : false);\n\t};\n}\n\n//#endregion\nexport { column_clearSorting, column_getAutoSortDir, column_getAutoSortFn, column_getCanMultiSort, column_getCanSort, column_getFirstSortDir, column_getIsSorted, column_getNextSortingOrder, column_getSortFn, column_getSortIndex, column_getToggleSortingHandler, column_toggleSorting, getDefaultSortingState, table_autoResetSorting, table_resetSorting, table_setSorting };","import { makeObjectMap, skipFirstRun, tableMemo } from \"../../utils.js\";\nimport { constructRow } from \"../rows/constructRow.js\";\nimport { table_autoResetCellSelection } from \"../../features/cell-selection/cellSelectionFeature.utils.js\";\nimport { table_autoResetExpanded } from \"../../features/row-expanding/rowExpandingFeature.utils.js\";\nimport { table_autoResetPageIndex } from \"../../features/row-pagination/rowPaginationFeature.utils.js\";\nimport { table_autoResetSorting } from \"../../features/row-sorting/rowSortingFeature.utils.js\";\n\n//#region src/core/row-models/createCoreRowModel.ts\n/**\n* Creates a memoized core row model factory.\n*\n* The factory reads the relevant table state atoms and options, then returns a row model function used by the table row-model pipeline.\n*/\nfunction createCoreRowModel() {\n\treturn (table) => {\n\t\treturn tableMemo({\n\t\t\tfeature: \"coreRowModelsFeature\",\n\t\t\ttable,\n\t\t\tfnName: \"table.getCoreRowModel\",\n\t\t\tmemoDeps: () => [table.options.data],\n\t\t\tfn: () => _createCoreRowModel(table, table.options.data),\n\t\t\tonAfterUpdate: skipFirstRun(() => {\n\t\t\t\ttable_autoResetExpanded(table);\n\t\t\t\ttable_autoResetPageIndex(table);\n\t\t\t\ttable_autoResetSorting(table);\n\t\t\t\ttable_autoResetCellSelection(table);\n\t\t\t})\n\t\t});\n\t};\n}\nfunction accessRows(table, rowModel, originalRows, depth = 0, parentRow) {\n\tconst rows = [];\n\tfor (let i = 0; i < originalRows.length; i++) {\n\t\tconst originalRow = originalRows[i];\n\t\tconst row = constructRow(table, table.getRowId(originalRow, i, parentRow), originalRow, i, depth, void 0, parentRow?.id);\n\t\trowModel.flatRows.push(row);\n\t\trowModel.rowsById[row.id] = row;\n\t\trows.push(row);\n\t\tif (table.options.getSubRows) {\n\t\t\trow.originalSubRows = table.options.getSubRows(originalRow, i);\n\t\t\tif (row.originalSubRows?.length) row.subRows = accessRows(table, rowModel, row.originalSubRows, depth + 1, row);\n\t\t}\n\t}\n\treturn rows;\n}\nfunction _createCoreRowModel(table, data) {\n\tconst rowModel = {\n\t\trows: [],\n\t\tflatRows: [],\n\t\trowsById: makeObjectMap()\n\t};\n\trowModel.rows = accessRows(table, rowModel, data);\n\treturn rowModel;\n}\n\n//#endregion\nexport { createCoreRowModel };","import { createCoreRowModel } from \"./createCoreRowModel.js\";\n\n//#region src/core/row-models/coreRowModelsFeature.utils.ts\n/**\n* Resolves the table's unmodified core row model.\n*\n* The factory is created once per table, either from the `coreRowModel` slot on the `features` option\n* or the built-in `createCoreRowModel()`, then reused for later calls.\n*\n* @example\n* ```ts\n* const coreRows = table_getCoreRowModel(table)\n* ```\n*/\nfunction table_getCoreRowModel(table) {\n\tif (!table._rowModels.coreRowModel) table._rowModels.coreRowModel = table.options.features.coreRowModel?.(table) ?? createCoreRowModel()(table);\n\treturn table._rowModels.coreRowModel();\n}\n/**\n* Reads the row model immediately before column/global filtering.\n*\n* Filtering is the first derived row-model stage, so this currently aliases\n* `table.getCoreRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeFiltering = table_getPreFilteredRowModel(table)\n* ```\n*/\nfunction table_getPreFilteredRowModel(table) {\n\treturn table.getCoreRowModel();\n}\n/**\n* Resolves the row model after column and global filtering.\n*\n* When `manualFiltering` is enabled, or no filtered row-model factory was\n* registered, this returns the pre-filtered row model because filtering is\n* expected to happen outside the table.\n*\n* @example\n* ```ts\n* const filteredRows = table_getFilteredRowModel(table)\n* ```\n*/\nfunction table_getFilteredRowModel(table) {\n\tif (!table._rowModels.filteredRowModel) table._rowModels.filteredRowModel = table.options.features.filteredRowModel?.(table);\n\tif (table.options.manualFiltering || !table._rowModels.filteredRowModel) return table.getPreFilteredRowModel();\n\treturn table._rowModels.filteredRowModel();\n}\n/**\n* Reads the row model immediately before grouping.\n*\n* Grouping runs after filtering, so this aliases `table.getFilteredRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeGrouping = table_getPreGroupedRowModel(table)\n* ```\n*/\nfunction table_getPreGroupedRowModel(table) {\n\treturn table.getFilteredRowModel();\n}\n/**\n* Resolves the row model after grouping has produced grouped rows.\n*\n* When `manualGrouping` is enabled, or no grouped row-model factory was\n* registered, this returns the pre-grouped row model unchanged.\n*\n* @example\n* ```ts\n* const groupedRows = table_getGroupedRowModel(table)\n* ```\n*/\nfunction table_getGroupedRowModel(table) {\n\tif (!table._rowModels.groupedRowModel) table._rowModels.groupedRowModel = table.options.features.groupedRowModel?.(table);\n\tif (table.options.manualGrouping || !table._rowModels.groupedRowModel) return table.getPreGroupedRowModel();\n\treturn table._rowModels.groupedRowModel();\n}\n/**\n* Reads the row model immediately before sorting.\n*\n* Sorting runs after grouping, so this aliases `table.getGroupedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeSorting = table_getPreSortedRowModel(table)\n* ```\n*/\nfunction table_getPreSortedRowModel(table) {\n\treturn table.getGroupedRowModel();\n}\n/**\n* Resolves the row model after sorting has been applied.\n*\n* When `manualSorting` is enabled, or no sorted row-model factory was\n* registered, this returns the pre-sorted row model because sorted data is\n* expected to be supplied by the caller.\n*\n* @example\n* ```ts\n* const sortedRows = table_getSortedRowModel(table)\n* ```\n*/\nfunction table_getSortedRowModel(table) {\n\tif (!table._rowModels.sortedRowModel) table._rowModels.sortedRowModel = table.options.features.sortedRowModel?.(table);\n\tif (table.options.manualSorting || !table._rowModels.sortedRowModel) return table.getPreSortedRowModel();\n\treturn table._rowModels.sortedRowModel();\n}\n/**\n* Reads the row model immediately before row expansion.\n*\n* Expansion runs after sorting, so this aliases `table.getSortedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeExpansion = table_getPreExpandedRowModel(table)\n* ```\n*/\nfunction table_getPreExpandedRowModel(table) {\n\treturn table.getSortedRowModel();\n}\n/**\n* Resolves the row model after expanded rows have been flattened into view.\n*\n* When `manualExpanding` is enabled, or no expanded row-model factory was\n* registered, this returns the pre-expanded row model unchanged.\n*\n* @example\n* ```ts\n* const expandedRows = table_getExpandedRowModel(table)\n* ```\n*/\nfunction table_getExpandedRowModel(table) {\n\tif (!table._rowModels.expandedRowModel) table._rowModels.expandedRowModel = table.options.features.expandedRowModel?.(table);\n\tif (table.options.manualExpanding || !table._rowModels.expandedRowModel) return table.getPreExpandedRowModel();\n\treturn table._rowModels.expandedRowModel();\n}\n/**\n* Reads the row model immediately before pagination.\n*\n* Pagination is the final built-in row-model stage, so this aliases\n* `table.getExpandedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforePagination = table_getPrePaginatedRowModel(table)\n* ```\n*/\nfunction table_getPrePaginatedRowModel(table) {\n\treturn table.getExpandedRowModel();\n}\n/**\n* Resolves the row model after pagination has sliced rows for the current page.\n*\n* When `manualPagination` is enabled, or no paginated row-model factory was\n* registered, this returns the pre-paginated row model because pagination is\n* expected to happen before data reaches the table.\n*\n* @example\n* ```ts\n* const pageRows = table_getPaginatedRowModel(table)\n* ```\n*/\nfunction table_getPaginatedRowModel(table) {\n\tif (!table._rowModels.paginatedRowModel) table._rowModels.paginatedRowModel = table.options.features.paginatedRowModel?.(table);\n\tif (table.options.manualPagination || !table._rowModels.paginatedRowModel) return table.getPrePaginatedRowModel();\n\treturn table._rowModels.paginatedRowModel();\n}\n/**\n* Resolves the final row model consumed by renderers.\n*\n* This is the end of the built-in row-model pipeline: core -> filtering ->\n* grouping -> sorting -> expanding -> pagination.\n*\n* @example\n* ```ts\n* const visibleRows = table_getRowModel(table)\n* ```\n*/\nfunction table_getRowModel(table) {\n\treturn table.getPaginatedRowModel();\n}\n\n//#endregion\nexport { table_getCoreRowModel, table_getExpandedRowModel, table_getFilteredRowModel, table_getGroupedRowModel, table_getPaginatedRowModel, table_getPreExpandedRowModel, table_getPreFilteredRowModel, table_getPreGroupedRowModel, table_getPrePaginatedRowModel, table_getPreSortedRowModel, table_getRowModel, table_getSortedRowModel };","import { assignTableAPIs } from \"../../utils.js\";\nimport { table_getCoreRowModel, table_getExpandedRowModel, table_getFilteredRowModel, table_getGroupedRowModel, table_getPaginatedRowModel, table_getPreExpandedRowModel, table_getPreFilteredRowModel, table_getPreGroupedRowModel, table_getPrePaginatedRowModel, table_getPreSortedRowModel, table_getRowModel, table_getSortedRowModel } from \"./coreRowModelsFeature.utils.js\";\n\n//#region src/core/row-models/coreRowModelsFeature.ts\n/**\n* Core feature that wires table row-model accessors and row-model caches.\n*/\nconst coreRowModelsFeature = { constructTableAPIs: (table) => {\n\tassignTableAPIs(\"coreRowModelsFeature\", table, {\n\t\ttable_getCoreRowModel: { fn: () => table_getCoreRowModel(table) },\n\t\ttable_getPreFilteredRowModel: { fn: () => table_getPreFilteredRowModel(table) },\n\t\ttable_getFilteredRowModel: { fn: () => table_getFilteredRowModel(table) },\n\t\ttable_getPreGroupedRowModel: { fn: () => table_getPreGroupedRowModel(table) },\n\t\ttable_getGroupedRowModel: { fn: () => table_getGroupedRowModel(table) },\n\t\ttable_getPreSortedRowModel: { fn: () => table_getPreSortedRowModel(table) },\n\t\ttable_getSortedRowModel: { fn: () => table_getSortedRowModel(table) },\n\t\ttable_getPreExpandedRowModel: { fn: () => table_getPreExpandedRowModel(table) },\n\t\ttable_getExpandedRowModel: { fn: () => table_getExpandedRowModel(table) },\n\t\ttable_getPrePaginatedRowModel: { fn: () => table_getPrePaginatedRowModel(table) },\n\t\ttable_getPaginatedRowModel: { fn: () => table_getPaginatedRowModel(table) },\n\t\ttable_getRowModel: { fn: () => table_getRowModel(table) }\n\t});\n} };\n\n//#endregion\nexport { coreRowModelsFeature };","//#region src/core/cells/constructCell.ts\n/**\n* Creates or retrieves the cell prototype for a table.\n* The prototype is cached on the table and shared by all cell instances.\n*/\nfunction getCellPrototype(table) {\n\tif (!table._cellPrototype) {\n\t\ttable._cellPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignCellPrototype?.(table._cellPrototype, table);\n\t}\n\treturn table._cellPrototype;\n}\n/**\n* Constructs a cell instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructCell(column, row, table) {\n\tconst cellPrototype = getCellPrototype(table);\n\tconst cell = Object.create(cellPrototype);\n\tcell.column = column;\n\tcell.id = `${row.id}_${column.id}`;\n\tcell.row = row;\n\tconst initFns = table._cellInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](cell);\n\treturn cell;\n}\n\n//#endregion\nexport { constructCell };","import { flattenBy, hasOwn, makeObjectMap } from \"../../utils.js\";\nimport { constructCell } from \"../cells/constructCell.js\";\n\n//#region src/core/rows/coreRowsFeature.utils.ts\n/**\n* Returns this row's zero-based position in the current pre-pagination row\n* model. Rows outside that model return `-1`.\n*/\nfunction row_getDisplayIndex(row) {\n\tconst rows = row.table.getRowsInDisplayOrder();\n\tconst displayIndex = row._displayIndexCache;\n\treturn rows[displayIndex] === row ? displayIndex : -1;\n}\n/**\n* Returns the rows in the current display order after assigning their\n* zero-based display indexes.\n*\n* When expanded rows bypass pagination, expanded descendants are inserted into\n* the returned order even though they are absent from the pre-pagination row\n* model.\n*/\nfunction table_getRowsInDisplayOrder(table) {\n\tconst rows = table.getPrePaginatedRowModel().rows;\n\tif (table.options.paginateExpandedRows === false) {\n\t\tconst displayRows = [];\n\t\tconst handleRow = (row) => {\n\t\t\trow._displayIndexCache = displayRows.length;\n\t\t\tdisplayRows.push(row);\n\t\t\tif (row.subRows.length && row.getIsExpanded?.()) row.subRows.forEach(handleRow);\n\t\t};\n\t\trows.forEach(handleRow);\n\t\treturn displayRows;\n\t}\n\tfor (let i = 0; i < rows.length; i++) rows[i]._displayIndexCache = i;\n\treturn rows;\n}\n/**\n* Reads and caches this row's value for a column.\n*\n* The value is produced by the column accessor. Missing columns or display\n* columns without an accessor return `undefined`.\n*\n* @example\n* ```ts\n* const firstName = row_getValue(row, 'firstName')\n* ```\n*/\nfunction row_getValue(row, columnId) {\n\tif (hasOwn(row._valuesCache, columnId)) return row._valuesCache[columnId];\n\tconst column = row.table.getColumn(columnId);\n\tif (!column?.accessorFn) return;\n\trow._valuesCache[columnId] = column.accessorFn(row.original, row.index);\n\treturn row._valuesCache[columnId];\n}\n/**\n* Reads and caches the values used by faceting/grouping for a column.\n*\n* If the column defines `getUniqueValues`, that result is used. Otherwise the\n* row's accessor value is wrapped in a single-item array.\n*\n* @example\n* ```ts\n* const values = row_getUniqueValues(row, 'tags')\n* ```\n*/\nfunction row_getUniqueValues(row, columnId) {\n\tif (hasOwn(row._uniqueValuesCache, columnId)) return row._uniqueValuesCache[columnId];\n\tconst column = row.table.getColumn(columnId);\n\tif (!column?.accessorFn) return;\n\tif (!column.columnDef.getUniqueValues) {\n\t\trow._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n\t\treturn row._uniqueValuesCache[columnId];\n\t}\n\trow._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, row.index);\n\treturn row._uniqueValuesCache[columnId];\n}\n/**\n* Returns a renderable row value for a column.\n*\n* If the accessor value is nullish, the table's `renderFallbackValue` is used\n* instead.\n*\n* @example\n* ```ts\n* const value = row_renderValue(row, 'firstName')\n* ```\n*/\nfunction row_renderValue(row, columnId) {\n\treturn row.getValue(columnId) ?? row.table.options.renderFallbackValue;\n}\n/**\n* Flattens this row's descendant tree into leaf rows.\n*\n* The row itself is not included; only nested `subRows` are walked.\n*\n* @example\n* ```ts\n* const descendants = row_getLeafRows(row)\n* ```\n*/\nfunction row_getLeafRows(row) {\n\treturn flattenBy(row.subRows, (d) => d.subRows);\n}\n/**\n* Returns the deepest structural row depth in the core row model.\n* Root rows are depth `0`, their direct sub-rows are depth `1`, and so on.\n*/\nfunction table_getMaxSubRowDepth(table) {\n\tconst rows = table.getCoreRowModel().flatRows;\n\tlet maxDepth = 0;\n\tfor (let i = 0; i < rows.length; i++) maxDepth = Math.max(maxDepth, rows[i].depth);\n\treturn maxDepth;\n}\n/**\n* Looks up this row's direct parent, if it has one.\n*\n* Parent lookup prefers the core row model for structural parents, then falls\n* back to the pre-pagination row model for generated parent rows.\n*\n* @example\n* ```ts\n* const parent = row_getParentRow(row)\n* ```\n*/\nfunction row_getParentRow(row) {\n\tif (!row.parentId) return;\n\treturn row.table.getCoreRowModel().rowsById[row.parentId] ?? row.table.getRow(row.parentId, true);\n}\n/**\n* Collects this row's ancestor chain from root to direct parent.\n*\n* The current row is not included. Rows without a parent return an empty array.\n*\n* @example\n* ```ts\n* const ancestors = row_getParentRows(row)\n* ```\n*/\nfunction row_getParentRows(row) {\n\tconst parentRows = [];\n\tlet currentRow = row;\n\twhile (true) {\n\t\tconst parentRow = currentRow.getParentRow();\n\t\tif (!parentRow) break;\n\t\tparentRows.push(parentRow);\n\t\tcurrentRow = parentRow;\n\t}\n\treturn parentRows.reverse();\n}\n/**\n* Constructs one cell for each leaf column in this row.\n*\n* The result follows `table.getAllLeafColumns()` order and includes hidden\n* columns; visibility-specific APIs filter this list later.\n*\n* @example\n* ```ts\n* const cells = row_getAllCells(row)\n* ```\n*/\nfunction row_getAllCells(row) {\n\tconst columns = row.table.getAllLeafColumns();\n\tlet cache = row._cellsCache;\n\tif (!cache) cache = row._cellsCache = /* @__PURE__ */ new WeakMap();\n\tconst cells = new Array(columns.length);\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tlet cell = cache.get(column);\n\t\tif (!cell) {\n\t\t\tcell = constructCell(column, row, row.table);\n\t\t\tcache.set(column, cell);\n\t\t}\n\t\tcells[i] = cell;\n\t}\n\treturn cells;\n}\n/**\n* Builds a lookup map of this row's cells keyed by column id.\n*\n* This is the static implementation behind `row.getAllCellsByColumnId()`.\n*\n* @example\n* ```ts\n* const cellsById = row_getAllCellsByColumnId(row)\n* ```\n*/\nfunction row_getAllCellsByColumnId(row) {\n\tconst result = makeObjectMap();\n\tconst cells = row.getAllCells();\n\tfor (let i = 0; i < cells.length; i++) {\n\t\tconst cell = cells[i];\n\t\tresult[cell.column.id] = cell;\n\t}\n\treturn result;\n}\n/**\n* Resolves the stable id for a row.\n*\n* `options.getRowId` wins when provided. Otherwise root rows use their index\n* and child rows append their index to the parent id, such as `0.2`.\n*\n* @example\n* ```ts\n* const id = table_getRowId(originalRow, table, index, parentRow)\n* ```\n*/\nfunction table_getRowId(originalRow, table, index, parent) {\n\treturn table.options.getRowId?.(originalRow, index, parent) ?? (parent ? `${parent.id}.${index}` : String(index));\n}\n/**\n* Looks up a row by id from the current or full row model.\n*\n* By default this searches `table.getRowModel()`. Passing `searchAll` searches\n* the pre-pagination model first, then falls back to the core model.\n*\n* @example\n* ```ts\n* const row = table_getRow(table, rowId, true)\n* ```\n*/\nfunction table_getRow(table, rowId, searchAll) {\n\tlet row = (searchAll ? table.getPrePaginatedRowModel() : table.getRowModel()).rowsById[rowId];\n\tif (!row) {\n\t\trow = table.getCoreRowModel().rowsById[rowId];\n\t\tif (!row) {\n\t\t\tif (process.env.NODE_ENV === \"development\") throw new Error(`getRow could not find row with ID: ${rowId}`);\n\t\t\tthrow new Error();\n\t\t}\n\t}\n\treturn row;\n}\n\n//#endregion\nexport { row_getAllCells, row_getAllCellsByColumnId, row_getDisplayIndex, row_getLeafRows, row_getParentRow, row_getParentRows, row_getUniqueValues, row_getValue, row_renderValue, table_getMaxSubRowDepth, table_getRow, table_getRowId, table_getRowsInDisplayOrder };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { row_getAllCells, row_getAllCellsByColumnId, row_getDisplayIndex, row_getLeafRows, row_getParentRow, row_getParentRows, row_getUniqueValues, row_getValue, row_renderValue, table_getMaxSubRowDepth, table_getRow, table_getRowId, table_getRowsInDisplayOrder } from \"./coreRowsFeature.utils.js\";\n\n//#region src/core/rows/coreRowsFeature.ts\n/**\n* Core feature that creates row APIs for values, cells, and tree traversal.\n*/\nconst coreRowsFeature = {\n\tassignRowPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreRowsFeature\", prototype, table, {\n\t\t\trow_getDisplayIndex: { fn: (row) => row_getDisplayIndex(row) },\n\t\t\trow_getAllCellsByColumnId: {\n\t\t\t\tfn: (row) => row_getAllCellsByColumnId(row),\n\t\t\t\tmemoDeps: (row) => [row.getAllCells()]\n\t\t\t},\n\t\t\trow_getAllCells: {\n\t\t\t\tfn: (row) => row_getAllCells(row),\n\t\t\t\tmemoDeps: (row) => [row.table.getAllLeafColumns()]\n\t\t\t},\n\t\t\trow_getLeafRows: {\n\t\t\t\tfn: (row) => row_getLeafRows(row),\n\t\t\t\tmemoDeps: (row) => [row.subRows]\n\t\t\t},\n\t\t\trow_getParentRow: { fn: (row) => row_getParentRow(row) },\n\t\t\trow_getParentRows: { fn: (row) => row_getParentRows(row) },\n\t\t\trow_getUniqueValues: { fn: (row, columnId) => row_getUniqueValues(row, columnId) },\n\t\t\trow_getValue: { fn: (row, columnId) => row_getValue(row, columnId) },\n\t\t\trow_renderValue: { fn: (row, columnId) => row_renderValue(row, columnId) }\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreRowsFeature\", table, {\n\t\t\ttable_getRowsInDisplayOrder: {\n\t\t\t\tfn: () => table_getRowsInDisplayOrder(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.getPrePaginatedRowModel().rows,\n\t\t\t\t\ttable.options.paginateExpandedRows,\n\t\t\t\t\ttable.options.paginateExpandedRows === false ? table.atoms.expanded?.get() : void 0\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getRowId: { fn: (originalRow, index, parent) => table_getRowId(originalRow, table, index, parent) },\n\t\t\ttable_getRow: { fn: (id, searchAll) => table_getRow(table, id, searchAll) },\n\t\t\ttable_getMaxSubRowDepth: {\n\t\t\t\tfn: () => table_getMaxSubRowDepth(table),\n\t\t\t\tmemoDeps: () => [table.getCoreRowModel()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreRowsFeature };","import { cloneState, functionalUpdate } from \"../../utils.js\";\n\n//#region src/core/table/coreTablesFeature.utils.ts\n/**\n* Synchronizes externally controlled state slices into the table's base atoms.\n*\n* This keeps `options.state` values mirrored in the atom graph so derived\n* atoms, stores, and table APIs read a consistent snapshot.\n*\n* Adapters that update options during their host's render phase pass the\n* state snapshot captured by the committed render as `capturedState` — the\n* shared options object may already hold values from a newer render that\n* never commits. Pass `null` to publish nothing (a captured \"no controlled\n* state\"); omitting the argument reads the current `table.options.state`\n* instead. An optional `compare` suppresses semantically unchanged slice\n* writes; the default remains reference equality.\n*\n* @example\n* ```ts\n* table_syncExternalStateToBaseAtoms(table)\n* table_syncExternalStateToBaseAtoms(table, capturedState ?? null, shallow)\n* ```\n*/\nfunction table_syncExternalStateToBaseAtoms(table, capturedState, compare = (currentState, externalState) => currentState === externalState) {\n\tconst state = capturedState === void 0 ? table.options.state : capturedState;\n\ttable._reactivity.batch(() => {\n\t\tif (state) for (const key in state) {\n\t\t\tconst baseAtom = table.baseAtoms[key];\n\t\t\tif (!baseAtom) continue;\n\t\t\tconst rawExternalState = state[key];\n\t\t\tconst externalState = rawExternalState === void 0 ? table.initialState[key] : rawExternalState;\n\t\t\tif (!compare(table._reactivity.untrack(() => baseAtom.get()), externalState)) baseAtom.set(() => externalState);\n\t\t}\n\t});\n}\n/**\n* Publishes captured controlled state after a host framework commits.\n*\n* Render-phase adapters stage options without synchronizing base atoms, then\n* pass the state captured by the committed render here. The commit signal also\n* invalidates ownership changes when no base atom was written.\n*/\nfunction table_publishExternalState(table, state, compare = (currentState, externalState) => currentState === externalState) {\n\ttable._reactivity.batch(() => {\n\t\ttable_syncExternalStateToBaseAtoms(table, state, compare);\n\t\ttable._reactivity.commit?.();\n\t});\n}\n/**\n* Resets all internal table base atoms to `table.initialState`, then clears\n* transient instance data through registered feature reset hooks.\n*\n* This resets internally owned state slices in a single reactivity batch. Use\n* feature-specific reset APIs when a slice may be externally owned.\n*\n* @example\n* ```ts\n* table_reset(table)\n* ```\n*/\nfunction table_reset(table) {\n\tconst snap = cloneState(table.initialState);\n\ttable._reactivity.batch(() => {\n\t\tconst keys = Object.keys(snap);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key = keys[i];\n\t\t\ttable.baseAtoms[key].set(snap[key]);\n\t\t}\n\t});\n\tconst features = Object.values(table._features);\n\tfor (let i = 0; i < features.length; i++) features[i].resetTableInstanceData?.(table);\n}\n/**\n* Merges new table options with the current resolved options.\n*\n* If `options.mergeOptions` is provided, it owns the merge behavior; otherwise\n* options are shallow-merged. Static options that should never change after\n* initialization are restored on a fresh object so framework merge helpers may\n* return readonly getter/proxy objects.\n*\n* @example\n* ```ts\n* const options = table_mergeOptions(table, nextOptions)\n* ```\n*/\nfunction table_mergeOptions(table, newOptions) {\n\tconst { features, atoms, initialState } = table.options;\n\tif (!table.options.mergeOptions) return {\n\t\t...table.options,\n\t\t...newOptions,\n\t\tfeatures,\n\t\tatoms,\n\t\tinitialState\n\t};\n\tconst mergedOptions = table.options.mergeOptions(table.options, newOptions);\n\tconst descriptors = { ...Object.getOwnPropertyDescriptors(mergedOptions) };\n\treturn Object.defineProperties(Object.create(Object.getPrototypeOf(mergedOptions)), {\n\t\t...descriptors,\n\t\tfeatures: {\n\t\t\tvalue: features,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t},\n\t\tatoms: {\n\t\t\tvalue: atoms,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t},\n\t\tinitialState: {\n\t\t\tvalue: initialState,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t}\n\t});\n}\n/**\n* Updates the table options object.\n*\n* The updater receives the current resolved options and the merged result is\n* immediately assigned to the table instance.\n*\n* @example\n* ```ts\n* table_setOptions(table, (old) => old)\n* table_setOptions(table, (old) => old, { syncExternalState: false })\n* ```\n*/\nfunction table_setOptions(table, updater, options) {\n\tconst mergedOptions = table_mergeOptions(table, functionalUpdate(updater, table.options));\n\tif (table.optionsStore) table.optionsStore.set(() => mergedOptions);\n\telse table.options = mergedOptions;\n\tif (options?.syncExternalState !== false) table_publishExternalState(table, mergedOptions.state ?? null);\n}\n\n//#endregion\nexport { table_mergeOptions, table_publishExternalState, table_reset, table_setOptions, table_syncExternalStateToBaseAtoms };","import { assignTableAPIs } from \"../../utils.js\";\nimport { table_reset, table_setOptions } from \"./coreTablesFeature.utils.js\";\n\n//#region src/core/table/coreTablesFeature.ts\n/**\n* Core feature that adds base table instance APIs such as reset and setOptions.\n*/\nconst coreTablesFeature = { constructTableAPIs: (table) => {\n\tassignTableAPIs(\"coreTablesFeature\", table, {\n\t\ttable_reset: { fn: () => table_reset(table) },\n\t\ttable_setOptions: { fn: (updater) => table_setOptions(table, updater) }\n\t});\n} };\n\n//#endregion\nexport { coreTablesFeature };","import { coreCellsFeature } from \"./cells/coreCellsFeature.js\";\nimport { coreColumnsFeature } from \"./columns/coreColumnsFeature.js\";\nimport { coreHeadersFeature } from \"./headers/coreHeadersFeature.js\";\nimport { coreRowModelsFeature } from \"./row-models/coreRowModelsFeature.js\";\nimport { coreRowsFeature } from \"./rows/coreRowsFeature.js\";\nimport { coreTablesFeature } from \"./table/coreTablesFeature.js\";\n\n//#region src/core/coreFeatures.ts\n/**\n* The built-in core feature set required by every table.\n*\n* These features provide table, column, row, header, cell, and core row-model behavior before optional feature plugins are added.\n*/\nconst coreFeatures = {\n\tcoreCellsFeature,\n\tcoreColumnsFeature,\n\tcoreHeadersFeature,\n\tcoreRowModelsFeature,\n\tcoreRowsFeature,\n\tcoreTablesFeature\n};\n\n//#endregion\nexport { coreFeatures };","//#region src/core/reactivity/coreReactivityFeature.utils.ts\n/**\n* Bridges atom instances to the `Store`/`ReadonlyStore` API by exposing\n* a `state` getter backed by `atom.get()`, and wiring `setState` for\n* writable atoms.\n*\n* @example\n* ```ts\n* const store = atomToStore(atom)\n* ```\n*/\nfunction atomToStore(atom) {\n\tconst store = atom;\n\tObject.defineProperty(atom, \"state\", { get() {\n\t\treturn atom.get();\n\t} });\n\tif (\"set\" in atom) store.setState = atom.set.bind(atom);\n\treturn store;\n}\n\n//#endregion\nexport { atomToStore };","//#region src/shallow.ts\nfunction shallow(objA, objB) {\n\tif (Object.is(objA, objB)) return true;\n\tif (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) return false;\n\tif (objA instanceof Map && objB instanceof Map) {\n\t\tif (objA.size !== objB.size) return false;\n\t\tfor (const [k, v] of objA) if (!objB.has(k) || !Object.is(v, objB.get(k))) return false;\n\t\treturn true;\n\t}\n\tif (objA instanceof Set && objB instanceof Set) {\n\t\tif (objA.size !== objB.size) return false;\n\t\tfor (const v of objA) if (!objB.has(v)) return false;\n\t\treturn true;\n\t}\n\tif (objA instanceof Date && objB instanceof Date) {\n\t\tif (objA.getTime() !== objB.getTime()) return false;\n\t\treturn true;\n\t}\n\tconst keysA = getOwnKeys(objA);\n\tif (keysA.length !== getOwnKeys(objB).length) return false;\n\tfor (let i = 0; i < keysA.length; i++) if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) return false;\n\treturn true;\n}\nfunction getOwnKeys(obj) {\n\treturn Object.keys(obj).concat(Object.getOwnPropertySymbols(obj));\n}\n\n//#endregion\nexport { shallow };\n//# sourceMappingURL=shallow.js.map","import { cloneState, hasOwn } from \"../../utils.js\";\nimport { table_syncExternalStateToBaseAtoms } from \"./coreTablesFeature.utils.js\";\nimport { coreFeatures } from \"../coreFeatures.js\";\nimport { atomToStore } from \"../reactivity/coreReactivityFeature.utils.js\";\nimport { shallow } from \"@tanstack/store\";\n\n//#region src/core/table/constructTable.ts\n/**\n* Builds the initial table state from registered features and user initial state.\n*\n* Each feature contributes its default state before user-provided `initialState` values are merged in.\n*/\nfunction getInitialTableState(features, initialState = {}) {\n\tObject.values(features).forEach((feature) => {\n\t\tinitialState = feature.getInitialState?.(initialState) ?? initialState;\n\t});\n\treturn cloneState(initialState);\n}\n/**\n* Constructs a table instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructTable(tableOptions) {\n\tconst _reactivity = tableOptions.features.coreReactivityFeature;\n\tconst { aggregationFns, columnMeta: _columnMeta, coreRowModel, expandedRowModel, facetedMinMaxValues, facetedRowModel, facetedUniqueValues, filterFns, filterMeta: _filterMeta, filteredRowModel, groupedRowModel, paginatedRowModel, sortFns, sortedRowModel, tableMeta: _tableMeta, ...features } = tableOptions.features;\n\tconst table = {\n\t\t_cellInstanceInitFns: [],\n\t\t_columnInstanceInitFns: [],\n\t\t_features: {\n\t\t\t...coreFeatures,\n\t\t\t...features\n\t\t},\n\t\t_headerGroupInstanceInitFns: [],\n\t\t_headerInstanceInitFns: [],\n\t\t_reactivity,\n\t\t_rowInstanceInitFns: [],\n\t\t_rowModelFns: {\n\t\t\taggregationFns,\n\t\t\tfilterFns,\n\t\t\tsortFns\n\t\t},\n\t\t_rowModels: {},\n\t\tatoms: {},\n\t\tbaseAtoms: {}\n\t};\n\tconst featuresList = Object.values(table._features);\n\tconst mergedOptions = {\n\t\t...featuresList.reduce((obj, feature) => {\n\t\t\treturn Object.assign(obj, feature.getDefaultTableOptions?.(table));\n\t\t}, {}),\n\t\t...tableOptions\n\t};\n\tif (_reactivity.wrapExternalAtoms && mergedOptions.atoms) for (const [atomKey, _atom] of Object.entries(mergedOptions.atoms)) {\n\t\tconst atom = _atom;\n\t\tconst wrappedAtom = _reactivity.createWritableAtom(atom.get(), { debugName: `externalAtom/${atomKey}` });\n\t\tmergedOptions.atoms[atomKey] = wrappedAtom;\n\t\tlet syncExternal = false;\n\t\tconst syncAtomToWrappedSub = atom.subscribe((value) => {\n\t\t\tif (syncExternal) return;\n\t\t\twrappedAtom.set(value);\n\t\t});\n\t\tconst syncWrappedToAtomSub = wrappedAtom.subscribe((value) => {\n\t\t\tsyncExternal = true;\n\t\t\tatom.set(value);\n\t\t\tsyncExternal = false;\n\t\t});\n\t\t_reactivity.addSubscription(syncAtomToWrappedSub);\n\t\t_reactivity.addSubscription(syncWrappedToAtomSub);\n\t}\n\tif (_reactivity.createOptionsStore) {\n\t\ttable.optionsStore = _reactivity.createWritableAtom(mergedOptions, { debugName: \"table/optionsStore\" });\n\t\tObject.defineProperty(table, \"options\", {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget() {\n\t\t\t\treturn table.optionsStore.get();\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\ttable.optionsStore.set(() => value);\n\t\t\t}\n\t\t});\n\t} else table.options = mergedOptions;\n\ttable.initialState = getInitialTableState(table._features, table.options.initialState);\n\tconst stateKeys = Object.keys(table.initialState);\n\tfor (let i = 0; i < stateKeys.length; i++) {\n\t\tconst key = stateKeys[i];\n\t\ttable.baseAtoms[key] = _reactivity.createWritableAtom(table.initialState[key], { debugName: `table/baseAtoms/${key}` });\n\t\ttable.atoms[key] = _reactivity.createReadonlyAtom(() => {\n\t\t\tconst options = table.options;\n\t\t\tconst externalAtom = options.atoms?.[key];\n\t\t\tconst reactiveState = externalAtom ? externalAtom.get() : table.baseAtoms[key].get();\n\t\t\tif (externalAtom) return reactiveState;\n\t\t\tconst controlledState = options.state;\n\t\t\tif (controlledState && hasOwn(controlledState, key)) {\n\t\t\t\tconst controlledValue = controlledState[key];\n\t\t\t\treturn controlledValue === void 0 ? table.initialState[key] : controlledValue;\n\t\t\t}\n\t\t\treturn reactiveState;\n\t\t}, { debugName: `table/atoms/${key}` });\n\t}\n\ttable_syncExternalStateToBaseAtoms(table);\n\ttable.store = atomToStore(_reactivity.createReadonlyAtom(() => {\n\t\tconst snapshot = {};\n\t\tfor (let i = 0; i < stateKeys.length; i++) {\n\t\t\tconst key = stateKeys[i];\n\t\t\tsnapshot[key] = table.atoms[key].get();\n\t\t}\n\t\treturn snapshot;\n\t}, {\n\t\tcompare: shallow,\n\t\tdebugName: \"table/store\"\n\t}));\n\tfor (let i = 0; i < featuresList.length; i++) {\n\t\tconst feature = featuresList[i];\n\t\tfeature.initTableInstanceData?.(table);\n\t\tif (feature.initCellInstanceData) table._cellInstanceInitFns.push(feature.initCellInstanceData.bind(feature));\n\t\tif (feature.initColumnInstanceData) table._columnInstanceInitFns.push(feature.initColumnInstanceData.bind(feature));\n\t\tif (feature.initHeaderGroupInstanceData) table._headerGroupInstanceInitFns.push(feature.initHeaderGroupInstanceData.bind(feature));\n\t\tif (feature.initHeaderInstanceData) table._headerInstanceInitFns.push(feature.initHeaderInstanceData.bind(feature));\n\t\tif (feature.initRowInstanceData) table._rowInstanceInitFns.push(feature.initRowInstanceData.bind(feature));\n\t\tfeature.constructTableAPIs?.(table);\n\t}\n\tif (process.env.NODE_ENV === \"development\" && (tableOptions.debugAll || tableOptions.debugTable)) {\n\t\tconst features = Object.keys(table._features);\n\t\tconst rowModels = Object.entries({\n\t\t\tcoreRowModel,\n\t\t\tfilteredRowModel,\n\t\t\tgroupedRowModel,\n\t\t\tsortedRowModel,\n\t\t\texpandedRowModel,\n\t\t\tpaginatedRowModel,\n\t\t\tfacetedRowModel,\n\t\t\tfacetedMinMaxValues,\n\t\t\tfacetedUniqueValues\n\t\t}).filter(([, factory]) => factory).map(([key]) => key);\n\t\tconst states = Object.keys(table.initialState);\n\t\tconsole.log(`Constructing Table Instance\n\n Features: ${features.join(\"\\n \")}\n\n Row Models: ${rowModels.length ? rowModels.join(\"\\n \") : \"(none)\"}\n\n States: ${states.join(\"\\n \")}\\n`, { table });\n\t}\n\treturn table;\n}\n\n//#endregion\nexport { constructTable, getInitialTableState };","import { callMemoOrStaticFn, cloneState, hasOwn, makeObjectMap } from \"../../utils.js\";\nimport { table_getCenterHeaderGroups, table_getEndHeaderGroups, table_getPinnedVisibleLeafColumns, table_getStartHeaderGroups } from \"../column-pinning/columnPinningFeature.utils.js\";\n\n//#region src/features/column-sizing/columnSizingFeature.utils.ts\n/**\n* Creates the default committed column sizing state.\n*\n* The feature default is an empty map, so columns fall back to their column def\n* size or the built-in sizing defaults.\n*\n* @example\n* ```ts\n* const sizing = getDefaultColumnSizingState()\n* ```\n*/\nfunction getDefaultColumnSizingState() {\n\treturn makeObjectMap();\n}\n/**\n* Creates the built-in sizing defaults for column definitions.\n*\n* Columns default to `size: 150`, `minSize: 20`, and\n* `maxSize: Number.MAX_SAFE_INTEGER` unless overridden by column definitions or\n* table defaults.\n*\n* @example\n* ```ts\n* const defaults = getDefaultColumnSizingColumnDef()\n* ```\n*/\nfunction getDefaultColumnSizingColumnDef() {\n\treturn {\n\t\tsize: 150,\n\t\tminSize: 20,\n\t\tmaxSize: Number.MAX_SAFE_INTEGER\n\t};\n}\n/**\n* Resolves a column's current pixel size.\n*\n* Committed `state.columnSizing[column.id]` wins over `columnDef.size`, then the\n* built-in default size. The result is clamped between min and max size.\n*\n* @example\n* ```ts\n* const width = column_getSize(column)\n* ```\n*/\nfunction column_getSize(column) {\n\tconst defaultSizes = getDefaultColumnSizingColumnDef();\n\tconst columnSizing = column.table.atoms.columnSizing?.get();\n\tconst columnSize = columnSizing && hasOwn(columnSizing, column.id) ? columnSizing[column.id] : void 0;\n\treturn Math.min(Math.max(column.columnDef.minSize ?? defaultSizes.minSize, columnSize ?? column.columnDef.size ?? defaultSizes.size), column.columnDef.maxSize ?? defaultSizes.maxSize);\n}\nfunction buildColumnOffsets(columns) {\n\tconst starts = makeObjectMap();\n\tconst afters = makeObjectMap();\n\tconst sizes = new Array(columns.length);\n\tlet start = 0;\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tconst size = callMemoOrStaticFn(column, \"getSize\", column_getSize);\n\t\tsizes[i] = size;\n\t\tstarts[column.id] = start;\n\t\tstart += size;\n\t}\n\tlet after = 0;\n\tfor (let i = columns.length - 1; i >= 0; i--) {\n\t\tafters[columns[i].id] = after;\n\t\tafter += sizes[i];\n\t}\n\treturn {\n\t\tstarts,\n\t\tafters\n\t};\n}\n/**\n* Builds start and after offset maps for every visible leaf column, computed\n* once per pinning region plus the full visible list.\n*\n* A single table-level memo of this result backs all `column.getStart()` and\n* `column.getAfter()` calls with O(1) lookups.\n*\n* @example\n* ```ts\n* const offsets = table_getColumnOffsets(table)\n* const startOffset = offsets.start.starts[column.id]\n* ```\n*/\nfunction table_getColumnOffsets(table) {\n\treturn {\n\t\tall: buildColumnOffsets(table_getPinnedVisibleLeafColumns(table)),\n\t\tcenter: buildColumnOffsets(table_getPinnedVisibleLeafColumns(table, \"center\")),\n\t\tstart: buildColumnOffsets(table_getPinnedVisibleLeafColumns(table, \"start\")),\n\t\tend: buildColumnOffsets(table_getPinnedVisibleLeafColumns(table, \"end\"))\n\t};\n}\nfunction toOffsetsKey(position) {\n\treturn position === \"start\" ? \"start\" : position === \"end\" ? \"end\" : position === \"center\" ? \"center\" : \"all\";\n}\n/**\n* Computes the offset from the start edge of a pinning region to this column.\n*\n* The value is the sum of all previous visible leaf column sizes in the\n* requested `'start'`, `'center'`, or `'end'` region.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* const startOffset = column_getStart(column, 'start')\n* ```\n*/\nfunction column_getStart(column, position) {\n\treturn callMemoOrStaticFn(column.table, \"getColumnOffsets\", table_getColumnOffsets)[toOffsetsKey(position)].starts[column.id] ?? 0;\n}\n/**\n* Computes the offset from the end edge of a pinning region after this column.\n*\n* The value is the sum of all following visible leaf column sizes in the\n* requested region.\n*\n* @example\n* ```ts\n* const endOffset = column_getAfter(column, 'end')\n* ```\n*/\nfunction column_getAfter(column, position) {\n\treturn callMemoOrStaticFn(column.table, \"getColumnOffsets\", table_getColumnOffsets)[toOffsetsKey(position)].afters[column.id] ?? 0;\n}\n/**\n* Removes this column's committed size override.\n*\n* After reset, the column resolves size from `columnDef.size` or built-in\n* defaults again.\n*\n* @example\n* ```ts\n* column_resetSize(column)\n* ```\n*/\nfunction column_resetSize(column) {\n\ttable_setColumnSizing(column.table, (old) => {\n\t\tconst rest = makeObjectMap();\n\t\tconst columnIds = Object.keys(old);\n\t\tfor (let i = 0; i < columnIds.length; i++) {\n\t\t\tconst columnId = columnIds[i];\n\t\t\tif (columnId !== column.id) rest[columnId] = old[columnId];\n\t\t}\n\t\treturn rest;\n\t});\n}\nfunction sumHeaderSize(header) {\n\tif (!header.subHeaders.length) return column_getSize(header.column);\n\tlet sum = 0;\n\tfor (let i = 0; i < header.subHeaders.length; i++) sum += sumHeaderSize(header.subHeaders[i]);\n\treturn sum;\n}\n/**\n* Computes a header's rendered size from its leaf headers.\n*\n* Group headers sum the sizes of all descendant leaf columns. Leaf headers use\n* their column's current size.\n*\n* @example\n* ```ts\n* const width = header_getSize(header)\n* ```\n*/\nfunction header_getSize(header) {\n\treturn sumHeaderSize(header);\n}\n/**\n* Computes a header's offset from the start of its header group.\n*\n* The offset is the previous sibling header's start plus size, or `0` for the\n* first header in the group.\n*\n* @example\n* ```ts\n* const offset = header_getStart(header)\n* ```\n*/\nfunction header_getStart(header) {\n\tif (header.index > 0) {\n\t\tconst prevSiblingHeader = header.headerGroup?.headers[header.index - 1];\n\t\tif (prevSiblingHeader) return callMemoOrStaticFn(prevSiblingHeader, \"getStart\", header_getStart) + callMemoOrStaticFn(prevSiblingHeader, \"getSize\", header_getSize);\n\t}\n\treturn 0;\n}\n/**\n* Routes a committed column sizing updater through the table's sizing handler.\n*\n* The updater may be a next size map or a function of the previous map,\n* matching the instance `table.setColumnSizing` behavior.\n*\n* @example\n* ```ts\n* table_setColumnSizing(table, (old) => ({ ...old, age: 96 }))\n* ```\n*/\nfunction table_setColumnSizing(table, updater) {\n\ttable.options.onColumnSizingChange?.(updater);\n}\n/**\n* Resets `columnSizing` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnSizing` when it\n* exists. Passing `true` ignores initial state and resets to `{}`.\n*\n* @example\n* ```ts\n* table_resetColumnSizing(table)\n* table_resetColumnSizing(table, true)\n* ```\n*/\nfunction table_resetColumnSizing(table, defaultState) {\n\ttable_setColumnSizing(table, defaultState ? makeObjectMap() : Object.assign(makeObjectMap(), cloneState(table.initialState.columnSizing ?? {})));\n}\n/**\n* Sums the rendered size of the full table header row.\n*\n* This includes start, center, and end columns in the main header group.\n*\n* @example\n* ```ts\n* const width = table_getTotalSize(table)\n* ```\n*/\nfunction table_getTotalSize(table) {\n\treturn table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n\t\treturn sum + header_getSize(header);\n\t}, 0) ?? 0;\n}\n/**\n* Sums the rendered size of the logical start pinned header region.\n*\n* An empty start pinning region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getStartTotalSize(table)\n* ```\n*/\nfunction table_getStartTotalSize(table) {\n\treturn callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)[0]?.headers.reduce((sum, header) => {\n\t\treturn sum + header_getSize(header);\n\t}, 0) ?? 0;\n}\n/**\n* Sums the rendered size of the center, unpinned header region.\n*\n* An empty center region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getCenterTotalSize(table)\n* ```\n*/\nfunction table_getCenterTotalSize(table) {\n\treturn callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)[0]?.headers.reduce((sum, header) => {\n\t\treturn sum + header_getSize(header);\n\t}, 0) ?? 0;\n}\n/**\n* Sums the rendered size of the logical end pinned header region.\n*\n* An empty end pinning region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getEndTotalSize(table)\n* ```\n*/\nfunction table_getEndTotalSize(table) {\n\treturn callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)[0]?.headers.reduce((sum, header) => {\n\t\treturn sum + header_getSize(header);\n\t}, 0) ?? 0;\n}\n\n//#endregion\nexport { column_getAfter, column_getSize, column_getStart, column_resetSize, getDefaultColumnSizingColumnDef, getDefaultColumnSizingState, header_getSize, header_getStart, table_getCenterTotalSize, table_getColumnOffsets, table_getEndTotalSize, table_getStartTotalSize, table_getTotalSize, table_resetColumnSizing, table_setColumnSizing };","import { cloneState, makeObjectMap } from \"../../utils.js\";\nimport { column_getSize, header_getSize, table_setColumnSizing } from \"../column-sizing/columnSizingFeature.utils.js\";\n\n//#region src/features/column-resizing/columnResizingFeature.utils.ts\n/**\n* Creates the default transient column resizing state.\n*\n* The feature default represents no active drag interaction. Reset APIs use\n* this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const resizeInfo = getDefaultColumnResizingState()\n* ```\n*/\nfunction getDefaultColumnResizingState() {\n\treturn {\n\t\tstartOffset: null,\n\t\tstartSize: null,\n\t\tdeltaOffset: null,\n\t\tdeltaPercentage: null,\n\t\tisResizingColumn: false,\n\t\tcolumnSizingStart: []\n\t};\n}\n/**\n* Checks whether this column can start a resize interaction.\n*\n* Both `columnDef.enableResizing` and table `enableColumnResizing` default to\n* `true`.\n*\n* @example\n* ```ts\n* const canResize = column_getCanResize(column)\n* ```\n*/\nfunction column_getCanResize(column) {\n\treturn (column.columnDef.enableResizing ?? true) && (column.table.options.enableColumnResizing ?? true);\n}\n/**\n* Checks whether this column is the active column resize target.\n*\n* The value is read from `state.columnResizing.isResizingColumn`.\n*\n* @example\n* ```ts\n* const isResizing = column_getIsResizing(column)\n* ```\n*/\nfunction column_getIsResizing(column) {\n\treturn column.table.atoms.columnResizing?.get()?.isResizingColumn === column.id;\n}\n/**\n* Creates the pointer/touch start handler for resizing a header.\n*\n* The handler records starting sizes for all leaf headers, tracks drag deltas,\n* writes transient resize info, and commits column sizes on change or drag end\n* depending on `columnResizeMode`.\n*\n* @example\n* ```ts\n* const onMouseDown = header_getResizeHandler(header)\n* ```\n*/\nfunction header_getResizeHandler(header, _contextDocument) {\n\tconst column = header.table.getColumn(header.column.id);\n\tconst canResize = column_getCanResize(column);\n\treturn (event) => {\n\t\tif (!canResize) return;\n\t\tif (isTouchStartEvent(event)) {\n\t\t\tif (event.touches.length > 1) return;\n\t\t}\n\t\tconst startSize = header_getSize(header);\n\t\tconst columnSizingStart = header.getLeafHeaders().map((leafHeader) => [leafHeader.column.id, column_getSize(leafHeader.column)]);\n\t\tconst clientX = isTouchStartEvent(event) ? Math.round(event.touches[0].clientX) : event.clientX;\n\t\tconst newColumnSizing = makeObjectMap();\n\t\tconst updateOffset = (eventType, clientXPos) => {\n\t\t\tif (typeof clientXPos !== \"number\") return;\n\t\t\tconst table = column.table;\n\t\t\tconst isCommit = table.options.columnResizeMode === \"onChange\" || eventType === \"end\";\n\t\t\ttable._reactivity.batch(() => {\n\t\t\t\ttable_setColumnResizing(table, (old) => {\n\t\t\t\t\tconst deltaDirection = table.options.columnResizeDirection === \"rtl\" ? -1 : 1;\n\t\t\t\t\tconst deltaOffset = (clientXPos - (old.startOffset ?? 0)) * deltaDirection;\n\t\t\t\t\tconst startSize = old.startSize ?? 0;\n\t\t\t\t\tconst deltaPercentage = Math.max(startSize > 0 ? deltaOffset / startSize : 0, -.999999);\n\t\t\t\t\tif (isCommit) {\n\t\t\t\t\t\tconst columnSizingStart = old.columnSizingStart;\n\t\t\t\t\t\tfor (let i = 0; i < columnSizingStart.length; i++) {\n\t\t\t\t\t\t\tconst entry = columnSizingStart[i];\n\t\t\t\t\t\t\tconst headerSize = entry[1];\n\t\t\t\t\t\t\tnewColumnSizing[entry[0]] = Math.round(Math.max(headerSize > 0 ? headerSize + headerSize * deltaPercentage : deltaOffset / columnSizingStart.length, 0) * 100) / 100;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...old,\n\t\t\t\t\t\tdeltaOffset,\n\t\t\t\t\t\tdeltaPercentage\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tif (isCommit) table_setColumnSizing(table, (old) => Object.assign(makeObjectMap(), old, newColumnSizing));\n\t\t\t});\n\t\t};\n\t\tlet moveRafId = null;\n\t\tlet hasPendingMove = false;\n\t\tlet latestMoveX;\n\t\tconst flushMove = () => {\n\t\t\tif (hasPendingMove) {\n\t\t\t\thasPendingMove = false;\n\t\t\t\tupdateOffset(\"move\", latestMoveX);\n\t\t\t\tmoveRafId = requestAnimationFrame(flushMove);\n\t\t\t} else moveRafId = null;\n\t\t};\n\t\tconst onMove = (clientXPos) => {\n\t\t\tlatestMoveX = clientXPos;\n\t\t\tif (typeof requestAnimationFrame !== \"function\") {\n\t\t\t\tupdateOffset(\"move\", clientXPos);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (moveRafId !== null) {\n\t\t\t\thasPendingMove = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tupdateOffset(\"move\", clientXPos);\n\t\t\tmoveRafId = requestAnimationFrame(flushMove);\n\t\t};\n\t\tconst onEnd = (clientXPos) => {\n\t\t\tif (moveRafId !== null) {\n\t\t\t\tcancelAnimationFrame(moveRafId);\n\t\t\t\tmoveRafId = null;\n\t\t\t\thasPendingMove = false;\n\t\t\t}\n\t\t\tcolumn.table._reactivity.batch(() => {\n\t\t\t\tupdateOffset(\"end\", clientXPos ?? latestMoveX);\n\t\t\t\ttable_setColumnResizing(column.table, (old) => ({\n\t\t\t\t\t...old,\n\t\t\t\t\tisResizingColumn: false,\n\t\t\t\t\tstartOffset: null,\n\t\t\t\t\tstartSize: null,\n\t\t\t\t\tdeltaOffset: null,\n\t\t\t\t\tdeltaPercentage: null,\n\t\t\t\t\tcolumnSizingStart: []\n\t\t\t\t}));\n\t\t\t});\n\t\t};\n\t\tconst contextDocument = _contextDocument || (typeof document !== \"undefined\" ? document : null);\n\t\tconst mouseEvents = {\n\t\t\tmoveHandler: (e) => onMove(e.clientX),\n\t\t\tupHandler: (e) => {\n\t\t\t\tcontextDocument?.removeEventListener(\"mousemove\", mouseEvents.moveHandler);\n\t\t\t\tcontextDocument?.removeEventListener(\"mouseup\", mouseEvents.upHandler);\n\t\t\t\tonEnd(e.clientX);\n\t\t\t}\n\t\t};\n\t\tconst touchEvents = {\n\t\t\tmoveHandler: (touchEvent) => {\n\t\t\t\tif (touchEvent.cancelable) {\n\t\t\t\t\ttouchEvent.preventDefault();\n\t\t\t\t\ttouchEvent.stopPropagation();\n\t\t\t\t}\n\t\t\t\tonMove(touchEvent.touches[0].clientX);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tupHandler: (e) => {\n\t\t\t\tremoveTouchEvents();\n\t\t\t\tif (e.cancelable) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tonEnd(e.touches[0]?.clientX);\n\t\t\t},\n\t\t\tcancelHandler: () => {\n\t\t\t\tremoveTouchEvents();\n\t\t\t\tonEnd();\n\t\t\t}\n\t\t};\n\t\tconst removeTouchEvents = () => {\n\t\t\tcontextDocument?.removeEventListener(\"touchmove\", touchEvents.moveHandler);\n\t\t\tcontextDocument?.removeEventListener(\"touchend\", touchEvents.upHandler);\n\t\t\tcontextDocument?.removeEventListener(\"touchcancel\", touchEvents.cancelHandler);\n\t\t};\n\t\tconst passiveIfSupported = passiveEventSupported() ? { passive: false } : false;\n\t\tif (isTouchStartEvent(event)) {\n\t\t\tcontextDocument?.addEventListener(\"touchmove\", touchEvents.moveHandler, passiveIfSupported);\n\t\t\tcontextDocument?.addEventListener(\"touchend\", touchEvents.upHandler, passiveIfSupported);\n\t\t\tcontextDocument?.addEventListener(\"touchcancel\", touchEvents.cancelHandler, passiveIfSupported);\n\t\t} else {\n\t\t\tcontextDocument?.addEventListener(\"mousemove\", mouseEvents.moveHandler, passiveIfSupported);\n\t\t\tcontextDocument?.addEventListener(\"mouseup\", mouseEvents.upHandler, passiveIfSupported);\n\t\t}\n\t\ttable_setColumnResizing(column.table, (old) => ({\n\t\t\t...old,\n\t\t\tstartOffset: clientX,\n\t\t\tstartSize,\n\t\t\tdeltaOffset: 0,\n\t\t\tdeltaPercentage: 0,\n\t\t\tcolumnSizingStart,\n\t\t\tisResizingColumn: column.id\n\t\t}));\n\t};\n}\n/**\n* Routes a transient column resizing updater through the table's resize handler.\n*\n* This state tracks the active drag interaction; committed widths live in\n* `columnSizing`.\n*\n* @example\n* ```ts\n* table_setColumnResizing(table, (old) => ({ ...old, deltaOffset: 12 }))\n* ```\n*/\nfunction table_setColumnResizing(table, updater) {\n\ttable.options.onColumnResizingChange?.(updater);\n}\n/**\n* Resets `columnResizing` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnResizing` when\n* it exists. Passing `true` ignores initial state and resets to the no-drag\n* default state.\n*\n* @example\n* ```ts\n* table_resetHeaderSizeInfo(table)\n* table_resetHeaderSizeInfo(table, true)\n* ```\n*/\nfunction table_resetHeaderSizeInfo(table, defaultState) {\n\ttable_setColumnResizing(table, defaultState ? getDefaultColumnResizingState() : cloneState(table.initialState.columnResizing ?? getDefaultColumnResizingState()));\n}\nlet passiveSupported = null;\n/**\n* Detects whether the current environment supports passive event listeners.\n*\n* Column resizing uses this to register pointer and touch listeners with\n* `passive: false` only when the environment understands passive options.\n*\n* @example\n* ```ts\n* const canUsePassiveListeners = passiveEventSupported()\n* ```\n*/\nfunction passiveEventSupported() {\n\tif (typeof passiveSupported === \"boolean\") return passiveSupported;\n\tlet supported = false;\n\ttry {\n\t\tconst options = { get passive() {\n\t\t\tsupported = true;\n\t\t\treturn false;\n\t\t} };\n\t\tconst noop = () => {};\n\t\twindow.addEventListener(\"test\", noop, options);\n\t\twindow.removeEventListener(\"test\", noop);\n\t} catch (err) {\n\t\tsupported = false;\n\t}\n\tpassiveSupported = supported;\n\treturn passiveSupported;\n}\n/**\n* Narrows an unknown event to a `touchstart` event.\n*\n* Column resizing uses this before reading touch coordinates and installing\n* touch-specific listeners.\n*\n* @example\n* ```ts\n* const isTouch = isTouchStartEvent(event)\n* ```\n*/\nfunction isTouchStartEvent(e) {\n\treturn e.type === \"touchstart\";\n}\n\n//#endregion\nexport { column_getCanResize, column_getIsResizing, getDefaultColumnResizingState, header_getResizeHandler, isTouchStartEvent, passiveEventSupported, table_resetHeaderSizeInfo, table_setColumnResizing };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { column_getCanResize, column_getIsResizing, getDefaultColumnResizingState, header_getResizeHandler, table_resetHeaderSizeInfo, table_setColumnResizing } from \"./columnResizingFeature.utils.js\";\n\n//#region src/features/column-resizing/columnResizingFeature.ts\n/**\n* Feature that adds column resizing state, options, and resize handlers.\n*/\nconst columnResizingFeature = {\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\tcolumnResizing: getDefaultColumnResizingState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn {\n\t\t\tcolumnResizeMode: \"onEnd\",\n\t\t\tcolumnResizeDirection: \"ltr\",\n\t\t\tonColumnResizingChange: makeStateUpdater(\"columnResizing\", table)\n\t\t};\n\t},\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnResizingFeature\", prototype, table, {\n\t\t\tcolumn_getCanResize: { fn: (column) => column_getCanResize(column) },\n\t\t\tcolumn_getIsResizing: { fn: (column) => column_getIsResizing(column) }\n\t\t});\n\t},\n\tassignHeaderPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnResizingFeature\", prototype, table, { header_getResizeHandler: { fn: (header, _contextDocument) => header_getResizeHandler(header, _contextDocument) } });\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"columnResizingFeature\", table, {\n\t\t\ttable_setColumnResizing: { fn: (updater) => table_setColumnResizing(table, updater) },\n\t\t\ttable_resetHeaderSizeInfo: { fn: (defaultState) => table_resetHeaderSizeInfo(table, defaultState) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { columnResizingFeature };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { column_getAfter, column_getSize, column_getStart, column_resetSize, getDefaultColumnSizingColumnDef, getDefaultColumnSizingState, header_getSize, header_getStart, table_getCenterTotalSize, table_getColumnOffsets, table_getEndTotalSize, table_getStartTotalSize, table_getTotalSize, table_resetColumnSizing, table_setColumnSizing } from \"./columnSizingFeature.utils.js\";\n\n//#region src/features/column-sizing/columnSizingFeature.ts\n/**\n* Feature that adds column sizing state, defaults, and size measurement APIs.\n*/\nconst columnSizingFeature = {\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\tcolumnSizing: getDefaultColumnSizingState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultColumnDef: () => {\n\t\treturn getDefaultColumnSizingColumnDef();\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn { onColumnSizingChange: makeStateUpdater(\"columnSizing\", table) };\n\t},\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnSizingFeature\", prototype, table, {\n\t\t\tcolumn_getSize: {\n\t\t\t\tfn: (column) => column_getSize(column),\n\t\t\t\tmemoDeps: (column) => [table.options.columns, table.atoms.columnSizing?.get()?.[column.id]]\n\t\t\t},\n\t\t\tcolumn_getStart: { fn: (column, position) => column_getStart(column, position) },\n\t\t\tcolumn_getAfter: { fn: (column, position) => column_getAfter(column, position) },\n\t\t\tcolumn_resetSize: { fn: (column) => column_resetSize(column) }\n\t\t});\n\t},\n\tassignHeaderPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnSizingFeature\", prototype, table, {\n\t\t\theader_getSize: {\n\t\t\t\tfn: (header) => header_getSize(header),\n\t\t\t\tmemoDeps: (header) => [table.options.columns, header.column.columns.length > 0 ? table.atoms.columnSizing?.get() : table.atoms.columnSizing?.get()?.[header.column.id]]\n\t\t\t},\n\t\t\theader_getStart: {\n\t\t\t\tfn: (header) => header_getStart(header),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnSizing?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"columnSizingFeature\", table, {\n\t\t\ttable_getColumnOffsets: {\n\t\t\t\tfn: () => table_getColumnOffsets(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnSizing?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_setColumnSizing: { fn: (updater) => table_setColumnSizing(table, updater) },\n\t\t\ttable_resetColumnSizing: { fn: (defaultState) => table_resetColumnSizing(table, defaultState) },\n\t\t\ttable_getTotalSize: {\n\t\t\t\tfn: () => table_getTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getStartTotalSize: {\n\t\t\t\tfn: () => table_getStartTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getCenterTotalSize: {\n\t\t\t\tfn: () => table_getCenterTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getEndTotalSize: {\n\t\t\t\tfn: () => table_getEndTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { columnSizingFeature };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { column_getCanHide, column_getIsVisible, column_getToggleVisibilityHandler, column_toggleVisibility, getDefaultColumnVisibilityState, row_getVisibleCells, row_getVisibleCellsByColumnId, table_getIsAllColumnsVisible, table_getIsSomeColumnsVisible, table_getToggleAllColumnsVisibilityHandler, table_getVisibleFlatColumns, table_getVisibleLeafColumns, table_resetColumnVisibility, table_setColumnVisibility, table_toggleAllColumnsVisible } from \"./columnVisibilityFeature.utils.js\";\n\n//#region src/features/column-visibility/columnVisibilityFeature.ts\n/**\n* Feature that adds column visibility state and APIs for hiding and showing columns.\n*/\nconst columnVisibilityFeature = {\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\tcolumnVisibility: getDefaultColumnVisibilityState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn { onColumnVisibilityChange: makeStateUpdater(\"columnVisibility\", table) };\n\t},\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnVisibilityFeature\", prototype, table, {\n\t\t\tcolumn_getIsVisible: {\n\t\t\t\tfn: (column) => column_getIsVisible(column),\n\t\t\t\tmemoDeps: (column) => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\tcolumn.columns\n\t\t\t\t]\n\t\t\t},\n\t\t\tcolumn_getCanHide: { fn: (column) => column_getCanHide(column) },\n\t\t\tcolumn_getToggleVisibilityHandler: { fn: (column) => column_getToggleVisibilityHandler(column) },\n\t\t\tcolumn_toggleVisibility: { fn: (column, visible) => column_toggleVisibility(column, visible) }\n\t\t});\n\t},\n\tassignRowPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnVisibilityFeature\", prototype, table, {\n\t\t\trow_getVisibleCells: {\n\t\t\t\tfn: (row) => row_getVisibleCells(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.getAllCells(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\trow_getVisibleCellsByColumnId: {\n\t\t\t\tfn: (row) => row_getVisibleCellsByColumnId(row),\n\t\t\t\tmemoDeps: (row) => [row.getAllCells(), table.atoms.columnVisibility?.get()]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"columnVisibilityFeature\", table, {\n\t\t\ttable_getVisibleFlatColumns: {\n\t\t\t\tfn: () => table_getVisibleFlatColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getVisibleLeafColumns: {\n\t\t\t\tfn: () => table_getVisibleLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_setColumnVisibility: { fn: (updater) => table_setColumnVisibility(table, updater) },\n\t\t\ttable_resetColumnVisibility: { fn: (defaultState) => table_resetColumnVisibility(table, defaultState) },\n\t\t\ttable_toggleAllColumnsVisible: { fn: (value) => table_toggleAllColumnsVisible(table, value) },\n\t\t\ttable_getIsAllColumnsVisible: { fn: () => table_getIsAllColumnsVisible(table) },\n\t\t\ttable_getIsSomeColumnsVisible: { fn: () => table_getIsSomeColumnsVisible(table) },\n\t\t\ttable_getToggleAllColumnsVisibilityHandler: { fn: () => table_getToggleAllColumnsVisibilityHandler(table) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { columnVisibilityFeature };","import { callMemoOrStaticFn, cloneState, copyInstancePropertiesWithoutMemos, hasOwn, makeObjectMap } from \"../../utils.js\";\n\n//#region src/features/row-selection/rowSelectionFeature.utils.ts\n/**\n* Creates the default row selection state.\n*\n* The feature default is an empty map, meaning no rows are selected. Reset APIs\n* use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const selection = getDefaultRowSelectionState()\n* ```\n*/\nfunction getDefaultRowSelectionState() {\n\treturn makeObjectMap();\n}\n/**\n* Routes a row selection updater through the table's selection change handler.\n*\n* The updater may be a next selection map or a function of the previous map,\n* matching the instance `table.setRowSelection` behavior.\n*\n* @example\n* ```ts\n* table_setRowSelection(table, (old) => ({ ...old, [rowId]: true }))\n* ```\n*/\nfunction table_setRowSelection(table, updater) {\n\ttable.options.onRowSelectionChange?.(updater);\n}\n/**\n* Resets `rowSelection` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.rowSelection` when it\n* exists. Passing `true` ignores initial state and resets to `{}`.\n*\n* @example\n* ```ts\n* table_resetRowSelection(table)\n* table_resetRowSelection(table, true)\n* ```\n*/\nfunction table_resetRowSelection(table, defaultState) {\n\ttable._lastSelectedRowId = null;\n\ttable_setRowSelection(table, defaultState ? makeObjectMap() : Object.assign(makeObjectMap(), cloneState(table.initialState.rowSelection ?? {})));\n}\n/**\n* Selects or deselects every selectable row before grouping.\n*\n* Omitting `value` toggles based on `table_getIsAllRowsSelected(table)`.\n* Selecting skips sub-rows whose ancestors block descent via\n* `enableSubRowSelection`. Deselecting removes matching selectable ids from the\n* existing selection map; rows that cannot be selected keep their selection\n* unless `opts.deselectAll` is `true`.\n*\n* @example\n* ```ts\n* table_toggleAllRowsSelected(table)\n* ```\n*/\nfunction table_toggleAllRowsSelected(table, value, opts) {\n\ttable._lastSelectedRowId = null;\n\ttable_setRowSelection(table, (old) => {\n\t\tvalue = typeof value !== \"undefined\" ? value : !callMemoOrStaticFn(table, \"getIsAllRowsSelected\", table_getIsAllRowsSelected);\n\t\tif (opts?.deselectAll && !value) return makeObjectMap();\n\t\tconst rowSelection = Object.assign(makeObjectMap(), old);\n\t\tconst preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\t\tif (value) {\n\t\t\tconst subtreeCache = /* @__PURE__ */ new Map();\n\t\t\tpreGroupedFlatRows.forEach((row) => {\n\t\t\t\tif (isRowSelectableInSelectAll(row, subtreeCache)) rowSelection[row.id] = true;\n\t\t\t});\n\t\t} else preGroupedFlatRows.forEach((row) => {\n\t\t\tif (row_getCanSelect(row)) delete rowSelection[row.id];\n\t\t});\n\t\treturn rowSelection;\n\t});\n}\n/**\n* Selects or deselects every selectable row on the current page.\n*\n* Omitting `value` toggles based on `table_getIsAllPageRowsSelected(table)`.\n* Child rows are included when sub-row selection allows it.\n*\n* @example\n* ```ts\n* table_toggleAllPageRowsSelected(table)\n* ```\n*/\nfunction table_toggleAllPageRowsSelected(table, value, opts) {\n\ttable._lastSelectedRowId = null;\n\ttable_setRowSelection(table, (old) => {\n\t\tconst resolvedValue = typeof value !== \"undefined\" ? value : !callMemoOrStaticFn(table, \"getIsAllPageRowsSelected\", table_getIsAllPageRowsSelected);\n\t\tif (opts?.deselectAll && !resolvedValue) return makeObjectMap();\n\t\tconst rowSelection = Object.assign(makeObjectMap(), old);\n\t\ttable.getRowModel().rows.forEach((row) => {\n\t\t\tmutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table, true);\n\t\t});\n\t\treturn rowSelection;\n\t});\n}\n/**\n* Reads the row model before row selection is projected into selected rows.\n*\n* Selection does not alter the base row pipeline, so this returns the core row\n* model.\n*\n* @example\n* ```ts\n* const rowsBeforeSelection = table_getPreSelectedRowModel(table)\n* ```\n*/\nfunction table_getPreSelectedRowModel(table) {\n\treturn table.getCoreRowModel();\n}\n/**\n* Builds a row model containing selected rows from the core row model.\n*\n* If no row ids are selected, an empty row model is returned without walking\n* the rows.\n*\n* @example\n* ```ts\n* const selectedRows = table_getSelectedRowModel(table)\n* ```\n*/\nfunction table_getSelectedRowModel(table) {\n\tconst rowModel = table.getCoreRowModel();\n\tif (!callMemoOrStaticFn(table, \"getIsSomeRowsSelected\", table_getIsSomeRowsSelected)) return {\n\t\trows: [],\n\t\tflatRows: [],\n\t\trowsById: makeObjectMap()\n\t};\n\treturn selectRowsFn(rowModel, table);\n}\n/**\n* Builds a row model containing selected rows from the filtered row model.\n*\n* If no row ids are selected, an empty row model is returned without walking\n* the rows.\n*\n* @example\n* ```ts\n* const selectedRows = table_getFilteredSelectedRowModel(table)\n* ```\n*/\nfunction table_getFilteredSelectedRowModel(table) {\n\tconst rowModel = table.getFilteredRowModel();\n\tif (!callMemoOrStaticFn(table, \"getIsSomeRowsSelected\", table_getIsSomeRowsSelected)) return {\n\t\trows: [],\n\t\tflatRows: [],\n\t\trowsById: makeObjectMap()\n\t};\n\treturn selectRowsFn(rowModel, table);\n}\n/**\n* Builds a row model containing selected rows from the grouped row model.\n*\n* If no row ids are selected, an empty row model is returned without walking\n* the rows.\n*\n* @example\n* ```ts\n* const selectedRows = table_getGroupedSelectedRowModel(table)\n* ```\n*/\nfunction table_getGroupedSelectedRowModel(table) {\n\tconst rowModel = table.getSortedRowModel();\n\tif (!callMemoOrStaticFn(table, \"getIsSomeRowsSelected\", table_getIsSomeRowsSelected)) return {\n\t\trows: [],\n\t\tflatRows: [],\n\t\trowsById: makeObjectMap()\n\t};\n\treturn selectRowsFn(rowModel, table);\n}\n/**\n* Returns the ids of all selected rows.\n*\n* @example\n* ```ts\n* const selectedRowIds = table_getSelectedRowIds(table)\n* ```\n*/\nfunction table_getSelectedRowIds(table) {\n\treturn Object.keys(table.atoms.rowSelection?.get() ?? {});\n}\n/**\n* Checks whether every selectable filtered row is selected.\n*\n* The result is false when there are no filtered rows or when selection state is\n* empty. Sub-rows whose ancestors block descent via `enableSubRowSelection` are\n* ignored, matching the rows that `table_toggleAllRowsSelected` selects.\n*\n* @example\n* ```ts\n* const allSelected = table_getIsAllRowsSelected(table)\n* ```\n*/\nfunction table_getIsAllRowsSelected(table) {\n\tconst preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n\tconst rowSelection = table.atoms.rowSelection?.get() ?? {};\n\tlet isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n\tif (isAllRowsSelected) {\n\t\tconst subtreeCache = /* @__PURE__ */ new Map();\n\t\tif (preGroupedFlatRows.some((row) => !isRowSelected(row, rowSelection) && isRowSelectableInSelectAll(row, subtreeCache))) isAllRowsSelected = false;\n\t}\n\treturn isAllRowsSelected;\n}\n/**\n* Checks whether every selectable row on the current page is selected.\n*\n* Non-selectable rows are ignored for this calculation, as are sub-rows whose\n* ancestors block descent via `enableSubRowSelection`.\n*\n* @example\n* ```ts\n* const allPageRowsSelected = table_getIsAllPageRowsSelected(table)\n* ```\n*/\nfunction table_getIsAllPageRowsSelected(table) {\n\tconst paginationFlatRows = table.getPaginatedRowModel().flatRows;\n\tconst rowSelection = table.atoms.rowSelection?.get() ?? {};\n\tconst subtreeCache = /* @__PURE__ */ new Map();\n\tlet sawSelectableRow = false;\n\tfor (let i = 0; i < paginationFlatRows.length; i++) {\n\t\tconst row = paginationFlatRows[i];\n\t\tif (!isRowSelected(row, rowSelection)) {\n\t\t\tif (isRowSelectableInSelectAll(row, subtreeCache)) return false;\n\t\t} else if (!sawSelectableRow && isRowSelectableInSelectAll(row, subtreeCache)) sawSelectableRow = true;\n\t}\n\treturn sawSelectableRow;\n}\n/**\n* Checks whether at least one row id is selected.\n*\n* The result stays true when every row is selected.\n*\n* @example\n* ```ts\n* const someRowsSelected = table_getIsSomeRowsSelected(table)\n* ```\n*/\nfunction table_getIsSomeRowsSelected(table) {\n\treturn callMemoOrStaticFn(table, \"getSelectedRowIds\", table_getSelectedRowIds).length > 0;\n}\n/**\n* Checks whether at least one selectable row on the current page is selected.\n*\n* @example\n* ```ts\n* const somePageRowsSelected = table_getIsSomePageRowsSelected(table)\n* ```\n*/\nfunction table_getIsSomePageRowsSelected(table) {\n\treturn table.getPaginatedRowModel().flatRows.filter((row) => row_getCanSelect(row)).some((row) => row_getIsSelected(row) || callMemoOrStaticFn(row, \"getIsSomeSelected\", row_getIsSomeSelected));\n}\n/**\n* Creates a checkbox-style handler that selects or deselects all rows.\n*\n* The handler reads `event.target.checked`, so it is intended for controls whose\n* checked state means \"all rows selected\".\n*\n* @example\n* ```ts\n* const onChange = table_getToggleAllRowsSelectedHandler(table)\n* ```\n*/\nfunction table_getToggleAllRowsSelectedHandler(table) {\n\treturn (e) => {\n\t\ttable_toggleAllRowsSelected(table, e.target.checked);\n\t};\n}\n/**\n* Creates a checkbox-style handler that selects or deselects current page rows.\n*\n* The handler reads `event.target.checked`, so it is intended for controls whose\n* checked state means \"all page rows selected\".\n*\n* @example\n* ```ts\n* const onChange = table_getToggleAllPageRowsSelectedHandler(table)\n* ```\n*/\nfunction table_getToggleAllPageRowsSelectedHandler(table) {\n\treturn (e) => {\n\t\ttable_toggleAllPageRowsSelected(table, e.target.checked);\n\t};\n}\n/**\n* Selects or deselects this row.\n*\n* Omitting `value` toggles the row. Child rows are selected recursively unless\n* `opts.selectChildren` is `false`, sub-row selection is disabled, or the row\n* only supports single selection. Pass `deselectParents: true` to also remove\n* ancestor row ids from the selection when this row is deselected.\n*\n* @example\n* ```ts\n* row_toggleSelected(row)\n* row_toggleSelected(row, true)\n* row_toggleSelected(row, false)\n* row_toggleSelected(row, true, { selectChildren: false })\n* row_toggleSelected(row, false, { deselectParents: true })\n* ```\n*/\nfunction row_toggleSelected(row, value, opts) {\n\tconst isSelected = row_getIsSelected(row);\n\ttable_setRowSelection(row.table, (old) => {\n\t\tvalue = typeof value !== \"undefined\" ? value : !isSelected;\n\t\tconst rowSelection = Object.assign(makeObjectMap(), old);\n\t\tmutateRowIsSelected(rowSelection, row.id, value, (opts?.selectChildren ?? true) && row_getCanMultiSelect(row), row.table);\n\t\tif (!value && opts?.deselectParents) pruneAncestorRowIds(rowSelection, row);\n\t\treturn rowSelection;\n\t});\n}\n/**\n* Checks whether this row id is selected in `state.rowSelection`.\n*\n* Missing row ids are treated as not selected.\n*\n* @example\n* ```ts\n* const selected = row_getIsSelected(row)\n* ```\n*/\nfunction row_getIsSelected(row) {\n\treturn isRowSelected(row, row.table.atoms.rowSelection?.get() ?? {});\n}\n/**\n* Checks whether some, but not all, selectable descendants are selected.\n*\n* This supports indeterminate selection UI for parent rows.\n*\n* @example\n* ```ts\n* const partial = row_getIsSomeSelected(row)\n* ```\n*/\nfunction row_getIsSomeSelected(row) {\n\treturn isSubRowSelected(row) === \"some\";\n}\n/**\n* Checks whether all selectable descendants are selected.\n*\n* Rows without selectable descendants return false.\n*\n* @example\n* ```ts\n* const allChildrenSelected = row_getIsAllSubRowsSelected(row)\n* ```\n*/\nfunction row_getIsAllSubRowsSelected(row) {\n\treturn isSubRowSelected(row) === \"all\";\n}\n/**\n* Checks whether this row can be selected.\n*\n* `options.enableRowSelection` may be a boolean or a row predicate; it defaults\n* to `true`.\n*\n* @example\n* ```ts\n* const canSelect = row_getCanSelect(row)\n* ```\n*/\nfunction row_getCanSelect(row) {\n\tconst options = row.table.options;\n\tif (typeof options.enableRowSelection === \"function\") return options.enableRowSelection(row);\n\treturn options.enableRowSelection ?? true;\n}\n/**\n* Checks whether selecting this row should also select its subRows.\n*\n* `options.enableSubRowSelection` may be a boolean or a row predicate; it\n* defaults to `true`.\n*\n* @example\n* ```ts\n* const canSelectChildren = row_getCanSelectSubRows(row)\n* ```\n*/\nfunction row_getCanSelectSubRows(row) {\n\tconst options = row.table.options;\n\tif (typeof options.enableSubRowSelection === \"function\") return options.enableSubRowSelection(row);\n\treturn options.enableSubRowSelection ?? true;\n}\n/**\n* Checks whether this row can be selected alongside other rows.\n*\n* `options.enableMultiRowSelection` may be a boolean or a row predicate; it\n* defaults to `true`.\n*\n* @example\n* ```ts\n* const canMultiSelect = row_getCanMultiSelect(row)\n* ```\n*/\nfunction row_getCanMultiSelect(row) {\n\tconst options = row.table.options;\n\tif (typeof options.enableMultiRowSelection === \"function\") return options.enableMultiRowSelection(row);\n\treturn options.enableMultiRowSelection ?? true;\n}\n/**\n* Creates a checkbox-style handler that selects or deselects this row.\n*\n* The handler is a no-op when the row cannot be selected and reads\n* `event.target.checked`. Shift events select or deselect the inclusive range\n* from the most recent selectable row handled by this table. Pass\n* `selectChildren: false` to limit changes to rows explicitly present in the\n* display-order interval, and `deselectParents: true` to remove ancestor row\n* ids from the selection when rows are deselected.\n*\n* @example\n* ```ts\n* const onChange = row_getToggleSelectedHandler(row)\n* ```\n*/\nfunction row_getToggleSelectedHandler(row, opts) {\n\tconst canSelect = row_getCanSelect(row);\n\treturn (e) => {\n\t\tif (!canSelect) return;\n\t\tconst event = e;\n\t\tconst table = row.table;\n\t\tconst checked = event.target.checked;\n\t\tconst anchorId = table._lastSelectedRowId;\n\t\tif (!(table.options.enableRowRangeSelection !== false && anchorId !== null && row_getCanMultiSelect(row) && (table.options.isRowRangeSelectionEvent?.(e) ?? false)) || !selectRowRange(row, anchorId, checked, opts)) row_toggleSelected(row, checked, opts);\n\t\ttable._lastSelectedRowId = row.id;\n\t};\n}\n/**\n* Resolves and mutates an inclusive interval in the table's latest logical\n* display order.\n*\n* The anchor is resolved without throwing from the pre-pagination row model,\n* then the core row model. Both endpoint display indexes must still identify\n* those rows in the current order and both endpoints must support\n* multi-selection. Eligible interval rows are applied through one row\n* selection updater; non-selectable and non-multi-selectable rows are skipped.\n* Returns `false` when the interaction should fall back to an ordinary toggle.\n*/\nfunction selectRowRange(row, anchorId, value, opts) {\n\tconst includeChildren = opts?.selectChildren ?? true;\n\tconst table = row.table;\n\tconst rows = table.getRowsInDisplayOrder();\n\tconst anchorRow = table.getPrePaginatedRowModel().rowsById[anchorId] ?? table.getCoreRowModel().rowsById[anchorId];\n\tif (!anchorRow) return false;\n\tconst anchorIndex = anchorRow.getDisplayIndex();\n\tconst rowIndex = row.getDisplayIndex();\n\tconst anchorAtIndex = rows[anchorIndex];\n\tconst rowAtIndex = rows[rowIndex];\n\tif (anchorIndex < 0 || rowIndex < 0 || anchorIndex >= rows.length || rowIndex >= rows.length || anchorAtIndex?.id !== anchorRow.id || rowAtIndex?.id !== row.id || !row_getCanMultiSelect(anchorRow) || !row_getCanMultiSelect(row)) return false;\n\tconst start = Math.min(anchorIndex, rowIndex);\n\tconst end = Math.max(anchorIndex, rowIndex);\n\ttable_setRowSelection(table, (old) => {\n\t\tconst rowSelection = Object.assign(makeObjectMap(), old);\n\t\tfor (let index = start; index <= end; index++) {\n\t\t\tconst rangeRow = rows[index];\n\t\t\tif (!row_getCanSelect(rangeRow) || !row_getCanMultiSelect(rangeRow)) continue;\n\t\t\tmutateRowIsSelected(rowSelection, rangeRow.id, value, includeChildren, table);\n\t\t\tif (!value && opts?.deselectParents) pruneAncestorRowIds(rowSelection, rangeRow);\n\t\t}\n\t\treturn rowSelection;\n\t});\n\treturn true;\n}\nfunction mutateRowIsSelected(rowSelection, rowId, value, includeChildren, table, respectCanSelectOnDeselect) {\n\tconst row = table.getRow(rowId, true);\n\tif (value) {\n\t\tif (!row_getCanMultiSelect(row)) Object.keys(rowSelection).forEach((key) => delete rowSelection[key]);\n\t\tif (row_getCanSelect(row)) rowSelection[rowId] = true;\n\t} else if (!respectCanSelectOnDeselect || row_getCanSelect(row)) delete rowSelection[rowId];\n\tif (includeChildren && row.subRows.length && row_getCanSelectSubRows(row)) row.subRows.forEach((r) => mutateRowIsSelected(rowSelection, r.id, value, includeChildren, table, respectCanSelectOnDeselect));\n}\n/**\n* Returns whether a select-all cascade can reach this row: the row itself is\n* selectable and no ancestor blocks descent via `enableSubRowSelection`.\n*\n* `subtreeCache` memoizes the per-ancestor verdict for one select-all pass, so\n* ancestor chains shared by sibling rows are only walked (and the\n* `enableSubRowSelection` predicate only invoked) once per unique ancestor.\n*/\nfunction isRowSelectableInSelectAll(row, subtreeCache) {\n\tif (!row_getCanSelect(row)) return false;\n\tconst table = row.table;\n\tif (table.options.enableSubRowSelection === true) return true;\n\tconst parentId = row.parentId;\n\tif (parentId === void 0) return true;\n\tconst cached = subtreeCache.get(parentId);\n\tif (cached !== void 0) return cached;\n\tconst rowsById = table.getCoreRowModel().rowsById;\n\tconst visited = [];\n\tlet selectable = true;\n\tlet currentId = parentId;\n\twhile (currentId !== void 0) {\n\t\tconst known = subtreeCache.get(currentId);\n\t\tif (known !== void 0) {\n\t\t\tselectable = known;\n\t\t\tbreak;\n\t\t}\n\t\tvisited.push(currentId);\n\t\tconst parent = rowsById[currentId] ?? table.getRow(currentId, true);\n\t\tif (!row_getCanSelectSubRows(parent)) {\n\t\t\tselectable = false;\n\t\t\tbreak;\n\t\t}\n\t\tcurrentId = parent.parentId;\n\t}\n\tvisited.forEach((id) => subtreeCache.set(id, selectable));\n\treturn selectable;\n}\nfunction pruneAncestorRowIds(rowSelection, row) {\n\tconst rowsById = row.table.getCoreRowModel().rowsById;\n\tlet parentId = row.parentId;\n\twhile (parentId !== void 0) {\n\t\tdelete rowSelection[parentId];\n\t\tparentId = (rowsById[parentId] ?? row.table.getRow(parentId, true)).parentId;\n\t}\n}\nfunction selectRowsRecursively(rows, rowSelection, selectedFlatRows, selectedRowsById) {\n\tconst result = [];\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tconst row = rows[i];\n\t\tconst isSelected = isRowSelected(row, rowSelection);\n\t\tif (isSelected) {\n\t\t\tselectedFlatRows.push(row);\n\t\t\tselectedRowsById[row.id] = row;\n\t\t}\n\t\tif (row.subRows.length) {\n\t\t\tconst newSubRows = selectRowsRecursively(row.subRows, rowSelection, selectedFlatRows, selectedRowsById);\n\t\t\tif (isSelected) {\n\t\t\t\tconst cloned = Object.create(Object.getPrototypeOf(row));\n\t\t\t\tcopyInstancePropertiesWithoutMemos(cloned, row);\n\t\t\t\tcloned.subRows = newSubRows;\n\t\t\t\tresult.push(cloned);\n\t\t\t}\n\t\t} else if (isSelected) result.push(row);\n\t}\n\treturn result;\n}\n/**\n* Builds a row model containing rows selected by the current row selection state.\n*\n* The result is derived from the supplied row model, so selected ids absent from\n* that model are not materialized as rows.\n*\n* @example\n* ```ts\n* const selectedRows = selectRowsFn(rowModel)\n* ```\n*/\nfunction selectRowsFn(rowModel, table) {\n\tconst newSelectedFlatRows = [];\n\tconst newSelectedRowsById = makeObjectMap();\n\tconst rowSelection = table.atoms.rowSelection?.get() ?? {};\n\treturn {\n\t\trows: selectRowsRecursively(rowModel.rows, rowSelection, newSelectedFlatRows, newSelectedRowsById),\n\t\tflatRows: newSelectedFlatRows,\n\t\trowsById: newSelectedRowsById\n\t};\n}\n/**\n* Returns whether a row id is selected in the current row selection state.\n*\n* @example\n* ```ts\n* const selected = isRowSelected(row)\n* ```\n*/\nfunction isRowSelected(row, rowSelection) {\n\treturn !!(hasOwn(rowSelection, row.id) && rowSelection[row.id]);\n}\n/**\n* Returns whether all, some, or none of a row's selectable descendants are selected.\n*\n* The result is used to drive indeterminate row selection UI.\n*\n* @example\n* ```ts\n* const selectedState = isSubRowSelected(row)\n* ```\n*/\nfunction isSubRowSelected(row) {\n\tif (!row.subRows.length) return false;\n\tconst rowSelection = row.table.atoms.rowSelection?.get() ?? {};\n\tlet someSelected = false;\n\tlet allChildrenSelected = true;\n\tlet someSelectable = false;\n\tfor (let i = 0; i < row.subRows.length; i++) {\n\t\tconst subRow = row.subRows[i];\n\t\tif (someSelected && !allChildrenSelected) break;\n\t\tif (row_getCanSelect(subRow)) {\n\t\t\tsomeSelectable = true;\n\t\t\tif (isRowSelected(subRow, rowSelection)) someSelected = true;\n\t\t\telse allChildrenSelected = false;\n\t\t}\n\t\tif (subRow.subRows.length) {\n\t\t\tconst subRowChildrenSelected = isSubRowSelected(subRow);\n\t\t\tif (subRowChildrenSelected === \"all\") {\n\t\t\t\tsomeSelected = true;\n\t\t\t\tsomeSelectable = true;\n\t\t\t} else if (subRowChildrenSelected === \"some\") {\n\t\t\t\tsomeSelected = true;\n\t\t\t\tallChildrenSelected = false;\n\t\t\t\tsomeSelectable = true;\n\t\t\t} else allChildrenSelected = false;\n\t\t}\n\t}\n\tif (!someSelectable) return false;\n\treturn allChildrenSelected ? \"all\" : someSelected ? \"some\" : false;\n}\n\n//#endregion\nexport { getDefaultRowSelectionState, isRowSelected, isSubRowSelected, row_getCanMultiSelect, row_getCanSelect, row_getCanSelectSubRows, row_getIsAllSubRowsSelected, row_getIsSelected, row_getIsSomeSelected, row_getToggleSelectedHandler, row_toggleSelected, selectRowsFn, table_getFilteredSelectedRowModel, table_getGroupedSelectedRowModel, table_getIsAllPageRowsSelected, table_getIsAllRowsSelected, table_getIsSomePageRowsSelected, table_getIsSomeRowsSelected, table_getPreSelectedRowModel, table_getSelectedRowIds, table_getSelectedRowModel, table_getToggleAllPageRowsSelectedHandler, table_getToggleAllRowsSelectedHandler, table_resetRowSelection, table_setRowSelection, table_toggleAllPageRowsSelected, table_toggleAllRowsSelected };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { getDefaultRowSelectionState, row_getCanMultiSelect, row_getCanSelect, row_getCanSelectSubRows, row_getIsAllSubRowsSelected, row_getIsSelected, row_getIsSomeSelected, row_getToggleSelectedHandler, row_toggleSelected, table_getFilteredSelectedRowModel, table_getGroupedSelectedRowModel, table_getIsAllPageRowsSelected, table_getIsAllRowsSelected, table_getIsSomePageRowsSelected, table_getIsSomeRowsSelected, table_getPreSelectedRowModel, table_getSelectedRowIds, table_getSelectedRowModel, table_getToggleAllPageRowsSelectedHandler, table_getToggleAllRowsSelectedHandler, table_resetRowSelection, table_setRowSelection, table_toggleAllPageRowsSelected, table_toggleAllRowsSelected } from \"./rowSelectionFeature.utils.js\";\n\n//#region src/features/row-selection/rowSelectionFeature.ts\n/**\n* Feature that adds row selection state and APIs for row and page selection.\n*/\nconst rowSelectionFeature = {\n\tinitTableInstanceData: (table) => {\n\t\ttable._lastSelectedRowId = null;\n\t},\n\tresetTableInstanceData: (table) => {\n\t\ttable._lastSelectedRowId = null;\n\t},\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\trowSelection: getDefaultRowSelectionState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn {\n\t\t\tonRowSelectionChange: makeStateUpdater(\"rowSelection\", table),\n\t\t\tenableRowSelection: true,\n\t\t\tenableMultiRowSelection: true,\n\t\t\tenableRowRangeSelection: true,\n\t\t\tenableSubRowSelection: true,\n\t\t\tisRowRangeSelectionEvent: (event) => {\n\t\t\t\tconst rangeEvent = event;\n\t\t\t\treturn Boolean(rangeEvent.shiftKey || rangeEvent.nativeEvent?.shiftKey);\n\t\t\t}\n\t\t};\n\t},\n\tassignRowPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"rowSelectionFeature\", prototype, table, {\n\t\t\trow_toggleSelected: { fn: (row, value, opts) => row_toggleSelected(row, value, opts) },\n\t\t\trow_getIsSelected: { fn: (row) => row_getIsSelected(row) },\n\t\t\trow_getIsSomeSelected: {\n\t\t\t\tfn: (row) => row_getIsSomeSelected(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.subRows,\n\t\t\t\t\trow.table.atoms.rowSelection?.get(),\n\t\t\t\t\trow.table.options.enableRowSelection\n\t\t\t\t]\n\t\t\t},\n\t\t\trow_getIsAllSubRowsSelected: {\n\t\t\t\tfn: (row) => row_getIsAllSubRowsSelected(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.subRows,\n\t\t\t\t\trow.table.atoms.rowSelection?.get(),\n\t\t\t\t\trow.table.options.enableRowSelection\n\t\t\t\t]\n\t\t\t},\n\t\t\trow_getCanSelect: { fn: (row) => row_getCanSelect(row) },\n\t\t\trow_getCanSelectSubRows: { fn: (row) => row_getCanSelectSubRows(row) },\n\t\t\trow_getCanMultiSelect: { fn: (row) => row_getCanMultiSelect(row) },\n\t\t\trow_getToggleSelectedHandler: { fn: (row, opts) => row_getToggleSelectedHandler(row, opts) }\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"rowSelectionFeature\", table, {\n\t\t\ttable_setRowSelection: { fn: (updater) => table_setRowSelection(table, updater) },\n\t\t\ttable_resetRowSelection: { fn: (defaultState) => table_resetRowSelection(table, defaultState) },\n\t\t\ttable_toggleAllRowsSelected: { fn: (value, opts) => table_toggleAllRowsSelected(table, value, opts) },\n\t\t\ttable_toggleAllPageRowsSelected: { fn: (value, opts) => table_toggleAllPageRowsSelected(table, value, opts) },\n\t\t\ttable_getPreSelectedRowModel: { fn: () => table_getPreSelectedRowModel(table) },\n\t\t\ttable_getSelectedRowModel: {\n\t\t\t\tfn: () => table_getSelectedRowModel(table),\n\t\t\t\tmemoDeps: () => [table.atoms.rowSelection?.get(), table.getCoreRowModel()]\n\t\t\t},\n\t\t\ttable_getFilteredSelectedRowModel: {\n\t\t\t\tfn: () => table_getFilteredSelectedRowModel(table),\n\t\t\t\tmemoDeps: () => [table.atoms.rowSelection?.get(), table.getFilteredRowModel()]\n\t\t\t},\n\t\t\ttable_getGroupedSelectedRowModel: {\n\t\t\t\tfn: () => table_getGroupedSelectedRowModel(table),\n\t\t\t\tmemoDeps: () => [table.atoms.rowSelection?.get(), table.getSortedRowModel()]\n\t\t\t},\n\t\t\ttable_getSelectedRowIds: {\n\t\t\t\tfn: () => table_getSelectedRowIds(table),\n\t\t\t\tmemoDeps: () => [table.atoms.rowSelection?.get()]\n\t\t\t},\n\t\t\ttable_getIsAllRowsSelected: {\n\t\t\t\tfn: () => table_getIsAllRowsSelected(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.rowSelection?.get(),\n\t\t\t\t\ttable.getFilteredRowModel(),\n\t\t\t\t\ttable.options.enableRowSelection,\n\t\t\t\t\ttable.options.enableSubRowSelection\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getIsAllPageRowsSelected: {\n\t\t\t\tfn: () => table_getIsAllPageRowsSelected(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.rowSelection?.get(),\n\t\t\t\t\ttable.getPaginatedRowModel(),\n\t\t\t\t\ttable.options.enableRowSelection,\n\t\t\t\t\ttable.options.enableSubRowSelection\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getIsSomeRowsSelected: {\n\t\t\t\tfn: () => table_getIsSomeRowsSelected(table),\n\t\t\t\tmemoDeps: () => [table.atoms.rowSelection?.get()]\n\t\t\t},\n\t\t\ttable_getIsSomePageRowsSelected: {\n\t\t\t\tfn: () => table_getIsSomePageRowsSelected(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.rowSelection?.get(),\n\t\t\t\t\ttable.getPaginatedRowModel(),\n\t\t\t\t\ttable.options.enableRowSelection\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getToggleAllRowsSelectedHandler: { fn: () => table_getToggleAllRowsSelectedHandler(table) },\n\t\t\ttable_getToggleAllPageRowsSelectedHandler: { fn: () => table_getToggleAllPageRowsSelectedHandler(table) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { rowSelectionFeature };","import { flatMerge, mergeProxy } from \"./merge-proxy.js\";\nimport { vueReactivity } from \"./reactivity.js\";\nimport { getCurrentScope, onScopeDispose, unref, watch } from \"vue\";\nimport { constructTable } from \"@tanstack/table-core\";\n\n//#region src/useTable.ts\nfunction getOptionsWithReactiveValues(options) {\n\tconst resolvedOptions = {};\n\tfor (const key of Object.keys(options)) resolvedOptions[key] = unref(options[key]);\n\treturn mergeProxy(options, resolvedOptions);\n}\nfunction getReactiveOptionDeps(options) {\n\treturn Object.keys(options).map((key) => unref(options[key]));\n}\n/**\n* Creates a Vue table instance backed by Vue-aware TanStack Store atoms.\n*\n* Table options may contain Vue refs or computed values. The adapter unwraps\n* those reactive inputs, watches them with synchronous flushing, and keeps the\n* table options in sync. Use `table.Subscribe` or native Vue computed values\n* around `table.atoms.<slice>.get()` for selected reactive reads.\n*\n* @example\n* ```ts\n* const table = useTable(\n* {\n* features,\n* columns,\n* data,\n* },\n* )\n* ```\n*/\nfunction useTable(tableOptions) {\n\tconst syncTableOptions = (table, options) => {\n\t\ttable.setOptions((prev) => flatMerge(prev, getOptionsWithReactiveValues(options)));\n\t};\n\tconst reactivity = vueReactivity();\n\tconst mergedOptions = mergeProxy(tableOptions, { features: {\n\t\tcoreReactivityFeature: reactivity,\n\t\t...unref(tableOptions.features) ?? {}\n\t} });\n\tconst resolvedOptions = mergeProxy(getOptionsWithReactiveValues(mergedOptions), { mergeOptions: (defaultOptions, newOptions) => {\n\t\treturn flatMerge(defaultOptions, newOptions);\n\t} });\n\tconst coreTable = constructTable(resolvedOptions);\n\tconst table = coreTable;\n\tif (getCurrentScope()) onScopeDispose(() => reactivity.unmount?.());\n\twatch(() => getReactiveOptionDeps(mergedOptions), () => {\n\t\tsyncTableOptions(coreTable, mergedOptions);\n\t}, { immediate: true });\n\twatch(() => {\n\t\tconst controlledState = unref(tableOptions.state);\n\t\tconst controlledAtoms = unref(tableOptions.atoms);\n\t\tif (!controlledState) return [];\n\t\tconst controlledValues = [];\n\t\tfor (const key of Object.keys(table.initialState)) {\n\t\t\tif (!(key in controlledState) || controlledAtoms?.[key] !== void 0) continue;\n\t\t\tcontrolledValues.push(controlledState[key]);\n\t\t}\n\t\treturn controlledValues;\n\t}, (controlledValues) => {\n\t\tif (controlledValues.length > 0) syncTableOptions(coreTable, mergedOptions);\n\t}, { immediate: true });\n\ttable.Subscribe = (props) => {\n\t\treturn props.children(table.atoms);\n\t};\n\treturn table;\n}\n\n//#endregion\nexport { useTable };","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nvar defaultAttributes = {\r\n outline: {\r\n xmlns: \"http://www.w3.org/2000/svg\",\r\n width: 24,\r\n height: 24,\r\n viewBox: \"0 0 24 24\",\r\n fill: \"none\",\r\n stroke: \"currentColor\",\r\n \"stroke-width\": 2,\r\n \"stroke-linecap\": \"round\",\r\n \"stroke-linejoin\": \"round\"\r\n },\r\n filled: {\r\n xmlns: \"http://www.w3.org/2000/svg\",\r\n width: 24,\r\n height: 24,\r\n viewBox: \"0 0 24 24\",\r\n fill: \"currentColor\",\r\n stroke: \"none\"\r\n }\r\n};\r\n\r\nexport { defaultAttributes as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport { h } from 'vue';\r\nimport defaultAttributes from './defaultAttributes.mjs';\r\n\r\nconst createVueComponent = (type, iconName, iconNamePascal, iconNode) => ({ color = \"currentColor\", size = 24, stroke = 2, title, class: classes, ...rest }, { attrs, slots }) => {\r\n let children = [...iconNode.map((child) => h(...child)), ...slots.default ? [slots.default()] : []];\r\n if (title)\r\n children = [h(\"title\", title), ...children];\r\n return h(\r\n \"svg\",\r\n {\r\n ...defaultAttributes[type],\r\n width: size,\r\n height: size,\r\n ...attrs,\r\n class: [\"tabler-icon\", `tabler-icon-${iconName}`],\r\n ...type === \"filled\" ? {\r\n fill: color\r\n } : {\r\n \"stroke-width\": stroke ?? defaultAttributes[type][\"stroke-width\"],\r\n stroke: color\r\n },\r\n ...rest\r\n },\r\n children\r\n );\r\n};\r\n\r\nexport { createVueComponent as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconAlertCircle = createVueComponent(\"outline\", \"alert-circle\", \"AlertCircle\", [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 8v4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 16h.01\", \"key\": \"svg-2\" }]]);\r\n\r\nexport { IconAlertCircle as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconArrowsSort = createVueComponent(\"outline\", \"arrows-sort\", \"ArrowsSort\", [[\"path\", { \"d\": \"M3 9l4 -4l4 4m-4 -4v14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M21 15l-4 4l-4 -4m4 4v-14\", \"key\": \"svg-1\" }]]);\r\n\r\nexport { IconArrowsSort as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconChevronLeft = createVueComponent(\"outline\", \"chevron-left\", \"ChevronLeft\", [[\"path\", { \"d\": \"M15 6l-6 6l6 6\", \"key\": \"svg-0\" }]]);\r\n\r\nexport { IconChevronLeft as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconChevronRight = createVueComponent(\"outline\", \"chevron-right\", \"ChevronRight\", [[\"path\", { \"d\": \"M9 6l6 6l-6 6\", \"key\": \"svg-0\" }]]);\r\n\r\nexport { IconChevronRight as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconFilter = createVueComponent(\"outline\", \"filter\", \"Filter\", [[\"path\", { \"d\": \"M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227\", \"key\": \"svg-0\" }]]);\r\n\r\nexport { IconFilter as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconListCheck = createVueComponent(\"outline\", \"list-check\", \"ListCheck\", [[\"path\", { \"d\": \"M3.5 5.5l1.5 1.5l2.5 -2.5\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3.5 11.5l1.5 1.5l2.5 -2.5\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3.5 17.5l1.5 1.5l2.5 -2.5\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M11 6l9 0\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M11 12l9 0\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M11 18l9 0\", \"key\": \"svg-5\" }]]);\r\n\r\nexport { IconListCheck as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconLoader = createVueComponent(\"outline\", \"loader\", \"Loader\", [[\"path\", { \"d\": \"M12 6l0 -3\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16.25 7.75l2.15 -2.15\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M18 12l3 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M16.25 16.25l2.15 2.15\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M12 18l0 3\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M7.75 16.25l-2.15 2.15\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M6 12l-3 0\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M7.75 7.75l-2.15 -2.15\", \"key\": \"svg-7\" }]]);\r\n\r\nexport { IconLoader as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconRefresh = createVueComponent(\"outline\", \"refresh\", \"Refresh\", [[\"path\", { \"d\": \"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4\", \"key\": \"svg-1\" }]]);\r\n\r\nexport { IconRefresh as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconSearch = createVueComponent(\"outline\", \"search\", \"Search\", [[\"path\", { \"d\": \"M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M21 21l-6 -6\", \"key\": \"svg-1\" }]]);\r\n\r\nexport { IconSearch as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconSortAscending = createVueComponent(\"outline\", \"sort-ascending\", \"SortAscending\", [[\"path\", { \"d\": \"M4 6l7 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 12l7 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M4 18l9 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M15 9l3 -3l3 3\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M18 6l0 12\", \"key\": \"svg-4\" }]]);\r\n\r\nexport { IconSortAscending as default };\r\n","/**\r\n * @license @tabler/icons-vue v3.46.0 - MIT\r\n *\r\n * This source code is licensed under the MIT license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nimport createVueComponent from '../createVueComponent.mjs';\r\n\r\nvar IconSortDescending = createVueComponent(\"outline\", \"sort-descending\", \"SortDescending\", [[\"path\", { \"d\": \"M4 6l9 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 12l7 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M4 18l7 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M15 15l3 3l3 -3\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M18 6l0 12\", \"key\": \"svg-4\" }]]);\r\n\r\nexport { IconSortDescending as default };\r\n","/**\r\n * Accessibility helpers shared by OdTable popovers (search, filter, column\r\n * settings): focus entry, Escape-to-close with focus restoration, a Tab loop\r\n * that keeps focus inside the open popover, and fixed-position placement that\r\n * survives the horizontally scrolling table viewport.\r\n */\r\n\r\nimport { nextTick, onBeforeUnmount, readonly, ref, type Ref } from 'vue'\r\n\r\nexport type OdTablePopoverPlacement = {\r\n top: number\r\n left: number\r\n}\r\n\r\nexport type OdTablePopoverController = {\r\n isOpen: Readonly<Ref<boolean>>\r\n placement: Readonly<Ref<OdTablePopoverPlacement>>\r\n open: (trigger: HTMLElement, options?: { align?: 'start' | 'end'; width?: number }) => void\r\n close: (options?: { restoreFocus?: boolean }) => void\r\n registerPanel: (element: HTMLElement | null) => void\r\n onKeydown: (event: KeyboardEvent) => void\r\n}\r\n\r\nconst FOCUSABLE_SELECTOR = [\r\n 'a[href]',\r\n 'button:not([disabled])',\r\n 'input:not([disabled])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n].join(', ')\r\n\r\nconst focusableIn = (root: HTMLElement): HTMLElement[] =>\r\n // Visibility filtering stays selector-based so environments without layout\r\n // (jsdom) still resolve the focus list for focus-entry assertions.\r\n Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\r\n (element) => !element.hidden && element.getAttribute('aria-hidden') !== 'true',\r\n )\r\n\r\n/**\r\n * Creates one popover lifecycle. The controller is bound to a single trigger\r\n * at a time; opening another trigger first closes the current popover.\r\n */\r\nexport function useOdTablePopover(onClosed?: () => void): OdTablePopoverController {\r\n const isOpen = ref(false)\r\n const placement = ref<OdTablePopoverPlacement>({ top: 0, left: 0 })\r\n let panel: HTMLElement | null = null\r\n let trigger: HTMLElement | null = null\r\n let align: 'start' | 'end' = 'start'\r\n let wantedWidth: number | undefined\r\n\r\n const updatePlacement = () => {\r\n if (!trigger || !panel) return\r\n const rect = trigger.getBoundingClientRect()\r\n const margin = 4\r\n const width = wantedWidth ?? panel.offsetWidth\r\n const viewportWidth = window.innerWidth || document.documentElement.clientWidth\r\n let left = align === 'start' ? rect.left : rect.right - width\r\n left = Math.max(margin, Math.min(left, viewportWidth - width - margin))\r\n placement.value = {\r\n top: rect.bottom + margin,\r\n left,\r\n }\r\n }\r\n\r\n const onWindowResize = () => {\r\n if (isOpen.value) updatePlacement()\r\n }\r\n\r\n const onDocumentPointerDown = (event: PointerEvent) => {\r\n if (!isOpen.value) return\r\n const target = event.target as Node\r\n if (panel?.contains(target) || trigger?.contains(target)) return\r\n // `close` already invokes the `onClosed` callback exactly once.\r\n close({ restoreFocus: false })\r\n }\r\n\r\n const open: OdTablePopoverController['open'] = (element, options) => {\r\n trigger = element\r\n align = options?.align ?? 'start'\r\n wantedWidth = options?.width\r\n isOpen.value = true\r\n void nextTick(() => {\r\n if (!panel) return\r\n updatePlacement()\r\n const focusable = focusableIn(panel)\r\n focusable[0]?.focus()\r\n })\r\n }\r\n\r\n const close: OdTablePopoverController['close'] = (options) => {\r\n if (!isOpen.value) return\r\n const shouldRestore = options?.restoreFocus ?? false\r\n isOpen.value = false\r\n if (shouldRestore) trigger?.focus()\r\n onClosed?.()\r\n }\r\n\r\n const registerPanel = (element: HTMLElement | null) => {\r\n panel = element\r\n }\r\n\r\n const onKeydown = (event: KeyboardEvent) => {\r\n if (!isOpen.value) return\r\n if (event.key === 'Escape') {\r\n event.preventDefault()\r\n event.stopPropagation()\r\n close({ restoreFocus: true })\r\n return\r\n }\r\n if (event.key === 'Tab' && panel) {\r\n const focusable = focusableIn(panel)\r\n if (focusable.length === 0) return\r\n const first = focusable[0]\r\n const last = focusable[focusable.length - 1]\r\n const active = document.activeElement\r\n if (event.shiftKey && (active === first || !panel.contains(active))) {\r\n event.preventDefault()\r\n last.focus()\r\n } else if (!event.shiftKey && (active === last || !panel.contains(active))) {\r\n event.preventDefault()\r\n first.focus()\r\n }\r\n }\r\n }\r\n\r\n window.addEventListener('resize', onWindowResize)\r\n document.addEventListener('pointerdown', onDocumentPointerDown, true)\r\n\r\n onBeforeUnmount(() => {\r\n window.removeEventListener('resize', onWindowResize)\r\n document.removeEventListener('pointerdown', onDocumentPointerDown, true)\r\n trigger = null\r\n panel = null\r\n })\r\n\r\n return {\r\n isOpen: readonly(isOpen),\r\n placement: readonly(placement),\r\n open,\r\n close,\r\n registerPanel,\r\n onKeydown,\r\n }\r\n}\r\n","/**\r\n * OdTable cell formatting helpers: numbers, booleans, enum labels, and the\r\n * UTC+8 datetime contract (relative body text + exact tooltip text).\r\n *\r\n * Datetime output never depends on the host timezone: every timestamp is\r\n * shifted by the fixed UTC+8 offset and formatted with UTC getters.\r\n */\r\n\r\nimport type { OdTableColumn, OdTableLocale } from './OdTable.types'\r\n\r\nexport const OD_TABLE_NULL_TEXT = '—'\r\n\r\nconst UTC8_OFFSET_MS = 8 * 3_600_000\r\n\r\nconst MINUTE = 60_000\r\nconst HOUR = 3_600_000\r\nconst DAY = 86_400_000\r\nconst MONTH = 30 * DAY\r\nconst YEAR = 365 * DAY\r\n\r\n/** Parses a finite number, accepting numeric strings; anything else is invalid. */\r\nexport function parseOdTableNumber(value: unknown): number | null {\r\n if (typeof value === 'number') return Number.isFinite(value) ? value : null\r\n if (typeof value === 'string' && value.trim() !== '') {\r\n const parsed = Number(value)\r\n return Number.isFinite(parsed) ? parsed : null\r\n }\r\n return null\r\n}\r\n\r\n/** Parses a strict boolean; anything else is invalid. */\r\nexport function parseOdTableBoolean(value: unknown): boolean | null {\r\n return typeof value === 'boolean' ? value : null\r\n}\r\n\r\n/**\r\n * Parses a datetime into a UTC epoch timestamp. Accepts ISO 8601 strings with\r\n * a timezone designator, epoch numbers, and Date instances; null/undefined\r\n * and unparseable values return null.\r\n */\r\nexport function parseOdTableDatetime(value: unknown): number | null {\r\n if (value instanceof Date) {\r\n const time = value.getTime()\r\n return Number.isNaN(time) ? null : time\r\n }\r\n if (typeof value === 'number') return Number.isFinite(value) ? value : null\r\n if (typeof value === 'string' && value.trim() !== '') {\r\n const parsed = Date.parse(value)\r\n return Number.isNaN(parsed) ? null : parsed\r\n }\r\n return null\r\n}\r\n\r\n/** `YYYY-MM-DD HH:mm:ss` in UTC+8 for tooltips and exact display. */\r\nexport function formatOdTableExactDatetime(timestamp: number): string {\r\n const shifted = new Date(timestamp + UTC8_OFFSET_MS)\r\n const pad = (value: number) => String(value).padStart(2, '0')\r\n return [\r\n shifted.getUTCFullYear(),\r\n pad(shifted.getUTCMonth() + 1),\r\n pad(shifted.getUTCDate()),\r\n ].join('-') + ` ${pad(shifted.getUTCHours())}:${pad(shifted.getUTCMinutes())}:${pad(shifted.getUTCSeconds())}`\r\n}\r\n\r\n/** `YYYY-MM-DD` in UTC+8 for callers that need a date-only value. */\r\nexport function formatOdTableDateOnly(timestamp: number): string {\r\n return formatOdTableExactDatetime(timestamp).slice(0, 10)\r\n}\r\n\r\n/**\r\n * Relative-time body text: 刚刚 / N 分钟前 / N 小时前 / N 天前 / N 个月前 /\r\n * N 年前. Month and year buckets use fixed 30-day and 365-day durations so\r\n * output stays deterministic across calendar month lengths. Future timestamps\r\n * render as 刚刚 because relative times never auto-refresh.\r\n */\r\nexport function formatOdTableRelativeTime(\r\n value: unknown,\r\n locale: Required<OdTableLocale>,\r\n now: number = Date.now(),\r\n): string {\r\n const timestamp = parseOdTableDatetime(value)\r\n if (timestamp === null) return OD_TABLE_NULL_TEXT\r\n const diff = now - timestamp\r\n if (diff < MINUTE) return locale.relativeJustNow\r\n if (diff < HOUR) return locale.relativeMinutes(Math.floor(diff / MINUTE))\r\n if (diff < DAY) return locale.relativeHours(Math.floor(diff / HOUR))\r\n if (diff < MONTH) return locale.relativeDays(Math.floor(diff / DAY))\r\n if (diff < YEAR) return locale.relativeMonths(Math.floor(diff / MONTH))\r\n return locale.relativeYears(Math.floor(diff / YEAR))\r\n}\r\n\r\nfunction formatNumberCell(value: unknown, column: OdTableColumn): string {\r\n const parsed = parseOdTableNumber(value)\r\n if (parsed === null) return OD_TABLE_NULL_TEXT\r\n const maximumFractionDigits = column.numberFormat?.maximumFractionDigits\r\n return new Intl.NumberFormat('zh-CN', maximumFractionDigits === undefined ? undefined : { maximumFractionDigits }).format(parsed)\r\n}\r\n\r\nfunction formatBooleanCell(value: unknown, column: OdTableColumn): string {\r\n const parsed = parseOdTableBoolean(value)\r\n if (parsed === null) return OD_TABLE_NULL_TEXT\r\n const labels = column.booleanLabels\r\n return parsed ? labels?.true ?? '是' : labels?.false ?? '否'\r\n}\r\n\r\nfunction formatEnumCell(value: unknown, column: OdTableColumn): string {\r\n if (value === null || value === undefined) return OD_TABLE_NULL_TEXT\r\n const raw = String(value)\r\n return column.options?.find((option) => option.value === raw)?.label ?? raw\r\n}\r\n\r\n/** Formats a cell body value; nullish and invalid inputs render as `—`. */\r\nexport function formatOdTableCell(\r\n column: OdTableColumn,\r\n value: unknown,\r\n context: { locale: Required<OdTableLocale>; now?: number } ,\r\n): string {\r\n if (value === null || value === undefined) return OD_TABLE_NULL_TEXT\r\n switch (column.dataType) {\r\n case 'number':\r\n return formatNumberCell(value, column)\r\n case 'boolean':\r\n return formatBooleanCell(value, column)\r\n case 'enum':\r\n return formatEnumCell(value, column)\r\n case 'datetime':\r\n return formatOdTableRelativeTime(value, context.locale, context.now ?? Date.now())\r\n default:\r\n return String(value)\r\n }\r\n}\r\n\r\n/**\r\n * Returns the exact UTC+8 datetime for tooltips, or null when the value is\r\n * nullish/invalid (those cells render plain `—` without a tooltip).\r\n */\r\nexport function odTableExactDatetimeOrNull(value: unknown): string | null {\r\n const timestamp = parseOdTableDatetime(value)\r\n return timestamp === null ? null : formatOdTableExactDatetime(timestamp)\r\n}\r\n","/**\r\n * OdTable query state machine and local data processing.\r\n *\r\n * This module is the single owner of filtering, sorting, and pagination for\r\n * both data modes. Remote requests serialize the query produced here, and the\r\n * local mode computes page rows with the exact same semantics, so no second\r\n * pipeline can apply duplicate filtering or sorting.\r\n */\r\n\r\nimport type {\r\n OdTableColumn,\r\n OdTableFilter,\r\n OdTableInitialQuery,\r\n OdTableQuery,\r\n OdTableSearch,\r\n OdTableSorting,\r\n OdTableRowKey,\r\n} from './OdTable.types'\r\n\r\nexport const OD_TABLE_DEFAULT_PAGE_SIZE = 20\r\nexport const OD_TABLE_DEFAULT_PAGE_SIZE_OPTIONS: readonly number[] = [10, 20, 50, 100]\r\n\r\nexport function createOdTableQuery(pageSize: number = OD_TABLE_DEFAULT_PAGE_SIZE): OdTableQuery {\r\n return {\r\n page: 1,\r\n pageSize,\r\n searches: [],\r\n filters: [],\r\n sorting: [],\r\n }\r\n}\r\n\r\nconst isPositiveInt = (value: unknown): value is number =>\r\n typeof value === 'number' && Number.isInteger(value) && value > 0\r\n\r\n/**\r\n * Produces the canonical immutable query: page/pageSize bounds enforced,\r\n * empty search values and filters dropped, entries deduplicated per field.\r\n */\r\nexport function normalizeOdTableQuery(query: OdTableQuery): OdTableQuery {\r\n const searches: OdTableSearch[] = []\r\n const searchFields = new Set<string>()\r\n for (const entry of query.searches ?? []) {\r\n if (!entry || typeof entry.field !== 'string' || entry.field === '') continue\r\n if (searchFields.has(entry.field)) continue\r\n const value = typeof entry.value === 'string' ? entry.value : String(entry.value ?? '')\r\n if (value.trim() === '') continue\r\n searchFields.add(entry.field)\r\n searches.push({ field: entry.field, value })\r\n }\r\n\r\n const filters: OdTableFilter[] = []\r\n const filterFields = new Set<string>()\r\n for (const entry of query.filters ?? []) {\r\n if (!entry || typeof entry.field !== 'string' || entry.field === '') continue\r\n if (filterFields.has(entry.field)) continue\r\n const values = Array.isArray(entry.values)\r\n ? [...new Set(entry.values.filter((value): value is string => typeof value === 'string'))]\r\n : []\r\n if (values.length === 0) continue\r\n filterFields.add(entry.field)\r\n filters.push({ field: entry.field, values })\r\n }\r\n\r\n const sorting: OdTableSorting[] = []\r\n const sortingFields = new Set<string>()\r\n for (const entry of query.sorting ?? []) {\r\n if (!entry || typeof entry.field !== 'string' || entry.field === '') continue\r\n if (sortingFields.has(entry.field)) continue\r\n if (entry.direction !== 'asc' && entry.direction !== 'desc') continue\r\n sortingFields.add(entry.field)\r\n sorting.push({ field: entry.field, direction: entry.direction })\r\n }\r\n\r\n return {\r\n page: isPositiveInt(query.page) ? query.page : 1,\r\n pageSize: isPositiveInt(query.pageSize) ? query.pageSize : OD_TABLE_DEFAULT_PAGE_SIZE,\r\n searches,\r\n filters,\r\n sorting,\r\n }\r\n}\r\n\r\n/** Structural equality on the normalized query; guards duplicate submissions. */\r\nexport function odTableQueriesEqual(a: OdTableQuery, b: OdTableQuery): boolean {\r\n return (\r\n a.page === b.page &&\r\n a.pageSize === b.pageSize &&\r\n a.searches.length === b.searches.length &&\r\n a.filters.length === b.filters.length &&\r\n a.sorting.length === b.sorting.length &&\r\n JSON.stringify(a.searches) === JSON.stringify(b.searches) &&\r\n JSON.stringify(a.filters) === JSON.stringify(b.filters) &&\r\n JSON.stringify(a.sorting) === JSON.stringify(b.sorting)\r\n )\r\n}\r\n\r\n/**\r\n * Field-by-field merge with replacement semantics: an array provided by\r\n * `initial` replaces the base array entirely (an explicit empty `sorting`\r\n * clears the base sorting) instead of concatenating.\r\n */\r\nexport function mergeOdTableInitialQuery(\r\n base: OdTableQuery,\r\n initial?: OdTableInitialQuery,\r\n): OdTableQuery {\r\n if (!initial) return normalizeOdTableQuery(base)\r\n const merged: OdTableQuery = {\r\n page: initial.page ?? base.page,\r\n pageSize: initial.pageSize ?? base.pageSize,\r\n searches: initial.searches ?? base.searches,\r\n filters: initial.filters ?? base.filters,\r\n sorting: initial.sorting ?? base.sorting,\r\n }\r\n return normalizeOdTableQuery(merged)\r\n}\r\n\r\nexport type OdTableQueryAction =\r\n | { type: 'set-search'; field: string; value: string }\r\n | { type: 'set-filter'; field: string; values: string[] }\r\n | { type: 'sort'; field: string; additive: boolean }\r\n | { type: 'set-page'; page: number }\r\n | { type: 'set-page-size'; pageSize: number }\r\n | { type: 'sync-response'; page?: number; pageSize?: number }\r\n | { type: 'remove-column'; field: string }\r\n | { type: 'replace'; query: OdTableQuery }\r\n\r\nconst nextSortDirection = (direction: 'asc' | 'desc' | undefined): 'asc' | 'desc' | undefined => {\r\n if (direction === 'asc') return 'desc'\r\n if (direction === 'desc') return undefined\r\n return 'asc'\r\n}\r\n\r\n/**\r\n * Pure query reducer. Condition changes (`set-search`, `set-filter`, `sort`,\r\n * `set-page-size`, `remove-column`) reset the page to 1; `set-page` and\r\n * `sync-response` keep the requested page.\r\n */\r\nexport function odTableQueryReducer(query: OdTableQuery, action: OdTableQueryAction): OdTableQuery {\r\n switch (action.type) {\r\n case 'set-search': {\r\n const trimmed = action.value.trim()\r\n const searches = query.searches.filter((entry) => entry.field !== action.field)\r\n if (trimmed !== '') searches.push({ field: action.field, value: action.value })\r\n return normalizeOdTableQuery({ ...query, searches, page: 1 })\r\n }\r\n case 'set-filter': {\r\n const filters = query.filters.filter((entry) => entry.field !== action.field)\r\n if (action.values.length > 0) filters.push({ field: action.field, values: [...action.values] })\r\n return normalizeOdTableQuery({ ...query, filters, page: 1 })\r\n }\r\n case 'sort': {\r\n const existing = query.sorting.find((entry) => entry.field === action.field)\r\n const nextDirection = nextSortDirection(existing?.direction)\r\n let sorting: OdTableSorting[]\r\n if (action.additive) {\r\n sorting = query.sorting.filter((entry) => entry.field !== action.field)\r\n if (nextDirection) sorting.push({ field: action.field, direction: nextDirection })\r\n } else {\r\n sorting = nextDirection ? [{ field: action.field, direction: nextDirection }] : []\r\n }\r\n return normalizeOdTableQuery({ ...query, sorting, page: 1 })\r\n }\r\n case 'set-page': {\r\n if (!isPositiveInt(action.page)) return query\r\n return normalizeOdTableQuery({ ...query, page: action.page })\r\n }\r\n case 'set-page-size': {\r\n if (!isPositiveInt(action.pageSize) || action.pageSize === query.pageSize) return query\r\n return normalizeOdTableQuery({ ...query, pageSize: action.pageSize, page: 1 })\r\n }\r\n case 'sync-response': {\r\n const page = isPositiveInt(action.page) ? action.page : query.page\r\n const pageSize = isPositiveInt(action.pageSize) ? action.pageSize : query.pageSize\r\n return normalizeOdTableQuery({ ...query, page, pageSize })\r\n }\r\n case 'remove-column': {\r\n return normalizeOdTableQuery({\r\n ...query,\r\n page: 1,\r\n searches: query.searches.filter((entry) => entry.field !== action.field),\r\n filters: query.filters.filter((entry) => entry.field !== action.field),\r\n sorting: query.sorting.filter((entry) => entry.field !== action.field),\r\n })\r\n }\r\n case 'replace': {\r\n return normalizeOdTableQuery(action.query)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Drops search/filter/sorting entries whose field no longer exists in the\r\n * provided column set. Returns `null` when nothing changed so callers can\r\n * avoid emitting redundant query events.\r\n */\r\nexport function cleanupOdTableQueryForFields(\r\n query: OdTableQuery,\r\n fields: ReadonlySet<string>,\r\n): OdTableQuery | null {\r\n const searches = query.searches.filter((entry) => fields.has(entry.field))\r\n const filters = query.filters.filter((entry) => fields.has(entry.field))\r\n const sorting = query.sorting.filter((entry) => fields.has(entry.field))\r\n if (\r\n searches.length === query.searches.length &&\r\n filters.length === query.filters.length &&\r\n sorting.length === query.sorting.length\r\n ) {\r\n return null\r\n }\r\n return normalizeOdTableQuery({ ...query, page: 1, searches, filters, sorting })\r\n}\r\n\r\n/** Drops conditions whose surviving column no longer advertises that capability. */\r\nexport function cleanupOdTableQueryForColumns(\r\n query: OdTableQuery,\r\n columns: readonly OdTableColumn[],\r\n): OdTableQuery | null {\r\n const searchable = new Set(columns.filter((column) => column.searchable && column.dataType === 'text').map((column) => column.field))\r\n const filterable = new Set(columns.filter((column) => column.filterable && column.dataType === 'enum').map((column) => column.field))\r\n const sortable = new Set(columns.filter((column) => column.sortable).map((column) => column.field))\r\n const searches = query.searches.filter((entry) => searchable.has(entry.field))\r\n const filters = query.filters.filter((entry) => filterable.has(entry.field))\r\n const sorting = query.sorting.filter((entry) => sortable.has(entry.field))\r\n if (\r\n searches.length === query.searches.length &&\r\n filters.length === query.filters.length &&\r\n sorting.length === query.sorting.length\r\n ) {\r\n return null\r\n }\r\n return normalizeOdTableQuery({ ...query, page: 1, searches, filters, sorting })\r\n}\r\n\r\n/**\r\n * Lossless row-key encoding. Row ids must keep `1` and `\"1\"` distinct, so the\r\n * primitive type is embedded in the id used for selection and dedup maps.\r\n */\r\nexport function encodeOdTableRowKey(key: OdTableRowKey): string {\r\n return `${typeof key}:${String(key)}`\r\n}\r\n\r\nexport function decodeOdTableRowKey(encoded: string): OdTableRowKey | null {\r\n const separator = encoded.indexOf(':')\r\n if (separator <= 0) return null\r\n const type = encoded.slice(0, separator)\r\n const raw = encoded.slice(separator + 1)\r\n if (type === 'string') return raw\r\n if (type === 'number') {\r\n const numeric = Number(raw)\r\n return Number.isFinite(numeric) ? numeric : null\r\n }\r\n return null\r\n}\r\n\r\ntype OdTableSortValue = { rank: number; compareValue: string | number | boolean }\r\n\r\nconst resolveEnumLabel = (column: OdTableColumn, value: unknown): string => {\r\n const raw = String(value)\r\n return column.options?.find((option) => option.value === raw)?.label ?? raw\r\n}\r\n\r\nfunction resolveSortValue(column: OdTableColumn | undefined, value: unknown): OdTableSortValue {\r\n if (value === null || value === undefined) return { rank: 1, compareValue: '' }\r\n switch (column?.dataType) {\r\n case 'number': {\r\n if (typeof value === 'number' && Number.isFinite(value)) return { rank: 0, compareValue: value }\r\n if (typeof value === 'string' && value.trim() !== '' && Number.isFinite(Number(value))) {\r\n return { rank: 0, compareValue: Number(value) }\r\n }\r\n return { rank: 1, compareValue: '' }\r\n }\r\n case 'datetime': {\r\n if (typeof value === 'number' && Number.isFinite(value)) return { rank: 0, compareValue: value }\r\n if (typeof value === 'string' && value.trim() !== '') {\r\n const parsed = Date.parse(value)\r\n if (!Number.isNaN(parsed)) return { rank: 0, compareValue: parsed }\r\n }\r\n return { rank: 1, compareValue: '' }\r\n }\r\n case 'boolean': {\r\n if (typeof value === 'boolean') return { rank: 0, compareValue: value }\r\n return { rank: 1, compareValue: '' }\r\n }\r\n case 'enum': {\r\n return { rank: 0, compareValue: resolveEnumLabel(column, value) }\r\n }\r\n default: {\r\n return { rank: 0, compareValue: String(value) }\r\n }\r\n }\r\n}\r\n\r\nconst compareValues = (a: OdTableSortValue['compareValue'], b: OdTableSortValue['compareValue']): number => {\r\n if (typeof a === 'number' && typeof b === 'number') return a - b\r\n if (typeof a === 'boolean' && typeof b === 'boolean') return (a ? 1 : 0) - (b ? 1 : 0)\r\n // Pinned locale keeps \"本地字典序\" deterministic across hosts and CI.\r\n return String(a).localeCompare(String(b), 'zh-Hans-CN')\r\n}\r\n\r\n/**\r\n * Executes the local query pipeline: text search (case-insensitive contains,\r\n * AND across columns) → enum IN filters → stable multi-column sort → page\r\n * slice. The returned `page` is the effective page after clamping to the last\r\n * page so the component can sync the pager when data shrinks.\r\n */\r\nexport function runOdTableLocalQuery<T extends object>(\r\n rows: readonly T[],\r\n columns: readonly OdTableColumn[],\r\n query: OdTableQuery,\r\n): { rows: T[]; total: number; page: number } {\r\n const columnByField = new Map(columns.map((column) => [column.field, column]))\r\n const normalized = normalizeOdTableQuery(query)\r\n\r\n let filtered: T[] = rows.filter((row) => {\r\n const record = row as Record<string, unknown>\r\n for (const search of normalized.searches) {\r\n const raw = record[search.field]\r\n if (raw === null || raw === undefined) return false\r\n if (!String(raw).toLowerCase().includes(search.value.toLowerCase())) return false\r\n }\r\n for (const filter of normalized.filters) {\r\n const raw = record[filter.field]\r\n if (!filter.values.includes(String(raw))) return false\r\n }\r\n return true\r\n })\r\n\r\n if (normalized.sorting.length > 0) {\r\n const entries = filtered.map((row, index) => ({ row, index }))\r\n entries.sort((a, b) => {\r\n for (const sort of normalized.sorting) {\r\n const column = columnByField.get(sort.field)\r\n const left = resolveSortValue(column, (a.row as Record<string, unknown>)[sort.field])\r\n const right = resolveSortValue(column, (b.row as Record<string, unknown>)[sort.field])\r\n // Nullish/invalid values always sort after valid ones, regardless of direction.\r\n if (left.rank !== right.rank) return left.rank - right.rank\r\n const compared = compareValues(left.compareValue, right.compareValue)\r\n if (compared !== 0) return sort.direction === 'asc' ? compared : -compared\r\n }\r\n return a.index - b.index\r\n })\r\n filtered = entries.map((entry) => entry.row)\r\n }\r\n\r\n const total = filtered.length\r\n const pageCount = Math.max(1, Math.ceil(total / normalized.pageSize))\r\n const page = Math.min(Math.max(1, normalized.page), pageCount)\r\n const start = (page - 1) * normalized.pageSize\r\n return { rows: filtered.slice(start, start + normalized.pageSize), total, page }\r\n}\r\n","/** Query transport and cancellation. Metadata shares the data request lifecycle. */\r\nimport type { OdTableRequest, OdTableQuery } from './OdTable.types'\r\n\r\nexport type { OdTableRequest } from './OdTable.types'\r\n\r\nexport const OD_TABLE_REQUEST_ERROR_CODES = {\r\n HTTP: 'OD_TABLE_REQUEST_HTTP',\r\n EMPTY_RESPONSE: 'OD_TABLE_REQUEST_EMPTY_RESPONSE',\r\n JSON_PARSE: 'OD_TABLE_REQUEST_JSON_PARSE',\r\n ABORTED: 'OD_TABLE_REQUEST_ABORTED',\r\n REQUEST: 'OD_TABLE_REQUEST_FAILED',\r\n} as const\r\n\r\nexport type OdTableRequestErrorCode =\r\n (typeof OD_TABLE_REQUEST_ERROR_CODES)[keyof typeof OD_TABLE_REQUEST_ERROR_CODES]\r\n\r\nexport type OdTableRequestOptions = {\r\n method: 'POST'\r\n headers?: Record<string, string>\r\n body: OdTableQuery\r\n signal: AbortSignal\r\n}\r\n\r\nexport type OdTableRequestErrorDetails = {\r\n status?: number\r\n statusText?: string\r\n cause?: unknown\r\n}\r\n\r\nexport class OdTableRequestError extends Error {\r\n readonly code: OdTableRequestErrorCode\r\n readonly status?: number\r\n readonly statusText?: string\r\n readonly cause?: unknown\r\n\r\n constructor(\r\n code: OdTableRequestErrorCode,\r\n message: string,\r\n details: OdTableRequestErrorDetails = {},\r\n ) {\r\n super(message)\r\n this.name = 'OdTableRequestError'\r\n this.code = code\r\n this.status = details.status\r\n this.statusText = details.statusText\r\n this.cause = details.cause\r\n }\r\n}\r\n\r\nconst isAbortError = (error: unknown): boolean =>\r\n error instanceof OdTableRequestError\r\n ? error.code === OD_TABLE_REQUEST_ERROR_CODES.ABORTED\r\n : error instanceof DOMException\r\n ? error.name === 'AbortError'\r\n : typeof error === 'object' &&\r\n error !== null &&\r\n 'name' in error &&\r\n (error as { name?: unknown }).name === 'AbortError'\r\n\r\nconst abortedError = (cause?: unknown): OdTableRequestError =>\r\n new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.ABORTED,\r\n 'The OdTable request was aborted.',\r\n { cause },\r\n )\r\n\r\nconst normalizeHeaders = (\r\n headers: Record<string, string> | undefined,\r\n): Record<string, string> => {\r\n const normalized: Record<string, string> = {\r\n Accept: 'application/json',\r\n ...headers,\r\n }\r\n\r\n if (!Object.keys(normalized).some((key) => key.toLowerCase() === 'content-type')) {\r\n normalized['Content-Type'] = 'application/json'\r\n }\r\n\r\n return normalized\r\n}\r\n\r\n/** Default fetch implementation. It always returns an already parsed body. */\r\nexport const fetchOdTableRequest: OdTableRequest = async (url, options) => {\r\n let response: Response\r\n\r\n try {\r\n response = await fetch(url, {\r\n method: options.method,\r\n headers: normalizeHeaders(options.headers),\r\n body: JSON.stringify(options.body),\r\n signal: options.signal,\r\n })\r\n } catch (error) {\r\n if (isAbortError(error) || options.signal.aborted) {\r\n throw abortedError(error)\r\n }\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.REQUEST,\r\n 'The OdTable request failed.',\r\n { cause: error },\r\n )\r\n }\r\n\r\n if (!response.ok) {\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.HTTP,\r\n `The OdTable request failed with HTTP ${response.status}.`,\r\n { status: response.status, statusText: response.statusText },\r\n )\r\n }\r\n\r\n if (response.status === 204) {\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.EMPTY_RESPONSE,\r\n 'The OdTable request returned an empty response.',\r\n )\r\n }\r\n\r\n let text: string\r\n try {\r\n text = await response.text()\r\n } catch (error) {\r\n if (isAbortError(error) || options.signal.aborted) {\r\n throw abortedError(error)\r\n }\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.REQUEST,\r\n 'The OdTable response could not be read.',\r\n { cause: error },\r\n )\r\n }\r\n\r\n if (!text.trim()) {\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.EMPTY_RESPONSE,\r\n 'The OdTable request returned an empty response.',\r\n )\r\n }\r\n\r\n try {\r\n return JSON.parse(text) as unknown\r\n } catch (error) {\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.JSON_PARSE,\r\n 'The OdTable response was not valid JSON.',\r\n { cause: error },\r\n )\r\n }\r\n}\r\n\r\n/**\r\n * Execute a custom request implementation while preserving the URL request\r\n * contract. Custom implementations own HTTP and JSON parsing; this wrapper\r\n * only normalizes cancellation and unexpected thrown values.\r\n */\r\nexport const executeOdTableRequest = async (\r\n request: OdTableRequest | undefined,\r\n url: string,\r\n options: OdTableRequestOptions,\r\n): Promise<unknown> => {\r\n try {\r\n const value = await (request ?? fetchOdTableRequest)(url, {\r\n ...options,\r\n headers: normalizeHeaders(options.headers),\r\n })\r\n\r\n if (value === null || value === undefined) {\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.EMPTY_RESPONSE,\r\n 'The OdTable request returned an empty response.',\r\n )\r\n }\r\n return value\r\n } catch (error) {\r\n if (isAbortError(error) || options.signal.aborted) {\r\n throw abortedError(error)\r\n }\r\n if (error instanceof OdTableRequestError) throw error\r\n throw new OdTableRequestError(\r\n OD_TABLE_REQUEST_ERROR_CODES.REQUEST,\r\n 'The OdTable request failed.',\r\n { cause: error },\r\n )\r\n }\r\n}\r\n\r\nexport type OdTableRequestOutcome<T> =\r\n | { status: 'accepted'; value: T; sequence: number }\r\n | { status: 'ignored'; reason: 'aborted' | 'stale' | 'disposed'; sequence: number }\r\n\r\n/** Only the newest query can update rows, metadata, loading or errors. */\r\nexport function createOdTableRequestCoordinator() {\r\n let disposed = false\r\n let sequence = 0\r\n let controller: AbortController | undefined\r\n\r\n function cancel() {\r\n controller?.abort()\r\n controller = undefined\r\n sequence++\r\n }\r\n\r\n async function run<T>(operation: (context: { signal: AbortSignal }) => Promise<T>): Promise<OdTableRequestOutcome<T>> {\r\n if (disposed) return { status: 'ignored', reason: 'disposed', sequence }\r\n cancel()\r\n const current = sequence\r\n const active = new AbortController()\r\n controller = active\r\n const ignored = (): OdTableRequestOutcome<T> => ({\r\n status: 'ignored', reason: disposed ? 'disposed' : active.signal.aborted ? 'aborted' : 'stale', sequence: current,\r\n })\r\n try {\r\n const value = await operation({ signal: active.signal })\r\n if (disposed || current !== sequence || active.signal.aborted) return ignored()\r\n return { status: 'accepted', value, sequence: current }\r\n } catch (error) {\r\n if (disposed || current !== sequence || active.signal.aborted || isAbortError(error)) return ignored()\r\n throw error\r\n } finally {\r\n if (current === sequence) controller = undefined\r\n }\r\n }\r\n\r\n return { run, cancel, dispose: () => { disposed = true; cancel() } }\r\n}\r\n","/** Public contracts and input validation shared by OdTable's implementation. */\r\n\r\nimport type { VNodeChild } from 'vue'\r\n\r\nexport type OdTableRowKey = string | number\r\n\r\nexport type OdTableDataType = 'text' | 'number' | 'datetime' | 'boolean' | 'enum'\r\n\r\nexport type OdTableOption = {\r\n value: string\r\n label: string\r\n disabled?: boolean\r\n}\r\n\r\nexport type OdTableColumn = {\r\n field: string\r\n title: string\r\n dataType: OdTableDataType\r\n sortable?: boolean\r\n searchable?: boolean\r\n filterable?: boolean\r\n width?: number\r\n minWidth?: number\r\n align?: 'left' | 'center' | 'right'\r\n visible?: boolean\r\n resizable?: boolean\r\n options?: OdTableOption[]\r\n numberFormat?: { maximumFractionDigits?: number }\r\n booleanLabels?: { true: string; false: string }\r\n}\r\n\r\nexport type OdTableCellContext<T extends object> = {\r\n row: T\r\n rowKey: OdTableRowKey\r\n column: OdTableColumn\r\n value: unknown\r\n text: string\r\n}\r\n\r\nexport type OdTableSlots<T extends object> = {\r\n [name: `cell-${string}`]: ((context: OdTableCellContext<T>) => VNodeChild) | undefined\r\n}\r\n\r\nexport type OdTableSorting = {\r\n field: string\r\n direction: 'asc' | 'desc'\r\n}\r\n\r\nexport type OdTableSearch = { field: string; value: string }\r\nexport type OdTableFilter = { field: string; values: string[] }\r\n\r\nexport type OdTableQuery = {\r\n page: number\r\n pageSize: number\r\n searches: OdTableSearch[]\r\n filters: OdTableFilter[]\r\n sorting: OdTableSorting[]\r\n}\r\n\r\nexport type OdTableInitialQuery = Partial<OdTableQuery>\r\n\r\nexport type OdTableFieldMeta = {\r\n sortable?: boolean\r\n searchable?: boolean\r\n filterable?: boolean\r\n options?: OdTableOption[]\r\n}\r\n\r\nexport type OdTableMeta = {\r\n fields: Record<string, OdTableFieldMeta>\r\n}\r\n\r\nexport type OdTableResult<T> = {\r\n items: T[]\r\n total: number\r\n page: number\r\n pageSize: number\r\n meta: OdTableMeta\r\n}\r\n\r\nexport type OdTablePaginationConfig = {\r\n defaultPageSize?: number\r\n pageSizeOptions?: number[]\r\n}\r\n\r\nexport type OdTableRequest = (\r\n url: string,\r\n options: {\r\n method: 'POST'\r\n headers?: Record<string, string>\r\n body: OdTableQuery\r\n signal: AbortSignal\r\n },\r\n) => Promise<unknown>\r\n\r\nexport type OdTableLoadData<T> = (\r\n query: OdTableQuery,\r\n context: { signal: AbortSignal },\r\n) => Promise<OdTableResult<T>>\r\n\r\nexport type OdTableLocale = Partial<{\r\n search: string\r\n filter: string\r\n reset: string\r\n confirm: string\r\n columnSettings: string\r\n restoreDefault: string\r\n loading: string\r\n empty: string\r\n loadError: string\r\n retry: string\r\n relativeJustNow: string\r\n relativeMinutes: (count: number) => string\r\n relativeHours: (count: number) => string\r\n relativeDays: (count: number) => string\r\n relativeMonths: (count: number) => string\r\n relativeYears: (count: number) => string\r\n selectAll: string\r\n deselectAll: string\r\n selectedCount: (count: number) => string\r\n previousPage: string\r\n nextPage: string\r\n pageSize: string\r\n total: (count: number) => string\r\n tableName: string\r\n pagination: string\r\n perPage: (size: number) => string\r\n pageNumber: (page: number) => string\r\n clearCondition: (title: string) => string\r\n clearAllConditions: string\r\n keepOneColumnVisible: string\r\n resizeColumn: (title: string) => string\r\n selectRow: (index: number) => string\r\n}>\r\n\r\n/** Built-in Chinese copy. Consumers override entries through the `locale` prop. */\r\nexport const OD_TABLE_DEFAULT_LOCALE: Required<OdTableLocale> = {\r\n search: '搜索',\r\n filter: '筛选',\r\n reset: '重置',\r\n confirm: '确定',\r\n columnSettings: '列设置',\r\n restoreDefault: '恢复默认',\r\n loading: '加载中…',\r\n empty: '暂无数据',\r\n loadError: '加载失败',\r\n retry: '重试',\r\n relativeJustNow: '刚刚',\r\n relativeMinutes: (count) => `${count} 分钟前`,\r\n relativeHours: (count) => `${count} 小时前`,\r\n relativeDays: (count) => `${count} 天前`,\r\n relativeMonths: (count) => `${count} 个月前`,\r\n relativeYears: (count) => `${count} 年前`,\r\n selectAll: '全选本页',\r\n deselectAll: '取消全选本页',\r\n selectedCount: (count) => `已选 ${count} 项`,\r\n previousPage: '上一页',\r\n nextPage: '下一页',\r\n pageSize: '每页条数',\r\n total: (count) => `共 ${count} 条`,\r\n tableName: '数据表格',\r\n pagination: '分页',\r\n perPage: (size) => `${size} / 页`,\r\n pageNumber: (page) => `第 ${page} 页`,\r\n clearCondition: (title) => `清除 ${title} 的查询条件`,\r\n clearAllConditions: '清除全部条件',\r\n keepOneColumnVisible: '至少需要保留一列可见业务列',\r\n resizeColumn: (title) => `调整 ${title} 列宽`,\r\n selectRow: (index) => `选择第 ${index} 行`,\r\n}\r\n\r\nexport type OdTableProps<T extends object> = {\r\n columns: OdTableColumn[]\r\n rows?: T[]\r\n rowKey: string\r\n pagination?: OdTablePaginationConfig\r\n loadData?: OdTableLoadData<T>\r\n queryUrl?: string\r\n request?: OdTableRequest\r\n initialQuery?: OdTableInitialQuery\r\n selectedRowKeys?: OdTableRowKey[]\r\n locale?: OdTableLocale\r\n density?: 'compact' | 'standard'\r\n striped?: boolean\r\n bordered?: boolean\r\n tableLabel?: string\r\n /** Reference timestamp for relative datetime rendering; captured on mount when omitted. */\r\n now?: number\r\n}\r\n\r\nexport type OdTableExpose = {\r\n refresh: () => Promise<void>\r\n}\r\n\r\nexport type OdTableEvents<T> = {\r\n 'selection-change': (keys: OdTableRowKey[], rows: T[]) => void\r\n 'update:selected-row-keys': (keys: OdTableRowKey[]) => void\r\n 'query-change': (query: OdTableQuery) => void\r\n 'column-visibility-change': (visibility: Record<string, boolean>) => void\r\n 'column-width-change': (payload: { field: string; width: number }) => void\r\n 'data-error': (payload: { error: unknown; query: OdTableQuery }) => void\r\n retry: (payload: { stage: 'data' }) => void\r\n 'config-error': (error: OdTableConfigError) => void\r\n}\r\n\r\nexport type OdTableConfigErrorCode =\r\n | 'MODE_MISSING'\r\n | 'MODE_PARTIAL'\r\n | 'MODE_CONFLICT'\r\n | 'REQUEST_WITHOUT_URL_MODE'\r\n | 'INVALID_COLUMNS'\r\n | 'DUPLICATE_COLUMN_FIELD'\r\n | 'INVALID_COLUMN_FIELD'\r\n | 'INVALID_COLUMN_WIDTH'\r\n | 'INVALID_NUMBER_FORMAT'\r\n | 'SEARCHABLE_NON_TEXT'\r\n | 'FILTERABLE_NON_ENUM'\r\n | 'ENUM_OPTIONS_REQUIRED'\r\n | 'DUPLICATE_ENUM_OPTION'\r\n | 'INVALID_PAGINATION'\r\n | 'MISSING_ROW_KEY'\r\n | 'DUPLICATE_ROW_KEY'\r\n | 'INVALID_INITIAL_QUERY'\r\n | 'INVALID_ROWS'\r\n | 'INVALID_RESULT'\r\n | 'RESULT_TOTAL_INVALID'\r\n | 'RESULT_PAGE_INVALID'\r\n | 'RESULT_PAGE_SIZE_INVALID'\r\n | 'RESULT_ITEMS_OVERFLOW'\r\n | 'RESULT_EMPTY_CONFLICT'\r\n | 'INVALID_META'\r\n | 'META_QUERY_CONFLICT'\r\n\r\nexport class OdTableConfigError extends Error {\r\n override readonly name = 'OdTableConfigError'\r\n readonly code: OdTableConfigErrorCode\r\n readonly details?: unknown\r\n\r\n constructor(code: OdTableConfigErrorCode, message: string, details?: unknown) {\r\n super(message)\r\n this.code = code\r\n this.details = details\r\n Object.setPrototypeOf(this, new.target.prototype)\r\n }\r\n}\r\n\r\nexport type OdTableSourceMode = 'local' | 'function' | 'url'\r\n\r\ntype OdTableSourceInput<T extends object> = Partial<Pick<\r\n OdTableProps<T>,\r\n 'columns' | 'rows' | 'rowKey' | 'pagination' | 'loadData' | 'queryUrl' | 'request'\r\n>>\r\n\r\nconst isProvided = (value: unknown): boolean => value !== undefined && value !== null\r\n\r\nconst fail = (code: OdTableConfigErrorCode, message: string, details?: unknown): never => {\r\n throw new OdTableConfigError(code, message, details)\r\n}\r\n\r\nconst isPositiveInteger = (value: unknown): value is number =>\r\n typeof value === 'number' && Number.isInteger(value) && value > 0\r\n\r\nconst isRowKey = (value: unknown): value is OdTableRowKey =>\r\n (typeof value === 'string' && value.length > 0) || (typeof value === 'number' && Number.isFinite(value))\r\n\r\nexport function validateOdTableColumns(columns: unknown, remote = false): OdTableColumn[] {\r\n if (!Array.isArray(columns) || columns.length === 0) {\r\n return fail('INVALID_COLUMNS', 'OdTable columns must be a non-empty array.')\r\n }\r\n const fields = new Set<string>()\r\n for (const column of columns) {\r\n if (!column || typeof column !== 'object') {\r\n fail('INVALID_COLUMNS', 'Each OdTable column must be an object.')\r\n }\r\n const value = column as Partial<OdTableColumn>\r\n const field = value.field\r\n if (typeof field !== 'string' || field.trim() === '' || field === '__od_table_selection') {\r\n return fail('INVALID_COLUMN_FIELD', 'Each OdTable column requires a non-empty field.')\r\n }\r\n if (fields.has(field)) {\r\n fail('DUPLICATE_COLUMN_FIELD', `Duplicate OdTable column field: ${field}.`, field)\r\n }\r\n fields.add(field)\r\n if (typeof value.title !== 'string' || value.title.length === 0) {\r\n fail('INVALID_COLUMNS', `Column ${value.field} requires a title.`)\r\n }\r\n if (!['text', 'number', 'datetime', 'boolean', 'enum'].includes(value.dataType ?? '')) {\r\n fail('INVALID_COLUMNS', `Column ${value.field} has an unsupported dataType.`)\r\n }\r\n for (const flag of ['sortable', 'searchable', 'filterable', 'visible', 'resizable'] as const) {\r\n if (value[flag] !== undefined && typeof value[flag] !== 'boolean') {\r\n fail('INVALID_COLUMNS', `Column ${value.field} ${flag} must be a boolean.`, value.field)\r\n }\r\n }\r\n if (value.align !== undefined && !['left', 'center', 'right'].includes(value.align)) {\r\n fail('INVALID_COLUMNS', `Column ${value.field} align is invalid.`, value.field)\r\n }\r\n if (value.searchable && value.dataType !== 'text') {\r\n fail('SEARCHABLE_NON_TEXT', `Column ${value.field} is searchable but is not a text column.`, value.field)\r\n }\r\n if (value.filterable && value.dataType !== 'enum') {\r\n fail('FILTERABLE_NON_ENUM', `Column ${value.field} is filterable but is not an enum column.`, value.field)\r\n }\r\n if (value.dataType === 'enum' && !remote) {\r\n if (!Array.isArray(value.options)) {\r\n fail('ENUM_OPTIONS_REQUIRED', `Enum column ${value.field} requires options.`, value.field)\r\n }\r\n const options = new Set<string>()\r\n for (const option of value.options as OdTableOption[]) {\r\n if (!option || typeof option.value !== 'string' || typeof option.label !== 'string' || (option.disabled !== undefined && typeof option.disabled !== 'boolean')) {\r\n fail('INVALID_COLUMNS', `Enum column ${value.field} has an invalid option.`, value.field)\r\n }\r\n if (options.has(option.value)) {\r\n fail('DUPLICATE_ENUM_OPTION', `Enum column ${value.field} has a duplicate option value.`, option.value)\r\n }\r\n options.add(option.value)\r\n }\r\n }\r\n if (value.width !== undefined && (!Number.isFinite(value.width) || value.width <= 0)) {\r\n fail('INVALID_COLUMN_WIDTH', `Column ${value.field} width must be positive.`, value.field)\r\n }\r\n if (value.minWidth !== undefined && (!Number.isFinite(value.minWidth) || value.minWidth <= 0)) {\r\n fail('INVALID_COLUMN_WIDTH', `Column ${value.field} minWidth must be positive.`, value.field)\r\n }\r\n if (value.width !== undefined && value.minWidth !== undefined && value.width < value.minWidth) {\r\n fail('INVALID_COLUMN_WIDTH', `Column ${value.field} width cannot be less than minWidth.`, value.field)\r\n }\r\n if (value.numberFormat !== undefined) {\r\n if (!value.numberFormat || typeof value.numberFormat !== 'object') {\r\n fail('INVALID_NUMBER_FORMAT', `Column ${value.field} numberFormat is invalid.`, value.field)\r\n }\r\n const maximumFractionDigits = value.numberFormat.maximumFractionDigits\r\n if (\r\n maximumFractionDigits !== undefined &&\r\n (!Number.isInteger(maximumFractionDigits) || maximumFractionDigits < 0 || maximumFractionDigits > 20)\r\n ) {\r\n fail('INVALID_NUMBER_FORMAT', `Column ${value.field} maximumFractionDigits must be an integer from 0 to 20.`, value.field)\r\n }\r\n }\r\n if (value.booleanLabels !== undefined) {\r\n if (\r\n !value.booleanLabels ||\r\n typeof value.booleanLabels !== 'object' ||\r\n typeof value.booleanLabels.true !== 'string' ||\r\n typeof value.booleanLabels.false !== 'string'\r\n ) {\r\n fail('INVALID_COLUMNS', `Column ${value.field} booleanLabels is invalid.`, value.field)\r\n }\r\n }\r\n }\r\n return columns as OdTableColumn[]\r\n}\r\n\r\nexport function validateOdTablePagination(pagination: unknown): OdTablePaginationConfig {\r\n if (pagination === undefined) return {}\r\n if (!pagination || typeof pagination !== 'object') {\r\n return fail('INVALID_PAGINATION', 'OdTable pagination must be an object.')\r\n }\r\n const value = pagination as OdTablePaginationConfig\r\n if (value.defaultPageSize !== undefined && !isPositiveInteger(value.defaultPageSize)) {\r\n fail('INVALID_PAGINATION', 'Pagination defaultPageSize must be a positive integer.')\r\n }\r\n if (value.pageSizeOptions !== undefined) {\r\n if (!Array.isArray(value.pageSizeOptions) || value.pageSizeOptions.length === 0) {\r\n fail('INVALID_PAGINATION', 'Pagination pageSizeOptions must be a non-empty array.')\r\n }\r\n const options = new Set<number>()\r\n for (const pageSize of value.pageSizeOptions) {\r\n if (!isPositiveInteger(pageSize) || options.has(pageSize)) {\r\n fail('INVALID_PAGINATION', 'Pagination pageSizeOptions must contain unique positive integers.')\r\n }\r\n options.add(pageSize)\r\n }\r\n }\r\n return value\r\n}\r\n\r\nexport function validateOdTableInitialQuery(query: unknown): OdTableInitialQuery | undefined {\r\n if (query === undefined) return undefined\r\n if (!query || typeof query !== 'object') fail('INVALID_INITIAL_QUERY', 'OdTable initialQuery must be an object.')\r\n const value = query as Partial<OdTableQuery>\r\n if (value.page !== undefined && !isPositiveInteger(value.page)) fail('INVALID_INITIAL_QUERY', 'initialQuery.page must be positive.')\r\n if (value.pageSize !== undefined && !isPositiveInteger(value.pageSize)) fail('INVALID_INITIAL_QUERY', 'initialQuery.pageSize must be positive.')\r\n if (value.searches !== undefined && (!Array.isArray(value.searches) || value.searches.some((item) => !item || typeof item.field !== 'string' || typeof item.value !== 'string'))) {\r\n fail('INVALID_INITIAL_QUERY', 'initialQuery.searches is invalid.')\r\n }\r\n if (value.filters !== undefined && (!Array.isArray(value.filters) || value.filters.some((item) => !item || typeof item.field !== 'string' || !Array.isArray(item.values) || item.values.some((entry) => typeof entry !== 'string')))) {\r\n fail('INVALID_INITIAL_QUERY', 'initialQuery.filters is invalid.')\r\n }\r\n if (value.sorting !== undefined && (!Array.isArray(value.sorting) || value.sorting.some((item) => !item || typeof item.field !== 'string' || !['asc', 'desc'].includes(item.direction)))) {\r\n fail('INVALID_INITIAL_QUERY', 'initialQuery.sorting is invalid.')\r\n }\r\n return value\r\n}\r\n\r\n/**\r\n * Checks query conditions against resolved column capabilities.\r\n * Keeping this validation next to the shape validator prevents local and\r\n * remote modes from silently accepting conditions the column contract forbids.\r\n */\r\nexport function validateOdTableInitialQueryForColumns(\r\n query: OdTableInitialQuery | undefined,\r\n columns: readonly OdTableColumn[],\r\n pending = false,\r\n code: 'INVALID_INITIAL_QUERY' | 'META_QUERY_CONFLICT' = 'INVALID_INITIAL_QUERY',\r\n): OdTableInitialQuery | undefined {\r\n if (!query) return query\r\n const byField = new Map(columns.map((column) => [column.field, column]))\r\n for (const entry of query.searches ?? []) {\r\n const column = byField.get(entry.field)\r\n if (!column || (pending ? column.searchable === false : !column.searchable) || column.dataType !== 'text') {\r\n fail(code, `initialQuery search field ${entry.field} is not searchable.`, entry)\r\n }\r\n }\r\n for (const entry of query.filters ?? []) {\r\n const column = byField.get(entry.field)\r\n if (!column || (pending ? column.filterable === false : !column.filterable) || column.dataType !== 'enum') {\r\n fail(code, `initialQuery filter field ${entry.field} is not filterable.`, entry)\r\n }\r\n }\r\n if (!pending) {\r\n for (const entry of query.filters ?? []) {\r\n const options = byField.get(entry.field)?.options ?? []\r\n if (entry.values.some((value) => !options.some((option) => option.value === value && !option.disabled))) {\r\n fail(code, `Query filter ${entry.field} contains an unavailable value.`, entry)\r\n }\r\n }\r\n }\r\n for (const entry of query.sorting ?? []) {\r\n const column = byField.get(entry.field)\r\n if (!column || (pending ? column.sortable === false : !column.sortable)) {\r\n fail(code, `initialQuery sort field ${entry.field} is not sortable.`, entry)\r\n }\r\n }\r\n return query\r\n}\r\n\r\nexport function validateOdTableRows<T extends object>(rows: unknown, rowKey: string): T[] {\r\n const entries = Array.isArray(rows) ? rows : fail('INVALID_ROWS', 'OdTable rows must be an array.')\r\n const keys = new Set<string>()\r\n for (const row of entries) {\r\n if (!row || typeof row !== 'object') fail('MISSING_ROW_KEY', 'Every row must be an object.')\r\n const key = (row as Record<string, unknown>)[rowKey]\r\n if (!isRowKey(key)) fail('MISSING_ROW_KEY', `Every row must contain a valid ${rowKey} key.`, row)\r\n const identity = `${typeof key}:${String(key)}`\r\n if (keys.has(identity)) fail('DUPLICATE_ROW_KEY', `Duplicate row key: ${String(key)}.`, key)\r\n keys.add(identity)\r\n }\r\n return entries as T[]\r\n}\r\n\r\nexport function validateOdTableSourceMode<T extends object>(input: OdTableSourceInput<T>): OdTableSourceMode {\r\n const sources = [input.rows, input.loadData, input.queryUrl].filter(isProvided)\r\n if (sources.length === 0) fail('MODE_MISSING', 'OdTable requires rows, loadData, or queryUrl.')\r\n if (sources.length > 1) fail('MODE_CONFLICT', 'OdTable data sources are mutually exclusive.')\r\n if (!Array.isArray(input.columns) || typeof input.rowKey !== 'string' || input.rowKey.trim() === '') {\r\n fail('MODE_PARTIAL', 'Every OdTable data source requires columns and rowKey.')\r\n }\r\n if (isProvided(input.rows)) {\r\n if (!Array.isArray(input.rows)) fail('INVALID_ROWS', 'OdTable rows must be an array.')\r\n if (input.request !== undefined) fail('REQUEST_WITHOUT_URL_MODE', 'request is only supported in URL mode.')\r\n return 'local'\r\n }\r\n if (isProvided(input.loadData)) {\r\n if (typeof input.loadData !== 'function') fail('MODE_PARTIAL', 'loadData must be a function.')\r\n if (input.request !== undefined) fail('REQUEST_WITHOUT_URL_MODE', 'request is only supported in URL mode.')\r\n return 'function'\r\n }\r\n if (typeof input.queryUrl !== 'string' || input.queryUrl.trim() === '') {\r\n fail('MODE_PARTIAL', 'queryUrl must be a non-empty URL.')\r\n }\r\n return 'url'\r\n}\r\n\r\nconst isNonNegativeInteger = (value: unknown): value is number =>\r\n typeof value === 'number' && Number.isInteger(value) && value >= 0\r\n\r\n/**\r\n * Validates a remote query response payload against the OdTable result\r\n * contract. Invalid payloads throw an `OdTableConfigError` with a stable code\r\n * so callers can route them to `data-error` without string matching.\r\n */\r\nexport function validateOdTableResult<T>(payload: unknown): OdTableResult<T> {\r\n if (!payload || typeof payload !== 'object' || !Array.isArray((payload as Partial<OdTableResult<T>>).items)) {\r\n fail('INVALID_RESULT', 'OdTable data response must be an object with an items array.', payload)\r\n }\r\n const value = payload as Partial<OdTableResult<T>>\r\n if (!isNonNegativeInteger(value.total)) {\r\n fail('RESULT_TOTAL_INVALID', 'OdTable data response total must be a non-negative integer.', value.total)\r\n }\r\n if (!isPositiveInteger(value.page)) {\r\n fail('RESULT_PAGE_INVALID', 'OdTable data response page must be a positive integer.', value.page)\r\n }\r\n if (!isPositiveInteger(value.pageSize)) {\r\n fail('RESULT_PAGE_SIZE_INVALID', 'OdTable data response pageSize must be a positive integer.', value.pageSize)\r\n }\r\n if (value.items!.length > value.pageSize!) {\r\n fail('RESULT_ITEMS_OVERFLOW', 'OdTable data response items cannot exceed pageSize.', {\r\n items: value.items!.length,\r\n pageSize: value.pageSize,\r\n })\r\n }\r\n if (value.total === 0 && (value.page !== 1 || value.items!.length > 0)) {\r\n fail('RESULT_EMPTY_CONFLICT', 'OdTable data response with total 0 must be page 1 with empty items.', {\r\n page: value.page,\r\n items: value.items!.length,\r\n })\r\n }\r\n return { ...payload as OdTableResult<T>, meta: validateOdTableMeta(value.meta) }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value)\n\n/** Copy only supported metadata so extra response properties cannot define UI. */\nexport function validateOdTableMeta(payload: unknown): OdTableMeta {\n if (!isRecord(payload) || !isRecord(payload.fields)) {\n return fail('INVALID_META', 'Every query response requires meta.fields.')\n }\n const entries: Array<[string, OdTableFieldMeta]> = []\n for (const [field, value] of Object.entries(payload.fields)) {\n if (!field.trim() || !isRecord(value)) return fail('INVALID_META', 'Invalid field metadata.', field)\n const result: OdTableFieldMeta = {}\n for (const flag of ['sortable', 'searchable', 'filterable'] as const) {\n if (value[flag] !== undefined) {\n if (typeof value[flag] !== 'boolean') return fail('INVALID_META', `${field}.${flag} must be boolean.`)\n result[flag] = value[flag]\n }\n }\n if (value.options !== undefined) {\n if (!Array.isArray(value.options)) return fail('INVALID_META', `${field}.options must be an array.`)\n const seen = new Set<string>()\n result.options = value.options.map((option: unknown) => {\n if (!isRecord(option) || typeof option.value !== 'string' || typeof option.label !== 'string' ||\n (option.disabled !== undefined && typeof option.disabled !== 'boolean') || seen.has(option.value)) {\n return fail('INVALID_META', `${field} has an invalid or duplicate enum option.`)\n }\n seen.add(option.value)\n return { value: option.value, label: option.label, ...(option.disabled === undefined ? {} : { disabled: option.disabled }) }\n })\n }\n entries.push([field, result])\n }\n return { fields: Object.fromEntries(entries) }\n}\n\n/** A null snapshot means the first response has not arrived: all query UI is closed. */\nexport function resolveOdTableRemoteColumns(columns: readonly OdTableColumn[], meta: OdTableMeta | null): OdTableColumn[] {\n return columns.map((column) => {\n const field = meta && Object.hasOwn(meta.fields, column.field) ? meta.fields[column.field] : undefined\n if (meta) {\n if (column.dataType === 'enum' && !field?.options) fail('INVALID_META', `Enum field ${column.field} requires options.`)\n if (field?.searchable && column.dataType !== 'text') fail('INVALID_META', `${column.field} cannot be searchable.`)\n if (field?.filterable && column.dataType !== 'enum') fail('INVALID_META', `${column.field} cannot be filterable.`)\n }\n return {\n ...column,\n sortable: column.sortable !== false && field?.sortable === true,\n searchable: column.searchable !== false && field?.searchable === true,\n filterable: column.filterable !== false && field?.filterable === true,\n options: column.dataType === 'enum' ? field?.options ?? [] : undefined,\n }\n })\n}\n","<script setup lang=\"ts\" generic=\"T extends object\">\r\nimport { computed, getCurrentInstance, onBeforeUnmount, ref, shallowRef, watch } from 'vue'\r\nimport {\r\n columnResizingFeature,\r\n columnSizingFeature,\r\n columnVisibilityFeature,\r\n rowSelectionFeature,\r\n tableFeatures,\r\n useTable,\r\n type ColumnDef,\r\n type ColumnSizingState,\r\n type Updater,\r\n} from '@tanstack/vue-table'\r\nimport {\r\n IconAlertCircle,\r\n IconArrowsSort,\r\n IconChevronLeft,\r\n IconChevronRight,\r\n IconFilter,\r\n IconListCheck,\r\n IconLoader,\r\n IconRefresh,\r\n IconSearch,\r\n IconSortAscending,\r\n IconSortDescending,\r\n} from '../icons'\r\nimport OdIcon from './OdIcon.vue'\r\nimport { useOdTablePopover } from './od-table-a11y'\r\nimport { formatOdTableCell, odTableExactDatetimeOrNull, parseOdTableDatetime } from './od-table-formatters'\r\nimport {\r\n cleanupOdTableQueryForColumns,\r\n createOdTableQuery,\r\n decodeOdTableRowKey,\r\n encodeOdTableRowKey,\r\n mergeOdTableInitialQuery,\r\n normalizeOdTableQuery,\r\n OD_TABLE_DEFAULT_PAGE_SIZE_OPTIONS,\r\n odTableQueriesEqual,\r\n odTableQueryReducer,\r\n runOdTableLocalQuery,\r\n type OdTableQueryAction,\r\n} from './od-table-query'\r\nimport { createOdTableRequestCoordinator, executeOdTableRequest } from './od-table-request'\r\nimport {\r\n OD_TABLE_DEFAULT_LOCALE,\r\n OdTableConfigError,\r\n validateOdTableColumns,\r\n validateOdTableInitialQuery,\r\n validateOdTableInitialQueryForColumns,\r\n validateOdTablePagination,\r\n validateOdTableResult,\r\n validateOdTableRows,\r\n resolveOdTableRemoteColumns,\r\n validateOdTableSourceMode,\r\n type OdTableColumn,\r\n type OdTableLocale,\r\n type OdTableProps,\r\n type OdTableQuery,\r\n type OdTableRowKey,\r\n type OdTableResult,\r\n type OdTableSlots,\r\n type OdTableSourceMode,\r\n} from './OdTable.types'\r\n\r\ndefineOptions({ name: 'OdTable', inheritAttrs: false })\r\n\r\ndefineSlots<OdTableSlots<T>>()\r\n\r\nconst props = withDefaults(defineProps<OdTableProps<T>>(), {\r\n density: 'standard',\r\n striped: false,\r\n bordered: true,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'selection-change': [keys: OdTableRowKey[], rows: T[]]\r\n 'update:selected-row-keys': [keys: OdTableRowKey[]]\r\n 'query-change': [query: OdTableQuery]\r\n 'column-visibility-change': [visibility: Record<string, boolean>]\r\n 'column-width-change': [payload: { field: string; width: number }]\r\n 'data-error': [payload: { error: unknown; query: OdTableQuery }]\r\n retry: [payload: { stage: 'data' }]\r\n 'config-error': [error: OdTableConfigError]\r\n}>()\r\n\r\n/* ------------------------------------------------------------------ *\r\n * TanStack v9 feature registration (ODT-004)\r\n * ------------------------------------------------------------------ */\r\n\r\ntype OdTableColumnMeta = { odColumn: OdTableColumn }\r\n\r\nconst odTableFeatures = tableFeatures({\r\n rowSelectionFeature,\r\n columnVisibilityFeature,\r\n columnSizingFeature,\r\n columnResizingFeature,\r\n columnMeta: {} as OdTableColumnMeta,\r\n})\r\n\r\nconst SELECTION_COLUMN_ID = '__od_table_selection'\r\nconst DEFAULT_COLUMN_WIDTH = 160\r\nconst MIN_COLUMN_WIDTH = 48\r\nconst SEARCH_DEBOUNCE_MS = 300\r\nconst KEYBOARD_RESIZE_STEP = 8\r\n/** Instance-scoped suffix so tooltip ids never collide across tables. */\r\nconst DESCRIBE_SCOPE = getCurrentInstance()?.uid ?? 0\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Resolved configuration state (ODT-005)\r\n * ------------------------------------------------------------------ */\r\n\r\ntype SourceMode = 'local' | 'function' | 'url' | 'invalid'\r\ntype DataStatus = 'idle' | 'loading' | 'refreshing' | 'ready' | 'error'\r\n\r\nconst sourceMode = ref<SourceMode>('invalid')\r\nconst configError = ref<OdTableConfigError | null>(null)\r\nconst dataStatus = ref<DataStatus>('idle')\r\nconst dataErrorValue = ref<unknown>(null)\r\n\r\nconst frontendColumns = shallowRef<OdTableColumn[]>([])\r\nconst remoteSnapshot = shallowRef<(OdTableResult<T> & { columns: OdTableColumn[] }) | null>(null)\r\nconst columnsResolved = computed(() => sourceMode.value === 'local'\r\n ? frontendColumns.value\r\n : remoteSnapshot.value?.columns ?? resolveOdTableRemoteColumns(frontendColumns.value, null))\r\nconst rowKeyField = ref('id')\r\nconst paginationConfig = ref<{ defaultPageSize: number; pageSizeOptions: number[] }>({\r\n defaultPageSize: 20,\r\n pageSizeOptions: [10, 20, 50, 100],\r\n})\r\n\r\nconst query = ref<OdTableQuery>(createOdTableQuery())\r\nconst localDisplayRows = shallowRef<T[]>([])\r\nconst localTotal = ref(0)\r\nconst displayRows = computed(() => sourceMode.value === 'local' ? localDisplayRows.value : remoteSnapshot.value?.items ?? [])\r\nconst total = computed(() => sourceMode.value === 'local' ? localTotal.value : remoteSnapshot.value?.total ?? 0)\r\nconst selectedKeysInternal = ref<OdTableRowKey[]>([])\r\nconst columnVisibility = ref<Record<string, boolean>>({})\r\nconst columnWidths = ref<Record<string, number>>({})\r\nlet suppressQueryWatch = false\r\nlet configErrorEmitted = false\r\nlet initialized = false\r\nlet initialQueryCaptured = false\r\n/** `initialQuery` is validated and read exactly once, at first initialization. */\r\nlet initialQuerySnapshot: import('./OdTable.types').OdTableInitialQuery | undefined\r\n\r\nconst locale = computed<Required<OdTableLocale>>(() => ({ ...OD_TABLE_DEFAULT_LOCALE, ...props.locale }))\r\nconst mountedNow = Date.now()\r\nconst relativeNow = computed(() => (Number.isFinite(props.now) ? props.now! : mountedNow))\r\n\r\nconst coordinator = createOdTableRequestCoordinator()\r\n\r\nfunction asConfigError(error: unknown): OdTableConfigError {\r\n return error instanceof OdTableConfigError\r\n ? error\r\n : new OdTableConfigError('INVALID_COLUMNS', describeError(error), error)\r\n}\r\n\r\nfunction handleConfigError(error: unknown) {\n coordinator.cancel()\n const configErrorValue = asConfigError(error)\r\n configError.value = configErrorValue\r\n sourceMode.value = 'invalid'\r\n if (!configErrorEmitted) {\r\n configErrorEmitted = true\r\n emit('config-error', configErrorValue)\r\n }\r\n if (import.meta.env.DEV) throw configErrorValue\r\n}\r\n\r\nfunction describeError(error: unknown): string {\r\n if (error instanceof OdTableConfigError) return `${error.message}(${error.code})`\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\nfunction resetColumnVisibility(columns: readonly OdTableColumn[]) {\n const next: Record<string, boolean> = {}\n for (const column of columns) next[column.field] = column.visible !== false\n ensureVisibleColumn(next, columns)\n columnVisibility.value = next\n}\n\nfunction ensureVisibleColumn(visibility: Record<string, boolean>, columns: readonly OdTableColumn[]) {\n if (columns.length > 0 && !columns.some((column) => visibility[column.field])) {\n visibility[columns[0].field] = true\n }\n}\n\r\nfunction withDefaultPagination(input: { defaultPageSize?: number; pageSizeOptions?: number[] }) {\r\n const defaultPageSize = input.defaultPageSize ?? 20\r\n const options = [...(input.pageSizeOptions ?? OD_TABLE_DEFAULT_PAGE_SIZE_OPTIONS)]\r\n if (!options.includes(defaultPageSize)) options.push(defaultPageSize)\r\n options.sort((a, b) => a - b)\r\n return { defaultPageSize, pageSizeOptions: options }\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Initialization: frontend columns and a single data request\r\n * ------------------------------------------------------------------ */\r\n\r\nfunction setQuerySilently(next: OdTableQuery) {\r\n suppressQueryWatch = true\r\n try {\r\n query.value = next\r\n } finally {\r\n suppressQueryWatch = false\r\n }\r\n}\r\n\r\n/** Capabilities usable for validating/cleaning queries before remote metadata arrives. */\r\nfunction queryColumns(columns: readonly OdTableColumn[]) {\r\n return columns.map((column) => ({\r\n ...column,\r\n sortable: column.sortable !== false,\r\n searchable: column.dataType === 'text' && column.searchable !== false,\r\n filterable: column.dataType === 'enum' && column.filterable !== false,\r\n }))\r\n}\r\n\r\nfunction initialize() {\r\n coordinator.cancel()\r\n configErrorEmitted = false\r\n configError.value = null\r\n remoteSnapshot.value = null\r\n localDisplayRows.value = []\r\n localTotal.value = 0\r\n dataStatus.value = 'idle'\r\n dataErrorValue.value = null\r\n discardHeaderPopover()\n columnSettings.close()\r\n applySelection(props.selectedRowKeys ?? [], false)\r\n columnWidths.value = {}\r\n\r\n try {\r\n const mode = validateOdTableSourceMode(props)\r\n const remote = mode !== 'local'\r\n const columns = validateOdTableColumns(props.columns, remote)\r\n validateOdTablePagination(props.pagination)\r\n if (!remote) validateOdTableRows<T>(props.rows, props.rowKey)\r\n if (!initialQueryCaptured) {\r\n initialQuerySnapshot = validateOdTableInitialQuery(props.initialQuery)\r\n initialQueryCaptured = true\r\n }\r\n sourceMode.value = mode\r\n frontendColumns.value = columns\r\n rowKeyField.value = props.rowKey\r\n paginationConfig.value = withDefaultPagination(props.pagination ?? {})\r\n resetColumnVisibility(columns)\r\n if (!initialized) {\r\n validateOdTableInitialQueryForColumns(initialQuerySnapshot, columns, remote)\r\n setQuerySilently(mergeOdTableInitialQuery(createOdTableQuery(paginationConfig.value.defaultPageSize), initialQuerySnapshot))\r\n } else {\r\n const cleaned = cleanupOdTableQueryForColumns(query.value, remote ? queryColumns(columns) : columns)\r\n if (cleaned) {\r\n setQuerySilently(cleaned)\r\n applySelection([], true)\r\n emit('query-change', cleaned)\r\n }\r\n }\r\n initialized = true\r\n if (remote) void requestData()\r\n else runLocalCompute()\r\n } catch (error) {\r\n handleConfigError(error)\r\n }\r\n}\r\n\r\nasync function requestData() {\r\n if (configError.value || (sourceMode.value !== 'function' && sourceMode.value !== 'url')) return\r\n const currentQuery = query.value\r\n const currentColumns = frontendColumns.value\r\n const currentRowKey = rowKeyField.value\r\n dataStatus.value = remoteSnapshot.value ? 'refreshing' : 'loading'\r\n dataErrorValue.value = null\r\n try {\r\n const outcome = await coordinator.run(async ({ signal }) => {\r\n const payload = sourceMode.value === 'function'\r\n ? await props.loadData!(currentQuery, { signal })\r\n : await executeOdTableRequest(props.request, props.queryUrl!, { method: 'POST', body: currentQuery, signal })\r\n const result = validateOdTableResult<T>(payload)\r\n validateOdTableRows<T>(result.items, currentRowKey)\r\n const columns = resolveOdTableRemoteColumns(currentColumns, result.meta)\r\n validateOdTableInitialQueryForColumns(currentQuery, columns, false, 'META_QUERY_CONFLICT')\r\n return { ...result, columns }\r\n })\r\n if (outcome.status === 'ignored') return\r\n // One reactive commit: rows, labels and query capabilities always share a response.\r\n remoteSnapshot.value = outcome.value\r\n dataStatus.value = 'ready'\r\n setQuerySilently(odTableQueryReducer(query.value, {\r\n type: 'sync-response', page: outcome.value.page, pageSize: outcome.value.pageSize,\r\n }))\r\n } catch (error) {\r\n dataStatus.value = 'error'\r\n dataErrorValue.value = error\r\n emit('data-error', { error, query: currentQuery })\r\n }\r\n}\r\n\r\nfunction runLocalCompute() {\r\n try {\r\n validateOdTableRows<T>(props.rows ?? [], rowKeyField.value)\r\n } catch (error) {\r\n handleConfigError(error)\r\n return\r\n }\r\n const result = runOdTableLocalQuery(props.rows ?? [], columnsResolved.value, query.value)\r\n localDisplayRows.value = result.rows\r\n localTotal.value = result.total\r\n dataStatus.value = 'ready'\r\n if (result.page !== query.value.page) {\r\n setQuerySilently({ ...query.value, page: result.page })\r\n }\r\n pruneSelectionToRows(props.rows ?? [])\r\n}\r\n\r\n/** Removes selected keys that no longer exist in the dataset (需求 6.2). */\r\nfunction pruneSelectionToRows(rows: readonly T[]) {\r\n if (selectedKeysInternal.value.length === 0) return\r\n const available = new Set(rows.map((row) => encodeOdTableRowKey((row as Record<string, unknown>)[rowKeyField.value] as OdTableRowKey)))\r\n const pruned = selectedKeysInternal.value.filter((key) => available.has(encodeOdTableRowKey(key)))\r\n if (pruned.length !== selectedKeysInternal.value.length) applySelection(pruned, true)\r\n}\r\n\r\nasync function refresh() {\r\n if (configError.value) return\r\n if (sourceMode.value === 'local') {\r\n runLocalCompute()\r\n return\r\n }\r\n await requestData()\r\n}\r\n\r\ndefineExpose({ refresh })\r\n\r\nfunction retry() {\r\n emit('retry', { stage: 'data' })\r\n void requestData()\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Query commits and event contract (ODT-006)\r\n * ------------------------------------------------------------------ */\r\n\r\nfunction commitQuery(next: OdTableQuery) {\r\n const normalized = normalizeOdTableQuery(next)\r\n if (odTableQueriesEqual(normalized, query.value)) return\r\n if (selectedKeysInternal.value.length > 0) applySelection([], true)\r\n query.value = normalized\r\n emit('query-change', normalized)\r\n}\r\n\r\nfunction dispatchQuery(action: OdTableQueryAction) {\r\n commitQuery(odTableQueryReducer(query.value, action))\r\n}\r\n\r\nfunction recoverConfig(): boolean {\r\n if (!configError.value) return false\r\n try { initialize(); return !configError.value } catch { return false }\r\n}\r\n\r\n// Remote data is requested by the query watcher; local mode recomputes in its\r\n// own watcher. `flush: 'sync'` keeps the suppression flag deterministic.\r\nwatch(\r\n query,\r\n () => {\r\n if (suppressQueryWatch) return\r\n if (sourceMode.value !== 'function' && sourceMode.value !== 'url') return\r\n void requestData()\r\n },\r\n { flush: 'sync' },\r\n)\r\n\r\nwatch(\r\n [() => props.rows, query],\r\n () => {\r\n if (configError.value) {\r\n recoverConfig()\r\n return\r\n }\r\n if (sourceMode.value === 'local' && !configError.value) runLocalCompute()\r\n },\r\n { deep: true },\r\n)\r\n\r\n// Batch source and column changes from one parent update into a single query.\n// Metadata updates never rebuild frontend configuration.\nwatch(\n () => ({\n source: [props.loadData, props.queryUrl, props.request, props.rowKey, props.rows != null, JSON.stringify(props.pagination ?? null)],\n columns: props.columns,\n }),\n ({ source, columns }, previous) => {\n if (configError.value || source.some((value, index) => value !== previous.source[index])) {\n initialize()\n return\n }\r\n try {\r\n const remote = sourceMode.value !== 'local'\r\n const validated = validateOdTableColumns(columns, remote)\n coordinator.cancel()\n discardHeaderPopover()\n frontendColumns.value = validated\r\n if (remote) remoteSnapshot.value = null\r\n const preserved: Record<string, boolean> = {}\r\n for (const column of validated) {\n preserved[column.field] = columnVisibility.value[column.field] ?? (column.visible !== false)\n }\n ensureVisibleColumn(preserved, validated)\n columnVisibility.value = preserved\r\n const cleaned = cleanupOdTableQueryForColumns(query.value, remote ? queryColumns(validated) : validated)\r\n if (cleaned) commitQuery(cleaned)\r\n else if (remote) void requestData()\r\n else runLocalCompute()\r\n } catch (error) {\r\n handleConfigError(error)\r\n }\r\n },\r\n { deep: true },\r\n)\r\n\r\n/* ------------------------------------------------------------------ *\r\n * TanStack table instance (ODT-004)\r\n * ------------------------------------------------------------------ */\r\n\r\nconst tanstackColumns = computed<ColumnDef<typeof odTableFeatures, T>[]>(() => {\r\n const defs: ColumnDef<typeof odTableFeatures, T>[] = [\r\n {\r\n id: SELECTION_COLUMN_ID,\r\n enableHiding: false,\r\n enableResizing: false,\r\n size: MIN_COLUMN_WIDTH,\r\n },\r\n ]\r\n for (const column of columnsResolved.value) {\r\n defs.push({\r\n id: column.field,\r\n accessorKey: column.field,\r\n header: column.title,\r\n enableResizing: column.resizable !== false,\r\n size: column.width ?? column.minWidth ?? DEFAULT_COLUMN_WIDTH,\r\n minSize: Math.max(column.minWidth ?? 0, MIN_COLUMN_WIDTH),\r\n meta: { odColumn: column },\r\n })\r\n }\r\n return defs\r\n})\r\n\r\n// A fresh array identity on every relevant change guarantees the table\r\n// rebuilds rows (and therefore re-reads `getRowId`) when the row key changes.\r\nconst tanstackData = computed<Readonly<T[]>>(() => {\r\n void rowKeyField.value\r\n return displayRows.value.map((row) => row)\r\n})\r\n\r\nconst rowSelectionMap = computed<Record<string, true>>(() => {\r\n const map: Record<string, true> = {}\r\n for (const key of selectedKeysInternal.value) map[encodeOdTableRowKey(key)] = true\r\n return map\r\n})\r\n\r\nconst minColumnWidths = computed(() => {\r\n const map: Record<string, number> = { [SELECTION_COLUMN_ID]: MIN_COLUMN_WIDTH }\r\n for (const column of columnsResolved.value) {\r\n map[column.field] = Math.max(column.minWidth ?? 0, MIN_COLUMN_WIDTH)\r\n }\r\n return map\r\n})\r\n\r\nfunction handleColumnSizingChange(updater: Updater<ColumnSizingState>) {\r\n const next = typeof updater === 'function' ? updater(columnWidths.value) : updater\r\n const clamped: Record<string, number> = {}\r\n for (const [field, width] of Object.entries(next)) {\r\n clamped[field] = Math.max(minColumnWidths.value[field] ?? MIN_COLUMN_WIDTH, Math.round(width))\r\n }\r\n columnWidths.value = clamped\r\n}\r\n\r\nconst table = useTable<typeof odTableFeatures, T>({\r\n features: odTableFeatures,\r\n columns: tanstackColumns,\r\n data: tanstackData,\r\n getRowId: (row) => encodeOdTableRowKey((row as Record<string, unknown>)[rowKeyField.value] as OdTableRowKey),\r\n state: computed(() => ({\r\n rowSelection: rowSelectionMap.value,\r\n columnVisibility: { ...columnVisibility.value },\r\n columnSizing: { ...columnWidths.value },\r\n })),\r\n onColumnSizingChange: handleColumnSizingChange,\r\n columnResizeMode: 'onChange',\r\n})\r\n\r\nconst headers = computed(() => table.getHeaderGroups()[0]?.headers ?? [])\r\nconst tableRows = computed(() => table.getRowModel().rows)\r\nconst tableWidth = computed(() => table.getTotalSize())\r\n\r\n// Emit the final width once a mouse drag finishes.\r\nwatch(\r\n () => table.atoms.columnResizing?.get().isResizingColumn ?? false,\r\n (isResizing, wasResizing) => {\r\n if (!isResizing && typeof wasResizing === 'string') {\r\n emitColumnWidth(wasResizing)\r\n }\r\n },\r\n)\r\n\r\nfunction emitColumnWidth(field: string) {\r\n if (field === SELECTION_COLUMN_ID) return\r\n emit('column-width-change', { field, width: columnWidths.value[field] ?? currentColumnSize(field) })\r\n}\r\n\r\nfunction currentColumnSize(field: string): number {\r\n return table.getColumn(field)?.getSize() ?? DEFAULT_COLUMN_WIDTH\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Row selection (ODT-007)\r\n * ------------------------------------------------------------------ */\r\n\r\nwatch(\r\n () => props.selectedRowKeys,\r\n (next) => {\r\n if (next) applySelection(next, false)\r\n },\r\n { immediate: true, deep: true },\r\n)\r\n\r\nconst selectedIdSet = computed(() => new Set(selectedKeysInternal.value.map(encodeOdTableRowKey)))\r\n\r\nfunction applySelection(keys: OdTableRowKey[], emitEvents: boolean) {\r\n const seen = new Set<string>()\r\n const next: OdTableRowKey[] = []\r\n for (const key of keys) {\r\n const id = encodeOdTableRowKey(key)\r\n if (seen.has(id)) continue\r\n seen.add(id)\r\n next.push(key)\r\n }\r\n if (!emitEvents || props.selectedRowKeys === undefined) selectedKeysInternal.value = next\n if (!emitEvents) return\r\n emit('update:selected-row-keys', next)\r\n const rowById = new Map(tableRows.value.map((row) => [row.id, row.original]))\r\n const matched: T[] = []\r\n for (const key of next) {\r\n const row = rowById.get(encodeOdTableRowKey(key))\r\n if (row !== undefined) matched.push(row)\r\n }\r\n emit('selection-change', next, matched)\r\n}\r\n\r\nfunction toggleRowSelected(rowId: string, event: Event) {\n const input = event.target as HTMLInputElement\n const checked = input.checked\n const key = decodeOdTableRowKey(rowId)\r\n if (key === null) return\r\n const next = checked\r\n ? [...selectedKeysInternal.value, key]\r\n : selectedKeysInternal.value.filter((existing) => encodeOdTableRowKey(existing) !== rowId)\r\n applySelection(next, true)\n input.checked = selectedIdSet.value.has(rowId)\n}\r\n\r\nconst allPageRowsSelected = computed(\r\n () => tableRows.value.length > 0 && tableRows.value.every((row) => selectedIdSet.value.has(row.id)),\r\n)\r\nconst somePageRowsSelected = computed(() => {\r\n if (allPageRowsSelected.value) return false\r\n return tableRows.value.some((row) => selectedIdSet.value.has(row.id))\r\n})\r\n\r\nfunction toggleAllPageRows(checked: boolean) {\n if (checked) {\r\n const next = [...selectedKeysInternal.value]\r\n for (const row of tableRows.value) {\r\n const key = decodeOdTableRowKey(row.id)\r\n if (key !== null && !selectedIdSet.value.has(row.id)) next.push(key)\r\n }\r\n applySelection(next, true)\r\n return\r\n }\r\n const pageIds = new Set(tableRows.value.map((row) => row.id))\r\n const next = selectedKeysInternal.value.filter((key) => !pageIds.has(encodeOdTableRowKey(key)))\r\n applySelection(next, true)\n}\n\nfunction handlePageSelectionChange(event: Event) {\n const input = event.target as HTMLInputElement\n toggleAllPageRows(input.checked)\n input.checked = allPageRowsSelected.value\n input.indeterminate = somePageRowsSelected.value\n}\n\n/* ------------------------------------------------------------------ *\n * Header interactions: sort / search / filter (ODT-006)\n * ------------------------------------------------------------------ */\r\n\r\nfunction toggleSort(field: string, additive: boolean) {\r\n dispatchQuery({ type: 'sort', field, additive })\r\n}\r\n\r\nconst searchDraft = ref('')\r\nconst filterDraft = ref<string[]>([])\r\nconst headerPopoverState = ref<{ kind: 'search' | 'filter'; field: string } | null>(null)\r\nconst headerPopover = useOdTablePopover(() => {\r\n if (headerPopoverState.value?.kind === 'search') commitSearchFromDraft()\r\n headerPopoverState.value = null\r\n})\r\nlet searchDebounceTimer: number | undefined\r\n\r\nfunction clearSearchDebounce() {\r\n if (searchDebounceTimer !== undefined) {\r\n window.clearTimeout(searchDebounceTimer)\r\n searchDebounceTimer = undefined\r\n }\r\n}\r\n\r\nfunction columnByField(field: string): OdTableColumn | undefined {\r\n return columnsResolved.value.find((column) => column.field === field)\r\n}\r\n\r\nfunction currentSearchValue(field: string): string {\r\n return query.value.searches.find((entry) => entry.field === field)?.value ?? ''\r\n}\r\n\r\nfunction currentFilterValues(field: string): string[] {\r\n return query.value.filters.find((entry) => entry.field === field)?.values ?? []\r\n}\r\n\r\nfunction toggleHeaderPopover(kind: 'search' | 'filter', field: string, trigger: HTMLElement) {\r\n if (headerPopoverState.value?.kind === kind && headerPopoverState.value.field === field) {\r\n headerPopover.close({ restoreFocus: true })\r\n return\r\n }\r\n if (headerPopoverState.value) headerPopover.close()\r\n headerPopoverState.value = { kind, field }\r\n if (kind === 'search') {\r\n clearSearchDebounce()\r\n searchDraft.value = currentSearchValue(field)\r\n } else {\r\n filterDraft.value = [...currentFilterValues(field)]\r\n }\r\n headerPopover.open(trigger, { align: 'end', width: kind === 'search' ? 260 : 240 })\r\n}\r\n\r\nfunction closeHeaderPopover(restoreFocus: boolean) {\n if (!headerPopoverState.value) return\r\n headerPopover.close({ restoreFocus })\r\n}\n\nfunction discardHeaderPopover() {\n clearSearchDebounce()\n headerPopoverState.value = null\n headerPopover.close({ restoreFocus: false })\n}\n\n// A refresh can withdraw capabilities or enum choices while their menu is open.\nwatch(columnsResolved, () => {\n const state = headerPopoverState.value\n if (!state) return\n const column = columnByField(state.field)\n if (state.kind === 'search' ? !column?.searchable : !column?.filterable) {\n discardHeaderPopover()\n } else if (state.kind === 'filter') {\n filterDraft.value = filterDraft.value.filter((value) => column?.options?.some((option) => option.value === value && !option.disabled))\n }\n})\n\r\nfunction scheduleSearchCommit() {\r\n clearSearchDebounce()\r\n searchDebounceTimer = window.setTimeout(() => commitSearchFromDraft(), SEARCH_DEBOUNCE_MS)\r\n}\r\n\r\nfunction commitSearchFromDraft() {\r\n clearSearchDebounce()\r\n const state = headerPopoverState.value\r\n if (!state || state.kind !== 'search') return\r\n dispatchQuery({ type: 'set-search', field: state.field, value: searchDraft.value })\r\n}\r\n\r\nfunction commitSearchNow() {\r\n commitSearchFromDraft()\r\n}\r\n\r\nfunction toggleFilterDraft(value: string, checked: boolean) {\r\n const option = headerPopoverColumn()?.options?.find((item) => item.value === value)\r\n if (option?.disabled) return\r\n filterDraft.value = checked ? [...filterDraft.value, value] : filterDraft.value.filter((entry) => entry !== value)\r\n}\r\n\r\nfunction confirmFilter() {\r\n const state = headerPopoverState.value\r\n if (!state) return\r\n dispatchQuery({ type: 'set-filter', field: state.field, values: filterDraft.value })\r\n headerPopover.close({ restoreFocus: true })\r\n}\r\n\r\nfunction resetFilter() {\r\n const state = headerPopoverState.value\r\n if (!state) return\r\n filterDraft.value = []\r\n dispatchQuery({ type: 'set-filter', field: state.field, values: [] })\r\n}\r\n\r\nfunction hasSearchCondition(field: string): boolean {\r\n return query.value.searches.some((entry) => entry.field === field)\r\n}\r\n\r\nfunction hasFilterCondition(field: string): boolean {\r\n return query.value.filters.some((entry) => entry.field === field)\r\n}\r\n\r\nfunction sortDirectionOf(field: string): 'asc' | 'desc' | undefined {\r\n return query.value.sorting.find((entry) => entry.field === field)?.direction\r\n}\r\n\r\nfunction sortPriorityOf(field: string): number {\r\n const index = query.value.sorting.findIndex((entry) => entry.field === field)\r\n return index >= 0 && query.value.sorting.length > 1 ? index + 1 : 0\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Column settings: visibility, hidden conditions, widths (ODT-008)\r\n * ------------------------------------------------------------------ */\r\n\r\nconst columnSettingsHint = ref('')\r\nconst columnSettings = useOdTablePopover()\r\n\r\nconst activeConditionFields = computed(() => {\r\n const fields = new Set<string>()\r\n for (const entry of query.value.searches) fields.add(entry.field)\r\n for (const entry of query.value.filters) fields.add(entry.field)\r\n for (const entry of query.value.sorting) fields.add(entry.field)\r\n return fields\r\n})\r\n\r\nconst visibleBusinessColumnCount = computed(\r\n () => Object.values(columnVisibility.value).filter(Boolean).length,\r\n)\r\n\r\nfunction toggleColumnVisible(field: string, visible: boolean) {\r\n if (!visible && visibleBusinessColumnCount.value <= 1) {\r\n columnSettingsHint.value = locale.value.keepOneColumnVisible\r\n return\r\n }\r\n columnSettingsHint.value = ''\r\n columnVisibility.value = { ...columnVisibility.value, [field]: visible }\r\n emit('column-visibility-change', { ...columnVisibility.value })\r\n}\r\n\r\nfunction restoreDefaultVisibility() {\n const next: Record<string, boolean> = {}\n for (const column of columnsResolved.value) next[column.field] = column.visible !== false\n ensureVisibleColumn(next, columnsResolved.value)\n columnVisibility.value = next\r\n columnSettingsHint.value = ''\r\n emit('column-visibility-change', { ...columnVisibility.value })\r\n}\r\n\r\nfunction clearColumnConditions(field: string) {\r\n dispatchQuery({ type: 'remove-column', field })\r\n}\r\n\r\nfunction clearAllColumnConditions() {\r\n let next = query.value\r\n for (const field of activeConditionFields.value) {\r\n next = odTableQueryReducer(next, { type: 'remove-column', field })\r\n }\r\n commitQuery(next)\r\n}\r\n\r\n/** Keyboard column resize: arrows step 8px, Enter/Space commits, Escape restores. */\r\nconst keyboardResize = ref<{ field: string; startWidth: number } | null>(null)\r\n\r\nfunction minWidthOf(field: string): number {\r\n return minColumnWidths.value[field] ?? MIN_COLUMN_WIDTH\r\n}\r\n\r\nfunction setColumnWidth(field: string, width: number) {\r\n const clamped = Math.max(minWidthOf(field), Math.round(width))\r\n columnWidths.value = { ...columnWidths.value, [field]: clamped }\r\n}\r\n\r\nfunction startKeyboardResize(field: string) {\r\n if (keyboardResize.value?.field === field) {\r\n emitColumnWidth(field)\r\n keyboardResize.value = null\r\n return\r\n }\r\n keyboardResize.value = { field, startWidth: columnWidths.value[field] ?? currentColumnSize(field) }\r\n}\r\n\r\nfunction keyboardResizeStep(field: string, delta: number) {\r\n if (keyboardResize.value?.field !== field) return\r\n setColumnWidth(field, (columnWidths.value[field] ?? currentColumnSize(field)) + delta)\r\n}\r\n\r\nfunction cancelKeyboardResize(field: string) {\r\n const session = keyboardResize.value\r\n if (session?.field !== field) return\r\n setColumnWidth(field, session.startWidth)\r\n keyboardResize.value = null\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * Pagination (ODT-006)\r\n * ------------------------------------------------------------------ */\r\n\r\nconst effectivePageSizeOptions = computed(() => {\r\n const options = [...paginationConfig.value.pageSizeOptions]\r\n if (!options.includes(query.value.pageSize)) options.push(query.value.pageSize)\r\n return options.sort((a, b) => a - b)\r\n})\r\n\r\nconst pageCount = computed(() => Math.max(1, Math.ceil(total.value / query.value.pageSize)))\r\n\r\ntype PageListItem = { type: 'page'; page: number } | { type: 'ellipsis'; key: string }\r\n\r\nconst pageList = computed<PageListItem[]>(() => {\r\n const current = query.value.page\r\n const count = pageCount.value\r\n if (count <= 7) {\r\n return Array.from({ length: count }, (_, index) => ({ type: 'page', page: index + 1 }) as PageListItem)\r\n }\r\n const items: PageListItem[] = [{ type: 'page', page: 1 }]\r\n const windowStart = Math.max(2, current - 1)\r\n const windowEnd = Math.min(count - 1, current + 1)\r\n if (windowStart > 2) items.push({ type: 'ellipsis', key: 'start' })\r\n for (let page = windowStart; page <= windowEnd; page += 1) items.push({ type: 'page', page })\r\n if (windowEnd < count - 1) items.push({ type: 'ellipsis', key: 'end' })\r\n items.push({ type: 'page', page: count })\r\n return items\r\n})\r\n\r\nfunction gotoPage(page: number) {\r\n dispatchQuery({ type: 'set-page', page })\r\n}\r\n\r\nfunction changePageSize(event: Event) {\r\n const value = Number((event.target as HTMLSelectElement).value)\r\n if (Number.isInteger(value) && value > 0) dispatchQuery({ type: 'set-page-size', pageSize: value })\r\n}\r\n\r\n/* ------------------------------------------------------------------ *\r\n * View state (ODT-009)\r\n * ------------------------------------------------------------------ */\r\n\r\nconst showLoading = computed(() => !configError.value && dataStatus.value === 'loading')\r\nconst showRefreshing = computed(() => dataStatus.value === 'refreshing')\r\nconst showEmpty = computed(\r\n () =>\r\n !configError.value &&\r\n (dataStatus.value === 'ready' || !!remoteSnapshot.value) &&\n displayRows.value.length === 0,\r\n)\r\nconst showErrorState = computed(() => {\r\n if (configError.value) return false\r\n return dataStatus.value === 'error' && !remoteSnapshot.value\n})\r\nconst showErrorBanner = computed(() => dataStatus.value === 'error' && !!remoteSnapshot.value)\nconst errorMessage = computed(() => describeError(dataErrorValue.value ?? configError.value))\r\nconst stateColumnCount = computed(() => headers.value.length)\r\n\r\nconst rootClasses = computed(() => [\r\n 'od-table',\r\n `od-table--${props.density}`,\r\n {\r\n 'od-table--striped': props.striped,\r\n 'od-table--bordered': props.bordered,\r\n },\r\n])\r\n\r\nconst tableAriaLabel = computed(() => props.tableLabel ?? locale.value.tableName)\r\n\r\nfunction cellText(column: OdTableColumn, value: unknown): string {\r\n return formatOdTableCell(column, value, { locale: locale.value, now: relativeNow.value })\r\n}\r\n\r\nfunction exactDatetime(value: unknown): string | null {\r\n return odTableExactDatetimeOrNull(value)\r\n}\r\n\r\nfunction isDatetimeSortable(value: unknown): boolean {\r\n return parseOdTableDatetime(value) !== null\r\n}\r\n\r\nfunction headerPopoverColumn(): OdTableColumn | undefined {\r\n const state = headerPopoverState.value\r\n return state ? columnByField(state.field) : undefined\r\n}\r\n\r\nonBeforeUnmount(() => {\r\n clearSearchDebounce()\r\n coordinator.dispose()\r\n})\r\n\r\ninitialize()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"rootClasses\" data-testid=\"od-table\" v-bind=\"$attrs\">\r\n <div v-if=\"configError\" class=\"od-table__state od-table__state--error od-table__state--root\" data-testid=\"od-table-error\" role=\"alert\">\r\n <OdIcon :icon=\"IconAlertCircle\" :size=\"20\" />\r\n <div>\r\n <p class=\"od-table__state-title\">{{ locale.loadError }}</p>\r\n <p class=\"od-table__state-detail\">{{ describeError(configError) }}</p>\r\n </div>\r\n </div>\r\n\r\n <template v-else>\r\n <div class=\"od-table__toolbar\" data-testid=\"od-table-toolbar\">\r\n <div class=\"od-table__toolbar-meta\">\r\n <span class=\"od-table__total\">{{ locale.total(total) }}</span>\r\n <span v-if=\"selectedKeysInternal.length > 0\" class=\"od-table__selected\">{{ locale.selectedCount(selectedKeysInternal.length) }}</span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"od-table__toolbar-button\"\r\n data-testid=\"od-table-column-settings\"\r\n :aria-expanded=\"columnSettings.isOpen.value\"\r\n @click=\"\r\n ($event) => {\r\n if (columnSettings.isOpen.value) columnSettings.close({ restoreFocus: true })\r\n else {\r\n columnSettingsHint = ''\r\n columnSettings.open($event.currentTarget as HTMLElement, { align: 'end', width: 280 })\r\n }\r\n }\r\n \"\r\n >\r\n <OdIcon :icon=\"IconListCheck\" :size=\"16\" />\r\n {{ locale.columnSettings }}\r\n </button>\r\n <div\r\n v-if=\"columnSettings.isOpen.value\"\r\n :ref=\"(element) => columnSettings.registerPanel(element as HTMLElement | null)\"\r\n class=\"od-table__popover od-table__column-panel\"\r\n role=\"dialog\"\r\n :aria-label=\"locale.columnSettings\"\r\n data-testid=\"od-table-column-settings-panel\"\r\n :style=\"{ top: `${columnSettings.placement.value.top}px`, left: `${columnSettings.placement.value.left}px` }\"\r\n @keydown=\"columnSettings.onKeydown\"\r\n >\r\n <ul class=\"od-table__column-list\">\r\n <li v-for=\"column in columnsResolved\" :key=\"column.field\" class=\"od-table__column-item\">\r\n <label class=\"od-table__column-label\">\r\n <input\r\n type=\"checkbox\"\r\n :data-testid=\"`od-table-column-visibility-${column.field}`\"\r\n :checked=\"columnVisibility[column.field] !== false\"\r\n @change=\"toggleColumnVisible(column.field, ($event.target as HTMLInputElement).checked)\"\r\n />\r\n <span>{{ column.title }}</span>\r\n </label>\r\n <template v-if=\"activeConditionFields.has(column.field)\">\r\n <span class=\"od-table__condition-dot\" aria-hidden=\"true\"></span>\r\n <button\r\n type=\"button\"\r\n class=\"od-table__link-button\"\r\n :data-testid=\"`od-table-clear-condition-${column.field}`\"\r\n @click=\"clearColumnConditions(column.field)\"\r\n >\r\n {{ locale.clearCondition(column.title) }}\r\n </button>\r\n </template>\r\n </li>\r\n </ul>\r\n <p class=\"od-table__hint\" role=\"status\">{{ columnSettingsHint }}</p>\r\n <div class=\"od-table__column-actions\">\r\n <button\r\n type=\"button\"\r\n class=\"od-table__link-button\"\r\n data-testid=\"od-table-clear-all-conditions\"\r\n :disabled=\"activeConditionFields.size === 0\"\r\n @click=\"clearAllColumnConditions\"\r\n >\r\n {{ locale.clearAllConditions }}\r\n </button>\r\n <button type=\"button\" class=\"od-table__link-button\" data-testid=\"od-table-restore-default\" @click=\"restoreDefaultVisibility\">\r\n {{ locale.restoreDefault }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"od-table__viewport\">\r\n <table class=\"od-table__table\" :aria-label=\"tableAriaLabel\" :aria-rowcount=\"total + 1\" :style=\"{ width: `${tableWidth}px` }\">\r\n <colgroup>\r\n <col\r\n v-for=\"header in headers\"\r\n :key=\"header.id\"\r\n :style=\"{ width: `${header.getSize()}px` }\"\r\n />\r\n </colgroup>\r\n <thead>\r\n <tr class=\"od-table__head-row\">\r\n <th\r\n v-for=\"(header, headerIndex) in headers\"\r\n :key=\"header.id\"\r\n class=\"od-table__head\"\r\n :class=\"{ 'od-table__head--selection': header.id === '__od_table_selection' }\"\r\n :aria-colindex=\"headerIndex + 1\"\r\n :aria-sort=\"\r\n header.column.columnDef.meta?.odColumn?.sortable\r\n ? sortDirectionOf(header.id) === 'asc'\r\n ? 'ascending'\r\n : sortDirectionOf(header.id) === 'desc'\r\n ? 'descending'\r\n : 'none'\r\n : undefined\r\n \"\r\n >\r\n <div v-if=\"header.id === '__od_table_selection'\" class=\"od-table__head-inner od-table__head-inner--selection\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"od-table__checkbox\"\r\n data-testid=\"od-table-select-all\"\r\n :aria-label=\"allPageRowsSelected ? locale.deselectAll : locale.selectAll\"\r\n :checked=\"allPageRowsSelected\"\r\n :indeterminate=\"somePageRowsSelected\"\r\n @change=\"handlePageSelectionChange\"\n />\r\n </div>\r\n <div v-else class=\"od-table__head-inner\" :class=\"`od-table__head-inner--${header.column.columnDef.meta?.odColumn?.align ?? 'left'}`\">\r\n <button\r\n v-if=\"header.column.columnDef.meta?.odColumn?.sortable\"\r\n type=\"button\"\r\n class=\"od-table__sort\"\r\n :class=\"{ 'is-active': sortDirectionOf(header.id) !== undefined }\"\r\n :data-testid=\"`od-table-sort-${header.id}`\"\r\n @click=\"toggleSort(header.id, ($event as MouseEvent).shiftKey)\"\r\n >\r\n <span class=\"od-table__sort-title\">{{ header.column.columnDef.meta?.odColumn?.title }}</span>\r\n <OdIcon\r\n :icon=\"sortDirectionOf(header.id) === 'asc' ? IconSortAscending : sortDirectionOf(header.id) === 'desc' ? IconSortDescending : IconArrowsSort\"\r\n :size=\"14\"\r\n class=\"od-table__sort-icon\"\r\n />\r\n <span v-if=\"sortPriorityOf(header.id) > 0\" class=\"od-table__sort-priority\">{{ sortPriorityOf(header.id) }}</span>\r\n </button>\r\n <span v-else class=\"od-table__head-title\">{{ header.column.columnDef.meta?.odColumn?.title }}</span>\r\n <span v-if=\"header.column.columnDef.meta?.odColumn\" class=\"od-table__head-actions\">\r\n <button\r\n v-if=\"header.column.columnDef.meta.odColumn.searchable\"\r\n type=\"button\"\r\n class=\"od-table__icon-button\"\r\n :class=\"{ 'is-active': hasSearchCondition(header.id) }\"\r\n :data-testid=\"`od-table-search-trigger-${header.id}`\"\r\n :aria-label=\"`${locale.search} ${header.column.columnDef.meta.odColumn.title}`\"\r\n :aria-expanded=\"headerPopoverState?.kind === 'search' && headerPopoverState.field === header.id\"\r\n @click=\"toggleHeaderPopover('search', header.id, $event.currentTarget as HTMLElement)\"\r\n >\r\n <OdIcon :icon=\"IconSearch\" :size=\"16\" />\r\n </button>\r\n <button\r\n v-if=\"header.column.columnDef.meta.odColumn.filterable\"\r\n type=\"button\"\r\n class=\"od-table__icon-button\"\r\n :class=\"{ 'is-active': hasFilterCondition(header.id) }\"\r\n :data-testid=\"`od-table-filter-${header.id}`\"\r\n :aria-label=\"`${locale.filter} ${header.column.columnDef.meta.odColumn.title}`\"\r\n :aria-expanded=\"headerPopoverState?.kind === 'filter' && headerPopoverState.field === header.id\"\r\n @click=\"toggleHeaderPopover('filter', header.id, $event.currentTarget as HTMLElement)\"\r\n >\r\n <OdIcon :icon=\"IconFilter\" :size=\"16\" />\r\n </button>\r\n </span>\r\n <span\r\n v-if=\"header.column.getCanResize()\"\r\n class=\"od-table__resize-handle\"\r\n :class=\"{ 'is-adjusting': keyboardResize?.field === header.id }\"\r\n role=\"separator\"\r\n tabindex=\"0\"\r\n :aria-orientation=\"'vertical'\"\r\n :aria-label=\"locale.resizeColumn(header.column.columnDef.meta?.odColumn?.title ?? header.id)\"\r\n :aria-valuenow=\"header.getSize()\"\r\n :data-testid=\"`od-table-resize-${header.id}`\"\r\n @mousedown=\"header.getResizeHandler()($event)\"\r\n @keydown=\"\r\n (event) => {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault()\r\n startKeyboardResize(header.id)\r\n } else if (event.key === 'ArrowLeft') {\r\n event.preventDefault()\r\n keyboardResizeStep(header.id, -KEYBOARD_RESIZE_STEP)\r\n } else if (event.key === 'ArrowRight') {\r\n event.preventDefault()\r\n keyboardResizeStep(header.id, KEYBOARD_RESIZE_STEP)\r\n } else if (event.key === 'Escape') {\r\n event.preventDefault()\r\n cancelKeyboardResize(header.id)\r\n }\r\n }\r\n \"\r\n ></span>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n v-for=\"row in tableRows\"\r\n :key=\"row.id\"\r\n class=\"od-table__row\"\r\n :aria-rowindex=\"(query.page - 1) * query.pageSize + row.index + 2\"\r\n >\r\n <td v-if=\"row.getVisibleCells().length > 0 && row.getVisibleCells()[0]?.column.id === '__od_table_selection'\" class=\"od-table__cell od-table__cell--selection\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"od-table__checkbox\"\r\n :data-testid=\"`od-table-select-${row.id}`\"\r\n :aria-label=\"locale.selectRow((query.page - 1) * query.pageSize + row.index + 1)\"\r\n :checked=\"row.getIsSelected()\"\r\n @change=\"toggleRowSelected(row.id, $event)\"\n />\r\n </td>\r\n <td\r\n v-for=\"(cell, cellIndex) in row.getVisibleCells().filter((item) => item.column.id !== '__od_table_selection')\"\r\n :key=\"cell.id\"\r\n class=\"od-table__cell\"\r\n :class=\"[\r\n `od-table__cell--${cell.column.columnDef.meta?.odColumn?.align ?? 'left'}`,\r\n { 'od-table__cell--datetime': cell.column.columnDef.meta?.odColumn?.dataType === 'datetime' },\r\n ]\"\r\n :aria-colindex=\"cellIndex + 2\"\r\n >\r\n <slot\r\n :name=\"`cell-${cell.column.id}`\"\r\n :row=\"row.original\"\r\n :row-key=\"decodeOdTableRowKey(row.id)!\"\r\n :column=\"cell.column.columnDef.meta!.odColumn\"\r\n :value=\"cell.getValue()\"\r\n :text=\"cellText(cell.column.columnDef.meta!.odColumn, cell.getValue())\"\r\n >\r\n <span\r\n v-if=\"cell.column.columnDef.meta?.odColumn?.dataType === 'datetime' && isDatetimeSortable(cell.getValue())\"\r\n class=\"od-table__time\"\r\n tabindex=\"0\"\r\n :title=\"exactDatetime(cell.getValue()) ?? undefined\"\r\n :aria-describedby=\"`od-table-tip-${DESCRIBE_SCOPE}-${cell.column.id}-${row.index}`\"\r\n >\r\n {{ cellText(cell.column.columnDef.meta!.odColumn, cell.getValue()) }}\r\n <span\r\n class=\"od-table__tooltip\"\r\n role=\"tooltip\"\r\n :id=\"`od-table-tip-${DESCRIBE_SCOPE}-${cell.column.id}-${row.index}`\"\r\n >\r\n {{ exactDatetime(cell.getValue()) }}\r\n </span>\r\n </span>\r\n <span v-else>{{ cellText(cell.column.columnDef.meta!.odColumn, cell.getValue()) }}</span>\r\n </slot>\r\n </td>\r\n </tr>\r\n <tr v-if=\"showEmpty\">\r\n <td class=\"od-table__state-cell\" :colspan=\"stateColumnCount\">\r\n <div class=\"od-table__state od-table__state--empty\" data-testid=\"od-table-empty\">\r\n {{ locale.empty }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr v-else-if=\"showErrorState\">\r\n <td class=\"od-table__state-cell\" :colspan=\"stateColumnCount\">\r\n <div class=\"od-table__state od-table__state--error\" data-testid=\"od-table-error\" role=\"alert\">\r\n <OdIcon :icon=\"IconAlertCircle\" :size=\"20\" />\r\n <p class=\"od-table__state-detail\">{{ errorMessage }}</p>\r\n <button type=\"button\" class=\"od-table__state-retry\" data-testid=\"od-table-retry\" @click=\"retry()\">\r\n <OdIcon :icon=\"IconRefresh\" :size=\"14\" />\r\n {{ locale.retry }}\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <div\r\n v-if=\"showLoading || showRefreshing\"\r\n class=\"od-table__overlay\"\r\n :class=\"{ 'od-table__overlay--dense': showRefreshing && displayRows.length > 0 }\"\r\n data-testid=\"od-table-loading\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n >\r\n <OdIcon :icon=\"IconLoader\" :size=\"18\" class=\"od-table__spinner\" />\r\n <span>{{ locale.loading }}</span>\r\n </div>\r\n </div>\r\n\r\n <div v-if=\"showErrorBanner\" class=\"od-table__banner\" data-testid=\"od-table-error-banner\" role=\"alert\">\r\n <OdIcon :icon=\"IconAlertCircle\" :size=\"16\" />\r\n <span class=\"od-table__state-detail\">{{ errorMessage }}</span>\r\n <button type=\"button\" class=\"od-table__state-retry\" data-testid=\"od-table-retry\" @click=\"retry()\">\r\n <OdIcon :icon=\"IconRefresh\" :size=\"14\" />\r\n {{ locale.retry }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"od-table__pagination\" data-testid=\"od-table-pagination\">\r\n <span class=\"od-table__pagination-total\">{{ locale.total(total) }}</span>\r\n <label class=\"od-table__page-size\">\r\n {{ locale.pageSize }}\r\n <select\r\n class=\"od-table__page-size-select\"\r\n data-testid=\"od-table-page-size\"\r\n name=\"od-table-page-size\"\r\n :aria-label=\"locale.pageSize\"\r\n :value=\"query.pageSize\"\r\n @change=\"changePageSize\"\r\n >\r\n <option v-for=\"size in effectivePageSizeOptions\" :key=\"size\" :value=\"size\">{{ locale.perPage(size) }}</option>\r\n </select>\r\n </label>\r\n <nav class=\"od-table__pager\" :aria-label=\"locale.pagination\">\r\n <button\r\n type=\"button\"\r\n class=\"od-table__pager-button\"\r\n data-testid=\"od-table-prev-page\"\r\n :aria-label=\"locale.previousPage\"\r\n :disabled=\"query.page <= 1\"\r\n @click=\"gotoPage(query.page - 1)\"\r\n >\r\n <OdIcon :icon=\"IconChevronLeft\" :size=\"16\" />\r\n </button>\r\n <template v-for=\"item in pageList\" :key=\"item.type === 'page' ? `page-${item.page}` : `ellipsis-${item.key}`\">\r\n <button\r\n v-if=\"item.type === 'page'\"\r\n type=\"button\"\r\n class=\"od-table__pager-button\"\r\n :class=\"{ 'is-current': item.page === query.page }\"\r\n :data-testid=\"`od-table-page-${item.page}`\"\r\n :aria-current=\"item.page === query.page ? 'page' : undefined\"\r\n :aria-label=\"locale.pageNumber(item.page)\"\r\n @click=\"gotoPage(item.page)\"\r\n >\r\n {{ item.page }}\r\n </button>\r\n <span v-else class=\"od-table__pager-ellipsis\" aria-hidden=\"true\">…</span>\r\n </template>\r\n <button\r\n type=\"button\"\r\n class=\"od-table__pager-button\"\r\n data-testid=\"od-table-next-page\"\r\n :aria-label=\"locale.nextPage\"\r\n :disabled=\"query.page >= pageCount\"\r\n @click=\"gotoPage(query.page + 1)\"\r\n >\r\n <OdIcon :icon=\"IconChevronRight\" :size=\"16\" />\r\n </button>\r\n </nav>\r\n </div>\r\n </template>\r\n\r\n <div\r\n v-if=\"headerPopover.isOpen.value && headerPopoverState\"\r\n :ref=\"(element) => headerPopover.registerPanel(element as HTMLElement | null)\"\r\n class=\"od-table__popover\"\r\n role=\"dialog\"\r\n :aria-label=\"headerPopoverState.kind === 'search' ? `${locale.search} ${columnByField(headerPopoverState.field)?.title ?? ''}` : `${locale.filter} ${columnByField(headerPopoverState.field)?.title ?? ''}`\"\r\n :style=\"{ top: `${headerPopover.placement.value.top}px`, left: `${headerPopover.placement.value.left}px` }\"\r\n @keydown=\"headerPopover.onKeydown\"\r\n >\r\n <template v-if=\"headerPopoverState.kind === 'search'\">\r\n <input\r\n v-model=\"searchDraft\"\r\n type=\"text\"\r\n class=\"od-table__search-input\"\r\n :data-testid=\"`od-table-search-${headerPopoverState.field}`\"\r\n :aria-label=\"`${locale.search} ${columnByField(headerPopoverState.field)?.title ?? ''}`\"\r\n @input=\"scheduleSearchCommit\"\r\n @keydown.enter.prevent=\"commitSearchNow\"\r\n />\r\n </template>\r\n <template v-else-if=\"headerPopoverColumn()?.options?.length\">\r\n <ul class=\"od-table__filter-list\">\r\n <li v-for=\"option in headerPopoverColumn()?.options\" :key=\"option.value\" class=\"od-table__filter-item\">\r\n <label class=\"od-table__column-label\">\r\n <input\r\n type=\"checkbox\"\r\n :data-testid=\"`od-table-filter-option-${headerPopoverState.field}-${option.value}`\"\r\n :disabled=\"option.disabled\"\r\n :checked=\"filterDraft.includes(option.value)\"\r\n @change=\"toggleFilterDraft(option.value, ($event.target as HTMLInputElement).checked)\"\r\n />\r\n <span>{{ option.label }}</span>\r\n </label>\r\n </li>\r\n </ul>\r\n <div class=\"od-table__filter-actions\">\r\n <button\r\n type=\"button\"\r\n class=\"od-table__link-button\"\r\n :data-testid=\"`od-table-filter-reset-${headerPopoverState.field}`\"\r\n @click=\"resetFilter\"\r\n >\r\n {{ locale.reset }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"od-table__filter-confirm\"\r\n :data-testid=\"`od-table-filter-confirm-${headerPopoverState.field}`\"\r\n @click=\"confirmFilter\"\r\n >\r\n {{ locale.confirm }}\r\n </button>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.od-table {\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--od-space-3);\r\n min-width: 0;\r\n color: var(--od-color-text-primary);\r\n font-family: var(--od-font-family);\r\n font-size: var(--od-font-size-md);\r\n line-height: var(--od-line-height-normal);\r\n}\r\n\r\n.od-table * {\r\n box-sizing: border-box;\r\n}\r\n\r\n/* ------------------------------- toolbar ------------------------------- */\r\n\r\n.od-table__toolbar {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--od-space-3);\r\n min-height: 32px;\r\n}\r\n\r\n.od-table__toolbar-meta {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--od-space-3);\r\n min-width: 0;\r\n}\r\n\r\n.od-table__total {\r\n color: var(--od-color-text-secondary);\r\n font-size: var(--od-font-size-sm);\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__selected {\r\n color: var(--od-color-primary);\r\n font-size: var(--od-font-size-sm);\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__toolbar-button {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--od-space-1);\r\n padding: var(--od-space-1) var(--od-space-2);\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-text-primary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n transition: border-color var(--od-transition-fast), color var(--od-transition-fast);\r\n}\r\n\r\n.od-table__toolbar-button:hover {\r\n border-color: var(--od-color-primary-hover);\r\n color: var(--od-color-primary-hover);\r\n}\r\n\r\n/* ------------------------------- viewport ------------------------------ */\r\n\r\n.od-table__viewport {\r\n position: relative;\r\n min-height: 120px;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-md);\r\n background: var(--od-color-bg-primary);\r\n}\r\n\r\n.od-table--bordered .od-table__viewport {\r\n border-color: var(--od-color-border);\r\n}\r\n\r\n.od-table:not(.od-table--bordered) .od-table__viewport {\r\n border-bottom: 1px solid var(--od-color-border-light);\r\n}\r\n\r\n.od-table__table {\r\n table-layout: fixed;\r\n border-collapse: collapse;\r\n font-size: var(--od-font-size-md);\r\n}\r\n\r\n.od-table__head-row {\r\n background: var(--od-color-bg-tertiary);\r\n}\r\n\r\n.od-table__head {\r\n position: relative;\r\n height: 44px;\r\n padding: 0;\r\n border-bottom: 1px solid var(--od-color-border);\r\n text-align: left;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table--bordered .od-table__head:not(:last-child) {\r\n border-right: 1px solid var(--od-color-border-light);\r\n}\r\n\r\n.od-table--compact .od-table__head {\r\n height: 36px;\r\n}\r\n\r\n.od-table__head--selection {\r\n width: 48px;\r\n}\r\n\r\n.od-table__head-inner {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--od-space-1);\r\n padding: 0 var(--od-space-3);\r\n}\r\n\r\n.od-table--compact .od-table__head-inner {\r\n padding: 0 var(--od-space-2);\r\n}\r\n\r\n.od-table__head-inner--center {\r\n justify-content: center;\r\n}\r\n\r\n.od-table__head-inner--right {\r\n justify-content: flex-end;\r\n}\r\n\r\n.od-table__head-inner--selection {\r\n justify-content: center;\r\n padding: 0;\r\n}\r\n\r\n.od-table__head-title {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__sort {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--od-space-1);\r\n padding: var(--od-space-1) 0;\r\n border: 0;\r\n background: transparent;\r\n color: inherit;\r\n font: inherit;\r\n font-weight: 600;\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__sort:hover .od-table__sort-title,\r\n.od-table__sort:hover .od-table__sort-icon {\r\n color: var(--od-color-primary-hover);\r\n}\r\n\r\n.od-table__sort.is-active {\r\n color: var(--od-color-primary);\r\n}\r\n\r\n.od-table__sort-title {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__sort-priority {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 16px;\r\n height: 16px;\r\n padding: 0 2px;\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-primary-light);\r\n color: var(--od-color-primary-active);\r\n font-size: var(--od-font-size-xs);\r\n font-weight: 600;\r\n}\r\n\r\n.od-table__head-actions {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 2px;\r\n margin-left: auto;\r\n}\r\n\r\n.od-table__icon-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n border: 0;\r\n border-radius: var(--od-radius-sm);\r\n background: transparent;\r\n color: var(--od-color-text-tertiary);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__icon-button:hover {\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-text-secondary);\r\n}\r\n\r\n.od-table__icon-button.is-active {\r\n color: var(--od-color-primary);\r\n}\r\n\r\n.od-table__resize-handle {\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n width: 6px;\r\n height: 100%;\r\n margin-left: -3px;\r\n background-clip: content-box;\r\n background-color: transparent;\r\n cursor: col-resize;\r\n touch-action: none;\r\n user-select: none;\r\n}\r\n\r\n.od-table__resize-handle::after {\r\n content: '';\r\n display: block;\r\n width: 2px;\r\n height: 100%;\r\n margin: 0 auto;\r\n background-color: transparent;\r\n transition: background-color var(--od-transition-fast);\r\n}\r\n\r\n.od-table__resize-handle:hover::after,\r\n.od-table__resize-handle.is-adjusting::after {\r\n background-color: var(--od-color-primary);\r\n}\r\n\r\n/* -------------------------------- rows --------------------------------- */\r\n\r\n.od-table__row {\r\n border-bottom: 1px solid var(--od-color-border-light);\r\n transition: background-color var(--od-transition-fast);\r\n}\r\n\r\n.od-table__row:hover {\r\n background: var(--od-color-bg-secondary);\r\n}\r\n\r\n.od-table__row:last-child {\r\n border-bottom: 0;\r\n}\r\n\r\n.od-table--striped .od-table__row:nth-child(even) {\r\n background: var(--od-color-bg-tertiary);\r\n}\r\n\r\n.od-table--bordered .od-table__row .od-table__cell:not(:last-child) {\r\n border-right: 1px solid var(--od-color-border-light);\r\n}\r\n\r\n.od-table__cell {\r\n height: 44px;\r\n padding: var(--od-space-2) var(--od-space-3);\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n color: var(--od-color-text-primary);\r\n}\r\n\r\n.od-table--compact .od-table__cell {\r\n height: 34px;\r\n padding: var(--od-space-1) var(--od-space-2);\r\n}\r\n\r\n.od-table__cell--center {\r\n text-align: center;\r\n}\r\n\r\n.od-table__cell--right {\r\n text-align: right;\r\n}\r\n\r\n.od-table__cell--datetime {\r\n overflow: visible;\r\n}\r\n\r\n.od-table__cell--selection {\r\n text-align: center;\r\n padding: 0;\r\n}\r\n\r\n.od-table__cell :slotted(.od-table__cell-link) {\r\n display: inline-block;\r\n box-sizing: border-box;\r\n max-width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n border: 0;\r\n border-radius: var(--od-radius-sm);\r\n background: transparent;\r\n color: var(--od-table-link-color, var(--od-color-primary-active));\r\n font: inherit;\r\n letter-spacing: 0;\r\n text-align: inherit;\r\n text-decoration: underline;\r\n text-underline-offset: 3px;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__cell :slotted(.od-table__cell-link:hover) {\r\n text-decoration-thickness: 2px;\r\n}\r\n\r\n.od-table__cell :slotted(.od-table__cell-link:focus-visible) {\r\n outline: 2px solid var(--od-table-link-color, var(--od-color-primary-active));\r\n outline-offset: 2px;\r\n}\r\n\r\n.od-table__cell :slotted(.od-table__cell-link:disabled) {\r\n color: var(--od-color-text-disabled);\r\n text-decoration: none;\r\n cursor: not-allowed;\r\n}\r\n\r\n.od-table__checkbox {\r\n width: 16px;\r\n height: 16px;\r\n accent-color: var(--od-color-primary);\r\n cursor: pointer;\r\n}\r\n\r\n/* ------------------------------- datetime ------------------------------ */\r\n\r\n.od-table__time {\r\n position: relative;\r\n display: inline-block;\r\n cursor: default;\r\n}\r\n\r\n.od-table__tooltip {\r\n position: absolute;\r\n bottom: calc(100% + 6px);\r\n left: 50%;\r\n z-index: var(--od-z-dropdown);\r\n padding: var(--od-space-1) var(--od-space-2);\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-text-primary);\r\n box-shadow: var(--od-shadow);\r\n color: var(--od-color-bg-primary);\r\n font-size: var(--od-font-size-xs);\r\n white-space: nowrap;\r\n opacity: 0;\r\n pointer-events: none;\r\n transform: translateX(-50%);\r\n transition: opacity var(--od-transition-fast);\r\n}\r\n\r\n.od-table__time:hover .od-table__tooltip,\r\n.od-table__time:focus-visible .od-table__tooltip {\r\n opacity: 1;\r\n}\r\n\r\n/* ------------------------------- states -------------------------------- */\r\n\r\n.od-table__state-cell {\r\n padding: 0 !important;\r\n border-right: 0 !important;\r\n}\r\n\r\n.od-table__state {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: var(--od-space-2);\r\n min-height: 160px;\r\n padding: var(--od-space-6);\r\n color: var(--od-color-text-tertiary);\r\n}\r\n\r\n.od-table__state--error {\r\n flex-direction: column;\r\n color: var(--od-color-error);\r\n}\r\n\r\n.od-table__state-title {\r\n margin: 0;\r\n font-weight: 600;\r\n}\r\n\r\n.od-table__state-detail {\r\n margin: 0;\r\n color: var(--od-color-text-secondary);\r\n font-size: var(--od-font-size-sm);\r\n text-align: center;\r\n word-break: break-all;\r\n}\r\n\r\n.od-table__state--root .od-table__state-detail {\r\n color: var(--od-color-error);\r\n}\r\n\r\n.od-table__state-retry {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--od-space-1);\r\n padding: var(--od-space-1) var(--od-space-3);\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-primary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__state-retry:hover {\r\n border-color: var(--od-color-primary-hover);\r\n}\r\n\r\n.od-table__overlay {\r\n position: absolute;\r\n inset: 0;\r\n z-index: var(--od-z-dropdown);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: var(--od-space-2);\r\n background: color-mix(in srgb, var(--od-color-bg-primary) 78%, transparent);\r\n color: var(--od-color-text-secondary);\r\n}\r\n\r\n.od-table__banner {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--od-space-2);\r\n padding: var(--od-space-2) var(--od-space-3);\r\n border: 1px solid var(--od-color-error);\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-error);\r\n}\r\n\r\n.od-table__banner .od-table__state-retry {\r\n margin-left: auto;\r\n}\r\n\r\n.od-table__spinner {\r\n animation: od-table-spin 1s linear infinite;\r\n}\r\n\r\n@keyframes od-table-spin {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n .od-table__spinner {\r\n animation: none;\r\n }\r\n}\r\n\r\n/* ------------------------------ pagination ----------------------------- */\r\n\r\n.od-table__pagination {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--od-space-3);\r\n flex-wrap: wrap;\r\n}\r\n\r\n.od-table__pagination-total {\r\n color: var(--od-color-text-secondary);\r\n font-size: var(--od-font-size-sm);\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__page-size {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--od-space-2);\r\n color: var(--od-color-text-secondary);\r\n font-size: var(--od-font-size-sm);\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__page-size-select {\r\n padding: var(--od-space-1) var(--od-space-2);\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-bg-primary);\r\n color: var(--od-color-text-primary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__pager {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--od-space-1);\r\n}\r\n\r\n.od-table__pager-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 28px;\r\n height: 28px;\r\n padding: 0 var(--od-space-1);\r\n border: 1px solid transparent;\r\n border-radius: var(--od-radius-sm);\r\n background: transparent;\r\n color: var(--od-color-text-secondary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__pager-button:hover:not(:disabled):not(.is-current) {\r\n border-color: var(--od-color-border);\r\n color: var(--od-color-primary-hover);\r\n}\r\n\r\n.od-table__pager-button.is-current {\r\n border-color: var(--od-color-primary);\r\n background: var(--od-color-primary-light);\r\n color: var(--od-color-primary-active);\r\n font-weight: 600;\r\n}\r\n\r\n.od-table__pager-button:disabled {\r\n color: var(--od-color-text-disabled);\r\n cursor: not-allowed;\r\n}\r\n\r\n.od-table__pager-ellipsis {\r\n min-width: 20px;\r\n text-align: center;\r\n color: var(--od-color-text-tertiary);\r\n}\r\n\r\n/* ------------------------------- popovers ------------------------------ */\r\n\r\n.od-table__popover {\r\n position: fixed;\r\n z-index: var(--od-z-dropdown);\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--od-space-2);\r\n padding: var(--od-space-3);\r\n border: 1px solid var(--od-color-border-light);\r\n border-radius: var(--od-radius-md);\r\n background: var(--od-color-bg-primary);\r\n box-shadow: var(--od-shadow-dialog);\r\n}\r\n\r\n.od-table__search-input {\r\n padding: var(--od-space-1) var(--od-space-2);\r\n border: 1px solid var(--od-color-border);\r\n border-radius: var(--od-radius-sm);\r\n font-size: var(--od-font-size-sm);\r\n}\r\n\r\n.od-table__search-input:focus-visible {\r\n outline: none;\r\n box-shadow: var(--od-focus-ring);\r\n}\r\n\r\n.od-table__filter-list,\r\n.od-table__column-list {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--od-space-1);\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n max-height: 264px;\r\n overflow-y: auto;\r\n}\r\n\r\n.od-table__filter-item,\r\n.od-table__column-item {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--od-space-2);\r\n}\r\n\r\n.od-table__column-label {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--od-space-2);\r\n flex: 1;\r\n min-width: 0;\r\n font-size: var(--od-font-size-sm);\r\n font-weight: 400;\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__column-label span {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.od-table__condition-dot {\r\n width: 6px;\r\n height: 6px;\r\n flex: none;\r\n border-radius: 50%;\r\n background: var(--od-color-primary);\r\n}\r\n\r\n.od-table__filter-actions,\r\n.od-table__column-actions {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--od-space-2);\r\n padding-top: var(--od-space-2);\r\n border-top: 1px solid var(--od-color-border-light);\r\n}\r\n\r\n.od-table__link-button {\r\n padding: 0;\r\n border: 0;\r\n background: transparent;\r\n color: var(--od-color-primary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__link-button:hover {\r\n color: var(--od-color-primary-hover);\r\n}\r\n\r\n.od-table__link-button:disabled {\r\n color: var(--od-color-text-disabled);\r\n cursor: not-allowed;\r\n}\r\n\r\n.od-table__filter-confirm {\r\n padding: var(--od-space-1) var(--od-space-3);\r\n border: 0;\r\n border-radius: var(--od-radius-sm);\r\n background: var(--od-color-primary);\r\n color: var(--od-color-bg-primary);\r\n font-size: var(--od-font-size-sm);\r\n cursor: pointer;\r\n}\r\n\r\n.od-table__filter-confirm:hover {\r\n background: var(--od-color-primary-hover);\r\n}\r\n\r\n.od-table__hint {\r\n margin: 0;\r\n min-height: 18px;\r\n color: var(--od-color-warning);\r\n font-size: var(--od-font-size-xs);\r\n}\r\n\r\n/* ------------------------------- focus --------------------------------- */\r\n\r\n.od-table__sort:focus-visible,\r\n.od-table__icon-button:focus-visible,\r\n.od-table__toolbar-button:focus-visible,\r\n.od-table__pager-button:focus-visible,\r\n.od-table__state-retry:focus-visible,\r\n.od-table__link-button:focus-visible,\r\n.od-table__filter-confirm:focus-visible,\r\n.od-table__checkbox:focus-visible,\r\n.od-table__resize-handle:focus-visible,\r\n.od-table__search-input:focus-visible,\r\n.od-table__page-size-select:focus-visible {\r\n outline: none;\r\n box-shadow: var(--od-focus-ring);\r\n}\r\n</style>\r\n","import type { App } from 'vue'\r\nimport './theme/index.css'\r\nimport OdButton from './components/OdButton.vue'\r\nimport OdIcon from './components/OdIcon.vue'\nimport OdTable from './components/OdTable.vue'\n\nexport { OdButton, OdIcon, OdTable }\nexport { OdTableConfigError } from './components/OdTable.types'\nexport type { OdButtonVariant, OdSize } from './components/OdButton.vue'\r\nexport type {\n OdTableCellContext,\n OdTableColumn,\n OdTableConfigErrorCode,\r\n OdTableDataType,\r\n OdTableEvents,\r\n OdTableExpose,\r\n OdTableFilter,\n OdTableFieldMeta,\n OdTableInitialQuery,\r\n OdTableLocale,\n OdTableMeta,\n OdTableOption,\r\n OdTablePaginationConfig,\r\n OdTableProps,\r\n OdTableQuery,\r\n OdTableRequest,\r\n OdTableResult,\r\n OdTableRowKey,\r\n OdTableSearch,\r\n OdTableSorting,\n OdTableSlots,\n OdTableLoadData,\r\n} from './components/OdTable.types'\r\n\r\nexport const OnedotUI = {\r\n install(app: App) {\r\n app.component('OdButton', OdButton)\r\n app.component('OdIcon', OdIcon)\n app.component('OdTable', OdTable)\r\n },\r\n}\r\n"],"names":["props","__props","emit","__emit","classes","computed","handleClick","event","_createElementBlock","_mergeProps","_ctx","$slots","_openBlock","_hoisted_2","_renderSlot","_hoisted_3","_createElementVNode","_hoisted_4","iconStyle","_createBlock","_resolveDynamicComponent","trueFn","$PROXY","$SOURCES","propTraps","_","property","receiver","resolveSource","s","mergeProxy","sources","flattenedSources","source","i","v","keys","flatMerge","result","key","value","observerToCallback","observerOrNext","_a","refToReadonlyAtom","watch","refToWritableAtom","updater","vueReactivity","subscriptions","subscription","fn","_options","shallowRef","functionalUpdate","input","cloneState","proto","copy","makeObjectMap","copyInstancePropertiesWithoutMemos","target","targetRecord","hasOwn","obj","makeStateUpdater","instance","old","isPlainContainer","getEnumerableOwnKeys","MAX_STATE_COMPARE_DEPTH","stateSlicesEqual","a","b","stateSlicesEqualAtDepth","depth","keysA","keysB","recordA","recordB","setStateSlice","isEqual","onChangeKey","onChange","current","next","flattenBy","arr","getChildren","flat","recurse","subArr","item","children","memo","memoDeps","onAfterCompare","onAfterUpdate","onBeforeCompare","onBeforeUpdate","deps","depArgs","newDeps","depsChanged","skipFirstRun","hasRun","pad","str","num","tableMemo","feature","fnName","objectId","table","memoOptions","startCalcTime","endCalcTime","runCount","debug","debugAll","parentName","getFunctionNameInfo","debugByParent","debugByFeature","logTime","time","runType","onAfterUpdateHandler","schedule","untrack","debugOptions","staticFnName","splitBy","fnKey","assignTableAPIs","apis","assignPrototypeAPIs","prototype","memoKey","args","self","callMemoOrStaticFn","staticFn","cell_getValue","cell","cell_renderValue","cell_getContext","coreCellsFeature","getHeaderPrototype","features","_b","constructHeader","column","options","headerPrototype","header","initFns","getDefaultColumnPinningState","table_getStartHeaderGroups","allColumns","leafColumnsById","start","orderedLeafColumns","column_getIsVisible","buildHeaderGroups","table_getEndHeaderGroups","end","table_getCenterHeaderGroups","leafColumns","table_getVisibleLeafColumns","startAndEnd","table_getStartLeafColumns","table_getEndLeafColumns","table_getCenterLeafColumns","d","table_getStartVisibleLeafColumns","table_getEndVisibleLeafColumns","table_getCenterVisibleLeafColumns","table_getPinnedVisibleLeafColumns","position","getDefaultColumnVisibilityState","column_toggleVisibility","visible","column_getCanHide","table_setColumnVisibility","nextVisible","leafColumn","columnVisibility","childColumns","childColumn","column_getToggleVisibilityHandler","e","row_getVisibleCells","row","allCells","visibleCells","visibleCellsByColumnId","row_getVisibleCellsByColumnId","startCells","endCells","centerCells","id","table_getVisibleFlatColumns","table_resetColumnVisibility","defaultState","table_toggleAllColumnsVisible","table_getIsAllColumnsVisible","visibility","table_getIsSomeColumnsVisible","table_getToggleAllColumnsVisibilityHandler","getMaxHeaderDepth","columns","maxDepth","formatHeaderGroupId","headerFamily","formatHeaderId","columnId","childHeaderId","countPendingHeadersForColumn","headers","count","constructHeaderGroup","headersToGroup","headerGroups","headerGroupInitFns","headerGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","updateHeaderSpans","colSpan","j","child","rowSpan","chainChild","columnsToGroup","bottomHeaders","getColumnPrototype","constructColumn","columnDef","parent","resolvedColumnDef","accessorKey","accessorKeyString","accessorFn","originalRow","columnPrototype","table_getOrderColumnsFn","columnOrder","orderedColumns","remaining","orderColumns","grouping","groupedColumnMode","nonGroupingColumns","col","groupingColumns","column_getFlatColumns","column_getLeafColumns","table_getDefaultColumnDef","constructColumns","columnDefs","groupingColumnDef","table_getAllColumns","table_getAllFlatColumns","table_getAllFlatColumnsById","flatColumns","table_getAllLeafColumns","c","table_getAllLeafColumnsById","table_getColumn","coreColumnsFeature","collectLeafHeaders","leafHeaders","header_getLeafHeaders","header_getContext","table_getHeaderGroups","leftColumns","rightColumns","centerColumns","table_getFooterGroups","table_getFlatHeaders","table_getLeafHeaders","topHeaders","coreHeadersFeature","_c","_d","getRowPrototype","constructRow","original","rowIndex","subRows","parentId","rowPrototype","getDefaultCellSelectionState","table_resetCellSelection","table_autoResetCellSelection","table_autoResetExpanded","table_resetExpanded","initialExpanded","defaultPageIndex","table_autoResetPageIndex","table_resetPageIndex","table_setPagination","table_setPageIndex","pageIndex","maxPageIndex","table_setSorting","table_resetSorting","table_autoResetSorting","createCoreRowModel","_createCoreRowModel","accessRows","rowModel","originalRows","parentRow","rows","data","table_getCoreRowModel","table_getPreFilteredRowModel","table_getFilteredRowModel","table_getPreGroupedRowModel","table_getGroupedRowModel","table_getPreSortedRowModel","table_getSortedRowModel","table_getPreExpandedRowModel","table_getExpandedRowModel","table_getPrePaginatedRowModel","table_getPaginatedRowModel","table_getRowModel","coreRowModelsFeature","getCellPrototype","constructCell","cellPrototype","row_getDisplayIndex","displayIndex","table_getRowsInDisplayOrder","displayRows","handleRow","row_getValue","row_getUniqueValues","row_renderValue","row_getLeafRows","table_getMaxSubRowDepth","row_getParentRow","row_getParentRows","parentRows","currentRow","row_getAllCells","cache","cells","row_getAllCellsByColumnId","table_getRowId","index","table_getRow","rowId","searchAll","coreRowsFeature","table_syncExternalStateToBaseAtoms","capturedState","compare","currentState","externalState","state","baseAtom","rawExternalState","table_publishExternalState","table_reset","snap","table_mergeOptions","newOptions","atoms","initialState","mergedOptions","descriptors","table_setOptions","coreTablesFeature","coreFeatures","atomToStore","atom","store","shallow","objA","objB","k","getOwnKeys","getInitialTableState","constructTable","tableOptions","_reactivity","aggregationFns","_columnMeta","coreRowModel","expandedRowModel","facetedMinMaxValues","facetedRowModel","facetedUniqueValues","filterFns","_filterMeta","filteredRowModel","groupedRowModel","paginatedRowModel","sortFns","sortedRowModel","_tableMeta","featuresList","atomKey","_atom","wrappedAtom","syncExternal","syncAtomToWrappedSub","syncWrappedToAtomSub","stateKeys","externalAtom","reactiveState","controlledState","controlledValue","snapshot","rowModels","factory","states","getDefaultColumnSizingState","getDefaultColumnSizingColumnDef","column_getSize","defaultSizes","columnSizing","columnSize","buildColumnOffsets","starts","afters","sizes","size","after","table_getColumnOffsets","toOffsetsKey","column_getStart","column_getAfter","column_resetSize","table_setColumnSizing","rest","columnIds","sumHeaderSize","sum","header_getSize","header_getStart","prevSiblingHeader","table_resetColumnSizing","table_getTotalSize","table_getStartTotalSize","table_getCenterTotalSize","table_getEndTotalSize","getDefaultColumnResizingState","column_getCanResize","column_getIsResizing","header_getResizeHandler","_contextDocument","canResize","isTouchStartEvent","startSize","columnSizingStart","leafHeader","clientX","newColumnSizing","updateOffset","eventType","clientXPos","isCommit","table_setColumnResizing","deltaDirection","deltaOffset","deltaPercentage","entry","headerSize","moveRafId","hasPendingMove","latestMoveX","flushMove","onMove","onEnd","contextDocument","mouseEvents","touchEvents","touchEvent","removeTouchEvents","passiveIfSupported","passiveEventSupported","table_resetHeaderSizeInfo","passiveSupported","supported","noop","columnResizingFeature","columnSizingFeature","_e","columnVisibilityFeature","getDefaultRowSelectionState","table_setRowSelection","table_resetRowSelection","table_toggleAllRowsSelected","opts","table_getIsAllRowsSelected","rowSelection","preGroupedFlatRows","subtreeCache","isRowSelectableInSelectAll","row_getCanSelect","table_toggleAllPageRowsSelected","resolvedValue","table_getIsAllPageRowsSelected","mutateRowIsSelected","table_getPreSelectedRowModel","table_getSelectedRowModel","table_getIsSomeRowsSelected","selectRowsFn","table_getFilteredSelectedRowModel","table_getGroupedSelectedRowModel","table_getSelectedRowIds","isAllRowsSelected","isRowSelected","paginationFlatRows","sawSelectableRow","table_getIsSomePageRowsSelected","row_getIsSelected","row_getIsSomeSelected","table_getToggleAllRowsSelectedHandler","table_getToggleAllPageRowsSelectedHandler","row_toggleSelected","isSelected","row_getCanMultiSelect","pruneAncestorRowIds","isSubRowSelected","row_getIsAllSubRowsSelected","row_getCanSelectSubRows","row_getToggleSelectedHandler","canSelect","checked","anchorId","selectRowRange","includeChildren","anchorRow","anchorIndex","anchorAtIndex","rowAtIndex","rangeRow","respectCanSelectOnDeselect","r","cached","rowsById","visited","selectable","currentId","known","selectRowsRecursively","selectedFlatRows","selectedRowsById","newSubRows","cloned","newSelectedFlatRows","newSelectedRowsById","someSelected","allChildrenSelected","someSelectable","subRow","subRowChildrenSelected","rowSelectionFeature","rangeEvent","getOptionsWithReactiveValues","resolvedOptions","unref","getReactiveOptionDeps","useTable","syncTableOptions","prev","reactivity","defaultOptions","coreTable","getCurrentScope","onScopeDispose","controlledAtoms","controlledValues","defaultAttributes","createVueComponent","type","iconName","iconNamePascal","iconNode","color","stroke","title","attrs","slots","h","IconAlertCircle","IconArrowsSort","IconChevronLeft","IconChevronRight","IconFilter","IconListCheck","IconLoader","IconRefresh","IconSearch","IconSortAscending","IconSortDescending","FOCUSABLE_SELECTOR","focusableIn","root","element","useOdTablePopover","onClosed","isOpen","ref","placement","panel","trigger","align","wantedWidth","updatePlacement","rect","margin","width","viewportWidth","left","onWindowResize","onDocumentPointerDown","close","open","nextTick","shouldRestore","registerPanel","onKeydown","focusable","first","last","active","onBeforeUnmount","readonly","OD_TABLE_NULL_TEXT","UTC8_OFFSET_MS","MINUTE","HOUR","DAY","MONTH","YEAR","parseOdTableNumber","parsed","parseOdTableBoolean","parseOdTableDatetime","formatOdTableExactDatetime","timestamp","shifted","formatOdTableRelativeTime","locale","now","diff","formatNumberCell","maximumFractionDigits","formatBooleanCell","labels","formatEnumCell","raw","option","formatOdTableCell","context","odTableExactDatetimeOrNull","OD_TABLE_DEFAULT_PAGE_SIZE","OD_TABLE_DEFAULT_PAGE_SIZE_OPTIONS","createOdTableQuery","pageSize","isPositiveInt","normalizeOdTableQuery","query","searches","searchFields","filters","filterFields","values","sorting","sortingFields","odTableQueriesEqual","mergeOdTableInitialQuery","base","initial","merged","nextSortDirection","direction","odTableQueryReducer","action","trimmed","existing","nextDirection","page","cleanupOdTableQueryForColumns","searchable","filterable","sortable","encodeOdTableRowKey","decodeOdTableRowKey","encoded","separator","numeric","resolveEnumLabel","resolveSortValue","compareValues","runOdTableLocalQuery","columnByField","normalized","filtered","record","search","filter","entries","sort","right","compared","total","pageCount","OD_TABLE_REQUEST_ERROR_CODES","OdTableRequestError","code","message","details","__publicField","isAbortError","error","abortedError","cause","normalizeHeaders","fetchOdTableRequest","url","response","text","executeOdTableRequest","request","createOdTableRequestCoordinator","disposed","sequence","controller","cancel","run","operation","ignored","OD_TABLE_DEFAULT_LOCALE","OdTableConfigError","isProvided","fail","isPositiveInteger","isRowKey","validateOdTableColumns","remote","fields","field","flag","validateOdTablePagination","pagination","validateOdTableInitialQuery","validateOdTableInitialQueryForColumns","pending","byField","validateOdTableRows","rowKey","identity","validateOdTableSourceMode","isNonNegativeInteger","validateOdTableResult","payload","validateOdTableMeta","isRecord","seen","resolveOdTableRemoteColumns","meta","SELECTION_COLUMN_ID","DEFAULT_COLUMN_WIDTH","MIN_COLUMN_WIDTH","SEARCH_DEBOUNCE_MS","KEYBOARD_RESIZE_STEP","odTableFeatures","DESCRIBE_SCOPE","getCurrentInstance","sourceMode","configError","dataStatus","dataErrorValue","frontendColumns","remoteSnapshot","columnsResolved","rowKeyField","paginationConfig","localDisplayRows","localTotal","selectedKeysInternal","columnWidths","suppressQueryWatch","configErrorEmitted","initialized","initialQueryCaptured","initialQuerySnapshot","mountedNow","relativeNow","coordinator","asConfigError","describeError","handleConfigError","configErrorValue","resetColumnVisibility","ensureVisibleColumn","withDefaultPagination","defaultPageSize","setQuerySilently","queryColumns","initialize","discardHeaderPopover","columnSettings","applySelection","mode","cleaned","requestData","runLocalCompute","currentQuery","currentColumns","currentRowKey","outcome","signal","pruneSelectionToRows","available","pruned","refresh","__expose","retry","commitQuery","dispatchQuery","recoverConfig","previous","validated","preserved","tanstackColumns","defs","tanstackData","rowSelectionMap","map","minColumnWidths","handleColumnSizingChange","clamped","tableRows","tableWidth","isResizing","wasResizing","emitColumnWidth","currentColumnSize","selectedIdSet","emitEvents","rowById","matched","toggleRowSelected","allPageRowsSelected","somePageRowsSelected","toggleAllPageRows","pageIds","handlePageSelectionChange","toggleSort","additive","searchDraft","filterDraft","headerPopoverState","headerPopover","commitSearchFromDraft","searchDebounceTimer","clearSearchDebounce","currentSearchValue","currentFilterValues","toggleHeaderPopover","kind","scheduleSearchCommit","commitSearchNow","toggleFilterDraft","headerPopoverColumn","confirmFilter","resetFilter","hasSearchCondition","hasFilterCondition","sortDirectionOf","sortPriorityOf","columnSettingsHint","activeConditionFields","visibleBusinessColumnCount","toggleColumnVisible","restoreDefaultVisibility","clearColumnConditions","clearAllColumnConditions","keyboardResize","minWidthOf","setColumnWidth","startKeyboardResize","keyboardResizeStep","delta","cancelKeyboardResize","session","effectivePageSizeOptions","pageList","items","windowStart","windowEnd","gotoPage","changePageSize","showLoading","showRefreshing","showEmpty","showErrorState","showErrorBanner","errorMessage","stateColumnCount","rootClasses","tableAriaLabel","cellText","exactDatetime","isDatetimeSortable","$attrs","_hoisted_1","_createVNode","OdIcon","_unref","_toDisplayString","_Fragment","_hoisted_5","_hoisted_6","_hoisted_7","_cache","$event","_normalizeStyle","_hoisted_10","_renderList","_hoisted_11","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_19","headerIndex","_normalizeClass","_hoisted_21","_f","_hoisted_24","_h","_g","_hoisted_25","_hoisted_26","_j","_i","_k","_hoisted_27","_l","_m","_n","_p","_o","_hoisted_32","cellIndex","_createTextVNode","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_40","_hoisted_41","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_51","_hoisted_54","_hoisted_55","_hoisted_59","_hoisted_60","_hoisted_62","_hoisted_63","_hoisted_64","OnedotUI","app","OdButton","OdTable"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]}