@gunkin/uiify 0.0.26-alpha → 0.0.27-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -0
- package/agents/components.md +2 -0
- package/agents/index.md +1 -0
- package/dist/ai/UiDocument.d.ts +16 -0
- package/dist/ai/UiDocument.d.ts.map +1 -0
- package/dist/ai/UiDocument.js +33 -0
- package/dist/ai/UiDocument.js.map +1 -0
- package/dist/ai/catalog.generated.d.ts +2766 -0
- package/dist/ai/catalog.generated.d.ts.map +1 -0
- package/dist/ai/catalog.generated.js +214 -0
- package/dist/ai/catalog.generated.js.map +1 -0
- package/dist/ai/index.d.ts +9 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +13 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/issues.d.ts +10 -0
- package/dist/ai/issues.d.ts.map +1 -0
- package/dist/ai/issues.js +178 -0
- package/dist/ai/issues.js.map +1 -0
- package/dist/ai/layout.d.ts +26 -0
- package/dist/ai/layout.d.ts.map +1 -0
- package/dist/ai/layout.js +46 -0
- package/dist/ai/layout.js.map +1 -0
- package/dist/ai/limits.d.ts +16 -0
- package/dist/ai/limits.d.ts.map +1 -0
- package/dist/ai/limits.js +99 -0
- package/dist/ai/limits.js.map +1 -0
- package/dist/ai/load.d.ts +16 -0
- package/dist/ai/load.d.ts.map +1 -0
- package/dist/ai/load.js +69 -0
- package/dist/ai/load.js.map +1 -0
- package/dist/ai/loaders.generated.d.ts +5 -0
- package/dist/ai/loaders.generated.d.ts.map +1 -0
- package/dist/ai/loaders.generated.js +122 -0
- package/dist/ai/loaders.generated.js.map +1 -0
- package/dist/ai/rules.d.ts +11 -0
- package/dist/ai/rules.d.ts.map +1 -0
- package/dist/ai/rules.js +126 -0
- package/dist/ai/rules.js.map +1 -0
- package/dist/ai/schema.generated.d.ts +8 -0
- package/dist/ai/schema.generated.d.ts.map +1 -0
- package/dist/ai/schema.generated.js +3316 -0
- package/dist/ai/schema.generated.js.map +1 -0
- package/dist/ai/types.d.ts +33 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +14 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/ai/validate.d.ts +15 -0
- package/dist/ai/validate.d.ts.map +1 -0
- package/dist/ai/validate.js +32 -0
- package/dist/ai/validate.js.map +1 -0
- package/dist/ai/validator.generated.d.ts +13 -0
- package/dist/ai/validator.generated.d.ts.map +1 -0
- package/dist/ai/validator.generated.js +49133 -0
- package/dist/ai/validator.generated.js.map +1 -0
- package/dist/components/virtual-scroll/VirtualScroll.d.ts.map +1 -1
- package/dist/components/virtual-scroll/VirtualScroll.js +1 -1
- package/dist/components/virtual-scroll/VirtualScroll.js.map +1 -1
- package/dist/styles/index.css +1 -1
- package/package.json +10 -1
- package/skills/uiify/SKILL.md +14 -10
- package/skills/uiify/references/guides/verification.md +13 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualScroll.d.ts","sourceRoot":"","sources":["../../../src/components/virtual-scroll/VirtualScroll.tsx"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,YAAY,EAClB,MAAM,OAAO,CAAC;AAuCf,OAAO,KAAK,EAEV,iBAAiB,EACjB,qBAAqB,EAItB,MAAM,YAAY,CAAC;AAwBpB,wBAAgB,aAAa,CAAC,CAAC,SAAS,iBAAiB,EACvD,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC9B,YAAY,
|
|
1
|
+
{"version":3,"file":"VirtualScroll.d.ts","sourceRoot":"","sources":["../../../src/components/virtual-scroll/VirtualScroll.tsx"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,YAAY,EAClB,MAAM,OAAO,CAAC;AAuCf,OAAO,KAAK,EAEV,iBAAiB,EACjB,qBAAqB,EAItB,MAAM,YAAY,CAAC;AAwBpB,wBAAgB,aAAa,CAAC,CAAC,SAAS,iBAAiB,EACvD,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC9B,YAAY,CA2gBd;yBA7gBe,aAAa"}
|
|
@@ -506,7 +506,7 @@ function VirtualScroll(props) {
|
|
|
506
506
|
const commonProps = resolveRepeatedSlotProps(byItemValueProps, slot.item.id);
|
|
507
507
|
return mergeRepeatedSlotProps(commonProps, byItemIndex?.[slot.index]);
|
|
508
508
|
})(),
|
|
509
|
-
key: `slot-${slot.slotIndex}`,
|
|
509
|
+
key: dynamicLayout ? `slot-${slot.slotIndex}` : slot.item?.id ?? `slot-${slot.slotIndex}`,
|
|
510
510
|
slotIndex: slot.slotIndex,
|
|
511
511
|
index: slot.index,
|
|
512
512
|
itemCount: items.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/virtual-scroll/VirtualScroll.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type FragmentInstance,\n type ReactElement,\n} from \"react\";\nimport { composeEventHandlers } from \"@gunkin/uiify/core/compose-event-handlers\";\nimport { flushSync } from \"react-dom\";\nimport { useResizeObserver } from \"@gunkin/uiify/hooks\";\nimport { useMergedRefs } from \"../../hooks/use-merged-refs.js\";\nimport { mergeRepeatedSlotProps, resolveRepeatedSlotProps } from \"../../core/slot-props.js\";\nimport { resolveVirtualScrollAnchorAdjustment } from \"./virtual-scroll-anchor.js\";\nimport { readScrollOffset, writeScrollOffset } from \"./virtual-scroll-axis.js\";\nimport {\n createVirtualScrollIosScroll,\n detectTouchScrollEnvironment,\n} from \"./virtual-scroll-ios.js\";\nimport {\n computeScrollAdjustmentForRowResize,\n createVirtualScrollMeasurementStore,\n} from \"./virtual-scroll-measurements.js\";\nimport {\n computeDynamicVirtualScrollRange,\n computeVirtualScrollRange,\n rangesEqual,\n toVirtualScrollRangeChange,\n} from \"./virtual-scroll-range.js\";\nimport {\n computeActiveVirtualScrollSlotCount,\n computeVirtualScrollSlotCount,\n VirtualScrollRowShell,\n} from \"./VirtualScrollRowShell.js\";\nimport {\n clampScrollOffset,\n computeScrollOffsetForIndex,\n normalizeScrollBehaviorOptions,\n normalizeScrollToIndexOptions,\n resolveScrollBehavior,\n} from \"./virtual-scroll-scroll.js\";\nimport {\n createVirtualScrollScrollState,\n supportsScrollEndEvent,\n} from \"./virtual-scroll-scroll-state.js\";\nimport { applyVirtualScrollRangeToDom } from \"./virtual-scroll-scroll-sync.js\";\nimport type {\n VirtualScrollHandle,\n VirtualScrollItem,\n VirtualScrollOwnProps,\n VirtualScrollRowSlot,\n VirtualScrollScrollBehaviorOptions,\n VirtualScrollScrollToIndexOptions,\n} from \"./types.js\";\nimport { VirtualScrollRowItem } from \"./VirtualScrollRowItem.js\";\nimport {\n VIRTUAL_SCROLL_OVERSCAN,\n VIRTUAL_SCROLL_ROW_HEIGHT,\n VIRTUAL_SCROLL_SCROLL_RESET_DELAY,\n} from \"./types.js\";\n\nfunction buildRowSlots<T extends VirtualScrollItem>(\n items: readonly T[],\n rangeStart: number,\n slotCount: number,\n): readonly VirtualScrollRowSlot<T>[] {\n const activeSlotCount = computeActiveVirtualScrollSlotCount(items.length, rangeStart, slotCount);\n return Array.from({ length: activeSlotCount }, (_, slotIndex) => {\n const index = rangeStart + slotIndex;\n return {\n index,\n item: items[index] ?? null,\n slotIndex,\n };\n });\n}\n\nexport function VirtualScroll<T extends VirtualScrollItem>(\n props: VirtualScrollOwnProps<T>,\n): ReactElement {\n const {\n items,\n ref: consumerRef,\n height: suppliedHeight,\n style: consumerStyle,\n rowHeight = VIRTUAL_SCROLL_ROW_HEIGHT,\n orientation = \"vertical\",\n overscan = VIRTUAL_SCROLL_OVERSCAN,\n className,\n testId,\n renderRow,\n scrollRef,\n estimateRowHeight,\n onRangeChange,\n anchor = \"start\",\n followAppend = false,\n onScrollStateChange,\n isScrollingResetDelay = VIRTUAL_SCROLL_SCROLL_RESET_DELAY,\n slotProps,\n ...consumerProps\n } = props;\n\n const listRole = consumerProps.role === \"grid\" ? \"grid\" : \"list\";\n const height = suppliedHeight ?? 600;\n const dynamicLayout = estimateRowHeight !== undefined;\n const horizontal = orientation === \"horizontal\";\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useMergedRefs(ref, consumerRef);\n const scrollOffsetRef = useRef(0);\n const programmaticScrollRef = useRef(false);\n const eventHandlersRef = useRef({\n onScroll: () => {},\n onScrollEnd: () => {},\n onTouchStart: () => {},\n onTouchEnd: () => {},\n });\n const itemsRef = useRef(items);\n itemsRef.current = items;\n const lastRangeChangeRef = useRef<string>(\"\");\n const measuredHeightsRef = useRef(new Map<string, number>());\n const anchorSnapshotRef = useRef({\n firstItemId: items[0]?.id,\n itemCount: items.length,\n totalSize: 0,\n scrollTop: 0,\n });\n\n const [rangeVersion, setRangeVersion] = useState(0);\n const [measurementVersion, setMeasurementVersion] = useState(0);\n\n const measuredSize = useResizeObserver(ref);\n const viewportSize = (horizontal ? measuredSize?.width : measuredSize?.height) ?? height;\n\n const measurementStoreRef = useRef(\n createVirtualScrollMeasurementStore({\n itemCount: items.length,\n defaultRowHeight: rowHeight,\n ...(estimateRowHeight ? { estimateRowHeight } : {}),\n measuredHeights: measuredHeightsRef.current,\n itemIdAtIndex: (index) => itemsRef.current[index]?.id,\n }),\n );\n\n measurementStoreRef.current.syncItemCount(items.length);\n\n const scrollOptionsRef = useRef({\n dynamicLayout,\n itemCount: items.length,\n orientation,\n overscan,\n rowHeight,\n viewportSize,\n });\n scrollOptionsRef.current = {\n dynamicLayout,\n itemCount: items.length,\n orientation,\n overscan,\n rowHeight,\n viewportSize,\n };\n\n const onRangeChangeRef = useRef(onRangeChange);\n onRangeChangeRef.current = onRangeChange;\n\n const onScrollStateChangeRef = useRef(onScrollStateChange);\n onScrollStateChangeRef.current = onScrollStateChange;\n\n const computeRange = (): ReturnType<typeof computeVirtualScrollRange> => {\n const { dynamicLayout, itemCount, overscan, rowHeight, viewportSize } =\n scrollOptionsRef.current;\n const scrollTop = scrollOffsetRef.current;\n\n if (dynamicLayout) {\n const store = measurementStoreRef.current;\n return computeDynamicVirtualScrollRange({\n scrollTop,\n viewportHeight: viewportSize,\n itemCount,\n overscan,\n findStartIndex: store.findStartIndex,\n findEndIndex: store.findEndIndex,\n getRowOffset: store.getRowOffset,\n });\n }\n\n return computeVirtualScrollRange({\n scrollTop,\n viewportHeight: viewportSize,\n itemCount,\n rowHeight,\n overscan,\n });\n };\n\n const emitRangeChange = (range: ReturnType<typeof computeVirtualScrollRange>): void => {\n const callback = onRangeChangeRef.current;\n if (!callback) return;\n const payload = toVirtualScrollRangeChange(range);\n const signature = `${payload.overscanStart}:${payload.overscanEnd}`;\n if (signature === lastRangeChangeRef.current) return;\n lastRangeChangeRef.current = signature;\n callback(payload);\n };\n\n const syncRangeFromScrollRef = useRef((_offset?: number) => {});\n\n syncRangeFromScrollRef.current = (offset?: number) => {\n const element = ref.current;\n if (!element) return;\n\n const scrollOffset = offset ?? readScrollOffset(element, scrollOptionsRef.current.orientation);\n const previousRange = computeRange();\n scrollOffsetRef.current = scrollOffset;\n\n const nextRange = computeRange();\n if (rangesEqual(previousRange, nextRange)) return;\n\n emitRangeChange(nextRange);\n\n const { dynamicLayout, itemCount, viewportSize, rowHeight, overscan } =\n scrollOptionsRef.current;\n const slotCount = computeActiveVirtualScrollSlotCount(\n itemCount,\n nextRange.start,\n Math.max(\n nextRange.end - nextRange.start,\n computeVirtualScrollSlotCount(viewportSize, rowHeight, overscan),\n ),\n );\n const store = measurementStoreRef.current;\n\n // Write range CSS vars on the scroll handler so rows move in the same frame as the scroll offset.\n applyVirtualScrollRangeToDom(element, nextRange, {\n dynamicLayout,\n slotCount,\n getRowOffset: store.getRowOffset.bind(store),\n spacerStyle: slotProps?.spacer?.style,\n getRowStyle: (index) => {\n const item = itemsRef.current[index];\n if (!item) return undefined;\n const { byItemIndex, ...byItemValueProps } = slotProps?.row ?? {};\n const commonProps = resolveRepeatedSlotProps(byItemValueProps, item.id);\n return mergeRepeatedSlotProps(commonProps, byItemIndex?.[index]).style;\n },\n });\n\n // Commit the visible slice synchronously so content matches scroll position on large jumps.\n flushSync(() => {\n setRangeVersion((version) => version + 1);\n });\n };\n\n const iosControllerRef = useRef(\n createVirtualScrollIosScroll({\n enabled: detectTouchScrollEnvironment(),\n resetDelay: isScrollingResetDelay,\n }),\n );\n\n const applyScrollDeltaRef = useRef((_delta: number) => {});\n\n applyScrollDeltaRef.current = (delta: number) => {\n const element = ref.current;\n if (!element || delta === 0) return;\n // Preserve the viewport while rows resize.\n const { orientation } = scrollOptionsRef.current;\n const next = scrollOffsetRef.current + delta;\n programmaticScrollRef.current = true;\n writeScrollOffset(element, orientation, next, \"auto\");\n syncRangeFromScrollRef.current(next);\n };\n\n const applyScrollOffset = (\n offset: number,\n behavior: VirtualScrollScrollBehaviorOptions[\"behavior\"],\n ): void => {\n const element = ref.current;\n if (!element) return;\n\n const store = measurementStoreRef.current;\n const totalSize = dynamicLayout ? store.getTotalSize() : items.length * rowHeight;\n const clamped = clampScrollOffset(offset, totalSize, viewportSize);\n const current = scrollOffsetRef.current;\n programmaticScrollRef.current = behavior === \"instant\";\n writeScrollOffset(element, orientation, clamped, resolveScrollBehavior(behavior));\n syncRangeFromScrollRef.current(behavior === \"instant\" ? clamped : current);\n };\n\n const applyScrollOffsetRef = useRef(\n (_offset: number, _behavior: VirtualScrollScrollBehaviorOptions[\"behavior\"]) => {},\n );\n\n applyScrollOffsetRef.current = applyScrollOffset;\n\n useImperativeHandle(\n scrollRef,\n (): VirtualScrollHandle => ({\n get element() {\n return ref.current;\n },\n scrollToIndex(index: number, options?: VirtualScrollScrollToIndexOptions): void {\n const normalized = normalizeScrollToIndexOptions(options);\n const store = measurementStoreRef.current;\n const metrics = {\n getRowOffset: store.getRowOffset.bind(store),\n getRowHeight: store.getRowHeight.bind(store),\n getTotalSize: store.getTotalSize.bind(store),\n };\n const offset = computeScrollOffsetForIndex(\n index,\n normalized.align,\n metrics,\n scrollOptionsRef.current.viewportSize,\n scrollOffsetRef.current,\n );\n applyScrollOffsetRef.current(offset, normalized.behavior);\n },\n scrollToOffset(offset: number, options?: VirtualScrollScrollBehaviorOptions): void {\n applyScrollOffsetRef.current(offset, normalizeScrollBehaviorOptions(options));\n },\n scrollToEnd(options?: VirtualScrollScrollBehaviorOptions): void {\n const store = measurementStoreRef.current;\n const totalSize = dynamicLayout\n ? store.getTotalSize()\n : scrollOptionsRef.current.itemCount * scrollOptionsRef.current.rowHeight;\n const offset = Math.max(0, totalSize - scrollOptionsRef.current.viewportSize);\n applyScrollOffsetRef.current(offset, normalizeScrollBehaviorOptions(options));\n },\n }),\n [dynamicLayout],\n );\n\n const range = useMemo(() => {\n void rangeVersion;\n void measurementVersion;\n return computeRange();\n }, [\n rangeVersion,\n measurementVersion,\n dynamicLayout,\n items.length,\n overscan,\n rowHeight,\n viewportSize,\n ]);\n\n const totalSize = useMemo(() => {\n void measurementVersion;\n if (dynamicLayout) return measurementStoreRef.current.getTotalSize();\n return items.length * rowHeight;\n }, [dynamicLayout, items.length, measurementVersion, rowHeight]);\n\n const slotCount = useMemo(() => {\n if (items.length === 0) return 0;\n return Math.max(\n range.end - range.start,\n computeVirtualScrollSlotCount(viewportSize, rowHeight, overscan),\n );\n }, [items.length, overscan, range.end, range.start, rowHeight, viewportSize]);\n\n const rowSlots = useMemo(\n () => buildRowSlots(items, range.start, slotCount),\n [items, range.start, slotCount],\n );\n\n const handleRowMeasureRef = useRef((index: number, itemId: string, height: number) => {\n const store = measurementStoreRef.current;\n const previousHeight = store.getRowHeight(index);\n const rowOffset = store.getRowOffset(index);\n if (!store.setMeasuredHeight(itemId, index, height)) return;\n\n const adjustment = computeScrollAdjustmentForRowResize({\n scrollTop: scrollOffsetRef.current,\n rowOffset,\n previousHeight,\n nextHeight: height,\n });\n\n if (adjustment > 0) {\n const ios = iosControllerRef.current;\n if (ios.isTouchScrolling()) {\n ios.queueAdjustment(adjustment);\n } else {\n applyScrollDeltaRef.current(adjustment);\n }\n }\n\n setMeasurementVersion((version) => version + 1);\n });\n\n const rowsFragmentRef = useRef<FragmentInstance>(null);\n\n // One ResizeObserver for the whole pooled row set. React keeps the\n // subscription in sync as slots mount and unmount — pinned by\n // core/fragment-instance.test.tsx. Fixed layout never measures rows, so no\n // observer is created there at all.\n useEffect(() => {\n if (!dynamicLayout) return;\n const fragment = rowsFragmentRef.current;\n if (!fragment || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const target = entry.target;\n if (!(target instanceof HTMLElement)) continue;\n const raw = target.dataset[\"uiifyRowIndex\"];\n if (raw === undefined) continue;\n const index = Number(raw);\n if (!Number.isInteger(index)) continue;\n const itemId = itemsRef.current[index]?.id;\n if (itemId === undefined) continue;\n const size = horizontal ? entry.contentRect.width : entry.contentRect.height;\n handleRowMeasureRef.current(index, itemId, size);\n }\n });\n\n fragment.observeUsing(observer);\n return () => fragment.unobserveUsing(observer);\n }, [dynamicLayout, horizontal]);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const scrollState = createVirtualScrollScrollState({\n resetDelay: isScrollingResetDelay,\n supportsScrollEnd: supportsScrollEndEvent(),\n onChange: (isScrolling) => {\n onScrollStateChangeRef.current?.({ isScrolling });\n if (!isScrolling) {\n iosControllerRef.current.flushAdjustments(applyScrollDeltaRef.current);\n }\n },\n });\n\n const ios = iosControllerRef.current;\n const onTouchStart = (): void => ios.onTouchStart();\n const onTouchEnd = (): void => ios.onTouchEnd();\n let verifyFrame = 0;\n let verifyTimer = 0;\n const syncNativeScroll = (): void => {\n if (!programmaticScrollRef.current) {\n syncRangeFromScrollRef.current();\n return;\n }\n // The imperative path already rendered its range. Verify the browser's\n // actual offset after layout, including coalesced external scroll writes.\n if (verifyFrame !== 0) return;\n verifyFrame = requestAnimationFrame(() => {\n verifyTimer = window.setTimeout(() => {\n verifyFrame = 0;\n verifyTimer = 0;\n programmaticScrollRef.current = false;\n syncRangeFromScrollRef.current();\n }, 0);\n });\n };\n\n const onScroll = () => {\n syncNativeScroll();\n scrollState.notifyScroll();\n };\n const onScrollEnd = (): void => {\n if (!supportsScrollEndEvent()) return;\n syncNativeScroll();\n scrollState.notifyScrollEnd();\n };\n eventHandlersRef.current = { onScroll, onScrollEnd, onTouchStart, onTouchEnd };\n\n return () => {\n if (verifyFrame !== 0) cancelAnimationFrame(verifyFrame);\n if (verifyTimer !== 0) window.clearTimeout(verifyTimer);\n eventHandlersRef.current = {\n onScroll: () => {},\n onScrollEnd: () => {},\n onTouchStart: () => {},\n onTouchEnd: () => {},\n };\n scrollState.dispose();\n };\n }, [isScrollingResetDelay]);\n\n useEffect(() => {\n const element = ref.current;\n const store = measurementStoreRef.current;\n const nextTotalSize = dynamicLayout ? store.getTotalSize() : items.length * rowHeight;\n const previous = anchorSnapshotRef.current;\n const scrollOffset = element ? readScrollOffset(element, orientation) : scrollOffsetRef.current;\n const nextSnapshot = {\n firstItemId: items[0]?.id,\n itemCount: items.length,\n totalSize: nextTotalSize,\n scrollTop: scrollOffset,\n };\n\n const adjustment = resolveVirtualScrollAnchorAdjustment({\n anchor,\n followAppend,\n viewportHeight: viewportSize,\n previous,\n next: nextSnapshot,\n });\n\n if (adjustment && element) {\n // Retain the anchored viewport.\n programmaticScrollRef.current = true;\n writeScrollOffset(element, orientation, scrollOffset + adjustment.delta, adjustment.behavior);\n syncRangeFromScrollRef.current(\n adjustment.behavior === \"smooth\" ? scrollOffset : scrollOffset + adjustment.delta,\n );\n }\n\n anchorSnapshotRef.current = nextSnapshot;\n }, [anchor, followAppend, items, dynamicLayout, orientation, rowHeight, viewportSize]);\n\n useEffect(() => {\n emitRangeChange(range);\n }, [range]);\n\n const scrollportStyle = {\n ...(suppliedHeight !== undefined || (!consumerStyle?.blockSize && !consumerStyle?.height)\n ? { blockSize: height }\n : {}),\n overflowX: horizontal ? \"auto\" : undefined,\n overflowY: horizontal ? \"hidden\" : \"auto\",\n \"--uiify-virtual-scroll-count\": items.length,\n \"--uiify-virtual-scroll-row-height\": `${rowHeight}px`,\n ...(dynamicLayout ? { \"--uiify-virtual-scroll-total-size\": `${totalSize}px` } : {}),\n ...consumerStyle,\n } as CSSProperties;\n\n const spacerStyle = dynamicLayout\n ? undefined\n : ({\n \"--uiify-range-start\": range.start,\n } as CSSProperties);\n\n return (\n <div\n data-testid={testId}\n data-uiify-virtual-scroll=\"\"\n data-dynamic-layout={dynamicLayout ? \"\" : undefined}\n data-orientation={orientation}\n role={listRole}\n {...consumerProps}\n ref={rootRef}\n onScroll={composeEventHandlers(consumerProps.onScroll, () =>\n eventHandlersRef.current.onScroll(),\n )}\n onScrollEnd={composeEventHandlers(consumerProps.onScrollEnd, () =>\n eventHandlersRef.current.onScrollEnd(),\n )}\n onTouchStart={composeEventHandlers(consumerProps.onTouchStart, () =>\n eventHandlersRef.current.onTouchStart(),\n )}\n onTouchEnd={composeEventHandlers(consumerProps.onTouchEnd, () =>\n eventHandlersRef.current.onTouchEnd(),\n )}\n className={className}\n style={scrollportStyle}\n >\n <div\n data-part=\"spacer\"\n {...slotProps?.spacer}\n style={{ ...spacerStyle, ...slotProps?.spacer?.style }}\n >\n {rowSlots.map((slot) => {\n const store = measurementStoreRef.current;\n const rowOffset = dynamicLayout ? store.getRowOffset(slot.index) : undefined;\n const measuredRowHeight = dynamicLayout ? store.getRowHeight(slot.index) : undefined;\n\n return (\n <VirtualScrollRowShell\n {...(() => {\n if (!slot.item) return {};\n const { byItemIndex, ...byItemValueProps } = slotProps?.row ?? {};\n const commonProps = resolveRepeatedSlotProps(byItemValueProps, slot.item.id);\n return mergeRepeatedSlotProps(commonProps, byItemIndex?.[slot.index]);\n })()}\n key={`slot-${slot.slotIndex}`}\n slotIndex={slot.slotIndex}\n index={slot.index}\n itemCount={items.length}\n listRole={listRole}\n dynamicLayout={dynamicLayout}\n {...(rowOffset !== undefined ? { rowOffset } : {})}\n {...(measuredRowHeight !== undefined ? { rowHeight: measuredRowHeight } : {})}\n >\n {slot.item ? (\n <VirtualScrollRowItem item={slot.item} index={slot.index} renderRow={renderRow} />\n ) : null}\n </VirtualScrollRowShell>\n );\n })}\n </div>\n </div>\n );\n}\nVirtualScroll.displayName = \"VirtualScroll\";\n"],"mappings":"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","names":["dynamicLayout","overscan","rowHeight","viewportSize","range","slotCount","orientation","totalSize","height"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/virtual-scroll/VirtualScroll.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type FragmentInstance,\n type ReactElement,\n} from \"react\";\nimport { composeEventHandlers } from \"@gunkin/uiify/core/compose-event-handlers\";\nimport { flushSync } from \"react-dom\";\nimport { useResizeObserver } from \"@gunkin/uiify/hooks\";\nimport { useMergedRefs } from \"../../hooks/use-merged-refs.js\";\nimport { mergeRepeatedSlotProps, resolveRepeatedSlotProps } from \"../../core/slot-props.js\";\nimport { resolveVirtualScrollAnchorAdjustment } from \"./virtual-scroll-anchor.js\";\nimport { readScrollOffset, writeScrollOffset } from \"./virtual-scroll-axis.js\";\nimport {\n createVirtualScrollIosScroll,\n detectTouchScrollEnvironment,\n} from \"./virtual-scroll-ios.js\";\nimport {\n computeScrollAdjustmentForRowResize,\n createVirtualScrollMeasurementStore,\n} from \"./virtual-scroll-measurements.js\";\nimport {\n computeDynamicVirtualScrollRange,\n computeVirtualScrollRange,\n rangesEqual,\n toVirtualScrollRangeChange,\n} from \"./virtual-scroll-range.js\";\nimport {\n computeActiveVirtualScrollSlotCount,\n computeVirtualScrollSlotCount,\n VirtualScrollRowShell,\n} from \"./VirtualScrollRowShell.js\";\nimport {\n clampScrollOffset,\n computeScrollOffsetForIndex,\n normalizeScrollBehaviorOptions,\n normalizeScrollToIndexOptions,\n resolveScrollBehavior,\n} from \"./virtual-scroll-scroll.js\";\nimport {\n createVirtualScrollScrollState,\n supportsScrollEndEvent,\n} from \"./virtual-scroll-scroll-state.js\";\nimport { applyVirtualScrollRangeToDom } from \"./virtual-scroll-scroll-sync.js\";\nimport type {\n VirtualScrollHandle,\n VirtualScrollItem,\n VirtualScrollOwnProps,\n VirtualScrollRowSlot,\n VirtualScrollScrollBehaviorOptions,\n VirtualScrollScrollToIndexOptions,\n} from \"./types.js\";\nimport { VirtualScrollRowItem } from \"./VirtualScrollRowItem.js\";\nimport {\n VIRTUAL_SCROLL_OVERSCAN,\n VIRTUAL_SCROLL_ROW_HEIGHT,\n VIRTUAL_SCROLL_SCROLL_RESET_DELAY,\n} from \"./types.js\";\n\nfunction buildRowSlots<T extends VirtualScrollItem>(\n items: readonly T[],\n rangeStart: number,\n slotCount: number,\n): readonly VirtualScrollRowSlot<T>[] {\n const activeSlotCount = computeActiveVirtualScrollSlotCount(items.length, rangeStart, slotCount);\n return Array.from({ length: activeSlotCount }, (_, slotIndex) => {\n const index = rangeStart + slotIndex;\n return {\n index,\n item: items[index] ?? null,\n slotIndex,\n };\n });\n}\n\nexport function VirtualScroll<T extends VirtualScrollItem>(\n props: VirtualScrollOwnProps<T>,\n): ReactElement {\n const {\n items,\n ref: consumerRef,\n height: suppliedHeight,\n style: consumerStyle,\n rowHeight = VIRTUAL_SCROLL_ROW_HEIGHT,\n orientation = \"vertical\",\n overscan = VIRTUAL_SCROLL_OVERSCAN,\n className,\n testId,\n renderRow,\n scrollRef,\n estimateRowHeight,\n onRangeChange,\n anchor = \"start\",\n followAppend = false,\n onScrollStateChange,\n isScrollingResetDelay = VIRTUAL_SCROLL_SCROLL_RESET_DELAY,\n slotProps,\n ...consumerProps\n } = props;\n\n const listRole = consumerProps.role === \"grid\" ? \"grid\" : \"list\";\n const height = suppliedHeight ?? 600;\n const dynamicLayout = estimateRowHeight !== undefined;\n const horizontal = orientation === \"horizontal\";\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useMergedRefs(ref, consumerRef);\n const scrollOffsetRef = useRef(0);\n const programmaticScrollRef = useRef(false);\n const eventHandlersRef = useRef({\n onScroll: () => {},\n onScrollEnd: () => {},\n onTouchStart: () => {},\n onTouchEnd: () => {},\n });\n const itemsRef = useRef(items);\n itemsRef.current = items;\n const lastRangeChangeRef = useRef<string>(\"\");\n const measuredHeightsRef = useRef(new Map<string, number>());\n const anchorSnapshotRef = useRef({\n firstItemId: items[0]?.id,\n itemCount: items.length,\n totalSize: 0,\n scrollTop: 0,\n });\n\n const [rangeVersion, setRangeVersion] = useState(0);\n const [measurementVersion, setMeasurementVersion] = useState(0);\n\n const measuredSize = useResizeObserver(ref);\n const viewportSize = (horizontal ? measuredSize?.width : measuredSize?.height) ?? height;\n\n const measurementStoreRef = useRef(\n createVirtualScrollMeasurementStore({\n itemCount: items.length,\n defaultRowHeight: rowHeight,\n ...(estimateRowHeight ? { estimateRowHeight } : {}),\n measuredHeights: measuredHeightsRef.current,\n itemIdAtIndex: (index) => itemsRef.current[index]?.id,\n }),\n );\n\n measurementStoreRef.current.syncItemCount(items.length);\n\n const scrollOptionsRef = useRef({\n dynamicLayout,\n itemCount: items.length,\n orientation,\n overscan,\n rowHeight,\n viewportSize,\n });\n scrollOptionsRef.current = {\n dynamicLayout,\n itemCount: items.length,\n orientation,\n overscan,\n rowHeight,\n viewportSize,\n };\n\n const onRangeChangeRef = useRef(onRangeChange);\n onRangeChangeRef.current = onRangeChange;\n\n const onScrollStateChangeRef = useRef(onScrollStateChange);\n onScrollStateChangeRef.current = onScrollStateChange;\n\n const computeRange = (): ReturnType<typeof computeVirtualScrollRange> => {\n const { dynamicLayout, itemCount, overscan, rowHeight, viewportSize } =\n scrollOptionsRef.current;\n const scrollTop = scrollOffsetRef.current;\n\n if (dynamicLayout) {\n const store = measurementStoreRef.current;\n return computeDynamicVirtualScrollRange({\n scrollTop,\n viewportHeight: viewportSize,\n itemCount,\n overscan,\n findStartIndex: store.findStartIndex,\n findEndIndex: store.findEndIndex,\n getRowOffset: store.getRowOffset,\n });\n }\n\n return computeVirtualScrollRange({\n scrollTop,\n viewportHeight: viewportSize,\n itemCount,\n rowHeight,\n overscan,\n });\n };\n\n const emitRangeChange = (range: ReturnType<typeof computeVirtualScrollRange>): void => {\n const callback = onRangeChangeRef.current;\n if (!callback) return;\n const payload = toVirtualScrollRangeChange(range);\n const signature = `${payload.overscanStart}:${payload.overscanEnd}`;\n if (signature === lastRangeChangeRef.current) return;\n lastRangeChangeRef.current = signature;\n callback(payload);\n };\n\n const syncRangeFromScrollRef = useRef((_offset?: number) => {});\n\n syncRangeFromScrollRef.current = (offset?: number) => {\n const element = ref.current;\n if (!element) return;\n\n const scrollOffset = offset ?? readScrollOffset(element, scrollOptionsRef.current.orientation);\n const previousRange = computeRange();\n scrollOffsetRef.current = scrollOffset;\n\n const nextRange = computeRange();\n if (rangesEqual(previousRange, nextRange)) return;\n\n emitRangeChange(nextRange);\n\n const { dynamicLayout, itemCount, viewportSize, rowHeight, overscan } =\n scrollOptionsRef.current;\n const slotCount = computeActiveVirtualScrollSlotCount(\n itemCount,\n nextRange.start,\n Math.max(\n nextRange.end - nextRange.start,\n computeVirtualScrollSlotCount(viewportSize, rowHeight, overscan),\n ),\n );\n const store = measurementStoreRef.current;\n\n // Write range CSS vars on the scroll handler so rows move in the same frame as the scroll offset.\n applyVirtualScrollRangeToDom(element, nextRange, {\n dynamicLayout,\n slotCount,\n getRowOffset: store.getRowOffset.bind(store),\n spacerStyle: slotProps?.spacer?.style,\n getRowStyle: (index) => {\n const item = itemsRef.current[index];\n if (!item) return undefined;\n const { byItemIndex, ...byItemValueProps } = slotProps?.row ?? {};\n const commonProps = resolveRepeatedSlotProps(byItemValueProps, item.id);\n return mergeRepeatedSlotProps(commonProps, byItemIndex?.[index]).style;\n },\n });\n\n // Commit the visible slice synchronously so content matches scroll position on large jumps.\n flushSync(() => {\n setRangeVersion((version) => version + 1);\n });\n };\n\n const iosControllerRef = useRef(\n createVirtualScrollIosScroll({\n enabled: detectTouchScrollEnvironment(),\n resetDelay: isScrollingResetDelay,\n }),\n );\n\n const applyScrollDeltaRef = useRef((_delta: number) => {});\n\n applyScrollDeltaRef.current = (delta: number) => {\n const element = ref.current;\n if (!element || delta === 0) return;\n // Preserve the viewport while rows resize.\n const { orientation } = scrollOptionsRef.current;\n const next = scrollOffsetRef.current + delta;\n programmaticScrollRef.current = true;\n writeScrollOffset(element, orientation, next, \"auto\");\n syncRangeFromScrollRef.current(next);\n };\n\n const applyScrollOffset = (\n offset: number,\n behavior: VirtualScrollScrollBehaviorOptions[\"behavior\"],\n ): void => {\n const element = ref.current;\n if (!element) return;\n\n const store = measurementStoreRef.current;\n const totalSize = dynamicLayout ? store.getTotalSize() : items.length * rowHeight;\n const clamped = clampScrollOffset(offset, totalSize, viewportSize);\n const current = scrollOffsetRef.current;\n programmaticScrollRef.current = behavior === \"instant\";\n writeScrollOffset(element, orientation, clamped, resolveScrollBehavior(behavior));\n syncRangeFromScrollRef.current(behavior === \"instant\" ? clamped : current);\n };\n\n const applyScrollOffsetRef = useRef(\n (_offset: number, _behavior: VirtualScrollScrollBehaviorOptions[\"behavior\"]) => {},\n );\n\n applyScrollOffsetRef.current = applyScrollOffset;\n\n useImperativeHandle(\n scrollRef,\n (): VirtualScrollHandle => ({\n get element() {\n return ref.current;\n },\n scrollToIndex(index: number, options?: VirtualScrollScrollToIndexOptions): void {\n const normalized = normalizeScrollToIndexOptions(options);\n const store = measurementStoreRef.current;\n const metrics = {\n getRowOffset: store.getRowOffset.bind(store),\n getRowHeight: store.getRowHeight.bind(store),\n getTotalSize: store.getTotalSize.bind(store),\n };\n const offset = computeScrollOffsetForIndex(\n index,\n normalized.align,\n metrics,\n scrollOptionsRef.current.viewportSize,\n scrollOffsetRef.current,\n );\n applyScrollOffsetRef.current(offset, normalized.behavior);\n },\n scrollToOffset(offset: number, options?: VirtualScrollScrollBehaviorOptions): void {\n applyScrollOffsetRef.current(offset, normalizeScrollBehaviorOptions(options));\n },\n scrollToEnd(options?: VirtualScrollScrollBehaviorOptions): void {\n const store = measurementStoreRef.current;\n const totalSize = dynamicLayout\n ? store.getTotalSize()\n : scrollOptionsRef.current.itemCount * scrollOptionsRef.current.rowHeight;\n const offset = Math.max(0, totalSize - scrollOptionsRef.current.viewportSize);\n applyScrollOffsetRef.current(offset, normalizeScrollBehaviorOptions(options));\n },\n }),\n [dynamicLayout],\n );\n\n const range = useMemo(() => {\n void rangeVersion;\n void measurementVersion;\n return computeRange();\n }, [\n rangeVersion,\n measurementVersion,\n dynamicLayout,\n items.length,\n overscan,\n rowHeight,\n viewportSize,\n ]);\n\n const totalSize = useMemo(() => {\n void measurementVersion;\n if (dynamicLayout) return measurementStoreRef.current.getTotalSize();\n return items.length * rowHeight;\n }, [dynamicLayout, items.length, measurementVersion, rowHeight]);\n\n const slotCount = useMemo(() => {\n if (items.length === 0) return 0;\n return Math.max(\n range.end - range.start,\n computeVirtualScrollSlotCount(viewportSize, rowHeight, overscan),\n );\n }, [items.length, overscan, range.end, range.start, rowHeight, viewportSize]);\n\n const rowSlots = useMemo(\n () => buildRowSlots(items, range.start, slotCount),\n [items, range.start, slotCount],\n );\n\n const handleRowMeasureRef = useRef((index: number, itemId: string, height: number) => {\n const store = measurementStoreRef.current;\n const previousHeight = store.getRowHeight(index);\n const rowOffset = store.getRowOffset(index);\n if (!store.setMeasuredHeight(itemId, index, height)) return;\n\n const adjustment = computeScrollAdjustmentForRowResize({\n scrollTop: scrollOffsetRef.current,\n rowOffset,\n previousHeight,\n nextHeight: height,\n });\n\n if (adjustment > 0) {\n const ios = iosControllerRef.current;\n if (ios.isTouchScrolling()) {\n ios.queueAdjustment(adjustment);\n } else {\n applyScrollDeltaRef.current(adjustment);\n }\n }\n\n setMeasurementVersion((version) => version + 1);\n });\n\n const rowsFragmentRef = useRef<FragmentInstance>(null);\n\n // One ResizeObserver for the whole pooled row set. React keeps the\n // subscription in sync as slots mount and unmount — pinned by\n // core/fragment-instance.test.tsx. Fixed layout never measures rows, so no\n // observer is created there at all.\n useEffect(() => {\n if (!dynamicLayout) return;\n const fragment = rowsFragmentRef.current;\n if (!fragment || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const target = entry.target;\n if (!(target instanceof HTMLElement)) continue;\n const raw = target.dataset[\"uiifyRowIndex\"];\n if (raw === undefined) continue;\n const index = Number(raw);\n if (!Number.isInteger(index)) continue;\n const itemId = itemsRef.current[index]?.id;\n if (itemId === undefined) continue;\n const size = horizontal ? entry.contentRect.width : entry.contentRect.height;\n handleRowMeasureRef.current(index, itemId, size);\n }\n });\n\n fragment.observeUsing(observer);\n return () => fragment.unobserveUsing(observer);\n }, [dynamicLayout, horizontal]);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const scrollState = createVirtualScrollScrollState({\n resetDelay: isScrollingResetDelay,\n supportsScrollEnd: supportsScrollEndEvent(),\n onChange: (isScrolling) => {\n onScrollStateChangeRef.current?.({ isScrolling });\n if (!isScrolling) {\n iosControllerRef.current.flushAdjustments(applyScrollDeltaRef.current);\n }\n },\n });\n\n const ios = iosControllerRef.current;\n const onTouchStart = (): void => ios.onTouchStart();\n const onTouchEnd = (): void => ios.onTouchEnd();\n let verifyFrame = 0;\n let verifyTimer = 0;\n const syncNativeScroll = (): void => {\n if (!programmaticScrollRef.current) {\n syncRangeFromScrollRef.current();\n return;\n }\n // The imperative path already rendered its range. Verify the browser's\n // actual offset after layout, including coalesced external scroll writes.\n if (verifyFrame !== 0) return;\n verifyFrame = requestAnimationFrame(() => {\n verifyTimer = window.setTimeout(() => {\n verifyFrame = 0;\n verifyTimer = 0;\n programmaticScrollRef.current = false;\n syncRangeFromScrollRef.current();\n }, 0);\n });\n };\n\n const onScroll = () => {\n syncNativeScroll();\n scrollState.notifyScroll();\n };\n const onScrollEnd = (): void => {\n if (!supportsScrollEndEvent()) return;\n syncNativeScroll();\n scrollState.notifyScrollEnd();\n };\n eventHandlersRef.current = { onScroll, onScrollEnd, onTouchStart, onTouchEnd };\n\n return () => {\n if (verifyFrame !== 0) cancelAnimationFrame(verifyFrame);\n if (verifyTimer !== 0) window.clearTimeout(verifyTimer);\n eventHandlersRef.current = {\n onScroll: () => {},\n onScrollEnd: () => {},\n onTouchStart: () => {},\n onTouchEnd: () => {},\n };\n scrollState.dispose();\n };\n }, [isScrollingResetDelay]);\n\n useEffect(() => {\n const element = ref.current;\n const store = measurementStoreRef.current;\n const nextTotalSize = dynamicLayout ? store.getTotalSize() : items.length * rowHeight;\n const previous = anchorSnapshotRef.current;\n const scrollOffset = element ? readScrollOffset(element, orientation) : scrollOffsetRef.current;\n const nextSnapshot = {\n firstItemId: items[0]?.id,\n itemCount: items.length,\n totalSize: nextTotalSize,\n scrollTop: scrollOffset,\n };\n\n const adjustment = resolveVirtualScrollAnchorAdjustment({\n anchor,\n followAppend,\n viewportHeight: viewportSize,\n previous,\n next: nextSnapshot,\n });\n\n if (adjustment && element) {\n // Retain the anchored viewport.\n programmaticScrollRef.current = true;\n writeScrollOffset(element, orientation, scrollOffset + adjustment.delta, adjustment.behavior);\n syncRangeFromScrollRef.current(\n adjustment.behavior === \"smooth\" ? scrollOffset : scrollOffset + adjustment.delta,\n );\n }\n\n anchorSnapshotRef.current = nextSnapshot;\n }, [anchor, followAppend, items, dynamicLayout, orientation, rowHeight, viewportSize]);\n\n useEffect(() => {\n emitRangeChange(range);\n }, [range]);\n\n const scrollportStyle = {\n ...(suppliedHeight !== undefined || (!consumerStyle?.blockSize && !consumerStyle?.height)\n ? { blockSize: height }\n : {}),\n overflowX: horizontal ? \"auto\" : undefined,\n overflowY: horizontal ? \"hidden\" : \"auto\",\n \"--uiify-virtual-scroll-count\": items.length,\n \"--uiify-virtual-scroll-row-height\": `${rowHeight}px`,\n ...(dynamicLayout ? { \"--uiify-virtual-scroll-total-size\": `${totalSize}px` } : {}),\n ...consumerStyle,\n } as CSSProperties;\n\n const spacerStyle = dynamicLayout\n ? undefined\n : ({\n \"--uiify-range-start\": range.start,\n } as CSSProperties);\n\n return (\n <div\n data-testid={testId}\n data-uiify-virtual-scroll=\"\"\n data-dynamic-layout={dynamicLayout ? \"\" : undefined}\n data-orientation={orientation}\n role={listRole}\n {...consumerProps}\n ref={rootRef}\n onScroll={composeEventHandlers(consumerProps.onScroll, () =>\n eventHandlersRef.current.onScroll(),\n )}\n onScrollEnd={composeEventHandlers(consumerProps.onScrollEnd, () =>\n eventHandlersRef.current.onScrollEnd(),\n )}\n onTouchStart={composeEventHandlers(consumerProps.onTouchStart, () =>\n eventHandlersRef.current.onTouchStart(),\n )}\n onTouchEnd={composeEventHandlers(consumerProps.onTouchEnd, () =>\n eventHandlersRef.current.onTouchEnd(),\n )}\n className={className}\n style={scrollportStyle}\n >\n <div\n data-part=\"spacer\"\n {...slotProps?.spacer}\n style={{ ...spacerStyle, ...slotProps?.spacer?.style }}\n >\n {rowSlots.map((slot) => {\n const store = measurementStoreRef.current;\n const rowOffset = dynamicLayout ? store.getRowOffset(slot.index) : undefined;\n const measuredRowHeight = dynamicLayout ? store.getRowHeight(slot.index) : undefined;\n\n return (\n <VirtualScrollRowShell\n {...(() => {\n if (!slot.item) return {};\n const { byItemIndex, ...byItemValueProps } = slotProps?.row ?? {};\n const commonProps = resolveRepeatedSlotProps(byItemValueProps, slot.item.id);\n return mergeRepeatedSlotProps(commonProps, byItemIndex?.[slot.index]);\n })()}\n key={\n dynamicLayout\n ? `slot-${slot.slotIndex}`\n : (slot.item?.id ?? `slot-${slot.slotIndex}`)\n }\n slotIndex={slot.slotIndex}\n index={slot.index}\n itemCount={items.length}\n listRole={listRole}\n dynamicLayout={dynamicLayout}\n {...(rowOffset !== undefined ? { rowOffset } : {})}\n {...(measuredRowHeight !== undefined ? { rowHeight: measuredRowHeight } : {})}\n >\n {slot.item ? (\n <VirtualScrollRowItem item={slot.item} index={slot.index} renderRow={renderRow} />\n ) : null}\n </VirtualScrollRowShell>\n );\n })}\n </div>\n </div>\n );\n}\nVirtualScroll.displayName = \"VirtualScroll\";\n"],"mappings":";AAslBgB;AArBJ;AA/jBZ;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP,SAAS,4BAA4B;AACrC,SAAS,iBAAiB;AAC1B,SAAS,yBAAyB;AAClC,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB,gCAAgC;AACjE,SAAS,4CAA4C;AACrD,SAAS,kBAAkB,yBAAyB;AACpD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,oCAAoC;AAS7C,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,cACP,OACA,YACA,WACoC;AACpC,QAAM,kBAAkB,oCAAoC,MAAM,QAAQ,YAAY,SAAS;AAC/F,SAAO,MAAM,KAAK,EAAE,QAAQ,gBAAgB,GAAG,CAAC,GAAG,cAAc;AAC/D,UAAM,QAAQ,aAAa;AAC3B,WAAO;AAAA,MACL;AAAA,MACA,MAAM,MAAM,KAAK,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,cACd,OACc;AACd,QAAM;AAAA,IACJ;AAAA,IACA,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,eAAe;AAAA,IACf;AAAA,IACA,wBAAwB;AAAA,IACxB;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,WAAW,cAAc,SAAS,SAAS,SAAS;AAC1D,QAAM,SAAS,kBAAkB;AACjC,QAAM,gBAAgB,sBAAsB;AAC5C,QAAM,aAAa,gBAAgB;AACnC,QAAM,MAAM,OAAuB,IAAI;AACvC,QAAM,UAAU,cAAc,KAAK,WAAW;AAC9C,QAAM,kBAAkB,OAAO,CAAC;AAChC,QAAM,wBAAwB,OAAO,KAAK;AAC1C,QAAM,mBAAmB,OAAO;AAAA,IAC9B,UAAU,MAAM;AAAA,IAAC;AAAA,IACjB,aAAa,MAAM;AAAA,IAAC;AAAA,IACpB,cAAc,MAAM;AAAA,IAAC;AAAA,IACrB,YAAY,MAAM;AAAA,IAAC;AAAA,EACrB,CAAC;AACD,QAAM,WAAW,OAAO,KAAK;AAC7B,WAAS,UAAU;AACnB,QAAM,qBAAqB,OAAe,EAAE;AAC5C,QAAM,qBAAqB,OAAO,oBAAI,IAAoB,CAAC;AAC3D,QAAM,oBAAoB,OAAO;AAAA,IAC/B,aAAa,MAAM,CAAC,GAAG;AAAA,IACvB,WAAW,MAAM;AAAA,IACjB,WAAW;AAAA,IACX,WAAW;AAAA,EACb,CAAC;AAED,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,CAAC;AAClD,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAAS,CAAC;AAE9D,QAAM,eAAe,kBAAkB,GAAG;AAC1C,QAAM,gBAAgB,aAAa,cAAc,QAAQ,cAAc,WAAW;AAElF,QAAM,sBAAsB;AAAA,IAC1B,oCAAoC;AAAA,MAClC,WAAW,MAAM;AAAA,MACjB,kBAAkB;AAAA,MAClB,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,MACjD,iBAAiB,mBAAmB;AAAA,MACpC,eAAe,CAAC,UAAU,SAAS,QAAQ,KAAK,GAAG;AAAA,IACrD,CAAC;AAAA,EACH;AAEA,sBAAoB,QAAQ,cAAc,MAAM,MAAM;AAEtD,QAAM,mBAAmB,OAAO;AAAA,IAC9B;AAAA,IACA,WAAW,MAAM;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,mBAAiB,UAAU;AAAA,IACzB;AAAA,IACA,WAAW,MAAM;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,mBAAmB,OAAO,aAAa;AAC7C,mBAAiB,UAAU;AAE3B,QAAM,yBAAyB,OAAO,mBAAmB;AACzD,yBAAuB,UAAU;AAEjC,QAAM,eAAe,MAAoD;AACvE,UAAM,EAAE,eAAAA,gBAAe,WAAW,UAAAC,WAAU,WAAAC,YAAW,cAAAC,cAAa,IAClE,iBAAiB;AACnB,UAAM,YAAY,gBAAgB;AAElC,QAAIH,gBAAe;AACjB,YAAM,QAAQ,oBAAoB;AAClC,aAAO,iCAAiC;AAAA,QACtC;AAAA,QACA,gBAAgBG;AAAA,QAChB;AAAA,QACA,UAAAF;AAAA,QACA,gBAAgB,MAAM;AAAA,QACtB,cAAc,MAAM;AAAA,QACpB,cAAc,MAAM;AAAA,MACtB,CAAC;AAAA,IACH;AAEA,WAAO,0BAA0B;AAAA,MAC/B;AAAA,MACA,gBAAgBE;AAAA,MAChB;AAAA,MACA,WAAAD;AAAA,MACA,UAAAD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,CAACG,WAA8D;AACrF,UAAM,WAAW,iBAAiB;AAClC,QAAI,CAAC,SAAU;AACf,UAAM,UAAU,2BAA2BA,MAAK;AAChD,UAAM,YAAY,GAAG,QAAQ,aAAa,IAAI,QAAQ,WAAW;AACjE,QAAI,cAAc,mBAAmB,QAAS;AAC9C,uBAAmB,UAAU;AAC7B,aAAS,OAAO;AAAA,EAClB;AAEA,QAAM,yBAAyB,OAAO,CAAC,YAAqB;AAAA,EAAC,CAAC;AAE9D,yBAAuB,UAAU,CAAC,WAAoB;AACpD,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS;AAEd,UAAM,eAAe,UAAU,iBAAiB,SAAS,iBAAiB,QAAQ,WAAW;AAC7F,UAAM,gBAAgB,aAAa;AACnC,oBAAgB,UAAU;AAE1B,UAAM,YAAY,aAAa;AAC/B,QAAI,YAAY,eAAe,SAAS,EAAG;AAE3C,oBAAgB,SAAS;AAEzB,UAAM,EAAE,eAAAJ,gBAAe,WAAW,cAAAG,eAAc,WAAAD,YAAW,UAAAD,UAAS,IAClE,iBAAiB;AACnB,UAAMI,aAAY;AAAA,MAChB;AAAA,MACA,UAAU;AAAA,MACV,KAAK;AAAA,QACH,UAAU,MAAM,UAAU;AAAA,QAC1B,8BAA8BF,eAAcD,YAAWD,SAAQ;AAAA,MACjE;AAAA,IACF;AACA,UAAM,QAAQ,oBAAoB;AAGlC,iCAA6B,SAAS,WAAW;AAAA,MAC/C,eAAAD;AAAA,MACA,WAAAK;AAAA,MACA,cAAc,MAAM,aAAa,KAAK,KAAK;AAAA,MAC3C,aAAa,WAAW,QAAQ;AAAA,MAChC,aAAa,CAAC,UAAU;AACtB,cAAM,OAAO,SAAS,QAAQ,KAAK;AACnC,YAAI,CAAC,KAAM,QAAO;AAClB,cAAM,EAAE,aAAa,GAAG,iBAAiB,IAAI,WAAW,OAAO,CAAC;AAChE,cAAM,cAAc,yBAAyB,kBAAkB,KAAK,EAAE;AACtE,eAAO,uBAAuB,aAAa,cAAc,KAAK,CAAC,EAAE;AAAA,MACnE;AAAA,IACF,CAAC;AAGD,cAAU,MAAM;AACd,sBAAgB,CAAC,YAAY,UAAU,CAAC;AAAA,IAC1C,CAAC;AAAA,EACH;AAEA,QAAM,mBAAmB;AAAA,IACvB,6BAA6B;AAAA,MAC3B,SAAS,6BAA6B;AAAA,MACtC,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAEA,QAAM,sBAAsB,OAAO,CAAC,WAAmB;AAAA,EAAC,CAAC;AAEzD,sBAAoB,UAAU,CAAC,UAAkB;AAC/C,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,WAAW,UAAU,EAAG;AAE7B,UAAM,EAAE,aAAAC,aAAY,IAAI,iBAAiB;AACzC,UAAM,OAAO,gBAAgB,UAAU;AACvC,0BAAsB,UAAU;AAChC,sBAAkB,SAASA,cAAa,MAAM,MAAM;AACpD,2BAAuB,QAAQ,IAAI;AAAA,EACrC;AAEA,QAAM,oBAAoB,CACxB,QACA,aACS;AACT,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS;AAEd,UAAM,QAAQ,oBAAoB;AAClC,UAAMC,aAAY,gBAAgB,MAAM,aAAa,IAAI,MAAM,SAAS;AACxE,UAAM,UAAU,kBAAkB,QAAQA,YAAW,YAAY;AACjE,UAAM,UAAU,gBAAgB;AAChC,0BAAsB,UAAU,aAAa;AAC7C,sBAAkB,SAAS,aAAa,SAAS,sBAAsB,QAAQ,CAAC;AAChF,2BAAuB,QAAQ,aAAa,YAAY,UAAU,OAAO;AAAA,EAC3E;AAEA,QAAM,uBAAuB;AAAA,IAC3B,CAAC,SAAiB,cAA8D;AAAA,IAAC;AAAA,EACnF;AAEA,uBAAqB,UAAU;AAE/B;AAAA,IACE;AAAA,IACA,OAA4B;AAAA,MAC1B,IAAI,UAAU;AACZ,eAAO,IAAI;AAAA,MACb;AAAA,MACA,cAAc,OAAe,SAAmD;AAC9E,cAAM,aAAa,8BAA8B,OAAO;AACxD,cAAM,QAAQ,oBAAoB;AAClC,cAAM,UAAU;AAAA,UACd,cAAc,MAAM,aAAa,KAAK,KAAK;AAAA,UAC3C,cAAc,MAAM,aAAa,KAAK,KAAK;AAAA,UAC3C,cAAc,MAAM,aAAa,KAAK,KAAK;AAAA,QAC7C;AACA,cAAM,SAAS;AAAA,UACb;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA,iBAAiB,QAAQ;AAAA,UACzB,gBAAgB;AAAA,QAClB;AACA,6BAAqB,QAAQ,QAAQ,WAAW,QAAQ;AAAA,MAC1D;AAAA,MACA,eAAe,QAAgB,SAAoD;AACjF,6BAAqB,QAAQ,QAAQ,+BAA+B,OAAO,CAAC;AAAA,MAC9E;AAAA,MACA,YAAY,SAAoD;AAC9D,cAAM,QAAQ,oBAAoB;AAClC,cAAMA,aAAY,gBACd,MAAM,aAAa,IACnB,iBAAiB,QAAQ,YAAY,iBAAiB,QAAQ;AAClE,cAAM,SAAS,KAAK,IAAI,GAAGA,aAAY,iBAAiB,QAAQ,YAAY;AAC5E,6BAAqB,QAAQ,QAAQ,+BAA+B,OAAO,CAAC;AAAA,MAC9E;AAAA,IACF;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEA,QAAM,QAAQ,QAAQ,MAAM;AAC1B,SAAK;AACL,SAAK;AACL,WAAO,aAAa;AAAA,EACtB,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,YAAY,QAAQ,MAAM;AAC9B,SAAK;AACL,QAAI,cAAe,QAAO,oBAAoB,QAAQ,aAAa;AACnE,WAAO,MAAM,SAAS;AAAA,EACxB,GAAG,CAAC,eAAe,MAAM,QAAQ,oBAAoB,SAAS,CAAC;AAE/D,QAAM,YAAY,QAAQ,MAAM;AAC9B,QAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,WAAO,KAAK;AAAA,MACV,MAAM,MAAM,MAAM;AAAA,MAClB,8BAA8B,cAAc,WAAW,QAAQ;AAAA,IACjE;AAAA,EACF,GAAG,CAAC,MAAM,QAAQ,UAAU,MAAM,KAAK,MAAM,OAAO,WAAW,YAAY,CAAC;AAE5E,QAAM,WAAW;AAAA,IACf,MAAM,cAAc,OAAO,MAAM,OAAO,SAAS;AAAA,IACjD,CAAC,OAAO,MAAM,OAAO,SAAS;AAAA,EAChC;AAEA,QAAM,sBAAsB,OAAO,CAAC,OAAe,QAAgBC,YAAmB;AACpF,UAAM,QAAQ,oBAAoB;AAClC,UAAM,iBAAiB,MAAM,aAAa,KAAK;AAC/C,UAAM,YAAY,MAAM,aAAa,KAAK;AAC1C,QAAI,CAAC,MAAM,kBAAkB,QAAQ,OAAOA,OAAM,EAAG;AAErD,UAAM,aAAa,oCAAoC;AAAA,MACrD,WAAW,gBAAgB;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,YAAYA;AAAA,IACd,CAAC;AAED,QAAI,aAAa,GAAG;AAClB,YAAM,MAAM,iBAAiB;AAC7B,UAAI,IAAI,iBAAiB,GAAG;AAC1B,YAAI,gBAAgB,UAAU;AAAA,MAChC,OAAO;AACL,4BAAoB,QAAQ,UAAU;AAAA,MACxC;AAAA,IACF;AAEA,0BAAsB,CAAC,YAAY,UAAU,CAAC;AAAA,EAChD,CAAC;AAED,QAAM,kBAAkB,OAAyB,IAAI;AAMrD,YAAU,MAAM;AACd,QAAI,CAAC,cAAe;AACpB,UAAM,WAAW,gBAAgB;AACjC,QAAI,CAAC,YAAY,OAAO,mBAAmB,YAAa;AAExD,UAAM,WAAW,IAAI,eAAe,CAAC,YAAY;AAC/C,iBAAW,SAAS,SAAS;AAC3B,cAAM,SAAS,MAAM;AACrB,YAAI,EAAE,kBAAkB,aAAc;AACtC,cAAM,MAAM,OAAO,QAAQ,eAAe;AAC1C,YAAI,QAAQ,OAAW;AACvB,cAAM,QAAQ,OAAO,GAAG;AACxB,YAAI,CAAC,OAAO,UAAU,KAAK,EAAG;AAC9B,cAAM,SAAS,SAAS,QAAQ,KAAK,GAAG;AACxC,YAAI,WAAW,OAAW;AAC1B,cAAM,OAAO,aAAa,MAAM,YAAY,QAAQ,MAAM,YAAY;AACtE,4BAAoB,QAAQ,OAAO,QAAQ,IAAI;AAAA,MACjD;AAAA,IACF,CAAC;AAED,aAAS,aAAa,QAAQ;AAC9B,WAAO,MAAM,SAAS,eAAe,QAAQ;AAAA,EAC/C,GAAG,CAAC,eAAe,UAAU,CAAC;AAE9B,YAAU,MAAM;AACd,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS;AAEd,UAAM,cAAc,+BAA+B;AAAA,MACjD,YAAY;AAAA,MACZ,mBAAmB,uBAAuB;AAAA,MAC1C,UAAU,CAAC,gBAAgB;AACzB,+BAAuB,UAAU,EAAE,YAAY,CAAC;AAChD,YAAI,CAAC,aAAa;AAChB,2BAAiB,QAAQ,iBAAiB,oBAAoB,OAAO;AAAA,QACvE;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,MAAM,iBAAiB;AAC7B,UAAM,eAAe,MAAY,IAAI,aAAa;AAClD,UAAM,aAAa,MAAY,IAAI,WAAW;AAC9C,QAAI,cAAc;AAClB,QAAI,cAAc;AAClB,UAAM,mBAAmB,MAAY;AACnC,UAAI,CAAC,sBAAsB,SAAS;AAClC,+BAAuB,QAAQ;AAC/B;AAAA,MACF;AAGA,UAAI,gBAAgB,EAAG;AACvB,oBAAc,sBAAsB,MAAM;AACxC,sBAAc,OAAO,WAAW,MAAM;AACpC,wBAAc;AACd,wBAAc;AACd,gCAAsB,UAAU;AAChC,iCAAuB,QAAQ;AAAA,QACjC,GAAG,CAAC;AAAA,MACN,CAAC;AAAA,IACH;AAEA,UAAM,WAAW,MAAM;AACrB,uBAAiB;AACjB,kBAAY,aAAa;AAAA,IAC3B;AACA,UAAM,cAAc,MAAY;AAC9B,UAAI,CAAC,uBAAuB,EAAG;AAC/B,uBAAiB;AACjB,kBAAY,gBAAgB;AAAA,IAC9B;AACA,qBAAiB,UAAU,EAAE,UAAU,aAAa,cAAc,WAAW;AAE7E,WAAO,MAAM;AACX,UAAI,gBAAgB,EAAG,sBAAqB,WAAW;AACvD,UAAI,gBAAgB,EAAG,QAAO,aAAa,WAAW;AACtD,uBAAiB,UAAU;AAAA,QACzB,UAAU,MAAM;AAAA,QAAC;AAAA,QACjB,aAAa,MAAM;AAAA,QAAC;AAAA,QACpB,cAAc,MAAM;AAAA,QAAC;AAAA,QACrB,YAAY,MAAM;AAAA,QAAC;AAAA,MACrB;AACA,kBAAY,QAAQ;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,qBAAqB,CAAC;AAE1B,YAAU,MAAM;AACd,UAAM,UAAU,IAAI;AACpB,UAAM,QAAQ,oBAAoB;AAClC,UAAM,gBAAgB,gBAAgB,MAAM,aAAa,IAAI,MAAM,SAAS;AAC5E,UAAM,WAAW,kBAAkB;AACnC,UAAM,eAAe,UAAU,iBAAiB,SAAS,WAAW,IAAI,gBAAgB;AACxF,UAAM,eAAe;AAAA,MACnB,aAAa,MAAM,CAAC,GAAG;AAAA,MACvB,WAAW,MAAM;AAAA,MACjB,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAEA,UAAM,aAAa,qCAAqC;AAAA,MACtD;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB;AAAA,MACA,MAAM;AAAA,IACR,CAAC;AAED,QAAI,cAAc,SAAS;AAEzB,4BAAsB,UAAU;AAChC,wBAAkB,SAAS,aAAa,eAAe,WAAW,OAAO,WAAW,QAAQ;AAC5F,6BAAuB;AAAA,QACrB,WAAW,aAAa,WAAW,eAAe,eAAe,WAAW;AAAA,MAC9E;AAAA,IACF;AAEA,sBAAkB,UAAU;AAAA,EAC9B,GAAG,CAAC,QAAQ,cAAc,OAAO,eAAe,aAAa,WAAW,YAAY,CAAC;AAErF,YAAU,MAAM;AACd,oBAAgB,KAAK;AAAA,EACvB,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,kBAAkB;AAAA,IACtB,GAAI,mBAAmB,UAAc,CAAC,eAAe,aAAa,CAAC,eAAe,SAC9E,EAAE,WAAW,OAAO,IACpB,CAAC;AAAA,IACL,WAAW,aAAa,SAAS;AAAA,IACjC,WAAW,aAAa,WAAW;AAAA,IACnC,gCAAgC,MAAM;AAAA,IACtC,qCAAqC,GAAG,SAAS;AAAA,IACjD,GAAI,gBAAgB,EAAE,qCAAqC,GAAG,SAAS,KAAK,IAAI,CAAC;AAAA,IACjF,GAAG;AAAA,EACL;AAEA,QAAM,cAAc,gBAChB,SACC;AAAA,IACC,uBAAuB,MAAM;AAAA,EAC/B;AAEJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa;AAAA,MACb,6BAA0B;AAAA,MAC1B,uBAAqB,gBAAgB,KAAK;AAAA,MAC1C,oBAAkB;AAAA,MAClB,MAAM;AAAA,MACL,GAAG;AAAA,MACJ,KAAK;AAAA,MACL,UAAU;AAAA,QAAqB,cAAc;AAAA,QAAU,MACrD,iBAAiB,QAAQ,SAAS;AAAA,MACpC;AAAA,MACA,aAAa;AAAA,QAAqB,cAAc;AAAA,QAAa,MAC3D,iBAAiB,QAAQ,YAAY;AAAA,MACvC;AAAA,MACA,cAAc;AAAA,QAAqB,cAAc;AAAA,QAAc,MAC7D,iBAAiB,QAAQ,aAAa;AAAA,MACxC;AAAA,MACA,YAAY;AAAA,QAAqB,cAAc;AAAA,QAAY,MACzD,iBAAiB,QAAQ,WAAW;AAAA,MACtC;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MAEP;AAAA,QAAC;AAAA;AAAA,UACC,aAAU;AAAA,UACT,GAAG,WAAW;AAAA,UACf,OAAO,EAAE,GAAG,aAAa,GAAG,WAAW,QAAQ,MAAM;AAAA,UAEpD,mBAAS,IAAI,CAAC,SAAS;AACtB,kBAAM,QAAQ,oBAAoB;AAClC,kBAAM,YAAY,gBAAgB,MAAM,aAAa,KAAK,KAAK,IAAI;AACnE,kBAAM,oBAAoB,gBAAgB,MAAM,aAAa,KAAK,KAAK,IAAI;AAE3E,mBACE;AAAA,cAAC;AAAA;AAAA,gBACE,IAAI,MAAM;AACT,sBAAI,CAAC,KAAK,KAAM,QAAO,CAAC;AACxB,wBAAM,EAAE,aAAa,GAAG,iBAAiB,IAAI,WAAW,OAAO,CAAC;AAChE,wBAAM,cAAc,yBAAyB,kBAAkB,KAAK,KAAK,EAAE;AAC3E,yBAAO,uBAAuB,aAAa,cAAc,KAAK,KAAK,CAAC;AAAA,gBACtE,GAAG;AAAA,gBACH,KACE,gBACI,QAAQ,KAAK,SAAS,KACrB,KAAK,MAAM,MAAM,QAAQ,KAAK,SAAS;AAAA,gBAE9C,WAAW,KAAK;AAAA,gBAChB,OAAO,KAAK;AAAA,gBACZ,WAAW,MAAM;AAAA,gBACjB;AAAA,gBACA;AAAA,gBACC,GAAI,cAAc,SAAY,EAAE,UAAU,IAAI,CAAC;AAAA,gBAC/C,GAAI,sBAAsB,SAAY,EAAE,WAAW,kBAAkB,IAAI,CAAC;AAAA;AAAA,cAE1E,KAAK,OACJ,oBAAC,wBAAqB,MAAM,KAAK,MAAM,OAAO,KAAK,OAAO,WAAsB,IAC9E;AAAA,YACN;AAAA,UAEJ,CAAC;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AACA,cAAc,cAAc;","names":["dynamicLayout","overscan","rowHeight","viewportSize","range","slotCount","orientation","totalSize","height"]}
|