persian-data-grid 0.7.1 → 0.7.2
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/dist/index.cjs +13 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../ui/hooks/useEngineSelector.ts","../ui/gridSearch/scrollToMatch.ts","../ui/hooks/useScrollToSearchMatch.ts","../ui/a11y/liveAnnouncements.ts","../ui/a11y/GridLiveRegion.tsx","../ui/primitives/chrome.tsx","../ui/primitives/Dropdown.tsx","../ui/primitives/Select.tsx","../ui/primitives/icons.tsx","../ui/primitives/Pagination.tsx","../ui/primitives/DatePicker.tsx","../ui/desktop/FillHandle.tsx","../ui/helper.ts","../ui/gridSearch/highlightText.tsx","../ui/cellRenderer/cellRenderContext.ts","../ui/cellRenderer/TextAreaCell.tsx","../ui/cellRenderer/cellRegistry.ts","../ui/cellRenderer/descriptionComponent/index.tsx","../ui/cellRenderer/ERPTableDynamicSelect.tsx","../ui/cellRenderer/index.tsx","../ui/desktop/indexCol.tsx","../ui/desktop/eRPTableRow.tsx","../ui/desktop/ERPTableBody.tsx","../ui/desktop/ERPTableFooter.tsx","../engine/columnReorder.ts","../engine/dataOps/columnMenu.ts","../ui/hooks/useRevalidateRevision.ts","../ui/gridSearch/utils.ts","../ui/filters/filterRegistry.ts","../ui/desktop/ColumnFilterPopover.tsx","../ui/desktop/ColumnGroupHeaderRows.tsx","../ui/desktop/ColumnMenuPopover.tsx","../ui/desktop/ColumnsPanelPopover.tsx","../ui/desktop/ColumnResizeHandle.tsx","../ui/desktop/ERPTableHeader.tsx","../engine/dataOps/pinnedRows.ts","../ui/desktop/ERPTablePinnedRows.tsx","../engine/equality.ts","../ui/virtual/virtualWindow.ts","../ui/virtual/useVirtualWindow.ts","../ui/desktop/ERPTableVirtualBody.tsx","../ui/a11y/ToolbarIconButton.tsx","../ui/export/PdfExportToolbarButton.tsx","../ui/export/ExcelImportToolbarButton.tsx","../ui/gridSearch/GridSearchPanel.tsx","../ui/gridSearch/GridSearchControl.tsx","../ui/multiSelectList/body.tsx","../ui/multiSelectList/header.tsx","../ui/multiSelectList/index.tsx","../ui/theme/ThemeToggleButton.tsx","../ui/desktop/groupActionButtons.tsx","../ui/desktop/pagination.tsx","../ui/desktop/resolveDesktopVirtualization.ts","../ui/desktop/useERPTableLayout.ts","../ui/overlays/resolveGridOverlay.ts","../ui/overlays/GridOverlays.tsx","../ui/desktop/DesktopTable.tsx","../ui/mobile/MobileActionButtons.tsx","../ui/mobile/MobileLoadMoreButton.tsx","../ui/mobile/buildDynamicSource.ts","../ui/mobile/MobileRowFormModal.tsx","../ui/mobile/MobileIndexCol.tsx","../ui/mobile/MobileTableRow.tsx","../ui/mobile/MobileTableBody.tsx","../ui/mobile/MobileTableHeader.tsx","../ui/mobile/scrollToTableEnd.ts","../ui/mobile/useScrollAfterMobileAdd.ts","../ui/mobile/MobileTable.tsx","../ui/keyboard/skipGridNavigation.ts","../ui/useERPTable.ts","../ui/host/assignRef.ts","../ui/index.tsx","../ui/styles/injectStyles.ts","../ui/history/GridHistoryPanel.tsx","../ui/offline/GridOfflineStatus.tsx","../infrastructure/perf/benchmark.ts","../ui/virtual/VirtualList.tsx"],"names":["useState","useRef","useEffect","useLayoutEffect","useTranslations","jsx","useThemePortalStyle","Fragment","jsxs","createPortal","trapTabKey","useId","lazy","Suspense","useDateAdapter","useERPTableTheme","DatePicker","resolveCellAddressFromPoint","formatLocaleNumber","date","translate","forwardRef","useLocale","useHostDependOn","getStaticDependValue","getDependFieldName","hasDependValue","buildDependencyBody","useRemoteQuery","useMemo","useLazyRemote","React","useERPTableHost","useNumberingSystem","display","useColumnWindowOrAll","resolveFillCorner","resolveCellRangePresentation","cellRangeEdgeAttr","cellRangeClassName","ariaDataRowIndex","ColumnWindowCells","columnPinCellProps","rangeProps","ariaColIndex","columnSizeStyle","createElement","gridCellA11y","ariaFooterRowIndex","isIndexColumn","resolveFilterUi","isHeaderColumnSortable","collectUniqueFilterValues","buildColumnGroupHeaderModel","canSetColumnVisible","clampColumnWidth","useDirection","maxColumnGroupDepth","isColumnFilterActive","ariaSortForColumn","sortPriorityForColumn","HEADER_SORT_CLICK_MAX_MOVE_PX","columnPinClassName","move","resolveGroupBlockReorder","shouldCommitHeaderSortClick","cycleSortModel","ARIA_HEADER_ROW_INDEX","ariaPinnedTopRowIndex","ariaPinnedBottomRowIndex","ViewportCalculator","SparseRowIndex","Viewport","ERPTableGroupRow","useHostToast","useMediaQuery","rows","isStockDarkTheme","exportActiveCollectionToExcel","pageSize","DEFAULT_ROW_HEIGHT","useCallback","gridCellDomId","ariaGridRowCount","ColumnWindowProvider","indexPinClassName","indexPinDataAttr","overlayStoredColumnWidth","createGridTableKey","createGrid","flattenColDefOrGroup","isPersistentStore","DEFAULT_MEMORY_STORE","themeDefault","resolveActiveTheme","useGridHostEvents","resolveDirection","ERPTableHostProvider","themeToStyle"],"mappings":"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A;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","file":"index.cjs","sourcesContent":["import { useEffect, useRef, useState } from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { TableViewState } from '../../engine/type';\r\n\r\nexport function useControllerSelector<T>(\r\n controller: UITableController,\r\n getter: () => T,\r\n isEqual: (previous: T, next: T) => boolean = Object.is,\r\n): T {\r\n const [value, setValue] = useState(() => getter());\r\n const getterRef = useRef(getter);\r\n const isEqualRef = useRef(isEqual);\r\n getterRef.current = getter;\r\n isEqualRef.current = isEqual;\r\n\r\n useEffect(() => {\r\n const unsubscribe = controller.subscribe(() => {\r\n const next = getterRef.current();\r\n setValue((previous) =>\r\n isEqualRef.current(previous, next) ? previous : next,\r\n );\r\n });\r\n\r\n return () => unsubscribe?.();\r\n }, [controller]);\r\n\r\n return value;\r\n}\r\n\r\nexport function useEngineSelector<T>(\r\n controller: UITableController,\r\n selector: (view: TableViewState | null | undefined) => T,\r\n isEqual: (previous: T, next: T) => boolean = Object.is,\r\n): T {\r\n return useControllerSelector(\r\n controller,\r\n () => selector(controller.getViewState()),\r\n isEqual,\r\n );\r\n}\r\n\r\nexport function jsonEqual<T>(previous: T, next: T): boolean {\r\n return JSON.stringify(previous) === JSON.stringify(next);\r\n}\r\n\r\nexport function useGridSearchState(controller: UITableController) {\r\n return useEngineSelector(\r\n controller,\r\n (view) => view?.gridSearch ?? null,\r\n jsonEqual,\r\n );\r\n}\r\n\r\nexport function useMobileEditorState(controller: UITableController) {\r\n return useEngineSelector(\r\n controller,\r\n (view) => view?.mobileEditor ?? null,\r\n jsonEqual,\r\n );\r\n}\r\n","import type { GridSearchState } from '../../engine/type';\r\nimport { GridSearchMatch } from './types';\r\n\r\nconst SCROLL_EDGE_PADDING = 12;\r\n\r\nexport function buildSearchScrollKey(\r\n search: NonNullable<GridSearchState>,\r\n match: GridSearchMatch,\r\n): string {\r\n return `${search.columnId}:${search.query}:${search.currentIndex}:${match.rowId}:${match.columnId}`;\r\n}\r\n\r\nfunction findMatchInContainer(\r\n container: HTMLElement,\r\n match: GridSearchMatch,\r\n): { rowEl: HTMLElement; cellEl: HTMLElement } | null {\r\n const rowEl = container.querySelector<HTMLElement>(\r\n `tr[data-rowid=\"${match.rowId}\"]`,\r\n );\r\n if (!rowEl) return null;\r\n\r\n const cellEl = rowEl.querySelector<HTMLElement>(\r\n `td[data-columnid=\"${match.columnId}\"]`,\r\n );\r\n if (!cellEl) return null;\r\n\r\n return { rowEl, cellEl };\r\n}\r\n\r\nfunction isHorizontallyVisible(\r\n cellRect: DOMRect,\r\n containerRect: DOMRect,\r\n): boolean {\r\n return (\r\n cellRect.left >= containerRect.left + SCROLL_EDGE_PADDING &&\r\n cellRect.right <= containerRect.right - SCROLL_EDGE_PADDING\r\n );\r\n}\r\n\r\nfunction isVerticallyVisible(\r\n rowRect: DOMRect,\r\n containerRect: DOMRect,\r\n): boolean {\r\n return (\r\n rowRect.top >= containerRect.top + SCROLL_EDGE_PADDING &&\r\n rowRect.bottom <= containerRect.bottom - SCROLL_EDGE_PADDING\r\n );\r\n}\r\n\r\nexport function restoreScrollPosition(\r\n container: HTMLElement,\r\n left: number,\r\n top: number,\r\n): void {\r\n if (Math.abs(container.scrollLeft - left) > 1) {\r\n container.scrollLeft = left;\r\n }\r\n if (Math.abs(container.scrollTop - top) > 1) {\r\n container.scrollTop = top;\r\n }\r\n}\r\n\r\nexport function applyScrollToMatch(\r\n container: HTMLElement,\r\n match: GridSearchMatch,\r\n): boolean {\r\n const elements = findMatchInContainer(container, match);\r\n if (!elements) return false;\r\n\r\n const { rowEl, cellEl } = elements;\r\n const cellRect = cellEl.getBoundingClientRect();\r\n const rowRect = rowEl.getBoundingClientRect();\r\n const containerRect = container.getBoundingClientRect();\r\n\r\n let deltaX = 0;\r\n let deltaY = 0;\r\n\r\n if (!isHorizontallyVisible(cellRect, containerRect)) {\r\n deltaX =\r\n (cellRect.left + cellRect.right) / 2 -\r\n (containerRect.left + containerRect.right) / 2;\r\n }\r\n\r\n if (!isVerticallyVisible(rowRect, containerRect)) {\r\n deltaY = rowRect.top - containerRect.top - SCROLL_EDGE_PADDING;\r\n }\r\n\r\n if (Math.abs(deltaX) < 1 && Math.abs(deltaY) < 1) {\r\n return true;\r\n }\r\n\r\n container.scrollBy({ left: deltaX, top: deltaY, behavior: 'auto' });\r\n return true;\r\n}\r\n","import { RefObject, useEffect, useLayoutEffect, useRef } from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { GridSearchState } from '../../engine/type';\r\nimport { useEngineSelector, useGridSearchState } from './useEngineSelector';\r\nimport {\r\n applyScrollToMatch,\r\n buildSearchScrollKey,\r\n restoreScrollPosition,\r\n} from '../gridSearch/scrollToMatch';\r\n\r\nconst RESTORE_WINDOW_MS = 800;\r\n\r\nfunction jsonEqual<T>(previous: T, next: T): boolean {\r\n return JSON.stringify(previous) === JSON.stringify(next);\r\n}\r\n\r\nexport function useScrollToSearchMatch(\r\n scrollRef: RefObject<HTMLElement | null>,\r\n controller: UITableController,\r\n) {\r\n const gridSearch = useGridSearchState(controller);\r\n const activeRowId = useEngineSelector(\r\n controller,\r\n () => controller.getActiveRow(),\r\n Object.is,\r\n );\r\n const currentPage = useEngineSelector(\r\n controller,\r\n (view) => view?.pagination.page ?? 1,\r\n Object.is,\r\n );\r\n\r\n const savedScrollRef = useRef<{\r\n key: string;\r\n left: number;\r\n top: number;\r\n } | null>(null);\r\n const restoreUntilRef = useRef(0);\r\n\r\n const getActiveMatch = (search: GridSearchState | null) => {\r\n if (!search || search.currentIndex < 0 || !search.matches.length) {\r\n return null;\r\n }\r\n return search.matches[search.currentIndex];\r\n };\r\n\r\n const persistScroll = (key: string) => {\r\n const container = scrollRef.current;\r\n if (!container) return;\r\n\r\n savedScrollRef.current = {\r\n key,\r\n left: container.scrollLeft,\r\n top: container.scrollTop,\r\n };\r\n restoreUntilRef.current = Date.now() + RESTORE_WINDOW_MS;\r\n };\r\n\r\n const restoreIfNeeded = () => {\r\n const container = scrollRef.current;\r\n const saved = savedScrollRef.current;\r\n if (!container || !saved) return;\r\n if (Date.now() > restoreUntilRef.current) return;\r\n\r\n restoreScrollPosition(container, saved.left, saved.top);\r\n };\r\n\r\n const scrollToActiveMatch = (search: GridSearchState | null): boolean => {\r\n const container = scrollRef.current;\r\n const match = getActiveMatch(search);\r\n if (!container || !match) return false;\r\n\r\n if (activeRowId !== match.rowId) return false;\r\n\r\n const key = buildSearchScrollKey(search!, match);\r\n const applied = applyScrollToMatch(container, match);\r\n if (applied) {\r\n persistScroll(key);\r\n }\r\n return applied;\r\n };\r\n\r\n useLayoutEffect(() => {\r\n if (!gridSearch) {\r\n savedScrollRef.current = null;\r\n restoreUntilRef.current = 0;\r\n return;\r\n }\r\n\r\n const match = getActiveMatch(gridSearch);\r\n const key = match ? buildSearchScrollKey(gridSearch, match) : null;\r\n\r\n if (key && savedScrollRef.current?.key === key) {\r\n restoreIfNeeded();\r\n } else {\r\n savedScrollRef.current = null;\r\n }\r\n\r\n scrollToActiveMatch(gridSearch);\r\n restoreIfNeeded();\r\n }, [gridSearch, activeRowId, currentPage, controller, scrollRef]);\r\n\r\n useEffect(() => {\r\n if (!gridSearch) return;\r\n\r\n let frame1 = 0;\r\n let frame2 = 0;\r\n\r\n frame1 = requestAnimationFrame(() => {\r\n restoreIfNeeded();\r\n const applied = scrollToActiveMatch(gridSearch);\r\n restoreIfNeeded();\r\n\r\n if (!applied) {\r\n frame2 = requestAnimationFrame(() => {\r\n scrollToActiveMatch(gridSearch);\r\n restoreIfNeeded();\r\n });\r\n }\r\n });\r\n\r\n return () => {\r\n cancelAnimationFrame(frame1);\r\n cancelAnimationFrame(frame2);\r\n };\r\n }, [gridSearch, activeRowId, currentPage, controller, scrollRef]);\r\n\r\n useEffect(() => {\r\n const unsubscribe = controller.subscribe(() => {\r\n if (!savedScrollRef.current) return;\r\n if (Date.now() > restoreUntilRef.current) return;\r\n\r\n requestAnimationFrame(() => {\r\n restoreIfNeeded();\r\n });\r\n });\r\n\r\n return () => unsubscribe?.();\r\n }, [controller, scrollRef]);\r\n}\r\n","/**\r\n * Pure live-region announcement builders (PR-125).\r\n * No React — unit-tested; UI formats via `messages`.\r\n */\r\n\r\nimport type { FilterModel } from '../../engine/dataOps/filterModel';\r\nimport type { SortModel } from '../../engine/dataOps/sortModel';\r\n\r\nexport type TranslateFn = (\r\n key: string,\r\n vars?: Record<string, string | number>,\r\n) => string;\r\n\r\nexport type ColumnLabel = { fieldName: string; fieldCaption: string };\r\n\r\nexport function countSelectedRows(\r\n selected: Record<number, true> | null | undefined,\r\n): number {\r\n if (!selected) return 0;\r\n return Object.keys(selected).length;\r\n}\r\n\r\nexport function countActiveFilters(filterModel: FilterModel | null | undefined): number {\r\n if (!filterModel) return 0;\r\n return Object.keys(filterModel).length;\r\n}\r\n\r\nexport function announceSortChange(\r\n sortModel: SortModel,\r\n columns: readonly ColumnLabel[],\r\n t: TranslateFn,\r\n): string {\r\n if (!sortModel.length) return t('a11y.sortCleared');\r\n const primary = sortModel[0]!;\r\n const col = columns.find((c) => c.fieldName === primary.colId);\r\n const column = col?.fieldCaption || primary.colId;\r\n return t(\r\n primary.sort === 'asc' ? 'a11y.sortedAsc' : 'a11y.sortedDesc',\r\n { column },\r\n );\r\n}\r\n\r\nexport function announceFilterChange(\r\n visible: number,\r\n total: number,\r\n activeFilterCount: number,\r\n quickFilterActive: boolean,\r\n t: TranslateFn,\r\n): string {\r\n if (activeFilterCount === 0 && !quickFilterActive) {\r\n return t('a11y.filterCleared');\r\n }\r\n return t('a11y.filterResult', { visible, total });\r\n}\r\n\r\nexport function announceSelectionChange(\r\n count: number,\r\n t: TranslateFn,\r\n): string {\r\n if (count <= 0) return t('a11y.selectionCleared');\r\n return t('a11y.rowsSelected', { count });\r\n}\r\n\r\nexport function announceValidationError(\r\n message: string,\r\n t: TranslateFn,\r\n): string {\r\n const trimmed = message.trim();\r\n if (!trimmed) return t('a11y.validationGeneric');\r\n return t('a11y.validationError', { message: trimmed });\r\n}\r\n\r\nexport function sortFingerprint(sortModel: SortModel): string {\r\n return sortModel.map((s) => `${s.colId}:${s.sort}`).join('|');\r\n}\r\n\r\nexport function filterFingerprint(\r\n filterModel: FilterModel,\r\n quickFilterText: string,\r\n): string {\r\n return `${JSON.stringify(filterModel)}|${quickFilterText}`;\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef, useState } from 'react';\r\n\r\nimport type { CellError } from '../../engine/type';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { jsonEqual, useEngineSelector } from '../hooks/useEngineSelector';\r\nimport { useTranslations } from '../host';\r\nimport {\r\n announceFilterChange,\r\n announceSelectionChange,\r\n announceSortChange,\r\n announceValidationError,\r\n countActiveFilters,\r\n countSelectedRows,\r\n filterFingerprint,\r\n sortFingerprint,\r\n} from './liveAnnouncements';\r\n\r\ntype Props = {\r\n controller: UITableController;\r\n};\r\n\r\n/**\r\n * Polite aria-live region for sort / filter / selection / validation (PR-125).\r\n * Visually hidden; text comes from `messages`.\r\n */\r\nexport function GridLiveRegion({ controller }: Props) {\r\n const t = useTranslations();\r\n const [message, setMessage] = useState('');\r\n const primed = useRef(false);\r\n const prevSort = useRef('');\r\n const prevFilter = useRef('');\r\n const prevSelected = useRef(-1);\r\n const prevValidation = useRef('');\r\n\r\n const snapshot = useEngineSelector(\r\n controller,\r\n (view) => ({\r\n sortModel: view?.sortModel ?? [],\r\n filterModel: view?.filterModel ?? {},\r\n quickFilterText: view?.quickFilterText ?? '',\r\n selectedRows: view?.selectedRows ?? {},\r\n columns: (view?.columns ?? []).map((c) => ({\r\n fieldName: c.fieldName,\r\n fieldCaption: c.fieldCaption,\r\n })),\r\n visibleRows: view?.pagination.totalRows ?? 0,\r\n }),\r\n jsonEqual,\r\n );\r\n\r\n useEffect(() => {\r\n const sortFp = sortFingerprint(snapshot.sortModel);\r\n const filterFp = filterFingerprint(\r\n snapshot.filterModel,\r\n snapshot.quickFilterText,\r\n );\r\n const selectedCount = countSelectedRows(snapshot.selectedRows);\r\n const totalRows = controller.getAllRows()?.length ?? snapshot.visibleRows;\r\n\r\n if (!primed.current) {\r\n primed.current = true;\r\n prevSort.current = sortFp;\r\n prevFilter.current = filterFp;\r\n prevSelected.current = selectedCount;\r\n return;\r\n }\r\n\r\n if (sortFp !== prevSort.current) {\r\n prevSort.current = sortFp;\r\n setMessage(\r\n announceSortChange(snapshot.sortModel, snapshot.columns, t),\r\n );\r\n return;\r\n }\r\n\r\n if (filterFp !== prevFilter.current) {\r\n prevFilter.current = filterFp;\r\n setMessage(\r\n announceFilterChange(\r\n snapshot.visibleRows,\r\n totalRows,\r\n countActiveFilters(snapshot.filterModel),\r\n Boolean(snapshot.quickFilterText.trim()),\r\n t,\r\n ),\r\n );\r\n return;\r\n }\r\n\r\n if (selectedCount !== prevSelected.current) {\r\n prevSelected.current = selectedCount;\r\n setMessage(announceSelectionChange(selectedCount, t));\r\n }\r\n }, [snapshot, controller, t]);\r\n\r\n useEffect(() => {\r\n const run = controller.validation();\r\n run((res) => {\r\n if (res.valid) {\r\n prevValidation.current = '';\r\n return;\r\n }\r\n let first: CellError | undefined;\r\n if (res.errors) {\r\n for (const err of res.errors.values()) {\r\n first = err;\r\n break;\r\n }\r\n }\r\n const msg = first?.message ?? '';\r\n if (!msg || msg === prevValidation.current) return;\r\n prevValidation.current = msg;\r\n setMessage(announceValidationError(msg, t));\r\n });\r\n }, [controller, snapshot, t]);\r\n\r\n return (\r\n <div\r\n className=\"pdg-live-region\"\r\n data-pdg-live-region=\"\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n >\r\n {message}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useId, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport { trapTabKey } from '../../infrastructure/ui/focusTrap';\r\nimport { useThemePortalStyle } from '../host';\r\n\r\ntype Props = {\r\n title?: React.ReactNode;\r\n children: React.ReactNode;\r\n className?: string;\r\n};\r\n\r\nexport function CustomTooltip({ title, children }: Props) {\r\n const [pos, setPos] = useState<{ x: number; y: number } | null>(null);\r\n const portalStyle = useThemePortalStyle({\r\n position: 'fixed',\r\n left: pos?.x,\r\n top: pos?.y,\r\n transform: 'translate(-50%, -100%)',\r\n });\r\n\r\n if (!title) return <>{children}</>;\r\n\r\n return (\r\n <span\r\n className=\"relative inline-flex\"\r\n onMouseEnter={(e) => {\r\n const rect = e.currentTarget.getBoundingClientRect();\r\n setPos({ x: rect.left + rect.width / 2, y: rect.top - 6 });\r\n }}\r\n onMouseLeave={() => setPos(null)}\r\n >\r\n {children}\r\n {pos && typeof document !== 'undefined'\r\n ? createPortal(\r\n <span\r\n className=\"erp-table-tooltip\"\r\n style={portalStyle}\r\n >\r\n {title}\r\n </span>,\r\n document.body,\r\n )\r\n : null}\r\n </span>\r\n );\r\n}\r\n\r\nexport function Tooltip({ title, children }: { title?: React.ReactNode; children: React.ReactNode }) {\r\n return <CustomTooltip title={title}>{children}</CustomTooltip>;\r\n}\r\n\r\ntype ModalProps = {\r\n isModalOpen?: boolean;\r\n closeModal?: () => void;\r\n headerName?: React.ReactNode;\r\n headerIcon?: React.ReactNode;\r\n content?: React.ReactNode;\r\n width?: number;\r\n contentClassName?: string;\r\n};\r\n\r\nexport function CustomModal({\r\n isModalOpen,\r\n closeModal,\r\n headerName,\r\n headerIcon,\r\n content,\r\n width = 720,\r\n contentClassName,\r\n}: ModalProps) {\r\n const overlayStyle = useThemePortalStyle();\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (!isModalOpen) return;\r\n const previouslyFocused = document.activeElement as HTMLElement | null;\r\n const id = requestAnimationFrame(() => {\r\n const focusables = dialogRef.current?.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n );\r\n focusables?.[0]?.focus();\r\n });\r\n const onKey = (e: KeyboardEvent) => {\r\n if (!dialogRef.current) return;\r\n if (e.key === 'Escape') {\r\n e.preventDefault();\r\n closeModal?.();\r\n return;\r\n }\r\n trapTabKey(dialogRef.current, e);\r\n };\r\n document.addEventListener('keydown', onKey);\r\n return () => {\r\n cancelAnimationFrame(id);\r\n document.removeEventListener('keydown', onKey);\r\n previouslyFocused?.focus?.();\r\n };\r\n }, [isModalOpen, closeModal]);\r\n\r\n if (!isModalOpen || typeof document === 'undefined') return null;\r\n\r\n return createPortal(\r\n <div\r\n className=\"erp-table-modal-overlay\"\r\n style={overlayStyle}\r\n onClick={() => closeModal?.()}\r\n >\r\n <div\r\n ref={dialogRef}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label={typeof headerName === 'string' ? headerName : undefined}\r\n className=\"erp-table-modal\"\r\n style={{ width }}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <div className=\"erp-table-modal__header\">\r\n {headerIcon}\r\n <span>{headerName}</span>\r\n <button\r\n type=\"button\"\r\n className=\"erp-table-modal__close\"\r\n onClick={() => closeModal?.()}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n <div className={`erp-table-modal__body ${contentClassName ?? ''}`}>{content}</div>\r\n </div>\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n\r\nexport function CustomCheckbox({\r\n checked,\r\n disabled,\r\n onClick,\r\n onChange,\r\n className,\r\n 'aria-label': ariaLabel,\r\n}: {\r\n checked?: boolean;\r\n disabled?: boolean;\r\n onClick?: (e: React.MouseEvent<HTMLInputElement>) => void;\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n className?: string;\r\n 'aria-label'?: string;\r\n}) {\r\n return (\r\n <input\r\n type=\"checkbox\"\r\n className={`erp-table-checkbox ${className ?? ''}`}\r\n checked={!!checked}\r\n disabled={disabled}\r\n aria-label={ariaLabel}\r\n onClick={onClick}\r\n onChange={(event) => {\r\n onChange?.(event);\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport function CustomButton({\r\n children,\r\n className,\r\n onClick,\r\n htmlType = 'button',\r\n type,\r\n disabled,\r\n}: {\r\n children?: React.ReactNode;\r\n className?: string;\r\n onClick?: () => void;\r\n htmlType?: 'button' | 'submit' | 'reset';\r\n type?: string;\r\n disabled?: boolean;\r\n}) {\r\n return (\r\n <button\r\n type={htmlType}\r\n disabled={disabled}\r\n onClick={onClick}\r\n className={`flex justify-center items-center px-2 py-1 border rounded ${className ?? ''}`}\r\n data-variant={type}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport function InputText({\r\n value,\r\n onChange,\r\n placeholder,\r\n className,\r\n}: {\r\n value?: string;\r\n onChange?: (e: { target: { value: string } }) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}) {\r\n const id = useId();\r\n return (\r\n <input\r\n id={id}\r\n className={`px-3 py-2 border border-gray-gray5 rounded w-full text-sm outline-none ${className ?? ''}`}\r\n value={value ?? ''}\r\n placeholder={placeholder}\r\n onChange={onChange}\r\n />\r\n );\r\n}\r\n\r\nexport function Spin({\r\n indicator,\r\n}: {\r\n size?: string;\r\n indicator?: React.ReactNode;\r\n}) {\r\n return <span className=\"inline-flex animate-spin\">{indicator}</span>;\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport { useThemePortalStyle } from '../host';\r\n\r\nexport type DropdownItem = {\r\n key?: string;\r\n label?: React.ReactNode;\r\n extra?: React.ReactNode;\r\n type?: 'divider' | 'item' | string;\r\n onClick?: () => void;\r\n disabled?: boolean;\r\n};\r\n\r\ntype DropdownProps = {\r\n items?: DropdownItem[];\r\n children: React.ReactNode;\r\n placement?: 'bottom' | 'bottomLeft' | 'bottomRight' | string;\r\n className?: string;\r\n dropdownClassName?: string;\r\n};\r\n\r\nexport function CustomDropdownButton({\r\n items = [],\r\n children,\r\n placement = 'bottom',\r\n className,\r\n dropdownClassName,\r\n}: DropdownProps) {\r\n const [open, setOpen] = useState(false);\r\n const [pos, setPos] = useState({ top: 0, left: 0 });\r\n const triggerRef = useRef<HTMLDivElement>(null);\r\n const menuStyle = useThemePortalStyle({\r\n position: 'fixed',\r\n top: pos.top,\r\n left: pos.left,\r\n });\r\n\r\n useEffect(() => {\r\n if (!open || !triggerRef.current) return;\r\n const rect = triggerRef.current.getBoundingClientRect();\r\n let left = rect.left;\r\n if (placement === 'bottomRight') left = rect.right - 180;\r\n if (placement === 'bottomLeft') left = rect.left;\r\n setPos({ top: rect.bottom + 4, left });\r\n }, [open, placement]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onDoc = (e: MouseEvent) => {\r\n if (triggerRef.current?.contains(e.target as Node)) return;\r\n setOpen(false);\r\n };\r\n document.addEventListener('mousedown', onDoc);\r\n return () => document.removeEventListener('mousedown', onDoc);\r\n }, [open]);\r\n\r\n return (\r\n <div ref={triggerRef} className={className}>\r\n <span\r\n role=\"button\"\r\n tabIndex={0}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setOpen((v) => !v);\r\n }}\r\n >\r\n {children}\r\n </span>\r\n {open && typeof document !== 'undefined'\r\n ? createPortal(\r\n <div\r\n className={`erp-table-dropdown ${dropdownClassName ?? ''}`}\r\n style={menuStyle}\r\n >\r\n {items.map((item, index) => {\r\n if (item.type === 'divider') {\r\n return <div key={`d-${index}`} className=\"erp-table-dropdown__divider\" />;\r\n }\r\n return (\r\n <button\r\n key={item.key ?? String(index)}\r\n type=\"button\"\r\n className=\"erp-table-dropdown__item\"\r\n disabled={item.disabled}\r\n onClick={() => {\r\n item.onClick?.();\r\n setOpen(false);\r\n }}\r\n >\r\n <span>{item.label}</span>\r\n {item.extra ? <span>{item.extra}</span> : null}\r\n </button>\r\n );\r\n })}\r\n </div>,\r\n document.body,\r\n )\r\n : null}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { Suspense, lazy } from 'react';\r\n\r\n/**\r\n * Public Select. The implementation and its antd-derived stylesheet are a lazy\r\n * chunk (`SelectImpl`) so they stay out of the main bundle budget.\r\n */\r\nexport type SelectOption = {\r\n value?: string | number;\r\n label?: React.ReactNode;\r\n title?: string;\r\n option?: unknown;\r\n disabled?: boolean;\r\n [key: string]: unknown;\r\n};\r\n\r\nexport type SelectProps = {\r\n className?: string;\r\n style?: React.CSSProperties;\r\n value?: unknown;\r\n disabled?: boolean;\r\n loading?: boolean;\r\n showSearch?: boolean;\r\n allowClear?: boolean;\r\n placeholder?: React.ReactNode;\r\n options?: SelectOption[];\r\n size?: 'small' | 'middle' | 'large';\r\n status?: 'error' | 'warning';\r\n filterOption?: (input: string, option: SelectOption) => boolean;\r\n onChange?: (value: unknown, option?: unknown) => void;\r\n onClick?: () => void;\r\n onSearch?: (value: string) => void;\r\n onClear?: () => void;\r\n onFocus?: () => void;\r\n onBlur?: () => void;\r\n onPopupScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\r\n popupMatchSelectWidth?: number | boolean;\r\n popupRender?: (menu: React.ReactNode) => React.ReactNode;\r\n autoFocus?: boolean;\r\n optionRender?: (\r\n originNode: { data: SelectOption },\r\n info?: { data: SelectOption },\r\n ) => React.ReactNode;\r\n notFoundContent?: React.ReactNode;\r\n getPopupContainer?: (trigger: HTMLElement) => HTMLElement;\r\n optionFilterProp?: string;\r\n labelInValue?: boolean;\r\n /** Windowed option list (antd default: on; only kicks in when options overflow `listHeight`). */\r\n virtual?: boolean;\r\n listHeight?: number;\r\n listItemHeight?: number;\r\n};\r\n\r\n\r\nconst SelectImpl = lazy(() => import('./SelectImpl'));\r\n\r\nexport function Select(props: SelectProps) {\r\n return (\r\n <Suspense\r\n fallback={\r\n <div\r\n className={props.className}\r\n style={{ display: 'inline-flex', minHeight: 32, minWidth: 64, ...props.style }}\r\n aria-busy=\"true\"\r\n />\r\n }\r\n >\r\n <SelectImpl {...props} />\r\n </Suspense>\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nexport type IconConfig = {\r\n width?: number;\r\n height?: number;\r\n stroke?: string;\r\n fill?: string;\r\n strokeWidth?: number;\r\n};\r\n\r\ntype IconProps = {\r\n config?: IconConfig;\r\n className?: string;\r\n};\r\n\r\nfunction strokeClass(config?: IconConfig) {\r\n return !config?.stroke ? 'stroke-gray-gray10' : undefined;\r\n}\r\n\r\nexport function PlusIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 60 60\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M30 44.9996L30 29.1157M30 29.1157C30 29.1157 30 14.9996 29.9999 13.9996M30 29.1157L46 29.1157M30 29.1157L14 29.1157\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"3\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function GuaranteeReceive({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 20 20\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M10.8327 2.50072C10.7531 2.5 10.6638 2.5 10.5616 2.5H6.83285C5.89942 2.5 5.43237 2.5 5.07585 2.68166C4.76224 2.84144 4.50746 3.09623 4.34767 3.40983C4.16602 3.76635 4.16602 4.23341 4.16602 5.16683V14.8335C4.16602 15.7669 4.16602 16.2334 4.34767 16.5899C4.50746 16.9035 4.76224 17.1587 5.07585 17.3185C5.43202 17.5 5.89852 17.5 6.83013 17.5L13.1686 17.5C14.1002 17.5 14.566 17.5 14.9222 17.3185C15.2358 17.1587 15.4914 16.9035 15.6512 16.5899C15.8327 16.2337 15.8327 15.7679 15.8327 14.8363V7.7714C15.8327 7.66913 15.8327 7.57967 15.8319 7.5M10.8327 2.50072C11.0707 2.50289 11.2213 2.51154 11.3651 2.54605C11.5351 2.58688 11.6976 2.65439 11.8467 2.74577C12.0148 2.8488 12.1592 2.99318 12.4473 3.28125L15.0518 5.88582C15.3401 6.17407 15.4834 6.3178 15.5865 6.48599C15.6779 6.63512 15.7455 6.79771 15.7863 6.96777C15.8208 7.11147 15.8296 7.26209 15.8319 7.5M10.8327 2.50072V4.83333C10.8327 5.76675 10.8327 6.23314 11.0143 6.58966C11.1741 6.90326 11.4289 7.15873 11.7425 7.31852C12.0987 7.5 12.5652 7.5 13.4968 7.5H15.8319M15.8319 7.5H15.8328\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function CutIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 32 32\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M5.75 17.531h-0.125c-1.313 0-2.719 0.625-3.781 1.656-1.094 1-1.844 2.344-1.844 3.688 0 1.531 1.094 2.469 2.594 2.469 1.281 0 2.719-0.656 3.813-1.656 1.063-1.031 1.813-2.344 1.813-3.688 0-0.156 0-0.375-0.031-0.531l1-0.875 9.813 5.031c0.156 0.063 0.313 0.125 0.469 0.125 0.219 0 0.625-0.125 1.063-0.188 0.406-0.094 0.844-0.188 1.094-0.219 0.438-0.063 0.781-0.469 0.781-0.906 0-0.313-0.156-0.594-0.438-0.781l-8.156-5.656 8.156-5.656c0.281-0.188 0.438-0.469 0.438-0.781 0-0.438-0.344-0.875-0.781-0.938-0.125 0-0.281-0.031-0.469-0.094-0.375-0.094-0.875-0.156-1.25-0.219s-0.656-0.063-0.906 0.063c-0.063 0.031-0.25 0.125-0.594 0.281-0.313 0.156-0.719 0.375-1.188 0.625s-1 0.5-1.563 0.813c-0.563 0.281-1.219 0.594-1.781 0.906-1.188 0.594-2.344 1.188-3.219 1.625-0.438 0.219-0.813 0.438-1.094 0.563-0.25 0.125-0.375 0.219-0.375 0.219l-1-0.906c0.031-0.156 0.031-0.344 0.031-0.5 0-1.344-0.75-2.688-1.813-3.688-1.094-1-2.531-1.656-3.813-1.656-1.5 0-2.594 0.938-2.594 2.469 0 1.313 0.75 2.656 1.875 3.688 1.125 1.063 2.563 1.75 3.875 1.656 0.125 0.188 0.406 0.438 0.688 0.688s0.531 0.531 0.719 0.719v0.25c-0.188 0.188-0.406 0.406-0.719 0.688-0.281 0.25-0.531 0.531-0.688 0.719zM2.313 9.125v-0.094c0.094-0.031 0.188-0.031 0.281-0.031 0.75 0 1.563 0.469 2.094 0.906 0.25 0.219 0.563 0.594 0.781 0.969 0.25 0.375 0.469 0.813 0.469 1.156v0.063c-0.156 0.031-0.25 0.031-0.313 0.031-0.75 0-1.5-0.469-2.063-0.938-0.219-0.219-0.563-0.531-0.813-0.906s-0.438-0.813-0.438-1.156zM6.844 17.75l1.281-1.25-0.063-1.5 11.406-5.813 2 0.375-11.875 8.188-0.531-0.281-1.25 1.125c-0.219-0.344-0.563-0.625-0.969-0.844zM7.25 14.625l-0.406-0.438c0.406-0.156 0.75-0.438 0.969-0.781l0.5 0.438c-0.469 0.219-0.875 0.344-1.063 0.781zM8.688 16c0 0.5 0.406 0.906 0.906 0.906 0.531 0 0.938-0.406 0.938-0.906 0-0.531-0.406-0.938-0.906-0.938-0.563 0-0.938 0.406-0.938 0.938zM10.563 18.219l2.406-1.656 8.5 5.875-2 0.375zM2.344 22.875c0-0.688 0.469-1.469 1.156-2.031s1.5-1 2.125-1c0.094 0 0.188 0.031 0.25 0.031v0.063c0.031 0 0.031 0.031 0.031 0.063 0 0.688-0.469 1.438-1.156 2s-1.469 1-2.156 1h-0.125c-0.031-0.031-0.063-0.031-0.125-0.031v-0.094z\"\r\n className={!config?.fill ? 'fill-gray-gray8' : undefined}\r\n fill={config?.fill}\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function ClipboardIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 20 20\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M13.3333 3.33594C15.1459 3.34603 16.1274 3.4264 16.7678 4.06672C17.5 4.79896 17.5 5.97747 17.5 8.33449V13.3345C17.5 15.6915 17.5 16.87 16.7678 17.6023C16.0355 18.3345 14.857 18.3345 12.5 18.3345H7.5C5.14298 18.3345 3.96447 18.3345 3.23223 17.6023C2.5 16.87 2.5 15.6915 2.5 13.3345V8.33449C2.5 5.97747 2.5 4.79896 3.23223 4.06672C3.87255 3.4264 4.85414 3.34603 6.66667 3.33594\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n />\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M6.66797 11.668H13.3346\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M5.83203 8.75H14.1654\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M7.5 14.582H12.5\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M6.66797 2.91797C6.66797 2.22761 7.22761 1.66797 7.91797 1.66797H12.0846C12.775 1.66797 13.3346 2.22761 13.3346 2.91797V3.7513C13.3346 4.44166 12.775 5.0013 12.0846 5.0013H7.91797C7.22761 5.0013 6.66797 4.44166 6.66797 3.7513V2.91797Z\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function ClipboardCheck({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 52 52\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M44 2.5H19C16.4 2.5 14.3 4.6 14.3 7.2V8C14.3 8.5 14.6 8.8 15.1 8.8H37.8C40.4 8.8 42.5 10.9 42.5 13.5V37.8C42.5 38.3 42.8 38.6 43.3 38.6H44C46.6 38.6 48.7 36.5 48.7 33.9V7.2C48.7 4.6 46.6 2.5 44 2.5Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n fill=\"none\"\r\n />\r\n <path\r\n d=\"M33 13.5H8C5.4 13.5 3.3 15.6 3.3 18.2V44.8C3.3 47.4 5.4 49.5 8 49.5H33C35.6 49.5 37.8 47.4 37.8 44.8V18.2C37.8 15.6 35.6 13.5 33 13.5ZM31 26.8L19 38.8C18.5 39.3 18 39.5 17.4 39.5C16.9 39.5 16.2 39.3 15.8 38.8L10 33C9.5 32.5 9.5 31.8 10 31.4L11.6 29.8C12.1 29.3 12.8 29.3 13.2 29.8L17.4 34L27.7 23.7C28.2 23.2 28.9 23.2 29.3 23.7L30.9 25.3C31.4 25.6 31.4 26.4 31 26.8Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n fill=\"#000\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function TrashBin({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 18 18\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M15.3751 4.5H2.625\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n d=\"M14.125 6.375L13.78 11.5493C13.6473 13.5405 13.5809 14.5361 12.9322 15.1431C12.2834 15.75 11.2856 15.75 9.29001 15.75H8.70999C6.71439 15.75 5.71659 15.75 5.06783 15.1431C4.41907 14.5361 4.3527 13.5405 4.21996 11.5493L3.875 6.375\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n opacity=\"0.5\"\r\n d=\"M4.875 4.5C4.91691 4.5 4.93786 4.5 4.95686 4.49952C5.57444 4.48387 6.11927 4.09118 6.32941 3.51024C6.33588 3.49237 6.3425 3.47249 6.35576 3.43273L6.42857 3.21429C6.49073 3.02781 6.52181 2.93457 6.56304 2.8554C6.72751 2.53955 7.03181 2.32023 7.38346 2.26407C7.4716 2.25 7.56988 2.25 7.76645 2.25H10.2336C10.4301 2.25 10.5284 2.25 10.6165 2.26407C10.9682 2.32023 11.2725 2.53955 11.437 2.8554C11.4782 2.93457 11.5093 3.02781 11.5714 3.21429L11.6442 3.43273C11.6575 3.47244 11.6641 3.49238 11.6706 3.51024C11.8807 4.09118 12.4256 4.48387 13.0431 4.49952C13.0621 4.5 13.0831 4.5 13.125 4.5\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function RedTrashBin({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 30 30\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M17.5 12.5V21.25M12.5 12.5V21.25M7.5 7.5V22.25C7.5 23.6501 7.5 24.3497 7.77248 24.8845C8.01217 25.3549 8.39434 25.7381 8.86475 25.9778C9.399 26.25 10.0987 26.25 11.4961 26.25H18.5039C19.9013 26.25 20.6 26.25 21.1342 25.9778C21.6046 25.7381 21.9881 25.3549 22.2278 24.8845C22.5 24.3502 22.5 23.6513 22.5 22.2539V7.5M7.5 7.5H10M7.5 7.5H5M10 7.5H20M10 7.5C10 6.33515 10 5.75301 10.1903 5.29358C10.444 4.68101 10.9304 4.19404 11.543 3.9403C12.0024 3.75 12.5851 3.75 13.75 3.75H16.25C17.4149 3.75 17.9973 3.75 18.4567 3.9403C19.0693 4.19404 19.5558 4.68101 19.8096 5.29358C19.9999 5.75301 20 6.33515 20 7.5M20 7.5H22.5M22.5 7.5H25\"\r\n stroke={config?.stroke ?? '#DC3545'}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Layers({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 30 30\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M26.25 15L15 22.5L3.75 15M26.25 20L15 27.5L3.75 20M26.25 10L15 17.5L3.75 10L15 2.5L26.25 10Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function PdfIcon({ config, className }: IconProps) {\r\n const width = config?.width ?? 18;\r\n const height = config?.height ?? 18;\r\n return (\r\n <svg\r\n className={className}\r\n width={width}\r\n height={height}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <rect x=\"4\" y=\"2.5\" width=\"16\" height=\"19\" rx=\"2\" fill={config?.fill ?? '#b91c1c'} />\r\n <path\r\n d=\"M8 15.2V8.8h1.7c1.15 0 1.85.62 1.85 1.55 0 .92-.7 1.52-1.85 1.52H9.15v3.33H8Zm1.15-4.4h.5c.52 0 .82-.28.82-.68 0-.4-.3-.67-.82-.67h-.5v1.35Zm4.05 4.4V8.8h2.35c1.55 0 2.5.88 2.5 2.2 0 1.33-.95 2.22-2.5 2.22h-1.2v1.98h-1.15Zm1.15-3.05h1.1c.72 0 1.18-.4 1.18-1.05 0-.66-.46-1.04-1.18-1.04h-1.1v2.09Z\"\r\n fill=\"#fff\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Excel({ config, className }: IconProps) {\r\n const width = config?.width ?? 18;\r\n const height = config?.height ?? 18;\r\n return (\r\n <svg\r\n className={className}\r\n width={width}\r\n height={height}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <rect x=\"3\" y=\"2.5\" width=\"18\" height=\"19\" rx=\"2\" fill={config?.fill ?? '#217346'} />\r\n <path\r\n d=\"M8 7.4h2.15l1.85 4.55L13.85 7.4H16L13.1 14.6h-2.2L8 7.4Z\"\r\n fill=\"#fff\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function ExcelImport({ config, className }: IconProps) {\r\n const width = config?.width ?? 18;\r\n const height = config?.height ?? 18;\r\n return (\r\n <svg\r\n className={className}\r\n width={width}\r\n height={height}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <rect x=\"3\" y=\"2.5\" width=\"18\" height=\"19\" rx=\"2\" fill={config?.fill ?? '#217346'} />\r\n <path\r\n d=\"M12 7v7.5M8.8 12.2 12 15.4l3.2-3.2M7.5 17.5h9\"\r\n stroke=\"#fff\"\r\n strokeWidth=\"1.6\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function SpinIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden\r\n >\r\n <path\r\n fill={config?.fill}\r\n className={!config?.fill ? 'fill-gray-gray6' : undefined}\r\n d=\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\"\r\n opacity=\".25\"\r\n />\r\n <path\r\n fill={config?.fill}\r\n className={!config?.fill ? 'fill-gray-gray7' : undefined}\r\n d=\"M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z\"\r\n >\r\n <animateTransform\r\n attributeName=\"transform\"\r\n type=\"rotate\"\r\n dur=\"0.75s\"\r\n values=\"0 12 12;360 12 12\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </path>\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Magnifier({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 18 18\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <circle\r\n cx=\"8.625\"\r\n cy=\"8.625\"\r\n r=\"7.125\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n />\r\n <path\r\n d=\"M13.875 13.875L16.5 16.5\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function LeftChevron({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M14 16L10 12L14 8\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function RightChevron({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M10 8L14 12L10 16\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function InfoIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M12 11V16M12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21ZM12.0498 8V8.1L11.9502 8.1002V8H12.0498Z\"\r\n stroke={config?.stroke ?? '#086EDC'}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function NoData({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 60}\r\n height={config?.height ?? 60}\r\n viewBox=\"0 0 145 145\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M103.121 123.752L91.7249 112.357M89.3776 20.631C88.7208 20.625 87.982 20.625 87.1387 20.625H56.3763C48.6756 20.625 44.8224 20.625 41.8811 22.1237C39.2939 23.4419 37.1919 25.5439 35.8737 28.1311C34.375 31.0724 34.375 34.9256 34.375 42.6263V122.376C34.375 130.077 34.375 133.925 35.8737 136.867C37.1919 139.454 39.2939 141.56 41.8811 142.878C44.8195 144.375 48.6681 144.375 56.3539 144.375L108.646 144.375C116.332 144.375 120.175 144.375 123.113 142.878C125.701 141.56 127.81 139.454 129.128 136.867C130.625 133.928 130.625 130.085 130.625 122.4V64.1141C130.625 63.2708 130.624 62.5318 130.618 61.875M89.3776 20.631C91.3401 20.6489 92.5768 20.7217 93.7625 21.0064C95.1655 21.3432 96.5102 21.8987 97.7405 22.6526C99.1276 23.5026 100.319 24.6937 102.695 27.0703L124.183 48.558C126.561 50.9361 127.743 52.1219 128.594 53.5095C129.348 54.7397 129.905 56.0811 130.242 57.4841C130.527 58.6698 130.6 59.9125 130.618 61.875M89.3776 20.631L89.375 39.8764C89.375 47.5772 89.375 51.426 90.8737 54.3673C92.1919 56.9546 94.2939 59.0595 96.8811 60.3778C99.8195 61.875 103.668 61.875 111.354 61.875H130.618M79.0625 116.875C69.5701 116.875 61.875 109.18 61.875 99.6875C61.875 90.1951 69.5701 82.5 79.0625 82.5C88.5549 82.5 96.25 90.1951 96.25 99.6875C96.25 109.18 88.5549 116.875 79.0625 116.875Z\"\r\n className={!config?.stroke ? 'stroke-gray-gray6' : undefined}\r\n stroke={config?.stroke}\r\n strokeWidth=\"6\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M84.5 105.5L79 100M79 100L73.5 94.5M79 100L84.5 94.5M79 100L73.5 105.5\"\r\n className={!config?.stroke ? 'stroke-gray-gray85' : undefined}\r\n stroke={config?.stroke}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function DragIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 16}\r\n height={config?.height ?? 16}\r\n viewBox=\"0 0 21 22\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path d=\"M10.5 2L10.5 20\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M11 2L14 5\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M1 11L4 14\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M17 8L20 11\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M7 17L10 20\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M10 2L7 5\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M14 17L11 20\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M20 11L17 14\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M4 8L1 11\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M1 11L20 11\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Expand({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M10 19H5V14M14 5H19V10\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Undo({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M10 8H5V3M5.29102 16.3569C6.22284 17.7918 7.59014 18.8902 9.19218 19.4907C10.7942 20.0913 12.547 20.1624 14.1925 19.6937C15.8379 19.225 17.2893 18.2413 18.3344 16.8867C19.3795 15.5321 19.963 13.878 19.9989 12.1675C20.0347 10.4569 19.5211 8.78001 18.5337 7.38281C17.5462 5.98561 16.1366 4.942 14.5122 4.40479C12.8878 3.86757 11.1341 3.86499 9.5083 4.39795C7.88252 4.93091 6.47059 5.97095 5.47949 7.36556\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Dots({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M11 18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18C13 17.4477 12.5523 17 12 17C11.4477 17 11 17.4477 11 18Z\"\r\n className={!config?.fill ? 'fill-gray-gray10' : undefined}\r\n fill={config?.fill}\r\n />\r\n <path\r\n d=\"M11 12C11 12.5523 11.4477 13 12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12Z\"\r\n className={!config?.fill ? 'fill-gray-gray10' : undefined}\r\n fill={config?.fill}\r\n />\r\n <path\r\n d=\"M11 6C11 6.55228 11.4477 7 12 7C12.5523 7 13 6.55228 13 6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6Z\"\r\n className={!config?.fill ? 'fill-gray-gray10' : undefined}\r\n fill={config?.fill}\r\n />\r\n <path\r\n d=\"M11 18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18C13 17.4477 12.5523 17 12 17C11.4477 17 11 17.4477 11 18Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"0.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M11 12C11 12.5523 11.4477 13 12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"0.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M11 6C11 6.55228 11.4477 7 12 7C12.5523 7 13 6.55228 13 6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"0.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function SavePlus({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M17 21.0002L7 21M17 21.0002L17.8031 21C18.921 21 19.48 21 19.9074 20.7822C20.2837 20.5905 20.5905 20.2843 20.7822 19.908C21 19.4806 21 18.921 21 17.8031V9.21955C21 8.77072 21 8.54521 20.9521 8.33105C20.9095 8.14 20.8393 7.95652 20.7432 7.78595C20.6366 7.59674 20.487 7.43055 20.1929 7.10378L17.4377 4.04241C17.0969 3.66374 16.9242 3.47181 16.7168 3.33398C16.5303 3.21 16.3242 3.11858 16.1073 3.06287C15.8625 3 15.5998 3 15.075 3H6.2002C5.08009 3 4.51962 3 4.0918 3.21799C3.71547 3.40973 3.40973 3.71547 3.21799 4.0918C3 4.51962 3 5.08009 3 6.2002V17.8002C3 18.9203 3 19.4796 3.21799 19.9074C3.40973 20.2837 3.71547 20.5905 4.0918 20.7822C4.5192 21 5.07899 21 6.19691 21H7M17 21.0002V17.1969C17 16.079 17 15.5192 16.7822 15.0918C16.5905 14.7155 16.2837 14.4097 15.9074 14.218C15.4796 14 14.9203 14 13.8002 14H10.2002C9.08009 14 8.51962 14 8.0918 14.218C7.71547 14.4097 7.40973 14.7155 7.21799 15.0918C7 15.5196 7 16.0801 7 17.2002V21M15 7H9\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <circle\r\n cx=\"18.5\"\r\n cy=\"18.5\"\r\n r=\"4.75\"\r\n stroke={config?.stroke}\r\n fill={config?.fill}\r\n className={!config?.stroke && !config?.fill ? 'fill-white stroke-gray-gray3' : undefined}\r\n strokeWidth=\"1.5\"\r\n />\r\n <path\r\n d=\"M18.5 20.7498L18.5 18.3673M18.5 18.3673C18.5 18.3673 18.5 16.2498 18.5 16.0998M18.5 18.3673L20.9 18.3673M18.5 18.3673L16.1 18.3673\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"0.8\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Reload({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 16}\r\n height={config?.height ?? 16}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M10 16H5V21M14 8H19V3M4.58301 9.0034C5.14369 7.61566 6.08244 6.41304 7.29255 5.53223C8.50266 4.65141 9.93686 4.12752 11.4298 4.02051C12.9227 3.9135 14.4147 4.2274 15.7381 4.92661C17.0615 5.62582 18.1612 6.68254 18.9141 7.97612M19.4176 14.9971C18.8569 16.3848 17.9181 17.5874 16.708 18.4682C15.4979 19.3491 14.0652 19.8723 12.5723 19.9793C11.0794 20.0863 9.58606 19.7725 8.2627 19.0732C6.93933 18.374 5.83882 17.3175 5.08594 16.0239\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function MoonIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M21 14.3A8.5 8.5 0 0 1 9.7 3 7.5 7.5 0 1 0 21 14.3Z\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function SunIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <circle\r\n className={strokeClass(config)}\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"4\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n />\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M12 3v1.5M12 19.5V21M4.93 4.93l1.06 1.06M17.99 17.99l1.06 1.06M3 12h1.5M19.5 12H21M4.93 19.07l1.06-1.06M17.99 6.01l1.06-1.06\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function EditPencil({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 16}\r\n height={config?.height ?? 16}\r\n viewBox=\"0 0 20 20\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M3.3335 16.6668H16.6668M3.3335 16.6668V13.3334L10.0002 6.66676M3.3335 16.6668L6.66683 16.6667L13.3335 10.0001M10.0002 6.66676L12.3907 4.27622L12.3921 4.2748C12.7212 3.94573 12.886 3.7809 13.076 3.71917C13.2434 3.66479 13.4237 3.66479 13.5911 3.71917C13.7809 3.78086 13.9456 3.9455 14.2742 4.2741L15.724 5.72393C16.054 6.05394 16.2191 6.21903 16.2809 6.4093C16.3353 6.57667 16.3353 6.75696 16.2809 6.92433C16.2191 7.11447 16.0543 7.2793 15.7247 7.60884L15.724 7.60955L13.3335 10.0001M10.0002 6.66676L13.3335 10.0001\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\n\r\nimport { LeftChevron, RightChevron } from './icons';\r\nimport { CustomButton } from './chrome';\r\n\r\ntype Props = {\r\n current: number;\r\n pageSize: number;\r\n total: number;\r\n onChange?: (page: number) => void;\r\n onShowSizeChange?: (page: number, pageSize: number) => void;\r\n pageSizeOptions?: string[];\r\n showSizeChanger?: boolean;\r\n showTotal?: (total: number) => React.ReactNode;\r\n prevIcon?: React.ReactNode;\r\n nextIcon?: React.ReactNode;\r\n jumpNextIcon?: React.ReactNode;\r\n jumpPrevIcon?: React.ReactNode;\r\n locale?: { items_per_page?: string };\r\n showTitle?: boolean;\r\n className?: string;\r\n direction?: 'rtl' | 'ltr';\r\n};\r\n\r\nexport function Pagination({\r\n current,\r\n pageSize,\r\n total,\r\n onChange,\r\n onShowSizeChange,\r\n pageSizeOptions = ['10', '20', '50', '100'],\r\n showSizeChanger,\r\n showTotal,\r\n prevIcon,\r\n nextIcon,\r\n className,\r\n direction = 'rtl',\r\n}: Props) {\r\n const options = pageSizeOptions.includes(String(pageSize))\r\n ? pageSizeOptions\r\n : [String(pageSize), ...pageSizeOptions];\r\n const totalPages = Math.max(1, Math.ceil((total || 0) / (pageSize || 1)));\r\n const pages: Array<number | 'gap'> = [];\r\n for (let i = 1; i <= totalPages; i += 1) {\r\n if (totalPages <= 7 || i === 1 || i === totalPages || Math.abs(i - current) <= 1) {\r\n pages.push(i);\r\n } else if (pages[pages.length - 1] !== 'gap') {\r\n pages.push('gap');\r\n }\r\n }\r\n\r\n return (\r\n <div className={`erp-table-pagination ${className ?? ''}`}>\r\n {showTotal ? showTotal(total) : null}\r\n <div className=\"erp-table-pagination__pages\">\r\n <button\r\n type=\"button\"\r\n className=\"erp-table-pagination__nav\"\r\n disabled={current <= 1}\r\n onClick={() => onChange?.(current - 1)}\r\n >\r\n {prevIcon ??\r\n (direction === 'rtl' ? <RightChevron config={{ width: 14, height: 14 }} /> : <LeftChevron config={{ width: 14, height: 14 }} />)}\r\n </button>\r\n {pages.map((p, i) =>\r\n p === 'gap' ? (\r\n <span key={`g-${i}`}>...</span>\r\n ) : (\r\n <button\r\n key={p}\r\n type=\"button\"\r\n className={`erp-table-pagination__page ${p === current ? 'is-active' : ''}`}\r\n onClick={() => onChange?.(p)}\r\n >\r\n {p.toLocaleString(direction === 'rtl' ? 'fa-IR' : 'en-US')}\r\n </button>\r\n ),\r\n )}\r\n <button\r\n type=\"button\"\r\n className=\"erp-table-pagination__nav\"\r\n disabled={current >= totalPages}\r\n onClick={() => onChange?.(current + 1)}\r\n >\r\n {nextIcon ??\r\n (direction === 'rtl' ? <LeftChevron config={{ width: 14, height: 14 }} /> : <RightChevron config={{ width: 14, height: 14 }} />)}\r\n </button>\r\n </div>\r\n {showSizeChanger ? (\r\n <select\r\n value={String(pageSize)}\r\n onChange={(e) => onShowSizeChange?.(1, Number(e.target.value))}\r\n >\r\n {options.map((opt) => (\r\n <option key={opt} value={opt}>\r\n {Number(opt).toLocaleString(direction === 'rtl' ? 'fa-IR' : 'en-US')}\r\n </option>\r\n ))}\r\n </select>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n\r\nexport { CustomButton };\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\nimport { DatePicker, type DatePickerValue } from 'react-persian-range-picker';\r\n\r\nimport type { DateAdapter } from '../../application/ports/DateAdapter';\r\nimport { useDateAdapter, useERPTableTheme } from '../host';\r\n\r\ntype Props = {\r\n value?: unknown;\r\n onChange?: (value: unknown) => void;\r\n disabled?: boolean;\r\n className?: string;\r\n showMask?: boolean;\r\n /** Optional override; defaults to host `dateAdapter` (decides jalali / gregorian). */\r\n adapter?: DateAdapter;\r\n};\r\n\r\n/** Dark surfaces get the same muted highlight the arianERP host passes. */\r\nfunction isDarkBackground(color: string): boolean {\r\n const hex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(color.trim())?.[1];\r\n if (!hex) return false;\r\n const full = hex.length === 3 ? [...hex].map((c) => c + c).join('') : hex;\r\n const [r, g, b] = [0, 2, 4].map((i) => parseInt(full.slice(i, i + 2), 16));\r\n return 0.299 * r + 0.587 * g + 0.114 * b < 128;\r\n}\r\n\r\n/**\r\n * Date cell editor. Renders `DatePicker` from `react-persian-range-picker`\r\n * (required peer dependency) — the same component the arianERP host uses.\r\n * Calendar type follows the host {@link DateAdapter}: `jalali` for the\r\n * default `fa` locale, `gregorian` otherwise.\r\n *\r\n * Value contract (unchanged): timestamp in ms in, timestamp in ms (or\r\n * `null` when cleared) out.\r\n */\r\nexport function NewDatePicker({\r\n value,\r\n onChange,\r\n disabled,\r\n className,\r\n showMask,\r\n adapter: adapterProp,\r\n}: Props) {\r\n const hostAdapter = useDateAdapter();\r\n const adapter = adapterProp ?? hostAdapter;\r\n const theme = useERPTableTheme();\r\n const dark = isDarkBackground(theme.params.backgroundColor);\r\n\r\n return (\r\n <DatePicker\r\n value={\r\n typeof value === 'number' || typeof value === 'string'\r\n ? (value as DatePickerValue)\r\n : null\r\n }\r\n onChange={(next) => onChange?.(next)}\r\n className={`pdg-date-picker ${disabled ? 'is-disabled' : ''} ${className ?? ''}`}\r\n Style={{ width: '100%' }}\r\n showMask={showMask}\r\n disabled={disabled}\r\n isTodaySelectPreset={false}\r\n highlightColor={dark ? '#676767' : undefined}\r\n calendarType={adapter.id === 'gregory' ? 'gregorian' : 'jalali'}\r\n />\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nimport { resolveCellAddressFromPoint } from '../../infrastructure/ui/gridFillHandle';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\n\r\ntype FillHandleProps = {\r\n controller: UITableController;\r\n};\r\n\r\nexport function FillHandle({ controller }: FillHandleProps) {\r\n const onPointerDown = (event: React.PointerEvent<HTMLButtonElement>) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const copyOnly = event.ctrlKey;\r\n const handle = event.currentTarget;\r\n handle.setPointerCapture(event.pointerId);\r\n\r\n const onPointerUp = async (ev: PointerEvent) => {\r\n if (handle.hasPointerCapture(ev.pointerId)) {\r\n handle.releasePointerCapture(ev.pointerId);\r\n }\r\n window.removeEventListener('pointerup', onPointerUp);\r\n const cell = resolveCellAddressFromPoint(ev.clientX, ev.clientY);\r\n if (!cell) return;\r\n await controller.applyFillHandleDrag(\r\n { rowIndex: cell.rowIndex, colIndex: cell.colIndex },\r\n copyOnly,\r\n );\r\n };\r\n\r\n window.addEventListener('pointerup', onPointerUp);\r\n };\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className=\"pdg-fill-handle\"\r\n aria-label=\"Fill handle\"\r\n title=\"Drag to fill. Ctrl+drag to copy.\"\r\n onPointerDown={onPointerDown}\r\n />\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\n\r\nimport type { DateAdapter } from '../application/ports/DateAdapter';\r\nimport { FieldType } from '../bootstrap/type';\r\nimport {\r\n formatLocaleNumber,\r\n translate,\r\n type ERPTableLocale,\r\n type NumberingSystem,\r\n} from './host/messages';\r\n\r\nexport type FormatLocaleOptions = {\r\n locale?: ERPTableLocale;\r\n numberingSystem?: NumberingSystem;\r\n dateAdapter?: DateAdapter;\r\n};\r\n\r\n/** @deprecated Digits come from Intl numberingSystem (PR-127). Kept for search highlight. */\r\nexport function toFaDigits(value: string): string {\r\n const FA_DIGITS =\r\n '\\u06F0\\u06F1\\u06F2\\u06F3\\u06F4\\u06F5\\u06F6\\u06F7\\u06F8\\u06F9';\r\n return value.replace(/\\d/g, (digit) => FA_DIGITS[Number(digit)] ?? digit);\r\n}\r\n\r\nexport function formatGroupedNumber(\r\n val: unknown,\r\n locale: ERPTableLocale = 'fa',\r\n numberingSystem?: NumberingSystem,\r\n): string {\r\n if (val == null || val === '') return '';\r\n const n = Number(val);\r\n if (!Number.isFinite(n)) return String(val);\r\n return formatLocaleNumber(n, {\r\n locale,\r\n numberingSystem,\r\n useGrouping: true,\r\n });\r\n}\r\n\r\nexport function formatDisplayNumber(\r\n val: unknown,\r\n locale: ERPTableLocale = 'fa',\r\n numberingSystem?: NumberingSystem,\r\n): string {\r\n if (val == null || val === '') return '';\r\n const n = Number(val);\r\n if (Number.isFinite(n) && String(val).trim() !== '' && !Number.isNaN(n)) {\r\n if (/^-?\\d+(\\.\\d+)?$/.test(String(val).trim())) {\r\n return formatLocaleNumber(n, {\r\n locale,\r\n numberingSystem,\r\n useGrouping: false,\r\n });\r\n }\r\n }\r\n return String(val);\r\n}\r\n\r\nexport function formatJalaliDate(\r\n val: unknown,\r\n options?: FormatLocaleOptions,\r\n): string | null {\r\n if (val == null || val === '') return null;\r\n if (options?.dateAdapter) {\r\n const date = options.dateAdapter.parse(val);\r\n return date ? options.dateAdapter.format(date) : null;\r\n }\r\n const date =\r\n typeof val === 'number' ? new Date(val) : new Date(String(val));\r\n if (Number.isNaN(date.getTime())) return null;\r\n const locale = options?.locale ?? 'fa';\r\n const ns = options?.numberingSystem;\r\n return new Intl.DateTimeFormat(locale === 'fa' ? 'fa-IR' : 'en-US', {\r\n calendar: locale === 'fa' ? 'persian' : 'gregory',\r\n numberingSystem: ns,\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n }).format(date);\r\n}\r\n\r\nexport const valueParser = (\r\n val: unknown,\r\n type: FieldType,\r\n locale: ERPTableLocale = 'fa',\r\n numberingSystem?: NumberingSystem,\r\n dateAdapter?: DateAdapter,\r\n): ReactNode => {\r\n if (val == null) {\r\n return type === 'selectOption'\r\n ? translate('general.selectPlaceholder', locale)\r\n : '';\r\n }\r\n\r\n switch (type) {\r\n case 'text':\r\n case 'textArea':\r\n case 'description':\r\n case 'number':\r\n case 'select':\r\n case 'selectOption':\r\n case 'static':\r\n return formatDisplayNumber(val, locale, numberingSystem);\r\n\r\n case 'checkbox':\r\n return val ? '✔' : '✘';\r\n\r\n case 'price':\r\n return formatGroupedNumber(val, locale, numberingSystem);\r\n\r\n case 'date':\r\n return formatJalaliDate(val, { locale, numberingSystem, dateAdapter });\r\n\r\n default:\r\n return '—';\r\n }\r\n};\r\n","import React from 'react';\r\n\r\nimport { toFaDigits } from '../helper';\r\n\r\nfunction findHighlightRange(\r\n display: string,\r\n query: string,\r\n): { index: number; length: number } | null {\r\n const lowerText = display.toLowerCase();\r\n const seen = new Set<string>();\r\n for (const candidate of [query, toFaDigits(query)]) {\r\n const needle = candidate.toLowerCase();\r\n if (!needle || seen.has(needle)) continue;\r\n seen.add(needle);\r\n const index = lowerText.indexOf(needle);\r\n if (index !== -1) return { index, length: candidate.length };\r\n }\r\n return null;\r\n}\r\n\r\n/** Read-only cell text: wrap the current grid-search hit, otherwise return the string. */\r\nexport function highlightIfCurrentSearch(\r\n text: unknown,\r\n query: string | undefined,\r\n isCurrent: boolean | undefined,\r\n): React.ReactNode {\r\n const display = text == null ? '' : String(text);\r\n if (isCurrent && query?.trim()) {\r\n return highlightSearchText(display, query, true);\r\n }\r\n return display;\r\n}\r\n\r\nexport function highlightSearchText(\r\n text: unknown,\r\n query: string,\r\n isCurrent: boolean,\r\n): React.ReactNode {\r\n const display = text == null ? '' : String(text);\r\n const q = query.trim();\r\n if (!q) return display;\r\n\r\n const range = findHighlightRange(display, q);\r\n if (!range) return display;\r\n\r\n const markClass = isCurrent ? 'erp-search-hit is-current' : 'erp-search-hit';\r\n\r\n return (\r\n <>\r\n {display.slice(0, range.index)}\r\n <mark className={markClass}>\r\n {display.slice(range.index, range.index + range.length)}\r\n </mark>\r\n {display.slice(range.index + range.length)}\r\n </>\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\n\r\nimport type { ColumnSchema, DefaultOptionType } from '../../bootstrap/type';\r\nimport type { ValidCell } from '../../engine/type';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { UIRow } from '../type';\r\n\r\n/**\r\n * Argument passed to `ColumnSchema.render` / `ColumnViewBinding.render`.\r\n * Built-in FieldType editors are skipped when `render` is set.\r\n */\r\nexport interface CellRenderContext {\r\n tableKey: string;\r\n row: UIRow;\r\n columnId: string;\r\n meta: ColumnSchema;\r\n controller: UITableController;\r\n value: unknown;\r\n display: unknown;\r\n isActive: boolean;\r\n isDeleted: boolean;\r\n isEditable: boolean;\r\n mode: 'view' | 'cell' | 'form';\r\n tabIndex: number;\r\n validation: ValidCell;\r\n dispatchChangeValue: (newValue: unknown, option?: DefaultOptionType) => void;\r\n dispatchChangeDisplay: (label: string | null) => void;\r\n activeCell: () => void;\r\n /** Current grid-search query when this cell is the active hit (PR-71). */\r\n searchQuery?: string;\r\n isCurrentSearchMatch?: boolean;\r\n}\r\n\r\nexport type CustomCellResolveResult =\r\n | { hit: false }\r\n | { hit: true; node: ReactNode };\r\n\r\n/**\r\n * PR-54: custom `render` wins over the FieldType switch.\r\n * `returnDisplayValue` is not a renderer — it stays the engine display formatter.\r\n */\r\nexport function resolveCustomCellNode(\r\n meta: Pick<ColumnSchema, 'render'> | undefined,\r\n ctx: CellRenderContext,\r\n): CustomCellResolveResult {\r\n if (typeof meta?.render !== 'function') {\r\n return { hit: false };\r\n }\r\n return { hit: true, node: (meta.render(ctx) ?? null) as ReactNode };\r\n}\r\n","import { highlightIfCurrentSearch } from '../gridSearch/highlightText';\r\nimport type { CellRenderContext } from './cellRenderContext';\r\n\r\n/**\r\n * Default `textArea` editor (PR-56). Registered in DEFAULT_CELL_COMPONENTS —\r\n * not a `switch (FieldType)` case in CellRenderer.\r\n */\r\nexport function TextAreaCell(ctx: CellRenderContext) {\r\n const showSearchHit = !!(\r\n ctx.isCurrentSearchMatch && ctx.searchQuery?.trim()\r\n );\r\n const editing =\r\n !showSearchHit &&\r\n (ctx.mode === 'form' || (ctx.mode === 'cell' && ctx.isActive));\r\n const disabled = ctx.isDeleted || !ctx.isEditable;\r\n const text = ctx.value == null ? '' : String(ctx.value);\r\n\r\n if (!editing || disabled) {\r\n return (\r\n <span className=\"whitespace-pre-wrap break-words py-1 text-start\">\r\n {showSearchHit\r\n ? highlightIfCurrentSearch(text, ctx.searchQuery, true)\r\n : text || (ctx.mode === 'view' ? '—' : '')}\r\n </span>\r\n );\r\n }\r\n\r\n return (\r\n <textarea\r\n data-erp-cell-textarea\r\n autoFocus={ctx.mode !== 'form'}\r\n disabled={disabled}\r\n value={text}\r\n rows={2}\r\n className={`pdg-cell-editor w-full min-h-9 py-1 text-xs bg-transparent resize-none ${\r\n ctx.isDeleted ? 'cursor-not-allowed' : ''\r\n }`}\r\n onChange={(e) => ctx.dispatchChangeValue(e.target.value)}\r\n onClick={() => ctx.activeCell()}\r\n />\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\n\r\nimport type { ColumnSchema, FieldType } from '../../bootstrap/type';\r\nimport {\r\n resolveCustomCellNode,\r\n type CellRenderContext,\r\n type CustomCellResolveResult,\r\n} from './cellRenderContext';\r\nimport { TextAreaCell } from './TextAreaCell';\r\n\r\nexport type CellComponent = (ctx: CellRenderContext) => ReactNode;\r\n\r\n/**\r\n * Built-in FieldType keys plus free strings for host cell types (PR-56 `textArea`, …).\r\n */\r\nexport type CellComponentMap = Partial<Record<FieldType, CellComponent>> & {\r\n [customType: string]: CellComponent | undefined;\r\n};\r\n\r\nexport function resolveRegisteredCellNode(\r\n fieldType: string | undefined,\r\n components: CellComponentMap | undefined,\r\n ctx: CellRenderContext,\r\n): CustomCellResolveResult {\r\n if (!fieldType || !components) {\r\n return { hit: false };\r\n }\r\n const render = components[fieldType];\r\n if (typeof render !== 'function') {\r\n return { hit: false };\r\n }\r\n return { hit: true, node: (render(ctx) ?? null) as ReactNode };\r\n}\r\n\r\n/** Built-in registry. Host `components` override these keys. */\r\nexport const DEFAULT_CELL_COMPONENTS: CellComponentMap = {\r\n textArea: TextAreaCell,\r\n};\r\n\r\nexport function mergeCellComponents(\r\n host?: CellComponentMap,\r\n): CellComponentMap {\r\n return { ...DEFAULT_CELL_COMPONENTS, ...host };\r\n}\r\n\r\n/**\r\n * Column `render` (PR-54) wins; then `components[fieldType]` (PR-55/56);\r\n * miss → built-in FieldType switch.\r\n */\r\nexport function resolveBoundCellNode(\r\n meta: Pick<ColumnSchema, 'render' | 'fieldType'> | undefined,\r\n components: CellComponentMap | undefined,\r\n ctx: CellRenderContext,\r\n): CustomCellResolveResult {\r\n const column = resolveCustomCellNode(meta, ctx);\r\n if (column.hit) {\r\n return column;\r\n }\r\n return resolveRegisteredCellNode(\r\n meta?.fieldType,\r\n mergeCellComponents(components),\r\n ctx,\r\n );\r\n}\r\n","\"use client\";\r\nimport React, {\r\n forwardRef,\r\n Ref,\r\n useMemo,\r\n} from 'react';\r\n\r\nimport { ColumnSchema } from '../../../bootstrap/type';\r\nimport {\r\n UITableController,\r\n} from '../../../infrastructure/ui/UITableController';\r\nimport {\r\n buildDependencyBody,\r\n getDependFieldName,\r\n getStaticDependValue,\r\n hasDependValue,\r\n useHostDependOn,\r\n useLocale,\r\n useRemoteQuery,\r\n type DependValueResolver,\r\n} from '../../host';\r\nimport { highlightIfCurrentSearch } from '../../gridSearch/highlightText';\r\nimport {\r\n CustomDropdownButton,\r\n CustomTooltip,\r\n Dots,\r\n SavePlus,\r\n} from '../../primitives';\r\nimport { UIRow } from '../../type';\r\nimport {\r\n VoucherTypeApiResponse,\r\n} from './type';\r\n\r\nexport interface DescriptionComponentProps extends React.HTMLAttributes<HTMLDivElement> {\r\n disabled?: boolean;\r\n value?: unknown;\r\n onChange?: (e: unknown) => void;\r\n meta: ColumnSchema;\r\n controller: UITableController;\r\n tableKey: string;\r\n row: UIRow;\r\n columnId: string;\r\n idx: number;\r\n inputRef: Ref<HTMLInputElement | null>;\r\n isDeleted: boolean;\r\n editable: boolean;\r\n blockDrag: (e: React.DragEvent) => void;\r\n dispatchChangeValue: (newValue: unknown) => void;\r\n activeCell: () => void;\r\n searchQuery?: string;\r\n isCurrentSearchMatch?: boolean;\r\n}\r\nexport interface IDesc {\r\n AccountDescItemId: number;\r\n AccountDescId: number;\r\n Desc: string;\r\n}\r\n\r\nexport const DescriptionComponent = forwardRef<\r\n HTMLDivElement,\r\n DescriptionComponentProps\r\n>((props, ref) => {\r\n const locale = useLocale();\r\n const {\r\n meta,\r\n controller,\r\n tableKey,\r\n row,\r\n columnId,\r\n idx,\r\n inputRef,\r\n isDeleted,\r\n editable,\r\n value,\r\n blockDrag,\r\n dispatchChangeValue,\r\n activeCell,\r\n searchQuery,\r\n isCurrentSearchMatch,\r\n } = props;\r\n const showSearchHit = !!(isCurrentSearchMatch && searchQuery?.trim());\r\n const { endpoint, dependOn } = meta.dynamicSource ?? {};\r\n\r\n // Static value first, then the value the host resolves for that field\r\n // (e.g. the active page's form field).\r\n const { dependencyBody: hostValues } = useHostDependOn(dependOn, {\r\n enabled: true,\r\n });\r\n const resolveDepend: DependValueResolver = (item) =>\r\n getStaticDependValue(item) ?? hostValues[getDependFieldName(item)];\r\n const isReady = hasDependValue(dependOn, resolveDepend);\r\n const dependencyBody = buildDependencyBody(dependOn, resolveDepend);\r\n const { data: menuData } = useRemoteQuery<VoucherTypeApiResponse>({\r\n url: endpoint,\r\n body: {\r\n ...dependencyBody,\r\n RepoViewId: 0,\r\n RepoId: 0,\r\n PagingInfo: {\r\n PageNumber: 1,\r\n PageRecordCount: 10000,\r\n },\r\n },\r\n skip: !isReady,\r\n });\r\n const items = useMemo(\r\n () =>\r\n menuData?.Data?.map((item, index) => ({\r\n key: String(index),\r\n label: item.Desc,\r\n onClick: () => {\r\n meta.onChange?.(tableKey, row.id, row, controller,item.Desc);\r\n controller?.dispatch({\r\n type: \"UI_CELL_CHANGE\",\r\n rowId: row.id,\r\n columnId,\r\n value: item.Desc,\r\n });\r\n },\r\n })) || [],\r\n [menuData?.Data],\r\n );\r\nconst handleSaveDescription = ()=>{\r\n controller?.dispatch({\r\n type: \"UI_DESCRIPTION_SAVE\",\r\n rowId: row.id,\r\n flag:true\r\n });\r\n}\r\n return (\r\n <div className=\"flex justify-between items-center w-full\">\r\n {showSearchHit ? (\r\n <span\r\n className={`px-2 w-full text-xs truncate ${\r\n isDeleted ? 'cursor-not-allowed' : ''\r\n } ${meta.className ?? ''}`}\r\n onClick={() => activeCell()}\r\n >\r\n {highlightIfCurrentSearch(value, searchQuery, true)}\r\n </span>\r\n ) : (\r\n <input\r\n key={idx}\r\n ref={inputRef}\r\n disabled={isDeleted || !editable}\r\n value={value == null ? \"\" : String(value)}\r\n className={`${isDeleted && \"cursor-not-allowed\"}\r\n pdg-cell-editor bg-transparent px-2\r\n ring-0 focus:!ring-0 focus:ring-offset-0 transition-colors !h-full w-full text-xs ${meta.className}`}\r\n draggable={false}\r\n onDragStart={blockDrag}\r\n onDragOver={blockDrag}\r\n onDrop={blockDrag}\r\n onChange={(e) => dispatchChangeValue(e.target.value)}\r\n onClick={() => activeCell()}\r\n />\r\n )}\r\n\r\n <CustomDropdownButton\r\n placement={locale !== \"fa\" ? \"bottomRight\" : \"bottomLeft\"}\r\n className=\"flex justify-center items-center bg-gray-gray3 dark:!bg-gray-gray11 p-0 rounded !h-9 cursor-pointer\"\r\n items={items}\r\n dropdownClassName=\"max-h-[20rem] max-w-[40vw]\"\r\n >\r\n <span className=\"cursor-pointer\" id=\"descriptionsList\">\r\n <Dots />\r\n </span>\r\n </CustomDropdownButton>\r\n\r\n <CustomTooltip\r\n // title={isDisabled ? t(\"general.notActive\") : t(\"general.save\")}\r\n // className={`\r\n // bg-gray-gray3 flex justify-center items-center w-[2.125rem] h-[2.125rem] rounded\r\n // ${isDisabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"}\r\n // `}\r\n >\r\n <button\r\n onClick={() => {\r\n // if (!isDisabled) {\r\n handleSaveDescription();\r\n // }\r\n }}\r\n >\r\n <SavePlus\r\n config={{\r\n width: 18,\r\n height: 18,\r\n stroke: \"black\",\r\n }}\r\n />\r\n </button>\r\n </CustomTooltip>\r\n </div>\r\n );\r\n});\r\n\r\nDescriptionComponent.displayName = \"DescriptionComponent\";\r\n","\"use client\";\r\n\r\nimport React, { FC, useEffect, useMemo, useRef, useState } from 'react';\r\n\r\nimport {\r\n useHostDependOn,\r\n useLazyRemote,\r\n useTranslations,\r\n} from '../host';\r\nimport type { DependOn } from '../host/dependOn';\r\nimport { Reload, Select } from '../primitives';\r\nimport type { SelectOption as UiSelectOption } from '../primitives/Select';\r\n\r\n/**\r\n * Behavioural port of arianERP `atoms/defaultElements/dynamicSelect` (+ its\r\n * `CustomSelect` wrapper) onto the dependency-free `Select` primitive.\r\n * Redux / form-field (`config`), mobile and \"add new\" specifics are host\r\n * concerns and are intentionally not part of the package.\r\n */\r\n\r\ntype RemoteSelectOption = {\r\n _SelectId: string | number;\r\n _SelectValue?: string;\r\n _SelectDisplay?: string;\r\n};\r\nexport type MappedSelectOption = {\r\n key: string | number;\r\n value: string | number;\r\n label?: string;\r\n title?: string;\r\n option?: RemoteSelectOption;\r\n children?: MappedSelectOption[];\r\n};\r\ntype DynamicSelectSource = {\r\n endpoint?: string;\r\n repoViewId?: string;\r\n dependOn?: DependOn;\r\n [key: string]: unknown;\r\n};\r\n\r\nexport interface ERPTableDynamicSelectProps {\r\n className?: string;\r\n value?: unknown;\r\n onChange?: (value: unknown, option?: unknown) => void;\r\n dynamicValue?: DynamicSelectSource;\r\n showId?: boolean;\r\n infinite?: boolean;\r\n onSearchPhrase?: (\r\n correctOptionValue: number,\r\n correctOptionTitle?: string,\r\n option?: unknown,\r\n ) => void;\r\n /** Accepted for API parity; the select is always searchable (as in the host). */\r\n showSearch?: boolean;\r\n onOptionsChange?: (options: MappedSelectOption[]) => void;\r\n labelValue?: 'selectDisplay' | 'selectValue';\r\n selectFirstDefault?: boolean;\r\n displayFormatter?: (option: RemoteSelectOption) => string | undefined;\r\n disabled?: boolean;\r\n /** Reload icon. Shown unless explicitly `false` (host default). */\r\n showRefetch?: boolean;\r\n noCache?: boolean;\r\n /** Filters the loaded option list itself (e.g. `isUnique` columns). */\r\n filterOptions?: (option: MappedSelectOption) => boolean;\r\n /** Search-box matcher. Default: case-insensitive `label` contains. */\r\n filterOption?: (input: string, option: UiSelectOption) => boolean;\r\n options?: MappedSelectOption[];\r\n /** Label shown for `value` while it is not (yet) in the loaded options. */\r\n valueLabel?: string;\r\n onClear?: () => void;\r\n onClick?: () => void;\r\n autoFocus?: boolean;\r\n popupMatchSelectWidth?: number | boolean;\r\n popupRender?: (menu: React.ReactNode) => React.ReactNode;\r\n placeholder?: React.ReactNode;\r\n allowClear?: boolean;\r\n onSearch?: (value: string) => void;\r\n}\r\n\r\nconst PAGE_RECORD_COUNT = 5000;\r\nconst DEPEND_DEBOUNCE_MS = 808;\r\n\r\nconst findOptionWithTitle = (data: MappedSelectOption[], searchTerm: string) => {\r\n const results: MappedSelectOption[] = [];\r\n const search = (items: MappedSelectOption[]) => {\r\n items.forEach((item) => {\r\n if (\r\n String(item?.title ?? '').includes(searchTerm) ||\r\n String(item?.label ?? '').includes(searchTerm)\r\n ) {\r\n results.push(item);\r\n }\r\n if (item.children && item.children.length > 0) search(item.children);\r\n });\r\n };\r\n search(data);\r\n return results;\r\n};\r\n\r\nexport const ERPTableDynamicSelect: FC<ERPTableDynamicSelectProps> = ({\r\n className,\r\n value,\r\n onChange,\r\n dynamicValue,\r\n showId = false,\r\n infinite = false,\r\n onSearchPhrase,\r\n showSearch = true,\r\n onOptionsChange,\r\n labelValue = 'selectDisplay',\r\n selectFirstDefault = false,\r\n displayFormatter,\r\n disabled,\r\n showRefetch,\r\n filterOptions,\r\n valueLabel,\r\n options: externalOptions,\r\n onClear,\r\n onClick,\r\n autoFocus,\r\n popupMatchSelectWidth,\r\n popupRender,\r\n filterOption,\r\n placeholder,\r\n allowClear,\r\n onSearch,\r\n}) => {\r\n const t = useTranslations();\r\n const [options, setOptions] = useState<MappedSelectOption[]>([]);\r\n const [searchPhrase, setSearchPhrase] = useState<string | null>(null);\r\n const [pageNumber, setPageNumber] = useState(1);\r\n\r\n const {\r\n endpoint,\r\n repoViewId,\r\n // UI-only flag of the host's select config; never part of the request body.\r\n addButton: _addButton,\r\n dependOn,\r\n ...bodyRequest\r\n } = dynamicValue ?? {};\r\n\r\n const getOptionLabel = (option: RemoteSelectOption) => {\r\n if (displayFormatter) return displayFormatter(option);\r\n return option._SelectDisplay;\r\n };\r\n\r\n const [getData, { data, isFetching }] = useLazyRemote<RemoteSelectOption[]>();\r\n const { dependencyBody, dependencyKey, isReady } = useHostDependOn(dependOn, {\r\n enabled: false,\r\n unwrapObjectValue: true,\r\n });\r\n\r\n const body = {\r\n ...bodyRequest,\r\n ...dependencyBody,\r\n PagingInfo: infinite\r\n ? { PageRecordCount: PAGE_RECORD_COUNT, PageNumber: pageNumber }\r\n : null,\r\n RepoViewId: repoViewId,\r\n };\r\n const existBody = Object.fromEntries(\r\n Object.entries(body).filter(([, v]) => v !== null),\r\n );\r\n\r\n const handleRefetch = () => {\r\n setPageNumber(1);\r\n if (dependOn && !isReady) return;\r\n void getData({ url: endpoint, body: existBody });\r\n };\r\n\r\n useEffect(() => {\r\n if (!data?.Data) return;\r\n const dynamicOptions: MappedSelectOption[] = data.Data.map((option) => ({\r\n key: option._SelectId,\r\n value: option._SelectId,\r\n label:\r\n labelValue === 'selectValue'\r\n ? option._SelectValue\r\n : getOptionLabel(option),\r\n title: getOptionLabel(option),\r\n option,\r\n }));\r\n if (infinite) {\r\n if (pageNumber === 1) {\r\n setOptions(dynamicOptions);\r\n } else {\r\n setOptions((prev) => [...prev, ...dynamicOptions]);\r\n if (showId && selectFirstDefault) onChange?.(dynamicOptions[0]?.value);\r\n }\r\n } else {\r\n setOptions(dynamicOptions);\r\n }\r\n }, [data?.Data]);\r\n\r\n useEffect(() => {\r\n if (infinite && searchPhrase && searchPhrase.length > 2) setPageNumber(1);\r\n }, [searchPhrase]);\r\n\r\n useEffect(() => {\r\n if (onOptionsChange && options) onOptionsChange(options);\r\n if (selectFirstDefault) onChange?.(options[0]?.value);\r\n }, [options, onOptionsChange]);\r\n\r\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\r\n const target = e.currentTarget;\r\n const bottom = target.scrollHeight === target.scrollTop + target.clientHeight;\r\n if (infinite && bottom && !isFetching) {\r\n data?.ReturnCount === PAGE_RECORD_COUNT && setPageNumber((prev) => prev + 1);\r\n }\r\n };\r\n\r\n const filteredOptions = useMemo(() => {\r\n const source = externalOptions ?? options;\r\n if (!filterOptions) return source;\r\n return source.filter(filterOptions);\r\n }, [externalOptions, options, filterOptions]);\r\n\r\n const { selectOptions, selectValue } = useMemo(() => {\r\n if (value === null || value === undefined || value === '') {\r\n return { selectOptions: filteredOptions, selectValue: value };\r\n }\r\n const matched = filteredOptions.find(\r\n (option) => String(option.value) === String(value),\r\n );\r\n if (matched) {\r\n return { selectOptions: filteredOptions, selectValue: matched.value };\r\n }\r\n if (valueLabel) {\r\n return {\r\n selectOptions: [\r\n ...filteredOptions,\r\n { key: value as string | number, value: value as string | number, label: valueLabel, title: valueLabel },\r\n ],\r\n selectValue: value,\r\n };\r\n }\r\n return { selectOptions: filteredOptions, selectValue: value };\r\n }, [filteredOptions, value, valueLabel]);\r\n\r\n useEffect(() => {\r\n if (value === null || value === undefined) {\r\n setSearchPhrase(null);\r\n setPageNumber(1);\r\n }\r\n }, [value]);\r\n\r\n const dependOnKey = useMemo(\r\n () => (dependOn ? JSON.stringify(dependOn) : null),\r\n [dependOn],\r\n );\r\n\r\n const isFirstDependRun = useRef(true);\r\n useEffect(() => {\r\n if (isFirstDependRun.current) {\r\n isFirstDependRun.current = false;\r\n return undefined;\r\n }\r\n const debounce = setTimeout(() => {\r\n if (dependOn && isReady) {\r\n void getData({ url: endpoint, body: existBody });\r\n }\r\n }, DEPEND_DEBOUNCE_MS);\r\n return () => clearTimeout(debounce);\r\n }, [dependOnKey, dependencyKey]);\r\n\r\n useEffect(() => {\r\n if (isReady) void getData({ url: endpoint, body: existBody });\r\n }, []);\r\n\r\n return (\r\n <div className=\"relative\">\r\n <Select\r\n className={`pdg-dynamic-select ${disabled ? 'is-disabled' : ''} ${className ?? ''}`}\r\n value={selectValue}\r\n disabled={disabled}\r\n showSearch\r\n allowClear={allowClear ?? true}\r\n autoFocus={autoFocus}\r\n popupMatchSelectWidth={popupMatchSelectWidth}\r\n popupRender={popupRender}\r\n placeholder={\r\n placeholder ??\r\n (showSearch ? t('general.search') : t('general.selectField'))\r\n }\r\n optionRender={(originNode) => (\r\n <div\r\n style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', height: 'fit-content' }}\r\n >\r\n <span>{originNode.data.title}</span>\r\n </div>\r\n )}\r\n filterOption={(input, option) => {\r\n if (filterOption && typeof filterOption === 'function') {\r\n return filterOption(input, option);\r\n }\r\n const label = option?.label;\r\n return (\r\n typeof label === 'string' &&\r\n label.toLowerCase().includes(input.toLowerCase())\r\n );\r\n }}\r\n onClick={onClick}\r\n onChange={onChange}\r\n onSearch={(currentValue) => {\r\n if (infinite) {\r\n setSearchPhrase(currentValue);\r\n const correctOption = findOptionWithTitle(options, currentValue);\r\n if (correctOption.length === 1 && onSearchPhrase) {\r\n onSearchPhrase(\r\n correctOption[0].value as number,\r\n correctOption[0]?.title,\r\n correctOption,\r\n );\r\n return;\r\n }\r\n }\r\n onSearch?.(currentValue);\r\n }}\r\n onPopupScroll={handleScroll}\r\n onClear={() => {\r\n if (infinite) {\r\n setSearchPhrase('');\r\n setPageNumber(1);\r\n }\r\n onClear?.();\r\n }}\r\n options={selectOptions}\r\n notFoundContent={isFetching ? 'Loading...' : 'No options found'}\r\n />\r\n {showRefetch !== false && (\r\n <div\r\n className={`${isFetching ? 'animate-spin' : ''} ${disabled ? 'opacity-50' : 'opacity-100'}`}\r\n style={{ position: 'absolute', top: '0.65rem', left: '2rem', cursor: 'pointer', transition: 'all 0.4s' }}\r\n onClick={handleRefetch}\r\n >\r\n <Reload config={{ height: 16, width: 16 }} />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","\"use client\";\r\nimport React, { useEffect } from 'react';\r\n\r\nimport {\r\n ColumnSchema,\r\n DefaultOptionType,\r\n} from '../../bootstrap/type';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\nimport { ValidCell } from '../../engine/type';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { highlightIfCurrentSearch } from '../gridSearch/highlightText';\r\nimport { valueParser } from '../helper';\r\nimport {\r\n useDateAdapter,\r\n useERPTableHost,\r\n useNumberingSystem,\r\n} from '../host';\r\nimport { useGridSearchState } from '../hooks/useEngineSelector';\r\nimport {\r\n CustomCheckbox,\r\n InfoIcon,\r\n NewDatePicker,\r\n Select,\r\n Tooltip,\r\n} from '../primitives';\r\nimport { UIRow } from '../type';\r\nimport { type CellRenderContext } from './cellRenderContext';\r\nimport { resolveBoundCellNode } from './cellRegistry';\r\nimport { DescriptionComponent } from './descriptionComponent';\r\nimport { ERPTableDynamicSelect as DynamicSelect } from './ERPTableDynamicSelect';\r\n\r\nexport type { CellRenderContext } from './cellRenderContext';\r\nexport { resolveCustomCellNode } from './cellRenderContext';\r\nexport type { CellComponent, CellComponentMap } from './cellRegistry';\r\nexport {\r\n DEFAULT_CELL_COMPONENTS,\r\n mergeCellComponents,\r\n resolveBoundCellNode,\r\n resolveRegisteredCellNode,\r\n} from './cellRegistry';\r\nexport { TextAreaCell } from './TextAreaCell';\r\nexport {\r\n highlightIfCurrentSearch,\r\n highlightSearchText,\r\n} from '../gridSearch/highlightText';\r\n\r\n/* ======================================================\r\n Types\r\n ====================================================== */\r\n\r\ninterface CellRendererProps {\r\n tableKey: string;\r\n row: UIRow;\r\n columnId: string;\r\n idx: number;\r\n meta?: ColumnSchema;\r\n controller: UITableController;\r\n tabIndex: number;\r\n mode?: \"view\" | \"cell\" | \"form\";\r\n}\r\n\r\n/* ======================================================\r\n Cell Renderer\r\n ====================================================== */\r\n\r\n/** A cell without column meta renders nothing (the body keeps a stable hook order). */\r\nexport const CellRenderer: React.FC<CellRendererProps> = (props) =>\r\n props.meta ? <CellRendererBody {...props} meta={props.meta} /> : null;\r\n\r\nconst CellRendererBody: React.FC<CellRendererProps & { meta: ColumnSchema }> = ({\r\n tableKey,\r\n row,\r\n columnId,\r\n meta,\r\n controller,\r\n tabIndex,\r\n idx,\r\n mode = \"cell\",\r\n}) => {\r\n const dateHostRef = React.useRef<HTMLDivElement | null>(null);\r\n const { locale, components } = useERPTableHost();\r\n const numberingSystem = useNumberingSystem();\r\n const dateAdapter = useDateAdapter();\r\n const searchState = useGridSearchState(controller);\r\n const disable =\r\n typeof row.visibilityCondition[columnId] === \"boolean\" &&\r\n row.visibilityCondition[columnId] === false;\r\n const viewCell = controller.getCell(row.id, columnId);\r\n const draft = controller.getEditDraft(row.id, columnId);\r\n const value = draft ? draft.value : viewCell?.getValue();\r\n const display = draft ? draft.display : viewCell?.getDisplay();\r\n const isActive = controller.isActiveCell(row.id, columnId);\r\n const isEditing = controller.isEditingCell(row.id, columnId);\r\n const validation: ValidCell = controller.isValidCell(row.id, columnId) ?? {\r\n isValid: true,\r\n cellError: { rowId: row.id, caption: meta.fieldCaption, message: '' },\r\n };\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n const dispatchChangeValue = (\r\n newValue: unknown,\r\n option?: DefaultOptionType,\r\n ) => {\r\n meta.onChange?.(tableKey, row.id, row, controller, newValue, option);\r\n controller.dispatch({\r\n type: \"UI_CELL_CHANGE\",\r\n rowId: row.id,\r\n columnId,\r\n value: newValue,\r\n });\r\n };\r\n const dispatchChangeDisplay = (label: string | null) => {\r\n controller.dispatch({\r\n type: \"UI_CELL_CHANGE_DISPLAY\",\r\n rowId: row.id,\r\n columnId,\r\n value: label ?? '',\r\n });\r\n };\r\n const activeCell = (e?: React.MouseEvent) => {\r\n controller.dispatch({\r\n type: 'UI_ACTIVE_CELL',\r\n rowId: row.id,\r\n columnId,\r\n shiftKey: e?.shiftKey,\r\n ctrlKey: Boolean(e?.ctrlKey || e?.metaKey),\r\n });\r\n };\r\n const startEdit = () => {\r\n controller.startCellEdit(row.id, columnId);\r\n };\r\n\r\n const type = meta.fieldType;\r\n const isEditable = meta.editable !== false;\r\n const isDeleted = row.rowState === RowStateEnum.Deleted;\r\n const isCurrentSearchMatch =\r\n !!searchState &&\r\n searchState.currentIndex >= 0 &&\r\n searchState.matches[searchState.currentIndex]?.rowId === row.id &&\r\n searchState.matches[searchState.currentIndex]?.columnId === columnId;\r\n\r\n const renderCellContent = (cellText: unknown) => {\r\n const parsed = valueParser(\r\n cellText,\r\n meta.fieldType,\r\n locale,\r\n numberingSystem,\r\n dateAdapter,\r\n );\r\n return highlightIfCurrentSearch(\r\n parsed,\r\n searchState?.query,\r\n isCurrentSearchMatch,\r\n );\r\n };\r\n\r\n const blockDrag = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n\r\n useEffect(() => {\r\n const shouldFocus = mode === \"form\" || (mode === \"cell\" && isEditing);\r\n if (!shouldFocus) return;\r\n if (type === \"date\") {\r\n const id = window.setTimeout(() => {\r\n const el = dateHostRef.current?.querySelector(\r\n '[role=\"button\"][tabindex=\"0\"]',\r\n ) as HTMLElement | null;\r\n el?.focus();\r\n }, 0);\r\n return () => window.clearTimeout(id);\r\n }\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n if (mode !== \"form\") {\r\n inputRef.current.select();\r\n }\r\n }\r\n }, [isEditing, mode, type]);\r\n const cellRenderContext: CellRenderContext = {\r\n tableKey,\r\n row,\r\n columnId,\r\n meta,\r\n controller,\r\n value,\r\n display,\r\n isActive: !!isActive,\r\n isDeleted,\r\n isEditable,\r\n mode,\r\n tabIndex,\r\n validation,\r\n dispatchChangeValue,\r\n dispatchChangeDisplay,\r\n activeCell,\r\n searchQuery: searchState?.query,\r\n isCurrentSearchMatch,\r\n };\r\n\r\n const renderReadOnlyCell = (cellText: unknown) => (\r\n <span\r\n key={idx}\r\n className={`flex items-center px-2 w-full h-9 overflow-hidden text-xs text-ellipsis whitespace-nowrap ${meta.className}\r\n ${meta.fieldType === \"checkbox\" || meta.fieldType === \"price\" || meta.fieldType === \"number\" ? \"justify-center\" : \"justify-start\"}\r\n ${isCurrentSearchMatch ? \"ring-2 ring-yellow-400\" : \"\"}`}\r\n >\r\n <span className=\"truncate\">{renderCellContent(cellText)}</span>\r\n {!validation?.isValid && (\r\n <Tooltip title={validation?.cellError?.message}>\r\n <span>\r\n <InfoIcon config={{width: 18, height: 18, stroke: \"#f87171\"}} />\r\n </span>\r\n </Tooltip>\r\n )}\r\n </span>\r\n );\r\n\r\n if (disable) {\r\n if (mode === \"view\") {\r\n return (\r\n <span key={idx} className={`text-xs ${meta.className}`}>\r\n --\r\n </span>\r\n );\r\n }\r\n return (\r\n <span key={idx} className={` \"text-xs\" ${meta.className}`}>\r\n --\r\n </span>\r\n );\r\n }\r\n\r\n const customCell = resolveBoundCellNode(meta, components, cellRenderContext);\r\n if (customCell.hit) {\r\n const isColumnRender = typeof meta.render === 'function';\r\n return (\r\n <div\r\n key={idx}\r\n {...(isColumnRender\r\n ? { 'data-erp-custom-cell': columnId }\r\n : { 'data-erp-cell-component': type })}\r\n tabIndex={isDeleted ? -1 : tabIndex}\r\n className={`w-full h-full min-h-9 px-2 flex text-xs ${\r\n type === 'textArea' ? 'items-start' : 'items-center'\r\n } ${meta.className ?? ''} ${\r\n isDeleted ? 'cursor-not-allowed' : 'cursor-text'\r\n } ${isCurrentSearchMatch ? 'ring-2 ring-yellow-400' : ''}`}\r\n onClick={(e) => {\r\n if (!isDeleted) activeCell(e);\r\n }}\r\n >\r\n {customCell.node}\r\n </div>\r\n );\r\n }\r\n\r\n if (mode === \"view\") {\r\n return renderReadOnlyCell(display ?? value);\r\n }\r\n\r\n if (isEditable === false) {\r\n if (meta.fieldType === \"selectOption\") {\r\n return (\r\n <span key={idx} className={`text-xs text-start ${meta.className} `}>\r\n {value ? renderCellContent(value) : \"--\"}\r\n </span>\r\n );\r\n } else {\r\n return (\r\n <span key={idx} className={`text-xs ${meta.className} `}>\r\n {renderCellContent(value)}\r\n </span>\r\n );\r\n }\r\n } else if (\r\n mode !== \"form\" &&\r\n (!isEditing || isDeleted || isCurrentSearchMatch)\r\n ) {\r\n return (\r\n <>\r\n <button\r\n key={idx}\r\n tabIndex={tabIndex}\r\n disabled={isDeleted}\r\n className={` px-2 w-full \r\n text-start h-9 ${meta.className}\r\n ${isDeleted ? \"cursor-not-allowed \" : \"cursor-text\"}\r\n ${isCurrentSearchMatch ? \"ring-2 ring-yellow-400\" : \"\"}\r\n `}\r\n onClick={(e) => {\r\n activeCell(e);\r\n }}\r\n onDoubleClick={() => {\r\n if (!isDeleted && isEditable) startEdit();\r\n }}\r\n >\r\n <div\r\n className={`flex items-center w-full min-w-36 max-w-72 h-full overflow-hidden text-xs text-ellipsis whitespace-nowrap \r\n ${meta.fieldType === \"checkbox\" || meta.fieldType === \"price\" || meta.fieldType === \"number\" ? \"justify-center\" : \"justify-start\"}`}\r\n >\r\n <div className=\"truncate\">\r\n {renderCellContent(display ?? value)}\r\n {!validation?.isValid && (\r\n <Tooltip title={validation?.cellError?.message}>\r\n <span>\r\n <InfoIcon\r\n config={{width: 18, height: 18, stroke: \"#f87171\"}}\r\n />\r\n </span>\r\n </Tooltip>\r\n )}\r\n </div>\r\n </div>\r\n </button>\r\n </>\r\n );\r\n }\r\n\r\n switch (type) {\r\n case \"number\":\r\n return (\r\n <input\r\n key={idx}\r\n ref={inputRef}\r\n value={value === \"\" || value == null ? \"\" : Number(value)}\r\n disabled={isDeleted || !isEditable}\r\n className={`${isDeleted && \"cursor-not-allowed\"}\r\n pdg-cell-editor bg-transparent px-3\r\n ring-0 focus:!ring-0 \r\n focus:ring-offset-0 !h-full w-full text-xs transition-colors ${meta.className}`}\r\n draggable={false}\r\n onDragStart={blockDrag}\r\n onDragOver={blockDrag}\r\n onDrop={blockDrag}\r\n onChange={(e) =>\r\n dispatchChangeValue(\r\n e.target.value === \"\" ? \"\" : Number(e.target.value),\r\n )\r\n }\r\n />\r\n );\r\n case \"price\":\r\n return (\r\n <input\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n pattern=\"[0-9,]*\"\r\n min={0}\r\n key={idx}\r\n ref={inputRef}\r\n disabled={isDeleted || !isEditable}\r\n className={`${isDeleted && \"cursor-not-allowed\"}\r\n pdg-cell-editor bg-transparent px-3 !bg-white !rounded \r\n ring-0 focus:!ring-0 \r\n focus:ring-offset-0 h-9 w-full text-xs transition-colors \r\n ${meta.className}`}\r\n draggable={false}\r\n onDragStart={blockDrag}\r\n onDragOver={blockDrag}\r\n onDrop={blockDrag}\r\n value={\r\n value === \"\" || value == null\r\n ? \"\"\r\n : `${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n }\r\n onChange={(e) => {\r\n const inputValue = e.target.value;\r\n const parsedValue = inputValue.replace(/\\$\\s?|(,*)/g, \"\");\r\n if (parsedValue === \"\" || !isNaN(Number(parsedValue))) {\r\n dispatchChangeValue(\r\n parsedValue === \"\" ? \"\" : Number(parsedValue),\r\n );\r\n dispatchChangeDisplay(\r\n parsedValue === \"\"\r\n ? null\r\n : `${Number(parsedValue)}`.replace(\r\n /\\B(?=(\\d{3})+(?!\\d))/g,\r\n \",\",\r\n ),\r\n );\r\n }\r\n }}\r\n />\r\n );\r\n case \"date\":\r\n return (\r\n <div ref={dateHostRef} className=\"w-full h-full\">\r\n <NewDatePicker\r\n showMask\r\n className={`${meta.className}`}\r\n key={idx}\r\n disabled={isDeleted || !isEditable}\r\n value={\r\n value == null || value === ''\r\n ? undefined\r\n : typeof value === 'number'\r\n ? value\r\n : new Date(value as string).valueOf()\r\n }\r\n onChange={(v) => {\r\n dispatchChangeValue(v);\r\n }}\r\n />\r\n </div>\r\n );\r\n case \"checkbox\":\r\n return (\r\n <CustomCheckbox\r\n className={`${meta.className} w-full flex justify-center items-center`}\r\n key={idx}\r\n disabled={isDeleted || !isEditable}\r\n // value={value === true as boolean}\r\n checked={value === (true as boolean)}\r\n onChange={(e) => {\r\n dispatchChangeValue(e.target.checked);\r\n }}\r\n />\r\n );\r\n case \"select\":\r\n return (\r\n <Select\r\n key={idx}\r\n options={(meta?.options ?? []).map((opt) => ({\r\n value: opt.value,\r\n label: opt.label as React.ReactNode,\r\n }))}\r\n disabled={isDeleted || !isEditable}\r\n className={` h-9 ${isDeleted && \"cursor-not-allowed\"} ${meta.className}`}\r\n value={value}\r\n onClick={() => activeCell()}\r\n onChange={(v, o) => {\r\n dispatchChangeValue(v);\r\n const option = o as { label?: string } | undefined;\r\n if (option?.label) {\r\n dispatchChangeDisplay(option.label);\r\n } else {\r\n dispatchChangeDisplay('');\r\n }\r\n if (v) {\r\n controller.dispatch({\r\n type: \"UI_MOVE_ACTIVE_CELL\",\r\n rowId: row.id,\r\n columnId,\r\n direction: \"next\",\r\n });\r\n }\r\n }}\r\n />\r\n );\r\n case \"selectOption\": {\r\n const selectValue =\r\n value != null && value !== \"\" ? String(value) : undefined;\r\n\r\n return (\r\n <DynamicSelect\r\n labelValue={meta.labelValue}\r\n noCache={meta.noCache}\r\n key={`${row.id}-${columnId}`}\r\n showSearch\r\n infinite\r\n onSearchPhrase={(v, o) => {\r\n dispatchChangeValue(v);\r\n if (!Array.isArray(o)) {\r\n if (o) {\r\n dispatchChangeDisplay(o);\r\n } else {\r\n dispatchChangeDisplay(null);\r\n }\r\n }\r\n }}\r\n autoFocus={mode !== \"form\"}\r\n popupMatchSelectWidth={meta.popUpWidth}\r\n popupRender={(menu) => <div className=\"w-full\">{menu}</div>}\r\n disabled={isDeleted || !isEditable}\r\n // labelInValue is false in DynamicSelect — pass a primitive, not {value,label}\r\n value={selectValue}\r\n // Stored label for a value missing from the loaded options\r\n // (isUnique filter, >5000 entries, or before the fetch resolves).\r\n valueLabel={display != null && display !== \"\" ? String(display) : undefined}\r\n dynamicValue={meta?.dynamicSource}\r\n filterOption={(input, option) => {\r\n if (meta?.dynamicSelectFilterOption) {\r\n return meta.dynamicSelectFilterOption(input, option);\r\n }\r\n const label = option?.label;\r\n const remote = option.option;\r\n const display =\r\n typeof remote === 'object' &&\r\n remote !== null &&\r\n '_SelectDisplay' in remote &&\r\n typeof (remote as { _SelectDisplay?: unknown })._SelectDisplay ===\r\n 'string'\r\n ? (remote as { _SelectDisplay: string })._SelectDisplay\r\n : '';\r\n return (\r\n typeof label === 'string' &&\r\n display.toLowerCase().includes(input.toLowerCase())\r\n );\r\n }}\r\n filterOptions={(option) => {\r\n const unique = (controller.getAllRows() ?? []).some(\r\n (r) => r.getCell(columnId)?.getValue() === option.value,\r\n );\r\n if (meta.isUnique) {\r\n return !unique;\r\n }\r\n return true;\r\n }}\r\n className={`bg-white !border-[0.4px] !border-gray-gray7 h-9 ${meta.className} ${isDeleted && \"cursor-not-allowed\"} relative`}\r\n onClick={() => activeCell()}\r\n onChange={(v, o) => {\r\n dispatchChangeValue(v, o as DefaultOptionType);\r\n const option = o as { label?: string } | undefined;\r\n dispatchChangeDisplay(option?.label ?? '');\r\n if (v) {\r\n controller.dispatch({\r\n type: \"UI_MOVE_ACTIVE_CELL\",\r\n rowId: row.id,\r\n columnId,\r\n direction: \"next\",\r\n });\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n case \"static\":\r\n return (\r\n <span\r\n key={idx}\r\n tabIndex={tabIndex}\r\n className={` px-2 w-full h-full text-xs cursor-text ${meta.className}`}\r\n onClick={(e) => activeCell(e)}\r\n >\r\n {String(display ?? value ?? \"\") || \"—\"}\r\n </span>\r\n );\r\n case \"description\":\r\n return (\r\n <DescriptionComponent\r\n activeCell={activeCell}\r\n blockDrag={blockDrag}\r\n isDeleted={isDeleted}\r\n editable={isEditable}\r\n dispatchChangeValue={dispatchChangeValue}\r\n idx={idx}\r\n inputRef={inputRef}\r\n tableKey={tableKey}\r\n row={row}\r\n controller={controller}\r\n columnId={columnId}\r\n key={idx}\r\n disabled={isDeleted || !isEditable}\r\n value={value == null ? \"\" : String(value)}\r\n className={`${isDeleted && \"cursor-not-allowed\"}\r\n flex items-center bg-transparent px-2 pdg-cell-editor\r\n ring-0 focus:!ring-0 focus:ring-offset-0 h-8 transition-colors `}\r\n draggable={false}\r\n onDragStart={blockDrag}\r\n onDragOver={blockDrag}\r\n onDrop={blockDrag}\r\n onChange={(e) => dispatchChangeValue(e)}\r\n onClick={(e) => activeCell(e)}\r\n meta={meta}\r\n searchQuery={searchState?.query}\r\n isCurrentSearchMatch={isCurrentSearchMatch}\r\n />\r\n );\r\n case \"text\":\r\n default:\r\n return (\r\n <input\r\n key={idx}\r\n ref={inputRef}\r\n disabled={isDeleted || !isEditable}\r\n value={value == null ? \"\" : String(value)}\r\n className={`${isDeleted && \"cursor-not-allowed\"}\r\n pdg-cell-editor bg-transparent px-2\r\n ring-0 focus:ring-0! focus:ring-offset-0 transition-colors h-full! w-full text-xs ${meta.className}`}\r\n draggable={false}\r\n onDragStart={blockDrag}\r\n onDragOver={blockDrag}\r\n onDrop={blockDrag}\r\n onChange={(e) => dispatchChangeValue(e.target.value)}\r\n onClick={(e) => activeCell(e)}\r\n />\r\n );\r\n }\r\n};\r\n","import {\r\n formatLocaleNumber,\r\n useLocale,\r\n useNumberingSystem,\r\n useTranslations,\r\n} from '../host';\r\nimport {\r\n CustomDropdownButton,\r\n CustomCheckbox,\r\n Dots,\r\n DragIcon,\r\n Expand,\r\n RedTrashBin,\r\n Undo,\r\n type DropdownItem,\r\n} from '../primitives';\r\n\r\nimport { ColumnSchema } from '../../bootstrap/type';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { UIRow } from '../type';\r\n\r\ninterface IndexColProps {\r\n tableKey: string;\r\n idx: number;\r\n row: UIRow;\r\n controller: UITableController;\r\n meta: ColumnSchema;\r\n}\r\n\r\nexport const IndexCol: React.FC<IndexColProps> = ({\r\n idx,\r\n tableKey,\r\n row,\r\n controller,\r\n meta,\r\n}) => {\r\n const t = useTranslations();\r\n const locale = useLocale();\r\n const numberingSystem = useNumberingSystem();\r\n\r\n const handleDeleteRow = () => {\r\n controller.dispatch({ type: \"ROW_DELETED\", rowId: row.id });\r\n };\r\n\r\n const handleCopyRow = () => {\r\n controller.dispatch({ type: \"DUPLICATE_ROW\", rowId: row.id });\r\n };\r\n\r\n const handleAddRow = () => {\r\n void controller.dispatch({ type: \"ADD_EMPTY_ROW\" });\r\n };\r\n\r\n const extraItems = (meta.indexOptions?.(tableKey, row.id, row, controller) ??\r\n []) as DropdownItem[];\r\n const items: DropdownItem[] = [\r\n {\r\n key: \"1\",\r\n label: (\r\n <span className=\"flex text-sm\" onClick={handleCopyRow}>\r\n {t(\"general.replicateRow\")}\r\n </span>\r\n ),\r\n extra: \"Ali + D\",\r\n },\r\n {\r\n key: \"2\",\r\n label: (\r\n <span className=\"flex text-sm\" onClick={handleAddRow}>\r\n {t(\"general.addNewRow\")}\r\n </span>\r\n ),\r\n extra: \"Alt + N\",\r\n },\r\n {\r\n type: \"divider\",\r\n },\r\n ...extraItems,\r\n ];\r\n\r\n const handleExpandRow = () => {\r\n controller.dispatch({ type: \"TOGGLE_ROW_EXPANDED\", rowId: row.id });\r\n };\r\n\r\n const handleSelectRow = (e: React.MouseEvent<HTMLInputElement>) => {\r\n if (!e.shiftKey && !e.ctrlKey && !e.altKey) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n controller.onRowSelect(row.id);\r\n }\r\n };\r\n\r\n const isDeleted = row.rowState === RowStateEnum.Deleted;\r\n const isSelectedRow = controller.isSelectedRow(row.id);\r\n\r\n return (\r\n <div\r\n className={`${isDeleted && \"cursor-not-allowed\"} flex justify-between items-center w-full gap-2 px-2 h-full relative`}\r\n >\r\n <div className=\"flex justify-start items-center gap-2\">\r\n {!isDeleted && (\r\n <CustomCheckbox\r\n disabled={isDeleted}\r\n checked={!!isSelectedRow}\r\n onClick={handleSelectRow}\r\n aria-label={`${t(\"general.selectRow\")} ${idx + 1}`}\r\n />\r\n )}\r\n <div className=\"w-[20px] text-xs text-center\">\r\n {formatLocaleNumber(idx + 1, { locale, numberingSystem })}\r\n </div>\r\n\r\n {meta.enableMoveButton && !isDeleted && (\r\n <div\r\n className=\"erp-table-index-btn cursor-grab active:cursor-grabbing\"\r\n draggable={false}\r\n onMouseDown={(e) => {\r\n const tr = e.currentTarget.closest(\"tr\");\r\n tr?.setAttribute(\"draggable\", \"true\");\r\n }}\r\n >\r\n <DragIcon config={{ width: 16, height: 16 }} />\r\n </div>\r\n )}\r\n\r\n {meta.enableDeleteButton && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleDeleteRow();\r\n }}\r\n className=\"erp-table-index-btn hover:bg-red-100\"\r\n >\r\n {!isDeleted ? (\r\n <RedTrashBin config={{ width: 18, height: 18 }} />\r\n ) : (\r\n <Undo config={{ width: 18, height: 18 }} />\r\n )}\r\n </button>\r\n )}\r\n\r\n {meta.enableExpandButton && (\r\n <button\r\n type=\"button\"\r\n onClick={handleExpandRow}\r\n className={`erp-table-index-btn z-20 ${\r\n isDeleted ? \"cursor-not-allowed \" : \"hover:bg-zinc-200\"\r\n } `}\r\n disabled={isDeleted}\r\n >\r\n <Expand config={{ width: 18, height: 18 }} />\r\n </button>\r\n )}\r\n </div>\r\n\r\n {meta.enableOptionsButton && !isDeleted && (\r\n <CustomDropdownButton\r\n placement=\"bottom\"\r\n className=\"flex m-0 p-0 rounded\"\r\n items={items}\r\n >\r\n <a className=\"cursor-pointer\" onClick={(e) => e.preventDefault()}>\r\n <Dots config={{ width: 18, height: 18 }} />\r\n </a>\r\n </CustomDropdownButton>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React, {\r\n useMemo,\r\n useState,\r\n} from 'react';\r\n\r\nimport { useTranslations } from '../host';\r\nimport { NoData } from '../primitives';\r\n\r\nimport { ColumnSchema } from '../../bootstrap/type';\r\nimport { columnSizeStyle } from '../../engine/columnWidth';\r\nimport {\r\n cellRangeClassName,\r\n cellRangeEdgeAttr,\r\n resolveCellRangePresentation,\r\n} from '../../engine/selection/cellRangePresentation';\r\nimport { resolveFillCorner } from '../../engine/selection/fillHandle';\r\nimport { FillHandle } from './FillHandle';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { ariaColIndex, ariaDataRowIndex, gridCellA11y } from '../a11y/gridRoles';\r\nimport { columnPinCellProps } from '../columnPin';\r\nimport { CellRenderer } from '../cellRenderer';\r\nimport { UIRow } from '../type';\r\nimport { useColumnWindowOrAll } from '../virtual/columnWindow';\r\nimport { ColumnWindowCells } from '../virtual/ColumnWindowCells';\r\nimport { IndexCol } from './indexCol';\r\n\r\ninterface ERPTableRowProps {\r\n row: UIRow;\r\n index: number;\r\n stripeIndex: number;\r\n /** Pinned-top row count for aria-rowindex offset (PR-116). */\r\n pinnedTopCount?: number;\r\n table: Pick<\r\n import('../../engine/type').TableViewState,\r\n 'columns' | 'columnWidths' | 'activeCell' | 'cellRanges'\r\n >;\r\n controller: UITableController;\r\n tableKey: string;\r\n draggedRowIdRef: React.MutableRefObject<number | null>;\r\n moreDetailComponent?: React.ComponentType<{data: unknown}>;\r\n isSelected: boolean;\r\n isActive: boolean;\r\n isCut: boolean;\r\n}\r\n\r\nfunction ERPTableRowComponent({\r\n row,\r\n index,\r\n stripeIndex,\r\n pinnedTopCount = 0,\r\n table,\r\n controller,\r\n tableKey,\r\n draggedRowIdRef,\r\n moreDetailComponent: MoreDetailComponent,\r\n isSelected: isSelectedRow,\r\n isActive: isActiveRow,\r\n isCut,\r\n}: ERPTableRowProps) {\r\n const t = useTranslations();\r\n const colWindow = useColumnWindowOrAll(\r\n table.columns ?? [],\r\n table.columnWidths,\r\n );\r\n const totalColSpan = colWindow.allVisible.length;\r\n const [dropZone, setDropZone] = useState<\"before\" | \"after\" | null>(null);\r\n const isDeleted = row.rowState === RowStateEnum.Deleted;\r\n const cellRanges = controller.getViewState()?.cellRanges ?? [];\r\n const columnOrder = (table.columns ?? [])\r\n .filter((c) => !c.hidden)\r\n .map((c) => c.fieldName);\r\n const fillCorner = resolveFillCorner(cellRanges, columnOrder);\r\n\r\n const rangeCellProps = (colId: string) => {\r\n const flags = resolveCellRangePresentation(\r\n { rowIndex: index, colId },\r\n cellRanges,\r\n );\r\n const edge = cellRangeEdgeAttr(flags);\r\n return {\r\n className: cellRangeClassName(flags),\r\n 'data-pdg-cell-range': flags.inRange ? 'true' : undefined,\r\n 'data-pdg-range-edge': edge,\r\n };\r\n };\r\n\r\n const handleRowClick = (e: React.MouseEvent) => {\r\n controller.onRowClick(row.id, {\r\n ctrlKey: e.ctrlKey,\r\n shiftKey: e.shiftKey,\r\n });\r\n };\r\n\r\n const handleSelectRow = (e: React.MouseEvent<HTMLElement>) => {\r\n const el = e.target as HTMLElement;\r\n if (el.tagName !== \"TR\") return;\r\n\r\n if (!e.shiftKey && !e.ctrlKey && !e.altKey) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n controller.onRowSelect(row.id);\r\n }\r\n };\r\n\r\n const handleDragStart = (\r\n e: React.DragEvent<HTMLTableRowElement>,\r\n rowId: number,\r\n ) => {\r\n draggedRowIdRef.current = rowId;\r\n e.dataTransfer.setData(\"text/plain\", String(rowId));\r\n e.dataTransfer.effectAllowed = \"move\";\r\n };\r\n\r\n const handleDragOverLocal = (e: React.DragEvent<HTMLTableRowElement>) => {\r\n e.preventDefault();\r\n const rect = e.currentTarget.getBoundingClientRect();\r\n const mouseY = e.clientY - rect.top;\r\n setDropZone(mouseY < rect.height / 2 ? \"before\" : \"after\");\r\n };\r\n\r\n const handleDropLocal = (e: React.DragEvent<HTMLTableRowElement>) => {\r\n e.preventDefault();\r\n if (!dropZone) return;\r\n\r\n const sourceId = draggedRowIdRef.current;\r\n if (!sourceId || sourceId === row.id) return;\r\n controller.dispatch({\r\n type: \"ROW_REORDERED\",\r\n draggedRowId: sourceId,\r\n droppedRowId: row.id,\r\n position: dropZone,\r\n });\r\n\r\n setDropZone(null);\r\n };\r\n\r\n const isGroupedLeaf =\r\n (controller.getRowGroupColumns?.()?.length ?? 0) > 0;\r\n\r\n const rowClass = useMemo(() => {\r\n const zebraClass = stripeIndex % 2 ? \"bg-blue-blue11\" : \"bg-main-white\";\r\n\r\n return `relative w-full border\r\n ${isActiveRow ? \"border-gray-gray8\" : \"border-gray-gray5\"}\r\n ${isSelectedRow && !isDeleted ? \"bg-blue-100\" : \"\"}\r\n ${\r\n isDeleted\r\n ? \"!bg-gray-gray5 absolute inset-0 line-through\"\r\n : isSelectedRow\r\n ? \"\"\r\n : zebraClass\r\n }\r\n ${isCut ? \" border-dashed opacity-30\" : \"\"}\r\n h-9 rounded \r\n `;\r\n }, [isActiveRow, isSelectedRow, isDeleted, stripeIndex, isCut]);\r\n\r\n return (\r\n <>\r\n <tr\r\n role=\"row\"\r\n aria-rowindex={ariaDataRowIndex(index, pinnedTopCount)}\r\n className={rowClass}\r\n data-rowid={row.id}\r\n data-pdg-row-loading={row.loading ? 'true' : undefined}\r\n aria-busy={row.loading ? true : undefined}\r\n style={isGroupedLeaf ? { paddingInlineStart: 20 } : undefined}\r\n draggable={!row.loading}\r\n onDragStart={(e) => handleDragStart(e, row.id)}\r\n onDragOver={handleDragOverLocal}\r\n onDrop={handleDropLocal}\r\n onClick={handleRowClick}\r\n onDoubleClick={handleSelectRow}\r\n >\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"td\"\r\n spacerRole=\"presentation\"\r\n renderColumn={(c, absoluteColIndex) => {\r\n const pin = columnPinCellProps(\r\n c,\r\n colWindow.startPinOffsets,\r\n colWindow.endPinOffsets,\r\n );\r\n const meta: ColumnSchema = {\r\n ...c,\r\n enableDeleteButton: c.enableDeleteButton ?? true,\r\n enableExpandButton: c.enableExpandButton ?? true,\r\n enableMoveButton: c.enableMoveButton ?? true,\r\n enableOptionsButton: c.enableOptionsButton ?? true,\r\n };\r\n\r\n if (row.loading) {\r\n const rangeProps = rangeCellProps(c.fieldName);\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(absoluteColIndex)}\r\n className={`p-0 h-full overflow-hidden border ${pin.className} ${rangeProps.className}`.trim()}\r\n data-columnid={c.fieldName}\r\n data-pdg-row-index={index}\r\n data-pdg-col-index={absoluteColIndex}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n data-pdg-cell-range={rangeProps['data-pdg-cell-range']}\r\n data-pdg-range-edge={rangeProps['data-pdg-range-edge']}\r\n style={{ ...columnSizeStyle(c, table.columnWidths, colWindow.layoutWidths), ...pin.style }}\r\n >\r\n <div className=\"pdg-row-skeleton\" data-pdg-skeleton>\r\n <span className=\"pdg-row-skeleton__bar\" />\r\n </div>\r\n </td>\r\n );\r\n }\r\n\r\n if (c.fieldName === \"index\" || c.fieldType === \"index\") {\r\n const rangeProps = rangeCellProps(c.fieldName);\r\n return (\r\n <td\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(absoluteColIndex)}\r\n {...gridCellA11y(tableKey, row.id, c.fieldName, table.activeCell)}\r\n className={`p-0 h-full overflow-hidden border ${pin.className} ${rangeProps.className}`.trim()}\r\n key={c.fieldName}\r\n data-columnid={c.fieldName}\r\n data-pdg-row-index={index}\r\n data-pdg-col-index={absoluteColIndex}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n data-pdg-cell-range={rangeProps['data-pdg-cell-range']}\r\n data-pdg-range-edge={rangeProps['data-pdg-range-edge']}\r\n style={{ ...columnSizeStyle(c, table.columnWidths, colWindow.layoutWidths), ...pin.style }}\r\n >\r\n <IndexCol\r\n idx={index}\r\n tableKey={tableKey}\r\n row={row}\r\n controller={controller}\r\n meta={meta}\r\n />\r\n </td>\r\n );\r\n }\r\n\r\n const rangeProps = rangeCellProps(c.fieldName);\r\n const showFillHandle =\r\n fillCorner?.rowIndex === index &&\r\n fillCorner.colId === c.fieldName;\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(absoluteColIndex)}\r\n {...gridCellA11y(tableKey, row.id, c.fieldName, table.activeCell)}\r\n className={`p-0 h-full overflow-hidden border relative ${pin.className} ${rangeProps.className}`.trim()}\r\n data-columnid={c.fieldName}\r\n data-pdg-row-index={index}\r\n data-pdg-col-index={absoluteColIndex}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n data-pdg-cell-range={rangeProps['data-pdg-cell-range']}\r\n data-pdg-range-edge={rangeProps['data-pdg-range-edge']}\r\n style={{ ...columnSizeStyle(c, table.columnWidths, colWindow.layoutWidths), ...pin.style }}\r\n >\r\n <CellRenderer\r\n idx={absoluteColIndex}\r\n tableKey={tableKey}\r\n row={row}\r\n columnId={c.fieldName}\r\n meta={meta}\r\n controller={controller}\r\n tabIndex={-1}\r\n mode=\"cell\"\r\n />\r\n {showFillHandle ? <FillHandle controller={controller} /> : null}\r\n </td>\r\n );\r\n }}\r\n />\r\n </tr>\r\n\r\n {row.isExpanded && (\r\n <tr role=\"row\">\r\n <td\r\n role=\"gridcell\"\r\n colSpan={totalColSpan}\r\n aria-colindex={1}\r\n aria-colspan={totalColSpan}\r\n >\r\n {MoreDetailComponent ? (\r\n <MoreDetailComponent data={row} />\r\n ) : (\r\n <div className=\"flex justify-center items-center bg-gray-100 shadow my-1 rounded transition-all duration-300\">\r\n <div className=\"flex flex-col items-center gap-2 m-12\">\r\n <NoData config={{width: 60, height: 60}} />\r\n <span className=\"text-gray-gray9 text-md\">\r\n {t(\"general.noData\")}\r\n </span>\r\n </div>\r\n </div>\r\n )}\r\n </td>\r\n </tr>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport const ERPTableRow = React.memo(ERPTableRowComponent, (prev, next) => {\r\n return (\r\n prev.row === next.row &&\r\n prev.index === next.index &&\r\n prev.stripeIndex === next.stripeIndex &&\r\n prev.controller === next.controller &&\r\n prev.tableKey === next.tableKey &&\r\n prev.isSelected === next.isSelected &&\r\n prev.isActive === next.isActive &&\r\n prev.isCut === next.isCut &&\r\n prev.table.columns === next.table.columns &&\r\n prev.table.columnWidths === next.table.columnWidths &&\r\n prev.table.activeCell?.rowId === next.table.activeCell?.rowId &&\r\n prev.table.activeCell?.columnId === next.table.activeCell?.columnId &&\r\n prev.table.cellRanges === next.table.cellRanges &&\r\n prev.moreDetailComponent === next.moreDetailComponent\r\n );\r\n});\r\n","import React, { Suspense, useRef } from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { ERPTableRow } from './eRPTableRow';\r\n\r\nconst ERPTableGroupRow = React.lazy(() =>\r\n import('./ERPTableGroupRow').then((m) => ({ default: m.ERPTableGroupRow })),\r\n);\r\n\r\ninterface Props {\r\n controller: UITableController;\r\n tableKey: string;\r\n moreDetailComponent?: React.ComponentType<{data: unknown}>;\r\n /** Shifts aria-rowindex when pinned-top rows are present (PR-116). */\r\n pinnedTopCount?: number;\r\n}\r\n\r\nexport function ERPTableBody({\r\n controller,\r\n tableKey,\r\n moreDetailComponent: MoreDetailComponent,\r\n pinnedTopCount = 0,\r\n}: Props) {\r\n const table = controller.getViewState();\r\n const dragRowId = useRef<number | null>(null);\r\n\r\n if (!table) return null;\r\n\r\n // Preserve UI index order (sort/filter/group — PR-120). Do not re-sort by index cell.\r\n const rows = table.rows;\r\n const hasGroups = rows.some((r) => r.rowKind === 'group');\r\n const displayRows = hasGroups\r\n ? rows\r\n : [...rows].sort(\r\n (a, b) =>\r\n Number(a.cells['index']?.value ?? 0) -\r\n Number(b.cells['index']?.value ?? 0),\r\n );\r\n\r\n return (\r\n <tbody className=\"w-full min-w-0 overflow-x-auto\" role=\"rowgroup\">\r\n <Suspense fallback={null}>\r\n {displayRows.map((row, index) => {\r\n const absIndex =\r\n index + (table.pagination.page - 1) * table.pagination.pageSize;\r\n if (row.rowKind === 'group') {\r\n return (\r\n <ERPTableGroupRow\r\n key={row.id}\r\n row={row}\r\n index={absIndex}\r\n pinnedTopCount={pinnedTopCount}\r\n table={table}\r\n controller={controller}\r\n tableKey={tableKey}\r\n isSelected={!!table.selectedRows?.[row.id]}\r\n isActive={!!controller.isActiveRow(row.id)}\r\n />\r\n );\r\n }\r\n return (\r\n <ERPTableRow\r\n key={row.id}\r\n row={row}\r\n stripeIndex={index}\r\n index={absIndex}\r\n pinnedTopCount={pinnedTopCount}\r\n table={table}\r\n controller={controller}\r\n tableKey={tableKey}\r\n draggedRowIdRef={dragRowId}\r\n moreDetailComponent={MoreDetailComponent}\r\n isSelected={!!table.selectedRows?.[row.id]}\r\n isActive={!!controller.isActiveRow(row.id)}\r\n isCut={!!controller.isCutRow(row.id)}\r\n />\r\n );\r\n })}\r\n </Suspense>\r\n </tbody>\r\n );\r\n}\r\n","import React, {\r\n ReactNode,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\n\r\nimport type { AggFuncName } from '../../domain/types/ColumnDef';\r\nimport { columnSizeStyle } from '../../engine/columnWidth';\r\nimport { isIndexColumn } from '../../engine/columnWidth';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { ariaColIndex, ariaFooterRowIndex } from '../a11y/gridRoles';\r\nimport { columnPinCellProps } from '../columnPin';\r\nimport { useLocale, useTranslations } from '../host';\r\nimport { valueParser } from '../helper';\r\nimport { useColumnWindowOrAll } from '../virtual/columnWindow';\r\nimport { ColumnWindowCells } from '../virtual/ColumnWindowCells';\r\n\r\n/** Multi-row footer aggregation chrome (PR-119 / RFC-002). */\r\nexport type FooterRowDef = {\r\n id: string;\r\n label?: string;\r\n /** Override column aggFunc for this row. */\r\n aggFunc?: AggFuncName;\r\n};\r\n\r\ninterface Props {\r\n controller: UITableController;\r\n footer?: boolean | ReactNode;\r\n footerRows?: readonly FooterRowDef[];\r\n dataRowCount?: number;\r\n pinnedTopCount?: number;\r\n pinnedBottomCount?: number;\r\n}\r\n\r\nconst DEFAULT_FOOTER_ROWS: FooterRowDef[] = [{ id: 'default' }];\r\n\r\nfunction resolveFooterRows(\r\n footer: boolean | ReactNode | undefined,\r\n footerRows: readonly FooterRowDef[] | undefined,\r\n): FooterRowDef[] | null {\r\n if (typeof footer !== 'boolean' || footer !== true) return null;\r\n if (footerRows && footerRows.length > 0) return [...footerRows];\r\n return DEFAULT_FOOTER_ROWS;\r\n}\r\n\r\nexport function ERPTableFooter({\r\n controller,\r\n footer,\r\n footerRows,\r\n dataRowCount,\r\n pinnedTopCount = 0,\r\n pinnedBottomCount = 0,\r\n}: Props) {\r\n const locale = useLocale();\r\n const t = useTranslations();\r\n const [aggs, setAggs] = useState<Record<string, unknown>>({});\r\n const table = controller.getViewState();\r\n const rows = useMemo(\r\n () => resolveFooterRows(footer, footerRows),\r\n [footer, footerRows],\r\n );\r\n\r\n useEffect(() => {\r\n const view = controller.getViewState();\r\n if (!view || !rows) return;\r\n if (controller.isPagedWindow()) {\r\n // Page-window mode: RAM holds ONE page, so totals must fold over the\r\n // whole dataset streamed from IndexedDB (O(batch) heap, never the full\r\n // row array). Footer totals are sums; other aggFuncs use the window.\r\n let off: (() => void) | undefined;\r\n let cancelled = false;\r\n void import('./pagedFooterTotals').then(({ subscribePagedTotals }) => {\r\n if (!cancelled) off = subscribePagedTotals(controller, view.columns ?? [], setAggs);\r\n });\r\n return () => {\r\n cancelled = true;\r\n off?.();\r\n };\r\n }\r\n setAggs(controller.getColumnAggs());\r\n const unsubscribe = controller.subscribeColumnAggs(setAggs);\r\n return () => {\r\n unsubscribe?.();\r\n };\r\n }, [controller, rows]);\r\n\r\n const colWindow = useColumnWindowOrAll(\r\n table?.columns ?? [],\r\n table?.columnWidths,\r\n );\r\n\r\n if (!table || !table.columns) return null;\r\n if (typeof footer !== 'boolean' || footer !== true) {\r\n if (!footer) return null;\r\n const visibleColumns = table.columns.filter((c) => !c.hidden);\r\n const cols = visibleColumns.length;\r\n const footerRowIndex = ariaFooterRowIndex(\r\n dataRowCount ?? table.pagination.totalRows,\r\n pinnedTopCount,\r\n pinnedBottomCount,\r\n );\r\n return (\r\n <tfoot role=\"rowgroup\" className=\"erp-table-footer\" data-erp-footer=\"\">\r\n <tr\r\n role=\"row\"\r\n aria-rowindex={footerRowIndex}\r\n className={`w-full border border-gray-gray5 bg-main-white h-9 rounded `}\r\n >\r\n <td\r\n role=\"gridcell\"\r\n colSpan={cols}\r\n aria-colindex={1}\r\n aria-colspan={cols}\r\n >\r\n {footer}\r\n </td>\r\n </tr>\r\n </tfoot>\r\n );\r\n }\r\n\r\n if (!rows) return null;\r\n const baseRowIndex = ariaFooterRowIndex(\r\n dataRowCount ?? table.pagination.totalRows,\r\n pinnedTopCount,\r\n pinnedBottomCount,\r\n );\r\n\r\n return (\r\n <tfoot role=\"rowgroup\" className=\"erp-table-footer\" data-erp-footer=\"\">\r\n {rows.map((rowDef, rowOffset) => (\r\n <tr\r\n key={rowDef.id}\r\n role=\"row\"\r\n aria-rowindex={baseRowIndex + rowOffset}\r\n data-pdg-footer-row={rowDef.id}\r\n className={`w-full border border-gray-gray5 bg-main-white !h-9 rounded `}\r\n >\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"td\"\r\n spacerRole=\"presentation\"\r\n renderColumn={(c, index) => {\r\n const pin = columnPinCellProps(\r\n c,\r\n colWindow.startPinOffsets,\r\n colWindow.endPinOffsets,\r\n );\r\n let content: React.ReactNode = null;\r\n if (isIndexColumn(c)) {\r\n content =\r\n rowDef.label ??\r\n (rowDef.id === 'sum' || rowDef.id === 'default'\r\n ? t('general.footerTotal')\r\n : rowDef.id === 'avg'\r\n ? t('general.footerAvg')\r\n : (rowDef.label ?? rowDef.id));\r\n } else if (rowDef.aggFunc) {\r\n const value = controller.getColumnAggValue(\r\n c.fieldName,\r\n rowDef.aggFunc,\r\n );\r\n content =\r\n value == null\r\n ? null\r\n : valueParser(value, c.fieldType, locale);\r\n } else {\r\n const value = aggs[c.fieldName];\r\n content =\r\n value == null\r\n ? null\r\n : valueParser(value, c.fieldType, locale);\r\n }\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(index)}\r\n className={pin.className}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n style={{\r\n ...columnSizeStyle(\r\n c,\r\n table.columnWidths,\r\n colWindow.layoutWidths,\r\n ),\r\n ...pin.style,\r\n }}\r\n >\r\n {content}\r\n </td>\r\n );\r\n }}\r\n />\r\n </tr>\r\n ))}\r\n </tfoot>\r\n );\r\n}\r\n","import { isIndexColumn, type ColumnWidthHint } from './columnWidth';\r\n\r\nexport type ColumnReorderHint = ColumnWidthHint & { fieldName: string };\r\n\r\n/**\r\n * Map a header drop onto the same indices `Table.reorderColumns` uses\r\n * (display order / `getActiveCollectionColumns`). Index column is not movable.\r\n */\r\nexport function resolveColumnReorder(\r\n columns: readonly ColumnReorderHint[],\r\n sourceField: string,\r\n destField: string,\r\n): { sourceIndex: number; destIndex: number } | null {\r\n const sourceIndex = columns.findIndex((c) => c.fieldName === sourceField);\r\n const destIndex = columns.findIndex((c) => c.fieldName === destField);\r\n if (sourceIndex < 0 || destIndex < 0 || sourceIndex === destIndex) {\r\n return null;\r\n }\r\n const source = columns[sourceIndex];\r\n const dest = columns[destIndex];\r\n if (!source || !dest) return null;\r\n if (isIndexColumn(source) || isIndexColumn(dest)) return null;\r\n return { sourceIndex, destIndex };\r\n}\r\n","/**\r\n * Column header menu item model (PR-114). Pure — no React/DOM.\r\n */\r\n\r\nimport type { ColumnSchema } from '../../domain/types/ColumnSchema';\r\nimport { resolveFilterUi } from './filterModel';\r\nimport { isHeaderColumnSortable } from './sortModel';\r\nimport { isIndexColumn } from '../columnWidth';\r\n\r\nexport type ColumnMenuBuiltInId =\r\n | 'sortAsc'\r\n | 'sortDesc'\r\n | 'sortNone'\r\n | 'filter'\r\n | 'hideColumn'\r\n | 'pinStart'\r\n | 'pinEnd'\r\n | 'pinNone'\r\n | 'autoSize'\r\n | 'columnsPanel'\r\n | 'separator';\r\n\r\nexport type ColumnMenuCustomItem = {\r\n name: string;\r\n label: string;\r\n disabled?: boolean;\r\n};\r\n\r\nexport type ColumnMenuItemDef =\r\n | ColumnMenuBuiltInId\r\n | ColumnMenuCustomItem;\r\n\r\nexport type ColumnMenuItemsConfig =\r\n | ColumnMenuItemDef[]\r\n | ((defaults: ColumnMenuItemDef[]) => ColumnMenuItemDef[]);\r\n\r\nexport type ColumnMenuBuildContext = {\r\n column: ColumnSchema;\r\n sortable: boolean;\r\n filterable: boolean;\r\n hideable: boolean;\r\n pinnable: boolean;\r\n};\r\n\r\nexport function isColumnMenuCustomItem(\r\n item: ColumnMenuItemDef,\r\n): item is ColumnMenuCustomItem {\r\n return typeof item === 'object' && item !== null && 'name' in item;\r\n}\r\n\r\nexport function isColumnFilterable(column: ColumnSchema): boolean {\r\n const ui = resolveFilterUi(column);\r\n return ui != null;\r\n}\r\n\r\n/**\r\n * Page-window grids (`persistence: 'paged-idb'`) hold ONE page in RAM, so a\r\n * header sort / filter would only reorder / hide the rows of that page. There\r\n * they are offered only on columns that opt in explicitly\r\n * (`columnDef.sortable: true` / `columnDef.filter`).\r\n */\r\nexport function isColumnSortableInGrid(\r\n column: ColumnSchema,\r\n pagedWindow: boolean,\r\n): boolean {\r\n if (!isHeaderColumnSortable(column)) return false;\r\n return !pagedWindow || column.columnDef?.sortable === true;\r\n}\r\n\r\nexport function isColumnFilterableInGrid(\r\n column: ColumnSchema,\r\n pagedWindow: boolean,\r\n): boolean {\r\n if (!isColumnFilterable(column)) return false;\r\n if (!pagedWindow) return true;\r\n const def = column.columnDef?.filter;\r\n return def != null && def !== false;\r\n}\r\n\r\nexport function buildDefaultColumnMenuItems(\r\n ctx: ColumnMenuBuildContext,\r\n): ColumnMenuItemDef[] {\r\n const items: ColumnMenuItemDef[] = [];\r\n if (ctx.sortable) {\r\n items.push('sortAsc', 'sortDesc', 'sortNone', 'separator');\r\n }\r\n if (ctx.filterable) items.push('filter');\r\n if (ctx.hideable) items.push('hideColumn');\r\n if (ctx.pinnable) {\r\n items.push('pinStart', 'pinEnd', 'pinNone', 'separator');\r\n }\r\n items.push('autoSize', 'columnsPanel');\r\n return items;\r\n}\r\n\r\nexport function resolveColumnMenuItems(\r\n column: ColumnSchema,\r\n config?: ColumnMenuItemsConfig,\r\n options?: { pagedWindow?: boolean },\r\n): ColumnMenuItemDef[] {\r\n const pagedWindow = options?.pagedWindow === true;\r\n const ctx: ColumnMenuBuildContext = {\r\n column,\r\n sortable: isColumnSortableInGrid(column, pagedWindow),\r\n filterable: isColumnFilterableInGrid(column, pagedWindow),\r\n hideable: !isIndexColumn(column),\r\n pinnable: !isIndexColumn(column),\r\n };\r\n const defaults = buildDefaultColumnMenuItems(ctx);\r\n if (!config) return defaults;\r\n if (typeof config === 'function') return config(defaults);\r\n return config;\r\n}\r\n\r\nexport function columnMenuItemLabelKey(id: ColumnMenuBuiltInId): string {\r\n switch (id) {\r\n case 'sortAsc':\r\n return 'columnMenu.sortAsc';\r\n case 'sortDesc':\r\n return 'columnMenu.sortDesc';\r\n case 'sortNone':\r\n return 'columnMenu.sortNone';\r\n case 'filter':\r\n return 'columnMenu.filter';\r\n case 'hideColumn':\r\n return 'columnMenu.hideColumn';\r\n case 'pinStart':\r\n return 'columnMenu.pinStart';\r\n case 'pinEnd':\r\n return 'columnMenu.pinEnd';\r\n case 'pinNone':\r\n return 'columnMenu.pinNone';\r\n case 'autoSize':\r\n return 'columnMenu.autoSize';\r\n case 'columnsPanel':\r\n return 'columnMenu.columnsPanel';\r\n default:\r\n return id;\r\n }\r\n}\r\n\r\nexport function sortModelForMenuAction(\r\n current: readonly { colId: string; sort: 'asc' | 'desc' }[],\r\n colId: string,\r\n action: 'asc' | 'desc' | 'none',\r\n): { colId: string; sort: 'asc' | 'desc' }[] {\r\n if (action === 'none') {\r\n return current.filter((entry) => entry.colId !== colId);\r\n }\r\n return [{ colId, sort: action }];\r\n}\r\n","import { useEffect, useState } from 'react';\r\n\r\n/**\r\n * Window events that ask every mounted grid header to re-run validation.\r\n * Hosts dispatch one after changing something the grid cannot observe\r\n * (e.g. a header form field that feeds a column `requiredIf` rule).\r\n * `erp-table:revalidate` is the legacy arianERP name and stays supported.\r\n */\r\nexport const GRID_REVALIDATE_EVENT = 'pdg-grid:revalidate';\r\nexport const LEGACY_GRID_REVALIDATE_EVENT = 'erp-table:revalidate';\r\n\r\n/** Increments whenever a host fires a revalidate event. SSR-safe. */\r\nexport function useRevalidateRevision(): number {\r\n const [revision, setRevision] = useState(0);\r\n useEffect(() => {\r\n const bump = () => setRevision((v) => v + 1);\r\n const names = [GRID_REVALIDATE_EVENT, LEGACY_GRID_REVALIDATE_EVENT];\r\n names.forEach((n) => window.addEventListener(n, bump));\r\n return () => names.forEach((n) => window.removeEventListener(n, bump));\r\n }, []);\r\n return revision;\r\n}\r\n","import { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { GridSearchMatch } from './types';\r\n\r\nexport function getCellSearchText(\r\n controller: UITableController,\r\n rowId: number,\r\n columnId: string,\r\n): string {\r\n const cell = controller.getCell(rowId, columnId);\r\n const display = cell?.getDisplay();\r\n const value = cell?.getValue();\r\n if (display != null && display !== '') return String(display);\r\n return String(value ?? '');\r\n}\r\n\r\nexport function findColumnMatches(\r\n controller: UITableController,\r\n columnId: string,\r\n query: string,\r\n): GridSearchMatch[] {\r\n const q = query.trim();\r\n if (!q) return [];\r\n // PR-99: QuickFilterIndex candidates + UI order (no O(n) getAllRows scan).\r\n return controller.findColumnSearchMatches(columnId, q);\r\n}\r\n\r\n/** 0-based index in the same order as Desktop virtual body. */\r\nexport function getSortedRowAbsoluteIndex(\r\n controller: UITableController,\r\n rowId: number,\r\n): number {\r\n return controller.getUiRowAbsoluteIndex(rowId);\r\n}\r\n\r\nexport function computeVirtualScrollOffset(\r\n absoluteIndex: number,\r\n rowHeight: number,\r\n viewportSize: number,\r\n): number {\r\n if (absoluteIndex < 0) return 0;\r\n const lead = Math.min(Math.floor(viewportSize / 3), rowHeight * 2);\r\n return Math.max(0, absoluteIndex * rowHeight - lead);\r\n}\r\n\r\nexport function findTableScrollRoot(\r\n tableKey: string,\r\n): HTMLElement | null {\r\n if (typeof document === 'undefined') return null;\r\n const safeKey = tableKey.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\r\n return document.querySelector(\r\n `[data-erp-table-scroll][data-erp-table-key=\"${safeKey}\"]`,\r\n );\r\n}\r\n\r\nexport function isVirtualScrollRoot(el: HTMLElement | null): boolean {\r\n return el?.dataset.erpVirtualization === 'on';\r\n}\r\n\r\nfunction getTargetPage(\r\n controller: UITableController,\r\n rowId: number,\r\n): number | null {\r\n const absoluteIndex = getSortedRowAbsoluteIndex(controller, rowId);\r\n const table = controller.getViewState();\r\n if (!table || absoluteIndex < 0) return null;\r\n\r\n return Math.ceil((absoluteIndex + 1) / table.pagination.pageSize);\r\n}\r\n\r\n/**\r\n * Brings a row into view (pagination page change OR virtual viewport scroll).\r\n */\r\nexport async function revealRow(\r\n controller: UITableController,\r\n rowId: number,\r\n): Promise<void> {\r\n const table = controller.getViewState();\r\n if (!table) return;\r\n\r\n const tableKey = controller.getTableKey();\r\n const scrollRoot = findTableScrollRoot(tableKey);\r\n const session = controller.getSession();\r\n\r\n if (isVirtualScrollRoot(scrollRoot) && session) {\r\n const absoluteIndex = getSortedRowAbsoluteIndex(controller, rowId);\r\n if (absoluteIndex < 0) return;\r\n\r\n const viewport = session.getViewport();\r\n const scrollOffset = computeVirtualScrollOffset(\r\n absoluteIndex,\r\n viewport.rowHeight,\r\n viewport.viewportSize,\r\n );\r\n\r\n await session.dispatchViewIntent({\r\n type: 'CHANGE_VIEWPORT',\r\n scrollOffset,\r\n viewportSize: viewport.viewportSize,\r\n rowHeight: viewport.rowHeight,\r\n overscan: viewport.overscan,\r\n });\r\n\r\n if (scrollRoot) {\r\n scrollRoot.scrollTop = scrollOffset;\r\n }\r\n return;\r\n }\r\n\r\n let targetPage: number | null;\r\n if (controller.isPagedWindow?.()) {\r\n // Stream from IDB and count the record's ordinal (sorted position) to\r\n // derive the page — no full row array in heap.\r\n const { findPagedRowPage } = await import('./pagedSearch');\r\n targetPage = await findPagedRowPage(controller, rowId, table.pagination.pageSize);\r\n } else {\r\n targetPage = getTargetPage(controller, rowId);\r\n }\r\n if (!targetPage) return;\r\n\r\n if (table.pagination.page !== targetPage) {\r\n await controller.dispatch({ type: 'CHANGE_PAGE', page: targetPage });\r\n }\r\n}\r\n\r\nexport async function navigateToMatch(\r\n controller: UITableController,\r\n match: GridSearchMatch,\r\n): Promise<void> {\r\n const table = controller.getViewState();\r\n if (!table) return;\r\n\r\n await revealRow(controller, match.rowId);\r\n await controller.dispatch({ type: 'UI_ACTIVE_ROW', rowId: match.rowId });\r\n}\r\n","import type { ReactNode } from 'react';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport type {\r\n ColumnFilter,\r\n FilterModel,\r\n} from '../../engine/dataOps/filterModel';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\n\r\n/**\r\n * Context passed to a host `FilterComponent` (PR-95).\r\n * Call `apply` with a `ColumnFilter` (usually `{ filterType: 'custom', customFilter }`).\r\n */\r\nexport type FilterComponentContext = {\r\n column: ColumnSchema;\r\n colId: string;\r\n filterModel: FilterModel;\r\n current: ColumnFilter | undefined;\r\n params?: Record<string, unknown>;\r\n controller: UITableController;\r\n apply: (next: ColumnFilter | null) => void;\r\n close: () => void;\r\n};\r\n\r\nexport type FilterComponent = (ctx: FilterComponentContext) => ReactNode;\r\n\r\n/**\r\n * Host map of custom filter UIs. Keys match `ColumnDef.filter` string / `{ type }` (PR-95).\r\n */\r\nexport type FilterComponentMap = Record<string, FilterComponent | undefined>;\r\n\r\nexport function resolveFilterComponent(\r\n name: string | undefined,\r\n components: FilterComponentMap | undefined,\r\n): FilterComponent | undefined {\r\n if (!name || !components) return undefined;\r\n const render = components[name];\r\n return typeof render === 'function' ? render : undefined;\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport {\r\n collectUniqueFilterValues,\r\n type BooleanFilterOp,\r\n type ColumnFilter,\r\n type DateFilterOp,\r\n type FilterModel,\r\n type NumberFilterOp,\r\n type TextFilterOp,\r\n type BuiltinFilterKind,\r\n} from '../../engine/dataOps/filterModel';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { FilterComponent } from '../filters';\r\nimport { useThemePortalStyle, useTranslations } from '../host';\r\n\r\ntype Props = {\r\n column: ColumnSchema;\r\n kind?: BuiltinFilterKind;\r\n /** Custom filter registry name (PR-95). */\r\n customName?: string;\r\n customParams?: Record<string, unknown>;\r\n customComponent?: FilterComponent;\r\n filterModel: FilterModel;\r\n controller: UITableController;\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n anchorRef: React.RefObject<HTMLElement | null>;\r\n};\r\n\r\nconst TEXT_OPS: TextFilterOp[] = [\r\n 'contains',\r\n 'notContains',\r\n 'equals',\r\n 'startsWith',\r\n 'endsWith',\r\n 'blank',\r\n 'notBlank',\r\n];\r\n\r\nconst NUMBER_OPS: NumberFilterOp[] = [\r\n 'equals',\r\n 'notEqual',\r\n 'lessThan',\r\n 'lessThanOrEqual',\r\n 'greaterThan',\r\n 'greaterThanOrEqual',\r\n 'inRange',\r\n 'blank',\r\n];\r\n\r\nconst DATE_OPS: DateFilterOp[] = [\r\n 'equals',\r\n 'before',\r\n 'after',\r\n 'inRange',\r\n 'blank',\r\n];\r\n\r\nfunction patchModel(\r\n model: FilterModel,\r\n colId: string,\r\n next: ColumnFilter | null,\r\n): FilterModel {\r\n const out: Record<string, ColumnFilter> = { ...model };\r\n if (next == null) delete out[colId];\r\n else out[colId] = next;\r\n return out;\r\n}\r\n\r\nexport function ColumnFilterPopover({\r\n column,\r\n kind,\r\n customName,\r\n customParams,\r\n customComponent,\r\n filterModel,\r\n controller,\r\n open,\r\n onOpenChange,\r\n anchorRef,\r\n}: Props) {\r\n const t = useTranslations();\r\n const [pos, setPos] = useState({ top: 0, left: 0 });\r\n const panelRef = useRef<HTMLDivElement>(null);\r\n const current = filterModel[column.fieldName];\r\n const menuStyle = useThemePortalStyle({\r\n position: 'fixed',\r\n top: pos.top,\r\n left: pos.left,\r\n zIndex: 60,\r\n });\r\n\r\n useEffect(() => {\r\n if (!open || !anchorRef.current) return;\r\n const rect = anchorRef.current.getBoundingClientRect();\r\n setPos({ top: rect.bottom + 4, left: rect.left });\r\n }, [open, anchorRef]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onDoc = (e: MouseEvent) => {\r\n const target = e.target as Node;\r\n if (anchorRef.current?.contains(target)) return;\r\n if (panelRef.current?.contains(target)) return;\r\n onOpenChange(false);\r\n };\r\n document.addEventListener('mousedown', onDoc);\r\n return () => document.removeEventListener('mousedown', onDoc);\r\n }, [open, onOpenChange, anchorRef]);\r\n\r\n const uniqueValues = useMemo(() => {\r\n if (!open || kind !== 'set') return [];\r\n const rows = controller.getAllRows() ?? [];\r\n const ids = rows.map((r) => r.id.value);\r\n return collectUniqueFilterValues(ids, column.fieldName, {\r\n getValue: (rowId, colId) =>\r\n controller.getCell(rowId, colId)?.getValue() ?? null,\r\n });\r\n }, [open, kind, controller, column.fieldName]);\r\n\r\n if (!open || typeof document === 'undefined') return null;\r\n\r\n const apply = (next: ColumnFilter | null) => {\r\n controller.setFilterModel(patchModel(filterModel, column.fieldName, next));\r\n };\r\n\r\n const popoverKind = customName ? `custom:${customName}` : kind ?? 'custom';\r\n\r\n return createPortal(\r\n <div\r\n ref={panelRef}\r\n className=\"pdg-filter-popover\"\r\n data-pdg-filter-popover={popoverKind}\r\n data-pdg-filter-col={column.fieldName}\r\n role=\"dialog\"\r\n aria-label={t('general.filter')}\r\n style={menuStyle}\r\n >\r\n {customComponent ? (\r\n <div data-pdg-filter-custom={customName}>\r\n {customComponent({\r\n column,\r\n colId: column.fieldName,\r\n filterModel,\r\n current,\r\n params: customParams,\r\n controller,\r\n apply: (next) => {\r\n apply(next);\r\n onOpenChange(false);\r\n },\r\n close: () => onOpenChange(false),\r\n })}\r\n </div>\r\n ) : null}\r\n {!customComponent && kind === 'text' ? (\r\n <TextFilterForm\r\n current={current}\r\n onApply={(f) => {\r\n apply(f);\r\n onOpenChange(false);\r\n }}\r\n onClear={() => {\r\n apply(null);\r\n onOpenChange(false);\r\n }}\r\n />\r\n ) : null}\r\n {!customComponent && kind === 'number' ? (\r\n <NumberFilterForm\r\n current={current}\r\n onApply={(f) => {\r\n apply(f);\r\n onOpenChange(false);\r\n }}\r\n onClear={() => {\r\n apply(null);\r\n onOpenChange(false);\r\n }}\r\n />\r\n ) : null}\r\n {!customComponent && kind === 'date' ? (\r\n <DateFilterForm\r\n current={current}\r\n onApply={(f) => {\r\n apply(f);\r\n onOpenChange(false);\r\n }}\r\n onClear={() => {\r\n apply(null);\r\n onOpenChange(false);\r\n }}\r\n />\r\n ) : null}\r\n {!customComponent && kind === 'boolean' ? (\r\n <BooleanFilterForm\r\n current={current}\r\n onApply={(f) => {\r\n apply(f);\r\n onOpenChange(false);\r\n }}\r\n onClear={() => {\r\n apply(null);\r\n onOpenChange(false);\r\n }}\r\n />\r\n ) : null}\r\n {!customComponent && kind === 'set' ? (\r\n <SetFilterForm\r\n values={uniqueValues}\r\n current={current}\r\n onApply={(f) => {\r\n apply(f);\r\n onOpenChange(false);\r\n }}\r\n onClear={() => {\r\n apply(null);\r\n onOpenChange(false);\r\n }}\r\n />\r\n ) : null}\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n\r\nfunction TextFilterForm({\r\n current,\r\n onApply,\r\n onClear,\r\n}: {\r\n current: ColumnFilter | undefined;\r\n onApply: (f: ColumnFilter) => void;\r\n onClear: () => void;\r\n}) {\r\n const t = useTranslations();\r\n const initial =\r\n current && 'filterType' in current && current.filterType === 'text'\r\n ? current\r\n : null;\r\n const [type, setType] = useState<TextFilterOp>(initial?.type ?? 'contains');\r\n const [filter, setFilter] = useState(String(initial?.filter ?? ''));\r\n const needsValue = type !== 'blank' && type !== 'notBlank';\r\n\r\n return (\r\n <form\r\n className=\"pdg-filter-form\"\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n onApply({\r\n filterType: 'text',\r\n type,\r\n filter: needsValue ? filter : undefined,\r\n });\r\n }}\r\n >\r\n <select\r\n className=\"pdg-filter-select\"\r\n value={type}\r\n onChange={(e) => setType(e.target.value as TextFilterOp)}\r\n aria-label={t('general.filter')}\r\n >\r\n {TEXT_OPS.map((op) => (\r\n <option key={op} value={op}>\r\n {op}\r\n </option>\r\n ))}\r\n </select>\r\n {needsValue ? (\r\n <input\r\n className=\"pdg-filter-input\"\r\n value={filter}\r\n onChange={(e) => setFilter(e.target.value)}\r\n data-pdg-filter-input=\"text\"\r\n />\r\n ) : null}\r\n <div className=\"pdg-filter-actions\">\r\n <button type=\"submit\" className=\"pdg-filter-btn\">\r\n {t('general.filterApply')}\r\n </button>\r\n <button type=\"button\" className=\"pdg-filter-btn\" onClick={onClear}>\r\n {t('general.filterClear')}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n\r\nfunction NumberFilterForm({\r\n current,\r\n onApply,\r\n onClear,\r\n}: {\r\n current: ColumnFilter | undefined;\r\n onApply: (f: ColumnFilter) => void;\r\n onClear: () => void;\r\n}) {\r\n const t = useTranslations();\r\n const initial =\r\n current && 'filterType' in current && current.filterType === 'number'\r\n ? current\r\n : null;\r\n const [type, setType] = useState<NumberFilterOp>(initial?.type ?? 'equals');\r\n const [filter, setFilter] = useState(String(initial?.filter ?? ''));\r\n const [filterTo, setFilterTo] = useState(String(initial?.filterTo ?? ''));\r\n const needsValue = type !== 'blank';\r\n const needsTo = type === 'inRange';\r\n\r\n return (\r\n <form\r\n className=\"pdg-filter-form\"\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n onApply({\r\n filterType: 'number',\r\n type,\r\n filter: needsValue ? filter : undefined,\r\n filterTo: needsTo ? filterTo : undefined,\r\n });\r\n }}\r\n >\r\n <select\r\n className=\"pdg-filter-select\"\r\n value={type}\r\n onChange={(e) => setType(e.target.value as NumberFilterOp)}\r\n >\r\n {NUMBER_OPS.map((op) => (\r\n <option key={op} value={op}>\r\n {op}\r\n </option>\r\n ))}\r\n </select>\r\n {needsValue ? (\r\n <input\r\n className=\"pdg-filter-input\"\r\n value={filter}\r\n onChange={(e) => setFilter(e.target.value)}\r\n data-pdg-filter-input=\"number\"\r\n />\r\n ) : null}\r\n {needsTo ? (\r\n <input\r\n className=\"pdg-filter-input\"\r\n value={filterTo}\r\n onChange={(e) => setFilterTo(e.target.value)}\r\n data-pdg-filter-input=\"number-to\"\r\n />\r\n ) : null}\r\n <div className=\"pdg-filter-actions\">\r\n <button type=\"submit\" className=\"pdg-filter-btn\">\r\n {t('general.filterApply')}\r\n </button>\r\n <button type=\"button\" className=\"pdg-filter-btn\" onClick={onClear}>\r\n {t('general.filterClear')}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n\r\nfunction DateFilterForm({\r\n current,\r\n onApply,\r\n onClear,\r\n}: {\r\n current: ColumnFilter | undefined;\r\n onApply: (f: ColumnFilter) => void;\r\n onClear: () => void;\r\n}) {\r\n const t = useTranslations();\r\n const initial =\r\n current && 'filterType' in current && current.filterType === 'date'\r\n ? current\r\n : null;\r\n const [type, setType] = useState<DateFilterOp>(initial?.type ?? 'equals');\r\n const [dateFrom, setDateFrom] = useState(\r\n String(initial?.dateFrom ?? initial?.filter ?? ''),\r\n );\r\n const [dateTo, setDateTo] = useState(\r\n String(initial?.dateTo ?? initial?.filterTo ?? ''),\r\n );\r\n const needsFrom = type !== 'blank';\r\n const needsTo = type === 'inRange';\r\n\r\n return (\r\n <form\r\n className=\"pdg-filter-form\"\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n onApply({\r\n filterType: 'date',\r\n type,\r\n dateFrom: needsFrom ? dateFrom : undefined,\r\n dateTo: needsTo ? dateTo : undefined,\r\n });\r\n }}\r\n >\r\n <select\r\n className=\"pdg-filter-select\"\r\n value={type}\r\n onChange={(e) => setType(e.target.value as DateFilterOp)}\r\n >\r\n {DATE_OPS.map((op) => (\r\n <option key={op} value={op}>\r\n {op}\r\n </option>\r\n ))}\r\n </select>\r\n {needsFrom ? (\r\n <input\r\n className=\"pdg-filter-input\"\r\n type=\"date\"\r\n value={dateFrom}\r\n onChange={(e) => setDateFrom(e.target.value)}\r\n data-pdg-filter-input=\"date\"\r\n />\r\n ) : null}\r\n {needsTo ? (\r\n <input\r\n className=\"pdg-filter-input\"\r\n type=\"date\"\r\n value={dateTo}\r\n onChange={(e) => setDateTo(e.target.value)}\r\n data-pdg-filter-input=\"date-to\"\r\n />\r\n ) : null}\r\n <div className=\"pdg-filter-actions\">\r\n <button type=\"submit\" className=\"pdg-filter-btn\">\r\n {t('general.filterApply')}\r\n </button>\r\n <button type=\"button\" className=\"pdg-filter-btn\" onClick={onClear}>\r\n {t('general.filterClear')}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n\r\nfunction BooleanFilterForm({\r\n current,\r\n onApply,\r\n onClear,\r\n}: {\r\n current: ColumnFilter | undefined;\r\n onApply: (f: ColumnFilter) => void;\r\n onClear: () => void;\r\n}) {\r\n const t = useTranslations();\r\n const initial =\r\n current && 'filterType' in current && current.filterType === 'boolean'\r\n ? current.type\r\n : 'any';\r\n const [type, setType] = useState<BooleanFilterOp>(initial);\r\n\r\n return (\r\n <form\r\n className=\"pdg-filter-form\"\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n onApply({ filterType: 'boolean', type });\r\n }}\r\n >\r\n {(['true', 'false', 'any'] as const).map((op) => (\r\n <label key={op} className=\"pdg-filter-check\">\r\n <input\r\n type=\"radio\"\r\n name=\"bool-filter\"\r\n checked={type === op}\r\n onChange={() => setType(op)}\r\n data-pdg-filter-input={`boolean-${op}`}\r\n />\r\n {op}\r\n </label>\r\n ))}\r\n <div className=\"pdg-filter-actions\">\r\n <button type=\"submit\" className=\"pdg-filter-btn\">\r\n {t('general.filterApply')}\r\n </button>\r\n <button type=\"button\" className=\"pdg-filter-btn\" onClick={onClear}>\r\n {t('general.filterClear')}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n\r\nfunction SetFilterForm({\r\n values,\r\n current,\r\n onApply,\r\n onClear,\r\n}: {\r\n values: unknown[];\r\n current: ColumnFilter | undefined;\r\n onApply: (f: ColumnFilter) => void;\r\n onClear: () => void;\r\n}) {\r\n const t = useTranslations();\r\n const initial =\r\n current && 'filterType' in current && current.filterType === 'set'\r\n ? new Set(current.values.map((v) => String(v ?? '')))\r\n : new Set(values.map((v) => String(v ?? '')));\r\n const [selected, setSelected] = useState(initial);\r\n\r\n return (\r\n <form\r\n className=\"pdg-filter-form\"\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n onApply({\r\n filterType: 'set',\r\n type: 'in',\r\n values: values.filter((v) => selected.has(String(v ?? ''))),\r\n });\r\n }}\r\n >\r\n <div className=\"pdg-filter-set-list\" data-pdg-filter-input=\"set\">\r\n {values.map((v, i) => {\r\n const key = String(v ?? '');\r\n const label = v == null || v === '' ? '(blank)' : String(v);\r\n return (\r\n <label key={`${key}-${i}`} className=\"pdg-filter-check\">\r\n <input\r\n type=\"checkbox\"\r\n checked={selected.has(key)}\r\n onChange={(e) => {\r\n setSelected((prev) => {\r\n const next = new Set(prev);\r\n if (e.target.checked) next.add(key);\r\n else next.delete(key);\r\n return next;\r\n });\r\n }}\r\n />\r\n {label}\r\n </label>\r\n );\r\n })}\r\n </div>\r\n <div className=\"pdg-filter-actions\">\r\n <button type=\"submit\" className=\"pdg-filter-btn\">\r\n {t('general.filterApply')}\r\n </button>\r\n <button type=\"button\" className=\"pdg-filter-btn\" onClick={onClear}>\r\n {t('general.filterClear')}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport {\r\n buildColumnGroupHeaderModel,\r\n type ColumnGroupHeaderCell,\r\n} from '../../engine/dataOps/columnGroups';\r\nimport { columnSizeStyle } from '../../engine/columnWidth';\r\nimport type { ColumnWindowModel } from '../virtual/columnWindow';\r\n\r\ntype Props = {\r\n allVisible: ColumnSchema[];\r\n colWindow: ColumnWindowModel;\r\n columnWidths?: Record<string, number>;\r\n collapsedGroups: Record<string, true>;\r\n onToggleGroup: (groupId: string) => void;\r\n onGroupDragStart?: (groupId: string, leafFields: readonly string[]) => void;\r\n};\r\n\r\nfunction segmentWidth(\r\n columns: readonly ColumnSchema[],\r\n columnWidths: Record<string, number> | undefined,\r\n layoutWidths: Record<string, number>,\r\n): number {\r\n return columns.reduce((sum, col) => {\r\n const size = columnSizeStyle(col, columnWidths, layoutWidths);\r\n return sum + size.width;\r\n }, 0);\r\n}\r\n\r\nfunction renderGroupCell(\r\n cell: ColumnGroupHeaderCell,\r\n columns: readonly ColumnSchema[],\r\n columnWidths: Record<string, number> | undefined,\r\n layoutWidths: Record<string, number>,\r\n onToggleGroup: (groupId: string) => void,\r\n onGroupDragStart?: Props['onGroupDragStart'],\r\n) {\r\n const width = segmentWidth(columns, columnWidths, layoutWidths);\r\n return (\r\n <th\r\n key={`${cell.level}-${cell.groupId}`}\r\n role=\"columnheader\"\r\n colSpan={cell.colspan}\r\n aria-colspan={cell.colspan}\r\n data-erp-col-group={cell.groupId}\r\n className=\"erp-col-group-header relative px-2 text-xs border text-center whitespace-nowrap bg-gray-gray3\"\r\n style={{ width, minWidth: width }}\r\n draggable={Boolean(onGroupDragStart)}\r\n onDragStart={(e) => {\r\n if (!onGroupDragStart) return;\r\n e.dataTransfer.setData('text/plain', cell.groupId);\r\n e.dataTransfer.effectAllowed = 'move';\r\n onGroupDragStart(cell.groupId, cell.leafFields);\r\n }}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"erp-col-group-toggle inline-flex items-center gap-1\"\r\n aria-expanded={!cell.collapsed}\r\n aria-label={cell.collapsed ? 'Expand group' : 'Collapse group'}\r\n data-pdg-no-sort\r\n onClick={() => onToggleGroup(cell.groupId)}\r\n >\r\n <span aria-hidden>{cell.collapsed ? '▸' : '▾'}</span>\r\n <span>{cell.headerName}</span>\r\n </button>\r\n </th>\r\n );\r\n}\r\n\r\nfunction renderZoneGroupRow(\r\n zoneColumns: ColumnSchema[],\r\n level: number,\r\n rowCells: ColumnGroupHeaderCell[],\r\n columnWidths: Record<string, number> | undefined,\r\n layoutWidths: Record<string, number>,\r\n onToggleGroup: (groupId: string) => void,\r\n onGroupDragStart?: Props['onGroupDragStart'],\r\n): React.ReactNode[] {\r\n const nodes: React.ReactNode[] = [];\r\n const fieldSet = new Set(zoneColumns.map((c) => c.fieldName));\r\n let colCursor = 0;\r\n\r\n for (const cell of rowCells) {\r\n const colsInZone = cell.leafFields\r\n .map((f) => zoneColumns.find((c) => c.fieldName === f))\r\n .filter((c): c is ColumnSchema => Boolean(c));\r\n if (colsInZone.length === 0) continue;\r\n\r\n const startIdx = zoneColumns.findIndex((c) => c.fieldName === colsInZone[0]!.fieldName);\r\n while (colCursor < startIdx) {\r\n const gapCol = zoneColumns[colCursor]!;\r\n const gapSize = columnSizeStyle(gapCol, columnWidths, layoutWidths);\r\n nodes.push(\r\n <th\r\n key={`gap-${level}-${gapCol.fieldName}`}\r\n role=\"columnheader\"\r\n aria-hidden\r\n style={{ width: gapSize.width, minWidth: gapSize.width, padding: 0, border: 'none' }}\r\n />,\r\n );\r\n colCursor += 1;\r\n }\r\n\r\n if (!cell.leafFields.some((f) => fieldSet.has(f))) continue;\r\n\r\n nodes.push(\r\n renderGroupCell(\r\n { ...cell, colspan: colsInZone.length },\r\n colsInZone,\r\n columnWidths,\r\n layoutWidths,\r\n onToggleGroup,\r\n onGroupDragStart,\r\n ),\r\n );\r\n colCursor += colsInZone.length;\r\n }\r\n\r\n while (colCursor < zoneColumns.length) {\r\n const gapCol = zoneColumns[colCursor]!;\r\n const gapSize = columnSizeStyle(gapCol, columnWidths, layoutWidths);\r\n nodes.push(\r\n <th\r\n key={`tail-gap-${level}-${gapCol.fieldName}`}\r\n role=\"presentation\"\r\n aria-hidden\r\n style={{ width: gapSize.width, minWidth: gapSize.width, padding: 0, border: 'none' }}\r\n />,\r\n );\r\n colCursor += 1;\r\n }\r\n\r\n return nodes;\r\n}\r\n\r\nexport function ColumnGroupHeaderRows({\r\n allVisible,\r\n colWindow,\r\n columnWidths,\r\n collapsedGroups,\r\n onToggleGroup,\r\n onGroupDragStart,\r\n}: Props) {\r\n const visible = allVisible.filter((c) => !c.hidden);\r\n const model = buildColumnGroupHeaderModel(visible, collapsedGroups);\r\n if (model.maxDepth === 0) return null;\r\n\r\n const layoutWidths = colWindow.layoutWidths;\r\n\r\n return (\r\n <>\r\n {model.rows.map((rowCells, level) => (\r\n <tr\r\n key={`group-row-${level}`}\r\n role=\"row\"\r\n aria-rowindex={level + 1}\r\n className=\"erp-col-group-row bg-gray-gray3\"\r\n data-erp-col-group-level={level}\r\n >\r\n {renderZoneGroupRow(\r\n colWindow.pinnedStart,\r\n level,\r\n rowCells,\r\n columnWidths,\r\n layoutWidths,\r\n onToggleGroup,\r\n onGroupDragStart,\r\n )}\r\n {colWindow.spacerStart > 0 ? (\r\n <th\r\n aria-hidden\r\n role=\"presentation\"\r\n style={{ width: colWindow.spacerStart, minWidth: colWindow.spacerStart, padding: 0, border: 'none' }}\r\n />\r\n ) : null}\r\n {renderZoneGroupRow(\r\n colWindow.scrollable,\r\n level,\r\n rowCells,\r\n columnWidths,\r\n layoutWidths,\r\n onToggleGroup,\r\n onGroupDragStart,\r\n )}\r\n {colWindow.spacerEnd > 0 ? (\r\n <th\r\n aria-hidden\r\n role=\"presentation\"\r\n style={{ width: colWindow.spacerEnd, minWidth: colWindow.spacerEnd, padding: 0, border: 'none' }}\r\n />\r\n ) : null}\r\n {renderZoneGroupRow(\r\n colWindow.pinnedEnd,\r\n level,\r\n rowCells,\r\n columnWidths,\r\n layoutWidths,\r\n onToggleGroup,\r\n onGroupDragStart,\r\n )}\r\n </tr>\r\n ))}\r\n </>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport {\r\n columnMenuItemLabelKey,\r\n isColumnMenuCustomItem,\r\n resolveColumnMenuItems,\r\n sortModelForMenuAction,\r\n type ColumnMenuBuiltInId,\r\n type ColumnMenuItemDef,\r\n type ColumnMenuItemsConfig,\r\n} from '../../engine/dataOps/columnMenu';\r\nimport type { FilterModel } from '../../engine/dataOps/filterModel';\r\nimport type { SortModel } from '../../engine/dataOps/sortModel';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { trapTabKey } from '../../infrastructure/ui/focusTrap';\r\nimport { useThemePortalStyle, useTranslations } from '../host';\r\n\r\nexport type ColumnMenuActionEvent = {\r\n name: string;\r\n columnId: string;\r\n};\r\n\r\ntype Props = {\r\n column: ColumnSchema;\r\n controller: UITableController;\r\n sortModel: SortModel;\r\n filterModel: FilterModel;\r\n itemsConfig?: ColumnMenuItemsConfig;\r\n onCustomAction?: (event: ColumnMenuActionEvent) => void;\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n anchorRef: React.RefObject<HTMLElement | null>;\r\n onOpenFilter?: () => void;\r\n onOpenColumnsPanel?: () => void;\r\n};\r\n\r\ntype MenuRow =\r\n | { kind: 'separator'; key: string }\r\n | { kind: 'item'; key: string; label: string; disabled?: boolean; action: () => void };\r\n\r\nfunction buildRows(\r\n items: ColumnMenuItemDef[],\r\n column: ColumnSchema,\r\n controller: UITableController,\r\n sortModel: SortModel,\r\n onCustomAction: ((event: ColumnMenuActionEvent) => void) | undefined,\r\n onOpenFilter: (() => void) | undefined,\r\n onOpenColumnsPanel: (() => void) | undefined,\r\n t: (key: string) => string,\r\n): MenuRow[] {\r\n const colId = column.fieldName;\r\n const rows: MenuRow[] = [];\r\n\r\n for (const item of items) {\r\n if (item === 'separator') {\r\n rows.push({ kind: 'separator', key: `sep-${rows.length}` });\r\n continue;\r\n }\r\n if (isColumnMenuCustomItem(item)) {\r\n rows.push({\r\n kind: 'item',\r\n key: `custom-${item.name}`,\r\n label: item.label,\r\n disabled: item.disabled,\r\n action: () => onCustomAction?.({ name: item.name, columnId: colId }),\r\n });\r\n continue;\r\n }\r\n const id = item as ColumnMenuBuiltInId;\r\n if (id === 'separator') continue;\r\n rows.push({\r\n kind: 'item',\r\n key: id,\r\n label: t(columnMenuItemLabelKey(id)),\r\n action: () => {\r\n switch (id) {\r\n case 'sortAsc':\r\n controller.setSortModel(sortModelForMenuAction(sortModel, colId, 'asc'));\r\n break;\r\n case 'sortDesc':\r\n controller.setSortModel(sortModelForMenuAction(sortModel, colId, 'desc'));\r\n break;\r\n case 'sortNone':\r\n controller.setSortModel(sortModelForMenuAction(sortModel, colId, 'none'));\r\n break;\r\n case 'filter':\r\n onOpenFilter?.();\r\n break;\r\n case 'hideColumn':\r\n controller.setColumnVisible(colId, false);\r\n break;\r\n case 'pinStart':\r\n controller.setColumnPinned(colId, 'start');\r\n break;\r\n case 'pinEnd':\r\n controller.setColumnPinned(colId, 'end');\r\n break;\r\n case 'pinNone':\r\n controller.setColumnPinned(colId, null);\r\n break;\r\n case 'autoSize':\r\n controller.autoSizeColumns([colId]);\r\n break;\r\n case 'columnsPanel':\r\n onOpenColumnsPanel?.();\r\n break;\r\n default:\r\n break;\r\n }\r\n },\r\n });\r\n }\r\n\r\n return rows;\r\n}\r\n\r\nexport function ColumnMenuPopover({\r\n column,\r\n controller,\r\n sortModel,\r\n itemsConfig,\r\n onCustomAction,\r\n open,\r\n onOpenChange,\r\n anchorRef,\r\n onOpenFilter,\r\n onOpenColumnsPanel,\r\n}: Props) {\r\n const t = useTranslations();\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n const [pos, setPos] = useState({ top: 0, left: 0 });\r\n const [focusIndex, setFocusIndex] = useState(0);\r\n const portalStyle = useThemePortalStyle({\r\n position: 'fixed',\r\n top: pos.top,\r\n left: pos.left,\r\n zIndex: 1200,\r\n });\r\n\r\n const pagedWindow = controller.isPagedWindow();\r\n const items = useMemo(\r\n () => resolveColumnMenuItems(column, itemsConfig, { pagedWindow }),\r\n [column, itemsConfig, pagedWindow],\r\n );\r\n\r\n const rows = useMemo(\r\n () =>\r\n buildRows(\r\n items,\r\n column,\r\n controller,\r\n sortModel,\r\n onCustomAction,\r\n onOpenFilter,\r\n onOpenColumnsPanel,\r\n t,\r\n ),\r\n [\r\n items,\r\n column,\r\n controller,\r\n sortModel,\r\n onCustomAction,\r\n onOpenFilter,\r\n onOpenColumnsPanel,\r\n t,\r\n ],\r\n );\r\n\r\n const actionable = rows.filter((r) => r.kind === 'item') as Extract<\r\n MenuRow,\r\n { kind: 'item' }\r\n >[];\r\n\r\n useEffect(() => {\r\n if (!open || !anchorRef.current) return;\r\n const rect = anchorRef.current.getBoundingClientRect();\r\n setPos({ top: rect.bottom + 4, left: rect.left });\r\n setFocusIndex(0);\r\n }, [open, anchorRef]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onKey = (e: KeyboardEvent) => {\r\n if (menuRef.current && trapTabKey(menuRef.current, e)) {\r\n return;\r\n }\r\n if (e.key === 'Escape') {\r\n e.preventDefault();\r\n onOpenChange(false);\r\n return;\r\n }\r\n if (actionable.length === 0) return;\r\n if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n setFocusIndex((i) => (i + 1) % actionable.length);\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n setFocusIndex((i) => (i - 1 + actionable.length) % actionable.length);\r\n } else if (e.key === 'Enter') {\r\n e.preventDefault();\r\n const row = actionable[focusIndex];\r\n if (row && !row.disabled) {\r\n row.action();\r\n onOpenChange(false);\r\n }\r\n }\r\n };\r\n document.addEventListener('keydown', onKey);\r\n return () => document.removeEventListener('keydown', onKey);\r\n }, [open, actionable, focusIndex, onOpenChange]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const id = requestAnimationFrame(() => {\r\n const focused = menuRef.current?.querySelector<HTMLElement>(\r\n '[role=\"menuitem\"]:not([disabled])',\r\n );\r\n focused?.focus();\r\n });\r\n return () => cancelAnimationFrame(id);\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onDoc = (e: MouseEvent) => {\r\n const target = e.target as Node;\r\n if (menuRef.current?.contains(target)) return;\r\n if (anchorRef.current?.contains(target)) return;\r\n onOpenChange(false);\r\n };\r\n document.addEventListener('mousedown', onDoc);\r\n return () => document.removeEventListener('mousedown', onDoc);\r\n }, [open, onOpenChange, anchorRef]);\r\n\r\n if (!open || typeof document === 'undefined') return null;\r\n\r\n let actionCursor = -1;\r\n\r\n return createPortal(\r\n <div\r\n ref={menuRef}\r\n role=\"menu\"\r\n className=\"erp-col-menu pdg-col-menu\"\r\n data-pdg-col-menu={column.fieldName}\r\n style={portalStyle}\r\n >\r\n {rows.map((row) => {\r\n if (row.kind === 'separator') {\r\n return (\r\n <div\r\n key={row.key}\r\n role=\"separator\"\r\n className=\"erp-col-menu__separator\"\r\n data-pdg-col-menu-separator\r\n />\r\n );\r\n }\r\n actionCursor += 1;\r\n const idx = actionCursor;\r\n const focused = idx === focusIndex;\r\n return (\r\n <button\r\n key={row.key}\r\n type=\"button\"\r\n role=\"menuitem\"\r\n data-pdg-col-menu-item={row.key}\r\n className={`erp-col-menu__item${focused ? ' is-focused' : ''}`}\r\n disabled={row.disabled}\r\n tabIndex={focused ? 0 : -1}\r\n onMouseEnter={() => setFocusIndex(idx)}\r\n onClick={() => {\r\n if (row.disabled) return;\r\n row.action();\r\n onOpenChange(false);\r\n }}\r\n >\r\n {row.label}\r\n </button>\r\n );\r\n })}\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n\r\nexport type { ColumnMenuItemDef, ColumnMenuItemsConfig };\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport { isIndexColumn } from '../../engine/columnWidth';\r\nimport { canSetColumnVisible } from '../../engine/dataOps/columnVisibility';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { trapTabKey } from '../../infrastructure/ui/focusTrap';\r\nimport { useThemePortalStyle, useTranslations } from '../host';\r\n\r\ntype Props = {\r\n columns: ColumnSchema[];\r\n controller: UITableController;\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n anchorRef: React.RefObject<HTMLElement | null>;\r\n};\r\n\r\nexport function ColumnsPanelPopover({\r\n columns,\r\n controller,\r\n open,\r\n onOpenChange,\r\n anchorRef,\r\n}: Props) {\r\n const t = useTranslations();\r\n const panelRef = useRef<HTMLDivElement>(null);\r\n const [pos, setPos] = useState({ top: 0, left: 0 });\r\n const portalStyle = useThemePortalStyle({\r\n position: 'fixed',\r\n top: pos.top,\r\n left: pos.left,\r\n zIndex: 1200,\r\n minWidth: 200,\r\n });\r\n\r\n const togglable = columns.filter((c) => !isIndexColumn(c));\r\n\r\n useEffect(() => {\r\n if (!open || !anchorRef.current) return;\r\n const rect = anchorRef.current.getBoundingClientRect();\r\n setPos({ top: rect.bottom + 4, left: rect.left });\r\n }, [open, anchorRef]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onKey = (e: KeyboardEvent) => {\r\n if (panelRef.current && trapTabKey(panelRef.current, e)) {\r\n return;\r\n }\r\n if (e.key === 'Escape') {\r\n e.preventDefault();\r\n onOpenChange(false);\r\n }\r\n };\r\n document.addEventListener('keydown', onKey);\r\n return () => document.removeEventListener('keydown', onKey);\r\n }, [open, onOpenChange]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onDoc = (e: MouseEvent) => {\r\n const target = e.target as Node;\r\n if (panelRef.current?.contains(target)) return;\r\n if (anchorRef.current?.contains(target)) return;\r\n onOpenChange(false);\r\n };\r\n document.addEventListener('mousedown', onDoc);\r\n return () => document.removeEventListener('mousedown', onDoc);\r\n }, [open, onOpenChange, anchorRef]);\r\n\r\n if (!open || typeof document === 'undefined') return null;\r\n\r\n return createPortal(\r\n <div\r\n ref={panelRef}\r\n role=\"dialog\"\r\n aria-label={t('columnMenu.columnsPanel')}\r\n className=\"erp-col-menu erp-col-columns-panel pdg-col-columns-panel\"\r\n data-pdg-col-columns-panel\r\n style={portalStyle}\r\n >\r\n <div className=\"erp-col-columns-panel__title\">{t('columnMenu.columnsPanel')}</div>\r\n <ul className=\"erp-col-columns-panel__list\" role=\"listbox\">\r\n {togglable.map((col) => {\r\n const visible = !col.hidden;\r\n const locked = canSetColumnVisible(col, true).ok === false && !visible;\r\n return (\r\n <li key={col.fieldName} role=\"option\" aria-selected={visible}>\r\n <label className=\"erp-col-columns-panel__row\">\r\n <input\r\n type=\"checkbox\"\r\n checked={visible}\r\n disabled={locked}\r\n data-pdg-col-panel-toggle={col.fieldName}\r\n onChange={() => {\r\n controller.setColumnVisible(col.fieldName, !visible);\r\n }}\r\n />\r\n <span>{col.fieldCaption}</span>\r\n </label>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useRef } from 'react';\r\n\r\nimport { clampColumnWidth, type ColumnWidthHint } from '../../engine/columnWidth';\r\n\r\ntype Props = {\r\n columnId: string;\r\n currentWidth: number;\r\n column: ColumnWidthHint;\r\n direction: 'rtl' | 'ltr';\r\n onResize: (width: number) => void;\r\n /** Double-click resize handle → auto-size this column (PR-112). */\r\n onAutoSize?: () => void;\r\n};\r\n\r\nexport function ColumnResizeHandle({\r\n columnId,\r\n currentWidth,\r\n column,\r\n direction,\r\n onResize,\r\n onAutoSize,\r\n}: Props) {\r\n const drag = useRef<{ startX: number; startW: number } | null>(null);\r\n\r\n const endDrag = (target: HTMLElement, pointerId: number) => {\r\n drag.current = null;\r\n document.body.classList.remove('erp-col-resizing');\r\n try {\r\n target.releasePointerCapture(pointerId);\r\n } catch {\r\n /* already released */\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n aria-label=\"Resize column\"\r\n data-erp-col-resize={columnId}\r\n className=\"erp-col-resize\"\r\n onDragStart={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }}\r\n onPointerDown={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n e.currentTarget.setPointerCapture(e.pointerId);\r\n drag.current = { startX: e.clientX, startW: currentWidth };\r\n document.body.classList.add('erp-col-resizing');\r\n }}\r\n onPointerMove={(e) => {\r\n if (!drag.current) return;\r\n const delta =\r\n direction === 'rtl'\r\n ? drag.current.startX - e.clientX\r\n : e.clientX - drag.current.startX;\r\n onResize(clampColumnWidth(drag.current.startW + delta, column));\r\n }}\r\n onPointerUp={(e) => {\r\n endDrag(e.currentTarget, e.pointerId);\r\n }}\r\n onPointerCancel={(e) => {\r\n endDrag(e.currentTarget, e.pointerId);\r\n }}\r\n onLostPointerCapture={() => {\r\n drag.current = null;\r\n document.body.classList.remove('erp-col-resizing');\r\n }}\r\n onDoubleClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onAutoSize?.();\r\n }}\r\n />\r\n );\r\n}\r\n","import React, { type ReactNode, useEffect, useRef, useState } from 'react';\r\nimport { CustomDropdownButton, CustomCheckbox } from '../primitives';\r\n\r\nimport { ColumnSchema } from '../../bootstrap/type';\r\nimport { resolveColumnReorder } from '../../engine/columnReorder';\r\nimport { columnSizeStyle, isIndexColumn } from '../../engine/columnWidth';\r\nimport {\r\n isColumnFilterActive,\r\n resolveFilterUi,\r\n type ColumnFilter,\r\n type FilterModel,\r\n} from '../../engine/dataOps/filterModel';\r\nimport {\r\n ariaSortForColumn,\r\n cycleSortModel,\r\n HEADER_SORT_CLICK_MAX_MOVE_PX,\r\n shouldCommitHeaderSortClick,\r\n sortPriorityForColumn,\r\n} from '../../engine/dataOps/sortModel';\r\nimport {\r\n isColumnFilterableInGrid,\r\n isColumnSortableInGrid,\r\n} from '../../engine/dataOps/columnMenu';\r\nimport { ValidationCallbackResult } from '../../engine/type';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useRevalidateRevision } from '../hooks/useRevalidateRevision';\r\nimport { revealRow } from '../gridSearch/utils';\r\nimport {\r\n resolveFilterComponent,\r\n type FilterComponentMap,\r\n} from '../filters';\r\nimport { useDirection, useERPTableHost, useTranslations } from '../host';\r\nimport { useColumnWindowOrAll } from '../virtual/columnWindow';\r\nimport { ColumnWindowCells } from '../virtual/ColumnWindowCells';\r\nimport {\r\n ARIA_HEADER_ROW_INDEX,\r\n ariaColIndex,\r\n} from '../a11y/gridRoles';\r\nimport { columnPinCellProps, columnPinClassName } from '../columnPin';\r\nimport { ColumnFilterPopover } from './ColumnFilterPopover';\r\nimport { ColumnGroupHeaderRows } from './ColumnGroupHeaderRows';\r\nimport { ColumnMenuPopover } from './ColumnMenuPopover';\r\nimport { ColumnsPanelPopover } from './ColumnsPanelPopover';\r\nimport { ColumnResizeHandle } from './ColumnResizeHandle';\r\nimport {\r\n maxColumnGroupDepth,\r\n resolveGroupBlockReorder,\r\n} from '../../engine/dataOps/columnGroups';\r\n\r\ninterface Props {\r\n controller: UITableController;\r\n tableKey: string;\r\n header?: ReactNode;\r\n /** Optional floating filter row under the header (PR-94). */\r\n floatingFilter?: boolean;\r\n /** Custom filter UI registry (PR-95). */\r\n filterComponents?: FilterComponentMap;\r\n}\r\n\r\nfunction isInteractiveHeaderTarget(target: EventTarget | null): boolean {\r\n if (!(target instanceof Element)) return false;\r\n return Boolean(\r\n target.closest(\r\n '.erp-col-resize, button, input, [role=\"checkbox\"], [data-pdg-no-sort], [data-pdg-filter-btn], [data-pdg-col-menu-btn]',\r\n ),\r\n );\r\n}\r\n\r\nfunction floatingFilterValue(\r\n model: FilterModel,\r\n colId: string,\r\n): string {\r\n const entry = model[colId];\r\n if (!entry || !('filterType' in entry)) return '';\r\n if (entry.filterType === 'text') return String(entry.filter ?? '');\r\n if (entry.filterType === 'number') return String(entry.filter ?? '');\r\n if (entry.filterType === 'date') {\r\n return String(entry.dateFrom ?? entry.filter ?? '');\r\n }\r\n return '';\r\n}\r\n\r\nfunction applyFloatingFilter(\r\n model: FilterModel,\r\n col: ColumnSchema,\r\n raw: string,\r\n): FilterModel {\r\n const ui = resolveFilterUi(col);\r\n const next: Record<string, ColumnFilter> = { ...model };\r\n if (!ui || ui.mode !== 'builtin' || raw.trim() === '') {\r\n delete next[col.fieldName];\r\n return next;\r\n }\r\n const kind = ui.kind;\r\n if (kind === 'number') {\r\n next[col.fieldName] = {\r\n filterType: 'number',\r\n type: 'equals',\r\n filter: raw,\r\n };\r\n } else if (kind === 'date') {\r\n next[col.fieldName] = {\r\n filterType: 'date',\r\n type: 'equals',\r\n dateFrom: raw,\r\n };\r\n } else if (kind === 'boolean') {\r\n const v = raw.trim().toLowerCase();\r\n next[col.fieldName] = {\r\n filterType: 'boolean',\r\n type: v === 'true' || v === '1' ? 'true' : v === 'false' || v === '0' ? 'false' : 'any',\r\n };\r\n } else {\r\n next[col.fieldName] = {\r\n filterType: 'text',\r\n type: 'contains',\r\n filter: raw,\r\n };\r\n }\r\n return next;\r\n}\r\n\r\nexport function ERPTableHeader({\r\n controller,\r\n tableKey,\r\n header,\r\n floatingFilter = false,\r\n filterComponents,\r\n}: Props) {\r\n const direction = useDirection();\r\n const t = useTranslations();\r\n const host = useERPTableHost();\r\n const filters = filterComponents ?? host.filterComponents;\r\n const columnMenuItems = host.columnMenuItems;\r\n const onColumnMenuAction = host.onColumnMenuAction;\r\n const table = controller.getViewState();\r\n /** Page-window grid: header sort / filter only on columns that opt in. */\r\n const pagedWindow = controller.isPagedWindow();\r\n const draggedFieldRef = useRef<string | null>(null);\r\n const draggedGroupRef = useRef<string | null>(null);\r\n const pointerOriginRef = useRef<{ x: number; y: number } | null>(null);\r\n const suppressSortClickRef = useRef(false);\r\n const filterBtnRefs = useRef<Record<string, HTMLButtonElement | null>>({});\r\n const menuBtnRefs = useRef<Record<string, HTMLButtonElement | null>>({});\r\n const columnsPanelAnchorRef = useRef<HTMLButtonElement | null>(null);\r\n const [dropField, setDropField] = useState<string | null>(null);\r\n const [openFilterCol, setOpenFilterCol] = useState<string | null>(null);\r\n const [openMenuCol, setOpenMenuCol] = useState<string | null>(null);\r\n const [openColumnsPanel, setOpenColumnsPanel] = useState(false);\r\n const [validationResult, setValidationResult] =\r\n useState<ValidationCallbackResult>({\r\n valid: true,\r\n data: null,\r\n errors: new Map(),\r\n });\r\n\r\n const validationRevision = useRevalidateRevision();\r\n\r\n useEffect(() => {\r\n const validation = controller.validation();\r\n validation((res) => {\r\n setValidationResult(res);\r\n });\r\n }, [\r\n controller,\r\n table?.activeCell?.columnId,\r\n table?.activeCell?.rowId,\r\n validationRevision,\r\n ]);\r\n\r\n const displayColumns = table?.columns ?? [];\r\n const collapsedGroups = table?.collapsedColumnGroups ?? {};\r\n const colWindow = useColumnWindowOrAll(displayColumns, table?.columnWidths);\r\n const groupDepth = maxColumnGroupDepth(displayColumns);\r\n\r\n if (!table || !table.columns) return null;\r\n\r\n const visibleColumns = displayColumns.filter((c: ColumnSchema) => !c.hidden);\r\n const sortModel = table.sortModel ?? [];\r\n const filterModel = table.filterModel ?? {};\r\n const isSelectedActivePageRows = table.rows.every(\r\n (row) => !!table.selectedRows[row.id],\r\n );\r\n const handleSelectActivePageRows = () => {\r\n controller.dispatch({type: \"TOGGLE_PAGE_ROW_SELECTED\"});\r\n };\r\n const allRows = controller.getAllRows() ?? [];\r\n const handleNavigateToError = (rowId: number) => {\r\n void revealRow(controller, rowId);\r\n };\r\n const items = Array.from((validationResult.errors ?? new Map()).entries()).map(\r\n ([key, value], errorIndex) => {\r\n const Index = allRows.findIndex((r) => r.id.value == value.rowId) + 1;\r\n\r\n return {\r\n key: errorIndex.toString(),\r\n\r\n label: (\r\n <button\r\n className=\"flex bg-red-300 text-red-600 text-xs\"\r\n onClick={() => {\r\n handleNavigateToError(value.rowId);\r\n }}\r\n >\r\n {`${t('general.validationInRow')} ${Index} ${t('general.validationInColumn')} ${value.caption} : ${value.message}`}\r\n </button>\r\n ),\r\n };\r\n },\r\n );\r\n const cols = visibleColumns.length;\r\n\r\n const renderHeaderColumn = (col: ColumnSchema, index: number) => {\r\n const size = columnSizeStyle(col, table.columnWidths, colWindow.layoutWidths);\r\n const handle = (\r\n <ColumnResizeHandle\r\n columnId={col.fieldName}\r\n currentWidth={size.width}\r\n column={col}\r\n direction={direction}\r\n onResize={(width) => {\r\n void controller.dispatch({\r\n type: \"UI_RESIZE_COLUMN\",\r\n columnId: col.fieldName,\r\n width,\r\n });\r\n }}\r\n onAutoSize={() => controller.autoSizeColumns([col.fieldName])}\r\n />\r\n );\r\n const pin = columnPinCellProps(col, colWindow.startPinOffsets, colWindow.endPinOffsets);\r\n if (isIndexColumn(col)) {\r\n return (\r\n <th\r\n key={col.fieldName}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n style={{...col.style, ...size, ...pin.style}}\r\n className={`relative px-2 text-xs border text-start whitespace-nowrap ${pin.className} ${col.className || \"\"}`}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <CustomCheckbox\r\n checked={isSelectedActivePageRows}\r\n onClick={handleSelectActivePageRows}\r\n aria-label={t(\"general.toggle\")}\r\n />\r\n\r\n {col.fieldCaption}\r\n </div>\r\n {handle}\r\n </th>\r\n );\r\n }\r\n\r\n const sortable = isColumnSortableInGrid(col, pagedWindow);\r\n const filterUi = isColumnFilterableInGrid(col, pagedWindow)\r\n ? resolveFilterUi(col)\r\n : null;\r\n const customFilter =\r\n filterUi?.mode === 'custom'\r\n ? resolveFilterComponent(filterUi.name, filters)\r\n : undefined;\r\n const filterable =\r\n filterUi != null &&\r\n (filterUi.mode === 'builtin' || customFilter != null);\r\n const filterActive = isColumnFilterActive(filterModel, col.fieldName);\r\n const ariaSort = sortable\r\n ? ariaSortForColumn(sortModel, col.fieldName)\r\n : undefined;\r\n const priority = sortPriorityForColumn(sortModel, col.fieldName);\r\n const showPriority = priority != null && sortModel.length > 1;\r\n\r\n return (\r\n <th\r\n key={col.fieldName}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n aria-sort={ariaSort}\r\n style={{...col.style, ...size, ...pin.style}}\r\n className={`relative px-2 text-xs border text-start min-w-36 ${pin.className} ${col.className || \"\"}`}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n data-erp-col-drag={col.fieldName}\r\n data-erp-col-drop={dropField === col.fieldName ? col.fieldName : undefined}\r\n data-pdg-sortable={sortable ? 'true' : undefined}\r\n data-pdg-filterable={filterable ? 'true' : undefined}\r\n data-pdg-filter-active={filterActive ? 'true' : undefined}\r\n data-pdg-filter-custom={\r\n filterUi?.mode === 'custom' ? filterUi.name : undefined\r\n }\r\n data-pdg-sort-move-px={HEADER_SORT_CLICK_MAX_MOVE_PX}\r\n draggable\r\n onPointerDown={markPointerOrigin}\r\n onPointerMove={trackPointerMove}\r\n onClick={(e) => commitHeaderSort(e, col.fieldName, sortable)}\r\n onDragStart={(e) => beginColumnDrag(e, col.fieldName)}\r\n onDragOver={(e) => {\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = \"move\";\r\n hoverColumnDrop(col.fieldName);\r\n }}\r\n onDragLeave={(e) => {\r\n leaveColumnDrop(\r\n col.fieldName,\r\n e.currentTarget,\r\n e.relatedTarget,\r\n );\r\n }}\r\n onDrop={(e) => {\r\n e.preventDefault();\r\n dropColumn(col.fieldName);\r\n }}\r\n onDragEnd={endColumnDrag}\r\n >\r\n <div className=\"pdg-header-label\">\r\n <span className=\"pdg-header-caption\">{col.fieldCaption}</span>\r\n {sortable ? (\r\n <span className=\"pdg-sort-indicator\" aria-hidden>\r\n {ariaSort === 'ascending' ? (\r\n <span className=\"pdg-sort-icon pdg-sort-icon--asc\">▲</span>\r\n ) : null}\r\n {ariaSort === 'descending' ? (\r\n <span className=\"pdg-sort-icon pdg-sort-icon--desc\">▼</span>\r\n ) : null}\r\n {showPriority ? (\r\n <span className=\"pdg-sort-priority\">{priority}</span>\r\n ) : null}\r\n </span>\r\n ) : null}\r\n {filterable ? (\r\n <button\r\n type=\"button\"\r\n className={`pdg-filter-btn-icon${filterActive ? ' is-active' : ''}`}\r\n data-pdg-filter-btn={col.fieldName}\r\n data-pdg-no-sort\r\n aria-label={t('general.filter')}\r\n aria-expanded={openFilterCol === col.fieldName}\r\n title={filterActive ? t('general.filterActive') : t('general.filter')}\r\n ref={(el) => {\r\n filterBtnRefs.current[col.fieldName] = el;\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setOpenMenuCol(null);\r\n setOpenFilterCol((cur) =>\r\n cur === col.fieldName ? null : col.fieldName,\r\n );\r\n }}\r\n >\r\n ▽\r\n </button>\r\n ) : null}\r\n <button\r\n type=\"button\"\r\n className=\"pdg-col-menu-btn\"\r\n data-pdg-col-menu-btn={col.fieldName}\r\n data-pdg-no-sort\r\n aria-label={t('columnMenu.open')}\r\n aria-haspopup=\"menu\"\r\n aria-expanded={openMenuCol === col.fieldName}\r\n title={t('columnMenu.open')}\r\n ref={(el) => {\r\n menuBtnRefs.current[col.fieldName] = el;\r\n if (openColumnsPanel && openMenuCol === col.fieldName) {\r\n columnsPanelAnchorRef.current = el;\r\n }\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setOpenFilterCol(null);\r\n setOpenColumnsPanel(false);\r\n setOpenMenuCol((cur) =>\r\n cur === col.fieldName ? null : col.fieldName,\r\n );\r\n }}\r\n >\r\n ⋮\r\n </button>\r\n </div>\r\n {openMenuCol === col.fieldName ? (\r\n <ColumnMenuPopover\r\n column={col}\r\n controller={controller}\r\n sortModel={sortModel}\r\n filterModel={filterModel}\r\n itemsConfig={columnMenuItems}\r\n onCustomAction={onColumnMenuAction}\r\n open\r\n onOpenChange={(next) => {\r\n if (!next) setOpenMenuCol(null);\r\n }}\r\n anchorRef={{\r\n get current() {\r\n return menuBtnRefs.current[col.fieldName] ?? null;\r\n },\r\n }}\r\n onOpenFilter={() => {\r\n setOpenMenuCol(null);\r\n setOpenFilterCol(col.fieldName);\r\n }}\r\n onOpenColumnsPanel={() => {\r\n columnsPanelAnchorRef.current =\r\n menuBtnRefs.current[col.fieldName] ?? null;\r\n setOpenMenuCol(null);\r\n setOpenColumnsPanel(true);\r\n }}\r\n />\r\n ) : null}\r\n {filterable && filterUi && openFilterCol === col.fieldName ? (\r\n <ColumnFilterPopover\r\n column={col}\r\n kind={filterUi.mode === 'builtin' ? filterUi.kind : undefined}\r\n customName={\r\n filterUi.mode === 'custom' ? filterUi.name : undefined\r\n }\r\n customParams={\r\n filterUi.mode === 'custom' ? filterUi.params : undefined\r\n }\r\n customComponent={customFilter}\r\n filterModel={filterModel}\r\n controller={controller}\r\n open\r\n onOpenChange={(next) => {\r\n if (!next) setOpenFilterCol(null);\r\n }}\r\n anchorRef={{\r\n get current() {\r\n return filterBtnRefs.current[col.fieldName] ?? null;\r\n },\r\n }}\r\n />\r\n ) : null}\r\n {handle}\r\n </th>\r\n );\r\n };\r\n\r\n const renderFloatingFilterColumn = (col: ColumnSchema, index: number) => {\r\n const size = columnSizeStyle(col, table.columnWidths, colWindow.layoutWidths);\r\n const ui = isColumnFilterableInGrid(col, pagedWindow) ? resolveFilterUi(col) : null;\r\n if (isIndexColumn(col) || !ui || ui.mode !== 'builtin') {\r\n return (\r\n <th\r\n key={`ff-${col.fieldName}`}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n style={size}\r\n className={`pdg-floating-filter-cell ${columnPinClassName(col)}`}\r\n />\r\n );\r\n }\r\n return (\r\n <th\r\n key={`ff-${col.fieldName}`}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n style={size}\r\n className={`pdg-floating-filter-cell ${columnPinClassName(col)}`}\r\n >\r\n <input\r\n className=\"pdg-floating-filter-input\"\r\n data-pdg-floating-filter-input={col.fieldName}\r\n data-pdg-filter-kind={ui.kind}\r\n aria-label={`${t('general.filter')} ${col.fieldCaption}`}\r\n value={floatingFilterValue(filterModel, col.fieldName)}\r\n onChange={(e) => {\r\n controller.setFilterModel(\r\n applyFloatingFilter(filterModel, col, e.target.value),\r\n );\r\n }}\r\n />\r\n </th>\r\n );\r\n };\r\n\r\n const beginColumnDrag = (\r\n e: React.DragEvent<HTMLTableCellElement>,\r\n fieldName: string,\r\n ) => {\r\n suppressSortClickRef.current = true;\r\n draggedFieldRef.current = fieldName;\r\n e.dataTransfer.setData(\"text/plain\", fieldName);\r\n e.dataTransfer.effectAllowed = \"move\";\r\n };\r\n\r\n const hoverColumnDrop = (fieldName: string) => {\r\n setDropField((current) => (current === fieldName ? current : fieldName));\r\n };\r\n\r\n const leaveColumnDrop = (\r\n fieldName: string,\r\n currentTarget: HTMLElement,\r\n relatedTarget: EventTarget | null,\r\n ) => {\r\n if (relatedTarget instanceof Node && currentTarget.contains(relatedTarget)) {\r\n return;\r\n }\r\n setDropField((current) => (current === fieldName ? null : current));\r\n };\r\n\r\n const dropColumn = (destField: string) => {\r\n const sourceField = draggedFieldRef.current;\r\n const sourceGroup = draggedGroupRef.current;\r\n draggedFieldRef.current = null;\r\n draggedGroupRef.current = null;\r\n setDropField(null);\r\n if (sourceGroup) {\r\n const move = resolveGroupBlockReorder(displayColumns, sourceGroup, destField);\r\n if (!move) return;\r\n void controller.dispatch({\r\n type: \"COLUMN_REORDERED\",\r\n sourceIndex: move.sourceIndex,\r\n destIndex: move.destIndex,\r\n });\r\n return;\r\n }\r\n if (!sourceField) return;\r\n const move = resolveColumnReorder(displayColumns, sourceField, destField);\r\n if (!move) return;\r\n void controller.dispatch({\r\n type: \"COLUMN_REORDERED\",\r\n sourceIndex: move.sourceIndex,\r\n destIndex: move.destIndex,\r\n });\r\n };\r\n\r\n const endColumnDrag = () => {\r\n draggedFieldRef.current = null;\r\n draggedGroupRef.current = null;\r\n setDropField(null);\r\n };\r\n\r\n const markPointerOrigin = (e: React.PointerEvent<HTMLTableCellElement>) => {\r\n if (e.button !== 0) return;\r\n pointerOriginRef.current = { x: e.clientX, y: e.clientY };\r\n suppressSortClickRef.current = false;\r\n };\r\n\r\n const trackPointerMove = (e: React.PointerEvent<HTMLTableCellElement>) => {\r\n const origin = pointerOriginRef.current;\r\n if (!origin) return;\r\n const movedPx = Math.hypot(e.clientX - origin.x, e.clientY - origin.y);\r\n if (!shouldCommitHeaderSortClick(movedPx)) {\r\n suppressSortClickRef.current = true;\r\n }\r\n };\r\n\r\n const commitHeaderSort = (\r\n e: React.MouseEvent<HTMLTableCellElement>,\r\n fieldName: string,\r\n sortable: boolean,\r\n ) => {\r\n if (!sortable) return;\r\n if (isInteractiveHeaderTarget(e.target)) return;\r\n if (suppressSortClickRef.current) return;\r\n const origin = pointerOriginRef.current;\r\n if (origin) {\r\n const movedPx = Math.hypot(e.clientX - origin.x, e.clientY - origin.y);\r\n if (!shouldCommitHeaderSortClick(movedPx)) return;\r\n }\r\n const next = cycleSortModel(sortModel, fieldName, { multi: e.shiftKey });\r\n controller.setSortModel(next);\r\n };\r\n\r\n return (\r\n <thead className=\"top-0 z-20 sticky\" role=\"rowgroup\" data-pdg-dir={direction}>\r\n {header}\r\n {!validationResult.valid && (\r\n <CustomDropdownButton\r\n placement=\"bottom\"\r\n className=\"top-1 z-10 absolute flex m-0 p-0 rounded start-1\"\r\n items={items}\r\n >\r\n <span className=\"bg-red-600 border rounded-full w-2 h-2\"></span>\r\n </CustomDropdownButton>\r\n )}\r\n <ColumnGroupHeaderRows\r\n allVisible={visibleColumns}\r\n colWindow={colWindow}\r\n columnWidths={table.columnWidths}\r\n collapsedGroups={collapsedGroups}\r\n onToggleGroup={(groupId) => controller.toggleColumnGroup(groupId)}\r\n onGroupDragStart={(groupId) => {\r\n draggedGroupRef.current = groupId;\r\n }}\r\n />\r\n <tr\r\n role=\"row\"\r\n aria-rowindex={ARIA_HEADER_ROW_INDEX + groupDepth}\r\n style={{gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))`}}\r\n className={`relative h-10 bg-gray-gray3 rounded-t-lg w-full `}\r\n data-pdg-header-cols={\r\n colWindow.pinnedStart.length +\r\n colWindow.mountedScrollableCount +\r\n colWindow.pinnedEnd.length\r\n }\r\n >\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"th\"\r\n spacerRole=\"columnheader\"\r\n renderColumn={renderHeaderColumn}\r\n />\r\n </tr>\r\n <ColumnsPanelPopover\r\n columns={displayColumns}\r\n controller={controller}\r\n open={openColumnsPanel}\r\n onOpenChange={setOpenColumnsPanel}\r\n anchorRef={columnsPanelAnchorRef}\r\n />\r\n {floatingFilter ? (\r\n <tr\r\n role=\"row\"\r\n className=\"pdg-floating-filter-row\"\r\n data-pdg-floating-filter=\"true\"\r\n >\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"th\"\r\n spacerRole=\"columnheader\"\r\n renderColumn={renderFloatingFilterColumn}\r\n />\r\n </tr>\r\n ) : null}\r\n </thead>\r\n );\r\n}\r\n","/**\r\n * Pinned top/bottom host rows (PR-116). Pure — no React/DOM.\r\n * Display-only; not part of the UI row index / sort / filter / selection.\r\n */\r\n\r\nimport type { ColumnSchema } from '../../domain/types/ColumnSchema';\r\nimport { isIndexColumn } from '../columnWidth';\r\n\r\n/** Read a display value from a host pinned row object. */\r\nexport function readPinnedRowCellValue(\r\n row: unknown,\r\n column: ColumnSchema,\r\n): unknown {\r\n if (isIndexColumn(column)) return null;\r\n if (row == null || typeof row !== 'object') return null;\r\n const field = column.fieldName;\r\n if (field in (row as Record<string, unknown>)) {\r\n return (row as Record<string, unknown>)[field];\r\n }\r\n return null;\r\n}\r\n\r\nexport function countPinnedRows(\r\n top: readonly unknown[] | null | undefined,\r\n bottom: readonly unknown[] | null | undefined,\r\n): { top: number; bottom: number } {\r\n return {\r\n top: top?.length ?? 0,\r\n bottom: bottom?.length ?? 0,\r\n };\r\n}\r\n","/**\r\n * Pinned top/bottom rows (PR-116). Rendered outside the virtual window so\r\n * they stay fixed while the scroll body moves.\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport { columnSizeStyle } from '../../engine/columnWidth';\r\nimport { readPinnedRowCellValue } from '../../engine/dataOps/pinnedRows';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport {\r\n ariaColIndex,\r\n ariaPinnedBottomRowIndex,\r\n ariaPinnedTopRowIndex,\r\n} from '../a11y/gridRoles';\r\nimport { columnPinCellProps } from '../columnPin';\r\nimport { valueParser } from '../helper';\r\nimport { useLocale, type ERPTableLocale } from '../host';\r\nimport { useColumnWindowOrAll } from '../virtual/columnWindow';\r\nimport { ColumnWindowCells } from '../virtual/ColumnWindowCells';\r\n\r\nexport type PinnedRowSide = 'top' | 'bottom';\r\n\r\ntype Props<TRow> = {\r\n side: PinnedRowSide;\r\n rows: readonly TRow[];\r\n controller: UITableController;\r\n /** Absolute data row count (for bottom aria indices). */\r\n dataRowCount: number;\r\n pinnedTopCount: number;\r\n};\r\n\r\nfunction PinnedRowCells<TRow>({\r\n row,\r\n columns,\r\n columnWidths,\r\n locale,\r\n}: {\r\n row: TRow;\r\n columns: ColumnSchema[];\r\n columnWidths: Record<string, number> | undefined;\r\n locale: ERPTableLocale;\r\n}) {\r\n const colWindow = useColumnWindowOrAll(columns, columnWidths);\r\n return (\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"td\"\r\n spacerRole=\"presentation\"\r\n renderColumn={(c, index) => {\r\n const pin = columnPinCellProps(\r\n c,\r\n colWindow.startPinOffsets,\r\n colWindow.endPinOffsets,\r\n );\r\n const raw = readPinnedRowCellValue(row, c);\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(index)}\r\n className={pin.className}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n style={{\r\n ...columnSizeStyle(c, columnWidths, colWindow.layoutWidths),\r\n ...pin.style,\r\n }}\r\n >\r\n {valueParser(raw, c.fieldType, locale)}\r\n </td>\r\n );\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport function ERPTablePinnedRows<TRow>({\r\n side,\r\n rows,\r\n controller,\r\n dataRowCount,\r\n pinnedTopCount,\r\n}: Props<TRow>) {\r\n const locale = useLocale();\r\n const view = controller.getViewState();\r\n if (!view || rows.length === 0) return null;\r\n\r\n const columns = view.columns ?? [];\r\n const isTop = side === 'top';\r\n const className = isTop\r\n ? 'erp-pinned-rows erp-pinned-rows--top'\r\n : 'erp-pinned-rows erp-pinned-rows--bottom';\r\n\r\n return (\r\n <tbody\r\n role=\"rowgroup\"\r\n className={className}\r\n data-erp-pinned-top={isTop ? '' : undefined}\r\n data-erp-pinned-bottom={isTop ? undefined : ''}\r\n >\r\n {rows.map((row, index) => {\r\n const ariaRowindex =\r\n side === 'top'\r\n ? ariaPinnedTopRowIndex(index)\r\n : ariaPinnedBottomRowIndex(index, dataRowCount, pinnedTopCount);\r\n return (\r\n <tr\r\n key={`pinned-${side}-${index}`}\r\n role=\"row\"\r\n aria-rowindex={ariaRowindex}\r\n data-erp-pinned-row={side}\r\n className=\"erp-pinned-row\"\r\n >\r\n <PinnedRowCells\r\n row={row}\r\n columns={columns}\r\n columnWidths={view.columnWidths}\r\n locale={locale}\r\n />\r\n </tr>\r\n );\r\n })}\r\n </tbody>\r\n );\r\n}\r\n","// engine/equality.ts — shared equality helpers for selector subscriptions\r\n\r\nexport function shallowEqualArray(\r\n a: unknown[] | null | undefined,\r\n b: unknown[] | null | undefined,\r\n): boolean {\r\n if (a === b) return true;\r\n if (!a || !b || a.length !== b.length) return false;\r\n for (let i = 0; i < a.length; i += 1) {\r\n if (!Object.is(a[i], b[i])) return false;\r\n }\r\n return true;\r\n}\r\n\r\n/** Structural compare for plain JSON-like snapshots (rows / view slices). */\r\nexport function structuralEqual(a: unknown, b: unknown): boolean {\r\n if (Object.is(a, b)) return true;\r\n if (a == null || b == null) return a === b;\r\n if (typeof a !== typeof b) return false;\r\n try {\r\n return JSON.stringify(a) === JSON.stringify(b);\r\n } catch {\r\n return false;\r\n }\r\n}\r\n","import type { VisibleRange } from '../../domain/value-objects/Viewport';\r\nimport { Viewport } from '../../domain/value-objects/Viewport';\r\nimport { SparseRowIndex } from '../../engine/SparseRowIndex';\r\nimport { ViewportCalculator } from '../../engine/ViewportCalculator';\r\n\r\nexport type VirtualWindowModel<T> = {\r\n readonly range: VisibleRange;\r\n readonly visibleItems: readonly T[];\r\n /** Absolute row indices matching visibleItems. */\r\n readonly absoluteIndices: readonly number[];\r\n readonly spacerTop: number;\r\n readonly spacerBottom: number;\r\n readonly totalHeight: number;\r\n};\r\n\r\n/**\r\n * Pure adapter helper: map items + viewport → render window.\r\n * No React / DOM — unit-testable in Node.\r\n */\r\nexport function buildVirtualWindow<T>(\r\n items: readonly T[],\r\n viewport: Viewport,\r\n): VirtualWindowModel<T> {\r\n const range = ViewportCalculator.calculate(items.length, viewport);\r\n const visibleItems = ViewportCalculator.projectRows(items, range);\r\n const absoluteIndices = ViewportCalculator.indices(range);\r\n return {\r\n range,\r\n visibleItems,\r\n absoluteIndices,\r\n spacerTop: range.startOffset,\r\n spacerBottom: range.endOffset,\r\n totalHeight: range.totalHeight,\r\n };\r\n}\r\n\r\n/** Same window as `buildVirtualWindow`, from SparseRowIndex.projectVisible (O(window)). */\r\nexport function buildVirtualWindowFromSparse<T>(\r\n index: SparseRowIndex<T>,\r\n viewport: Viewport,\r\n): VirtualWindowModel<T> {\r\n const range = ViewportCalculator.calculate(index.size, viewport);\r\n const visibleItems = index.projectVisible(range);\r\n const absoluteIndices = ViewportCalculator.indices(range);\r\n return {\r\n range,\r\n visibleItems,\r\n absoluteIndices,\r\n spacerTop: range.startOffset,\r\n spacerBottom: range.endOffset,\r\n totalHeight: range.totalHeight,\r\n };\r\n}\r\n\r\nexport function isSparseRowIndex<T>(\r\n value: readonly T[] | SparseRowIndex<T>,\r\n): value is SparseRowIndex<T> {\r\n return value instanceof SparseRowIndex;\r\n}\r\n\r\nexport function buildVirtualWindowFromSource<T>(\r\n items: readonly T[] | SparseRowIndex<T>,\r\n viewport: Viewport,\r\n): VirtualWindowModel<T> {\r\n return isSparseRowIndex(items)\r\n ? buildVirtualWindowFromSparse(items, viewport)\r\n : buildVirtualWindow(items, viewport);\r\n}\r\n\r\nexport function viewportFromScroll(params: {\r\n scrollOffset: number;\r\n viewportSize: number;\r\n rowHeight: number;\r\n overscan?: number;\r\n}): Viewport {\r\n return new Viewport(\r\n Math.max(0, params.scrollOffset),\r\n params.viewportSize,\r\n params.rowHeight,\r\n params.overscan ?? 2,\r\n );\r\n}\r\n\r\n/** Debounce-friendly equality for visible window identity. */\r\nexport function virtualWindowKey(range: VisibleRange): string {\r\n return `${range.startIndex}:${range.endIndex}:${range.totalHeight}`;\r\n}\r\n","import { useEffect, useState } from 'react';\r\n\r\nimport type { GridSession } from '../../application/session/GridSession';\r\nimport { Viewport } from '../../domain/value-objects/Viewport';\r\nimport { structuralEqual } from '../../engine/equality';\r\nimport {\r\n buildVirtualWindowFromSource,\r\n isSparseRowIndex,\r\n type VirtualWindowModel,\r\n virtualWindowKey,\r\n} from './virtualWindow';\r\nimport type { SparseRowIndex } from '../../engine/SparseRowIndex';\r\n\r\nexport type UseVirtualWindowResult<T> = VirtualWindowModel<T> & {\r\n readonly onScroll: (scrollTop: number, clientHeight?: number) => void;\r\n};\r\n\r\n/**\r\n * Syncs GridSession viewport with a scrollable container and returns\r\n * only the visible item window for rendering.\r\n */\r\nexport function useVirtualWindow<T>(\r\n session: GridSession | null | undefined,\r\n items: readonly T[] | SparseRowIndex<T>,\r\n options?: {\r\n rowHeight?: number;\r\n overscan?: number;\r\n initialViewportSize?: number;\r\n },\r\n): UseVirtualWindowResult<T> {\r\n const rowHeight = options?.rowHeight ?? 40;\r\n const overscan = options?.overscan ?? 2;\r\n const initialViewportSize = options?.initialViewportSize ?? 400;\r\n\r\n const [windowModel, setWindowModel] = useState<VirtualWindowModel<T>>(() =>\r\n buildVirtualWindowFromSource(\r\n items,\r\n session?.getViewport() ??\r\n new Viewport(0, initialViewportSize, rowHeight, overscan),\r\n ),\r\n );\r\n\r\n useEffect(() => {\r\n if (!session) {\r\n setWindowModel(\r\n buildVirtualWindowFromSource(\r\n items,\r\n new Viewport(0, initialViewportSize, rowHeight, overscan),\r\n ),\r\n );\r\n return;\r\n }\r\n\r\n const sync = () => {\r\n const next = buildVirtualWindowFromSource(items, session.getViewport());\r\n setWindowModel((prev) =>\r\n virtualWindowKey(prev.range) === virtualWindowKey(next.range) &&\r\n prev.visibleItems.length === next.visibleItems.length &&\r\n prev.visibleItems.every((item, i) => Object.is(item, next.visibleItems[i]))\r\n ? prev\r\n : next,\r\n );\r\n };\r\n\r\n sync();\r\n\r\n return session.subscribeSelected(\r\n () => {\r\n const vp = session.getViewport();\r\n const itemCount = isSparseRowIndex(items)\r\n ? session.getUiRowCount()\r\n : items.length;\r\n // Read after the count (that rebuilds a dirty index): a sort keeps the\r\n // count but changes the order.\r\n const indexRevision = isSparseRowIndex(items) ? items.revision : 0;\r\n return {\r\n scrollOffset: vp.scrollOffset,\r\n viewportSize: vp.viewportSize,\r\n rowHeight: vp.rowHeight,\r\n overscan: vp.overscan,\r\n itemCount,\r\n indexRevision,\r\n };\r\n },\r\n sync,\r\n structuralEqual,\r\n );\r\n }, [session, items, rowHeight, overscan, initialViewportSize]);\r\n\r\n const onScroll = (scrollTop: number, clientHeight?: number) => {\r\n if (!session) return;\r\n void session.dispatchViewIntent({\r\n type: 'CHANGE_VIEWPORT',\r\n scrollOffset: Math.max(0, scrollTop),\r\n viewportSize: clientHeight,\r\n rowHeight,\r\n overscan,\r\n });\r\n };\r\n\r\n return {\r\n ...windowModel,\r\n onScroll,\r\n };\r\n}\r\n","\"use client\";\r\n\r\nimport React, {\r\n type RefObject,\r\n useEffect,\r\n useRef,\r\n} from 'react';\r\n\r\nimport type { GridSession } from '../../application/session/GridSession';\r\nimport { columnSizeStyle } from '../../engine/columnWidth';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { UIRow } from '../type';\r\nimport { columnPinCellProps } from '../columnPin';\r\nimport { useVirtualWindow } from '../virtual/useVirtualWindow';\r\nimport { useColumnWindowOrAll } from '../virtual/columnWindow';\r\nimport { ColumnWindowCells } from '../virtual/ColumnWindowCells';\r\nimport { ERPTableRow } from './eRPTableRow';\r\n\r\nconst ERPTableGroupRow = React.lazy(() =>\r\n import('./ERPTableGroupRow').then((m) => ({ default: m.ERPTableGroupRow })),\r\n);\r\n\r\nconst DEFAULT_ROW_HEIGHT = 40;\r\n\r\ntype Props = {\r\n controller: UITableController;\r\n session: GridSession;\r\n tableKey: string;\r\n scrollParentRef: RefObject<HTMLDivElement | null>;\r\n viewportHeight: number;\r\n rowHeight?: number;\r\n overscan?: number;\r\n moreDetailComponent?: React.ComponentType<{ data: unknown }>;\r\n /** Shifts aria-rowindex when pinned-top rows are present (PR-116). */\r\n pinnedTopCount?: number;\r\n};\r\n\r\n/**\r\n * Table-native virtual body: same ERPTableRow as pagination path,\r\n * but only the visible window (via GridSession viewport) is mounted.\r\n */\r\nexport function ERPTableVirtualBody({\r\n controller,\r\n session,\r\n tableKey,\r\n scrollParentRef,\r\n viewportHeight,\r\n rowHeight = DEFAULT_ROW_HEIGHT,\r\n overscan = 2,\r\n moreDetailComponent: MoreDetailComponent,\r\n pinnedTopCount = 0,\r\n}: Props) {\r\n const table = controller.getViewState();\r\n const dragRowId = useRef<number | null>(null);\r\n const uiRowIndex = session.getEngine().getUiRowIndex();\r\n\r\n const {\r\n visibleItems: visibleIds,\r\n absoluteIndices,\r\n spacerTop,\r\n spacerBottom,\r\n onScroll,\r\n } = useVirtualWindow(session, uiRowIndex, {\r\n rowHeight,\r\n overscan,\r\n initialViewportSize: viewportHeight,\r\n });\r\n\r\n const visibleItems = visibleIds\r\n .map((id) => controller.getRowView(id))\r\n .filter((row): row is UIRow => row != null);\r\n\r\n useEffect(() => {\r\n void session.dispatchViewIntent({\r\n type: 'CHANGE_VIEWPORT',\r\n scrollOffset: session.getViewport().scrollOffset,\r\n viewportSize: viewportHeight,\r\n rowHeight,\r\n overscan,\r\n });\r\n }, [session, viewportHeight, rowHeight, overscan]);\r\n\r\n useEffect(() => {\r\n const el = scrollParentRef.current;\r\n if (!el) return;\r\n\r\n const handleScroll = () => {\r\n onScroll(el.scrollTop, el.clientHeight);\r\n };\r\n\r\n el.addEventListener('scroll', handleScroll, { passive: true });\r\n return () => el.removeEventListener('scroll', handleScroll);\r\n }, [scrollParentRef, onScroll]);\r\n\r\n const colWindow = useColumnWindowOrAll(\r\n table?.columns ?? [],\r\n table?.columnWidths,\r\n );\r\n\r\n if (!table) return null;\r\n\r\n const spacerStyle = {\r\n height: 0,\r\n padding: 0,\r\n border: 'none',\r\n lineHeight: 0,\r\n } as const;\r\n\r\n const renderSpacer = (kind: 'top' | 'bottom', height: number) => {\r\n if (height <= 0) return null;\r\n return (\r\n <tr aria-hidden role=\"presentation\" data-erp-virtual-spacer={kind}>\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"td\"\r\n spacerRole=\"presentation\"\r\n spacerStyle={{ ...spacerStyle, height }}\r\n renderColumn={(c) => {\r\n const pin = columnPinCellProps(\r\n c,\r\n colWindow.startPinOffsets,\r\n colWindow.endPinOffsets,\r\n );\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"presentation\"\r\n className={pin.className}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n style={{\r\n ...spacerStyle,\r\n height,\r\n ...columnSizeStyle(c, table.columnWidths, colWindow.layoutWidths),\r\n ...pin.style,\r\n }}\r\n />\r\n );}}\r\n />\r\n </tr>\r\n );\r\n };\r\n\r\n return (\r\n <tbody className=\"w-full min-w-0 overflow-x-auto\" data-erp-virtual-body role=\"rowgroup\">\r\n {renderSpacer('top', spacerTop)}\r\n\r\n <React.Suspense fallback={null}>\r\n {visibleItems.map((row, i) => {\r\n const absoluteIndex = absoluteIndices[i] ?? i;\r\n if (row.rowKind === 'group') {\r\n return (\r\n <ERPTableGroupRow\r\n key={row.id}\r\n row={row}\r\n index={absoluteIndex}\r\n pinnedTopCount={pinnedTopCount}\r\n table={table}\r\n controller={controller}\r\n tableKey={tableKey}\r\n isSelected={!!table.selectedRows?.[row.id]}\r\n isActive={!!controller.isActiveRow(row.id)}\r\n />\r\n );\r\n }\r\n return (\r\n <ERPTableRow\r\n key={row.id}\r\n row={row}\r\n stripeIndex={absoluteIndex}\r\n index={absoluteIndex}\r\n pinnedTopCount={pinnedTopCount}\r\n table={table}\r\n controller={controller}\r\n tableKey={tableKey}\r\n draggedRowIdRef={dragRowId}\r\n moreDetailComponent={MoreDetailComponent}\r\n isSelected={!!table.selectedRows?.[row.id]}\r\n isActive={!!controller.isActiveRow(row.id)}\r\n isCut={!!controller.isCutRow(row.id)}\r\n />\r\n );\r\n })}\r\n </React.Suspense>\r\n\r\n {renderSpacer('bottom', spacerBottom)}\r\n </tbody>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\n\r\nimport { CustomTooltip } from '../primitives';\r\n\r\ntype Props = {\r\n label: string;\r\n disabled?: boolean;\r\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n} & Omit<\r\n React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n 'children' | 'aria-label' | 'type' | 'disabled' | 'onClick' | 'className'\r\n>;\r\n\r\nexport function ToolbarIconButton({\r\n label,\r\n disabled,\r\n onClick,\r\n children,\r\n className,\r\n ...rest\r\n}: Props) {\r\n return (\r\n <CustomTooltip title={label}>\r\n <button\r\n type=\"button\"\r\n aria-label={label}\r\n disabled={disabled}\r\n className={`erp-toolbar-btn flex justify-center items-center p-1 border rounded ${\r\n disabled ? \"opacity-40\" : \"\"\r\n } ${className ?? \"\"}`}\r\n onClick={onClick}\r\n {...rest}\r\n >\r\n {children}\r\n </button>\r\n </CustomTooltip>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState } from 'react';\r\n\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\nimport { useDirection, useHostToast, useTranslations } from '../host';\r\nimport { PdfIcon, Spin, SpinIcon } from '../primitives';\r\n\r\nconst PDF_EXPORT_PLUGIN = 'pdf-export';\r\n\r\ntype Props = {\r\n pluginHost?: PluginHost;\r\n};\r\n\r\n/**\r\n * Desktop/mobile toolbar control. Renders only when PdfExportPlugin is registered.\r\n */\r\nexport function PdfExportToolbarButton({ pluginHost }: Props) {\r\n const t = useTranslations();\r\n const direction = useDirection();\r\n const { success, error } = useHostToast();\r\n const [busy, setBusy] = useState(false);\r\n\r\n if (!pluginHost?.has(PDF_EXPORT_PLUGIN)) return null;\r\n\r\n const handleExport = async () => {\r\n if (busy) return;\r\n setBusy(true);\r\n try {\r\n await pluginHost.requestExport({\r\n format: 'pdf',\r\n direction,\r\n fileName: `export-${new Date().toISOString().slice(0, 10)}.pdf`,\r\n });\r\n success(t('general.exportToPdfSuccess'));\r\n } catch {\r\n error(t('general.exportToPdfError'));\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n return (\r\n <ToolbarIconButton\r\n label={t('general.exportToPdf')}\r\n disabled={busy}\r\n data-erp-pdf-export=\"\"\r\n className={busy ? 'opacity-60 cursor-wait' : ''}\r\n onClick={() => {\r\n void handleExport();\r\n }}\r\n >\r\n {busy ? (\r\n <Spin\r\n size=\"small\"\r\n indicator={<SpinIcon config={{ width: 16, height: 16 }} />}\r\n />\r\n ) : (\r\n <PdfIcon config={{ width: 18, height: 18 }} />\r\n )}\r\n </ToolbarIconButton>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useRef, useState } from 'react';\r\n\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\nimport { useHostToast, useTranslations } from '../host';\r\nimport { ExcelImport, Spin, SpinIcon } from '../primitives';\r\n\r\nconst EXCEL_IMPORT_PLUGIN = 'excel-import';\r\nconst XLSX_ACCEPT =\r\n '.xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\r\n\r\ntype Props = {\r\n pluginHost?: PluginHost;\r\n};\r\n\r\n/**\r\n * Desktop/mobile toolbar control. Renders only when ExcelImportPlugin is registered.\r\n */\r\nexport function ExcelImportToolbarButton({ pluginHost }: Props) {\r\n const t = useTranslations();\r\n const { success, error } = useHostToast();\r\n const [busy, setBusy] = useState(false);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n if (!pluginHost?.has(EXCEL_IMPORT_PLUGIN)) return null;\r\n\r\n const handleImport = async (file: File) => {\r\n if (busy) return;\r\n setBusy(true);\r\n try {\r\n await pluginHost.requestImport({ format: 'xlsx', data: file });\r\n success(t('general.importFromExcelSuccess'));\r\n } catch {\r\n error(t('general.importFromExcelError'));\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <ToolbarIconButton\r\n label={t('general.importFromExcel')}\r\n disabled={busy}\r\n data-erp-xlsx-import=\"\"\r\n className={busy ? 'opacity-60 cursor-wait' : ''}\r\n onClick={() => {\r\n inputRef.current?.click();\r\n }}\r\n >\r\n {busy ? (\r\n <Spin\r\n size=\"small\"\r\n indicator={<SpinIcon config={{ width: 16, height: 16 }} />}\r\n />\r\n ) : (\r\n <ExcelImport config={{ width: 18, height: 18 }} />\r\n )}\r\n </ToolbarIconButton>\r\n <input\r\n ref={inputRef}\r\n type=\"file\"\r\n accept={XLSX_ACCEPT}\r\n hidden\r\n data-erp-xlsx-import-input=\"\"\r\n onChange={(event) => {\r\n const file = event.target.files?.[0];\r\n event.target.value = '';\r\n if (file) void handleImport(file);\r\n }}\r\n />\r\n </>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport React, {\r\n useEffect,\r\n useLayoutEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport { Select } from '../primitives';\r\nimport { useMediaQuery, useThemePortalStyle, useTranslations } from '../host';\r\nimport { LeftChevron, RightChevron } from '../primitives';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useGridSearchState } from '../hooks/useEngineSelector';\r\nimport { findColumnMatches, navigateToMatch } from './utils';\r\n\r\nconst MOBILE_SEARCH_PANEL_HEIGHT = 220;\r\n\r\ninterface GridSearchPanelProps {\r\n controller: UITableController;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n anchorRef: React.RefObject<HTMLElement | null>;\r\n}\r\n\r\nexport function GridSearchPanel({\r\n controller,\r\n isOpen,\r\n onClose,\r\n anchorRef,\r\n}: GridSearchPanelProps) {\r\n const t = useTranslations();\r\n const { match: viewportMatch } = useMediaQuery('XLUP');\r\n const isMobile = viewportMatch === false;\r\n const searchState = useGridSearchState(controller);\r\n const [columnId, setColumnId] = useState('');\r\n const [query, setQuery] = useState('');\r\n const [hasSearched, setHasSearched] = useState(false);\r\n const [position, setPosition] = useState({ top: 0, left: 0 });\r\n const panelRef = useRef<HTMLDivElement>(null);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const themeVars = useThemePortalStyle();\r\n\r\n const table = controller.getViewState();\r\n const columns = useMemo(\r\n () => (table?.columns ?? []).filter(col => !col.hidden && col.fieldName !== 'index'),\r\n [table?.columns],\r\n );\r\n\r\n const columnOptions = useMemo(\r\n () =>\r\n columns.map(col => ({\r\n value: col.fieldName,\r\n label: col.fieldCaption || col.fieldName,\r\n })),\r\n [columns],\r\n );\r\n\r\n const isCurrentSearch =\r\n hasSearched &&\r\n searchState?.columnId === columnId &&\r\n searchState?.query === query.trim();\r\n\r\n const totalMatches = isCurrentSearch ? searchState?.matches.length ?? 0 : 0;\r\n const currentMatchIndex = isCurrentSearch ? searchState?.currentIndex ?? -1 : -1;\r\n const canNavigate = totalMatches > 1;\r\n\r\n useEffect(() => {\r\n if (!columnId && columns.length > 0) {\r\n setColumnId(columns[0].fieldName);\r\n }\r\n }, [columns, columnId]);\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen || isMobile || !anchorRef.current) return;\r\n\r\n const updatePosition = () => {\r\n const rect = anchorRef.current!.getBoundingClientRect();\r\n setPosition({\r\n left: rect.left,\r\n top: rect.top - 8,\r\n });\r\n };\r\n\r\n updatePosition();\r\n window.addEventListener('resize', updatePosition);\r\n window.addEventListener('scroll', updatePosition, true);\r\n\r\n return () => {\r\n window.removeEventListener('resize', updatePosition);\r\n window.removeEventListener('scroll', updatePosition, true);\r\n };\r\n }, [isOpen, isMobile, anchorRef]);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n inputRef.current?.focus();\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n\r\n const handleClickOutside = (event: MouseEvent) => {\r\n const target = event.target as Node;\r\n if (panelRef.current?.contains(target) || anchorRef.current?.contains(target)) {\r\n return;\r\n }\r\n onClose();\r\n };\r\n\r\n const timer = window.setTimeout(() => {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n }, 0);\r\n\r\n return () => {\r\n window.clearTimeout(timer);\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n };\r\n }, [isOpen, onClose, anchorRef]);\r\n\r\n const runSearch = async (startIndex = 0) => {\r\n const trimmedQuery = query.trim();\r\n if (!columnId || !trimmedQuery) return;\r\n\r\n // Page-window mode streams from IndexedDB (lazy module); otherwise the\r\n // in-memory QuickFilterIndex answers synchronously.\r\n const matches = controller.isPagedWindow?.()\r\n ? await (\r\n await import('./pagedSearch')\r\n ).findPagedColumnMatches(controller, columnId, trimmedQuery)\r\n : findColumnMatches(controller, columnId, trimmedQuery);\r\n setHasSearched(true);\r\n\r\n if (!matches.length) {\r\n await controller.dispatch({\r\n type: 'UI_SET_GRID_SEARCH',\r\n search: { columnId, query: trimmedQuery, matches: [], currentIndex: -1 },\r\n });\r\n return;\r\n }\r\n\r\n const index = Math.min(Math.max(startIndex, 0), matches.length - 1);\r\n await controller.dispatch({\r\n type: 'UI_SET_GRID_SEARCH',\r\n search: { columnId, query: trimmedQuery, matches, currentIndex: index },\r\n });\r\n await navigateToMatch(controller, matches[index]);\r\n };\r\n\r\n const goToMatch = async (direction: 1 | -1) => {\r\n if (!canNavigate || !searchState?.matches.length) return;\r\n\r\n const nextIndex =\r\n (searchState.currentIndex + direction + searchState.matches.length) %\r\n searchState.matches.length;\r\n const nextState = { ...searchState, currentIndex: nextIndex };\r\n await controller.dispatch({\r\n type: 'UI_SET_GRID_SEARCH',\r\n search: nextState,\r\n });\r\n await navigateToMatch(controller, nextState.matches[nextIndex]);\r\n };\r\n\r\n if (!isOpen || typeof document === 'undefined') return null;\r\n\r\n const resultSummary = !hasSearched\r\n ? ''\r\n : totalMatches > 0\r\n ? t('general.searchFound', { count: totalMatches })\r\n : t('general.searchNotFound');\r\n\r\n const positionSummary =\r\n totalMatches > 0 && currentMatchIndex >= 0\r\n ? t('general.searchPosition', {\r\n current: currentMatchIndex + 1,\r\n total: totalMatches,\r\n })\r\n : '';\r\n\r\n const panelContent = (\r\n <>\r\n <Select\r\n className=\"w-full\"\r\n value={columnId || undefined}\r\n options={columnOptions}\r\n placeholder={t('general.choice')}\r\n getPopupContainer={(trigger: HTMLElement) => trigger.parentElement ?? document.body}\r\n onChange={(value) => {\r\n setColumnId(String(value ?? ''));\r\n setHasSearched(false);\r\n }}\r\n />\r\n\r\n <input\r\n ref={inputRef}\r\n type=\"text\"\r\n value={query}\r\n placeholder={t('general.search')}\r\n className=\"px-3 py-2 border border-gray-gray5 rounded w-full text-sm outline-none focus:border-blue-blue6\"\r\n onChange={event => {\r\n setQuery(event.target.value);\r\n setHasSearched(false);\r\n }}\r\n onKeyDown={event => {\r\n if (event.key === 'Enter') {\r\n void runSearch(0);\r\n }\r\n }}\r\n />\r\n\r\n <div className=\"flex justify-between items-center gap-2\">\r\n <button\r\n type=\"button\"\r\n className=\"flex-1 bg-blue-blue6 px-3 py-1.5 rounded text-white text-sm\"\r\n onClick={() => void runSearch(0)}\r\n >\r\n {t('general.search')}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n title={t('general.prev')}\r\n aria-label={t('general.prev')}\r\n className=\"erp-toolbar-btn flex justify-center items-center p-1.5 border border-gray-gray5 rounded disabled:opacity-40\"\r\n disabled={!canNavigate}\r\n onClick={() => void goToMatch(-1)}\r\n >\r\n <LeftChevron config={{ width: 16, height: 16 }} />\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n title={t('general.next')}\r\n aria-label={t('general.next')}\r\n className=\"erp-toolbar-btn flex justify-center items-center p-1.5 border border-gray-gray5 rounded disabled:opacity-40\"\r\n disabled={!canNavigate}\r\n onClick={() => void goToMatch(1)}\r\n >\r\n <RightChevron config={{ width: 16, height: 16 }} />\r\n </button>\r\n </div>\r\n\r\n {resultSummary ? (\r\n <span className=\"text-gray-gray7 text-xs text-center\">{resultSummary}</span>\r\n ) : null}\r\n\r\n {positionSummary ? (\r\n <span className=\"text-blue-blue6 text-xs text-center font-medium\">{positionSummary}</span>\r\n ) : null}\r\n </>\r\n );\r\n\r\n if (isMobile) {\r\n return createPortal(\r\n <div\r\n ref={panelRef}\r\n style={{\r\n ...themeVars,\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n width: '100%',\r\n height: MOBILE_SEARCH_PANEL_HEIGHT,\r\n zIndex: 9999,\r\n }}\r\n className=\"flex flex-col gap-2 bg-main-white shadow-lg px-3 py-3 border-b border-gray-gray5\"\r\n >\r\n {panelContent}\r\n </div>,\r\n document.body,\r\n );\r\n }\r\n\r\n return createPortal(\r\n <div\r\n ref={panelRef}\r\n style={{\r\n ...themeVars,\r\n position: 'fixed',\r\n left: position.left,\r\n top: position.top,\r\n transform: 'translateY(-100%)',\r\n zIndex: 9999,\r\n }}\r\n className=\"flex flex-col gap-2 bg-white shadow-lg p-3 border border-gray-gray5 rounded-lg min-w-[320px]\"\r\n >\r\n {panelContent}\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n","'use client';\r\n\r\nimport React, { useRef, useState } from 'react';\r\n\r\nimport { useTranslations } from '../host';\r\nimport { Magnifier } from '../primitives';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\nimport { GridSearchPanel } from './GridSearchPanel';\r\n\r\ninterface GridSearchControlProps {\r\n controller: UITableController;\r\n}\r\n\r\nexport function GridSearchControl({ controller }: GridSearchControlProps) {\r\n const t = useTranslations();\r\n const [searchOpen, setSearchOpen] = useState(false);\r\n const searchAnchorRef = useRef<HTMLDivElement>(null);\r\n\r\n const toggleSearch = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n event.stopPropagation();\r\n setSearchOpen((prev) => {\r\n if (prev) {\r\n void controller.dispatch({ type: 'UI_CLEAR_GRID_SEARCH' });\r\n }\r\n return !prev;\r\n });\r\n };\r\n\r\n const closeSearch = () => {\r\n setSearchOpen(false);\r\n void controller.dispatch({ type: 'UI_CLEAR_GRID_SEARCH' });\r\n };\r\n\r\n return (\r\n <div className=\"relative\" ref={searchAnchorRef}>\r\n <ToolbarIconButton\r\n label={t(\"general.search\")}\r\n className={searchOpen ? \"bg-blue-blue11\" : \"\"}\r\n onClick={toggleSearch}\r\n >\r\n <Magnifier config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n <GridSearchPanel\r\n controller={controller}\r\n isOpen={searchOpen}\r\n anchorRef={searchAnchorRef}\r\n onClose={closeSearch}\r\n />\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nimport { useLocale, useTranslations } from '../host';\r\nimport { CustomCheckbox } from '../primitives';\r\n\r\nimport { valueParser } from '../helper';\r\nimport { IMultiSelectConfig } from '../type';\r\n\r\ntype MultiSelectRow = Record<string, unknown>;\r\ntype MultiSelectRowId = string | number;\r\n\r\ninterface Props {\r\n rows: MultiSelectRow[];\r\n ListConfig: IMultiSelectConfig[\"ListConfig\"];\r\n selectedRows: Map<MultiSelectRowId, MultiSelectRow>;\r\n fieldKey: string;\r\n onToggleRow: (row: MultiSelectRow) => void;\r\n}\r\n\r\nexport function MultiSelectListBody({\r\n rows,\r\n ListConfig,\r\n selectedRows,\r\n fieldKey,\r\n onToggleRow,\r\n}: Props) {\r\n const locale = useLocale()\r\n const t = useTranslations()\r\n return (\r\n <tbody>\r\n {rows.map((row) => {\r\n const rawId = row[fieldKey];\r\n const id =\r\n typeof rawId === 'string' || typeof rawId === 'number' ? rawId : String(rawId);\r\n\r\n return (\r\n <tr key={String(id)} className=\"border h-10\">\r\n {ListConfig.filter((c) => c.hidden !== true).map((col, idx: number) => (\r\n <td key={idx} className=\"px-2 border text-xs\">\r\n {idx === 0 && (\r\n <CustomCheckbox\r\n checked={selectedRows.has(id)}\r\n onClick={() => onToggleRow(row)}\r\n />\r\n )}\r\n\r\n {valueParser(row[col.fieldName],col.fieldType)}\r\n </td>\r\n ))}\r\n </tr>\r\n );\r\n })}\r\n</tbody>\r\n\r\n );\r\n}\r\n ","import React from 'react';\r\n\r\nimport { CustomCheckbox } from '../primitives';\r\n\r\nimport { IMultiSelectConfig } from '../type';\r\n\r\ntype MultiSelectRow = Record<string, unknown>;\r\ntype MultiSelectRowId = string | number;\r\n\r\ninterface Props {\r\n ListConfig: IMultiSelectConfig[\"ListConfig\"];\r\n rows: MultiSelectRow[];\r\n fieldKey: string;\r\n selectedRows: Map<MultiSelectRowId, MultiSelectRow>;\r\n onToggleAll: () => void;\r\n}\r\n\r\nexport function MultiSelectListHeader({\r\n ListConfig,\r\n rows,\r\n fieldKey,\r\n selectedRows,\r\n onToggleAll,\r\n}: Props) {\r\n const isAllSelected =\r\n rows.length > 0 &&\r\n rows.every((r) => {\r\n const rawId = r[fieldKey];\r\n const id =\r\n typeof rawId === 'string' || typeof rawId === 'number'\r\n ? rawId\r\n : String(rawId);\r\n return selectedRows.has(id);\r\n });\r\n\r\n return (\r\n <thead className=\"top-0 z-20 sticky\">\r\n <tr className=\"bg-gray-gray3 h-10\">\r\n {ListConfig.filter((c) => c.hidden !== true).map((col, index) => (\r\n <th key={index} className=\"px-2 border text-xs text-start\">\r\n {col.fieldName == \"index\" ? (\r\n <CustomCheckbox checked={isAllSelected} onClick={onToggleAll} />\r\n ) : (\r\n <>{col.fieldCaption}</>\r\n )}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n );\r\n}\r\n","import React, {\r\n useEffect,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\n\r\nimport { Pagination, CustomButton, InputText, LeftChevron, RightChevron } from '../primitives';\r\nimport {\r\n useDirection,\r\n useHostDependOn,\r\n useLocale,\r\n useRemoteQuery,\r\n useTranslations,\r\n} from '../host';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { IMultiSelectConfig } from '../type';\r\nimport { MultiSelectListBody } from './body';\r\nimport { MultiSelectListHeader } from './header';\r\n\r\nfunction asRowId(value: unknown): string | number | undefined {\r\n return typeof value === 'string' || typeof value === 'number'\r\n ? value\r\n : undefined;\r\n}\r\n\r\ninterface Props {\r\n controller: UITableController;\r\n multiSelectConfig: IMultiSelectConfig;\r\n handleCloseModal: () => void;\r\n}\r\n\r\nexport default function MultiselectList({\r\n multiSelectConfig,\r\n controller,\r\n handleCloseModal,\r\n}: Props) {\r\n const { dynamicValue, fieldKey, detailFieldKey, onAdd, ListConfig } =\r\n multiSelectConfig;\r\n const locale = useLocale();\r\n const direction = useDirection();\r\n const t = useTranslations();\r\n const [pageNumber, setPageNumber] = useState(1);\r\n const [pageRecordCount, setPageRecordCount] = useState(8);\r\n const [selectedRows, setSelectedRows] = useState<\r\n Map<string | number, Record<string, unknown>>\r\n >(new Map());\r\n const [searchInput, setSearchInput] = useState(\"\");\r\n const [quickSearch, setQuickSearch] = useState(\"\");\r\n const { endpoint, repoViewId, dependOn, ...bodyRequest } = dynamicValue;\r\n const { dependencyBody, isReady } = useHostDependOn(dependOn, {\r\n enabled: Boolean(multiSelectConfig.dependOnFromHost),\r\n });\r\n const body = {\r\n ...bodyRequest,\r\n ...dependencyBody,\r\n PagingInfo: {\r\n PageRecordCount: pageRecordCount,\r\n PageNumber: pageNumber,\r\n },\r\n FullSearchPhrase: quickSearch,\r\n RepoViewId: repoViewId,\r\n };\r\n const existBody = Object.fromEntries(\r\n Object.entries(body).filter(([, value]) => value !== null),\r\n );\r\n const { data } = useRemoteQuery<Record<string, unknown>[]>({\r\n url: endpoint,\r\n body: existBody,\r\n skip: !isReady,\r\n });\r\n // const processedData = useProcessedData({\r\n // data: data?.Data,\r\n // columnsConfig: ListConfig,\r\n // locale,\r\n // });\r\n // console.log(processedData);\r\n const rows = useMemo(() => {\r\n return data?.Data ?? [];\r\n }, [data]);\r\n\r\n const toggleRow = (row: Record<string, unknown>) => {\r\n const id = asRowId(row[fieldKey]);\r\n if (id === undefined) return;\r\n setSelectedRows((prev) => {\r\n const newMap = new Map(prev);\r\n\r\n if (newMap.has(id)) {\r\n newMap.delete(id);\r\n } else {\r\n newMap.set(id, row);\r\n }\r\n\r\n return newMap;\r\n });\r\n };\r\n\r\n const toggleSelectAll = () => {\r\n const allSelected = rows.every((r: Record<string, unknown>) => {\r\n const id = asRowId(r[fieldKey]);\r\n return id !== undefined && selectedRows.has(id);\r\n });\r\n\r\n setSelectedRows((prev) => {\r\n const newMap = new Map(prev);\r\n\r\n if (allSelected) {\r\n rows.forEach((r: Record<string, unknown>) => {\r\n const id = asRowId(r[fieldKey]);\r\n if (id !== undefined) newMap.delete(id);\r\n });\r\n } else {\r\n rows.forEach((r: Record<string, unknown>) => {\r\n const id = asRowId(r[fieldKey]);\r\n if (id !== undefined) newMap.set(id, r);\r\n });\r\n }\r\n\r\n return newMap;\r\n });\r\n };\r\n\r\n const handleAdd = () => {\r\n const selected = Array.from(selectedRows.values());\r\n const rows = selected.map((row) =>\r\n Object.entries(row).map(([key, value]) => {\r\n const config = multiSelectConfig.ListConfig.find(\r\n (cfg) => cfg.fieldName === key,\r\n );\r\n return {\r\n key,\r\n value: config?.returnValue ? config.returnValue(row, key) : value,\r\n display: config?.returnDisplayValue\r\n ? config.returnDisplayValue(row, key)\r\n : value,\r\n };\r\n }),\r\n );\r\n controller.dispatch({ type: \"ADD_NEW_ROWS\", rows, detailFieldKey });\r\n onAdd?.(selected);\r\n handleCloseModal();\r\n };\r\n\r\n const handlePagination = (page: number) => {\r\n setPageNumber(page);\r\n };\r\n\r\n const handlePageSizeChange = (_page: number, size: number) => {\r\n setPageRecordCount(size);\r\n setPageNumber(1);\r\n };\r\n\r\n useEffect(() => {\r\n const handler = setTimeout(() => {\r\n setQuickSearch(searchInput);\r\n setPageNumber(1);\r\n }, 808);\r\n\r\n return () => {\r\n clearTimeout(handler);\r\n };\r\n }, [searchInput]);\r\n return (\r\n <div className=\"flex flex-col justify-between gap-2 p-2 border !h-full\">\r\n <div className=\"flex flex-col gap-2\">\r\n <InputText\r\n value={searchInput}\r\n onChange={(e: { target: { value: string } }) => setSearchInput(e.target.value)}\r\n placeholder={t('general.search')}\r\n className=\" \"\r\n />\r\n <table className=\"w-full border-collapse\">\r\n <MultiSelectListHeader\r\n ListConfig={ListConfig}\r\n fieldKey={fieldKey}\r\n rows={rows}\r\n selectedRows={selectedRows}\r\n onToggleAll={toggleSelectAll}\r\n />\r\n\r\n <MultiSelectListBody\r\n rows={rows}\r\n fieldKey={fieldKey}\r\n ListConfig={ListConfig}\r\n selectedRows={selectedRows}\r\n onToggleRow={toggleRow}\r\n />\r\n </table>\r\n </div>\r\n\r\n <div className=\"flex justify-between items-center\">\r\n <CustomButton\r\n type=\"text\"\r\n className=\"bg-main-black dark:bg-main-white text-gray-gray3 dark:text-gray-gray7\"\r\n onClick={handleAdd}\r\n >\r\n {t('general.add')}\r\n </CustomButton>\r\n\r\n <Pagination\r\n prevIcon={\r\n <CustomButton className=\"m-0 p-0 rounded w-fit\">\r\n {direction === \"rtl\" ? <RightChevron /> : <LeftChevron />}\r\n </CustomButton>\r\n }\r\n nextIcon={\r\n <CustomButton className=\"m-0 p-0 w-fit\">\r\n {direction === \"rtl\" ? <LeftChevron /> : <RightChevron />}\r\n </CustomButton>\r\n }\r\n current={pageNumber}\r\n pageSize={pageRecordCount}\r\n total={data?.TotalCount ?? 0}\r\n onShowSizeChange={handlePageSizeChange}\r\n onChange={handlePagination}\r\n // hideOnSinglePage\r\n showTitle={false}\r\n className={`\r\n [&_.ant-pagination-item-active:hover]:!bg-main-black \r\n [&_.ant-pagination-item-active:hover]:!border-main-black \r\n [&_.ant-pagination-item-active]:!border-main-black \r\n [&_.ant-pagination-next_.ant-btn:hover]:!border-main-black \r\n [&_.ant-pagination-prev_.ant-btn:hover]:!border-main-black \r\n [&_.ant-pagination-item-active_a:hover]:!text-main-white \r\n [&_.ant-pagination-item-active_a]:!text-main-black\r\n`}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\n\r\nimport { useERPTableHost, useTranslations } from '../host';\r\nimport { MoonIcon, SunIcon } from '../primitives';\r\nimport { isStockDarkTheme } from './resolveActiveTheme';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\n\r\nexport function ThemeToggleButton() {\r\n const t = useTranslations();\r\n const { themeToggle, themeLocked, theme, onToggleTheme } = useERPTableHost();\r\n if (!themeToggle || themeLocked || !onToggleTheme || !theme) return null;\r\n\r\n const isDark = isStockDarkTheme(theme);\r\n const label = isDark ? t('general.themeLight') : t('general.themeDark');\r\n\r\n return (\r\n <ToolbarIconButton\r\n label={label}\r\n data-erp-theme-toggle=\"\"\r\n aria-pressed={isDark}\r\n onClick={onToggleTheme}\r\n >\r\n {isDark ? (\r\n <SunIcon config={{ width: 18, height: 18 }} />\r\n ) : (\r\n <MoonIcon config={{ width: 18, height: 18 }} />\r\n )}\r\n </ToolbarIconButton>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\n\r\nimport {\r\n formatLocaleNumber,\r\n useDirection,\r\n useHostToast,\r\n useLocale,\r\n useNumberingSystem,\r\n useTranslations,\r\n} from '../host';\r\nimport {\r\n ClipboardCheck,\r\n ClipboardIcon,\r\n CustomModal,\r\n CutIcon,\r\n Excel,\r\n GuaranteeReceive,\r\n Layers,\r\n PlusIcon,\r\n Spin,\r\n SpinIcon,\r\n TrashBin,\r\n} from '../primitives';\r\n\r\nimport { TableActions } from '../../domain/value-objects';\r\nimport { exportActiveCollectionToExcel } from '../../infrastructure/excel/exportActiveCollectionToExcel';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\nimport { PdfExportToolbarButton } from '../export/PdfExportToolbarButton';\r\nimport { ExcelImportToolbarButton } from '../export/ExcelImportToolbarButton';\r\nimport { GridSearchControl } from '../gridSearch/GridSearchControl';\r\nimport MultiselectList from '../multiSelectList';\r\nimport { ThemeToggleButton } from '../theme/ThemeToggleButton';\r\nimport { IMultiSelectConfig } from '../type';\r\n\r\ninterface GroupActionButtonsProps {\r\n controller: UITableController;\r\n multiSelectConfig?: IMultiSelectConfig;\r\n pluginHost?: PluginHost;\r\n}\r\n\r\nexport const GroupActionButtons: React.FC<GroupActionButtonsProps> = ({\r\n controller,\r\n multiSelectConfig,\r\n pluginHost,\r\n}) => {\r\n const t = useTranslations();\r\n const direction = useDirection();\r\n const locale = useLocale();\r\n const numberingSystem = useNumberingSystem();\r\n const { success, error } = useHostToast();\r\n const [modalIsOpen, setModalIsOpen] = useState<boolean>(false);\r\n const [isExporting, setIsExporting] = useState(false);\r\n\r\n const selectedRows = controller.getSelectedRows();\r\n const count = selectedRows ? Object.keys(selectedRows).length : 0;\r\n const table = controller.getViewState();\r\n const tableAction = table?.action;\r\n\r\n const handleAddRow = () => {\r\n void controller.dispatch({ type: \"ADD_EMPTY_ROW\" });\r\n };\r\n\r\n const handleExportToExcel = async () => {\r\n if (isExporting) return;\r\n setIsExporting(true);\r\n try {\r\n await exportActiveCollectionToExcel(controller, {\r\n direction,\r\n rowHeaderLabel: t('general.row'),\r\n });\r\n success(t(\"general.exportToExcelSuccess\"));\r\n } catch {\r\n error(t(\"general.exportToExcelError\"));\r\n } finally {\r\n setIsExporting(false);\r\n }\r\n };\r\n\r\n // Toolbar \"toggle\" = select/deselect all rows (engine TOGGLE_SELECT_ALL_ROWS).\r\n const handleSelectAllRows = () => {\r\n controller.dispatch({ type: \"TOGGLE_ROW_SELECTED\" });\r\n };\r\n\r\n const handleChangeTableAction = (action: TableActions) => {\r\n controller.dispatch({ type: \"UI_ACTION_TABLE\", action });\r\n };\r\n\r\n const handleDeleteSelectedRows = () => {\r\n controller.dispatch({ type: \"UI_DELETE_SELECTED_ROW\" });\r\n };\r\n\r\n const canPaste =\r\n (tableAction == \"copy\" || tableAction == \"cut\") && count != 0;\r\n\r\n return (\r\n <div\r\n className=\"flex items-center gap-2 flex-1 justify-start\"\r\n role=\"toolbar\"\r\n aria-label={t(\"general.toolbar\")}\r\n >\r\n <ToolbarIconButton label={t(\"general.addNewRow\")} onClick={handleAddRow}>\r\n <PlusIcon config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.copy\")}\r\n disabled={count == 0}\r\n onClick={() => {\r\n handleChangeTableAction(\"copy\");\r\n }}\r\n >\r\n <GuaranteeReceive config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.cut\")}\r\n disabled={count == 0}\r\n onClick={() => {\r\n handleChangeTableAction(\"cut\");\r\n }}\r\n >\r\n <CutIcon config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.paste\")}\r\n disabled={!canPaste}\r\n onClick={() => {\r\n handleChangeTableAction(\"paste\");\r\n }}\r\n >\r\n <ClipboardIcon config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.delete\")}\r\n disabled={count == 0}\r\n onClick={handleDeleteSelectedRows}\r\n >\r\n <TrashBin config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n {multiSelectConfig && (\r\n <>\r\n <ToolbarIconButton\r\n label={t(\"general.chooseFromList\")}\r\n data-erp-multiselect=\"\"\r\n onClick={() => {\r\n setModalIsOpen(true);\r\n }}\r\n >\r\n <ClipboardCheck config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n <CustomModal\r\n contentClassName={\"!h-[480px]\"}\r\n width={ 720}\r\n headerName={t(\"general.chooseFromList\")}\r\n headerIcon={<ClipboardCheck config={{ width: 18, height: 18 }} />}\r\n closeModal={() => setModalIsOpen(false)}\r\n isModalOpen={modalIsOpen}\r\n content={\r\n <MultiselectList\r\n controller={controller}\r\n multiSelectConfig={multiSelectConfig}\r\n handleCloseModal={() => { setModalIsOpen(false); }}\r\n />\r\n }\r\n />\r\n </>\r\n )}\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.toggle\")}\r\n onClick={handleSelectAllRows}\r\n >\r\n <Layers config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.exportToExcel\")}\r\n disabled={isExporting}\r\n className={isExporting ? \"opacity-60 cursor-wait\" : \"\"}\r\n onClick={() => {\r\n void handleExportToExcel();\r\n }}\r\n >\r\n {isExporting ? (\r\n <Spin\r\n size=\"small\"\r\n indicator={<SpinIcon config={{ width: 16, height: 16 }} />}\r\n />\r\n ) : (\r\n <Excel config={{ width: 18, height: 18 }} />\r\n )}\r\n </ToolbarIconButton>\r\n\r\n <ExcelImportToolbarButton pluginHost={pluginHost} />\r\n\r\n <PdfExportToolbarButton pluginHost={pluginHost} />\r\n\r\n <GridSearchControl controller={controller} />\r\n\r\n <ThemeToggleButton />\r\n\r\n <span className=\"px-2 text-black-black6 text-xs\">\r\n {t(\"general.selected\")}{' '}\r\n {formatLocaleNumber(count, { locale, numberingSystem })}\r\n </span>\r\n </div>\r\n );\r\n};\r\n","// ui/pagination.tsx\r\n\r\nimport { Pagination } from '../primitives';\r\nimport {\r\n formatLocaleNumber,\r\n useDirection,\r\n useLocale,\r\n useNumberingSystem,\r\n useTranslations,\r\n} from '../host';\r\nimport { LeftChevron, RightChevron } from '../primitives';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\n\r\ninterface Props {\r\n controller: UITableController;\r\n tableKey: string;\r\n store: string;\r\n}\r\n\r\nexport default function ERPTablePagination({\r\n controller,\r\n tableKey\r\n}: Props) {\r\n const table = controller.getViewState();\r\n const locale = useLocale();\r\n const numberingSystem = useNumberingSystem();\r\n const direction = useDirection();\r\n const t = useTranslations();\r\n if (!table) return null;\r\n const { page, pageSize, totalPages, totalRows } = table.pagination;\r\n const handlePageChange = (e: number) => {\r\n controller.dispatch({ type: \"CHANGE_PAGE\", page: e });\r\n };\r\n const handlePageSizeChange = (_page: number, pageSize: number) => {\r\n controller.dispatch({ type: \"CHANGE_PAGE_SIZE\", pageSize: pageSize });\r\n };\r\n const fmt = (n: number) =>\r\n formatLocaleNumber(n, { locale, numberingSystem, useGrouping: true });\r\n\r\n return (\r\n <div className=\"flex justify-center items-center gap-3 bg-main-white p-2 border-gray-gray5 border-t w-full\">\r\n <Pagination\r\n current={page}\r\n prevIcon={direction === \"rtl\" ? <RightChevron /> : <LeftChevron />}\r\n nextIcon={direction === \"rtl\" ? <LeftChevron /> : <RightChevron />}\r\n jumpNextIcon={<span>...</span>}\r\n jumpPrevIcon={<span>...</span>}\r\n pageSize={pageSize}\r\n total={totalRows}\r\n showSizeChanger={true}\r\n onShowSizeChange={handlePageSizeChange}\r\n pageSizeOptions={[\"9\", \"10\", \"20\", \"50\", \"100\"]}\r\n // hideOnSinglePage\r\n locale={{ items_per_page: \"\" }}\r\n showTotal={(total: number) => (\r\n <div className=\"flex items-center gap-1 h-full font-light text-gray-gray10 text-xs\">\r\n <span>{fmt(total)}</span>\r\n <span>{t('general.rowsIn')}</span>\r\n <span>{fmt(totalPages)}</span>\r\n <span>{t('general.page')}</span>\r\n </div>\r\n )}\r\n onChange={handlePageChange}\r\n direction={direction}\r\n />\r\n </div>\r\n );\r\n}\r\n","import type { GridSession } from '../../application/session/GridSession';\r\n\r\n/**\r\n * Desktop row virtualization (PR-97 / D17).\r\n * Default **on** when a `GridSession` is present.\r\n * Pass `virtualization={false}` for classic pagination chrome.\r\n * Without a session, virtualization stays off (no viewport).\r\n */\r\nexport function resolveDesktopVirtualization(\r\n virtualization: boolean | undefined,\r\n session: GridSession | null | undefined,\r\n): boolean {\r\n if (!session) return false;\r\n if (virtualization === false) return false;\r\n return true;\r\n}\r\n","import {\r\n RefObject,\r\n useCallback,\r\n useEffect,\r\n useState,\r\n} from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\n\r\nconst DEFAULT_ROW_HEIGHT = 40;\r\nconst TABLE_HEADER_HEIGHT = 40;\r\nconst VIEWPORT_BOTTOM_GAP = 20;\r\nconst MIN_TABLE_HEIGHT = 240;\r\n\r\ntype UseERPTableLayoutOptions = {\r\n rootRef: RefObject<HTMLDivElement | null>;\r\n bodyRef: RefObject<HTMLDivElement | null>;\r\n controller: UITableController | null;\r\n tableHeight?: number;\r\n ready?: boolean;\r\n /** When false, skip CHANGE_PAGE_SIZE sync (virtual scroll mode). */\r\n syncPageSize?: boolean;\r\n rowHeight?: number;\r\n};\r\n\r\nexport function useERPTableLayout({\r\n rootRef,\r\n bodyRef,\r\n controller,\r\n tableHeight,\r\n ready = false,\r\n syncPageSize = true,\r\n rowHeight = DEFAULT_ROW_HEIGHT,\r\n}: UseERPTableLayoutOptions) {\r\n const [autoHeight, setAutoHeight] = useState<number | null>(null);\r\n\r\n const measureRootHeight = useCallback(() => {\r\n if (tableHeight != null) return;\r\n\r\n const root = rootRef.current;\r\n if (!root) return;\r\n\r\n const top = root.getBoundingClientRect().top;\r\n const available = window.innerHeight - top - VIEWPORT_BOTTOM_GAP;\r\n setAutoHeight(Math.max(MIN_TABLE_HEIGHT, Math.floor(available)));\r\n }, [tableHeight, rootRef]);\r\n\r\n useEffect(() => {\r\n if (!ready) return;\r\n if (tableHeight != null) return;\r\n\r\n const frame = requestAnimationFrame(measureRootHeight);\r\n window.addEventListener('resize', measureRootHeight);\r\n\r\n const parent = rootRef.current?.parentElement;\r\n const observer = parent ? new ResizeObserver(measureRootHeight) : null;\r\n if (parent && observer) {\r\n observer.observe(parent);\r\n }\r\n\r\n return () => {\r\n cancelAnimationFrame(frame);\r\n window.removeEventListener('resize', measureRootHeight);\r\n observer?.disconnect();\r\n };\r\n }, [measureRootHeight, tableHeight, ready]);\r\n\r\n useEffect(() => {\r\n if (!syncPageSize) return;\r\n if (!controller) return;\r\n\r\n const syncPageSizeToHeight = (height: number) => {\r\n if (height < rowHeight * 2) return;\r\n\r\n const rowsArea = Math.max(0, height - TABLE_HEADER_HEIGHT);\r\n const pageSize = Math.max(3, Math.floor(rowsArea / rowHeight));\r\n const table = controller.getViewState();\r\n\r\n if (table && table.pagination.pageSize !== pageSize) {\r\n void controller.dispatch({ type: 'CHANGE_PAGE_SIZE', pageSize });\r\n }\r\n };\r\n\r\n if (tableHeight != null) {\r\n syncPageSizeToHeight(tableHeight);\r\n return;\r\n }\r\n\r\n if (!bodyRef.current) return;\r\n\r\n const updatePageSize = () => {\r\n syncPageSizeToHeight(bodyRef.current?.clientHeight ?? 0);\r\n };\r\n\r\n updatePageSize();\r\n const observer = new ResizeObserver(updatePageSize);\r\n observer.observe(bodyRef.current);\r\n\r\n return () => observer.disconnect();\r\n }, [controller, bodyRef, tableHeight, autoHeight, syncPageSize, rowHeight]);\r\n\r\n return {\r\n bodyHeight: tableHeight ?? autoHeight,\r\n };\r\n}\r\n","/**\r\n * Which full-body overlay to show (PR-103). Pure — no React.\r\n * `loading` wins over no-rows.\r\n */\r\nexport type GridOverlayKind = 'loading' | 'noRows' | null;\r\n\r\nexport function resolveGridOverlay(\r\n loading: boolean | undefined,\r\n rowCount: number,\r\n): GridOverlayKind {\r\n if (loading) return 'loading';\r\n if (rowCount <= 0) return 'noRows';\r\n return null;\r\n}\r\n","\"use client\";\r\n\r\nimport React, { type ReactNode } from 'react';\r\n\r\nimport { useTranslations } from '../host';\r\nimport { NoData, SpinIcon } from '../primitives';\r\nimport {\r\n resolveGridOverlay,\r\n type GridOverlayKind,\r\n} from './resolveGridOverlay';\r\n\r\nexport type GridOverlayContext = {\r\n loading: boolean;\r\n rowCount: number;\r\n kind: Exclude<GridOverlayKind, null>;\r\n};\r\n\r\nexport type GridOverlayComponent = (ctx: GridOverlayContext) => ReactNode;\r\n\r\nexport type GridOverlaysProps = {\r\n loading?: boolean;\r\n rowCount: number;\r\n loadingOverlayComponent?: GridOverlayComponent;\r\n noRowsOverlayComponent?: GridOverlayComponent;\r\n};\r\n\r\nfunction DefaultLoadingOverlay() {\r\n const t = useTranslations();\r\n return (\r\n <div className=\"pdg-overlay__panel\" data-pdg-overlay-default=\"loading\">\r\n <SpinIcon config={{ width: 28, height: 28 }} />\r\n <span>{t('general.loading')}</span>\r\n </div>\r\n );\r\n}\r\n\r\nfunction DefaultNoRowsOverlay() {\r\n const t = useTranslations();\r\n return (\r\n <div className=\"pdg-overlay__panel\" data-pdg-overlay-default=\"noRows\">\r\n <NoData config={{ width: 56, height: 56 }} />\r\n <span>{t('general.noData')}</span>\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * Absolute layer over the scroll body: loading or empty (PR-103).\r\n */\r\nexport function GridOverlays({\r\n loading,\r\n rowCount,\r\n loadingOverlayComponent,\r\n noRowsOverlayComponent,\r\n}: GridOverlaysProps) {\r\n const kind = resolveGridOverlay(loading, rowCount);\r\n if (!kind) return null;\r\n\r\n const ctx: GridOverlayContext = {\r\n loading: Boolean(loading),\r\n rowCount,\r\n kind,\r\n };\r\n\r\n let body: ReactNode;\r\n if (kind === 'loading') {\r\n body = loadingOverlayComponent ? (\r\n loadingOverlayComponent(ctx)\r\n ) : (\r\n <DefaultLoadingOverlay />\r\n );\r\n } else {\r\n body = noRowsOverlayComponent ? (\r\n noRowsOverlayComponent(ctx)\r\n ) : (\r\n <DefaultNoRowsOverlay />\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className=\"pdg-overlay\"\r\n data-pdg-overlay={kind}\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-busy={kind === 'loading' ? true : undefined}\r\n >\r\n {body}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { ReactNode, useEffect, useRef } from 'react';\r\n\r\nimport type { GridSession } from '../../application/session/GridSession';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { useScrollToSearchMatch } from '../hooks/useScrollToSearchMatch';\r\nimport { IMultiSelectConfig } from '../type';\r\nimport { useERPTableTheme } from '../host';\r\nimport { ariaGridRowCount, gridCellDomId } from '../a11y/gridRoles';\r\nimport { GridLiveRegion } from '../a11y/GridLiveRegion';\r\nimport { ERPTableBody } from './ERPTableBody';\r\nimport { ERPTableFooter } from './ERPTableFooter';\r\nimport type { FooterRowDef } from './ERPTableFooter';\r\nimport { ERPTableHeader } from './ERPTableHeader';\r\nimport { ERPTablePinnedRows } from './ERPTablePinnedRows';\r\nimport { ERPTableVirtualBody } from './ERPTableVirtualBody';\r\nimport { GroupActionButtons } from './groupActionButtons';\r\nimport ERPTablePagination from './pagination';\r\nimport { resolveDesktopVirtualization } from './resolveDesktopVirtualization';\r\nimport { useERPTableLayout } from './useERPTableLayout';\r\nimport { ColumnWindowProvider } from '../virtual/columnWindow';\r\nimport {\r\n GridOverlays,\r\n type GridOverlayComponent,\r\n} from '../overlays';\r\n\r\nexport interface DesktopTableProps<TRow = unknown> {\r\n controller: UITableController;\r\n tableKey: string;\r\n store: string;\r\n tableTitle?: ReactNode;\r\n header?: ReactNode;\r\n footer?: boolean | ReactNode;\r\n /** Multi-row aggregation footer (PR-119). Used when `footer={true}`. */\r\n footerRows?: readonly FooterRowDef[];\r\n tableHeight?: number;\r\n multiSelectConfig?: IMultiSelectConfig;\r\n moreDetailComponent?: React.ComponentType<{ data: unknown }>;\r\n ready: boolean;\r\n /**\r\n * Desktop virtual scroll (GridSession viewport + visible window).\r\n * **On by default** when `session` is present (PR-97 / D17).\r\n * Pass `virtualization={false}` for classic pagination.\r\n * Pagination chrome is hidden while virtualization is on.\r\n */\r\n virtualization?: boolean;\r\n /** Used when virtualization is on (default). Ignored when `virtualization={false}`. */\r\n session?: GridSession;\r\n pluginHost?: PluginHost;\r\n /** Floating filter row under the header (PR-94). */\r\n floatingFilter?: boolean;\r\n /** Host-driven full-grid loading overlay (PR-103). */\r\n loading?: boolean;\r\n loadingOverlayComponent?: GridOverlayComponent;\r\n noRowsOverlayComponent?: GridOverlayComponent;\r\n /** Rows stuck under the header (PR-116). Not virtualized. */\r\n pinnedTopRowData?: readonly TRow[];\r\n /** Rows stuck above the footer (PR-116). Not virtualized. */\r\n pinnedBottomRowData?: readonly TRow[];\r\n}\r\n\r\nexport function DesktopTable<TRow = unknown>({\r\n controller,\r\n tableKey,\r\n store,\r\n tableTitle,\r\n header,\r\n footer,\r\n footerRows,\r\n tableHeight,\r\n multiSelectConfig,\r\n moreDetailComponent,\r\n ready,\r\n virtualization,\r\n session,\r\n pluginHost,\r\n floatingFilter = false,\r\n loading = false,\r\n loadingOverlayComponent,\r\n noRowsOverlayComponent,\r\n pinnedTopRowData,\r\n pinnedBottomRowData,\r\n}: DesktopTableProps<TRow>) {\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const bodyRef = useRef<HTMLDivElement>(null);\r\n // Page-window mode ('paged-idb') is pagination-driven: RAM holds one page.\r\n const useVirtual =\r\n !controller.isPagedWindow() &&\r\n resolveDesktopVirtualization(virtualization, session);\r\n const rowHeight = useERPTableTheme().params.rowHeight;\r\n\r\n const { bodyHeight } = useERPTableLayout({\r\n rootRef,\r\n bodyRef,\r\n controller,\r\n tableHeight,\r\n ready,\r\n syncPageSize: !useVirtual,\r\n rowHeight,\r\n });\r\n const resolvedBodyHeight = tableHeight ?? bodyHeight ?? 400;\r\n\r\n useScrollToSearchMatch(bodyRef, controller);\r\n\r\n const view = controller.getViewState();\r\n const colCount = (view?.columns ?? []).filter((c) => !c.hidden).length;\r\n const dataRowCount = useVirtual && session\r\n ? session.getUiRowCount()\r\n : view?.pagination.totalRows ?? 0;\r\n const pinnedTopCount = pinnedTopRowData?.length ?? 0;\r\n const pinnedBottomCount = pinnedBottomRowData?.length ?? 0;\r\n const hasFooter = Boolean(footer);\r\n const footerRowCount =\r\n typeof footer === 'boolean' && footer\r\n ? Math.max(1, footerRows?.length ?? 1)\r\n : hasFooter\r\n ? 1\r\n : 0;\r\n const activeDescendant = view?.activeCell\r\n ? gridCellDomId(tableKey, view.activeCell.rowId, view.activeCell.columnId)\r\n : undefined;\r\n /** Group rows use aria-expanded/aria-level — valid on treegrid, not grid (PR-123). */\r\n const isTreeGrid = Boolean(\r\n view?.rows?.some((r) => r.rowKind === 'group'),\r\n );\r\n\r\n useEffect(() => {\r\n const root = bodyRef.current;\r\n if (!root) return;\r\n const thead = root.querySelector('thead');\r\n const tfoot = root.querySelector('tfoot');\r\n if (thead) {\r\n root.style.setProperty(\r\n '--erp-pinned-top-offset',\r\n `${thead.getBoundingClientRect().height}px`,\r\n );\r\n }\r\n if (tfoot) {\r\n root.style.setProperty(\r\n '--erp-pinned-bottom-offset',\r\n `${tfoot.getBoundingClientRect().height}px`,\r\n );\r\n } else {\r\n root.style.setProperty('--erp-pinned-bottom-offset', '0px');\r\n }\r\n }, [floatingFilter, pinnedTopCount, pinnedBottomCount, hasFooter, view?.columns]);\r\n\r\n return (\r\n <div\r\n ref={rootRef}\r\n className=\"flex flex-col w-full h-full transition-all duration-200 erp-table-desktop\"\r\n >\r\n <GridLiveRegion controller={controller} />\r\n {tableTitle}\r\n <div\r\n ref={bodyRef}\r\n data-erp-table-scroll\r\n data-erp-table-key={tableKey}\r\n data-erp-virtualization={useVirtual ? 'on' : 'off'}\r\n className=\"overflow-auto [overflow-anchor:none] relative\"\r\n style={{\r\n height: resolvedBodyHeight ?? '100%',\r\n width: 'auto',\r\n overflowAnchor: 'none',\r\n }}\r\n >\r\n <GridOverlays\r\n loading={loading}\r\n rowCount={dataRowCount}\r\n loadingOverlayComponent={loadingOverlayComponent}\r\n noRowsOverlayComponent={noRowsOverlayComponent}\r\n />\r\n <table\r\n className=\"min-w-max w-full\"\r\n role={isTreeGrid ? 'treegrid' : 'grid'}\r\n tabIndex={0}\r\n aria-colcount={colCount || undefined}\r\n aria-rowcount={\r\n ariaGridRowCount(\r\n dataRowCount,\r\n footerRowCount,\r\n pinnedTopCount,\r\n pinnedBottomCount,\r\n ) || undefined\r\n }\r\n aria-activedescendant={activeDescendant}\r\n data-pdg-col-virt\r\n data-pdg-grid-focus=\"\"\r\n onFocus={(e) => {\r\n if (e.target !== e.currentTarget) return;\r\n if (controller.getActiveCell()) return;\r\n const firstRow = view?.rows?.find((r) => r.rowKind !== 'group');\r\n const firstCol = (view?.columns ?? []).find(\r\n (c) => !c.hidden && c.fieldType !== 'index' && c.fieldName !== 'index',\r\n );\r\n if (firstRow && firstCol) {\r\n void controller.dispatch({\r\n type: 'UI_ACTIVE_CELL',\r\n rowId: firstRow.id,\r\n columnId: firstCol.fieldName,\r\n });\r\n }\r\n }}\r\n >\r\n <ColumnWindowProvider\r\n scrollRef={bodyRef}\r\n columns={view?.columns ?? []}\r\n columnWidths={view?.columnWidths}\r\n onViewportWidthChange={(w) => controller.setLayoutViewportWidth(w)}\r\n >\r\n <ERPTableHeader\r\n controller={controller}\r\n tableKey={tableKey}\r\n header={header}\r\n floatingFilter={floatingFilter}\r\n />\r\n {pinnedTopCount > 0 && pinnedTopRowData ? (\r\n <ERPTablePinnedRows\r\n side=\"top\"\r\n rows={pinnedTopRowData}\r\n controller={controller}\r\n dataRowCount={dataRowCount}\r\n pinnedTopCount={pinnedTopCount}\r\n />\r\n ) : null}\r\n {useVirtual && session ? (\r\n <ERPTableVirtualBody\r\n controller={controller}\r\n session={session}\r\n tableKey={tableKey}\r\n scrollParentRef={bodyRef}\r\n viewportHeight={resolvedBodyHeight}\r\n rowHeight={rowHeight}\r\n moreDetailComponent={moreDetailComponent}\r\n pinnedTopCount={pinnedTopCount}\r\n />\r\n ) : (\r\n <ERPTableBody\r\n controller={controller}\r\n tableKey={tableKey}\r\n moreDetailComponent={moreDetailComponent}\r\n pinnedTopCount={pinnedTopCount}\r\n />\r\n )}\r\n {pinnedBottomCount > 0 && pinnedBottomRowData ? (\r\n <ERPTablePinnedRows\r\n side=\"bottom\"\r\n rows={pinnedBottomRowData}\r\n controller={controller}\r\n dataRowCount={dataRowCount}\r\n pinnedTopCount={pinnedTopCount}\r\n />\r\n ) : null}\r\n {footer && (\r\n <ERPTableFooter\r\n controller={controller}\r\n footer={footer}\r\n footerRows={footerRows}\r\n dataRowCount={dataRowCount}\r\n pinnedTopCount={pinnedTopCount}\r\n pinnedBottomCount={pinnedBottomCount}\r\n />\r\n )}\r\n </ColumnWindowProvider>\r\n </table>\r\n </div>\r\n <div className=\"flex justify-between items-center gap-3 w-full shrink-0 erp-table-desktop__toolbar\">\r\n <GroupActionButtons\r\n controller={controller}\r\n multiSelectConfig={multiSelectConfig}\r\n pluginHost={pluginHost}\r\n />\r\n {!useVirtual ? (\r\n <ERPTablePagination\r\n controller={controller}\r\n store={store}\r\n tableKey={tableKey}\r\n />\r\n ) : (\r\n <div\r\n className=\"text-xs text-neutral-500 px-2\"\r\n data-erp-virtual-row-count\r\n >\r\n {session?.getUiRowCount() ?? 0} rows\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\n\r\nimport { useTranslations } from '../host';\r\nimport {\r\n CustomModal,\r\n ClipboardCheck,\r\n PlusIcon,\r\n TrashBin,\r\n} from '../primitives';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\nimport { PdfExportToolbarButton } from '../export/PdfExportToolbarButton';\r\nimport { ExcelImportToolbarButton } from '../export/ExcelImportToolbarButton';\r\nimport { GridSearchControl } from '../gridSearch/GridSearchControl';\r\nimport MultiselectList from '../multiSelectList';\r\nimport { ThemeToggleButton } from '../theme/ThemeToggleButton';\r\nimport { IMultiSelectConfig } from '../type';\r\n\r\ninterface MobileActionButtonsProps {\r\n controller: UITableController;\r\n multiSelectConfig?: IMultiSelectConfig;\r\n pluginHost?: PluginHost;\r\n}\r\n\r\nexport function MobileActionButtons({\r\n controller,\r\n multiSelectConfig,\r\n pluginHost,\r\n}: MobileActionButtonsProps) {\r\n const t = useTranslations();\r\n const [modalIsOpen, setModalIsOpen] = useState(false);\r\n\r\n const selectedRows = controller.getSelectedRows();\r\n const count = selectedRows ? Object.keys(selectedRows).length : 0;\r\n const handleAddRow = () => {\r\n void controller.dispatch({ type: 'UI_OPEN_MOBILE_ADD' });\r\n };\r\n\r\n const handleDeleteSelectedRows = () => {\r\n controller.dispatch({ type: \"UI_DELETE_SELECTED_ROW\" });\r\n };\r\n\r\n return (\r\n <div\r\n className=\"flex items-center gap-2 justify-end\"\r\n role=\"toolbar\"\r\n aria-label={t(\"general.toolbar\")}\r\n >\r\n <ToolbarIconButton label={t(\"general.addNewRow\")} onClick={handleAddRow}>\r\n <PlusIcon config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.delete\")}\r\n disabled={count == 0}\r\n onClick={handleDeleteSelectedRows}\r\n >\r\n <TrashBin config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n {multiSelectConfig && (\r\n <>\r\n <ToolbarIconButton\r\n label={t(\"general.chooseFromList\")}\r\n data-erp-multiselect=\"\"\r\n onClick={() => setModalIsOpen(true)}\r\n >\r\n <ClipboardCheck config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n <CustomModal\r\n contentClassName={\"w-[720px] !h-[480px]\"}\r\n headerName={t(\"general.chooseFromList\")}\r\n headerIcon={<ClipboardCheck config={{ width: 18, height: 18 }} />}\r\n closeModal={() => setModalIsOpen(false)}\r\n isModalOpen={modalIsOpen}\r\n content={\r\n <MultiselectList\r\n controller={controller}\r\n multiSelectConfig={multiSelectConfig}\r\n handleCloseModal={() => setModalIsOpen(false)}\r\n />\r\n }\r\n />\r\n </>\r\n )}\r\n\r\n <ExcelImportToolbarButton pluginHost={pluginHost} />\r\n\r\n <PdfExportToolbarButton pluginHost={pluginHost} />\r\n\r\n <GridSearchControl controller={controller} />\r\n\r\n <ThemeToggleButton />\r\n\r\n <span className=\"px-2 text-black-black6 text-xs\">\r\n {t(\"general.selected\")} {count}\r\n </span>\r\n </div>\r\n );\r\n}\r\n","import { CustomButton } from '../primitives';\r\nimport {\r\n formatLocaleNumber,\r\n useLocale,\r\n useNumberingSystem,\r\n useTranslations,\r\n} from '../host';\r\n\r\ninterface Props {\r\n onClick: () => void;\r\n visibleCount: number;\r\n totalRows: number;\r\n}\r\n\r\nexport function MobileLoadMoreButton({\r\n onClick,\r\n visibleCount,\r\n totalRows,\r\n}: Props) {\r\n const t = useTranslations();\r\n const locale = useLocale();\r\n const numberingSystem = useNumberingSystem();\r\n const visible = formatLocaleNumber(visibleCount, {\r\n locale,\r\n numberingSystem,\r\n });\r\n const total = formatLocaleNumber(totalRows, { locale, numberingSystem });\r\n\r\n return (\r\n <div className=\"shrink-0 w-full py-3 border-gray-gray5 border-t bg-main-white\">\r\n <CustomButton\r\n htmlType=\"button\"\r\n type=\"default\"\r\n className=\"w-full h-10 text-sm\"\r\n onClick={onClick}\r\n >\r\n {t('general.loadMore', { visible, total })}\r\n </CustomButton>\r\n </div>\r\n );\r\n}\r\n","import { ColumnSchema } from \"../../bootstrap/type\";\r\nimport { UIRow } from \"../type\";\r\n\r\nexport function buildDynamicSourceForRow(\r\n dynamicSource: ColumnSchema[\"dynamicSource\"],\r\n row: UIRow,\r\n): ColumnSchema[\"dynamicSource\"] {\r\n if (!dynamicSource) return dynamicSource;\r\n\r\n const { dependsOn, dependOn, ...rest } = dynamicSource;\r\n\r\n if (dependOn) {\r\n return dynamicSource;\r\n }\r\n\r\n if (!dependsOn?.length) {\r\n return dynamicSource;\r\n }\r\n\r\n const deps = dependsOn.map((fieldName) => ({\r\n fieldName,\r\n value: row.cells[fieldName]?.value ?? null,\r\n }));\r\n\r\n return {\r\n ...rest,\r\n dependsOn,\r\n dependOn: deps.length === 1 ? deps[0] : deps,\r\n };\r\n}\r\n\r\nexport function resolveColumnMetaForRow(\r\n col: ColumnSchema,\r\n row: UIRow,\r\n): ColumnSchema {\r\n if (!col.dynamicSource) return col;\r\n\r\n return {\r\n ...col,\r\n dynamicSource: buildDynamicSourceForRow(col.dynamicSource, row),\r\n };\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useTranslations } from \"../host\";\r\nimport { CustomButton, CustomModal } from \"../primitives\";\r\n\r\nimport { ColumnSchema } from \"../../bootstrap/type\";\r\nimport { RowStateEnum } from \"../../domain/value-objects\";\r\nimport { UITableController } from \"../../infrastructure/ui/UITableController\";\r\nimport { CellRenderer } from \"../cellRenderer\";\r\nimport { resolveColumnMetaForRow } from \"./buildDynamicSource\";\r\nimport type { MobileRowEditorState } from \"./types\";\r\nimport { UIRow } from \"../type\";\r\n\r\ninterface MobileRowFormModalProps {\r\n controller: UITableController;\r\n tableKey: string;\r\n editor: NonNullable<MobileRowEditorState>;\r\n onClose: () => void;\r\n}\r\n\r\nexport function MobileRowFormModal({\r\n controller,\r\n tableKey,\r\n editor,\r\n onClose,\r\n}: MobileRowFormModalProps) {\r\n const t = useTranslations();\r\n\r\n const getRowById = (): UIRow | null => {\r\n return controller.getRowView(editor.rowId);\r\n };\r\n\r\n const [row, setRow] = useState<UIRow | null>(getRowById);\r\n\r\n useEffect(() => {\r\n const syncRow = () => {\r\n setRow(getRowById());\r\n };\r\n\r\n syncRow();\r\n const unsubscribe = controller.subscribe(syncRow);\r\n return () => unsubscribe?.();\r\n }, [controller, editor.rowId]);\r\n\r\n const formColumns = useMemo(() => {\r\n const table = controller.getViewState();\r\n if (!table?.columns) return [];\r\n return table.columns.filter(\r\n (c) =>\r\n !c.hidden && c.fieldType !== \"index\" && c.fieldName !== \"index\",\r\n );\r\n }, [controller, row]);\r\n\r\n if (!row || row.rowState === RowStateEnum.Deleted) {\r\n return null;\r\n }\r\n\r\n const title =\r\n editor.mode === \"add\" ? t(\"general.addNewRow\") : t(\"general.rowEdit\");\r\n\r\n return (\r\n <CustomModal\r\n headerName={title}\r\n isModalOpen\r\n closeModal={onClose}\r\n content={\r\n <div className=\"relative w-full h-[calc(100dvh-150px)]\">\r\n <div className=\"flex flex-col gap-4 px-2 pb-24 w-full h-full overflow-y-auto\">\r\n {formColumns.map((col, idx) => {\r\n const disable =\r\n typeof row.visibilityCondition[col.fieldName] === \"boolean\" &&\r\n row.visibilityCondition[col.fieldName] === false;\r\n\r\n if (disable) return null;\r\n\r\n const meta: ColumnSchema = resolveColumnMetaForRow(\r\n {\r\n ...col,\r\n enableDeleteButton: col.enableDeleteButton ?? true,\r\n enableExpandButton: col.enableExpandButton ?? true,\r\n enableMoveButton: col.enableMoveButton ?? true,\r\n enableOptionsButton: col.enableOptionsButton ?? true,\r\n },\r\n row,\r\n );\r\n\r\n return (\r\n <div key={col.fieldName} className=\"flex flex-col gap-2\">\r\n {col.fieldType !== \"checkbox\" && (\r\n <span className=\"font-medium text-sm\">\r\n {col.fieldCaption}\r\n </span>\r\n )}\r\n <CellRenderer\r\n key={`${row.id}-${col.fieldName}`}\r\n idx={idx}\r\n tableKey={tableKey}\r\n row={row}\r\n columnId={col.fieldName}\r\n meta={meta}\r\n controller={controller}\r\n tabIndex={-1}\r\n mode={col.editable === false ? \"view\" : \"form\"}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n <div className=\"bottom-0 fixed px-4 py-4 -end-4 start-0 topShadow\">\r\n <CustomButton\r\n type=\"text\"\r\n className=\"flex justify-center items-center !bg-black-black95 focus:!text-none rounded w-full h-[42px] text-white text-sm\"\r\n onClick={onClose}\r\n >\r\n {t(\"general.add\")}\r\n </CustomButton>\r\n </div>\r\n </div>\r\n }\r\n />\r\n );\r\n}\r\n","import {\r\n formatLocaleNumber,\r\n useLocale,\r\n useNumberingSystem,\r\n useTranslations,\r\n} from '../host';\r\nimport {\r\n CustomCheckbox,\r\n EditPencil,\r\n RedTrashBin,\r\n Undo,\r\n} from '../primitives';\r\n\r\nimport { ColumnSchema } from '../../bootstrap/type';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { UIRow } from '../type';\r\n\r\ninterface MobileIndexColProps {\r\n idx: number;\r\n row: UIRow;\r\n controller: UITableController;\r\n meta: ColumnSchema;\r\n}\r\n\r\nexport function MobileIndexCol({\r\n idx,\r\n row,\r\n controller,\r\n meta,\r\n}: MobileIndexColProps) {\r\n const t = useTranslations();\r\n const locale = useLocale();\r\n const numberingSystem = useNumberingSystem();\r\n\r\n const handleDeleteRow = () => {\r\n controller.dispatch({ type: \"ROW_DELETED\", rowId: row.id });\r\n };\r\n\r\n const handleSelectRow = (e: React.MouseEvent<HTMLInputElement>) => {\r\n if (!e.shiftKey && !e.ctrlKey && !e.altKey) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n controller.onRowSelect(row.id);\r\n }\r\n };\r\n\r\n const isDeleted = row.rowState === RowStateEnum.Deleted;\r\n const isSelectedRow = controller.isSelectedRow(row.id);\r\n\r\n return (\r\n <div\r\n className={`${isDeleted && \"cursor-not-allowed\"} flex justify-between items-center w-full gap-2 px-2 h-full relative`}\r\n >\r\n <div className=\"flex justify-start items-center gap-2\">\r\n {!isDeleted && (\r\n <CustomCheckbox\r\n disabled={isDeleted}\r\n checked={!!isSelectedRow}\r\n onClick={handleSelectRow}\r\n aria-label={`${t(\"general.selectRow\")} ${idx + 1}`}\r\n />\r\n )}\r\n <div className=\"w-[20px] text-xs text-center\">\r\n {formatLocaleNumber(idx + 1, { locale, numberingSystem })}\r\n </div>\r\n\r\n {!isDeleted && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n void controller.dispatch({\r\n type: 'UI_OPEN_MOBILE_EDIT',\r\n rowId: row.id,\r\n });\r\n }}\r\n className=\"hover:bg-zinc-200\"\r\n aria-label={t(\"general.edit\")}\r\n >\r\n <EditPencil config={{ width: 16, height: 16 }} />\r\n </button>\r\n )}\r\n\r\n {meta.enableDeleteButton && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleDeleteRow();\r\n }}\r\n className=\"hover:bg-red-100\"\r\n >\r\n {!isDeleted ? (\r\n <RedTrashBin config={{ width: 18, height: 18 }} />\r\n ) : (\r\n <Undo config={{ width: 18, height: 18 }} />\r\n )}\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useMemo } from 'react';\r\n\r\nimport { ColumnSchema } from '../../bootstrap/type';\r\nimport { overlayStoredColumnWidth } from '../../engine/columnWidth';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { ariaColIndex, ariaDataRowIndex, gridCellA11y } from '../a11y/gridRoles';\r\nimport { indexPinClassName, indexPinDataAttr } from '../columnPin';\r\nimport { CellRenderer } from '../cellRenderer';\r\nimport { UIRow } from '../type';\r\nimport { MobileIndexCol } from './MobileIndexCol';\r\n\r\ninterface MobileTableRowProps {\r\n row: UIRow;\r\n index: number;\r\n columns: ColumnSchema[];\r\n controller: UITableController;\r\n tableKey: string;\r\n isSelected: boolean;\r\n isActive: boolean;\r\n isCut: boolean;\r\n activeCell?: { rowId: number; columnId: string } | null;\r\n}\r\n\r\nfunction MobileTableRowComponent({\r\n row,\r\n index,\r\n columns,\r\n controller,\r\n tableKey,\r\n isSelected: isSelectedRow,\r\n isActive: isActiveRow,\r\n isCut,\r\n activeCell,\r\n}: MobileTableRowProps) {\r\n const columnWidths = controller.getViewState()?.columnWidths;\r\n const visibleColumns = columns.filter(\r\n (c: ColumnSchema) => !c.hidden,\r\n );\r\n const isDeleted = row.rowState === RowStateEnum.Deleted;\r\n\r\n const handleRowClick = (e: React.MouseEvent) => {\r\n controller.onRowClick(row.id, {\r\n ctrlKey: e.ctrlKey,\r\n shiftKey: e.shiftKey,\r\n });\r\n };\r\n\r\n const rowClass = useMemo(() => {\r\n return `relative w-full border bg-main-white\r\n ${isActiveRow ? \"border-gray-gray8\" : \"border-gray-gray5\"}\r\n ${isSelectedRow && !isDeleted ? \"bg-blue-100\" : \"\"}\r\n ${\r\n isDeleted\r\n ? \"!bg-gray-gray5 absolute inset-0 line-through\"\r\n : isSelectedRow\r\n ? \"\"\r\n : \"bg-main-white\"\r\n }\r\n ${isCut ? \" border-dashed opacity-30\" : \"\"}\r\n h-9 rounded`;\r\n }, [isActiveRow, isSelectedRow, isDeleted, isCut]);\r\n\r\n return (\r\n <tr\r\n role=\"row\"\r\n aria-rowindex={ariaDataRowIndex(index)}\r\n className={rowClass}\r\n data-rowid={row.id}\r\n onClick={handleRowClick}\r\n >\r\n {visibleColumns.map((c: ColumnSchema, idx: number) => {\r\n const meta: ColumnSchema = {\r\n ...c,\r\n enableDeleteButton: c.enableDeleteButton ?? true,\r\n enableExpandButton: c.enableExpandButton ?? true,\r\n enableMoveButton: c.enableMoveButton ?? true,\r\n enableOptionsButton: c.enableOptionsButton ?? true,\r\n };\r\n\r\n if (c.fieldName === \"index\") {\r\n return (\r\n <td\r\n className={`p-0 h-full ${indexPinClassName(c)}`}\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(idx)}\r\n {...gridCellA11y(tableKey, row.id, c.fieldName, activeCell)}\r\n data-columnid={c.fieldName}\r\n data-erp-col-pin={indexPinDataAttr(c)}\r\n style={overlayStoredColumnWidth(c, columnWidths, {})}\r\n >\r\n <MobileIndexCol\r\n idx={index}\r\n row={row}\r\n controller={controller}\r\n meta={meta}\r\n />\r\n </td>\r\n );\r\n }\r\n\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(idx)}\r\n {...gridCellA11y(tableKey, row.id, c.fieldName, activeCell)}\r\n className=\"p-0 h-full\"\r\n data-columnid={c.fieldName}\r\n style={overlayStoredColumnWidth(c, columnWidths, {})}\r\n >\r\n <CellRenderer\r\n idx={idx}\r\n tableKey={tableKey}\r\n row={row}\r\n columnId={c.fieldName}\r\n meta={meta}\r\n controller={controller}\r\n tabIndex={-1}\r\n mode=\"view\"\r\n />\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n );\r\n}\r\n\r\nexport const MobileTableRow = React.memo(\r\n MobileTableRowComponent,\r\n (prev, next) => {\r\n return (\r\n prev.row === next.row &&\r\n prev.index === next.index &&\r\n prev.columns === next.columns &&\r\n prev.isSelected === next.isSelected &&\r\n prev.isActive === next.isActive &&\r\n prev.isCut === next.isCut &&\r\n prev.activeCell?.rowId === next.activeCell?.rowId &&\r\n prev.activeCell?.columnId === next.activeCell?.columnId\r\n );\r\n },\r\n);\r\n","import { ColumnSchema } from '../../bootstrap/type';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { UIRow } from '../type';\r\nimport { MobileTableRow } from './MobileTableRow';\r\n\r\ninterface MobileTableBodyProps {\r\n controller: UITableController;\r\n tableKey: string;\r\n rows: UIRow[];\r\n columns: ColumnSchema[];\r\n}\r\n\r\nexport function MobileTableBody({\r\n controller,\r\n tableKey,\r\n rows,\r\n columns,\r\n}: MobileTableBodyProps) {\r\n const activeCell = controller.getViewState()?.activeCell ?? null;\r\n return (\r\n <tbody className=\"w-full min-w-0 overflow-x-auto\" role=\"rowgroup\">\r\n {rows.map((row, index) => (\r\n <MobileTableRow\r\n key={row.id}\r\n row={row}\r\n index={index}\r\n columns={columns}\r\n controller={controller}\r\n tableKey={tableKey}\r\n isSelected={!!controller.isSelectedRow(row.id)}\r\n isActive={!!controller.isActiveRow(row.id)}\r\n isCut={!!controller.isCutRow(row.id)}\r\n activeCell={activeCell}\r\n />\r\n ))}\r\n </tbody>\r\n );\r\n}\r\n","import React, { ReactNode, useEffect, useState } from 'react';\r\n\r\nimport { CustomDropdownButton, CustomCheckbox } from '../primitives';\r\n\r\nimport { overlayStoredColumnWidth } from '../../engine/columnWidth';\r\nimport { ValidationCallbackResult } from '../../engine/type';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useRevalidateRevision } from '../hooks/useRevalidateRevision';\r\nimport { revealRow } from '../gridSearch/utils';\r\nimport {\r\n ARIA_HEADER_ROW_INDEX,\r\n ariaColIndex,\r\n} from '../a11y/gridRoles';\r\nimport { useTranslations } from '../host';\r\nimport { indexPinClassName, indexPinDataAttr } from '../columnPin';\r\n\r\ninterface MobileTableHeaderProps {\r\n controller: UITableController;\r\n header?: ReactNode;\r\n}\r\n\r\nexport function MobileTableHeader({\r\n controller,\r\n header,\r\n}: MobileTableHeaderProps) {\r\n const t = useTranslations();\r\n const table = controller.getViewState();\r\n const [validationResult, setValidationResult] =\r\n useState<ValidationCallbackResult>({\r\n valid: true,\r\n data: null,\r\n errors: new Map(),\r\n });\r\n\r\n const validationRevision = useRevalidateRevision();\r\n\r\n useEffect(() => {\r\n const validation = controller.validation();\r\n validation((res) => {\r\n setValidationResult(res);\r\n });\r\n }, [\r\n controller,\r\n table?.activeCell?.columnId,\r\n table?.activeCell?.rowId,\r\n validationRevision,\r\n ]);\r\n\r\n if (!table || !table.columns) return null;\r\n\r\n const visibleColumns = table.columns.filter((c) => !c.hidden);\r\n const isSelectedActivePageRows = table.rows.every(\r\n (row) => !!table.selectedRows[row.id],\r\n );\r\n const handleSelectActivePageRows = () => {\r\n controller.dispatch({ type: \"TOGGLE_PAGE_ROW_SELECTED\" });\r\n };\r\n\r\n const allRows = controller.getAllRows() ?? [];\r\n const handleNavigateToError = (rowId: number) => {\r\n void revealRow(controller, rowId);\r\n };\r\n\r\n const items = Array.from((validationResult.errors ?? new Map()).entries()).map(\r\n ([key, value], errorIndex) => {\r\n const Index = allRows.findIndex((r) => r.id.value == value.rowId) + 1;\r\n\r\n return {\r\n key: errorIndex.toString(),\r\n label: (\r\n <button\r\n className=\"flex bg-red-300 text-red-600 text-xs\"\r\n onClick={() => {\r\n handleNavigateToError(value.rowId);\r\n }}\r\n >\r\n {`${t('general.validationInRow')} ${Index} ${t('general.validationInColumn')} ${value.caption} : ${value.message}`}\r\n </button>\r\n ),\r\n };\r\n },\r\n );\r\n\r\n return (\r\n <thead className=\"top-0 z-20 sticky\" role=\"rowgroup\">\r\n {header}\r\n {!validationResult.valid && (\r\n <CustomDropdownButton\r\n placement=\"bottom\"\r\n className=\"top-1 z-10 absolute flex m-0 p-0 rounded start-1\"\r\n items={items}\r\n >\r\n <span className=\"bg-red-600 border rounded-full w-2 h-2\"></span>\r\n </CustomDropdownButton>\r\n )}\r\n <tr\r\n role=\"row\"\r\n aria-rowindex={ARIA_HEADER_ROW_INDEX}\r\n className=\"relative h-10 bg-gray-gray3 rounded-t-lg w-full\"\r\n >\r\n {visibleColumns.map((col, index) => {\r\n if (col.fieldType === \"index\") {\r\n return (\r\n <th\r\n key={col.fieldName}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n style={{\r\n ...col.style,\r\n ...overlayStoredColumnWidth(col, table.columnWidths, { width: 120 }),\r\n }}\r\n className={`px-2 text-xs border text-start whitespace-nowrap ${indexPinClassName(col)} ${col.className || \"\"}`}\r\n data-erp-col-pin={indexPinDataAttr(col)}\r\n >\r\n <CustomCheckbox\r\n checked={isSelectedActivePageRows}\r\n onClick={handleSelectActivePageRows}\r\n aria-label={t(\"general.toggle\")}\r\n />\r\n {col.fieldCaption}\r\n </th>\r\n );\r\n }\r\n\r\n return (\r\n <th\r\n key={col.fieldName}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n style={{\r\n ...col.style,\r\n ...overlayStoredColumnWidth(col, table.columnWidths, {\r\n minWidth: col.minWidth,\r\n }),\r\n }}\r\n className={`px-2 text-xs border text-start min-w-24 ${col.className || \"\"}`}\r\n >\r\n {col.fieldCaption}\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n );\r\n}\r\n","export function scrollToTableEnd(\r\n container: HTMLElement | null,\r\n rowId?: number,\r\n): void {\r\n if (!container) return;\r\n\r\n container.scrollLeft = Math.max(\r\n 0,\r\n container.scrollWidth - container.clientWidth,\r\n );\r\n\r\n const rowEl = rowId\r\n ? container.querySelector<HTMLElement>(`tr[data-rowid=\"${rowId}\"]`)\r\n : container.querySelector<HTMLElement>('tbody tr:last-child');\r\n\r\n rowEl?.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'auto' });\r\n}\r\n","import { RefObject, useEffect, useRef } from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useMobileEditorState } from '../hooks/useEngineSelector';\r\nimport { scrollToTableEnd } from './scrollToTableEnd';\r\n\r\nexport function useScrollAfterMobileAdd(\r\n scrollRef: RefObject<HTMLElement | null>,\r\n controller: UITableController,\r\n revealAllRows: () => void,\r\n) {\r\n const mobileEditor = useMobileEditorState(controller);\r\n const previousEditorRef = useRef(mobileEditor);\r\n\r\n useEffect(() => {\r\n const previousEditor = previousEditorRef.current;\r\n previousEditorRef.current = mobileEditor;\r\n\r\n if (previousEditor?.mode !== 'add' || mobileEditor) {\r\n return;\r\n }\r\n\r\n revealAllRows();\r\n\r\n const rowId = previousEditor.rowId;\r\n requestAnimationFrame(() => {\r\n scrollToTableEnd(scrollRef.current, rowId);\r\n requestAnimationFrame(() => {\r\n scrollToTableEnd(scrollRef.current, rowId);\r\n });\r\n });\r\n }, [mobileEditor, revealAllRows, scrollRef]);\r\n}\r\n","\"use client\";\r\n\r\nimport React, {\r\n ReactNode,\r\n useEffect,\r\n useRef,\r\n} from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { ERPTableFooter } from '../desktop/ERPTableFooter';\r\nimport { jsonEqual, useControllerSelector } from '../hooks/useEngineSelector';\r\nimport { useScrollToSearchMatch } from '../hooks/useScrollToSearchMatch';\r\nimport { IMultiSelectConfig } from '../type';\r\nimport { ariaGridRowCount, gridCellDomId } from '../a11y/gridRoles';\r\nimport { GridLiveRegion } from '../a11y/GridLiveRegion';\r\nimport { MobileActionButtons } from './MobileActionButtons';\r\nimport { MobileLoadMoreButton } from './MobileLoadMoreButton';\r\nimport { MobileRowFormModal } from './MobileRowFormModal';\r\nimport { MobileTableBody } from './MobileTableBody';\r\nimport { MobileTableHeader } from './MobileTableHeader';\r\nimport { useScrollAfterMobileAdd } from './useScrollAfterMobileAdd';\r\nimport { scrollToTableEnd } from './scrollToTableEnd';\r\nimport {\r\n GridOverlays,\r\n type GridOverlayComponent,\r\n} from '../overlays';\r\n\r\nexport interface MobileTableProps {\r\n controller: UITableController;\r\n tableKey: string;\r\n tableTitle?: ReactNode;\r\n header?: ReactNode;\r\n footer?: boolean | ReactNode;\r\n multiSelectConfig?: IMultiSelectConfig;\r\n pluginHost?: PluginHost;\r\n loading?: boolean;\r\n loadingOverlayComponent?: GridOverlayComponent;\r\n noRowsOverlayComponent?: GridOverlayComponent;\r\n}\r\n\r\nexport function MobileTable({\r\n controller,\r\n tableKey,\r\n tableTitle,\r\n header,\r\n footer,\r\n multiSelectConfig,\r\n pluginHost,\r\n loading = false,\r\n loadingOverlayComponent,\r\n noRowsOverlayComponent,\r\n}: MobileTableProps) {\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n const mobileView =controller.getMobileViewState();\r\n const mobileEditor = mobileView?.mobileEditor ?? null;\r\n useEffect(() => {\r\n controller.resetMobileVisibleRows();\r\n }, [controller, tableKey]);\r\n\r\n useScrollToSearchMatch(scrollRef, controller);\r\n useScrollAfterMobileAdd(scrollRef, controller, () =>\r\n controller.revealAllMobileRows(),\r\n );\r\n\r\n if (!mobileView) return null;\r\n\r\n const viewState = controller.getViewState();\r\n const activeDescendant = viewState?.activeCell\r\n ? gridCellDomId(\r\n tableKey,\r\n viewState.activeCell.rowId,\r\n viewState.activeCell.columnId,\r\n )\r\n : undefined;\r\n\r\n return (\r\n <>\r\n <GridLiveRegion controller={controller} />\r\n <div className=\"flex flex-col w-full transition-all duration-200\">\r\n <div className=\"flex items-center gap-2 bg-main-white px-1 py-2 border-gray-gray5 border-b w-full shrink-0\">\r\n <div className=\"shrink-0\">{tableTitle}</div>\r\n <div className=\"flex items-center ms-auto\">\r\n <MobileActionButtons\r\n controller={controller}\r\n multiSelectConfig={multiSelectConfig}\r\n pluginHost={pluginHost}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div\r\n ref={scrollRef}\r\n data-erp-table-scroll\r\n className=\"hidden-show-scrollBar overflow-x-auto [overflow-anchor:none] relative\"\r\n style={{ overflowAnchor: 'none', minHeight: 160 }}\r\n >\r\n <GridOverlays\r\n loading={loading}\r\n rowCount={mobileView.totalRows}\r\n loadingOverlayComponent={loadingOverlayComponent}\r\n noRowsOverlayComponent={noRowsOverlayComponent}\r\n />\r\n <table\r\n className=\"min-w-max\"\r\n role=\"grid\"\r\n tabIndex={0}\r\n aria-colcount={\r\n mobileView.columns.filter((c) => !c.hidden).length || undefined\r\n }\r\n aria-rowcount={\r\n ariaGridRowCount(mobileView.totalRows, Boolean(footer)) ||\r\n undefined\r\n }\r\n aria-activedescendant={activeDescendant}\r\n data-pdg-grid-focus=\"\"\r\n onFocus={(e) => {\r\n if (e.target !== e.currentTarget) return;\r\n if (controller.getActiveCell()) return;\r\n const firstRow = mobileView.rows[0];\r\n const firstCol = mobileView.columns.find(\r\n (c) =>\r\n !c.hidden &&\r\n c.fieldType !== 'index' &&\r\n c.fieldName !== 'index',\r\n );\r\n if (firstRow && firstCol) {\r\n void controller.dispatch({\r\n type: 'UI_ACTIVE_CELL',\r\n rowId: firstRow.id,\r\n columnId: firstCol.fieldName,\r\n });\r\n }\r\n }}\r\n >\r\n <MobileTableHeader controller={controller} header={header} />\r\n <MobileTableBody\r\n controller={controller}\r\n tableKey={tableKey}\r\n rows={mobileView.rows}\r\n columns={mobileView.columns}\r\n />\r\n {footer && (\r\n <ERPTableFooter\r\n controller={controller}\r\n footer={footer}\r\n dataRowCount={mobileView.totalRows}\r\n />\r\n )}\r\n </table>\r\n </div>\r\n\r\n {mobileView.hasMore && (\r\n <MobileLoadMoreButton\r\n onClick={\r\n \r\n async () =>{\r\n await controller.loadMoreMobileRows()\r\n scrollToTableEnd(scrollRef.current)\r\n } \r\n\r\n\r\n }\r\n visibleCount={mobileView.visibleCount}\r\n totalRows={mobileView.totalRows}\r\n />\r\n )}\r\n </div>\r\n\r\n {mobileEditor && (\r\n <MobileRowFormModal\r\n controller={controller}\r\n tableKey={tableKey}\r\n editor={mobileEditor}\r\n onClose={() => {\r\n void controller.dispatch({ type: 'UI_CLOSE_MOBILE_EDITOR' });\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n}\r\n","const SELECT_NAV_SKIP = new Set([\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'Enter',\r\n 'NumpadEnter',\r\n]);\r\n\r\nconst TEXTAREA_NAV_SKIP = new Set([\r\n 'Enter',\r\n 'NumpadEnter',\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n]);\r\n\r\ntype ClosestHost = {\r\n closest: (selector: string) => unknown;\r\n getAttribute?: (name: string) => string | null;\r\n};\r\n\r\nfunction asClosestHost(target: EventTarget | null): ClosestHost | null {\r\n if (!target || typeof (target as unknown as ClosestHost).closest !== 'function') {\r\n return null;\r\n }\r\n return target as unknown as ClosestHost;\r\n}\r\n\r\n/** Select widget, its portal dropdown / virtual list, or an option/combobox node. */\r\nfunction isInsideSelect(el: ClosestHost): boolean {\r\n return Boolean(\r\n el.closest('.ant-select') ||\r\n el.closest('.ant-select-dropdown') ||\r\n el.closest('.rc-virtual-list') ||\r\n el.closest('.erp-table-select') ||\r\n el.getAttribute?.('role') === 'option' ||\r\n el.getAttribute?.('role') === 'combobox',\r\n );\r\n}\r\n\r\n/**\r\n * Table shortcuts that must win over a focused Select: every Alt shortcut and\r\n * the Ctrl+Space / Ctrl+Arrow / Ctrl+End row shortcuts. The caller must\r\n * `preventDefault()` + `stopPropagation()` synchronously — an async dispatch\r\n * is too late to stop the Select's own handling.\r\n */\r\nexport function isGridShortcutKey(e: {\r\n altKey: boolean;\r\n ctrlKey: boolean;\r\n code: string;\r\n getModifierState?: (key: string) => boolean;\r\n}): boolean {\r\n // AltGr (reported as Ctrl+Alt on Windows) types a character, it is no chord.\r\n if (typeof e.getModifierState === 'function' && e.getModifierState('AltGraph')) {\r\n return false;\r\n }\r\n if (e.altKey) return true;\r\n return (\r\n e.ctrlKey &&\r\n (e.code === 'Space' ||\r\n e.code === 'ArrowUp' ||\r\n e.code === 'ArrowDown' ||\r\n e.code === 'End')\r\n );\r\n}\r\n\r\n/**\r\n * Window-capture KEY_DOWN must not steal Enter/arrows from native controls.\r\n * Select: keep existing skip. Textarea: Enter inserts a newline (PR-56).\r\n */\r\nexport function shouldSkipGridNavigation(\r\n target: EventTarget | null,\r\n code: string,\r\n): boolean {\r\n const el = asClosestHost(target);\r\n if (!el) return false;\r\n if (isInsideSelect(el)) {\r\n return SELECT_NAV_SKIP.has(code);\r\n }\r\n if (el.closest('[data-erp-cell-textarea]')) {\r\n return TEXTAREA_NAV_SKIP.has(code);\r\n }\r\n return false;\r\n}\r\n\n/**\n * Where a window-level keydown came from, relative to ONE grid root.\n * - `cell`: a body cell or the grid's own table (APG focus) → grid keyboard.\n * - `page`: nothing focused (body / document) → grid keyboard (arrows keep\n * working after a click on a non-focusable area, as in the legacy table).\n * - `outside`: any other control — page forms, the grid toolbar, header\n * filters, popovers, dialogs → only the legacy global chords\n * (`isGridShortcutKey`); typing, copy/paste, Enter, Tab, arrows stay native.\n * - `other-grid`: inside another grid → ignored.\n */\nexport type GridKeyScope = 'cell' | 'page' | 'outside' | 'other-grid';\n\nexport function resolveGridKeyScope(\n target: EventTarget | null,\n root: Element | null,\n): GridKeyScope {\n if (!root) return 'cell';\n if (typeof Element === 'undefined' || !(target instanceof Element)) return 'page';\n if (\n typeof document !== 'undefined' &&\n (target === document.body || target === document.documentElement)\n ) {\n return 'page';\n }\n const owner = target.closest('[data-pdg-grid]');\n if (owner && owner !== root) return 'other-grid';\n if (!root.contains(target)) return 'outside';\n if (target.closest('[role=\"menu\"], [role=\"dialog\"], .erp-table-modal')) return 'outside';\n if (target.closest('[role=\"gridcell\"], [data-erp-cell-textarea]')) return 'cell';\n if (target.closest('[role=\"grid\"], [role=\"treegrid\"]') === target) return 'cell';\n return 'outside';\n}\n","// hooks/useERPTable.ts\r\nimport {\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from 'react';\r\n\r\nimport type { GridSession } from '../application/session/GridSession';\r\nimport type { PluginHost } from '../application/plugins/PluginHost';\r\nimport type { EventStore } from '../application/ports/EventStore';\r\nimport { createGrid } from '../bootstrap';\r\nimport {\r\n createGridTableKey,\r\n DEFAULT_MEMORY_STORE,\r\n isPersistentStore,\r\n} from '../bootstrap/defaults';\r\nimport type {\r\n CreateERPTableConfig,\r\n CreateGridResult,\r\n} from '../bootstrap/type';\r\nimport { flattenColDefOrGroup } from '../infrastructure/columns/flattenColumnDefs';\r\nimport type { TableSnapShot } from '../engine/type';\r\nimport type {\r\n HistoryItem,\r\n HistoryQuery,\r\n} from '../infrastructure/history/HistoryPanelViewModel';\r\nimport type {\r\n ChangelogEntry,\r\n ChangelogQuery,\r\n} from '../infrastructure/projections/ChangelogProjection';\r\nimport type { GridApi } from '../infrastructure/ui/createGridApi';\r\nimport {\r\n UITableController,\r\n} from '../infrastructure/ui/UITableController';\r\n\r\nexport type UseGridResult<TRow = unknown> =\r\n | { ready: false }\r\n | {\r\n ready: true;\r\n controller: UITableController;\r\n api: GridApi<TRow>;\r\n session: GridSession;\r\n pluginHost: PluginHost;\r\n eventStore: EventStore;\r\n store: string;\r\n tableKey: string;\r\n rows: TableSnapShot;\r\n changelog: ChangelogEntry[];\r\n changelogCount: number;\r\n historyItems: HistoryItem[];\r\n historyItemCount: number;\r\n canUndo: boolean;\r\n canRedo: boolean;\r\n getChangelog: (\r\n filter?: Omit<ChangelogQuery, 'tableId'>\r\n ) => ChangelogEntry[];\r\n getHistoryItems: (\r\n filter?: Omit<HistoryQuery, 'tableId'>\r\n ) => HistoryItem[];\r\n subscribeChangelog: (\r\n cb: (entries: ChangelogEntry[]) => void,\r\n filter?: Omit<ChangelogQuery, 'tableId'>\r\n ) => () => void;\r\n subscribeHistoryItems: (\r\n cb: (items: HistoryItem[]) => void,\r\n filter?: Omit<HistoryQuery, 'tableId'>\r\n ) => () => void;\r\n subscribeSelected: GridSession['subscribeSelected'];\r\n getViewport: GridSession['getViewport'];\r\n getVisibleRange: GridSession['getVisibleRange'];\r\n projectVisibleRows: GridSession['projectVisibleRows'];\r\n getUiRowCount: GridSession['getUiRowCount'];\r\n projectVisibleUiRows: GridSession['projectVisibleUiRows'];\r\n changeViewport: (input: {\r\n scrollOffset: number;\r\n viewportSize?: number;\r\n rowHeight?: number;\r\n overscan?: number;\r\n }) => Promise<void>;\r\n undo: () => Promise<boolean>;\r\n redo: () => Promise<boolean>;\r\n };\r\n\r\n/** @deprecated Use {@link UseGridResult}. Removed in 1.0.0. */\r\nexport type UseERPTableResult<TRow = unknown> = UseGridResult<TRow>;\r\n\r\nexport function useGrid<TRow = unknown>(\r\n config: CreateERPTableConfig<TRow>\r\n): UseGridResult<TRow> {\r\n const generatedKeyRef = useRef<string | undefined>(undefined);\r\n if (config.tableKey) {\r\n generatedKeyRef.current = config.tableKey;\r\n } else if (!generatedKeyRef.current) {\r\n generatedKeyRef.current = createGridTableKey();\r\n }\r\n const tableKey = generatedKeyRef.current;\r\n\r\n const [controller, setController] =\r\n useState<UITableController | null>(null);\r\n const [api, setApi] = useState<GridApi<TRow> | null>(null);\r\n const [session, setSession] = useState<GridSession | null>(null);\r\n const [pluginHost, setPluginHost] = useState<PluginHost | null>(null);\r\n const [eventStore, setEventStore] = useState<EventStore | null>(null);\r\n const [rows, setRows] = useState<TableSnapShot | null>(null);\r\n const [, setViewVersion] = useState(0);\r\n const [undoFlags, setUndoFlags] = useState({ canUndo: false, canRedo: false });\r\n const [historyItems, setHistoryItems] = useState<HistoryItem[]>([]);\r\n const [changelog, setChangelog] = useState<ChangelogEntry[]>([]);\r\n\r\n // Page-window mode ('paged-idb'): an empty `tableKey` means \"page left /\r\n // not mounted yet\" — never build (or rebuild IndexedDB for) a grid then.\r\n const pagedIdb = config.persistence === 'paged-idb';\r\n const disabled = pagedIdb && !config.tableKey;\r\n // Latest config for the effect below (config identity changes every render;\r\n // only the listed deps rebuild the grid).\r\n const configRef = useRef(config);\r\n configRef.current = config;\r\n // Teardown of the previous grid. A new grid waits for it so the old one has\r\n // released its event store / IndexedDB connection before the next opens it.\r\n const teardownRef = useRef<Promise<void>>(Promise.resolve());\r\n\r\n // ---------- bootstrap + teardown ----------\r\n // The grid is created inside the effect (never in render / useMemo): render\r\n // is pure, StrictMode's mount→cleanup→mount creates exactly one grid (the\r\n // first run is cancelled before it builds), and every grid that was built is\r\n // released by its own cleanup.\r\n useEffect(() => {\r\n let cancelled = false;\r\n let built: CreateGridResult<TRow> | null = null;\r\n setController(null);\r\n setApi(null);\r\n setSession(null);\r\n setPluginHost(null);\r\n setEventStore(null);\r\n setRows(null);\r\n\r\n if (disabled) return undefined;\r\n\r\n const previous = teardownRef.current;\r\n void previous.then(() => {\r\n if (cancelled) return;\r\n const grid = createGrid<TRow>({ ...configRef.current, tableKey });\r\n built = grid;\r\n void grid.ready.then((result) => {\r\n if (cancelled) return;\r\n setController(result.controller);\r\n setApi(result.api);\r\n setSession(result.session);\r\n setPluginHost(result.pluginHost);\r\n setEventStore(result.eventStore);\r\n });\r\n });\r\n\r\n return () => {\r\n cancelled = true;\r\n const grid = built;\r\n if (!grid) {\r\n teardownRef.current = previous;\r\n return;\r\n }\r\n // Paged mode: dispose() = drop the RAM page window (IndexedDB stays the\r\n // source of truth) + release resources. Default event-sourced mode:\r\n // persisted data is left exactly as it is; only resources are released.\r\n // A failed assembly already cleaned up after itself (ready rejects).\r\n teardownRef.current = previous.then(() =>\r\n grid.ready.then(\r\n (result) =>\r\n pagedIdb\r\n ? result.controller.dispose()\r\n : result.controller.releaseResources(),\r\n () => undefined,\r\n ),\r\n );\r\n };\r\n }, [tableKey, disabled, pagedIdb, config.columns, config.columnDefs, config.store]);\r\n\r\n // Re-apply host rows only when the `rowData` prop changes (PR-82). Inline\r\n // `columnDefs` / `getRowId` get a new identity on every host render; keying\r\n // this effect on them re-applied the unchanged rows and reset grid edits.\r\n useEffect(() => {\r\n if (!controller || config.rowData === undefined) return;\r\n const { columnDefs, getRowId } = configRef.current;\r\n controller.applyHostRowData(config.rowData, columnDefs, getRowId);\r\n }, [controller, config.rowData]);\r\n\r\n useEffect(() => {\r\n if (!controller || !config.columnDefs) return;\r\n for (const def of flattenColDefOrGroup(config.columnDefs)) {\r\n if (def.hide === undefined) continue;\r\n const colId =\r\n typeof def.colId === 'string' && def.colId.length > 0\r\n ? def.colId\r\n : typeof def.field === 'string'\r\n ? def.field\r\n : null;\r\n if (!colId) continue;\r\n controller.setColumnVisible(colId, !def.hide);\r\n }\r\n }, [controller, config.columnDefs]);\r\n\r\n useEffect(() => {\r\n if (!controller || config.quickFilterText === undefined) return;\r\n controller.setQuickFilterText(config.quickFilterText);\r\n }, [controller, config.quickFilterText]);\r\n\r\n useEffect(() => {\r\n if (!controller || config.groupBy === undefined) return;\r\n const cols =\r\n typeof config.groupBy === 'string'\r\n ? [config.groupBy]\r\n : [...config.groupBy];\r\n controller.setRowGroupColumns(cols);\r\n }, [controller, config.groupBy]);\r\n\r\n useEffect(() => {\r\n if (!controller || config.groupDefaultExpanded === undefined) return;\r\n controller.setGroupDefaultExpanded(config.groupDefaultExpanded);\r\n }, [controller, config.groupDefaultExpanded]);\r\n\r\n // Snapshot equality skips selection / active-row / expand because those live\r\n // on view state, not TableSnapShot. Bump viewVersion on every store tick so\r\n // checkboxes and toolbar counts re-render (same as the ERP host hook).\r\n useEffect(() => {\r\n if (!controller) return;\r\n\r\n let cancelled = false;\r\n const syncView = () => {\r\n if (cancelled) return;\r\n // Re-render only in page-window mode — never rebuild a row snapshot on\r\n // every keystroke; server save uses getFullSnapShot().\r\n if (!controller.isPagedWindow()) {\r\n const snapshot = controller.getSnapShot('active');\r\n if (snapshot) setRows(snapshot);\r\n }\r\n setViewVersion((version) => version + 1);\r\n };\r\n\r\n syncView();\r\n const unsubscribe = controller.subscribe(syncView);\r\n\r\n if (!unsubscribe) {\r\n const retryTimer = window.setTimeout(syncView, 0);\r\n return () => {\r\n cancelled = true;\r\n window.clearTimeout(retryTimer);\r\n };\r\n }\r\n\r\n return () => {\r\n cancelled = true;\r\n unsubscribe();\r\n };\r\n }, [controller]);\r\n\r\n // ---------- selector: undo flags (independent of row snapshot) ----------\r\n useEffect(() => {\r\n if (!controller) return;\r\n\r\n const readFlags = () => ({\r\n canUndo: controller.canUndo(),\r\n canRedo: controller.canRedo(),\r\n });\r\n\r\n setUndoFlags(readFlags());\r\n\r\n return controller.subscribeSelected(\r\n readFlags,\r\n setUndoFlags,\r\n (a: { canUndo: boolean; canRedo: boolean }, b: { canUndo: boolean; canRedo: boolean }) =>\r\n a.canUndo === b.canUndo && a.canRedo === b.canRedo,\r\n );\r\n }, [controller]);\r\n\r\n // ---------- history / changelog: dedicated projection subscriptions ----------\r\n useEffect(() => {\r\n if (!controller) return;\r\n setHistoryItems(controller.getHistoryItems());\r\n setChangelog(controller.getChangelog());\r\n const unsubHistory = controller.subscribeHistoryItems(setHistoryItems);\r\n const unsubChangelog = controller.subscribeChangelog(setChangelog);\r\n return () => {\r\n unsubHistory();\r\n unsubChangelog();\r\n };\r\n }, [controller]);\r\n\r\n if (!eventStore || !controller || !api || !session || !pluginHost || !controller.getViewState()) {\r\n return { ready: false };\r\n }\r\n\r\n return {\r\n ready: true,\r\n controller,\r\n api,\r\n session,\r\n pluginHost,\r\n eventStore,\r\n store: isPersistentStore(config.store) ? config.store : DEFAULT_MEMORY_STORE,\r\n tableKey,\r\n rows: rows ?? (controller.getSnapShot('active') as TableSnapShot),\r\n changelog,\r\n changelogCount: changelog.length,\r\n historyItems,\r\n historyItemCount: historyItems.length,\r\n canUndo: undoFlags.canUndo,\r\n canRedo: undoFlags.canRedo,\r\n getChangelog: (filter) => controller.getChangelog(filter),\r\n getHistoryItems: (filter) => controller.getHistoryItems(filter),\r\n subscribeChangelog: (cb, filter) =>\r\n controller.subscribeChangelog(cb, filter),\r\n subscribeHistoryItems: (cb, filter) =>\r\n controller.subscribeHistoryItems(cb, filter),\r\n subscribeSelected: ((selector, listener, isEqual) =>\r\n controller.subscribeSelected(selector, listener, isEqual)) as GridSession['subscribeSelected'],\r\n getViewport: () => session.getViewport(),\r\n getVisibleRange: (totalRows?: number) => session.getVisibleRange(totalRows),\r\n projectVisibleRows: <T,>(rows: T[], totalRows?: number) =>\r\n session.projectVisibleRows(rows, totalRows),\r\n getUiRowCount: () => session.getUiRowCount(),\r\n projectVisibleUiRows: () => session.projectVisibleUiRows(),\r\n changeViewport: (input: {\r\n scrollOffset: number;\r\n viewportSize?: number;\r\n rowHeight?: number;\r\n overscan?: number;\r\n }) =>\r\n session.dispatchViewIntent({ type: 'CHANGE_VIEWPORT', ...input }),\r\n undo: () => controller.undo(),\r\n redo: () => controller.redo(),\r\n };\r\n}\r\n\r\n/** @deprecated Use {@link useGrid}. Removed in 1.0.0. */\r\nexport const useERPTable = useGrid;\r\n","import type { Ref } from 'react';\r\n\r\nexport function assignRef<T>(ref: Ref<T> | undefined, value: T): void {\r\n if (!ref) return;\r\n if (typeof ref === 'function') {\r\n ref(value);\r\n return;\r\n }\r\n (ref as { current: T }).current = value;\r\n}\r\n","\"use client\";\nimport React, {\n ReactNode,\n Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { CreateERPTableConfig } from '../bootstrap/type';\nimport { UITableController } from '../infrastructure/ui/UITableController';\nimport type { GridApi } from '../infrastructure/ui/createGridApi';\nimport {\n ERPTableHostProvider,\n resolveDirection,\n useMediaQuery,\n type ERPTableLocale,\n type ERPTableMessages,\n type ERPTableToastKind,\n type NumberingSystem,\n type DateAdapter,\n type UseDependOnHook,\n} from './host';\nimport type { ColumnMenuItemsConfig } from '../engine/dataOps/columnMenu';\nimport { DesktopTable } from './desktop/DesktopTable';\nimport type { ColumnMenuActionEvent } from './desktop/ColumnMenuPopover';\nimport { MobileTable } from './mobile/MobileTable';\nimport {\n GridTheme,\n isStockDarkTheme,\n resolveActiveTheme,\n themeDefault,\n themeToStyle,\n} from './theme';\nimport { IMultiSelectConfig } from './type';\nimport type { CellComponentMap } from './cellRenderer/cellRegistry';\nimport type { FilterComponentMap } from './filters';\nimport type { GridOverlayComponent } from './overlays';\nimport {\n isGridShortcutKey,\n resolveGridKeyScope,\n shouldSkipGridNavigation,\n} from './keyboard/skipGridNavigation';\nimport { useGrid } from './useERPTable';\nimport { useGridHostEvents } from './host/useGridHostEvents';\nimport { assignRef } from './host/assignRef';\nimport type {\n GridReadyEvent,\n} from './host/bindGridHostEvents';\nimport type {\n CellFocusedEvent,\n CellValueChangedEvent,\n RowDataUpdatedEvent,\n RowValueChangedEvent,\n SelectionChangedEvent,\n} from '../application/events/hostGridEvents';\nimport type { ProcessCellForClipboardParams } from '../engine/selection/clipboardCopy';\nimport type {\n ClipboardCopyEvent,\n ClipboardPasteEvent,\n} from '../infrastructure/ui/gridClipboard';\n\nexport type {\n CellFocusedEvent,\n CellValueChangedEvent,\n RowDataUpdatedEvent,\n RowValueChangedEvent,\n SelectionChangedEvent,\n} from '../application/events/hostGridEvents';\nexport type {\n ClipboardCopyEvent,\n ClipboardPasteEvent,\n} from '../infrastructure/ui/gridClipboard';\nexport type { ProcessCellForClipboardParams } from '../engine/selection/clipboardCopy';\nexport type { GridReadyEvent } from './host/bindGridHostEvents';\nexport type {\n GridApi,\n GridColumnState,\n GridRowNode,\n StartEditingCellParams,\n} from '../infrastructure/ui/createGridApi';\n\nexport interface DataGridProps<TRow = unknown> extends CreateERPTableConfig<TRow> {\n /**\n * Filled when the grid hydrates; cleared on unmount.\n * Prefer this over `onReady` (PR-86).\n */\n apiRef?: Ref<GridApi<TRow> | null>;\n /**\n * @deprecated Prefer {@link DataGridProps.apiRef} / `onGridReady` (PR-86).\n * Still receives `UITableController` for one version so existing hosts compile.\n */\n onReady?: (controller: UITableController) => void;\n /** Fires once when the grid has hydrated. Same moment as `onReady` (PR-85). */\n onGridReady?: (event: GridReadyEvent<NoInfer<TRow>>) => void;\n /** One call per `CELL_CHANGED` catalog event. */\n onCellValueChanged?: (event: CellValueChangedEvent<NoInfer<TRow>>) => void;\n /** Same `CELL_CHANGED` event, with the host row (`data`). */\n onRowValueChanged?: (event: RowValueChangedEvent<NoInfer<TRow>>) => void;\n /** Row add/delete/reorder catalog events, or later `rowData` prop updates. */\n onRowDataUpdated?: (event: RowDataUpdatedEvent<NoInfer<TRow>>) => void;\n /** View-store selection (`selectedRows`), not a second event bus. */\n onSelectionChanged?: (event: SelectionChangedEvent<NoInfer<TRow>>) => void;\n /** View-store active cell. */\n onCellFocused?: (event: CellFocusedEvent) => void;\n tableTitle?: ReactNode;\n header?: ReactNode;\n footer?: boolean | ReactNode;\n /**\n * When `footer={true}`, optional multi-row aggregates (PR-119).\n * Each row can override `aggFunc` (e.g. sum + avg).\n */\n footerRows?: readonly import('./desktop/ERPTableFooter').FooterRowDef[];\n activeCollection?: string;\n tableHeight?: number;\n /** When omitted, the choose-from-list button and modal are not rendered (D11). */\n multiSelectConfig?: IMultiSelectConfig;\n moreDetailComponent?: React.ComponentType<{data: unknown}>;\n /**\n * Desktop virtual scroll. Default **on** when a session is present (PR-97 / D17).\n * Pass `virtualization={false}` for classic pagination chrome.\n */\n virtualization?: boolean;\n locale?: ERPTableLocale;\n /**\n * Writing direction. Default derived from `locale` (`fa`/`ar` → rtl, `en` → ltr).\n * Pass explicitly to override (PR-127).\n */\n direction?: 'rtl' | 'ltr';\n /**\n * Intl digit system (PR-127). Default from locale meta\n * (`fa` → arabext, `ar` → arab, `en` → latn).\n */\n numberingSystem?: NumberingSystem;\n /**\n * Calendar port (PR-128 / D21). Default jalali for `locale=\"fa\"`, else gregorian.\n */\n dateAdapter?: DateAdapter;\n messages?: Partial<ERPTableMessages>;\n onToast?: (kind: ERPTableToastKind, message: string, detail?: unknown) => void;\n /** Typed CSS variables on the table root. Default `themeDefault`. */\n theme?: GridTheme;\n /**\n * Show the light/dark button in product chrome. Default true.\n * Hidden when `theme` is a custom (non-stock) GridTheme.\n */\n themeToggle?: boolean;\n /**\n * Replace built-in FieldType editors (PR-55). Keys are FieldType or a custom\n * string. Column `render` still wins. Omit = CellRenderer switch fallback.\n */\n components?: CellComponentMap;\n /**\n * Custom column filter UIs (PR-95). Keys match `ColumnDef.filter` string /\n * `{ type }`. Built-in names (`text`/`number`/…) stay on the default popover.\n */\n filterComponents?: FilterComponentMap;\n /**\n * Show a floating filter row under the header (PR-94).\n * Column menu filters work without this.\n */\n floatingFilter?: boolean;\n /**\n * Full-grid loading overlay (PR-103). Independent of hydrate `ready`.\n */\n loading?: boolean;\n /** Replace the default loading overlay (PR-103). */\n loadingOverlayComponent?: GridOverlayComponent;\n /** Replace the default empty overlay (PR-103). */\n noRowsOverlayComponent?: GridOverlayComponent;\n /**\n * Copy formatted display strings instead of raw values (PR-106).\n * Default false.\n */\n copyFormattedValue?: boolean;\n /** Include column headers in clipboard TSV/HTML (PR-106). Default false. */\n copyHeadersToClipboard?: boolean;\n /**\n * Convert eastern digits to ASCII in clipboard text (PR-106).\n * Default true.\n */\n copyDigitsAsLatin?: boolean;\n /** Override per-cell clipboard text (PR-106). */\n processCellForClipboard?: (\n params: ProcessCellForClipboardParams,\n ) => string;\n /**\n * Fires before writing to the system clipboard (PR-106).\n * Return `false` to cancel the default write.\n */\n onClipboardCopy?: (event: ClipboardCopyEvent) => boolean | void;\n /**\n * When true (default), paste past the last row adds rows (PR-107).\n */\n pasteAddsRows?: boolean;\n /** Fires before paste; return false to cancel (PR-107). */\n onClipboardPaste?: (event: ClipboardPasteEvent) => boolean | void;\n /**\n * Column header ⋮ menu items (PR-114). Pass a function to trim/reorder defaults\n * or append `{ name, label }` custom entries (handle via `onColumnMenuAction`).\n */\n columnMenuItems?: ColumnMenuItemsConfig;\n /** Fires for custom column menu items (PR-114). */\n onColumnMenuAction?: (event: ColumnMenuActionEvent) => void;\n /**\n * Host hook resolving `dependOn` values of remote lists (see\n * `ERPTableHostProvider`). When omitted, an outer `ERPTableHostProvider`'s\n * hook is used, else the static item values.\n */\n useDependOn?: UseDependOnHook;\n /**\n * Rows stuck under the header (PR-116). Display-only; not virtualized,\n * sorted, filtered, or selected with body rows.\n */\n pinnedTopRowData?: readonly NoInfer<TRow>[];\n /**\n * Rows stuck above the footer (PR-116). Display-only; not virtualized.\n */\n pinnedBottomRowData?: readonly NoInfer<TRow>[];\n}\n\n/** @deprecated Use {@link DataGridProps}. Removed in 1.0.0. */\nexport type ERPTableProps<TRow = unknown> = DataGridProps<TRow>;\n\nexport function DataGrid<TRow = unknown>(props: DataGridProps<TRow>) {\n const {\n apiRef,\n onReady,\n onGridReady,\n onCellValueChanged,\n onRowValueChanged,\n onRowDataUpdated,\n onSelectionChanged,\n onCellFocused,\n tableTitle,\n header,\n footer,\n footerRows,\n tableHeight,\n multiSelectConfig,\n moreDetailComponent,\n virtualization,\n remoteApi,\n locale = 'fa',\n direction,\n numberingSystem,\n dateAdapter,\n messages,\n onToast,\n theme: themeProp,\n themeToggle = true,\n components,\n filterComponents,\n rowData,\n floatingFilter = false,\n loading = false,\n loadingOverlayComponent,\n noRowsOverlayComponent,\n copyFormattedValue,\n copyHeadersToClipboard,\n copyDigitsAsLatin,\n processCellForClipboard,\n onClipboardCopy,\n pasteAddsRows,\n onClipboardPaste,\n columnMenuItems,\n onColumnMenuAction,\n useDependOn,\n pinnedTopRowData,\n pinnedBottomRowData,\n } = props;\n\n /** Grid root — scopes the window key listener to this grid. */\n const rootRef = useRef<HTMLDivElement>(null);\n /** Last focus / pointer event seen inside the grid's React tree (portals included). */\n const insideEventRef = useRef<Event | null>(null);\n const markInsideEvent = useCallback((e: React.SyntheticEvent) => {\n insideEventRef.current = e.nativeEvent;\n }, []);\n\n const requestedTheme = themeProp ?? themeDefault;\n const requestedKey = JSON.stringify(requestedTheme.params);\n const [preferDark, setPreferDark] = useState(() =>\n isStockDarkTheme(requestedTheme),\n );\n\n const { theme: resolvedTheme, locked: themeLocked } = useMemo(\n () =>\n resolveActiveTheme({\n requested: requestedTheme,\n preferDark,\n }),\n [requestedTheme, preferDark],\n );\n\n useEffect(() => {\n if (themeLocked) return;\n setPreferDark(isStockDarkTheme(requestedTheme));\n }, [requestedKey, themeLocked, requestedTheme]);\n\n const onToggleTheme = useCallback(() => {\n setPreferDark((value) => !value);\n }, []);\n\n // Every grid option (`persistence`, `cellEditCommit`, `enterNavigation`,\n // `quickFilterText`, `rowModelType`, `eventStoreName`, …) reaches createGrid;\n // the UI-only props are ignored there. Page size follows the rendered row\n // height of the theme.\n const result = useGrid<TRow>({\n ...props,\n rowHeight: resolvedTheme.params.rowHeight,\n });\n\n useEffect(() => {\n if (!result.ready) return;\n result.controller.configureClipboard({\n copyFormattedValue,\n copyHeadersToClipboard,\n copyDigitsAsLatin,\n processCellForClipboard,\n onClipboardCopy,\n pasteAddsRows,\n onClipboardPaste,\n });\n }, [\n result.ready,\n result.ready ? result.controller : null,\n copyFormattedValue,\n copyHeadersToClipboard,\n copyDigitsAsLatin,\n processCellForClipboard,\n onClipboardCopy,\n pasteAddsRows,\n onClipboardPaste,\n ]);\n\n useEffect(() => {\n if (!result.ready) return;\n const {controller} = result;\n\n const clickHandler = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n const button = target.closest(\"button\");\n if (button) {\n const {pageid, id} = button.dataset;\n if (result.tableKey === id || result.tableKey === pageid) {\n controller.dispose();\n }\n }\n };\n\n const handler = (e: KeyboardEvent) => {\n // The listener is window-level (Select popups, legacy chords): keys\n // typed in page forms, the toolbar, header filters or another grid are\n // never taken — only the legacy global chords are.\n const scope = resolveGridKeyScope(e.target, rootRef.current);\n if (scope === 'other-grid') return;\n const shortcut = isGridShortcutKey(e);\n if (scope === 'outside' && !shortcut) return;\n // Table Alt/Ctrl shortcuts win over Select; preventDefault must run\n // synchronously — the async dispatch below is too late.\n if (shortcut) {\n e.preventDefault();\n e.stopPropagation();\n } else if (shouldSkipGridNavigation(e.target, e.code)) {\n return;\n }\n const activeRow = controller.getActiveRow();\n const activeCell = controller.getActiveCell();\n void controller.dispatch({\n type: \"KEY_DOWN\",\n event: e,\n ctx: {\n activeRowId: activeRow,\n tableKey: result.tableKey,\n activeColumnId: activeCell?.columnId ?? null,\n },\n });\n };\n\n window.addEventListener(\"keydown\", handler, true);\n window.addEventListener(\"click\", clickHandler, true);\n return () => {\n window.removeEventListener(\"click\", clickHandler, true);\n window.removeEventListener(\"keydown\", handler, true);\n };\n }, [result.ready, result]);\n\n // `stopEditingWhenCellsLoseFocus`: a focus / pointer-down outside the grid\n // ends a deferred edit. React events bubble through portals, so Select\n // popups, date pickers and menus rendered by the grid count as inside.\n const readyController = result.ready ? result.controller : null;\n useEffect(() => {\n if (!readyController || typeof document === 'undefined') return;\n const onDocument = (event: Event) => {\n window.setTimeout(() => {\n if (insideEventRef.current === event) return;\n void readyController.leaveGridFocus();\n }, 0);\n };\n document.addEventListener('focusin', onDocument, true);\n document.addEventListener('pointerdown', onDocument, true);\n return () => {\n document.removeEventListener('focusin', onDocument, true);\n document.removeEventListener('pointerdown', onDocument, true);\n };\n }, [readyController]);\n\n useGridHostEvents({\n ready: result.ready,\n controller: result.ready ? result.controller : null,\n eventStore: result.ready ? result.eventStore : null,\n tableKey: result.ready ? result.tableKey : '',\n onCellValueChanged,\n onRowValueChanged,\n onRowDataUpdated,\n onSelectionChanged,\n onCellFocused,\n });\n\n const rowDataPrimedRef = useRef(false);\n useEffect(() => {\n if (!result.ready) {\n rowDataPrimedRef.current = false;\n return;\n }\n if (rowData === undefined) return;\n if (!rowDataPrimedRef.current) {\n rowDataPrimedRef.current = true;\n return;\n }\n onRowDataUpdated?.({\n rowData: [...rowData],\n source: 'rowData',\n });\n }, [result.ready, rowData, onRowDataUpdated]);\n\n useEffect(() => {\n if (!result.ready) return;\n const api = result.api;\n assignRef(apiRef, api);\n onReady?.(result.controller);\n onGridReady?.({ api });\n return () => assignRef(apiRef, null);\n }, [result, apiRef, onReady, onGridReady]);\n\n const {match: viewportMatch} = useMediaQuery(\"XLUP\");\n const isMobile = viewportMatch === false;\n\n if (!result.ready) return null;\n\n const sharedProps = {\n controller: result.controller,\n tableKey: result.tableKey,\n tableTitle,\n header,\n footer,\n multiSelectConfig,\n pluginHost: result.pluginHost,\n loading,\n loadingOverlayComponent,\n noRowsOverlayComponent,\n };\n\n const table = isMobile ? (\n <MobileTable {...sharedProps} />\n ) : (\n <DesktopTable\n {...sharedProps}\n store={result.store}\n tableHeight={tableHeight}\n moreDetailComponent={moreDetailComponent}\n ready={result.ready}\n virtualization={virtualization}\n session={result.session}\n floatingFilter={floatingFilter}\n footerRows={footerRows}\n pinnedTopRowData={pinnedTopRowData}\n pinnedBottomRowData={pinnedBottomRowData}\n />\n );\n\n const dir = resolveDirection(locale, direction);\n const themeMode = isStockDarkTheme(resolvedTheme) ? 'dark' : 'light';\n\n return (\n <ERPTableHostProvider\n locale={locale}\n direction={dir}\n numberingSystem={numberingSystem}\n dateAdapter={dateAdapter}\n messages={messages}\n onToast={onToast}\n remoteApi={remoteApi ?? result.controller.getRemoteApi()}\n theme={resolvedTheme}\n themeToggle={themeToggle}\n themeLocked={themeLocked}\n onToggleTheme={themeLocked ? undefined : onToggleTheme}\n components={components}\n filterComponents={filterComponents}\n columnMenuItems={columnMenuItems}\n onColumnMenuAction={onColumnMenuAction}\n useDependOn={useDependOn}\n >\n <div\n ref={rootRef}\n className=\"pdg-grid erp-table\"\n dir={dir}\n onFocusCapture={markInsideEvent}\n onPointerDownCapture={markInsideEvent}\n data-pdg-grid\n data-erp-table\n data-erp-theme={themeMode}\n data-erp-theme-locked={themeLocked ? 'true' : 'false'}\n style={themeToStyle(resolvedTheme)}\n >\n {table}\n </div>\n </ERPTableHostProvider>\n );\n}\n\n/** @deprecated Use {@link DataGrid}. Removed in 1.0.0. */\nexport const ERPTable = DataGrid;\n","/**\n * GENERATED from ui/styles/erp-table.css — do not edit by hand.\n * Regenerate: yarn generate:inject-styles\n */\nconst STYLE_ID = 'erp-table-injected-css';\n\nconst CSS = `/* Visual tokens copied from the ERP Tailwind theme so the published\r\n table looks identical after npm install (no host Tailwind scan). */\r\n\r\n/* Canonical class is \\`.pdg-grid\\` (PR-87 / D13). \\`.erp-table\\` is a one-version alias. */\r\n.pdg-grid,\r\n.erp-table {\r\n --pdg-main-black: #0e0e0e;\r\n --pdg-main-white: #fff;\r\n --pdg-gray-3: #f4f4f4;\r\n --pdg-gray-5: #ececec;\r\n --pdg-gray-6: #cecece;\r\n --pdg-gray-7: #b1b1b1;\r\n --pdg-gray-8: #939393;\r\n --pdg-gray-85: #848484;\r\n --pdg-gray-9: #767676;\r\n --pdg-gray-10: #585858;\r\n --pdg-gray-11: #515151;\r\n --pdg-black-6: #292929;\r\n --pdg-blue-6: #0658b0;\r\n --pdg-blue-11: #ddecfd;\r\n --pdg-blue-100: #dbeafe;\r\n --pdg-red-100: #fee2e2;\r\n --pdg-red-300: #fca5a5;\r\n --pdg-red-600: #dc2626;\r\n --pdg-yellow-200: #fef08a;\r\n --pdg-yellow-400: #facc15;\r\n --pdg-zinc-200: #e4e4e7;\r\n --pdg-neutral-500: #737373;\r\n --pdg-gray-100: #f3f4f6;\r\n --pdg-scrollbar: #d9d9d9;\r\n --pdg-success: #2c8440;\r\n --pdg-error: #dc3545;\r\n --pdg-overlay: rgba(14, 14, 14, 0.35);\r\n\r\n --erp-main-black: var(--pdg-main-black);\r\n --erp-main-white: var(--pdg-main-white);\r\n --erp-gray-3: var(--pdg-gray-3);\r\n --erp-gray-5: var(--pdg-gray-5);\r\n --erp-gray-6: var(--pdg-gray-6);\r\n --erp-gray-7: var(--pdg-gray-7);\r\n --erp-gray-8: var(--pdg-gray-8);\r\n --erp-gray-85: var(--pdg-gray-85);\r\n --erp-gray-9: var(--pdg-gray-9);\r\n --erp-gray-10: var(--pdg-gray-10);\r\n --erp-gray-11: var(--pdg-gray-11);\r\n --erp-black-6: var(--pdg-black-6);\r\n --erp-blue-6: var(--pdg-blue-6);\r\n --erp-blue-11: var(--pdg-blue-11);\r\n --erp-blue-100: var(--pdg-blue-100);\r\n --erp-red-100: var(--pdg-red-100);\r\n --erp-red-300: var(--pdg-red-300);\r\n --erp-red-600: var(--pdg-red-600);\r\n --erp-yellow-200: var(--pdg-yellow-200);\r\n --erp-yellow-400: var(--pdg-yellow-400);\r\n --erp-zinc-200: var(--pdg-zinc-200);\r\n --erp-neutral-500: var(--pdg-neutral-500);\r\n --erp-gray-100: var(--pdg-gray-100);\r\n --erp-scrollbar: var(--pdg-scrollbar);\r\n --erp-success: var(--pdg-success);\r\n --erp-error: var(--pdg-error);\r\n --erp-overlay: var(--pdg-overlay);\r\n\r\n /* Semantic roles (alias to palette — same computed colors as before). */\r\n --pdg-bg: var(--pdg-main-white);\r\n --pdg-fg: var(--pdg-black-6);\r\n --pdg-accent: var(--pdg-blue-6);\r\n --pdg-range-bg: color-mix(in srgb, var(--pdg-accent) 14%, transparent);\r\n --pdg-range-border: var(--pdg-accent);\r\n --pdg-header-bg: var(--pdg-gray-3);\r\n --pdg-row-stripe: var(--pdg-blue-11);\r\n --pdg-row-selected: var(--pdg-blue-100);\r\n --pdg-border: var(--pdg-gray-5);\r\n --pdg-danger: var(--pdg-red-600);\r\n --pdg-search-match: var(--pdg-yellow-400);\r\n --pdg-search-other: var(--pdg-yellow-200);\r\n --pdg-muted: var(--pdg-neutral-500);\r\n --pdg-font: IRANSans, Tahoma, sans-serif;\r\n --pdg-row-height: 40px;\r\n --pdg-font-size: 12px;\r\n --pdg-radius: 0.25rem;\r\n\r\n --erp-bg: var(--pdg-bg);\r\n --erp-fg: var(--pdg-fg);\r\n --erp-accent: var(--pdg-accent);\r\n --erp-range-bg: var(--pdg-range-bg);\r\n --erp-range-border: var(--pdg-range-border);\r\n --erp-header-bg: var(--pdg-header-bg);\r\n --erp-row-stripe: var(--pdg-row-stripe);\r\n --erp-row-selected: var(--pdg-row-selected);\r\n --erp-border: var(--pdg-border);\r\n --erp-danger: var(--pdg-danger);\r\n --erp-search-match: var(--pdg-search-match);\r\n --erp-search-other: var(--pdg-search-other);\r\n --erp-muted: var(--pdg-muted);\r\n --erp-font: var(--pdg-font);\r\n --erp-row-height: var(--pdg-row-height);\r\n --erp-font-size: var(--pdg-font-size);\r\n --erp-radius: var(--pdg-radius);\r\n\r\n font-family: var(--pdg-font);\r\n color: var(--pdg-fg);\r\n box-sizing: border-box;\r\n width: 100%;\r\n}\r\n\r\n.erp-table *,\r\n.erp-table *::before,\r\n.erp-table *::after {\r\n box-sizing: border-box;\r\n}\r\n\r\n.erp-table table {\r\n border-collapse: separate;\r\n border-spacing: 0;\r\n}\r\n.erp-table .border-collapse { border-collapse: collapse; }\r\n\r\n.erp-table .flex { display: flex; }\r\n.erp-table .inline-flex { display: inline-flex; }\r\n.erp-table .flex-col { flex-direction: column; }\r\n.erp-table .flex-1 { flex: 1 1 0%; }\r\n.erp-table .flex-wrap { flex-wrap: wrap; }\r\n.erp-table .shrink-0 { flex-shrink: 0; }\r\n.erp-table .items-center { align-items: center; }\r\n.erp-table .items-start { align-items: flex-start; }\r\n.erp-table .justify-between { justify-content: space-between; }\r\n.erp-table .justify-start { justify-content: flex-start; }\r\n.erp-table .justify-end { justify-content: flex-end; }\r\n.erp-table .justify-center { justify-content: center; }\r\n.erp-table .gap-1 { gap: 0.25rem; }\r\n.erp-table .gap-2 { gap: 0.5rem; }\r\n.erp-table .gap-3 { gap: 0.75rem; }\r\n.erp-table .gap-4 { gap: 1rem; }\r\n.erp-table .gap-5 { gap: 1.25rem; }\r\n.erp-table .w-full { width: 100%; }\r\n.erp-table .h-full { height: 100%; }\r\n.erp-table .h-8 { height: 2rem; }\r\n.erp-table .h-9 { height: var(--erp-row-height); }\r\n.erp-table .h-10 { height: 2.5rem; }\r\n.erp-table .\\\\!h-9 { height: var(--erp-row-height) !important; }\r\n.erp-table .\\\\!h-full { height: 100% !important; }\r\n.erp-table .\\\\!h-\\\\[480px\\\\] { height: 480px !important; }\r\n.erp-table .min-w-max { min-width: max-content; }\r\n.erp-table .min-w-0 { min-width: 0; }\r\n.erp-table .min-w-24 { min-width: 6rem; }\r\n.erp-table .min-w-36 { min-width: 9rem; }\r\n.erp-table .min-w-5 { min-width: 1.25rem; }\r\n.erp-table .max-w-72 { max-width: 18rem; }\r\n.erp-table .max-h-\\\\[20rem\\\\] { max-height: 20rem; }\r\n.erp-table .max-w-\\\\[40vw\\\\] { max-width: 40vw; }\r\n.erp-table .w-2 { width: 0.5rem; }\r\n.erp-table .h-2 { height: 0.5rem; }\r\n.erp-table .w-fit { width: fit-content; }\r\n.erp-table .w-\\\\[16px\\\\] { width: 16px; }\r\n.erp-table .h-\\\\[16px\\\\] { height: 16px; }\r\n.erp-table .w-\\\\[20px\\\\] { width: 20px; }\r\n.erp-table .w-\\\\[2\\\\.125rem\\\\] { width: 2.125rem; }\r\n.erp-table .h-\\\\[2\\\\.125rem\\\\] { height: 2.125rem; }\r\n.erp-table .w-\\\\[720px\\\\] { width: 720px; }\r\n.erp-table .min-w-\\\\[320px\\\\] { min-width: 320px; }\r\n.erp-table .overflow-auto { overflow: auto; }\r\n.erp-table .overflow-hidden { overflow: hidden; }\r\n.erp-table .overflow-x-auto { overflow-x: auto; }\r\n.erp-table .overflow-y-auto { overflow-y: auto; }\r\n.erp-table .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\r\n.erp-table .text-ellipsis { text-overflow: ellipsis; }\r\n.erp-table .whitespace-nowrap { white-space: nowrap; }\r\n.erp-table .text-3xs { font-size: 8px; }\r\n.erp-table .text-xs { font-size: var(--erp-font-size); line-height: 1.25rem; }\r\n.erp-table .text-sm { font-size: 14px; line-height: 1.25rem; }\r\n.erp-table .text-md { font-size: 16px; }\r\n.erp-table .text-start { text-align: start; }\r\n.erp-table .text-center { text-align: center; }\r\n.erp-table .text-white { color: var(--erp-bg); }\r\n.erp-table .font-light { font-weight: 300; }\r\n.erp-table .font-medium { font-weight: 500; }\r\n.erp-table .font-semibold { font-weight: 600; }\r\n.erp-table .px-1 { padding-left: 0.25rem; padding-right: 0.25rem; }\r\n.erp-table .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }\r\n.erp-table .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }\r\n.erp-table .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }\r\n.erp-table .py-1\\\\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; }\r\n.erp-table .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }\r\n.erp-table .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; }\r\n.erp-table .p-0 { padding: 0; }\r\n.erp-table .p-1 { padding: 0.25rem; }\r\n.erp-table .p-1\\\\.5 { padding: 0.375rem; }\r\n.erp-table .p-2 { padding: 0.5rem; }\r\n.erp-table .p-3 { padding: 0.75rem; }\r\n.erp-table .pb-24 { padding-bottom: 6rem; }\r\n.erp-table .pt-5 { padding-top: 1.25rem; }\r\n.erp-table .m-0 { margin: 0; }\r\n.erp-table .m-12 { margin: 3rem; }\r\n.erp-table .my-1 { margin-top: 0.25rem; margin-bottom: 0.25rem; }\r\n.erp-table .ms-auto { margin-inline-start: auto; }\r\n.erp-table .start-1 { inset-inline-start: 0.25rem; }\r\n.erp-table .border { border-width: 1px; border-style: solid; border-color: var(--erp-border); }\r\n.erp-table .border-0 { border-width: 0; }\r\n.erp-table .border-b { border-bottom: 1px solid var(--erp-border); }\r\n.erp-table .border-t { border-top: 1px solid var(--erp-border); }\r\n.erp-table .border-dashed { border-style: dashed; }\r\n.erp-table .rounded { border-radius: var(--erp-radius); }\r\n.erp-table .rounded-t-lg { border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; }\r\n.erp-table .rounded-lg { border-radius: 0.5rem; }\r\n.erp-table .rounded-full { border-radius: 9999px; }\r\n.erp-table .rounded-sm { border-radius: 0.125rem; }\r\n.erp-table .sticky { position: sticky; }\r\n.erp-table .absolute { position: absolute; }\r\n.erp-table .relative { position: relative; }\r\n.erp-table .fixed { position: fixed; }\r\n.erp-table .inset-0 { inset: 0; }\r\n.erp-table .top-0 { top: 0; }\r\n.erp-table .top-1 { top: 0.25rem; }\r\n.erp-table .right-0 { right: 0; }\r\n.erp-table .left-0 { left: 0; }\r\n.erp-table .z-10 { z-index: 10; }\r\n.erp-table .z-20 { z-index: 20; }\r\n.erp-table .shadow { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); }\r\n.erp-table .shadow-lg { box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1); }\r\n.erp-table .transition-all { transition: all 0.2s ease; }\r\n.erp-table .transition-colors { transition: color 0.15s ease, background-color 0.15s ease; }\r\n.erp-table .duration-200 { transition-duration: 200ms; }\r\n.erp-table .duration-300 { transition-duration: 300ms; }\r\n.erp-table .duration-400 { transition-duration: 400ms; }\r\n.erp-table .cursor-pointer { cursor: pointer; }\r\n.erp-table .cursor-text { cursor: text; }\r\n.erp-table .cursor-not-allowed { cursor: not-allowed; }\r\n.erp-table .cursor-grab { cursor: grab; }\r\n.erp-table .cursor-grabbing,\r\n.erp-table .active\\\\:cursor-grabbing:active { cursor: grabbing; }\r\n.erp-table .cursor-wait { cursor: wait; }\r\n.erp-table .cursor-col-resize { cursor: col-resize; }\r\n.erp-table .opacity-30 { opacity: 0.3; }\r\n.erp-table .opacity-40 { opacity: 0.4; }\r\n.erp-table .opacity-50 { opacity: 0.5; }\r\n.erp-table .opacity-60 { opacity: 0.6; }\r\n.erp-table .opacity-100 { opacity: 1; }\r\n.erp-table .line-through { text-decoration: line-through; }\r\n.erp-table .bg-transparent { background-color: transparent; }\r\n.erp-table .outline-none,\r\n.erp-table .focus\\\\:outline-none:focus,\r\n.erp-table .focus-visible\\\\:outline-none:focus-visible { outline: none; }\r\n.erp-table .ring-0,\r\n.erp-table .focus\\\\:ring-0:focus,\r\n.erp-table .focus\\\\:\\\\!ring-0:focus { box-shadow: none !important; }\r\n.erp-table .ring-2 { box-shadow: 0 0 0 2px var(--erp-search-match); }\r\n.erp-table .ring-yellow-400 { --tw-ring-color: var(--erp-search-match); }\r\n.erp-table .bg-main-white { background-color: var(--erp-bg); }\r\n.erp-table .bg-main-black { background-color: var(--erp-main-black); }\r\n.erp-table .bg-gray-gray3 { background-color: var(--erp-header-bg); }\r\n.erp-table .bg-gray-gray5,\r\n.erp-table .\\\\!bg-gray-gray5 { background-color: var(--erp-gray-5) !important; }\r\n.erp-table .bg-gray-100 { background-color: var(--erp-gray-100); }\r\n.erp-table .bg-blue-100 { background-color: var(--erp-row-selected); }\r\n.erp-table .bg-blue-blue11 { background-color: var(--erp-row-stripe); }\r\n.erp-table .bg-blue-blue6 { background-color: var(--erp-accent); }\r\n.erp-table .bg-red-300 { background-color: var(--erp-red-300); }\r\n.erp-table .bg-red-600 { background-color: var(--erp-danger); }\r\n.erp-table .bg-white,\r\n.erp-table .\\\\!bg-white { background-color: var(--erp-bg) !important; }\r\n.erp-table .text-main-white { color: var(--erp-main-white); }\r\n.erp-table .text-main-black { color: var(--erp-main-black); }\r\n.erp-table .text-gray-gray3 { color: var(--erp-gray-3); }\r\n.erp-table .text-gray-gray7 { color: var(--erp-gray-7); }\r\n.erp-table .text-gray-gray9 { color: var(--erp-gray-9); }\r\n.erp-table .text-gray-gray10 { color: var(--erp-gray-10); }\r\n.erp-table .stroke-gray-gray3 { stroke: var(--erp-gray-3); }\r\n.erp-table .stroke-gray-gray6 { stroke: var(--erp-gray-6); }\r\n.erp-table .stroke-gray-gray10 { stroke: var(--erp-gray-10); }\r\n.erp-table .stroke-gray-gray85 { stroke: var(--erp-gray-85); }\r\n.erp-table .fill-gray-gray6 { fill: var(--erp-gray-6); }\r\n.erp-table .fill-gray-gray7 { fill: var(--erp-gray-7); }\r\n.erp-table .fill-gray-gray8 { fill: var(--erp-gray-8); }\r\n.erp-table .fill-gray-gray10 { fill: var(--erp-gray-10); }\r\n.erp-table .fill-white { fill: var(--erp-bg); }\r\n.erp-table .text-black-black6 { color: var(--erp-fg); }\r\n.erp-table .text-blue-blue6 { color: var(--erp-accent); }\r\n.erp-table .text-red-600 { color: var(--erp-danger); }\r\n.erp-table .text-neutral-500 { color: var(--erp-muted); }\r\n.erp-table .border-gray-gray5 { border-color: var(--erp-border); }\r\n.erp-table .border-gray-gray7,\r\n.erp-table .\\\\!border-gray-gray7 { border-color: var(--erp-gray-7) !important; }\r\n.erp-table .border-gray-gray8 { border-color: var(--erp-gray-8); }\r\n.erp-table .border-gray-gray5 { border-color: var(--erp-border); }\r\n.erp-table .\\\\!border-\\\\[0\\\\.4px\\\\] { border-width: 0.4px !important; }\r\n.erp-table .hover\\\\:bg-red-100:hover { background-color: var(--erp-red-100); }\r\n.erp-table .hover\\\\:bg-zinc-200:hover { background-color: var(--erp-zinc-200); }\r\n.erp-table .disabled\\\\:opacity-40:disabled { opacity: 0.4; }\r\n.erp-table .animate-spin { animation: erp-table-spin 0.8s linear infinite; }\r\n.erp-table .bg-yellow-400 { background-color: var(--erp-search-match); }\r\n.erp-table .bg-yellow-200 { background-color: var(--erp-search-other); }\r\n.erp-table mark.bg-yellow-400 { background-color: var(--erp-search-match); font-weight: 600; }\r\n.erp-table mark.bg-yellow-200 { background-color: var(--erp-search-other); }\r\n.erp-table mark.erp-search-hit {\r\n background-color: var(--erp-search-other);\r\n color: inherit;\r\n}\r\n.erp-table mark.erp-search-hit.is-current {\r\n background-color: var(--erp-search-match);\r\n font-weight: 600;\r\n}\r\n.erp-table tfoot.erp-table-footer tr {\r\n background-color: var(--erp-bg);\r\n border-color: var(--erp-border);\r\n color: var(--erp-fg);\r\n height: var(--erp-row-height);\r\n}\r\n.erp-table tfoot.erp-table-footer td {\r\n color: var(--erp-fg);\r\n font-variant-numeric: tabular-nums;\r\n}\r\n\r\n/* PR-116: pinned top/bottom rows — sticky within the scrollport */\r\n.erp-table tbody.erp-pinned-rows--top {\r\n position: sticky;\r\n top: var(--erp-pinned-top-offset, var(--erp-row-height, 40px));\r\n z-index: 15;\r\n}\r\n.erp-table tbody.erp-pinned-rows--top tr.erp-pinned-row {\r\n background-color: var(--pdg-bg, var(--erp-bg));\r\n box-shadow: 0 1px 0 var(--pdg-border, var(--erp-border));\r\n}\r\n.erp-table tbody.erp-pinned-rows--bottom {\r\n position: sticky;\r\n bottom: var(--erp-pinned-bottom-offset, 0px);\r\n z-index: 15;\r\n}\r\n.erp-table tbody.erp-pinned-rows--bottom tr.erp-pinned-row {\r\n background-color: var(--pdg-bg, var(--erp-bg));\r\n box-shadow: 0 -1px 0 var(--pdg-border, var(--erp-border));\r\n}\r\n.erp-table tbody.erp-pinned-rows td {\r\n background-color: inherit;\r\n font-variant-numeric: tabular-nums;\r\n}\r\n.erp-table tbody.erp-pinned-rows .erp-col-pin-start,\r\n.erp-table tbody.erp-pinned-rows .erp-col-pin-index,\r\n.erp-table tbody.erp-pinned-rows .erp-col-pin-end {\r\n z-index: 16;\r\n}\r\n\r\n.erp-table .hidden-show-scrollBar {\r\n scrollbar-width: thin;\r\n scrollbar-color: var(--erp-scrollbar) transparent;\r\n}\r\n.erp-table .hidden-show-scrollBar::-webkit-scrollbar {\r\n height: 6px;\r\n width: 6px;\r\n}\r\n.erp-table .hidden-show-scrollBar::-webkit-scrollbar-thumb {\r\n background: var(--erp-scrollbar);\r\n border-radius: 999px;\r\n}\r\n\r\n.erp-table .\\\\[overflow-anchor\\\\:none\\\\] { overflow-anchor: none; }\r\n\r\n.erp-table input,\r\n.erp-table select,\r\n.erp-table button {\r\n font-family: inherit;\r\n}\r\n\r\n.erp-table th,\r\n.erp-table td {\r\n vertical-align: middle;\r\n}\r\n\r\n@keyframes erp-table-spin {\r\n to { transform: rotate(360deg); }\r\n}\r\n\r\n/* Pagination (ERP antd look) */\r\n.erp-table-pagination {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n font-size: var(--erp-font-size);\r\n}\r\n.erp-table-pagination__pages {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n}\r\n.erp-table-pagination__page {\r\n min-width: 1.75rem;\r\n height: 1.75rem;\r\n padding: 0 0.4rem;\r\n border: 1px solid var(--erp-border);\r\n border-radius: var(--erp-radius);\r\n background: var(--erp-bg);\r\n cursor: pointer;\r\n}\r\n.erp-table-pagination__page.is-active {\r\n border-color: var(--erp-main-black);\r\n color: var(--erp-main-black);\r\n font-weight: 600;\r\n}\r\n.erp-table-pagination__page.is-active:hover {\r\n background: var(--erp-main-black);\r\n color: var(--erp-bg);\r\n}\r\n.erp-table-pagination__nav {\r\n display: inline-flex;\r\n margin: 0;\r\n padding: 0;\r\n border-radius: var(--erp-radius);\r\n width: fit-content;\r\n border: 1px solid var(--erp-border);\r\n background: var(--erp-bg);\r\n cursor: pointer;\r\n}\r\n.erp-table-pagination__nav:hover {\r\n border-color: var(--erp-main-black);\r\n}\r\n.erp-table-pagination__nav:disabled {\r\n opacity: 0.4;\r\n cursor: not-allowed;\r\n}\r\n.erp-table-pagination select {\r\n height: 1.75rem;\r\n min-width: 3.25rem;\r\n padding: 0 0.4rem;\r\n border: 1px solid var(--erp-border);\r\n border-radius: var(--erp-radius);\r\n background: var(--erp-bg);\r\n font-size: var(--erp-font-size);\r\n color: var(--erp-fg);\r\n cursor: pointer;\r\n}\r\n\r\n/* Modal */\r\n.erp-table-modal-overlay {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 11000;\r\n background: var(--erp-overlay);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 1rem;\r\n}\r\n\r\n/* Cell range selection (PR-105) */\r\n.pdg-cell-range {\r\n background: var(--pdg-range-bg, var(--erp-range-bg));\r\n}\r\n.pdg-cell-range[data-pdg-range-edge~='top'] {\r\n box-shadow: inset 0 2px 0 0 var(--pdg-range-border, var(--erp-range-border));\r\n}\r\n.pdg-cell-range[data-pdg-range-edge~='bottom'] {\r\n box-shadow: inset 0 -2px 0 0 var(--pdg-range-border, var(--erp-range-border));\r\n}\r\n.pdg-cell-range[data-pdg-range-edge~='left'] {\r\n box-shadow: inset 2px 0 0 0 var(--pdg-range-border, var(--erp-range-border));\r\n}\r\n.pdg-cell-range[data-pdg-range-edge~='right'] {\r\n box-shadow: inset -2px 0 0 0 var(--pdg-range-border, var(--erp-range-border));\r\n}\r\n\r\n/* Fill handle (PR-108) */\r\n.pdg-fill-handle {\r\n position: absolute;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 2;\r\n width: 7px;\r\n height: 7px;\r\n margin: 0;\r\n padding: 0;\r\n border: 1px solid var(--pdg-range-border, var(--erp-range-border));\r\n background: var(--pdg-accent, var(--erp-accent));\r\n cursor: crosshair;\r\n touch-action: none;\r\n}\r\n\r\n/* Grid body overlays (PR-103) */\r\n.pdg-overlay {\r\n position: absolute;\r\n inset: 0;\r\n z-index: 5;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n pointer-events: none;\r\n background: color-mix(in srgb, var(--pdg-bg, var(--erp-bg)) 82%, transparent);\r\n color: var(--pdg-fg, var(--erp-fg));\r\n}\r\n.pdg-overlay[data-pdg-overlay='loading'] {\r\n pointer-events: auto;\r\n}\r\n.pdg-overlay__panel {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 0.75rem;\r\n padding: 1rem 1.25rem;\r\n font-size: var(--pdg-font-size, var(--erp-font-size));\r\n color: var(--pdg-muted, var(--erp-muted, var(--pdg-gray-9)));\r\n}\r\n.pdg-row-skeleton {\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n height: 100%;\r\n min-height: calc(var(--pdg-row-height, 40px) - 8px);\r\n padding: 0 0.5rem;\r\n box-sizing: border-box;\r\n}\r\n.pdg-row-skeleton__bar {\r\n display: block;\r\n width: 70%;\r\n height: 0.55rem;\r\n border-radius: 999px;\r\n background: linear-gradient(\r\n 90deg,\r\n var(--pdg-gray-5) 0%,\r\n var(--pdg-gray-3) 45%,\r\n var(--pdg-gray-5) 90%\r\n );\r\n background-size: 200% 100%;\r\n animation: pdg-skeleton-shimmer 1.2s ease-in-out infinite;\r\n}\r\n.pdg-grid[data-erp-theme='dark'] .pdg-row-skeleton__bar {\r\n background: linear-gradient(\r\n 90deg,\r\n var(--pdg-gray-7) 0%,\r\n var(--pdg-gray-6) 45%,\r\n var(--pdg-gray-7) 90%\r\n );\r\n background-size: 200% 100%;\r\n}\r\n@keyframes pdg-skeleton-shimmer {\r\n 0% {\r\n background-position: 100% 0;\r\n }\r\n 100% {\r\n background-position: -100% 0;\r\n }\r\n}\r\n\r\n.erp-table-modal {\r\n background: var(--erp-bg);\r\n border-radius: 0.5rem;\r\n width: min(720px, 100%);\r\n max-height: 90vh;\r\n display: flex;\r\n flex-direction: column;\r\n box-shadow: 0 20px 48px rgba(10, 21, 64, 0.18);\r\n}\r\n.erp-table-modal__header {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n padding: 0.75rem 1rem;\r\n border-bottom: 1px solid var(--erp-border);\r\n font-size: 14px;\r\n}\r\n.erp-table-modal__body {\r\n padding: 0.5rem;\r\n overflow: auto;\r\n flex: 1;\r\n}\r\n.erp-table-modal__close {\r\n margin-inline-start: auto;\r\n border: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n font-size: 1.1rem;\r\n}\r\n\r\n/* Dropdown / tooltip / select */\r\n.erp-table-tooltip {\r\n position: absolute;\r\n z-index: 12000;\r\n background: var(--erp-black-6);\r\n color: var(--erp-bg);\r\n font-size: 11px;\r\n padding: 0.25rem 0.5rem;\r\n border-radius: var(--erp-radius);\r\n pointer-events: none;\r\n white-space: nowrap;\r\n}\r\n.erp-table-dropdown {\r\n position: absolute;\r\n z-index: 12000;\r\n background: var(--erp-bg);\r\n border: 1px solid var(--erp-border);\r\n border-radius: 0.375rem;\r\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);\r\n min-width: 10rem;\r\n max-height: 20rem;\r\n overflow: auto;\r\n padding: 0.25rem 0;\r\n}\r\n.erp-table-dropdown__item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 0.75rem;\r\n width: 100%;\r\n padding: 0.4rem 0.75rem;\r\n background: transparent;\r\n border: 0;\r\n cursor: pointer;\r\n font-size: 13px;\r\n text-align: start;\r\n}\r\n.erp-table-dropdown__item:hover { background: var(--erp-header-bg); }\r\n.erp-table-dropdown__divider {\r\n height: 1px;\r\n background: var(--erp-border);\r\n margin: 0.25rem 0;\r\n}\r\n\r\n\r\n/* DynamicSelect root (host: h-[2.125rem] w-full rounded !bg-gray-gray3, 50% when disabled) */\r\n.pdg-dynamic-select {\r\n width: 100%;\r\n height: 2.125rem;\r\n border-radius: 0.25rem;\r\n background-color: var(--pdg-gray-3);\r\n}\r\n.pdg-dynamic-select.is-disabled { opacity: 0.5; }\r\n\r\n/* Date cell (react-persian-range-picker DatePicker; host: h-[2.125rem] text-sm bg-gray-3 px-2 rounded-sm) */\r\n.pdg-date-picker {\r\n width: 100%;\r\n height: 2.125rem;\r\n padding: 0 0.5rem;\r\n font-size: 0.875rem;\r\n border: none;\r\n border-radius: 0.125rem;\r\n background-color: var(--pdg-gray-3);\r\n}\r\n.pdg-date-picker.is-disabled {\r\n background-color: var(--pdg-gray-5);\r\n color: var(--pdg-gray-7);\r\n}\r\n\r\n.erp-table-checkbox {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n width: 16px;\r\n height: 16px;\r\n min-width: 16px;\r\n margin: 0;\r\n border: 1px solid var(--erp-scrollbar);\r\n border-radius: 4px;\r\n background: var(--erp-bg);\r\n cursor: pointer;\r\n display: inline-block;\r\n position: relative;\r\n vertical-align: middle;\r\n flex-shrink: 0;\r\n}\r\n.erp-table-checkbox:checked {\r\n background: var(--erp-main-black);\r\n border-color: var(--erp-main-black);\r\n}\r\n.erp-table-checkbox:checked::after {\r\n content: '';\r\n position: absolute;\r\n inset-inline-start: 4px;\r\n top: 1px;\r\n width: 5px;\r\n height: 9px;\r\n border: 2px solid var(--erp-bg);\r\n border-top: 0;\r\n border-inline-start: 0;\r\n transform: rotate(45deg);\r\n}\r\n.erp-table-checkbox:disabled {\r\n opacity: 0.45;\r\n cursor: not-allowed;\r\n}\r\n\r\n.erp-table-toast {\r\n position: fixed;\r\n z-index: 14000;\r\n bottom: 1.25rem;\r\n inset-inline-end: 1.25rem;\r\n padding: 0.6rem 0.9rem;\r\n border-radius: 0.4rem;\r\n font-size: var(--erp-font-size);\r\n color: var(--erp-bg);\r\n box-shadow: 0 0 16px rgba(0, 0, 0, 0.1);\r\n}\r\n.erp-table-toast.is-success { background: var(--erp-success); }\r\n.erp-table-toast.is-error { background: var(--erp-error); }\r\n\r\n.erp-table-date {\r\n width: 100%;\r\n height: 100%;\r\n position: relative;\r\n}\r\n.erp-table-date .erp-table-select__control,\r\n.erp-table-date input,\r\n.erp-table-date .pdg-date-range__trigger {\r\n height: 2.25rem;\r\n width: 100%;\r\n background: var(--erp-header-bg);\r\n border: none;\r\n border-radius: 0.125rem;\r\n font-size: var(--erp-font-size);\r\n padding: 0 0.5rem;\r\n text-align: inherit;\r\n cursor: pointer;\r\n}\r\n\r\n/* Internal Jalali calendar / range picker (PR-140) */\r\n.pdg-date-range__popover {\r\n position: absolute;\r\n z-index: 40;\r\n top: calc(100% + 2px);\r\n inset-inline-start: 0;\r\n min-width: 16rem;\r\n padding: 0.5rem;\r\n background: var(--pdg-bg);\r\n border: 1px solid var(--pdg-border);\r\n border-radius: 0.375rem;\r\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);\r\n}\r\n.pdg-date-range__actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 0.35rem;\r\n}\r\n.pdg-date-range__clear {\r\n background: transparent;\r\n border: 0;\r\n font-size: 0.75rem;\r\n cursor: pointer;\r\n color: var(--pdg-accent);\r\n padding: 0.25rem 0.5rem;\r\n}\r\n.pdg-jalali-cal {\r\n font-size: 0.75rem;\r\n user-select: none;\r\n}\r\n.pdg-jalali-cal__header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 0.35rem;\r\n gap: 0.25rem;\r\n}\r\n.pdg-jalali-cal__title {\r\n font-weight: 600;\r\n flex: 1;\r\n text-align: center;\r\n}\r\n.pdg-jalali-cal__nav {\r\n border: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n width: 1.75rem;\r\n height: 1.75rem;\r\n border-radius: 0.25rem;\r\n font-size: 1rem;\r\n line-height: 1;\r\n color: var(--pdg-fg);\r\n}\r\n.pdg-jalali-cal__nav:hover {\r\n background: var(--pdg-row-stripe);\r\n}\r\n.pdg-jalali-cal__weekdays,\r\n.pdg-jalali-cal__grid {\r\n display: grid;\r\n grid-template-columns: repeat(7, 1fr);\r\n gap: 2px;\r\n}\r\n.pdg-jalali-cal__wd {\r\n text-align: center;\r\n opacity: 0.65;\r\n padding: 0.15rem 0;\r\n}\r\n.pdg-jalali-cal__day {\r\n border: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n aspect-ratio: 1;\r\n border-radius: 0.25rem;\r\n font-size: 0.75rem;\r\n color: var(--pdg-fg);\r\n}\r\n.pdg-jalali-cal__day.is-outside {\r\n opacity: 0.35;\r\n}\r\n.pdg-jalali-cal__day.is-holiday:not(.is-selected) {\r\n color: var(--pdg-danger);\r\n font-weight: 600;\r\n}\r\n.pdg-jalali-cal__day.is-today:not(.is-selected) {\r\n outline: 1px solid var(--pdg-accent);\r\n}\r\n.pdg-jalali-cal__day:hover:not(.is-selected) {\r\n background: var(--pdg-row-stripe);\r\n}\r\n\r\n.erp-table-desktop__toolbar {\r\n padding: 0.5rem 0.25rem 0.35rem;\r\n}\r\n\r\n.erp-table-index-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: transparent;\r\n border: 0;\r\n padding: 0.125rem;\r\n border-radius: 0.125rem;\r\n cursor: pointer;\r\n line-height: 0;\r\n}\r\n\r\n.erp-table th[data-pdg-sortable='true'] {\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.erp-table .pdg-header-label {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.35rem;\r\n min-width: 0;\r\n max-width: calc(100% - 0.5rem);\r\n}\r\n\r\n.erp-table .pdg-header-caption {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.erp-table .pdg-sort-indicator {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.15rem;\r\n flex-shrink: 0;\r\n color: var(--pdg-accent, var(--erp-accent));\r\n font-size: 0.65rem;\r\n line-height: 1;\r\n}\r\n\r\n.erp-table .pdg-sort-icon {\r\n opacity: 0.9;\r\n}\r\n\r\n.erp-table .pdg-sort-priority {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-inline-size: 0.9rem;\r\n padding-inline: 0.15rem;\r\n border-radius: 0.2rem;\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 18%, transparent);\r\n color: var(--pdg-accent, var(--erp-accent));\r\n font-size: 0.6rem;\r\n font-weight: 600;\r\n}\r\n\r\n.erp-table .pdg-filter-btn-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-inline-start: 0.15rem;\r\n padding: 0.05rem 0.2rem;\r\n border: 0;\r\n border-radius: 0.2rem;\r\n background: transparent;\r\n color: var(--pdg-fg-muted, var(--erp-fg-muted));\r\n font-size: 0.55rem;\r\n line-height: 1;\r\n cursor: pointer;\r\n}\r\n\r\n.erp-table .pdg-filter-btn-icon.is-active,\r\n.erp-table th[data-pdg-filter-active='true'] .pdg-filter-btn-icon {\r\n color: var(--pdg-accent, var(--erp-accent));\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 16%, transparent);\r\n}\r\n\r\n.pdg-filter-popover {\r\n min-width: 12rem;\r\n max-width: 18rem;\r\n padding: 0.5rem;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 0.375rem;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: var(--pdg-fg, var(--erp-fg));\r\n box-shadow: 0 8px 24px color-mix(in srgb, var(--pdg-fg, var(--erp-fg)) 18%, transparent);\r\n}\r\n\r\n.pdg-filter-form {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.4rem;\r\n}\r\n\r\n.pdg-filter-select,\r\n.pdg-filter-input,\r\n.pdg-floating-filter-input {\r\n width: 100%;\r\n min-height: 1.75rem;\r\n padding: 0.2rem 0.35rem;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 0.25rem;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: inherit;\r\n font-size: 0.75rem;\r\n}\r\n\r\n.pdg-filter-actions {\r\n display: flex;\r\n gap: 0.35rem;\r\n justify-content: flex-end;\r\n}\r\n\r\n.pdg-filter-btn {\r\n padding: 0.2rem 0.45rem;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 0.25rem;\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 12%, transparent);\r\n color: inherit;\r\n font-size: 0.7rem;\r\n cursor: pointer;\r\n}\r\n\r\n.pdg-filter-check {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.35rem;\r\n font-size: 0.75rem;\r\n}\r\n\r\n.pdg-filter-set-list {\r\n max-height: 10rem;\r\n overflow: auto;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.25rem;\r\n}\r\n\r\n.erp-table .pdg-floating-filter-row {\r\n background: var(--pdg-bg-muted, var(--erp-bg-muted));\r\n}\r\n\r\n.erp-table .pdg-floating-filter-cell {\r\n padding: 0.25rem;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n font-weight: normal;\r\n}\r\n\r\n.erp-table .erp-col-resize {\r\n position: absolute;\r\n inset-block: 0;\r\n inset-inline-end: 0;\r\n width: 6px;\r\n padding: 0;\r\n margin: 0;\r\n border: 0;\r\n background: transparent;\r\n cursor: col-resize;\r\n touch-action: none;\r\n z-index: 2;\r\n}\r\n\r\n.erp-table .erp-col-resize:hover,\r\n.erp-table .erp-col-resize:focus-visible {\r\n background: var(--erp-accent);\r\n opacity: 0.35;\r\n}\r\n\r\nbody.erp-col-resizing,\r\nbody.erp-col-resizing * {\r\n cursor: col-resize;\r\n user-select: none;\r\n}\r\n\r\n.erp-table th[data-erp-col-drag] {\r\n cursor: grab;\r\n}\r\n\r\n.erp-table th[data-erp-col-drop] {\r\n box-shadow: inset 0 0 0 2px var(--erp-accent);\r\n}\r\n\r\n.erp-table .erp-col-group-header {\r\n font-weight: 600;\r\n vertical-align: middle;\r\n}\r\n\r\n.erp-table .erp-col-group-toggle {\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n font: inherit;\r\n color: inherit;\r\n padding: 0;\r\n}\r\n\r\n.pdg-col-menu-btn {\r\n margin-inline-start: 0.25rem;\r\n padding: 0 0.25rem;\r\n border: none;\r\n background: transparent;\r\n cursor: pointer;\r\n font-size: 0.875rem;\r\n line-height: 1;\r\n color: var(--pdg-muted, var(--erp-muted));\r\n}\r\n\r\n.pdg-col-menu-btn:hover {\r\n color: var(--pdg-accent, inherit);\r\n}\r\n\r\n.erp-col-menu {\r\n min-width: 11rem;\r\n padding: 0.25rem 0;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 0.375rem;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: var(--pdg-fg, var(--erp-fg));\r\n box-shadow: 0 8px 24px color-mix(in srgb, var(--pdg-fg, var(--erp-fg)) 18%, transparent);\r\n}\r\n\r\n.erp-col-menu__item {\r\n display: block;\r\n width: 100%;\r\n padding: 0.375rem 0.75rem;\r\n border: none;\r\n background: transparent;\r\n text-align: start;\r\n font: inherit;\r\n font-size: 0.75rem;\r\n cursor: pointer;\r\n color: inherit;\r\n}\r\n\r\n.erp-col-menu__item:hover,\r\n.erp-col-menu__item.is-focused {\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 12%, transparent);\r\n}\r\n\r\n.erp-col-menu__item:disabled {\r\n opacity: 0.45;\r\n cursor: not-allowed;\r\n}\r\n\r\n.erp-col-menu__separator {\r\n height: 1px;\r\n margin: 0.25rem 0;\r\n background: var(--pdg-border, var(--erp-border));\r\n}\r\n\r\n.erp-col-columns-panel__title {\r\n padding: 0.375rem 0.75rem;\r\n font-size: 0.75rem;\r\n font-weight: 600;\r\n border-bottom: 1px solid var(--pdg-border, var(--erp-border));\r\n}\r\n\r\n.erp-col-columns-panel__list {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0.25rem 0;\r\n max-height: 16rem;\r\n overflow: auto;\r\n}\r\n\r\n.erp-col-columns-panel__row {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n padding: 0.25rem 0.75rem;\r\n font-size: 0.75rem;\r\n cursor: pointer;\r\n}\r\n\r\n.erp-col-columns-panel__row:hover {\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 12%, transparent);\r\n}\r\n\r\n.erp-table .erp-col-pin-start,\r\n.erp-table .erp-col-pin-index {\r\n position: sticky;\r\n z-index: 2;\r\n background-color: inherit;\r\n}\r\n\r\n.erp-table .erp-col-pin-end {\r\n position: sticky;\r\n z-index: 2;\r\n background-color: inherit;\r\n}\r\n\r\n.erp-table thead .erp-col-pin-start,\r\n.erp-table thead .erp-col-pin-index,\r\n.erp-table thead .erp-col-pin-end {\r\n z-index: 4;\r\n background-color: var(--erp-header-bg);\r\n}\r\n\r\n.erp-table tfoot .erp-col-pin-start,\r\n.erp-table tfoot .erp-col-pin-index,\r\n.erp-table tfoot .erp-col-pin-end {\r\n z-index: 3;\r\n background-color: var(--erp-bg);\r\n}\r\n\r\n.erp-table[dir=\"ltr\"] .erp-col-pin-start,\r\n.erp-table[dir=\"ltr\"] .erp-col-pin-index {\r\n box-shadow: 4px 0 8px -6px rgb(0 0 0 / 0.22);\r\n}\r\n\r\n.erp-table[dir=\"rtl\"] .erp-col-pin-start,\r\n.erp-table[dir=\"rtl\"] .erp-col-pin-index {\r\n box-shadow: -4px 0 8px -6px rgb(0 0 0 / 0.22);\r\n}\r\n\r\n.erp-table[dir=\"ltr\"] .erp-col-pin-end {\r\n box-shadow: -4px 0 8px -6px rgb(0 0 0 / 0.22);\r\n}\r\n\r\n.erp-table[dir=\"rtl\"] .erp-col-pin-end {\r\n box-shadow: 4px 0 8px -6px rgb(0 0 0 / 0.22);\r\n}\r\n\r\n.erp-table .erp-toolbar-btn:focus-visible {\r\n outline: 2px solid var(--erp-accent);\r\n outline-offset: 2px;\r\n}\r\n\r\n/* PR-124: cell editors expose a visible focus ring (APG). */\r\n.erp-table .pdg-cell-editor:focus-visible,\r\n.pdg-grid .pdg-cell-editor:focus-visible {\r\n outline: 2px solid var(--pdg-accent, var(--erp-accent));\r\n outline-offset: 1px;\r\n}\r\n\r\n/* PR-125: polite announcements for AT; keep out of visual layout. */\r\n.pdg-live-region {\r\n position: absolute;\r\n width: 1px;\r\n height: 1px;\r\n padding: 0;\r\n margin: -1px;\r\n overflow: hidden;\r\n clip: rect(0, 0, 0, 0);\r\n white-space: nowrap;\r\n border: 0;\r\n}\r\n\r\n/* PR-136: product audit history panel */\r\n.pdg-history-panel {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n min-width: 220px;\r\n max-width: 360px;\r\n max-height: 100%;\r\n padding: 10px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 6px;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: var(--pdg-fg, var(--erp-fg));\r\n font-size: 12px;\r\n box-sizing: border-box;\r\n}\r\n.pdg-history-panel__header {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n}\r\n.pdg-history-panel__title {\r\n margin: 0;\r\n font-size: 14px;\r\n font-weight: 600;\r\n}\r\n.pdg-history-panel__filters {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 6px;\r\n}\r\n.pdg-history-panel__filter {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n}\r\n.pdg-history-panel__filter select {\r\n font: inherit;\r\n padding: 4px 6px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 4px;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: inherit;\r\n}\r\n.pdg-history-panel__empty {\r\n margin: 0;\r\n opacity: 0.7;\r\n}\r\n.pdg-history-panel__list {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n overflow: auto;\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n}\r\n.pdg-history-panel__item {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 4px;\r\n padding: 6px;\r\n background: var(--pdg-bg-muted, var(--erp-bg-muted));\r\n}\r\n.pdg-history-panel__item[data-pdg-history-severity='warning'] {\r\n border-color: var(--pdg-warning, var(--erp-warning, var(--erp-accent)));\r\n}\r\n.pdg-history-panel__item[data-pdg-history-severity='error'] {\r\n border-color: var(--pdg-danger, var(--erp-danger));\r\n}\r\n.pdg-history-panel__jump {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n align-items: flex-start;\r\n width: 100%;\r\n padding: 0;\r\n border: 0;\r\n background: transparent;\r\n color: inherit;\r\n text-align: inherit;\r\n font: inherit;\r\n cursor: pointer;\r\n}\r\n.pdg-history-panel__jump:disabled {\r\n cursor: default;\r\n opacity: 0.85;\r\n}\r\n.pdg-history-panel__jump:not(:disabled):hover .pdg-history-panel__item-title {\r\n color: var(--pdg-accent, var(--erp-accent));\r\n}\r\n.pdg-history-panel__item-title {\r\n font-weight: 600;\r\n}\r\n.pdg-history-panel__item-meta {\r\n opacity: 0.65;\r\n font-size: 11px;\r\n}\r\n.pdg-history-panel__item-desc {\r\n opacity: 0.85;\r\n}\r\n.pdg-history-panel__restore {\r\n align-self: flex-start;\r\n font: inherit;\r\n font-size: 11px;\r\n padding: 3px 8px;\r\n border-radius: 4px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: var(--pdg-accent, var(--erp-accent));\r\n cursor: pointer;\r\n}\r\n.pdg-history-panel__restore:hover {\r\n border-color: var(--pdg-accent, var(--erp-accent));\r\n}\r\n\r\n/* PR-137: offline / pending mutations status */\r\n.pdg-offline-status {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n padding: 8px 10px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 6px;\r\n background: var(--pdg-bg-muted, var(--erp-bg-muted));\r\n color: var(--pdg-fg, var(--erp-fg));\r\n font-size: 12px;\r\n}\r\n.pdg-offline-status[data-pdg-connectivity='offline'] {\r\n border-color: var(--pdg-warning, var(--erp-warning, var(--erp-accent)));\r\n}\r\n.pdg-offline-status__row {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n.pdg-offline-status__badge {\r\n display: inline-flex;\r\n align-items: center;\r\n padding: 2px 8px;\r\n border-radius: 999px;\r\n font-weight: 600;\r\n font-size: 11px;\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 16%, transparent);\r\n}\r\n.pdg-offline-status[data-pdg-connectivity='offline'] .pdg-offline-status__badge {\r\n background: color-mix(\r\n in srgb,\r\n var(--pdg-warning, var(--erp-warning, var(--erp-accent))) 22%,\r\n transparent\r\n );\r\n}\r\n.pdg-offline-status__pending {\r\n opacity: 0.9;\r\n}\r\n.pdg-offline-status__queue {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n max-height: 8rem;\r\n overflow: auto;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n}\r\n.pdg-offline-status__queue li {\r\n padding: 4px 6px;\r\n border-radius: 4px;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n}\r\n\r\n.pdg-sync-panel {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n padding: 8px 10px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 6px;\r\n background: var(--pdg-surface, var(--erp-surface));\r\n color: var(--pdg-text, var(--erp-text));\r\n font-size: 0.875rem;\r\n}\r\n.pdg-sync-panel__row {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n.pdg-sync-panel__policy {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n}\r\n.pdg-sync-panel__policy select,\r\n.pdg-sync-panel button {\r\n font: inherit;\r\n color: inherit;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 4px;\r\n padding: 4px 8px;\r\n cursor: pointer;\r\n}\r\n.pdg-sync-panel button:disabled,\r\n.pdg-sync-panel select:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n}\r\n.pdg-sync-panel__status {\r\n margin: 0;\r\n opacity: 0.85;\r\n}\r\n.pdg-sync-panel__conflicts {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n}\r\n.pdg-sync-panel__conflicts li {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n align-items: center;\r\n padding: 6px 8px;\r\n border-radius: 4px;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n}\r\n.pdg-sync-panel__conflict-key {\r\n font-weight: 600;\r\n color: var(--pdg-accent, var(--erp-accent));\r\n}\r\n.pdg-sync-panel__conflict-actions {\r\n display: flex;\r\n gap: 6px;\r\n margin-inline-start: auto;\r\n}\r\n\r\n.pdg-presence-panel {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n padding: 8px 10px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 6px;\r\n background: var(--pdg-surface, var(--erp-surface));\r\n color: var(--pdg-text, var(--erp-text));\r\n font-size: 0.875rem;\r\n}\r\n.pdg-presence-panel__title {\r\n font-weight: 600;\r\n}\r\n.pdg-presence-panel__empty {\r\n margin: 0;\r\n opacity: 0.75;\r\n}\r\n.pdg-presence-panel__list {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n}\r\n.pdg-presence-panel__list li {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n.pdg-presence-panel__dot {\r\n width: 8px;\r\n height: 8px;\r\n border-radius: 50%;\r\n flex-shrink: 0;\r\n}\r\n.pdg-presence-panel__cell {\r\n opacity: 0.8;\r\n margin-inline-start: auto;\r\n}\r\n\r\n`;\n\nexport function injectGridStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const el = document.createElement('style');\n el.id = STYLE_ID;\n el.textContent = CSS;\n document.head.appendChild(el);\n}\n\n/** @deprecated Use `injectGridStyles()` (PR-77 / D16). */\nexport function injectERPTableStyles(): void {\n injectGridStyles();\n}\n","'use client';\r\n\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\n\r\nimport type {\r\n HistoryCategory,\r\n HistoryItem,\r\n HistorySeverity,\r\n} from '../../infrastructure/history/HistoryPanelViewModel';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useTranslations } from '../host';\r\nimport { revealRow } from '../gridSearch/utils';\r\n\r\nexport type GridHistoryPanelProps = {\r\n controller: UITableController;\r\n /** Max timeline rows (newest last in the ViewModel; we reverse for display). */\r\n limit?: number;\r\n className?: string;\r\n /** Fires after jump-to-cell (for hosts that want to close a drawer). */\r\n onNavigate?: (item: HistoryItem) => void;\r\n};\r\n\r\nfunction payloadCell(\r\n item: HistoryItem,\r\n): { rowId: number; columnId: string } | null {\r\n const payload = item.raw.payload as Record<string, unknown> | null;\r\n if (!payload) return null;\r\n const rowRaw = payload.rowId;\r\n const columnId = payload.columnId;\r\n if (typeof columnId !== 'string' || columnId.length === 0) return null;\r\n const rowId =\r\n typeof rowRaw === 'number'\r\n ? rowRaw\r\n : typeof rowRaw === 'string'\r\n ? Number(rowRaw)\r\n : NaN;\r\n if (!Number.isFinite(rowId)) return null;\r\n return { rowId, columnId };\r\n}\r\n\r\nfunction canRestore(item: HistoryItem): boolean {\r\n if (item.type !== 'CELL_CHANGED') return false;\r\n const payload = item.raw.payload as Record<string, unknown> | null;\r\n return Boolean(payload && 'previousValue' in payload && payloadCell(item));\r\n}\r\n\r\nfunction formatWhen(ts: number, locale: string): string {\r\n try {\r\n return new Intl.DateTimeFormat(locale, {\r\n dateStyle: 'short',\r\n timeStyle: 'medium',\r\n }).format(new Date(ts));\r\n } catch {\r\n return new Date(ts).toISOString();\r\n }\r\n}\r\n\r\nconst SEVERITIES: Array<HistorySeverity | ''> = [\r\n '',\r\n 'info',\r\n 'warning',\r\n 'error',\r\n];\r\nconst CATEGORIES: Array<HistoryCategory | ''> = [\r\n '',\r\n 'data',\r\n 'structure',\r\n 'view',\r\n 'system',\r\n];\r\n\r\n/**\r\n * Product audit timeline (PR-136). Subscribes to `HistoryPanelViewModel`\r\n * via the controller; jump focuses a cell; restore writes previousValue.\r\n */\r\nexport function GridHistoryPanel({\r\n controller,\r\n limit = 100,\r\n className,\r\n onNavigate,\r\n}: GridHistoryPanelProps) {\r\n const t = useTranslations();\r\n const [items, setItems] = useState<HistoryItem[]>([]);\r\n const [severity, setSeverity] = useState<HistorySeverity | ''>('');\r\n const [category, setCategory] = useState<HistoryCategory | ''>('');\r\n\r\n const filter = useMemo(\r\n () => ({\r\n ...(severity ? { severity } : {}),\r\n ...(category ? { category } : {}),\r\n limit,\r\n }),\r\n [severity, category, limit],\r\n );\r\n\r\n useEffect(() => {\r\n setItems(controller.getHistoryItems(filter));\r\n return controller.subscribeHistoryItems(setItems, filter);\r\n }, [controller, filter]);\r\n\r\n const timeline = useMemo(() => [...items].reverse(), [items]);\r\n\r\n const jumpTo = async (item: HistoryItem) => {\r\n const cell = payloadCell(item);\r\n if (!cell) return;\r\n await revealRow(controller, cell.rowId);\r\n await controller.dispatch({\r\n type: 'UI_ACTIVE_CELL',\r\n rowId: cell.rowId,\r\n columnId: cell.columnId,\r\n });\r\n onNavigate?.(item);\r\n };\r\n\r\n const restore = async (item: HistoryItem) => {\r\n const cell = payloadCell(item);\r\n const payload = item.raw.payload as Record<string, unknown> | null;\r\n if (!cell || !payload || !('previousValue' in payload)) return;\r\n // Ensure we write through (not a session draft patch).\r\n controller.cancelCellEdit();\r\n await controller.dispatch({\r\n type: 'UI_CELL_CHANGE',\r\n rowId: cell.rowId,\r\n columnId: cell.columnId,\r\n value: payload.previousValue,\r\n });\r\n await jumpTo(item);\r\n };\r\n\r\n return (\r\n <aside\r\n className={['pdg-history-panel', className].filter(Boolean).join(' ')}\r\n data-pdg-history-panel=\"\"\r\n aria-label={t('history.title')}\r\n >\r\n <header className=\"pdg-history-panel__header\">\r\n <h2 className=\"pdg-history-panel__title\">{t('history.title')}</h2>\r\n <div className=\"pdg-history-panel__filters\">\r\n <label className=\"pdg-history-panel__filter\">\r\n <span>{t('history.severity')}</span>\r\n <select\r\n data-pdg-history-severity=\"\"\r\n value={severity}\r\n onChange={(e) =>\r\n setSeverity(e.target.value as HistorySeverity | '')\r\n }\r\n >\r\n {SEVERITIES.map((s) => (\r\n <option key={s || 'all'} value={s}>\r\n {s ? t(`history.severity.${s}`) : t('history.filterAll')}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n <label className=\"pdg-history-panel__filter\">\r\n <span>{t('history.category')}</span>\r\n <select\r\n data-pdg-history-category=\"\"\r\n value={category}\r\n onChange={(e) =>\r\n setCategory(e.target.value as HistoryCategory | '')\r\n }\r\n >\r\n {CATEGORIES.map((c) => (\r\n <option key={c || 'all'} value={c}>\r\n {c ? t(`history.category.${c}`) : t('history.filterAll')}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n </div>\r\n </header>\r\n\r\n {timeline.length === 0 ? (\r\n <p className=\"pdg-history-panel__empty\" data-pdg-history-empty=\"\">\r\n {t('history.empty')}\r\n </p>\r\n ) : (\r\n <ol className=\"pdg-history-panel__list\" data-pdg-history-list=\"\">\r\n {timeline.map((item) => {\r\n const cell = payloadCell(item);\r\n return (\r\n <li\r\n key={item.id}\r\n className=\"pdg-history-panel__item\"\r\n data-pdg-history-item={item.id}\r\n data-pdg-history-type={item.type}\r\n data-pdg-history-severity={item.severity}\r\n data-pdg-history-category={item.category}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"pdg-history-panel__jump\"\r\n data-pdg-history-jump=\"\"\r\n disabled={!cell}\r\n onClick={() => void jumpTo(item)}\r\n >\r\n <span className=\"pdg-history-panel__item-title\">\r\n {item.title}\r\n </span>\r\n <span className=\"pdg-history-panel__item-meta\">\r\n {item.actorId} · {formatWhen(item.occurredAt, 'en')}\r\n </span>\r\n <span className=\"pdg-history-panel__item-desc\">\r\n {item.description}\r\n </span>\r\n </button>\r\n {canRestore(item) ? (\r\n <button\r\n type=\"button\"\r\n className=\"pdg-history-panel__restore\"\r\n data-pdg-history-restore=\"\"\r\n onClick={() => void restore(item)}\r\n >\r\n {t('history.restore')}\r\n </button>\r\n ) : null}\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n )}\r\n </aside>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport type {\r\n Connectivity,\r\n PendingChange,\r\n} from '../../application/offline/OfflineStatus';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useTranslations } from '../host';\r\n\r\nexport type GridOfflineStatusProps = {\r\n controller: UITableController;\r\n className?: string;\r\n /** Show the pending mutation list (default true). */\r\n showQueue?: boolean;\r\n};\r\n\r\n/**\r\n * Online/offline badge + pending local mutations (PR-137).\r\n */\r\nexport function GridOfflineStatus({\r\n controller,\r\n className,\r\n showQueue = true,\r\n}: GridOfflineStatusProps) {\r\n const t = useTranslations();\r\n const [connectivity, setConnectivity] = useState<Connectivity>(() =>\r\n controller.getConnectivity(),\r\n );\r\n const [pending, setPending] = useState<readonly PendingChange[]>(() =>\r\n controller.getPendingChanges(),\r\n );\r\n\r\n useEffect(() => {\r\n const unsubConn = controller.subscribeConnectivity(setConnectivity);\r\n const unsubPending = controller.subscribePendingChanges(setPending);\r\n return () => {\r\n unsubConn();\r\n unsubPending();\r\n };\r\n }, [controller]);\r\n\r\n const count = pending.length;\r\n const pendingLabel =\r\n count === 0\r\n ? t('offline.pendingEmpty')\r\n : t('offline.pendingCount', { count });\r\n\r\n return (\r\n <aside\r\n className={['pdg-offline-status', className].filter(Boolean).join(' ')}\r\n data-pdg-offline-status=\"\"\r\n data-pdg-connectivity={connectivity}\r\n aria-live=\"polite\"\r\n >\r\n <div className=\"pdg-offline-status__row\">\r\n <span\r\n className=\"pdg-offline-status__badge\"\r\n data-pdg-offline-badge=\"\"\r\n >\r\n {connectivity === 'online'\r\n ? t('offline.online')\r\n : t('offline.offline')}\r\n </span>\r\n <span\r\n className=\"pdg-offline-status__pending\"\r\n data-pdg-offline-pending-count={count}\r\n >\r\n {pendingLabel}\r\n </span>\r\n </div>\r\n {showQueue && count > 0 ? (\r\n <ol className=\"pdg-offline-status__queue\" data-pdg-offline-queue=\"\">\r\n {pending.map((item) => (\r\n <li\r\n key={item.eventId}\r\n data-pdg-offline-queue-item={item.eventId}\r\n data-pdg-offline-queue-type={item.type}\r\n >\r\n {item.summary}\r\n </li>\r\n ))}\r\n </ol>\r\n ) : null}\r\n </aside>\r\n );\r\n}\r\n","export type BenchmarkSample = {\r\n readonly name: string;\r\n readonly iterations: number;\r\n readonly totalMs: number;\r\n readonly avgMs: number;\r\n readonly maxMs: number;\r\n};\r\n\r\nexport type PerformanceBudget = {\r\n readonly name: string;\r\n /** Maximum allowed average milliseconds per iteration. */\r\n readonly maxAvgMs: number;\r\n /** Maximum allowed single-iteration milliseconds. */\r\n readonly maxMaxMs?: number;\r\n};\r\n\r\nexport type BenchmarkResult = {\r\n readonly sample: BenchmarkSample;\r\n readonly budget: PerformanceBudget;\r\n readonly ok: boolean;\r\n readonly reasons: string[];\r\n};\r\n\r\n/**\r\n * Tiny synchronous/async micro-benchmark helper for core hot paths.\r\n * Not a substitute for browser profiling — guards CI regressions.\r\n */\r\nexport async function runBenchmark(\r\n name: string,\r\n iterations: number,\r\n fn: () => void | Promise<void>,\r\n): Promise<BenchmarkSample> {\r\n // Warmup\r\n await fn();\r\n\r\n let totalMs = 0;\r\n let maxMs = 0;\r\n for (let i = 0; i < iterations; i += 1) {\r\n const start = performance.now();\r\n await fn();\r\n const elapsed = performance.now() - start;\r\n totalMs += elapsed;\r\n if (elapsed > maxMs) maxMs = elapsed;\r\n }\r\n\r\n return {\r\n name,\r\n iterations,\r\n totalMs,\r\n avgMs: totalMs / iterations,\r\n maxMs,\r\n };\r\n}\r\n\r\nexport function checkBudget(\r\n sample: BenchmarkSample,\r\n budget: PerformanceBudget,\r\n): BenchmarkResult {\r\n const reasons: string[] = [];\r\n if (sample.avgMs > budget.maxAvgMs) {\r\n reasons.push(\r\n `avg ${sample.avgMs.toFixed(3)}ms exceeds budget ${budget.maxAvgMs}ms`,\r\n );\r\n }\r\n if (budget.maxMaxMs != null && sample.maxMs > budget.maxMaxMs) {\r\n reasons.push(\r\n `max ${sample.maxMs.toFixed(3)}ms exceeds budget ${budget.maxMaxMs}ms`,\r\n );\r\n }\r\n return {\r\n sample,\r\n budget,\r\n ok: reasons.length === 0,\r\n reasons,\r\n };\r\n}\r\n\r\n/** Default budgets for Phase 4 CI guards (generous for CI variance). */\r\nexport const DEFAULT_PERFORMANCE_BUDGETS = {\r\n inMemoryAppend100: {\r\n name: 'inMemoryAppend100',\r\n maxAvgMs: 25,\r\n maxMaxMs: 80,\r\n },\r\n indexedDbAppend100: {\r\n name: 'indexedDbAppend100',\r\n maxAvgMs: 80,\r\n maxMaxMs: 200,\r\n },\r\n selectorNotifyNoop: {\r\n name: 'selectorNotifyNoop',\r\n maxAvgMs: 5,\r\n maxMaxMs: 20,\r\n },\r\n /** PR-99: one arrow-key neighbor lookup on a 100k SparseRowIndex. */\r\n arrowNeighbor100k: {\r\n name: 'arrowNeighbor100k',\r\n maxAvgMs: 2,\r\n // Single-iteration spikes from GC under the 100k harness (PR-100).\r\n maxMaxMs: 20,\r\n },\r\n} as const satisfies Record<string, PerformanceBudget>;\r\n","\"use client\";\r\n\r\nimport React, { useCallback, useRef } from 'react';\r\n\r\nimport type { GridSession } from '../../application/session/GridSession';\r\nimport { useVirtualWindow } from './useVirtualWindow';\r\n\r\nexport type VirtualListProps<T> = {\r\n session: GridSession;\r\n items: readonly T[];\r\n /** Scrollport height in pixels. */\r\n height: number;\r\n rowHeight?: number;\r\n overscan?: number;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n getItemKey?: (item: T, absoluteIndex: number) => string | number;\r\n renderItem: (item: T, absoluteIndex: number) => React.ReactNode;\r\n};\r\n\r\n/**\r\n * Thin React adapter for Core ViewportCalculator.\r\n * Renders spacers + absolute-positioned visible rows only.\r\n */\r\nexport function VirtualList<T>({\r\n session,\r\n items,\r\n height,\r\n rowHeight = 40,\r\n overscan = 2,\r\n className,\r\n style,\r\n getItemKey,\r\n renderItem,\r\n}: VirtualListProps<T>) {\r\n const scrollerRef = useRef<HTMLDivElement>(null);\r\n const {\r\n visibleItems,\r\n absoluteIndices,\r\n spacerTop,\r\n spacerBottom,\r\n totalHeight,\r\n onScroll,\r\n } = useVirtualWindow(session, items, {\r\n rowHeight,\r\n overscan,\r\n initialViewportSize: height,\r\n });\r\n\r\n // Keep session viewportSize aligned with the scrollport height.\r\n React.useEffect(() => {\r\n void session.dispatchViewIntent({\r\n type: 'CHANGE_VIEWPORT',\r\n scrollOffset: session.getViewport().scrollOffset,\r\n viewportSize: height,\r\n rowHeight,\r\n overscan,\r\n });\r\n }, [session, height, rowHeight, overscan]);\r\n\r\n const handleScroll = useCallback(\r\n (event: React.UIEvent<HTMLDivElement>) => {\r\n const el = event.currentTarget;\r\n onScroll(el.scrollTop, el.clientHeight);\r\n },\r\n [onScroll],\r\n );\r\n\r\n return (\r\n <div\r\n ref={scrollerRef}\r\n data-erp-virtual-list\r\n className={className}\r\n style={{\r\n height,\r\n overflow: 'auto',\r\n position: 'relative',\r\n ...style,\r\n }}\r\n onScroll={handleScroll}\r\n >\r\n <div style={{ height: totalHeight, position: 'relative' }}>\r\n <div style={{ height: spacerTop }} aria-hidden />\r\n {visibleItems.map((item, i) => {\r\n const absoluteIndex = absoluteIndices[i] ?? i;\r\n const key = getItemKey\r\n ? getItemKey(item, absoluteIndex)\r\n : absoluteIndex;\r\n return (\r\n <div\r\n key={key}\r\n data-erp-virtual-row={absoluteIndex}\r\n style={{\r\n height: rowHeight,\r\n boxSizing: 'border-box',\r\n }}\r\n >\r\n {renderItem(item, absoluteIndex)}\r\n </div>\r\n );\r\n })}\r\n <div style={{ height: spacerBottom }} aria-hidden />\r\n </div>\r\n </div>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../ui/hooks/useEngineSelector.ts","../ui/gridSearch/scrollToMatch.ts","../ui/hooks/useScrollToSearchMatch.ts","../ui/a11y/liveAnnouncements.ts","../ui/a11y/GridLiveRegion.tsx","../ui/primitives/chrome.tsx","../ui/primitives/Dropdown.tsx","../ui/primitives/Select.tsx","../ui/primitives/icons.tsx","../ui/primitives/Pagination.tsx","../ui/primitives/DatePicker.tsx","../ui/desktop/FillHandle.tsx","../ui/helper.ts","../ui/gridSearch/highlightText.tsx","../ui/cellRenderer/cellRenderContext.ts","../ui/cellRenderer/TextAreaCell.tsx","../ui/cellRenderer/cellRegistry.ts","../ui/cellRenderer/descriptionComponent/index.tsx","../ui/cellRenderer/ERPTableDynamicSelect.tsx","../ui/cellRenderer/index.tsx","../ui/desktop/indexCol.tsx","../ui/desktop/eRPTableRow.tsx","../ui/desktop/ERPTableBody.tsx","../ui/desktop/ERPTableFooter.tsx","../engine/columnReorder.ts","../engine/dataOps/columnMenu.ts","../ui/hooks/useRevalidateRevision.ts","../ui/gridSearch/utils.ts","../ui/filters/filterRegistry.ts","../ui/desktop/ColumnFilterPopover.tsx","../ui/desktop/ColumnGroupHeaderRows.tsx","../ui/desktop/ColumnMenuPopover.tsx","../ui/desktop/ColumnsPanelPopover.tsx","../ui/desktop/ColumnResizeHandle.tsx","../ui/desktop/ERPTableHeader.tsx","../engine/dataOps/pinnedRows.ts","../ui/desktop/ERPTablePinnedRows.tsx","../engine/equality.ts","../ui/virtual/virtualWindow.ts","../ui/virtual/useVirtualWindow.ts","../ui/desktop/ERPTableVirtualBody.tsx","../ui/a11y/ToolbarIconButton.tsx","../ui/export/PdfExportToolbarButton.tsx","../ui/export/ExcelImportToolbarButton.tsx","../ui/gridSearch/GridSearchPanel.tsx","../ui/gridSearch/GridSearchControl.tsx","../ui/multiSelectList/body.tsx","../ui/multiSelectList/header.tsx","../ui/multiSelectList/index.tsx","../ui/theme/ThemeToggleButton.tsx","../ui/desktop/groupActionButtons.tsx","../ui/desktop/pagination.tsx","../ui/desktop/resolveDesktopVirtualization.ts","../ui/desktop/useERPTableLayout.ts","../ui/overlays/resolveGridOverlay.ts","../ui/overlays/GridOverlays.tsx","../ui/desktop/DesktopTable.tsx","../ui/mobile/MobileActionButtons.tsx","../ui/mobile/MobileLoadMoreButton.tsx","../ui/mobile/buildDynamicSource.ts","../ui/mobile/MobileRowFormModal.tsx","../ui/mobile/MobileIndexCol.tsx","../ui/mobile/MobileTableRow.tsx","../ui/mobile/MobileTableBody.tsx","../ui/mobile/MobileTableHeader.tsx","../ui/mobile/scrollToTableEnd.ts","../ui/mobile/useScrollAfterMobileAdd.ts","../ui/mobile/MobileTable.tsx","../ui/keyboard/skipGridNavigation.ts","../ui/useERPTable.ts","../ui/host/assignRef.ts","../ui/index.tsx","../ui/styles/injectStyles.ts","../ui/history/GridHistoryPanel.tsx","../ui/offline/GridOfflineStatus.tsx","../infrastructure/perf/benchmark.ts","../ui/virtual/VirtualList.tsx"],"names":["useState","useRef","useEffect","useLayoutEffect","useTranslations","jsx","useThemePortalStyle","Fragment","jsxs","createPortal","trapTabKey","useId","lazy","Suspense","useDateAdapter","useERPTableTheme","DatePicker","resolveCellAddressFromPoint","formatLocaleNumber","date","translate","forwardRef","useLocale","useHostDependOn","getStaticDependValue","getDependFieldName","hasDependValue","buildDependencyBody","useRemoteQuery","useMemo","useLazyRemote","React","useERPTableHost","useNumberingSystem","display","useColumnWindowOrAll","resolveFillCorner","resolveCellRangePresentation","cellRangeEdgeAttr","cellRangeClassName","ariaDataRowIndex","ColumnWindowCells","columnPinCellProps","rangeProps","ariaColIndex","columnSizeStyle","createElement","gridCellA11y","ariaFooterRowIndex","isIndexColumn","resolveFilterUi","isHeaderColumnSortable","collectUniqueFilterValues","buildColumnGroupHeaderModel","canSetColumnVisible","clampColumnWidth","useDirection","maxColumnGroupDepth","isColumnFilterActive","ariaSortForColumn","sortPriorityForColumn","HEADER_SORT_CLICK_MAX_MOVE_PX","columnPinClassName","move","resolveGroupBlockReorder","shouldCommitHeaderSortClick","cycleSortModel","ARIA_HEADER_ROW_INDEX","ariaPinnedTopRowIndex","ariaPinnedBottomRowIndex","ViewportCalculator","SparseRowIndex","Viewport","ERPTableGroupRow","useHostToast","useMediaQuery","rows","isStockDarkTheme","exportActiveCollectionToExcel","pageSize","DEFAULT_ROW_HEIGHT","useCallback","gridCellDomId","ariaGridRowCount","ColumnWindowProvider","indexPinClassName","indexPinDataAttr","overlayStoredColumnWidth","createGridTableKey","createGrid","flattenColDefOrGroup","isPersistentStore","DEFAULT_MEMORY_STORE","themeDefault","resolveActiveTheme","useGridHostEvents","resolveDirection","ERPTableHostProvider","themeToStyle"],"mappings":"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AA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","file":"index.cjs","sourcesContent":["import { useEffect, useRef, useState } from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { TableViewState } from '../../engine/type';\r\n\r\nexport function useControllerSelector<T>(\r\n controller: UITableController,\r\n getter: () => T,\r\n isEqual: (previous: T, next: T) => boolean = Object.is,\r\n): T {\r\n const [value, setValue] = useState(() => getter());\r\n const getterRef = useRef(getter);\r\n const isEqualRef = useRef(isEqual);\r\n getterRef.current = getter;\r\n isEqualRef.current = isEqual;\r\n\r\n useEffect(() => {\r\n const unsubscribe = controller.subscribe(() => {\r\n const next = getterRef.current();\r\n setValue((previous) =>\r\n isEqualRef.current(previous, next) ? previous : next,\r\n );\r\n });\r\n\r\n return () => unsubscribe?.();\r\n }, [controller]);\r\n\r\n return value;\r\n}\r\n\r\nexport function useEngineSelector<T>(\r\n controller: UITableController,\r\n selector: (view: TableViewState | null | undefined) => T,\r\n isEqual: (previous: T, next: T) => boolean = Object.is,\r\n): T {\r\n return useControllerSelector(\r\n controller,\r\n () => selector(controller.getViewState()),\r\n isEqual,\r\n );\r\n}\r\n\r\nexport function jsonEqual<T>(previous: T, next: T): boolean {\r\n return JSON.stringify(previous) === JSON.stringify(next);\r\n}\r\n\r\nexport function useGridSearchState(controller: UITableController) {\r\n return useEngineSelector(\r\n controller,\r\n (view) => view?.gridSearch ?? null,\r\n jsonEqual,\r\n );\r\n}\r\n\r\nexport function useMobileEditorState(controller: UITableController) {\r\n return useEngineSelector(\r\n controller,\r\n (view) => view?.mobileEditor ?? null,\r\n jsonEqual,\r\n );\r\n}\r\n","import type { GridSearchState } from '../../engine/type';\r\nimport { GridSearchMatch } from './types';\r\n\r\nconst SCROLL_EDGE_PADDING = 12;\r\n\r\nexport function buildSearchScrollKey(\r\n search: NonNullable<GridSearchState>,\r\n match: GridSearchMatch,\r\n): string {\r\n return `${search.columnId}:${search.query}:${search.currentIndex}:${match.rowId}:${match.columnId}`;\r\n}\r\n\r\nfunction findMatchInContainer(\r\n container: HTMLElement,\r\n match: GridSearchMatch,\r\n): { rowEl: HTMLElement; cellEl: HTMLElement } | null {\r\n const rowEl = container.querySelector<HTMLElement>(\r\n `tr[data-rowid=\"${match.rowId}\"]`,\r\n );\r\n if (!rowEl) return null;\r\n\r\n const cellEl = rowEl.querySelector<HTMLElement>(\r\n `td[data-columnid=\"${match.columnId}\"]`,\r\n );\r\n if (!cellEl) return null;\r\n\r\n return { rowEl, cellEl };\r\n}\r\n\r\nfunction isHorizontallyVisible(\r\n cellRect: DOMRect,\r\n containerRect: DOMRect,\r\n): boolean {\r\n return (\r\n cellRect.left >= containerRect.left + SCROLL_EDGE_PADDING &&\r\n cellRect.right <= containerRect.right - SCROLL_EDGE_PADDING\r\n );\r\n}\r\n\r\nfunction isVerticallyVisible(\r\n rowRect: DOMRect,\r\n containerRect: DOMRect,\r\n): boolean {\r\n return (\r\n rowRect.top >= containerRect.top + SCROLL_EDGE_PADDING &&\r\n rowRect.bottom <= containerRect.bottom - SCROLL_EDGE_PADDING\r\n );\r\n}\r\n\r\nexport function restoreScrollPosition(\r\n container: HTMLElement,\r\n left: number,\r\n top: number,\r\n): void {\r\n if (Math.abs(container.scrollLeft - left) > 1) {\r\n container.scrollLeft = left;\r\n }\r\n if (Math.abs(container.scrollTop - top) > 1) {\r\n container.scrollTop = top;\r\n }\r\n}\r\n\r\nexport function applyScrollToMatch(\r\n container: HTMLElement,\r\n match: GridSearchMatch,\r\n): boolean {\r\n const elements = findMatchInContainer(container, match);\r\n if (!elements) return false;\r\n\r\n const { rowEl, cellEl } = elements;\r\n const cellRect = cellEl.getBoundingClientRect();\r\n const rowRect = rowEl.getBoundingClientRect();\r\n const containerRect = container.getBoundingClientRect();\r\n\r\n let deltaX = 0;\r\n let deltaY = 0;\r\n\r\n if (!isHorizontallyVisible(cellRect, containerRect)) {\r\n deltaX =\r\n (cellRect.left + cellRect.right) / 2 -\r\n (containerRect.left + containerRect.right) / 2;\r\n }\r\n\r\n if (!isVerticallyVisible(rowRect, containerRect)) {\r\n deltaY = rowRect.top - containerRect.top - SCROLL_EDGE_PADDING;\r\n }\r\n\r\n if (Math.abs(deltaX) < 1 && Math.abs(deltaY) < 1) {\r\n return true;\r\n }\r\n\r\n container.scrollBy({ left: deltaX, top: deltaY, behavior: 'auto' });\r\n return true;\r\n}\r\n","import { RefObject, useEffect, useLayoutEffect, useRef } from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { GridSearchState } from '../../engine/type';\r\nimport { useEngineSelector, useGridSearchState } from './useEngineSelector';\r\nimport {\r\n applyScrollToMatch,\r\n buildSearchScrollKey,\r\n restoreScrollPosition,\r\n} from '../gridSearch/scrollToMatch';\r\n\r\nconst RESTORE_WINDOW_MS = 800;\r\n\r\nfunction jsonEqual<T>(previous: T, next: T): boolean {\r\n return JSON.stringify(previous) === JSON.stringify(next);\r\n}\r\n\r\nexport function useScrollToSearchMatch(\r\n scrollRef: RefObject<HTMLElement | null>,\r\n controller: UITableController,\r\n) {\r\n const gridSearch = useGridSearchState(controller);\r\n const activeRowId = useEngineSelector(\r\n controller,\r\n () => controller.getActiveRow(),\r\n Object.is,\r\n );\r\n const currentPage = useEngineSelector(\r\n controller,\r\n (view) => view?.pagination.page ?? 1,\r\n Object.is,\r\n );\r\n\r\n const savedScrollRef = useRef<{\r\n key: string;\r\n left: number;\r\n top: number;\r\n } | null>(null);\r\n const restoreUntilRef = useRef(0);\r\n\r\n const getActiveMatch = (search: GridSearchState | null) => {\r\n if (!search || search.currentIndex < 0 || !search.matches.length) {\r\n return null;\r\n }\r\n return search.matches[search.currentIndex];\r\n };\r\n\r\n const persistScroll = (key: string) => {\r\n const container = scrollRef.current;\r\n if (!container) return;\r\n\r\n savedScrollRef.current = {\r\n key,\r\n left: container.scrollLeft,\r\n top: container.scrollTop,\r\n };\r\n restoreUntilRef.current = Date.now() + RESTORE_WINDOW_MS;\r\n };\r\n\r\n const restoreIfNeeded = () => {\r\n const container = scrollRef.current;\r\n const saved = savedScrollRef.current;\r\n if (!container || !saved) return;\r\n if (Date.now() > restoreUntilRef.current) return;\r\n\r\n restoreScrollPosition(container, saved.left, saved.top);\r\n };\r\n\r\n const scrollToActiveMatch = (search: GridSearchState | null): boolean => {\r\n const container = scrollRef.current;\r\n const match = getActiveMatch(search);\r\n if (!container || !match) return false;\r\n\r\n if (activeRowId !== match.rowId) return false;\r\n\r\n const key = buildSearchScrollKey(search!, match);\r\n const applied = applyScrollToMatch(container, match);\r\n if (applied) {\r\n persistScroll(key);\r\n }\r\n return applied;\r\n };\r\n\r\n useLayoutEffect(() => {\r\n if (!gridSearch) {\r\n savedScrollRef.current = null;\r\n restoreUntilRef.current = 0;\r\n return;\r\n }\r\n\r\n const match = getActiveMatch(gridSearch);\r\n const key = match ? buildSearchScrollKey(gridSearch, match) : null;\r\n\r\n if (key && savedScrollRef.current?.key === key) {\r\n restoreIfNeeded();\r\n } else {\r\n savedScrollRef.current = null;\r\n }\r\n\r\n scrollToActiveMatch(gridSearch);\r\n restoreIfNeeded();\r\n }, [gridSearch, activeRowId, currentPage, controller, scrollRef]);\r\n\r\n useEffect(() => {\r\n if (!gridSearch) return;\r\n\r\n let frame1 = 0;\r\n let frame2 = 0;\r\n\r\n frame1 = requestAnimationFrame(() => {\r\n restoreIfNeeded();\r\n const applied = scrollToActiveMatch(gridSearch);\r\n restoreIfNeeded();\r\n\r\n if (!applied) {\r\n frame2 = requestAnimationFrame(() => {\r\n scrollToActiveMatch(gridSearch);\r\n restoreIfNeeded();\r\n });\r\n }\r\n });\r\n\r\n return () => {\r\n cancelAnimationFrame(frame1);\r\n cancelAnimationFrame(frame2);\r\n };\r\n }, [gridSearch, activeRowId, currentPage, controller, scrollRef]);\r\n\r\n useEffect(() => {\r\n const unsubscribe = controller.subscribe(() => {\r\n if (!savedScrollRef.current) return;\r\n if (Date.now() > restoreUntilRef.current) return;\r\n\r\n requestAnimationFrame(() => {\r\n restoreIfNeeded();\r\n });\r\n });\r\n\r\n return () => unsubscribe?.();\r\n }, [controller, scrollRef]);\r\n}\r\n","/**\r\n * Pure live-region announcement builders (PR-125).\r\n * No React — unit-tested; UI formats via `messages`.\r\n */\r\n\r\nimport type { FilterModel } from '../../engine/dataOps/filterModel';\r\nimport type { SortModel } from '../../engine/dataOps/sortModel';\r\n\r\nexport type TranslateFn = (\r\n key: string,\r\n vars?: Record<string, string | number>,\r\n) => string;\r\n\r\nexport type ColumnLabel = { fieldName: string; fieldCaption: string };\r\n\r\nexport function countSelectedRows(\r\n selected: Record<number, true> | null | undefined,\r\n): number {\r\n if (!selected) return 0;\r\n return Object.keys(selected).length;\r\n}\r\n\r\nexport function countActiveFilters(filterModel: FilterModel | null | undefined): number {\r\n if (!filterModel) return 0;\r\n return Object.keys(filterModel).length;\r\n}\r\n\r\nexport function announceSortChange(\r\n sortModel: SortModel,\r\n columns: readonly ColumnLabel[],\r\n t: TranslateFn,\r\n): string {\r\n if (!sortModel.length) return t('a11y.sortCleared');\r\n const primary = sortModel[0]!;\r\n const col = columns.find((c) => c.fieldName === primary.colId);\r\n const column = col?.fieldCaption || primary.colId;\r\n return t(\r\n primary.sort === 'asc' ? 'a11y.sortedAsc' : 'a11y.sortedDesc',\r\n { column },\r\n );\r\n}\r\n\r\nexport function announceFilterChange(\r\n visible: number,\r\n total: number,\r\n activeFilterCount: number,\r\n quickFilterActive: boolean,\r\n t: TranslateFn,\r\n): string {\r\n if (activeFilterCount === 0 && !quickFilterActive) {\r\n return t('a11y.filterCleared');\r\n }\r\n return t('a11y.filterResult', { visible, total });\r\n}\r\n\r\nexport function announceSelectionChange(\r\n count: number,\r\n t: TranslateFn,\r\n): string {\r\n if (count <= 0) return t('a11y.selectionCleared');\r\n return t('a11y.rowsSelected', { count });\r\n}\r\n\r\nexport function announceValidationError(\r\n message: string,\r\n t: TranslateFn,\r\n): string {\r\n const trimmed = message.trim();\r\n if (!trimmed) return t('a11y.validationGeneric');\r\n return t('a11y.validationError', { message: trimmed });\r\n}\r\n\r\nexport function sortFingerprint(sortModel: SortModel): string {\r\n return sortModel.map((s) => `${s.colId}:${s.sort}`).join('|');\r\n}\r\n\r\nexport function filterFingerprint(\r\n filterModel: FilterModel,\r\n quickFilterText: string,\r\n): string {\r\n return `${JSON.stringify(filterModel)}|${quickFilterText}`;\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef, useState } from 'react';\r\n\r\nimport type { CellError } from '../../engine/type';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { jsonEqual, useEngineSelector } from '../hooks/useEngineSelector';\r\nimport { useTranslations } from '../host';\r\nimport {\r\n announceFilterChange,\r\n announceSelectionChange,\r\n announceSortChange,\r\n announceValidationError,\r\n countActiveFilters,\r\n countSelectedRows,\r\n filterFingerprint,\r\n sortFingerprint,\r\n} from './liveAnnouncements';\r\n\r\ntype Props = {\r\n controller: UITableController;\r\n};\r\n\r\n/**\r\n * Polite aria-live region for sort / filter / selection / validation (PR-125).\r\n * Visually hidden; text comes from `messages`.\r\n */\r\nexport function GridLiveRegion({ controller }: Props) {\r\n const t = useTranslations();\r\n const [message, setMessage] = useState('');\r\n const primed = useRef(false);\r\n const prevSort = useRef('');\r\n const prevFilter = useRef('');\r\n const prevSelected = useRef(-1);\r\n const prevValidation = useRef('');\r\n\r\n const snapshot = useEngineSelector(\r\n controller,\r\n (view) => ({\r\n sortModel: view?.sortModel ?? [],\r\n filterModel: view?.filterModel ?? {},\r\n quickFilterText: view?.quickFilterText ?? '',\r\n selectedRows: view?.selectedRows ?? {},\r\n columns: (view?.columns ?? []).map((c) => ({\r\n fieldName: c.fieldName,\r\n fieldCaption: c.fieldCaption,\r\n })),\r\n visibleRows: view?.pagination.totalRows ?? 0,\r\n }),\r\n jsonEqual,\r\n );\r\n\r\n useEffect(() => {\r\n const sortFp = sortFingerprint(snapshot.sortModel);\r\n const filterFp = filterFingerprint(\r\n snapshot.filterModel,\r\n snapshot.quickFilterText,\r\n );\r\n const selectedCount = countSelectedRows(snapshot.selectedRows);\r\n const totalRows = controller.getAllRows()?.length ?? snapshot.visibleRows;\r\n\r\n if (!primed.current) {\r\n primed.current = true;\r\n prevSort.current = sortFp;\r\n prevFilter.current = filterFp;\r\n prevSelected.current = selectedCount;\r\n return;\r\n }\r\n\r\n if (sortFp !== prevSort.current) {\r\n prevSort.current = sortFp;\r\n setMessage(\r\n announceSortChange(snapshot.sortModel, snapshot.columns, t),\r\n );\r\n return;\r\n }\r\n\r\n if (filterFp !== prevFilter.current) {\r\n prevFilter.current = filterFp;\r\n setMessage(\r\n announceFilterChange(\r\n snapshot.visibleRows,\r\n totalRows,\r\n countActiveFilters(snapshot.filterModel),\r\n Boolean(snapshot.quickFilterText.trim()),\r\n t,\r\n ),\r\n );\r\n return;\r\n }\r\n\r\n if (selectedCount !== prevSelected.current) {\r\n prevSelected.current = selectedCount;\r\n setMessage(announceSelectionChange(selectedCount, t));\r\n }\r\n }, [snapshot, controller, t]);\r\n\r\n useEffect(() => {\r\n const run = controller.validation();\r\n run((res) => {\r\n if (res.valid) {\r\n prevValidation.current = '';\r\n return;\r\n }\r\n let first: CellError | undefined;\r\n if (res.errors) {\r\n for (const err of res.errors.values()) {\r\n first = err;\r\n break;\r\n }\r\n }\r\n const msg = first?.message ?? '';\r\n if (!msg || msg === prevValidation.current) return;\r\n prevValidation.current = msg;\r\n setMessage(announceValidationError(msg, t));\r\n });\r\n }, [controller, snapshot, t]);\r\n\r\n return (\r\n <div\r\n className=\"pdg-live-region\"\r\n data-pdg-live-region=\"\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n >\r\n {message}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useId, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport { trapTabKey } from '../../infrastructure/ui/focusTrap';\r\nimport { useThemePortalStyle } from '../host';\r\n\r\ntype Props = {\r\n title?: React.ReactNode;\r\n children: React.ReactNode;\r\n className?: string;\r\n};\r\n\r\nexport function CustomTooltip({ title, children }: Props) {\r\n const [pos, setPos] = useState<{ x: number; y: number } | null>(null);\r\n const portalStyle = useThemePortalStyle({\r\n position: 'fixed',\r\n left: pos?.x,\r\n top: pos?.y,\r\n transform: 'translate(-50%, -100%)',\r\n });\r\n\r\n if (!title) return <>{children}</>;\r\n\r\n return (\r\n <span\r\n className=\"relative inline-flex\"\r\n onMouseEnter={(e) => {\r\n const rect = e.currentTarget.getBoundingClientRect();\r\n setPos({ x: rect.left + rect.width / 2, y: rect.top - 6 });\r\n }}\r\n onMouseLeave={() => setPos(null)}\r\n >\r\n {children}\r\n {pos && typeof document !== 'undefined'\r\n ? createPortal(\r\n <span\r\n className=\"erp-table-tooltip\"\r\n style={portalStyle}\r\n >\r\n {title}\r\n </span>,\r\n document.body,\r\n )\r\n : null}\r\n </span>\r\n );\r\n}\r\n\r\nexport function Tooltip({ title, children }: { title?: React.ReactNode; children: React.ReactNode }) {\r\n return <CustomTooltip title={title}>{children}</CustomTooltip>;\r\n}\r\n\r\ntype ModalProps = {\r\n isModalOpen?: boolean;\r\n closeModal?: () => void;\r\n headerName?: React.ReactNode;\r\n headerIcon?: React.ReactNode;\r\n content?: React.ReactNode;\r\n width?: number;\r\n contentClassName?: string;\r\n};\r\n\r\nexport function CustomModal({\r\n isModalOpen,\r\n closeModal,\r\n headerName,\r\n headerIcon,\r\n content,\r\n width = 720,\r\n contentClassName,\r\n}: ModalProps) {\r\n const overlayStyle = useThemePortalStyle();\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (!isModalOpen) return;\r\n const previouslyFocused = document.activeElement as HTMLElement | null;\r\n const id = requestAnimationFrame(() => {\r\n const focusables = dialogRef.current?.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n );\r\n focusables?.[0]?.focus();\r\n });\r\n const onKey = (e: KeyboardEvent) => {\r\n if (!dialogRef.current) return;\r\n if (e.key === 'Escape') {\r\n e.preventDefault();\r\n closeModal?.();\r\n return;\r\n }\r\n trapTabKey(dialogRef.current, e);\r\n };\r\n document.addEventListener('keydown', onKey);\r\n return () => {\r\n cancelAnimationFrame(id);\r\n document.removeEventListener('keydown', onKey);\r\n previouslyFocused?.focus?.();\r\n };\r\n }, [isModalOpen, closeModal]);\r\n\r\n if (!isModalOpen || typeof document === 'undefined') return null;\r\n\r\n return createPortal(\r\n <div\r\n className=\"erp-table-modal-overlay\"\r\n style={overlayStyle}\r\n onClick={() => closeModal?.()}\r\n >\r\n <div\r\n ref={dialogRef}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label={typeof headerName === 'string' ? headerName : undefined}\r\n className=\"erp-table-modal\"\r\n style={{ width }}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <div className=\"erp-table-modal__header\">\r\n {headerIcon}\r\n <span>{headerName}</span>\r\n <button\r\n type=\"button\"\r\n className=\"erp-table-modal__close\"\r\n onClick={() => closeModal?.()}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n <div className={`erp-table-modal__body ${contentClassName ?? ''}`}>{content}</div>\r\n </div>\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n\r\nexport function CustomCheckbox({\r\n checked,\r\n disabled,\r\n onClick,\r\n onChange,\r\n className,\r\n 'aria-label': ariaLabel,\r\n}: {\r\n checked?: boolean;\r\n disabled?: boolean;\r\n onClick?: (e: React.MouseEvent<HTMLInputElement>) => void;\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n className?: string;\r\n 'aria-label'?: string;\r\n}) {\r\n return (\r\n <input\r\n type=\"checkbox\"\r\n className={`erp-table-checkbox ${className ?? ''}`}\r\n checked={!!checked}\r\n disabled={disabled}\r\n aria-label={ariaLabel}\r\n onClick={onClick}\r\n onChange={(event) => {\r\n onChange?.(event);\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport function CustomButton({\r\n children,\r\n className,\r\n onClick,\r\n htmlType = 'button',\r\n type,\r\n disabled,\r\n}: {\r\n children?: React.ReactNode;\r\n className?: string;\r\n onClick?: () => void;\r\n htmlType?: 'button' | 'submit' | 'reset';\r\n type?: string;\r\n disabled?: boolean;\r\n}) {\r\n return (\r\n <button\r\n type={htmlType}\r\n disabled={disabled}\r\n onClick={onClick}\r\n className={`flex justify-center items-center px-2 py-1 border rounded ${className ?? ''}`}\r\n data-variant={type}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport function InputText({\r\n value,\r\n onChange,\r\n placeholder,\r\n className,\r\n}: {\r\n value?: string;\r\n onChange?: (e: { target: { value: string } }) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}) {\r\n const id = useId();\r\n return (\r\n <input\r\n id={id}\r\n className={`px-3 py-2 border border-gray-gray5 rounded w-full text-sm outline-none ${className ?? ''}`}\r\n value={value ?? ''}\r\n placeholder={placeholder}\r\n onChange={onChange}\r\n />\r\n );\r\n}\r\n\r\nexport function Spin({\r\n indicator,\r\n}: {\r\n size?: string;\r\n indicator?: React.ReactNode;\r\n}) {\r\n return <span className=\"inline-flex animate-spin\">{indicator}</span>;\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport { useThemePortalStyle } from '../host';\r\n\r\nexport type DropdownItem = {\r\n key?: string;\r\n label?: React.ReactNode;\r\n extra?: React.ReactNode;\r\n type?: 'divider' | 'item' | string;\r\n onClick?: () => void;\r\n disabled?: boolean;\r\n};\r\n\r\ntype DropdownProps = {\r\n items?: DropdownItem[];\r\n children: React.ReactNode;\r\n placement?: 'bottom' | 'bottomLeft' | 'bottomRight' | string;\r\n className?: string;\r\n dropdownClassName?: string;\r\n};\r\n\r\nexport function CustomDropdownButton({\r\n items = [],\r\n children,\r\n placement = 'bottom',\r\n className,\r\n dropdownClassName,\r\n}: DropdownProps) {\r\n const [open, setOpen] = useState(false);\r\n const [pos, setPos] = useState({ top: 0, left: 0 });\r\n const triggerRef = useRef<HTMLDivElement>(null);\r\n const menuStyle = useThemePortalStyle({\r\n position: 'fixed',\r\n top: pos.top,\r\n left: pos.left,\r\n });\r\n\r\n useEffect(() => {\r\n if (!open || !triggerRef.current) return;\r\n const rect = triggerRef.current.getBoundingClientRect();\r\n let left = rect.left;\r\n if (placement === 'bottomRight') left = rect.right - 180;\r\n if (placement === 'bottomLeft') left = rect.left;\r\n setPos({ top: rect.bottom + 4, left });\r\n }, [open, placement]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onDoc = (e: MouseEvent) => {\r\n if (triggerRef.current?.contains(e.target as Node)) return;\r\n setOpen(false);\r\n };\r\n document.addEventListener('mousedown', onDoc);\r\n return () => document.removeEventListener('mousedown', onDoc);\r\n }, [open]);\r\n\r\n return (\r\n <div ref={triggerRef} className={className}>\r\n <span\r\n role=\"button\"\r\n tabIndex={0}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setOpen((v) => !v);\r\n }}\r\n >\r\n {children}\r\n </span>\r\n {open && typeof document !== 'undefined'\r\n ? createPortal(\r\n <div\r\n className={`erp-table-dropdown ${dropdownClassName ?? ''}`}\r\n style={menuStyle}\r\n >\r\n {items.map((item, index) => {\r\n if (item.type === 'divider') {\r\n return <div key={`d-${index}`} className=\"erp-table-dropdown__divider\" />;\r\n }\r\n return (\r\n <button\r\n key={item.key ?? String(index)}\r\n type=\"button\"\r\n className=\"erp-table-dropdown__item\"\r\n disabled={item.disabled}\r\n onClick={() => {\r\n item.onClick?.();\r\n setOpen(false);\r\n }}\r\n >\r\n <span>{item.label}</span>\r\n {item.extra ? <span>{item.extra}</span> : null}\r\n </button>\r\n );\r\n })}\r\n </div>,\r\n document.body,\r\n )\r\n : null}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { Suspense, lazy } from 'react';\r\n\r\n/**\r\n * Public Select. The implementation and its antd-derived stylesheet are a lazy\r\n * chunk (`SelectImpl`) so they stay out of the main bundle budget.\r\n */\r\nexport type SelectOption = {\r\n value?: string | number;\r\n label?: React.ReactNode;\r\n title?: string;\r\n option?: unknown;\r\n disabled?: boolean;\r\n [key: string]: unknown;\r\n};\r\n\r\nexport type SelectProps = {\r\n className?: string;\r\n style?: React.CSSProperties;\r\n value?: unknown;\r\n disabled?: boolean;\r\n loading?: boolean;\r\n showSearch?: boolean;\r\n allowClear?: boolean;\r\n placeholder?: React.ReactNode;\r\n options?: SelectOption[];\r\n size?: 'small' | 'middle' | 'large';\r\n status?: 'error' | 'warning';\r\n filterOption?: (input: string, option: SelectOption) => boolean;\r\n onChange?: (value: unknown, option?: unknown) => void;\r\n onClick?: () => void;\r\n onSearch?: (value: string) => void;\r\n onClear?: () => void;\r\n onFocus?: () => void;\r\n onBlur?: () => void;\r\n onPopupScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\r\n popupMatchSelectWidth?: number | boolean;\r\n popupRender?: (menu: React.ReactNode) => React.ReactNode;\r\n autoFocus?: boolean;\r\n optionRender?: (\r\n originNode: { data: SelectOption },\r\n info?: { data: SelectOption },\r\n ) => React.ReactNode;\r\n notFoundContent?: React.ReactNode;\r\n getPopupContainer?: (trigger: HTMLElement) => HTMLElement;\r\n optionFilterProp?: string;\r\n labelInValue?: boolean;\r\n /** Windowed option list (antd default: on; only kicks in when options overflow `listHeight`). */\r\n virtual?: boolean;\r\n listHeight?: number;\r\n listItemHeight?: number;\r\n};\r\n\r\n\r\nconst SelectImpl = lazy(() => import('./SelectImpl'));\r\n\r\nexport function Select(props: SelectProps) {\r\n return (\r\n <Suspense\r\n fallback={\r\n <div\r\n className={props.className}\r\n style={{ display: 'inline-flex', minHeight: 32, minWidth: 64, ...props.style }}\r\n aria-busy=\"true\"\r\n />\r\n }\r\n >\r\n <SelectImpl {...props} />\r\n </Suspense>\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nexport type IconConfig = {\r\n width?: number;\r\n height?: number;\r\n stroke?: string;\r\n fill?: string;\r\n strokeWidth?: number;\r\n};\r\n\r\ntype IconProps = {\r\n config?: IconConfig;\r\n className?: string;\r\n};\r\n\r\nfunction strokeClass(config?: IconConfig) {\r\n return !config?.stroke ? 'stroke-gray-gray10' : undefined;\r\n}\r\n\r\nexport function PlusIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 60 60\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M30 44.9996L30 29.1157M30 29.1157C30 29.1157 30 14.9996 29.9999 13.9996M30 29.1157L46 29.1157M30 29.1157L14 29.1157\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"3\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function GuaranteeReceive({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 20 20\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M10.8327 2.50072C10.7531 2.5 10.6638 2.5 10.5616 2.5H6.83285C5.89942 2.5 5.43237 2.5 5.07585 2.68166C4.76224 2.84144 4.50746 3.09623 4.34767 3.40983C4.16602 3.76635 4.16602 4.23341 4.16602 5.16683V14.8335C4.16602 15.7669 4.16602 16.2334 4.34767 16.5899C4.50746 16.9035 4.76224 17.1587 5.07585 17.3185C5.43202 17.5 5.89852 17.5 6.83013 17.5L13.1686 17.5C14.1002 17.5 14.566 17.5 14.9222 17.3185C15.2358 17.1587 15.4914 16.9035 15.6512 16.5899C15.8327 16.2337 15.8327 15.7679 15.8327 14.8363V7.7714C15.8327 7.66913 15.8327 7.57967 15.8319 7.5M10.8327 2.50072C11.0707 2.50289 11.2213 2.51154 11.3651 2.54605C11.5351 2.58688 11.6976 2.65439 11.8467 2.74577C12.0148 2.8488 12.1592 2.99318 12.4473 3.28125L15.0518 5.88582C15.3401 6.17407 15.4834 6.3178 15.5865 6.48599C15.6779 6.63512 15.7455 6.79771 15.7863 6.96777C15.8208 7.11147 15.8296 7.26209 15.8319 7.5M10.8327 2.50072V4.83333C10.8327 5.76675 10.8327 6.23314 11.0143 6.58966C11.1741 6.90326 11.4289 7.15873 11.7425 7.31852C12.0987 7.5 12.5652 7.5 13.4968 7.5H15.8319M15.8319 7.5H15.8328\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function CutIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 32 32\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M5.75 17.531h-.125c-1.313 0-2.719.625-3.781 1.656-1.094 1-1.844 2.344-1.844 3.688 0 1.531 1.094 2.469 2.594 2.469 1.281 0 2.719-.656 3.813-1.656 1.063-1.031 1.813-2.344 1.813-3.688 0-.156 0-.375-.031-.531l1-.875 9.813 5.031c.156.063.313.125.469.125.219 0 .625-.125 1.063-.188.406-.094.844-.188 1.094-.219.438-.063.781-.469.781-.906 0-.313-.156-.594-.438-.781l-8.156-5.656 8.156-5.656c.281-.188.438-.469.438-.781 0-.438-.344-.875-.781-.938-.125 0-.281-.031-.469-.094-.375-.094-.875-.156-1.25-.219s-.656-.063-.906.063c-.063.031-.25.125-.594.281-.313.156-.719.375-1.188.625s-1 .5-1.563.813c-.563.281-1.219.594-1.781.906-1.188.594-2.344 1.188-3.219 1.625-.438.219-.813.438-1.094.563-.25.125-.375.219-.375.219l-1-.906c.031-.156.031-.344.031-.5 0-1.344-.75-2.688-1.813-3.688-1.094-1-2.531-1.656-3.813-1.656-1.5 0-2.594.938-2.594 2.469 0 1.313.75 2.656 1.875 3.688 1.125 1.063 2.563 1.75 3.875 1.656.125.188.406.438.688.688s.531.531.719.719v.25c-.188.188-.406.406-.719.688-.281.25-.531.531-.688.719zM2.313 9.125v-.094c.094-.031.188-.031.281-.031.75 0 1.563.469 2.094.906.25.219.563.594.781.969.25.375.469.813.469 1.156v.063c-.156.031-.25.031-.313.031-.75 0-1.5-.469-2.063-.938-.219-.219-.563-.531-.813-.906s-.438-.813-.438-1.156zM6.844 17.75l1.281-1.25-.063-1.5 11.406-5.813 2 .375-11.875 8.188-.531-.281-1.25 1.125c-.219-.344-.563-.625-.969-.844zM7.25 14.625l-.406-.438c.406-.156.75-.438.969-.781l.5.438c-.469.219-.875.344-1.063.781zM8.688 16c0 .5.406.906.906.906.531 0 .938-.406.938-.906 0-.531-.406-.938-.906-.938-.563 0-.938.406-.938.938zM10.563 18.219l2.406-1.656 8.5 5.875-2 .375zM2.344 22.875c0-.688.469-1.469 1.156-2.031s1.5-1 2.125-1c.094 0 .188.031.25.031v.063c.031 0 .031.031.031.063 0 .688-.469 1.438-1.156 2s-1.469 1-2.156 1h-.125c-.031-.031-.063-.031-.125-.031v-.094z\"\r\n className={!config?.fill ? 'fill-gray-gray8' : undefined}\r\n fill={config?.fill}\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function ClipboardIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 20 20\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M13.3333 3.33594C15.1459 3.34603 16.1274 3.4264 16.7678 4.06672C17.5 4.79896 17.5 5.97747 17.5 8.33449V13.3345C17.5 15.6915 17.5 16.87 16.7678 17.6023C16.0355 18.3345 14.857 18.3345 12.5 18.3345H7.5C5.14298 18.3345 3.96447 18.3345 3.23223 17.6023C2.5 16.87 2.5 15.6915 2.5 13.3345V8.33449C2.5 5.97747 2.5 4.79896 3.23223 4.06672C3.87255 3.4264 4.85414 3.34603 6.66667 3.33594\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n />\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M6.66797 11.668H13.3346\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M5.83203 8.75H14.1654\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M7.5 14.582H12.5\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M6.66797 2.91797C6.66797 2.22761 7.22761 1.66797 7.91797 1.66797H12.0846C12.775 1.66797 13.3346 2.22761 13.3346 2.91797V3.7513C13.3346 4.44166 12.775 5.0013 12.0846 5.0013H7.91797C7.22761 5.0013 6.66797 4.44166 6.66797 3.7513V2.91797Z\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function ClipboardCheck({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 52 52\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M44 2.5H19C16.4 2.5 14.3 4.6 14.3 7.2V8C14.3 8.5 14.6 8.8 15.1 8.8H37.8C40.4 8.8 42.5 10.9 42.5 13.5V37.8C42.5 38.3 42.8 38.6 43.3 38.6H44C46.6 38.6 48.7 36.5 48.7 33.9V7.2C48.7 4.6 46.6 2.5 44 2.5Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n fill=\"none\"\r\n />\r\n <path\r\n d=\"M33 13.5H8C5.4 13.5 3.3 15.6 3.3 18.2V44.8C3.3 47.4 5.4 49.5 8 49.5H33C35.6 49.5 37.8 47.4 37.8 44.8V18.2C37.8 15.6 35.6 13.5 33 13.5ZM31 26.8L19 38.8C18.5 39.3 18 39.5 17.4 39.5C16.9 39.5 16.2 39.3 15.8 38.8L10 33C9.5 32.5 9.5 31.8 10 31.4L11.6 29.8C12.1 29.3 12.8 29.3 13.2 29.8L17.4 34L27.7 23.7C28.2 23.2 28.9 23.2 29.3 23.7L30.9 25.3C31.4 25.6 31.4 26.4 31 26.8Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n fill=\"#000\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function TrashBin({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 18 18\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M15.3751 4.5H2.625\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n d=\"M14.125 6.375L13.78 11.5493C13.6473 13.5405 13.5809 14.5361 12.9322 15.1431C12.2834 15.75 11.2856 15.75 9.29001 15.75H8.70999C6.71439 15.75 5.71659 15.75 5.06783 15.1431C4.41907 14.5361 4.3527 13.5405 4.21996 11.5493L3.875 6.375\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n opacity=\"0.5\"\r\n d=\"M4.875 4.5C4.91691 4.5 4.93786 4.5 4.95686 4.49952C5.57444 4.48387 6.11927 4.09118 6.32941 3.51024C6.33588 3.49237 6.3425 3.47249 6.35576 3.43273L6.42857 3.21429C6.49073 3.02781 6.52181 2.93457 6.56304 2.8554C6.72751 2.53955 7.03181 2.32023 7.38346 2.26407C7.4716 2.25 7.56988 2.25 7.76645 2.25H10.2336C10.4301 2.25 10.5284 2.25 10.6165 2.26407C10.9682 2.32023 11.2725 2.53955 11.437 2.8554C11.4782 2.93457 11.5093 3.02781 11.5714 3.21429L11.6442 3.43273C11.6575 3.47244 11.6641 3.49238 11.6706 3.51024C11.8807 4.09118 12.4256 4.48387 13.0431 4.49952C13.0621 4.5 13.0831 4.5 13.125 4.5\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function RedTrashBin({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 30 30\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M17.5 12.5V21.25M12.5 12.5V21.25M7.5 7.5V22.25C7.5 23.6501 7.5 24.3497 7.77248 24.8845C8.01217 25.3549 8.39434 25.7381 8.86475 25.9778C9.399 26.25 10.0987 26.25 11.4961 26.25H18.5039C19.9013 26.25 20.6 26.25 21.1342 25.9778C21.6046 25.7381 21.9881 25.3549 22.2278 24.8845C22.5 24.3502 22.5 23.6513 22.5 22.2539V7.5M7.5 7.5H10M7.5 7.5H5M10 7.5H20M10 7.5C10 6.33515 10 5.75301 10.1903 5.29358C10.444 4.68101 10.9304 4.19404 11.543 3.9403C12.0024 3.75 12.5851 3.75 13.75 3.75H16.25C17.4149 3.75 17.9973 3.75 18.4567 3.9403C19.0693 4.19404 19.5558 4.68101 19.8096 5.29358C19.9999 5.75301 20 6.33515 20 7.5M20 7.5H22.5M22.5 7.5H25\"\r\n stroke={config?.stroke ?? '#DC3545'}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Layers({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 30 30\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M26.25 15L15 22.5L3.75 15M26.25 20L15 27.5L3.75 20M26.25 10L15 17.5L3.75 10L15 2.5L26.25 10Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function PdfIcon({ config, className }: IconProps) {\r\n const width = config?.width ?? 18;\r\n const height = config?.height ?? 18;\r\n return (\r\n <svg\r\n className={className}\r\n width={width}\r\n height={height}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <rect x=\"4\" y=\"2.5\" width=\"16\" height=\"19\" rx=\"2\" fill={config?.fill ?? '#b91c1c'} />\r\n <path\r\n d=\"M8 15.2V8.8h1.7c1.15 0 1.85.62 1.85 1.55 0 .92-.7 1.52-1.85 1.52H9.15v3.33H8Zm1.15-4.4h.5c.52 0 .82-.28.82-.68 0-.4-.3-.67-.82-.67h-.5v1.35Zm4.05 4.4V8.8h2.35c1.55 0 2.5.88 2.5 2.2 0 1.33-.95 2.22-2.5 2.22h-1.2v1.98h-1.15Zm1.15-3.05h1.1c.72 0 1.18-.4 1.18-1.05 0-.66-.46-1.04-1.18-1.04h-1.1v2.09Z\"\r\n fill=\"#fff\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Excel({ config, className }: IconProps) {\r\n const width = config?.width ?? 18;\r\n const height = config?.height ?? 18;\r\n const fill = config?.fill ?? '#585858';\r\n return (\r\n <svg\r\n className={className}\r\n width={width}\r\n height={height}\r\n viewBox=\"0 0 32 32\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M28.8 4.4H18.7V2L2 4.6v22.5l16.7 2.9v-3.6h10.1a1.2 1.2 0 0 0 1.2-1.1V5.5a1.2 1.2 0 0 0-1.2-1.1zm.1 21.1H18.6v-1.9h2.5v-2.2h-2.5v-1.3h2.5v-2.2h-2.5v-1.3h2.5v-2.2h-2.5v-1.3h2.5v-2.2h-2.5v-1.3h2.5v-2.2h-2.5v-2h10.3zM22.5 7.4h4.3v2.2h-4.3zm0 3.5h4.3v2.2h-4.3zm0 3.5h4.3v2.2h-4.3zm0 3.5h4.3v2.2h-4.3zm0 3.5h4.3v2.2h-4.3z\"\r\n fill={fill}\r\n fillRule=\"evenodd\"\r\n />\r\n <path\r\n d=\"M6.3 10.7l2.2-.1 1.3 3.7 1.6-3.9 2.2-.1-2.6 5.2 2.6 5.3-2.3-.2-1.5-4-1.5 3.9-2.1-.2 2.4-4.6z\"\r\n fill=\"#fff\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function ExcelImport({ config, className }: IconProps) {\r\n const width = config?.width ?? 18;\r\n const height = config?.height ?? 18;\r\n return (\r\n <svg\r\n className={className}\r\n width={width}\r\n height={height}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <rect x=\"3\" y=\"2.5\" width=\"18\" height=\"19\" rx=\"2\" fill={config?.fill ?? '#217346'} />\r\n <path\r\n d=\"M12 7v7.5M8.8 12.2 12 15.4l3.2-3.2M7.5 17.5h9\"\r\n stroke=\"#fff\"\r\n strokeWidth=\"1.6\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function SpinIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden\r\n >\r\n <path\r\n fill={config?.fill}\r\n className={!config?.fill ? 'fill-gray-gray6' : undefined}\r\n d=\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\"\r\n opacity=\".25\"\r\n />\r\n <path\r\n fill={config?.fill}\r\n className={!config?.fill ? 'fill-gray-gray7' : undefined}\r\n d=\"M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z\"\r\n >\r\n <animateTransform\r\n attributeName=\"transform\"\r\n type=\"rotate\"\r\n dur=\"0.75s\"\r\n values=\"0 12 12;360 12 12\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </path>\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Magnifier({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 18 18\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <circle\r\n cx=\"8.625\"\r\n cy=\"8.625\"\r\n r=\"7.125\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n />\r\n <path\r\n d=\"M13.875 13.875L16.5 16.5\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function LeftChevron({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M14 16L10 12L14 8\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function RightChevron({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M10 8L14 12L10 16\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function InfoIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M12 11V16M12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21ZM12.0498 8V8.1L11.9502 8.1002V8H12.0498Z\"\r\n stroke={config?.stroke ?? '#086EDC'}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function NoData({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 60}\r\n height={config?.height ?? 60}\r\n viewBox=\"0 0 145 145\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M103.121 123.752L91.725 112.357M89.378 20.631C88.721 20.625 87.982 20.625 87.139 20.625H56.376C48.676 20.625 44.822 20.625 41.881 22.124C39.294 23.442 37.192 25.544 35.874 28.131C34.375 31.072 34.375 34.926 34.375 42.626V122.376C34.375 130.077 34.375 133.925 35.874 136.867C37.192 139.454 39.294 141.56 41.881 142.878C44.819 144.375 48.668 144.375 56.354 144.375L108.646 144.375C116.332 144.375 120.175 144.375 123.113 142.878C125.701 141.56 127.81 139.454 129.128 136.867C130.625 133.928 130.625 130.085 130.625 122.4V64.114C130.625 63.271 130.624 62.532 130.618 61.875M89.378 20.631C91.34 20.649 92.577 20.722 93.763 21.006C95.165 21.343 96.51 21.899 97.74 22.653C99.128 23.503 100.319 24.694 102.695 27.07L124.183 48.558C126.561 50.936 127.743 52.122 128.594 53.51C129.348 54.74 129.905 56.081 130.242 57.484C130.527 58.67 130.6 59.913 130.618 61.875M89.378 20.631L89.375 39.876C89.375 47.577 89.375 51.426 90.874 54.367C92.192 56.955 94.294 59.059 96.881 60.378C99.82 61.875 103.668 61.875 111.354 61.875H130.618M79.063 116.875C69.57 116.875 61.875 109.18 61.875 99.688C61.875 90.195 69.57 82.5 79.063 82.5C88.555 82.5 96.25 90.195 96.25 99.688C96.25 109.18 88.555 116.875 79.063 116.875Z\"\r\n className={!config?.stroke ? 'stroke-gray-gray6' : undefined}\r\n stroke={config?.stroke}\r\n strokeWidth=\"6\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M84.5 105.5L79 100M79 100L73.5 94.5M79 100L84.5 94.5M79 100L73.5 105.5\"\r\n className={!config?.stroke ? 'stroke-gray-gray85' : undefined}\r\n stroke={config?.stroke}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function DragIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 16}\r\n height={config?.height ?? 16}\r\n viewBox=\"0 0 21 22\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path d=\"M10.5 2L10.5 20\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M11 2L14 5\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M1 11L4 14\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M17 8L20 11\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M7 17L10 20\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M10 2L7 5\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M14 17L11 20\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M20 11L17 14\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M4 8L1 11\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M1 11L20 11\" className={strokeClass(config)} stroke={config?.stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Expand({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M10 19H5V14M14 5H19V10\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Undo({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M10 8H5V3M5.29102 16.3569C6.22284 17.7918 7.59014 18.8902 9.19218 19.4907C10.7942 20.0913 12.547 20.1624 14.1925 19.6937C15.8379 19.225 17.2893 18.2413 18.3344 16.8867C19.3795 15.5321 19.963 13.878 19.9989 12.1675C20.0347 10.4569 19.5211 8.78001 18.5337 7.38281C17.5462 5.98561 16.1366 4.942 14.5122 4.40479C12.8878 3.86757 11.1341 3.86499 9.5083 4.39795C7.88252 4.93091 6.47059 5.97095 5.47949 7.36556\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Dots({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M11 18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18C13 17.4477 12.5523 17 12 17C11.4477 17 11 17.4477 11 18Z\"\r\n className={!config?.fill ? 'fill-gray-gray10' : undefined}\r\n fill={config?.fill}\r\n />\r\n <path\r\n d=\"M11 12C11 12.5523 11.4477 13 12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12Z\"\r\n className={!config?.fill ? 'fill-gray-gray10' : undefined}\r\n fill={config?.fill}\r\n />\r\n <path\r\n d=\"M11 6C11 6.55228 11.4477 7 12 7C12.5523 7 13 6.55228 13 6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6Z\"\r\n className={!config?.fill ? 'fill-gray-gray10' : undefined}\r\n fill={config?.fill}\r\n />\r\n <path\r\n d=\"M11 18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18C13 17.4477 12.5523 17 12 17C11.4477 17 11 17.4477 11 18Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"0.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M11 12C11 12.5523 11.4477 13 12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"0.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M11 6C11 6.55228 11.4477 7 12 7C12.5523 7 13 6.55228 13 6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6Z\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"0.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function SavePlus({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M17 21.0002L7 21M17 21.0002L17.8031 21C18.921 21 19.48 21 19.9074 20.7822C20.2837 20.5905 20.5905 20.2843 20.7822 19.908C21 19.4806 21 18.921 21 17.8031V9.21955C21 8.77072 21 8.54521 20.9521 8.33105C20.9095 8.14 20.8393 7.95652 20.7432 7.78595C20.6366 7.59674 20.487 7.43055 20.1929 7.10378L17.4377 4.04241C17.0969 3.66374 16.9242 3.47181 16.7168 3.33398C16.5303 3.21 16.3242 3.11858 16.1073 3.06287C15.8625 3 15.5998 3 15.075 3H6.2002C5.08009 3 4.51962 3 4.0918 3.21799C3.71547 3.40973 3.40973 3.71547 3.21799 4.0918C3 4.51962 3 5.08009 3 6.2002V17.8002C3 18.9203 3 19.4796 3.21799 19.9074C3.40973 20.2837 3.71547 20.5905 4.0918 20.7822C4.5192 21 5.07899 21 6.19691 21H7M17 21.0002V17.1969C17 16.079 17 15.5192 16.7822 15.0918C16.5905 14.7155 16.2837 14.4097 15.9074 14.218C15.4796 14 14.9203 14 13.8002 14H10.2002C9.08009 14 8.51962 14 8.0918 14.218C7.71547 14.4097 7.40973 14.7155 7.21799 15.0918C7 15.5196 7 16.0801 7 17.2002V21M15 7H9\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <circle\r\n cx=\"18.5\"\r\n cy=\"18.5\"\r\n r=\"4.75\"\r\n stroke={config?.stroke}\r\n fill={config?.fill}\r\n className={!config?.stroke && !config?.fill ? 'fill-white stroke-gray-gray3' : undefined}\r\n strokeWidth=\"1.5\"\r\n />\r\n <path\r\n d=\"M18.5 20.7498L18.5 18.3673M18.5 18.3673C18.5 18.3673 18.5 16.2498 18.5 16.0998M18.5 18.3673L20.9 18.3673M18.5 18.3673L16.1 18.3673\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"0.8\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Reload({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 16}\r\n height={config?.height ?? 16}\r\n viewBox=\"0 0 24 24\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M10 16H5V21M14 8H19V3M4.58301 9.0034C5.14369 7.61566 6.08244 6.41304 7.29255 5.53223C8.50266 4.65141 9.93686 4.12752 11.4298 4.02051C12.9227 3.9135 14.4147 4.2274 15.7381 4.92661C17.0615 5.62582 18.1612 6.68254 18.9141 7.97612M19.4176 14.9971C18.8569 16.3848 17.9181 17.5874 16.708 18.4682C15.4979 19.3491 14.0652 19.8723 12.5723 19.9793C11.0794 20.0863 9.58606 19.7725 8.2627 19.0732C6.93933 18.374 5.83882 17.3175 5.08594 16.0239\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function MoonIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M21 14.3A8.5 8.5 0 0 1 9.7 3 7.5 7.5 0 1 0 21 14.3Z\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function SunIcon({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n width={config?.width ?? 18}\r\n height={config?.height ?? 18}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden\r\n >\r\n <circle\r\n className={strokeClass(config)}\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"4\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n />\r\n <path\r\n className={strokeClass(config)}\r\n d=\"M12 3v1.5M12 19.5V21M4.93 4.93l1.06 1.06M17.99 17.99l1.06 1.06M3 12h1.5M19.5 12H21M4.93 19.07l1.06-1.06M17.99 6.01l1.06-1.06\"\r\n stroke={config?.stroke}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function EditPencil({ config, className }: IconProps) {\r\n return (\r\n <svg\r\n className={className}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={config?.width ?? 16}\r\n height={config?.height ?? 16}\r\n viewBox=\"0 0 20 20\"\r\n fill={config?.fill ?? 'none'}\r\n aria-hidden\r\n >\r\n <path\r\n d=\"M3.3335 16.6668H16.6668M3.3335 16.6668V13.3334L10.0002 6.66676M3.3335 16.6668L6.66683 16.6667L13.3335 10.0001M10.0002 6.66676L12.3907 4.27622L12.3921 4.2748C12.7212 3.94573 12.886 3.7809 13.076 3.71917C13.2434 3.66479 13.4237 3.66479 13.5911 3.71917C13.7809 3.78086 13.9456 3.9455 14.2742 4.2741L15.724 5.72393C16.054 6.05394 16.2191 6.21903 16.2809 6.4093C16.3353 6.57667 16.3353 6.75696 16.2809 6.92433C16.2191 7.11447 16.0543 7.2793 15.7247 7.60884L15.724 7.60955L13.3335 10.0001M10.0002 6.66676L13.3335 10.0001\"\r\n className={strokeClass(config)}\r\n stroke={config?.stroke}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\n\r\nimport { LeftChevron, RightChevron } from './icons';\r\nimport { CustomButton } from './chrome';\r\n\r\ntype Props = {\r\n current: number;\r\n pageSize: number;\r\n total: number;\r\n onChange?: (page: number) => void;\r\n onShowSizeChange?: (page: number, pageSize: number) => void;\r\n pageSizeOptions?: string[];\r\n showSizeChanger?: boolean;\r\n showTotal?: (total: number) => React.ReactNode;\r\n prevIcon?: React.ReactNode;\r\n nextIcon?: React.ReactNode;\r\n jumpNextIcon?: React.ReactNode;\r\n jumpPrevIcon?: React.ReactNode;\r\n locale?: { items_per_page?: string };\r\n showTitle?: boolean;\r\n className?: string;\r\n direction?: 'rtl' | 'ltr';\r\n};\r\n\r\nexport function Pagination({\r\n current,\r\n pageSize,\r\n total,\r\n onChange,\r\n onShowSizeChange,\r\n pageSizeOptions = ['10', '20', '50', '100'],\r\n showSizeChanger,\r\n showTotal,\r\n prevIcon,\r\n nextIcon,\r\n className,\r\n direction = 'rtl',\r\n}: Props) {\r\n const options = pageSizeOptions.includes(String(pageSize))\r\n ? pageSizeOptions\r\n : [String(pageSize), ...pageSizeOptions];\r\n const totalPages = Math.max(1, Math.ceil((total || 0) / (pageSize || 1)));\r\n const pages: Array<number | 'gap'> = [];\r\n for (let i = 1; i <= totalPages; i += 1) {\r\n if (totalPages <= 7 || i === 1 || i === totalPages || Math.abs(i - current) <= 1) {\r\n pages.push(i);\r\n } else if (pages[pages.length - 1] !== 'gap') {\r\n pages.push('gap');\r\n }\r\n }\r\n\r\n return (\r\n <div className={`erp-table-pagination ${className ?? ''}`}>\r\n {showTotal ? showTotal(total) : null}\r\n <div className=\"erp-table-pagination__pages\">\r\n <button\r\n type=\"button\"\r\n className=\"erp-table-pagination__nav\"\r\n disabled={current <= 1}\r\n onClick={() => onChange?.(current - 1)}\r\n >\r\n {prevIcon ??\r\n (direction === 'rtl' ? <RightChevron config={{ width: 14, height: 14 }} /> : <LeftChevron config={{ width: 14, height: 14 }} />)}\r\n </button>\r\n {pages.map((p, i) =>\r\n p === 'gap' ? (\r\n <span key={`g-${i}`}>...</span>\r\n ) : (\r\n <button\r\n key={p}\r\n type=\"button\"\r\n className={`erp-table-pagination__page ${p === current ? 'is-active' : ''}`}\r\n onClick={() => onChange?.(p)}\r\n >\r\n {p.toLocaleString(direction === 'rtl' ? 'fa-IR' : 'en-US')}\r\n </button>\r\n ),\r\n )}\r\n <button\r\n type=\"button\"\r\n className=\"erp-table-pagination__nav\"\r\n disabled={current >= totalPages}\r\n onClick={() => onChange?.(current + 1)}\r\n >\r\n {nextIcon ??\r\n (direction === 'rtl' ? <LeftChevron config={{ width: 14, height: 14 }} /> : <RightChevron config={{ width: 14, height: 14 }} />)}\r\n </button>\r\n </div>\r\n {showSizeChanger ? (\r\n <select\r\n value={String(pageSize)}\r\n onChange={(e) => onShowSizeChange?.(1, Number(e.target.value))}\r\n >\r\n {options.map((opt) => (\r\n <option key={opt} value={opt}>\r\n {Number(opt).toLocaleString(direction === 'rtl' ? 'fa-IR' : 'en-US')}\r\n </option>\r\n ))}\r\n </select>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n\r\nexport { CustomButton };\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\nimport { DatePicker, type DatePickerValue } from 'react-persian-range-picker';\r\n\r\nimport type { DateAdapter } from '../../application/ports/DateAdapter';\r\nimport { useDateAdapter, useERPTableTheme } from '../host';\r\n\r\ntype Props = {\r\n value?: unknown;\r\n onChange?: (value: unknown) => void;\r\n disabled?: boolean;\r\n className?: string;\r\n showMask?: boolean;\r\n /** Optional override; defaults to host `dateAdapter` (decides jalali / gregorian). */\r\n adapter?: DateAdapter;\r\n};\r\n\r\n/** Dark surfaces get the same muted highlight the arianERP host passes. */\r\nfunction isDarkBackground(color: string): boolean {\r\n const hex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(color.trim())?.[1];\r\n if (!hex) return false;\r\n const full = hex.length === 3 ? [...hex].map((c) => c + c).join('') : hex;\r\n const [r, g, b] = [0, 2, 4].map((i) => parseInt(full.slice(i, i + 2), 16));\r\n return 0.299 * r + 0.587 * g + 0.114 * b < 128;\r\n}\r\n\r\n/**\r\n * Date cell editor. Renders `DatePicker` from `react-persian-range-picker`\r\n * (required peer dependency) — the same component the arianERP host uses.\r\n * Calendar type follows the host {@link DateAdapter}: `jalali` for the\r\n * default `fa` locale, `gregorian` otherwise.\r\n *\r\n * Value contract (unchanged): timestamp in ms in, timestamp in ms (or\r\n * `null` when cleared) out.\r\n */\r\nexport function NewDatePicker({\r\n value,\r\n onChange,\r\n disabled,\r\n className,\r\n showMask,\r\n adapter: adapterProp,\r\n}: Props) {\r\n const hostAdapter = useDateAdapter();\r\n const adapter = adapterProp ?? hostAdapter;\r\n const theme = useERPTableTheme();\r\n const dark = isDarkBackground(theme.params.backgroundColor);\r\n\r\n return (\r\n <DatePicker\r\n value={\r\n typeof value === 'number' || typeof value === 'string'\r\n ? (value as DatePickerValue)\r\n : null\r\n }\r\n onChange={(next) => onChange?.(next)}\r\n className={`pdg-date-picker ${disabled ? 'is-disabled' : ''} ${className ?? ''}`}\r\n Style={{ width: '100%' }}\r\n showMask={showMask}\r\n disabled={disabled}\r\n isTodaySelectPreset={false}\r\n highlightColor={dark ? '#676767' : undefined}\r\n calendarType={adapter.id === 'gregory' ? 'gregorian' : 'jalali'}\r\n />\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nimport { resolveCellAddressFromPoint } from '../../infrastructure/ui/gridFillHandle';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\n\r\ntype FillHandleProps = {\r\n controller: UITableController;\r\n};\r\n\r\nexport function FillHandle({ controller }: FillHandleProps) {\r\n const onPointerDown = (event: React.PointerEvent<HTMLButtonElement>) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const copyOnly = event.ctrlKey;\r\n const handle = event.currentTarget;\r\n handle.setPointerCapture(event.pointerId);\r\n\r\n const onPointerUp = async (ev: PointerEvent) => {\r\n if (handle.hasPointerCapture(ev.pointerId)) {\r\n handle.releasePointerCapture(ev.pointerId);\r\n }\r\n window.removeEventListener('pointerup', onPointerUp);\r\n const cell = resolveCellAddressFromPoint(ev.clientX, ev.clientY);\r\n if (!cell) return;\r\n await controller.applyFillHandleDrag(\r\n { rowIndex: cell.rowIndex, colIndex: cell.colIndex },\r\n copyOnly,\r\n );\r\n };\r\n\r\n window.addEventListener('pointerup', onPointerUp);\r\n };\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className=\"pdg-fill-handle\"\r\n aria-label=\"Fill handle\"\r\n title=\"Drag to fill. Ctrl+drag to copy.\"\r\n onPointerDown={onPointerDown}\r\n />\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\n\r\nimport type { DateAdapter } from '../application/ports/DateAdapter';\r\nimport { FieldType } from '../bootstrap/type';\r\nimport {\r\n formatLocaleNumber,\r\n translate,\r\n type ERPTableLocale,\r\n type NumberingSystem,\r\n} from './host/messages';\r\n\r\nexport type FormatLocaleOptions = {\r\n locale?: ERPTableLocale;\r\n numberingSystem?: NumberingSystem;\r\n dateAdapter?: DateAdapter;\r\n};\r\n\r\n/** @deprecated Digits come from Intl numberingSystem (PR-127). Kept for search highlight. */\r\nexport function toFaDigits(value: string): string {\r\n const FA_DIGITS =\r\n '\\u06F0\\u06F1\\u06F2\\u06F3\\u06F4\\u06F5\\u06F6\\u06F7\\u06F8\\u06F9';\r\n return value.replace(/\\d/g, (digit) => FA_DIGITS[Number(digit)] ?? digit);\r\n}\r\n\r\nexport function formatGroupedNumber(\r\n val: unknown,\r\n locale: ERPTableLocale = 'fa',\r\n numberingSystem?: NumberingSystem,\r\n): string {\r\n if (val == null || val === '') return '';\r\n const n = Number(val);\r\n if (!Number.isFinite(n)) return String(val);\r\n return formatLocaleNumber(n, {\r\n locale,\r\n numberingSystem,\r\n useGrouping: true,\r\n });\r\n}\r\n\r\nexport function formatDisplayNumber(\r\n val: unknown,\r\n locale: ERPTableLocale = 'fa',\r\n numberingSystem?: NumberingSystem,\r\n): string {\r\n if (val == null || val === '') return '';\r\n const n = Number(val);\r\n if (Number.isFinite(n) && String(val).trim() !== '' && !Number.isNaN(n)) {\r\n if (/^-?\\d+(\\.\\d+)?$/.test(String(val).trim())) {\r\n return formatLocaleNumber(n, {\r\n locale,\r\n numberingSystem,\r\n useGrouping: false,\r\n });\r\n }\r\n }\r\n return String(val);\r\n}\r\n\r\nexport function formatJalaliDate(\r\n val: unknown,\r\n options?: FormatLocaleOptions,\r\n): string | null {\r\n if (val == null || val === '') return null;\r\n if (options?.dateAdapter) {\r\n const date = options.dateAdapter.parse(val);\r\n return date ? options.dateAdapter.format(date) : null;\r\n }\r\n const date =\r\n typeof val === 'number' ? new Date(val) : new Date(String(val));\r\n if (Number.isNaN(date.getTime())) return null;\r\n const locale = options?.locale ?? 'fa';\r\n const ns = options?.numberingSystem;\r\n return new Intl.DateTimeFormat(locale === 'fa' ? 'fa-IR' : 'en-US', {\r\n calendar: locale === 'fa' ? 'persian' : 'gregory',\r\n numberingSystem: ns,\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n }).format(date);\r\n}\r\n\r\nexport const valueParser = (\r\n val: unknown,\r\n type: FieldType,\r\n locale: ERPTableLocale = 'fa',\r\n numberingSystem?: NumberingSystem,\r\n dateAdapter?: DateAdapter,\r\n): ReactNode => {\r\n if (val == null) {\r\n return type === 'selectOption'\r\n ? translate('general.selectPlaceholder', locale)\r\n : '';\r\n }\r\n\r\n switch (type) {\r\n case 'text':\r\n case 'textArea':\r\n case 'description':\r\n case 'number':\r\n case 'select':\r\n case 'selectOption':\r\n case 'static':\r\n return formatDisplayNumber(val, locale, numberingSystem);\r\n\r\n case 'checkbox':\r\n return val ? '✔' : '✘';\r\n\r\n case 'price':\r\n return formatGroupedNumber(val, locale, numberingSystem);\r\n\r\n case 'date':\r\n return formatJalaliDate(val, { locale, numberingSystem, dateAdapter });\r\n\r\n default:\r\n return '—';\r\n }\r\n};\r\n","import React from 'react';\r\n\r\nimport { toFaDigits } from '../helper';\r\n\r\nfunction findHighlightRange(\r\n display: string,\r\n query: string,\r\n): { index: number; length: number } | null {\r\n const lowerText = display.toLowerCase();\r\n const seen = new Set<string>();\r\n for (const candidate of [query, toFaDigits(query)]) {\r\n const needle = candidate.toLowerCase();\r\n if (!needle || seen.has(needle)) continue;\r\n seen.add(needle);\r\n const index = lowerText.indexOf(needle);\r\n if (index !== -1) return { index, length: candidate.length };\r\n }\r\n return null;\r\n}\r\n\r\n/** Read-only cell text: wrap the current grid-search hit, otherwise return the string. */\r\nexport function highlightIfCurrentSearch(\r\n text: unknown,\r\n query: string | undefined,\r\n isCurrent: boolean | undefined,\r\n): React.ReactNode {\r\n const display = text == null ? '' : String(text);\r\n if (isCurrent && query?.trim()) {\r\n return highlightSearchText(display, query, true);\r\n }\r\n return display;\r\n}\r\n\r\nexport function highlightSearchText(\r\n text: unknown,\r\n query: string,\r\n isCurrent: boolean,\r\n): React.ReactNode {\r\n const display = text == null ? '' : String(text);\r\n const q = query.trim();\r\n if (!q) return display;\r\n\r\n const range = findHighlightRange(display, q);\r\n if (!range) return display;\r\n\r\n const markClass = isCurrent ? 'erp-search-hit is-current' : 'erp-search-hit';\r\n\r\n return (\r\n <>\r\n {display.slice(0, range.index)}\r\n <mark className={markClass}>\r\n {display.slice(range.index, range.index + range.length)}\r\n </mark>\r\n {display.slice(range.index + range.length)}\r\n </>\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\n\r\nimport type { ColumnSchema, DefaultOptionType } from '../../bootstrap/type';\r\nimport type { ValidCell } from '../../engine/type';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { UIRow } from '../type';\r\n\r\n/**\r\n * Argument passed to `ColumnSchema.render` / `ColumnViewBinding.render`.\r\n * Built-in FieldType editors are skipped when `render` is set.\r\n */\r\nexport interface CellRenderContext {\r\n tableKey: string;\r\n row: UIRow;\r\n columnId: string;\r\n meta: ColumnSchema;\r\n controller: UITableController;\r\n value: unknown;\r\n display: unknown;\r\n isActive: boolean;\r\n isDeleted: boolean;\r\n isEditable: boolean;\r\n mode: 'view' | 'cell' | 'form';\r\n tabIndex: number;\r\n validation: ValidCell;\r\n dispatchChangeValue: (newValue: unknown, option?: DefaultOptionType) => void;\r\n dispatchChangeDisplay: (label: string | null) => void;\r\n activeCell: () => void;\r\n /** Current grid-search query when this cell is the active hit (PR-71). */\r\n searchQuery?: string;\r\n isCurrentSearchMatch?: boolean;\r\n}\r\n\r\nexport type CustomCellResolveResult =\r\n | { hit: false }\r\n | { hit: true; node: ReactNode };\r\n\r\n/**\r\n * PR-54: custom `render` wins over the FieldType switch.\r\n * `returnDisplayValue` is not a renderer — it stays the engine display formatter.\r\n */\r\nexport function resolveCustomCellNode(\r\n meta: Pick<ColumnSchema, 'render'> | undefined,\r\n ctx: CellRenderContext,\r\n): CustomCellResolveResult {\r\n if (typeof meta?.render !== 'function') {\r\n return { hit: false };\r\n }\r\n return { hit: true, node: (meta.render(ctx) ?? null) as ReactNode };\r\n}\r\n","import { highlightIfCurrentSearch } from '../gridSearch/highlightText';\r\nimport type { CellRenderContext } from './cellRenderContext';\r\n\r\n/**\r\n * Default `textArea` editor (PR-56). Registered in DEFAULT_CELL_COMPONENTS —\r\n * not a `switch (FieldType)` case in CellRenderer.\r\n */\r\nexport function TextAreaCell(ctx: CellRenderContext) {\r\n const showSearchHit = !!(\r\n ctx.isCurrentSearchMatch && ctx.searchQuery?.trim()\r\n );\r\n const editing =\r\n !showSearchHit &&\r\n (ctx.mode === 'form' || (ctx.mode === 'cell' && ctx.isActive));\r\n const disabled = ctx.isDeleted || !ctx.isEditable;\r\n const text = ctx.value == null ? '' : String(ctx.value);\r\n\r\n if (!editing || disabled) {\r\n return (\r\n <span className=\"whitespace-pre-wrap break-words py-1 text-start\">\r\n {showSearchHit\r\n ? highlightIfCurrentSearch(text, ctx.searchQuery, true)\r\n : text || (ctx.mode === 'view' ? '—' : '')}\r\n </span>\r\n );\r\n }\r\n\r\n return (\r\n <textarea\r\n data-erp-cell-textarea\r\n autoFocus={ctx.mode !== 'form'}\r\n disabled={disabled}\r\n value={text}\r\n rows={2}\r\n className={`pdg-cell-editor w-full min-h-9 py-1 text-xs bg-transparent resize-none ${\r\n ctx.isDeleted ? 'cursor-not-allowed' : ''\r\n }`}\r\n onChange={(e) => ctx.dispatchChangeValue(e.target.value)}\r\n onClick={() => ctx.activeCell()}\r\n />\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\n\r\nimport type { ColumnSchema, FieldType } from '../../bootstrap/type';\r\nimport {\r\n resolveCustomCellNode,\r\n type CellRenderContext,\r\n type CustomCellResolveResult,\r\n} from './cellRenderContext';\r\nimport { TextAreaCell } from './TextAreaCell';\r\n\r\nexport type CellComponent = (ctx: CellRenderContext) => ReactNode;\r\n\r\n/**\r\n * Built-in FieldType keys plus free strings for host cell types (PR-56 `textArea`, …).\r\n */\r\nexport type CellComponentMap = Partial<Record<FieldType, CellComponent>> & {\r\n [customType: string]: CellComponent | undefined;\r\n};\r\n\r\nexport function resolveRegisteredCellNode(\r\n fieldType: string | undefined,\r\n components: CellComponentMap | undefined,\r\n ctx: CellRenderContext,\r\n): CustomCellResolveResult {\r\n if (!fieldType || !components) {\r\n return { hit: false };\r\n }\r\n const render = components[fieldType];\r\n if (typeof render !== 'function') {\r\n return { hit: false };\r\n }\r\n return { hit: true, node: (render(ctx) ?? null) as ReactNode };\r\n}\r\n\r\n/** Built-in registry. Host `components` override these keys. */\r\nexport const DEFAULT_CELL_COMPONENTS: CellComponentMap = {\r\n textArea: TextAreaCell,\r\n};\r\n\r\nexport function mergeCellComponents(\r\n host?: CellComponentMap,\r\n): CellComponentMap {\r\n return { ...DEFAULT_CELL_COMPONENTS, ...host };\r\n}\r\n\r\n/**\r\n * Column `render` (PR-54) wins; then `components[fieldType]` (PR-55/56);\r\n * miss → built-in FieldType switch.\r\n */\r\nexport function resolveBoundCellNode(\r\n meta: Pick<ColumnSchema, 'render' | 'fieldType'> | undefined,\r\n components: CellComponentMap | undefined,\r\n ctx: CellRenderContext,\r\n): CustomCellResolveResult {\r\n const column = resolveCustomCellNode(meta, ctx);\r\n if (column.hit) {\r\n return column;\r\n }\r\n return resolveRegisteredCellNode(\r\n meta?.fieldType,\r\n mergeCellComponents(components),\r\n ctx,\r\n );\r\n}\r\n","\"use client\";\r\nimport React, {\r\n forwardRef,\r\n Ref,\r\n useMemo,\r\n} from 'react';\r\n\r\nimport { ColumnSchema } from '../../../bootstrap/type';\r\nimport {\r\n UITableController,\r\n} from '../../../infrastructure/ui/UITableController';\r\nimport {\r\n buildDependencyBody,\r\n getDependFieldName,\r\n getStaticDependValue,\r\n hasDependValue,\r\n useHostDependOn,\r\n useLocale,\r\n useRemoteQuery,\r\n type DependValueResolver,\r\n} from '../../host';\r\nimport { highlightIfCurrentSearch } from '../../gridSearch/highlightText';\r\nimport {\r\n CustomDropdownButton,\r\n CustomTooltip,\r\n Dots,\r\n SavePlus,\r\n} from '../../primitives';\r\nimport { UIRow } from '../../type';\r\nimport {\r\n VoucherTypeApiResponse,\r\n} from './type';\r\n\r\nexport interface DescriptionComponentProps extends React.HTMLAttributes<HTMLDivElement> {\r\n disabled?: boolean;\r\n value?: unknown;\r\n onChange?: (e: unknown) => void;\r\n meta: ColumnSchema;\r\n controller: UITableController;\r\n tableKey: string;\r\n row: UIRow;\r\n columnId: string;\r\n idx: number;\r\n inputRef: Ref<HTMLInputElement | null>;\r\n isDeleted: boolean;\r\n editable: boolean;\r\n blockDrag: (e: React.DragEvent) => void;\r\n dispatchChangeValue: (newValue: unknown) => void;\r\n activeCell: () => void;\r\n searchQuery?: string;\r\n isCurrentSearchMatch?: boolean;\r\n}\r\nexport interface IDesc {\r\n AccountDescItemId: number;\r\n AccountDescId: number;\r\n Desc: string;\r\n}\r\n\r\nexport const DescriptionComponent = forwardRef<\r\n HTMLDivElement,\r\n DescriptionComponentProps\r\n>((props, ref) => {\r\n const locale = useLocale();\r\n const {\r\n meta,\r\n controller,\r\n tableKey,\r\n row,\r\n columnId,\r\n idx,\r\n inputRef,\r\n isDeleted,\r\n editable,\r\n value,\r\n blockDrag,\r\n dispatchChangeValue,\r\n activeCell,\r\n searchQuery,\r\n isCurrentSearchMatch,\r\n } = props;\r\n const showSearchHit = !!(isCurrentSearchMatch && searchQuery?.trim());\r\n const { endpoint, dependOn } = meta.dynamicSource ?? {};\r\n\r\n // Static value first, then the value the host resolves for that field\r\n // (e.g. the active page's form field).\r\n const { dependencyBody: hostValues } = useHostDependOn(dependOn, {\r\n enabled: true,\r\n });\r\n const resolveDepend: DependValueResolver = (item) =>\r\n getStaticDependValue(item) ?? hostValues[getDependFieldName(item)];\r\n const isReady = hasDependValue(dependOn, resolveDepend);\r\n const dependencyBody = buildDependencyBody(dependOn, resolveDepend);\r\n const { data: menuData } = useRemoteQuery<VoucherTypeApiResponse>({\r\n url: endpoint,\r\n body: {\r\n ...dependencyBody,\r\n RepoViewId: 0,\r\n RepoId: 0,\r\n PagingInfo: {\r\n PageNumber: 1,\r\n PageRecordCount: 10000,\r\n },\r\n },\r\n skip: !isReady,\r\n });\r\n const items = useMemo(\r\n () =>\r\n menuData?.Data?.map((item, index) => ({\r\n key: String(index),\r\n label: item.Desc,\r\n onClick: () => {\r\n meta.onChange?.(tableKey, row.id, row, controller,item.Desc);\r\n controller?.dispatch({\r\n type: \"UI_CELL_CHANGE\",\r\n rowId: row.id,\r\n columnId,\r\n value: item.Desc,\r\n });\r\n },\r\n })) || [],\r\n [menuData?.Data],\r\n );\r\nconst handleSaveDescription = ()=>{\r\n controller?.dispatch({\r\n type: \"UI_DESCRIPTION_SAVE\",\r\n rowId: row.id,\r\n flag:true\r\n });\r\n}\r\n return (\r\n <div className=\"flex justify-between items-center w-full\">\r\n {showSearchHit ? (\r\n <span\r\n className={`px-2 w-full text-xs truncate ${\r\n isDeleted ? 'cursor-not-allowed' : ''\r\n } ${meta.className ?? ''}`}\r\n onClick={() => activeCell()}\r\n >\r\n {highlightIfCurrentSearch(value, searchQuery, true)}\r\n </span>\r\n ) : (\r\n <input\r\n key={idx}\r\n ref={inputRef}\r\n disabled={isDeleted || !editable}\r\n value={value == null ? \"\" : String(value)}\r\n className={`${isDeleted && \"cursor-not-allowed\"}\r\n pdg-cell-editor bg-transparent px-2\r\n ring-0 focus:!ring-0 focus:ring-offset-0 transition-colors !h-full w-full text-xs ${meta.className}`}\r\n draggable={false}\r\n onDragStart={blockDrag}\r\n onDragOver={blockDrag}\r\n onDrop={blockDrag}\r\n onChange={(e) => dispatchChangeValue(e.target.value)}\r\n onClick={() => activeCell()}\r\n />\r\n )}\r\n\r\n <CustomDropdownButton\r\n placement={locale !== \"fa\" ? \"bottomRight\" : \"bottomLeft\"}\r\n className=\"flex justify-center items-center bg-gray-gray3 dark:!bg-gray-gray11 p-0 rounded !h-9 cursor-pointer\"\r\n items={items}\r\n dropdownClassName=\"max-h-[20rem] max-w-[40vw]\"\r\n >\r\n <span className=\"cursor-pointer\" id=\"descriptionsList\">\r\n <Dots />\r\n </span>\r\n </CustomDropdownButton>\r\n\r\n <CustomTooltip\r\n // title={isDisabled ? t(\"general.notActive\") : t(\"general.save\")}\r\n // className={`\r\n // bg-gray-gray3 flex justify-center items-center w-[2.125rem] h-[2.125rem] rounded\r\n // ${isDisabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"}\r\n // `}\r\n >\r\n <button\r\n onClick={() => {\r\n // if (!isDisabled) {\r\n handleSaveDescription();\r\n // }\r\n }}\r\n >\r\n <SavePlus\r\n config={{\r\n width: 18,\r\n height: 18,\r\n stroke: \"black\",\r\n }}\r\n />\r\n </button>\r\n </CustomTooltip>\r\n </div>\r\n );\r\n});\r\n\r\nDescriptionComponent.displayName = \"DescriptionComponent\";\r\n","\"use client\";\r\n\r\nimport React, { FC, useEffect, useMemo, useRef, useState } from 'react';\r\n\r\nimport {\r\n useHostDependOn,\r\n useLazyRemote,\r\n useTranslations,\r\n} from '../host';\r\nimport type { DependOn } from '../host/dependOn';\r\nimport { Reload, Select } from '../primitives';\r\nimport type { SelectOption as UiSelectOption } from '../primitives/Select';\r\n\r\n/**\r\n * Behavioural port of arianERP `atoms/defaultElements/dynamicSelect` (+ its\r\n * `CustomSelect` wrapper) onto the dependency-free `Select` primitive.\r\n * Redux / form-field (`config`), mobile and \"add new\" specifics are host\r\n * concerns and are intentionally not part of the package.\r\n */\r\n\r\ntype RemoteSelectOption = {\r\n _SelectId: string | number;\r\n _SelectValue?: string;\r\n _SelectDisplay?: string;\r\n};\r\nexport type MappedSelectOption = {\r\n key: string | number;\r\n value: string | number;\r\n label?: string;\r\n title?: string;\r\n option?: RemoteSelectOption;\r\n children?: MappedSelectOption[];\r\n};\r\ntype DynamicSelectSource = {\r\n endpoint?: string;\r\n repoViewId?: string;\r\n dependOn?: DependOn;\r\n [key: string]: unknown;\r\n};\r\n\r\nexport interface ERPTableDynamicSelectProps {\r\n className?: string;\r\n value?: unknown;\r\n onChange?: (value: unknown, option?: unknown) => void;\r\n dynamicValue?: DynamicSelectSource;\r\n showId?: boolean;\r\n infinite?: boolean;\r\n onSearchPhrase?: (\r\n correctOptionValue: number,\r\n correctOptionTitle?: string,\r\n option?: unknown,\r\n ) => void;\r\n /** Accepted for API parity; the select is always searchable (as in the host). */\r\n showSearch?: boolean;\r\n onOptionsChange?: (options: MappedSelectOption[]) => void;\r\n labelValue?: 'selectDisplay' | 'selectValue';\r\n selectFirstDefault?: boolean;\r\n displayFormatter?: (option: RemoteSelectOption) => string | undefined;\r\n disabled?: boolean;\r\n /** Reload icon. Shown unless explicitly `false` (host default). */\r\n showRefetch?: boolean;\r\n noCache?: boolean;\r\n /** Filters the loaded option list itself (e.g. `isUnique` columns). */\r\n filterOptions?: (option: MappedSelectOption) => boolean;\r\n /** Search-box matcher. Default: case-insensitive `label` contains. */\r\n filterOption?: (input: string, option: UiSelectOption) => boolean;\r\n options?: MappedSelectOption[];\r\n /** Label shown for `value` while it is not (yet) in the loaded options. */\r\n valueLabel?: string;\r\n onClear?: () => void;\r\n onClick?: () => void;\r\n autoFocus?: boolean;\r\n popupMatchSelectWidth?: number | boolean;\r\n popupRender?: (menu: React.ReactNode) => React.ReactNode;\r\n placeholder?: React.ReactNode;\r\n allowClear?: boolean;\r\n onSearch?: (value: string) => void;\r\n}\r\n\r\nconst PAGE_RECORD_COUNT = 5000;\r\nconst DEPEND_DEBOUNCE_MS = 808;\r\n\r\nconst findOptionWithTitle = (data: MappedSelectOption[], searchTerm: string) => {\r\n const results: MappedSelectOption[] = [];\r\n const search = (items: MappedSelectOption[]) => {\r\n items.forEach((item) => {\r\n if (\r\n String(item?.title ?? '').includes(searchTerm) ||\r\n String(item?.label ?? '').includes(searchTerm)\r\n ) {\r\n results.push(item);\r\n }\r\n if (item.children && item.children.length > 0) search(item.children);\r\n });\r\n };\r\n search(data);\r\n return results;\r\n};\r\n\r\nexport const ERPTableDynamicSelect: FC<ERPTableDynamicSelectProps> = ({\r\n className,\r\n value,\r\n onChange,\r\n dynamicValue,\r\n showId = false,\r\n infinite = false,\r\n onSearchPhrase,\r\n showSearch = true,\r\n onOptionsChange,\r\n labelValue = 'selectDisplay',\r\n selectFirstDefault = false,\r\n displayFormatter,\r\n disabled,\r\n showRefetch,\r\n filterOptions,\r\n valueLabel,\r\n options: externalOptions,\r\n onClear,\r\n onClick,\r\n autoFocus,\r\n popupMatchSelectWidth,\r\n popupRender,\r\n filterOption,\r\n placeholder,\r\n allowClear,\r\n onSearch,\r\n}) => {\r\n const t = useTranslations();\r\n const [options, setOptions] = useState<MappedSelectOption[]>([]);\r\n const [searchPhrase, setSearchPhrase] = useState<string | null>(null);\r\n const [pageNumber, setPageNumber] = useState(1);\r\n\r\n const {\r\n endpoint,\r\n repoViewId,\r\n // UI-only flag of the host's select config; never part of the request body.\r\n addButton: _addButton,\r\n dependOn,\r\n ...bodyRequest\r\n } = dynamicValue ?? {};\r\n\r\n const getOptionLabel = (option: RemoteSelectOption) => {\r\n if (displayFormatter) return displayFormatter(option);\r\n return option._SelectDisplay;\r\n };\r\n\r\n const [getData, { data, isFetching }] = useLazyRemote<RemoteSelectOption[]>();\r\n const { dependencyBody, dependencyKey, isReady } = useHostDependOn(dependOn, {\r\n enabled: false,\r\n unwrapObjectValue: true,\r\n });\r\n\r\n const body = {\r\n ...bodyRequest,\r\n ...dependencyBody,\r\n PagingInfo: infinite\r\n ? { PageRecordCount: PAGE_RECORD_COUNT, PageNumber: pageNumber }\r\n : null,\r\n RepoViewId: repoViewId,\r\n };\r\n const existBody = Object.fromEntries(\r\n Object.entries(body).filter(([, v]) => v !== null),\r\n );\r\n\r\n const handleRefetch = () => {\r\n setPageNumber(1);\r\n if (dependOn && !isReady) return;\r\n void getData({ url: endpoint, body: existBody });\r\n };\r\n\r\n useEffect(() => {\r\n if (!data?.Data) return;\r\n const dynamicOptions: MappedSelectOption[] = data.Data.map((option) => ({\r\n key: option._SelectId,\r\n value: option._SelectId,\r\n label:\r\n labelValue === 'selectValue'\r\n ? option._SelectValue\r\n : getOptionLabel(option),\r\n title: getOptionLabel(option),\r\n option,\r\n }));\r\n if (infinite) {\r\n if (pageNumber === 1) {\r\n setOptions(dynamicOptions);\r\n } else {\r\n setOptions((prev) => [...prev, ...dynamicOptions]);\r\n if (showId && selectFirstDefault) onChange?.(dynamicOptions[0]?.value);\r\n }\r\n } else {\r\n setOptions(dynamicOptions);\r\n }\r\n }, [data?.Data]);\r\n\r\n useEffect(() => {\r\n if (infinite && searchPhrase && searchPhrase.length > 2) setPageNumber(1);\r\n }, [searchPhrase]);\r\n\r\n useEffect(() => {\r\n if (onOptionsChange && options) onOptionsChange(options);\r\n if (selectFirstDefault) onChange?.(options[0]?.value);\r\n }, [options, onOptionsChange]);\r\n\r\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\r\n const target = e.currentTarget;\r\n const bottom = target.scrollHeight === target.scrollTop + target.clientHeight;\r\n if (infinite && bottom && !isFetching) {\r\n data?.ReturnCount === PAGE_RECORD_COUNT && setPageNumber((prev) => prev + 1);\r\n }\r\n };\r\n\r\n const filteredOptions = useMemo(() => {\r\n const source = externalOptions ?? options;\r\n if (!filterOptions) return source;\r\n return source.filter(filterOptions);\r\n }, [externalOptions, options, filterOptions]);\r\n\r\n const { selectOptions, selectValue } = useMemo(() => {\r\n if (value === null || value === undefined || value === '') {\r\n return { selectOptions: filteredOptions, selectValue: value };\r\n }\r\n const matched = filteredOptions.find(\r\n (option) => String(option.value) === String(value),\r\n );\r\n if (matched) {\r\n return { selectOptions: filteredOptions, selectValue: matched.value };\r\n }\r\n if (valueLabel) {\r\n return {\r\n selectOptions: [\r\n ...filteredOptions,\r\n { key: value as string | number, value: value as string | number, label: valueLabel, title: valueLabel },\r\n ],\r\n selectValue: value,\r\n };\r\n }\r\n return { selectOptions: filteredOptions, selectValue: value };\r\n }, [filteredOptions, value, valueLabel]);\r\n\r\n useEffect(() => {\r\n if (value === null || value === undefined) {\r\n setSearchPhrase(null);\r\n setPageNumber(1);\r\n }\r\n }, [value]);\r\n\r\n const dependOnKey = useMemo(\r\n () => (dependOn ? JSON.stringify(dependOn) : null),\r\n [dependOn],\r\n );\r\n\r\n const isFirstDependRun = useRef(true);\r\n useEffect(() => {\r\n if (isFirstDependRun.current) {\r\n isFirstDependRun.current = false;\r\n return undefined;\r\n }\r\n const debounce = setTimeout(() => {\r\n if (dependOn && isReady) {\r\n void getData({ url: endpoint, body: existBody });\r\n }\r\n }, DEPEND_DEBOUNCE_MS);\r\n return () => clearTimeout(debounce);\r\n }, [dependOnKey, dependencyKey]);\r\n\r\n useEffect(() => {\r\n if (isReady) void getData({ url: endpoint, body: existBody });\r\n }, []);\r\n\r\n return (\r\n <div className=\"relative\">\r\n <Select\r\n className={`pdg-dynamic-select ${disabled ? 'is-disabled' : ''} ${className ?? ''}`}\r\n value={selectValue}\r\n disabled={disabled}\r\n showSearch\r\n allowClear={allowClear ?? true}\r\n autoFocus={autoFocus}\r\n popupMatchSelectWidth={popupMatchSelectWidth}\r\n popupRender={popupRender}\r\n placeholder={\r\n placeholder ??\r\n (showSearch ? t('general.search') : t('general.selectField'))\r\n }\r\n optionRender={(originNode) => (\r\n <div\r\n style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', height: 'fit-content' }}\r\n >\r\n <span>{originNode.data.title}</span>\r\n </div>\r\n )}\r\n filterOption={(input, option) => {\r\n if (filterOption && typeof filterOption === 'function') {\r\n return filterOption(input, option);\r\n }\r\n const label = option?.label;\r\n return (\r\n typeof label === 'string' &&\r\n label.toLowerCase().includes(input.toLowerCase())\r\n );\r\n }}\r\n onClick={onClick}\r\n onChange={onChange}\r\n onSearch={(currentValue) => {\r\n if (infinite) {\r\n setSearchPhrase(currentValue);\r\n const correctOption = findOptionWithTitle(options, currentValue);\r\n if (correctOption.length === 1 && onSearchPhrase) {\r\n onSearchPhrase(\r\n correctOption[0].value as number,\r\n correctOption[0]?.title,\r\n correctOption,\r\n );\r\n return;\r\n }\r\n }\r\n onSearch?.(currentValue);\r\n }}\r\n onPopupScroll={handleScroll}\r\n onClear={() => {\r\n if (infinite) {\r\n setSearchPhrase('');\r\n setPageNumber(1);\r\n }\r\n onClear?.();\r\n }}\r\n options={selectOptions}\r\n notFoundContent={isFetching ? 'Loading...' : 'No options found'}\r\n />\r\n {showRefetch !== false && (\r\n <div\r\n className={`${isFetching ? 'animate-spin' : ''} ${disabled ? 'opacity-50' : 'opacity-100'}`}\r\n style={{ position: 'absolute', top: '0.65rem', left: '2rem', cursor: 'pointer', transition: 'all 0.4s' }}\r\n onClick={handleRefetch}\r\n >\r\n <Reload config={{ height: 16, width: 16 }} />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","\"use client\";\r\nimport React, { useEffect } from 'react';\r\n\r\nimport {\r\n ColumnSchema,\r\n DefaultOptionType,\r\n} from '../../bootstrap/type';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\nimport { ValidCell } from '../../engine/type';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { highlightIfCurrentSearch } from '../gridSearch/highlightText';\r\nimport { valueParser } from '../helper';\r\nimport {\r\n useDateAdapter,\r\n useERPTableHost,\r\n useNumberingSystem,\r\n} from '../host';\r\nimport { useGridSearchState } from '../hooks/useEngineSelector';\r\nimport {\r\n CustomCheckbox,\r\n InfoIcon,\r\n NewDatePicker,\r\n Select,\r\n Tooltip,\r\n} from '../primitives';\r\nimport { UIRow } from '../type';\r\nimport { type CellRenderContext } from './cellRenderContext';\r\nimport { resolveBoundCellNode } from './cellRegistry';\r\nimport { DescriptionComponent } from './descriptionComponent';\r\nimport { ERPTableDynamicSelect as DynamicSelect } from './ERPTableDynamicSelect';\r\n\r\nexport type { CellRenderContext } from './cellRenderContext';\r\nexport { resolveCustomCellNode } from './cellRenderContext';\r\nexport type { CellComponent, CellComponentMap } from './cellRegistry';\r\nexport {\r\n DEFAULT_CELL_COMPONENTS,\r\n mergeCellComponents,\r\n resolveBoundCellNode,\r\n resolveRegisteredCellNode,\r\n} from './cellRegistry';\r\nexport { TextAreaCell } from './TextAreaCell';\r\nexport {\r\n highlightIfCurrentSearch,\r\n highlightSearchText,\r\n} from '../gridSearch/highlightText';\r\n\r\n/* ======================================================\r\n Types\r\n ====================================================== */\r\n\r\ninterface CellRendererProps {\r\n tableKey: string;\r\n row: UIRow;\r\n columnId: string;\r\n idx: number;\r\n meta?: ColumnSchema;\r\n controller: UITableController;\r\n tabIndex: number;\r\n mode?: \"view\" | \"cell\" | \"form\";\r\n}\r\n\r\n/* ======================================================\r\n Cell Renderer\r\n ====================================================== */\r\n\r\n/** A cell without column meta renders nothing (the body keeps a stable hook order). */\r\nexport const CellRenderer: React.FC<CellRendererProps> = (props) =>\r\n props.meta ? <CellRendererBody {...props} meta={props.meta} /> : null;\r\n\r\nconst CellRendererBody: React.FC<CellRendererProps & { meta: ColumnSchema }> = ({\r\n tableKey,\r\n row,\r\n columnId,\r\n meta,\r\n controller,\r\n tabIndex,\r\n idx,\r\n mode = \"cell\",\r\n}) => {\r\n const dateHostRef = React.useRef<HTMLDivElement | null>(null);\r\n const { locale, components } = useERPTableHost();\r\n const numberingSystem = useNumberingSystem();\r\n const dateAdapter = useDateAdapter();\r\n const searchState = useGridSearchState(controller);\r\n const disable =\r\n typeof row.visibilityCondition[columnId] === \"boolean\" &&\r\n row.visibilityCondition[columnId] === false;\r\n const viewCell = controller.getCell(row.id, columnId);\r\n const draft = controller.getEditDraft(row.id, columnId);\r\n const value = draft ? draft.value : viewCell?.getValue();\r\n const display = draft ? draft.display : viewCell?.getDisplay();\r\n const isActive = controller.isActiveCell(row.id, columnId);\r\n const isEditing = controller.isEditingCell(row.id, columnId);\r\n const validation: ValidCell = controller.isValidCell(row.id, columnId) ?? {\r\n isValid: true,\r\n cellError: { rowId: row.id, caption: meta.fieldCaption, message: '' },\r\n };\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n const dispatchChangeValue = (\r\n newValue: unknown,\r\n option?: DefaultOptionType,\r\n ) => {\r\n meta.onChange?.(tableKey, row.id, row, controller, newValue, option);\r\n controller.dispatch({\r\n type: \"UI_CELL_CHANGE\",\r\n rowId: row.id,\r\n columnId,\r\n value: newValue,\r\n });\r\n };\r\n const dispatchChangeDisplay = (label: string | null) => {\r\n controller.dispatch({\r\n type: \"UI_CELL_CHANGE_DISPLAY\",\r\n rowId: row.id,\r\n columnId,\r\n value: label ?? '',\r\n });\r\n };\r\n const activeCell = (e?: React.MouseEvent) => {\r\n controller.dispatch({\r\n type: 'UI_ACTIVE_CELL',\r\n rowId: row.id,\r\n columnId,\r\n shiftKey: e?.shiftKey,\r\n ctrlKey: Boolean(e?.ctrlKey || e?.metaKey),\r\n });\r\n };\r\n const startEdit = () => {\r\n controller.startCellEdit(row.id, columnId);\r\n };\r\n\r\n const type = meta.fieldType;\r\n const isEditable = meta.editable !== false;\r\n const isDeleted = row.rowState === RowStateEnum.Deleted;\r\n const isCurrentSearchMatch =\r\n !!searchState &&\r\n searchState.currentIndex >= 0 &&\r\n searchState.matches[searchState.currentIndex]?.rowId === row.id &&\r\n searchState.matches[searchState.currentIndex]?.columnId === columnId;\r\n\r\n const renderCellContent = (cellText: unknown) => {\r\n const parsed = valueParser(\r\n cellText,\r\n meta.fieldType,\r\n locale,\r\n numberingSystem,\r\n dateAdapter,\r\n );\r\n return highlightIfCurrentSearch(\r\n parsed,\r\n searchState?.query,\r\n isCurrentSearchMatch,\r\n );\r\n };\r\n\r\n const blockDrag = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n\r\n useEffect(() => {\r\n const shouldFocus = mode === \"form\" || (mode === \"cell\" && isEditing);\r\n if (!shouldFocus) return;\r\n if (type === \"date\") {\r\n const id = window.setTimeout(() => {\r\n const el = dateHostRef.current?.querySelector(\r\n '[role=\"button\"][tabindex=\"0\"]',\r\n ) as HTMLElement | null;\r\n el?.focus();\r\n }, 0);\r\n return () => window.clearTimeout(id);\r\n }\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n if (mode !== \"form\") {\r\n inputRef.current.select();\r\n }\r\n }\r\n }, [isEditing, mode, type]);\r\n const cellRenderContext: CellRenderContext = {\r\n tableKey,\r\n row,\r\n columnId,\r\n meta,\r\n controller,\r\n value,\r\n display,\r\n isActive: !!isActive,\r\n isDeleted,\r\n isEditable,\r\n mode,\r\n tabIndex,\r\n validation,\r\n dispatchChangeValue,\r\n dispatchChangeDisplay,\r\n activeCell,\r\n searchQuery: searchState?.query,\r\n isCurrentSearchMatch,\r\n };\r\n\r\n const renderReadOnlyCell = (cellText: unknown) => (\r\n <span\r\n key={idx}\r\n className={`flex items-center px-2 w-full h-9 overflow-hidden text-xs text-ellipsis whitespace-nowrap ${meta.className}\r\n ${meta.fieldType === \"checkbox\" || meta.fieldType === \"price\" || meta.fieldType === \"number\" ? \"justify-center\" : \"justify-start\"}\r\n ${isCurrentSearchMatch ? \"ring-2 ring-yellow-400\" : \"\"}`}\r\n >\r\n <span className=\"truncate\">{renderCellContent(cellText)}</span>\r\n {!validation?.isValid && (\r\n <Tooltip title={validation?.cellError?.message}>\r\n <span>\r\n <InfoIcon config={{width: 18, height: 18, stroke: \"#f87171\"}} />\r\n </span>\r\n </Tooltip>\r\n )}\r\n </span>\r\n );\r\n\r\n if (disable) {\r\n if (mode === \"view\") {\r\n return (\r\n <span key={idx} className={`text-xs ${meta.className}`}>\r\n --\r\n </span>\r\n );\r\n }\r\n return (\r\n <span key={idx} className={` \"text-xs\" ${meta.className}`}>\r\n --\r\n </span>\r\n );\r\n }\r\n\r\n const customCell = resolveBoundCellNode(meta, components, cellRenderContext);\r\n if (customCell.hit) {\r\n const isColumnRender = typeof meta.render === 'function';\r\n return (\r\n <div\r\n key={idx}\r\n {...(isColumnRender\r\n ? { 'data-erp-custom-cell': columnId }\r\n : { 'data-erp-cell-component': type })}\r\n tabIndex={isDeleted ? -1 : tabIndex}\r\n className={`w-full h-full min-h-9 px-2 flex text-xs ${\r\n type === 'textArea' ? 'items-start' : 'items-center'\r\n } ${meta.className ?? ''} ${\r\n isDeleted ? 'cursor-not-allowed' : 'cursor-text'\r\n } ${isCurrentSearchMatch ? 'ring-2 ring-yellow-400' : ''}`}\r\n onClick={(e) => {\r\n if (!isDeleted) activeCell(e);\r\n }}\r\n >\r\n {customCell.node}\r\n </div>\r\n );\r\n }\r\n\r\n if (mode === \"view\") {\r\n return renderReadOnlyCell(display ?? value);\r\n }\r\n\r\n if (isEditable === false) {\r\n if (meta.fieldType === \"selectOption\") {\r\n return (\r\n <span key={idx} className={`text-xs text-start ${meta.className} `}>\r\n {value ? renderCellContent(value) : \"--\"}\r\n </span>\r\n );\r\n } else {\r\n return (\r\n <span key={idx} className={`text-xs ${meta.className} `}>\r\n {renderCellContent(value)}\r\n </span>\r\n );\r\n }\r\n } else if (\r\n mode !== \"form\" &&\r\n (!isEditing || isDeleted || isCurrentSearchMatch)\r\n ) {\r\n return (\r\n <>\r\n <button\r\n key={idx}\r\n tabIndex={tabIndex}\r\n disabled={isDeleted}\r\n className={` px-2 w-full \r\n text-start h-9 ${meta.className}\r\n ${isDeleted ? \"cursor-not-allowed \" : \"cursor-text\"}\r\n ${isCurrentSearchMatch ? \"ring-2 ring-yellow-400\" : \"\"}\r\n `}\r\n onClick={(e) => {\r\n activeCell(e);\r\n }}\r\n onDoubleClick={() => {\r\n if (!isDeleted && isEditable) startEdit();\r\n }}\r\n >\r\n <div\r\n className={`flex items-center w-full min-w-36 max-w-72 h-full overflow-hidden text-xs text-ellipsis whitespace-nowrap \r\n ${meta.fieldType === \"checkbox\" || meta.fieldType === \"price\" || meta.fieldType === \"number\" ? \"justify-center\" : \"justify-start\"}`}\r\n >\r\n <div className=\"truncate\">\r\n {renderCellContent(display ?? value)}\r\n {!validation?.isValid && (\r\n <Tooltip title={validation?.cellError?.message}>\r\n <span>\r\n <InfoIcon\r\n config={{width: 18, height: 18, stroke: \"#f87171\"}}\r\n />\r\n </span>\r\n </Tooltip>\r\n )}\r\n </div>\r\n </div>\r\n </button>\r\n </>\r\n );\r\n }\r\n\r\n switch (type) {\r\n case \"number\":\r\n return (\r\n <input\r\n key={idx}\r\n ref={inputRef}\r\n value={value === \"\" || value == null ? \"\" : Number(value)}\r\n disabled={isDeleted || !isEditable}\r\n className={`${isDeleted && \"cursor-not-allowed\"}\r\n pdg-cell-editor bg-transparent px-3\r\n ring-0 focus:!ring-0 \r\n focus:ring-offset-0 !h-full w-full text-xs transition-colors ${meta.className}`}\r\n draggable={false}\r\n onDragStart={blockDrag}\r\n onDragOver={blockDrag}\r\n onDrop={blockDrag}\r\n onChange={(e) =>\r\n dispatchChangeValue(\r\n e.target.value === \"\" ? \"\" : Number(e.target.value),\r\n )\r\n }\r\n />\r\n );\r\n case \"price\":\r\n return (\r\n <input\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n pattern=\"[0-9,]*\"\r\n min={0}\r\n key={idx}\r\n ref={inputRef}\r\n disabled={isDeleted || !isEditable}\r\n className={`${isDeleted && \"cursor-not-allowed\"}\r\n pdg-cell-editor bg-transparent px-3 !bg-white !rounded \r\n ring-0 focus:!ring-0 \r\n focus:ring-offset-0 h-9 w-full text-xs transition-colors \r\n ${meta.className}`}\r\n draggable={false}\r\n onDragStart={blockDrag}\r\n onDragOver={blockDrag}\r\n onDrop={blockDrag}\r\n value={\r\n value === \"\" || value == null\r\n ? \"\"\r\n : `${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n }\r\n onChange={(e) => {\r\n const inputValue = e.target.value;\r\n const parsedValue = inputValue.replace(/\\$\\s?|(,*)/g, \"\");\r\n if (parsedValue === \"\" || !isNaN(Number(parsedValue))) {\r\n dispatchChangeValue(\r\n parsedValue === \"\" ? \"\" : Number(parsedValue),\r\n );\r\n dispatchChangeDisplay(\r\n parsedValue === \"\"\r\n ? null\r\n : `${Number(parsedValue)}`.replace(\r\n /\\B(?=(\\d{3})+(?!\\d))/g,\r\n \",\",\r\n ),\r\n );\r\n }\r\n }}\r\n />\r\n );\r\n case \"date\":\r\n return (\r\n <div ref={dateHostRef} className=\"w-full h-full\">\r\n <NewDatePicker\r\n showMask\r\n className={`${meta.className}`}\r\n key={idx}\r\n disabled={isDeleted || !isEditable}\r\n value={\r\n value == null || value === ''\r\n ? undefined\r\n : typeof value === 'number'\r\n ? value\r\n : new Date(value as string).valueOf()\r\n }\r\n onChange={(v) => {\r\n dispatchChangeValue(v);\r\n }}\r\n />\r\n </div>\r\n );\r\n case \"checkbox\":\r\n return (\r\n <CustomCheckbox\r\n className={`${meta.className} w-full flex justify-center items-center`}\r\n key={idx}\r\n disabled={isDeleted || !isEditable}\r\n // value={value === true as boolean}\r\n checked={value === (true as boolean)}\r\n onChange={(e) => {\r\n dispatchChangeValue(e.target.checked);\r\n }}\r\n />\r\n );\r\n case \"select\":\r\n return (\r\n <Select\r\n key={idx}\r\n options={(meta?.options ?? []).map((opt) => ({\r\n value: opt.value,\r\n label: opt.label as React.ReactNode,\r\n }))}\r\n disabled={isDeleted || !isEditable}\r\n className={` h-9 ${isDeleted && \"cursor-not-allowed\"} ${meta.className}`}\r\n value={value}\r\n onClick={() => activeCell()}\r\n onChange={(v, o) => {\r\n dispatchChangeValue(v);\r\n const option = o as { label?: string } | undefined;\r\n if (option?.label) {\r\n dispatchChangeDisplay(option.label);\r\n } else {\r\n dispatchChangeDisplay('');\r\n }\r\n if (v) {\r\n controller.dispatch({\r\n type: \"UI_MOVE_ACTIVE_CELL\",\r\n rowId: row.id,\r\n columnId,\r\n direction: \"next\",\r\n });\r\n }\r\n }}\r\n />\r\n );\r\n case \"selectOption\": {\r\n const selectValue =\r\n value != null && value !== \"\" ? String(value) : undefined;\r\n\r\n return (\r\n <DynamicSelect\r\n labelValue={meta.labelValue}\r\n noCache={meta.noCache}\r\n key={`${row.id}-${columnId}`}\r\n showSearch\r\n infinite\r\n onSearchPhrase={(v, o) => {\r\n dispatchChangeValue(v);\r\n if (!Array.isArray(o)) {\r\n if (o) {\r\n dispatchChangeDisplay(o);\r\n } else {\r\n dispatchChangeDisplay(null);\r\n }\r\n }\r\n }}\r\n autoFocus={mode !== \"form\"}\r\n popupMatchSelectWidth={meta.popUpWidth}\r\n popupRender={(menu) => <div className=\"w-full\">{menu}</div>}\r\n disabled={isDeleted || !isEditable}\r\n // labelInValue is false in DynamicSelect — pass a primitive, not {value,label}\r\n value={selectValue}\r\n // Stored label for a value missing from the loaded options\r\n // (isUnique filter, >5000 entries, or before the fetch resolves).\r\n valueLabel={display != null && display !== \"\" ? String(display) : undefined}\r\n dynamicValue={meta?.dynamicSource}\r\n filterOption={(input, option) => {\r\n if (meta?.dynamicSelectFilterOption) {\r\n return meta.dynamicSelectFilterOption(input, option);\r\n }\r\n const label = option?.label;\r\n const remote = option.option;\r\n const display =\r\n typeof remote === 'object' &&\r\n remote !== null &&\r\n '_SelectDisplay' in remote &&\r\n typeof (remote as { _SelectDisplay?: unknown })._SelectDisplay ===\r\n 'string'\r\n ? (remote as { _SelectDisplay: string })._SelectDisplay\r\n : '';\r\n return (\r\n typeof label === 'string' &&\r\n display.toLowerCase().includes(input.toLowerCase())\r\n );\r\n }}\r\n filterOptions={(option) => {\r\n const unique = (controller.getAllRows() ?? []).some(\r\n (r) => r.getCell(columnId)?.getValue() === option.value,\r\n );\r\n if (meta.isUnique) {\r\n return !unique;\r\n }\r\n return true;\r\n }}\r\n className={`bg-white !border-[0.4px] !border-gray-gray7 h-9 ${meta.className} ${isDeleted && \"cursor-not-allowed\"} relative`}\r\n onClick={() => activeCell()}\r\n onChange={(v, o) => {\r\n dispatchChangeValue(v, o as DefaultOptionType);\r\n const option = o as { label?: string } | undefined;\r\n dispatchChangeDisplay(option?.label ?? '');\r\n if (v) {\r\n controller.dispatch({\r\n type: \"UI_MOVE_ACTIVE_CELL\",\r\n rowId: row.id,\r\n columnId,\r\n direction: \"next\",\r\n });\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n case \"static\":\r\n return (\r\n <span\r\n key={idx}\r\n tabIndex={tabIndex}\r\n className={` px-2 w-full h-full text-xs cursor-text ${meta.className}`}\r\n onClick={(e) => activeCell(e)}\r\n >\r\n {String(display ?? value ?? \"\") || \"—\"}\r\n </span>\r\n );\r\n case \"description\":\r\n return (\r\n <DescriptionComponent\r\n activeCell={activeCell}\r\n blockDrag={blockDrag}\r\n isDeleted={isDeleted}\r\n editable={isEditable}\r\n dispatchChangeValue={dispatchChangeValue}\r\n idx={idx}\r\n inputRef={inputRef}\r\n tableKey={tableKey}\r\n row={row}\r\n controller={controller}\r\n columnId={columnId}\r\n key={idx}\r\n disabled={isDeleted || !isEditable}\r\n value={value == null ? \"\" : String(value)}\r\n className={`${isDeleted && \"cursor-not-allowed\"}\r\n flex items-center bg-transparent px-2 pdg-cell-editor\r\n ring-0 focus:!ring-0 focus:ring-offset-0 h-8 transition-colors `}\r\n draggable={false}\r\n onDragStart={blockDrag}\r\n onDragOver={blockDrag}\r\n onDrop={blockDrag}\r\n onChange={(e) => dispatchChangeValue(e)}\r\n onClick={(e) => activeCell(e)}\r\n meta={meta}\r\n searchQuery={searchState?.query}\r\n isCurrentSearchMatch={isCurrentSearchMatch}\r\n />\r\n );\r\n case \"text\":\r\n default:\r\n return (\r\n <input\r\n key={idx}\r\n ref={inputRef}\r\n disabled={isDeleted || !isEditable}\r\n value={value == null ? \"\" : String(value)}\r\n className={`${isDeleted && \"cursor-not-allowed\"}\r\n pdg-cell-editor bg-transparent px-2\r\n ring-0 focus:ring-0! focus:ring-offset-0 transition-colors h-full! w-full text-xs ${meta.className}`}\r\n draggable={false}\r\n onDragStart={blockDrag}\r\n onDragOver={blockDrag}\r\n onDrop={blockDrag}\r\n onChange={(e) => dispatchChangeValue(e.target.value)}\r\n onClick={(e) => activeCell(e)}\r\n />\r\n );\r\n }\r\n};\r\n","import {\r\n formatLocaleNumber,\r\n useLocale,\r\n useNumberingSystem,\r\n useTranslations,\r\n} from '../host';\r\nimport {\r\n CustomDropdownButton,\r\n CustomCheckbox,\r\n Dots,\r\n DragIcon,\r\n Expand,\r\n RedTrashBin,\r\n Undo,\r\n type DropdownItem,\r\n} from '../primitives';\r\n\r\nimport { ColumnSchema } from '../../bootstrap/type';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { UIRow } from '../type';\r\n\r\ninterface IndexColProps {\r\n tableKey: string;\r\n idx: number;\r\n row: UIRow;\r\n controller: UITableController;\r\n meta: ColumnSchema;\r\n}\r\n\r\nexport const IndexCol: React.FC<IndexColProps> = ({\r\n idx,\r\n tableKey,\r\n row,\r\n controller,\r\n meta,\r\n}) => {\r\n const t = useTranslations();\r\n const locale = useLocale();\r\n const numberingSystem = useNumberingSystem();\r\n\r\n const handleDeleteRow = () => {\r\n controller.dispatch({ type: \"ROW_DELETED\", rowId: row.id });\r\n };\r\n\r\n const handleCopyRow = () => {\r\n controller.dispatch({ type: \"DUPLICATE_ROW\", rowId: row.id });\r\n };\r\n\r\n const handleAddRow = () => {\r\n void controller.dispatch({ type: \"ADD_EMPTY_ROW\" });\r\n };\r\n\r\n const extraItems = (meta.indexOptions?.(tableKey, row.id, row, controller) ??\r\n []) as DropdownItem[];\r\n const items: DropdownItem[] = [\r\n {\r\n key: \"1\",\r\n label: (\r\n <span className=\"flex text-sm\" onClick={handleCopyRow}>\r\n {t(\"general.replicateRow\")}\r\n </span>\r\n ),\r\n extra: \"Ali + D\",\r\n },\r\n {\r\n key: \"2\",\r\n label: (\r\n <span className=\"flex text-sm\" onClick={handleAddRow}>\r\n {t(\"general.addNewRow\")}\r\n </span>\r\n ),\r\n extra: \"Alt + N\",\r\n },\r\n {\r\n type: \"divider\",\r\n },\r\n ...extraItems,\r\n ];\r\n\r\n const handleExpandRow = () => {\r\n controller.dispatch({ type: \"TOGGLE_ROW_EXPANDED\", rowId: row.id });\r\n };\r\n\r\n const handleSelectRow = (e: React.MouseEvent<HTMLInputElement>) => {\r\n if (!e.shiftKey && !e.ctrlKey && !e.altKey) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n controller.onRowSelect(row.id);\r\n }\r\n };\r\n\r\n const isDeleted = row.rowState === RowStateEnum.Deleted;\r\n const isSelectedRow = controller.isSelectedRow(row.id);\r\n\r\n return (\r\n <div\r\n className={`${isDeleted && \"cursor-not-allowed\"} flex justify-between items-center w-full gap-2 px-2 h-full relative`}\r\n >\r\n <div className=\"flex justify-start items-center gap-2\">\r\n {!isDeleted && (\r\n <CustomCheckbox\r\n disabled={isDeleted}\r\n checked={!!isSelectedRow}\r\n onClick={handleSelectRow}\r\n aria-label={`${t(\"general.selectRow\")} ${idx + 1}`}\r\n />\r\n )}\r\n <div className=\"w-[20px] text-xs text-center\">\r\n {formatLocaleNumber(idx + 1, { locale, numberingSystem })}\r\n </div>\r\n\r\n {meta.enableMoveButton && !isDeleted && (\r\n <div\r\n className=\"erp-table-index-btn cursor-grab active:cursor-grabbing\"\r\n draggable={false}\r\n onMouseDown={(e) => {\r\n const tr = e.currentTarget.closest(\"tr\");\r\n tr?.setAttribute(\"draggable\", \"true\");\r\n }}\r\n >\r\n <DragIcon config={{ width: 16, height: 16 }} />\r\n </div>\r\n )}\r\n\r\n {meta.enableDeleteButton && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleDeleteRow();\r\n }}\r\n className=\"erp-table-index-btn hover:bg-red-100\"\r\n >\r\n {!isDeleted ? (\r\n <RedTrashBin config={{ width: 18, height: 18 }} />\r\n ) : (\r\n <Undo config={{ width: 18, height: 18 }} />\r\n )}\r\n </button>\r\n )}\r\n\r\n {meta.enableExpandButton && (\r\n <button\r\n type=\"button\"\r\n onClick={handleExpandRow}\r\n className={`erp-table-index-btn z-20 ${\r\n isDeleted ? \"cursor-not-allowed \" : \"hover:bg-zinc-200\"\r\n } `}\r\n disabled={isDeleted}\r\n >\r\n <Expand config={{ width: 18, height: 18 }} />\r\n </button>\r\n )}\r\n </div>\r\n\r\n {meta.enableOptionsButton && !isDeleted && (\r\n <CustomDropdownButton\r\n placement=\"bottom\"\r\n className=\"flex m-0 p-0 rounded\"\r\n items={items}\r\n >\r\n <a className=\"cursor-pointer\" onClick={(e) => e.preventDefault()}>\r\n <Dots config={{ width: 18, height: 18 }} />\r\n </a>\r\n </CustomDropdownButton>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React, {\r\n useMemo,\r\n useState,\r\n} from 'react';\r\n\r\nimport { useTranslations } from '../host';\r\nimport { NoData } from '../primitives';\r\n\r\nimport { ColumnSchema } from '../../bootstrap/type';\r\nimport { columnSizeStyle } from '../../engine/columnWidth';\r\nimport {\r\n cellRangeClassName,\r\n cellRangeEdgeAttr,\r\n resolveCellRangePresentation,\r\n} from '../../engine/selection/cellRangePresentation';\r\nimport { resolveFillCorner } from '../../engine/selection/fillHandle';\r\nimport { FillHandle } from './FillHandle';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { ariaColIndex, ariaDataRowIndex, gridCellA11y } from '../a11y/gridRoles';\r\nimport { columnPinCellProps } from '../columnPin';\r\nimport { CellRenderer } from '../cellRenderer';\r\nimport { UIRow } from '../type';\r\nimport { useColumnWindowOrAll } from '../virtual/columnWindow';\r\nimport { ColumnWindowCells } from '../virtual/ColumnWindowCells';\r\nimport { IndexCol } from './indexCol';\r\n\r\ninterface ERPTableRowProps {\r\n row: UIRow;\r\n index: number;\r\n stripeIndex: number;\r\n /** Pinned-top row count for aria-rowindex offset (PR-116). */\r\n pinnedTopCount?: number;\r\n table: Pick<\r\n import('../../engine/type').TableViewState,\r\n 'columns' | 'columnWidths' | 'activeCell' | 'cellRanges'\r\n >;\r\n controller: UITableController;\r\n tableKey: string;\r\n draggedRowIdRef: React.MutableRefObject<number | null>;\r\n moreDetailComponent?: React.ComponentType<{data: unknown}>;\r\n isSelected: boolean;\r\n isActive: boolean;\r\n isCut: boolean;\r\n}\r\n\r\nfunction ERPTableRowComponent({\r\n row,\r\n index,\r\n stripeIndex,\r\n pinnedTopCount = 0,\r\n table,\r\n controller,\r\n tableKey,\r\n draggedRowIdRef,\r\n moreDetailComponent: MoreDetailComponent,\r\n isSelected: isSelectedRow,\r\n isActive: isActiveRow,\r\n isCut,\r\n}: ERPTableRowProps) {\r\n const t = useTranslations();\r\n const colWindow = useColumnWindowOrAll(\r\n table.columns ?? [],\r\n table.columnWidths,\r\n );\r\n const totalColSpan = colWindow.allVisible.length;\r\n const [dropZone, setDropZone] = useState<\"before\" | \"after\" | null>(null);\r\n const isDeleted = row.rowState === RowStateEnum.Deleted;\r\n const cellRanges = controller.getViewState()?.cellRanges ?? [];\r\n const columnOrder = (table.columns ?? [])\r\n .filter((c) => !c.hidden)\r\n .map((c) => c.fieldName);\r\n const fillCorner = resolveFillCorner(cellRanges, columnOrder);\r\n\r\n const rangeCellProps = (colId: string) => {\r\n const flags = resolveCellRangePresentation(\r\n { rowIndex: index, colId },\r\n cellRanges,\r\n );\r\n const edge = cellRangeEdgeAttr(flags);\r\n return {\r\n className: cellRangeClassName(flags),\r\n 'data-pdg-cell-range': flags.inRange ? 'true' : undefined,\r\n 'data-pdg-range-edge': edge,\r\n };\r\n };\r\n\r\n const handleRowClick = (e: React.MouseEvent) => {\r\n controller.onRowClick(row.id, {\r\n ctrlKey: e.ctrlKey,\r\n shiftKey: e.shiftKey,\r\n });\r\n };\r\n\r\n const handleSelectRow = (e: React.MouseEvent<HTMLElement>) => {\r\n const el = e.target as HTMLElement;\r\n if (el.tagName !== \"TR\") return;\r\n\r\n if (!e.shiftKey && !e.ctrlKey && !e.altKey) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n controller.onRowSelect(row.id);\r\n }\r\n };\r\n\r\n const handleDragStart = (\r\n e: React.DragEvent<HTMLTableRowElement>,\r\n rowId: number,\r\n ) => {\r\n draggedRowIdRef.current = rowId;\r\n e.dataTransfer.setData(\"text/plain\", String(rowId));\r\n e.dataTransfer.effectAllowed = \"move\";\r\n };\r\n\r\n const handleDragOverLocal = (e: React.DragEvent<HTMLTableRowElement>) => {\r\n e.preventDefault();\r\n const rect = e.currentTarget.getBoundingClientRect();\r\n const mouseY = e.clientY - rect.top;\r\n setDropZone(mouseY < rect.height / 2 ? \"before\" : \"after\");\r\n };\r\n\r\n const handleDropLocal = (e: React.DragEvent<HTMLTableRowElement>) => {\r\n e.preventDefault();\r\n if (!dropZone) return;\r\n\r\n const sourceId = draggedRowIdRef.current;\r\n if (!sourceId || sourceId === row.id) return;\r\n controller.dispatch({\r\n type: \"ROW_REORDERED\",\r\n draggedRowId: sourceId,\r\n droppedRowId: row.id,\r\n position: dropZone,\r\n });\r\n\r\n setDropZone(null);\r\n };\r\n\r\n const isGroupedLeaf =\r\n (controller.getRowGroupColumns?.()?.length ?? 0) > 0;\r\n\r\n const rowClass = useMemo(() => {\r\n const zebraClass = stripeIndex % 2 ? \"bg-blue-blue11\" : \"bg-main-white\";\r\n\r\n return `relative w-full border\r\n ${isActiveRow ? \"border-gray-gray8\" : \"border-gray-gray5\"}\r\n ${isSelectedRow && !isDeleted ? \"bg-blue-100\" : \"\"}\r\n ${\r\n isDeleted\r\n ? \"!bg-gray-gray5 absolute inset-0 line-through\"\r\n : isSelectedRow\r\n ? \"\"\r\n : zebraClass\r\n }\r\n ${isCut ? \" border-dashed opacity-30\" : \"\"}\r\n h-9 rounded \r\n `;\r\n }, [isActiveRow, isSelectedRow, isDeleted, stripeIndex, isCut]);\r\n\r\n return (\r\n <>\r\n <tr\r\n role=\"row\"\r\n aria-rowindex={ariaDataRowIndex(index, pinnedTopCount)}\r\n className={rowClass}\r\n data-rowid={row.id}\r\n data-pdg-row-loading={row.loading ? 'true' : undefined}\r\n aria-busy={row.loading ? true : undefined}\r\n style={isGroupedLeaf ? { paddingInlineStart: 20 } : undefined}\r\n draggable={!row.loading}\r\n onDragStart={(e) => handleDragStart(e, row.id)}\r\n onDragOver={handleDragOverLocal}\r\n onDrop={handleDropLocal}\r\n onClick={handleRowClick}\r\n onDoubleClick={handleSelectRow}\r\n >\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"td\"\r\n spacerRole=\"presentation\"\r\n renderColumn={(c, absoluteColIndex) => {\r\n const pin = columnPinCellProps(\r\n c,\r\n colWindow.startPinOffsets,\r\n colWindow.endPinOffsets,\r\n );\r\n const meta: ColumnSchema = {\r\n ...c,\r\n enableDeleteButton: c.enableDeleteButton ?? true,\r\n enableExpandButton: c.enableExpandButton ?? true,\r\n enableMoveButton: c.enableMoveButton ?? true,\r\n enableOptionsButton: c.enableOptionsButton ?? true,\r\n };\r\n\r\n if (row.loading) {\r\n const rangeProps = rangeCellProps(c.fieldName);\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(absoluteColIndex)}\r\n className={`p-0 h-full overflow-hidden border ${pin.className} ${rangeProps.className}`.trim()}\r\n data-columnid={c.fieldName}\r\n data-pdg-row-index={index}\r\n data-pdg-col-index={absoluteColIndex}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n data-pdg-cell-range={rangeProps['data-pdg-cell-range']}\r\n data-pdg-range-edge={rangeProps['data-pdg-range-edge']}\r\n style={{ ...columnSizeStyle(c, table.columnWidths, colWindow.layoutWidths), ...pin.style }}\r\n >\r\n <div className=\"pdg-row-skeleton\" data-pdg-skeleton>\r\n <span className=\"pdg-row-skeleton__bar\" />\r\n </div>\r\n </td>\r\n );\r\n }\r\n\r\n if (c.fieldName === \"index\" || c.fieldType === \"index\") {\r\n const rangeProps = rangeCellProps(c.fieldName);\r\n return (\r\n <td\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(absoluteColIndex)}\r\n {...gridCellA11y(tableKey, row.id, c.fieldName, table.activeCell)}\r\n className={`p-0 h-full overflow-hidden border ${pin.className} ${rangeProps.className}`.trim()}\r\n key={c.fieldName}\r\n data-columnid={c.fieldName}\r\n data-pdg-row-index={index}\r\n data-pdg-col-index={absoluteColIndex}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n data-pdg-cell-range={rangeProps['data-pdg-cell-range']}\r\n data-pdg-range-edge={rangeProps['data-pdg-range-edge']}\r\n style={{ ...columnSizeStyle(c, table.columnWidths, colWindow.layoutWidths), ...pin.style }}\r\n >\r\n <IndexCol\r\n idx={index}\r\n tableKey={tableKey}\r\n row={row}\r\n controller={controller}\r\n meta={meta}\r\n />\r\n </td>\r\n );\r\n }\r\n\r\n const rangeProps = rangeCellProps(c.fieldName);\r\n const showFillHandle =\r\n fillCorner?.rowIndex === index &&\r\n fillCorner.colId === c.fieldName;\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(absoluteColIndex)}\r\n {...gridCellA11y(tableKey, row.id, c.fieldName, table.activeCell)}\r\n className={`p-0 h-full overflow-hidden border relative ${pin.className} ${rangeProps.className}`.trim()}\r\n data-columnid={c.fieldName}\r\n data-pdg-row-index={index}\r\n data-pdg-col-index={absoluteColIndex}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n data-pdg-cell-range={rangeProps['data-pdg-cell-range']}\r\n data-pdg-range-edge={rangeProps['data-pdg-range-edge']}\r\n style={{ ...columnSizeStyle(c, table.columnWidths, colWindow.layoutWidths), ...pin.style }}\r\n >\r\n <CellRenderer\r\n idx={absoluteColIndex}\r\n tableKey={tableKey}\r\n row={row}\r\n columnId={c.fieldName}\r\n meta={meta}\r\n controller={controller}\r\n tabIndex={-1}\r\n mode=\"cell\"\r\n />\r\n {showFillHandle ? <FillHandle controller={controller} /> : null}\r\n </td>\r\n );\r\n }}\r\n />\r\n </tr>\r\n\r\n {row.isExpanded && (\r\n <tr role=\"row\">\r\n <td\r\n role=\"gridcell\"\r\n colSpan={totalColSpan}\r\n aria-colindex={1}\r\n aria-colspan={totalColSpan}\r\n >\r\n {MoreDetailComponent ? (\r\n <MoreDetailComponent data={row} />\r\n ) : (\r\n <div className=\"flex justify-center items-center bg-gray-100 shadow my-1 rounded transition-all duration-300\">\r\n <div className=\"flex flex-col items-center gap-2 m-12\">\r\n <NoData config={{width: 60, height: 60}} />\r\n <span className=\"text-gray-gray9 text-md\">\r\n {t(\"general.noData\")}\r\n </span>\r\n </div>\r\n </div>\r\n )}\r\n </td>\r\n </tr>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport const ERPTableRow = React.memo(ERPTableRowComponent, (prev, next) => {\r\n return (\r\n prev.row === next.row &&\r\n prev.index === next.index &&\r\n prev.stripeIndex === next.stripeIndex &&\r\n prev.controller === next.controller &&\r\n prev.tableKey === next.tableKey &&\r\n prev.isSelected === next.isSelected &&\r\n prev.isActive === next.isActive &&\r\n prev.isCut === next.isCut &&\r\n prev.table.columns === next.table.columns &&\r\n prev.table.columnWidths === next.table.columnWidths &&\r\n prev.table.activeCell?.rowId === next.table.activeCell?.rowId &&\r\n prev.table.activeCell?.columnId === next.table.activeCell?.columnId &&\r\n prev.table.cellRanges === next.table.cellRanges &&\r\n prev.moreDetailComponent === next.moreDetailComponent\r\n );\r\n});\r\n","import React, { Suspense, useRef } from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { ERPTableRow } from './eRPTableRow';\r\n\r\nconst ERPTableGroupRow = React.lazy(() =>\r\n import('./ERPTableGroupRow').then((m) => ({ default: m.ERPTableGroupRow })),\r\n);\r\n\r\ninterface Props {\r\n controller: UITableController;\r\n tableKey: string;\r\n moreDetailComponent?: React.ComponentType<{data: unknown}>;\r\n /** Shifts aria-rowindex when pinned-top rows are present (PR-116). */\r\n pinnedTopCount?: number;\r\n}\r\n\r\nexport function ERPTableBody({\r\n controller,\r\n tableKey,\r\n moreDetailComponent: MoreDetailComponent,\r\n pinnedTopCount = 0,\r\n}: Props) {\r\n const table = controller.getViewState();\r\n const dragRowId = useRef<number | null>(null);\r\n\r\n if (!table) return null;\r\n\r\n // Preserve UI index order (sort/filter/group — PR-120). Do not re-sort by index cell.\r\n const rows = table.rows;\r\n const hasGroups = rows.some((r) => r.rowKind === 'group');\r\n const displayRows = hasGroups\r\n ? rows\r\n : [...rows].sort(\r\n (a, b) =>\r\n Number(a.cells['index']?.value ?? 0) -\r\n Number(b.cells['index']?.value ?? 0),\r\n );\r\n\r\n return (\r\n <tbody className=\"w-full min-w-0 overflow-x-auto\" role=\"rowgroup\">\r\n <Suspense fallback={null}>\r\n {displayRows.map((row, index) => {\r\n const absIndex =\r\n index + (table.pagination.page - 1) * table.pagination.pageSize;\r\n if (row.rowKind === 'group') {\r\n return (\r\n <ERPTableGroupRow\r\n key={row.id}\r\n row={row}\r\n index={absIndex}\r\n pinnedTopCount={pinnedTopCount}\r\n table={table}\r\n controller={controller}\r\n tableKey={tableKey}\r\n isSelected={!!table.selectedRows?.[row.id]}\r\n isActive={!!controller.isActiveRow(row.id)}\r\n />\r\n );\r\n }\r\n return (\r\n <ERPTableRow\r\n key={row.id}\r\n row={row}\r\n stripeIndex={index}\r\n index={absIndex}\r\n pinnedTopCount={pinnedTopCount}\r\n table={table}\r\n controller={controller}\r\n tableKey={tableKey}\r\n draggedRowIdRef={dragRowId}\r\n moreDetailComponent={MoreDetailComponent}\r\n isSelected={!!table.selectedRows?.[row.id]}\r\n isActive={!!controller.isActiveRow(row.id)}\r\n isCut={!!controller.isCutRow(row.id)}\r\n />\r\n );\r\n })}\r\n </Suspense>\r\n </tbody>\r\n );\r\n}\r\n","import React, {\r\n ReactNode,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\n\r\nimport type { AggFuncName } from '../../domain/types/ColumnDef';\r\nimport { columnSizeStyle } from '../../engine/columnWidth';\r\nimport { isIndexColumn } from '../../engine/columnWidth';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { ariaColIndex, ariaFooterRowIndex } from '../a11y/gridRoles';\r\nimport { columnPinCellProps } from '../columnPin';\r\nimport { useLocale, useTranslations } from '../host';\r\nimport { valueParser } from '../helper';\r\nimport { useColumnWindowOrAll } from '../virtual/columnWindow';\r\nimport { ColumnWindowCells } from '../virtual/ColumnWindowCells';\r\n\r\n/** Multi-row footer aggregation chrome (PR-119 / RFC-002). */\r\nexport type FooterRowDef = {\r\n id: string;\r\n label?: string;\r\n /** Override column aggFunc for this row. */\r\n aggFunc?: AggFuncName;\r\n};\r\n\r\ninterface Props {\r\n controller: UITableController;\r\n footer?: boolean | ReactNode;\r\n footerRows?: readonly FooterRowDef[];\r\n dataRowCount?: number;\r\n pinnedTopCount?: number;\r\n pinnedBottomCount?: number;\r\n}\r\n\r\nconst DEFAULT_FOOTER_ROWS: FooterRowDef[] = [{ id: 'default' }];\r\n\r\nfunction resolveFooterRows(\r\n footer: boolean | ReactNode | undefined,\r\n footerRows: readonly FooterRowDef[] | undefined,\r\n): FooterRowDef[] | null {\r\n if (typeof footer !== 'boolean' || footer !== true) return null;\r\n if (footerRows && footerRows.length > 0) return [...footerRows];\r\n return DEFAULT_FOOTER_ROWS;\r\n}\r\n\r\nexport function ERPTableFooter({\r\n controller,\r\n footer,\r\n footerRows,\r\n dataRowCount,\r\n pinnedTopCount = 0,\r\n pinnedBottomCount = 0,\r\n}: Props) {\r\n const locale = useLocale();\r\n const t = useTranslations();\r\n const [aggs, setAggs] = useState<Record<string, unknown>>({});\r\n const table = controller.getViewState();\r\n const rows = useMemo(\r\n () => resolveFooterRows(footer, footerRows),\r\n [footer, footerRows],\r\n );\r\n\r\n useEffect(() => {\r\n const view = controller.getViewState();\r\n if (!view || !rows) return;\r\n if (controller.isPagedWindow()) {\r\n // Page-window mode: RAM holds ONE page, so totals must fold over the\r\n // whole dataset streamed from IndexedDB (O(batch) heap, never the full\r\n // row array). Footer totals are sums; other aggFuncs use the window.\r\n let off: (() => void) | undefined;\r\n let cancelled = false;\r\n void import('./pagedFooterTotals').then(({ subscribePagedTotals }) => {\r\n if (!cancelled) off = subscribePagedTotals(controller, view.columns ?? [], setAggs);\r\n });\r\n return () => {\r\n cancelled = true;\r\n off?.();\r\n };\r\n }\r\n setAggs(controller.getColumnAggs());\r\n const unsubscribe = controller.subscribeColumnAggs(setAggs);\r\n return () => {\r\n unsubscribe?.();\r\n };\r\n }, [controller, rows]);\r\n\r\n const colWindow = useColumnWindowOrAll(\r\n table?.columns ?? [],\r\n table?.columnWidths,\r\n );\r\n\r\n if (!table || !table.columns) return null;\r\n if (typeof footer !== 'boolean' || footer !== true) {\r\n if (!footer) return null;\r\n const visibleColumns = table.columns.filter((c) => !c.hidden);\r\n const cols = visibleColumns.length;\r\n const footerRowIndex = ariaFooterRowIndex(\r\n dataRowCount ?? table.pagination.totalRows,\r\n pinnedTopCount,\r\n pinnedBottomCount,\r\n );\r\n return (\r\n <tfoot role=\"rowgroup\" className=\"erp-table-footer\" data-erp-footer=\"\">\r\n <tr\r\n role=\"row\"\r\n aria-rowindex={footerRowIndex}\r\n className={`w-full border border-gray-gray5 bg-main-white h-9 rounded `}\r\n >\r\n <td\r\n role=\"gridcell\"\r\n colSpan={cols}\r\n aria-colindex={1}\r\n aria-colspan={cols}\r\n >\r\n {footer}\r\n </td>\r\n </tr>\r\n </tfoot>\r\n );\r\n }\r\n\r\n if (!rows) return null;\r\n const baseRowIndex = ariaFooterRowIndex(\r\n dataRowCount ?? table.pagination.totalRows,\r\n pinnedTopCount,\r\n pinnedBottomCount,\r\n );\r\n\r\n return (\r\n <tfoot role=\"rowgroup\" className=\"erp-table-footer\" data-erp-footer=\"\">\r\n {rows.map((rowDef, rowOffset) => (\r\n <tr\r\n key={rowDef.id}\r\n role=\"row\"\r\n aria-rowindex={baseRowIndex + rowOffset}\r\n data-pdg-footer-row={rowDef.id}\r\n className={`w-full border border-gray-gray5 bg-main-white !h-9 rounded `}\r\n >\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"td\"\r\n spacerRole=\"presentation\"\r\n renderColumn={(c, index) => {\r\n const pin = columnPinCellProps(\r\n c,\r\n colWindow.startPinOffsets,\r\n colWindow.endPinOffsets,\r\n );\r\n let content: React.ReactNode = null;\r\n if (isIndexColumn(c)) {\r\n content =\r\n rowDef.label ??\r\n (rowDef.id === 'sum' || rowDef.id === 'default'\r\n ? t('general.footerTotal')\r\n : rowDef.id === 'avg'\r\n ? t('general.footerAvg')\r\n : (rowDef.label ?? rowDef.id));\r\n } else if (rowDef.aggFunc) {\r\n const value = controller.getColumnAggValue(\r\n c.fieldName,\r\n rowDef.aggFunc,\r\n );\r\n content =\r\n value == null\r\n ? null\r\n : valueParser(value, c.fieldType, locale);\r\n } else {\r\n const value = aggs[c.fieldName];\r\n content =\r\n value == null\r\n ? null\r\n : valueParser(value, c.fieldType, locale);\r\n }\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(index)}\r\n className={pin.className}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n style={{\r\n ...columnSizeStyle(\r\n c,\r\n table.columnWidths,\r\n colWindow.layoutWidths,\r\n ),\r\n ...pin.style,\r\n }}\r\n >\r\n {content}\r\n </td>\r\n );\r\n }}\r\n />\r\n </tr>\r\n ))}\r\n </tfoot>\r\n );\r\n}\r\n","import { isIndexColumn, type ColumnWidthHint } from './columnWidth';\r\n\r\nexport type ColumnReorderHint = ColumnWidthHint & { fieldName: string };\r\n\r\n/**\r\n * Map a header drop onto the same indices `Table.reorderColumns` uses\r\n * (display order / `getActiveCollectionColumns`). Index column is not movable.\r\n */\r\nexport function resolveColumnReorder(\r\n columns: readonly ColumnReorderHint[],\r\n sourceField: string,\r\n destField: string,\r\n): { sourceIndex: number; destIndex: number } | null {\r\n const sourceIndex = columns.findIndex((c) => c.fieldName === sourceField);\r\n const destIndex = columns.findIndex((c) => c.fieldName === destField);\r\n if (sourceIndex < 0 || destIndex < 0 || sourceIndex === destIndex) {\r\n return null;\r\n }\r\n const source = columns[sourceIndex];\r\n const dest = columns[destIndex];\r\n if (!source || !dest) return null;\r\n if (isIndexColumn(source) || isIndexColumn(dest)) return null;\r\n return { sourceIndex, destIndex };\r\n}\r\n","/**\r\n * Column header menu item model (PR-114). Pure — no React/DOM.\r\n */\r\n\r\nimport type { ColumnSchema } from '../../domain/types/ColumnSchema';\r\nimport { resolveFilterUi } from './filterModel';\r\nimport { isHeaderColumnSortable } from './sortModel';\r\nimport { isIndexColumn } from '../columnWidth';\r\n\r\nexport type ColumnMenuBuiltInId =\r\n | 'sortAsc'\r\n | 'sortDesc'\r\n | 'sortNone'\r\n | 'filter'\r\n | 'hideColumn'\r\n | 'pinStart'\r\n | 'pinEnd'\r\n | 'pinNone'\r\n | 'autoSize'\r\n | 'columnsPanel'\r\n | 'separator';\r\n\r\nexport type ColumnMenuCustomItem = {\r\n name: string;\r\n label: string;\r\n disabled?: boolean;\r\n};\r\n\r\nexport type ColumnMenuItemDef =\r\n | ColumnMenuBuiltInId\r\n | ColumnMenuCustomItem;\r\n\r\nexport type ColumnMenuItemsConfig =\r\n | ColumnMenuItemDef[]\r\n | ((defaults: ColumnMenuItemDef[]) => ColumnMenuItemDef[]);\r\n\r\nexport type ColumnMenuBuildContext = {\r\n column: ColumnSchema;\r\n sortable: boolean;\r\n filterable: boolean;\r\n hideable: boolean;\r\n pinnable: boolean;\r\n};\r\n\r\nexport function isColumnMenuCustomItem(\r\n item: ColumnMenuItemDef,\r\n): item is ColumnMenuCustomItem {\r\n return typeof item === 'object' && item !== null && 'name' in item;\r\n}\r\n\r\nexport function isColumnFilterable(column: ColumnSchema): boolean {\r\n const ui = resolveFilterUi(column);\r\n return ui != null;\r\n}\r\n\r\n/**\r\n * Page-window grids (`persistence: 'paged-idb'`) hold ONE page in RAM, so a\r\n * header sort / filter would only reorder / hide the rows of that page. There\r\n * they are offered only on columns that opt in explicitly\r\n * (`columnDef.sortable: true` / `columnDef.filter`).\r\n */\r\nexport function isColumnSortableInGrid(\r\n column: ColumnSchema,\r\n pagedWindow: boolean,\r\n): boolean {\r\n if (!isHeaderColumnSortable(column)) return false;\r\n return !pagedWindow || column.columnDef?.sortable === true;\r\n}\r\n\r\nexport function isColumnFilterableInGrid(\r\n column: ColumnSchema,\r\n pagedWindow: boolean,\r\n): boolean {\r\n if (!isColumnFilterable(column)) return false;\r\n if (!pagedWindow) return true;\r\n const def = column.columnDef?.filter;\r\n return def != null && def !== false;\r\n}\r\n\r\nexport function buildDefaultColumnMenuItems(\r\n ctx: ColumnMenuBuildContext,\r\n): ColumnMenuItemDef[] {\r\n const items: ColumnMenuItemDef[] = [];\r\n if (ctx.sortable) {\r\n items.push('sortAsc', 'sortDesc', 'sortNone', 'separator');\r\n }\r\n if (ctx.filterable) items.push('filter');\r\n if (ctx.hideable) items.push('hideColumn');\r\n if (ctx.pinnable) {\r\n items.push('pinStart', 'pinEnd', 'pinNone', 'separator');\r\n }\r\n items.push('autoSize', 'columnsPanel');\r\n return items;\r\n}\r\n\r\nexport function resolveColumnMenuItems(\r\n column: ColumnSchema,\r\n config?: ColumnMenuItemsConfig,\r\n options?: { pagedWindow?: boolean },\r\n): ColumnMenuItemDef[] {\r\n const pagedWindow = options?.pagedWindow === true;\r\n const ctx: ColumnMenuBuildContext = {\r\n column,\r\n sortable: isColumnSortableInGrid(column, pagedWindow),\r\n filterable: isColumnFilterableInGrid(column, pagedWindow),\r\n hideable: !isIndexColumn(column),\r\n pinnable: !isIndexColumn(column),\r\n };\r\n const defaults = buildDefaultColumnMenuItems(ctx);\r\n if (!config) return defaults;\r\n if (typeof config === 'function') return config(defaults);\r\n return config;\r\n}\r\n\r\nexport function columnMenuItemLabelKey(id: ColumnMenuBuiltInId): string {\r\n switch (id) {\r\n case 'sortAsc':\r\n return 'columnMenu.sortAsc';\r\n case 'sortDesc':\r\n return 'columnMenu.sortDesc';\r\n case 'sortNone':\r\n return 'columnMenu.sortNone';\r\n case 'filter':\r\n return 'columnMenu.filter';\r\n case 'hideColumn':\r\n return 'columnMenu.hideColumn';\r\n case 'pinStart':\r\n return 'columnMenu.pinStart';\r\n case 'pinEnd':\r\n return 'columnMenu.pinEnd';\r\n case 'pinNone':\r\n return 'columnMenu.pinNone';\r\n case 'autoSize':\r\n return 'columnMenu.autoSize';\r\n case 'columnsPanel':\r\n return 'columnMenu.columnsPanel';\r\n default:\r\n return id;\r\n }\r\n}\r\n\r\nexport function sortModelForMenuAction(\r\n current: readonly { colId: string; sort: 'asc' | 'desc' }[],\r\n colId: string,\r\n action: 'asc' | 'desc' | 'none',\r\n): { colId: string; sort: 'asc' | 'desc' }[] {\r\n if (action === 'none') {\r\n return current.filter((entry) => entry.colId !== colId);\r\n }\r\n return [{ colId, sort: action }];\r\n}\r\n","import { useEffect, useState } from 'react';\r\n\r\n/**\r\n * Window events that ask every mounted grid header to re-run validation.\r\n * Hosts dispatch one after changing something the grid cannot observe\r\n * (e.g. a header form field that feeds a column `requiredIf` rule).\r\n * `erp-table:revalidate` is the legacy arianERP name and stays supported.\r\n */\r\nexport const GRID_REVALIDATE_EVENT = 'pdg-grid:revalidate';\r\nexport const LEGACY_GRID_REVALIDATE_EVENT = 'erp-table:revalidate';\r\n\r\n/** Increments whenever a host fires a revalidate event. SSR-safe. */\r\nexport function useRevalidateRevision(): number {\r\n const [revision, setRevision] = useState(0);\r\n useEffect(() => {\r\n const bump = () => setRevision((v) => v + 1);\r\n const names = [GRID_REVALIDATE_EVENT, LEGACY_GRID_REVALIDATE_EVENT];\r\n names.forEach((n) => window.addEventListener(n, bump));\r\n return () => names.forEach((n) => window.removeEventListener(n, bump));\r\n }, []);\r\n return revision;\r\n}\r\n","import { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { GridSearchMatch } from './types';\r\n\r\nexport function getCellSearchText(\r\n controller: UITableController,\r\n rowId: number,\r\n columnId: string,\r\n): string {\r\n const cell = controller.getCell(rowId, columnId);\r\n const display = cell?.getDisplay();\r\n const value = cell?.getValue();\r\n if (display != null && display !== '') return String(display);\r\n return String(value ?? '');\r\n}\r\n\r\nexport function findColumnMatches(\r\n controller: UITableController,\r\n columnId: string,\r\n query: string,\r\n): GridSearchMatch[] {\r\n const q = query.trim();\r\n if (!q) return [];\r\n // PR-99: QuickFilterIndex candidates + UI order (no O(n) getAllRows scan).\r\n return controller.findColumnSearchMatches(columnId, q);\r\n}\r\n\r\n/** 0-based index in the same order as Desktop virtual body. */\r\nexport function getSortedRowAbsoluteIndex(\r\n controller: UITableController,\r\n rowId: number,\r\n): number {\r\n return controller.getUiRowAbsoluteIndex(rowId);\r\n}\r\n\r\nexport function computeVirtualScrollOffset(\r\n absoluteIndex: number,\r\n rowHeight: number,\r\n viewportSize: number,\r\n): number {\r\n if (absoluteIndex < 0) return 0;\r\n const lead = Math.min(Math.floor(viewportSize / 3), rowHeight * 2);\r\n return Math.max(0, absoluteIndex * rowHeight - lead);\r\n}\r\n\r\nexport function findTableScrollRoot(\r\n tableKey: string,\r\n): HTMLElement | null {\r\n if (typeof document === 'undefined') return null;\r\n const safeKey = tableKey.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\r\n return document.querySelector(\r\n `[data-erp-table-scroll][data-erp-table-key=\"${safeKey}\"]`,\r\n );\r\n}\r\n\r\nexport function isVirtualScrollRoot(el: HTMLElement | null): boolean {\r\n return el?.dataset.erpVirtualization === 'on';\r\n}\r\n\r\nfunction getTargetPage(\r\n controller: UITableController,\r\n rowId: number,\r\n): number | null {\r\n const absoluteIndex = getSortedRowAbsoluteIndex(controller, rowId);\r\n const table = controller.getViewState();\r\n if (!table || absoluteIndex < 0) return null;\r\n\r\n return Math.ceil((absoluteIndex + 1) / table.pagination.pageSize);\r\n}\r\n\r\n/**\r\n * Brings a row into view (pagination page change OR virtual viewport scroll).\r\n */\r\nexport async function revealRow(\r\n controller: UITableController,\r\n rowId: number,\r\n): Promise<void> {\r\n const table = controller.getViewState();\r\n if (!table) return;\r\n\r\n const tableKey = controller.getTableKey();\r\n const scrollRoot = findTableScrollRoot(tableKey);\r\n const session = controller.getSession();\r\n\r\n if (isVirtualScrollRoot(scrollRoot) && session) {\r\n const absoluteIndex = getSortedRowAbsoluteIndex(controller, rowId);\r\n if (absoluteIndex < 0) return;\r\n\r\n const viewport = session.getViewport();\r\n const scrollOffset = computeVirtualScrollOffset(\r\n absoluteIndex,\r\n viewport.rowHeight,\r\n viewport.viewportSize,\r\n );\r\n\r\n await session.dispatchViewIntent({\r\n type: 'CHANGE_VIEWPORT',\r\n scrollOffset,\r\n viewportSize: viewport.viewportSize,\r\n rowHeight: viewport.rowHeight,\r\n overscan: viewport.overscan,\r\n });\r\n\r\n if (scrollRoot) {\r\n scrollRoot.scrollTop = scrollOffset;\r\n }\r\n return;\r\n }\r\n\r\n let targetPage: number | null;\r\n if (controller.isPagedWindow?.()) {\r\n // Stream from IDB and count the record's ordinal (sorted position) to\r\n // derive the page — no full row array in heap.\r\n const { findPagedRowPage } = await import('./pagedSearch');\r\n targetPage = await findPagedRowPage(controller, rowId, table.pagination.pageSize);\r\n } else {\r\n targetPage = getTargetPage(controller, rowId);\r\n }\r\n if (!targetPage) return;\r\n\r\n if (table.pagination.page !== targetPage) {\r\n await controller.dispatch({ type: 'CHANGE_PAGE', page: targetPage });\r\n }\r\n}\r\n\r\nexport async function navigateToMatch(\r\n controller: UITableController,\r\n match: GridSearchMatch,\r\n): Promise<void> {\r\n const table = controller.getViewState();\r\n if (!table) return;\r\n\r\n await revealRow(controller, match.rowId);\r\n await controller.dispatch({ type: 'UI_ACTIVE_ROW', rowId: match.rowId });\r\n}\r\n","import type { ReactNode } from 'react';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport type {\r\n ColumnFilter,\r\n FilterModel,\r\n} from '../../engine/dataOps/filterModel';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\n\r\n/**\r\n * Context passed to a host `FilterComponent` (PR-95).\r\n * Call `apply` with a `ColumnFilter` (usually `{ filterType: 'custom', customFilter }`).\r\n */\r\nexport type FilterComponentContext = {\r\n column: ColumnSchema;\r\n colId: string;\r\n filterModel: FilterModel;\r\n current: ColumnFilter | undefined;\r\n params?: Record<string, unknown>;\r\n controller: UITableController;\r\n apply: (next: ColumnFilter | null) => void;\r\n close: () => void;\r\n};\r\n\r\nexport type FilterComponent = (ctx: FilterComponentContext) => ReactNode;\r\n\r\n/**\r\n * Host map of custom filter UIs. Keys match `ColumnDef.filter` string / `{ type }` (PR-95).\r\n */\r\nexport type FilterComponentMap = Record<string, FilterComponent | undefined>;\r\n\r\nexport function resolveFilterComponent(\r\n name: string | undefined,\r\n components: FilterComponentMap | undefined,\r\n): FilterComponent | undefined {\r\n if (!name || !components) return undefined;\r\n const render = components[name];\r\n return typeof render === 'function' ? render : undefined;\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport {\r\n collectUniqueFilterValues,\r\n type BooleanFilterOp,\r\n type ColumnFilter,\r\n type DateFilterOp,\r\n type FilterModel,\r\n type NumberFilterOp,\r\n type TextFilterOp,\r\n type BuiltinFilterKind,\r\n} from '../../engine/dataOps/filterModel';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { FilterComponent } from '../filters';\r\nimport { useThemePortalStyle, useTranslations } from '../host';\r\n\r\ntype Props = {\r\n column: ColumnSchema;\r\n kind?: BuiltinFilterKind;\r\n /** Custom filter registry name (PR-95). */\r\n customName?: string;\r\n customParams?: Record<string, unknown>;\r\n customComponent?: FilterComponent;\r\n filterModel: FilterModel;\r\n controller: UITableController;\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n anchorRef: React.RefObject<HTMLElement | null>;\r\n};\r\n\r\nconst TEXT_OPS: TextFilterOp[] = [\r\n 'contains',\r\n 'notContains',\r\n 'equals',\r\n 'startsWith',\r\n 'endsWith',\r\n 'blank',\r\n 'notBlank',\r\n];\r\n\r\nconst NUMBER_OPS: NumberFilterOp[] = [\r\n 'equals',\r\n 'notEqual',\r\n 'lessThan',\r\n 'lessThanOrEqual',\r\n 'greaterThan',\r\n 'greaterThanOrEqual',\r\n 'inRange',\r\n 'blank',\r\n];\r\n\r\nconst DATE_OPS: DateFilterOp[] = [\r\n 'equals',\r\n 'before',\r\n 'after',\r\n 'inRange',\r\n 'blank',\r\n];\r\n\r\nfunction patchModel(\r\n model: FilterModel,\r\n colId: string,\r\n next: ColumnFilter | null,\r\n): FilterModel {\r\n const out: Record<string, ColumnFilter> = { ...model };\r\n if (next == null) delete out[colId];\r\n else out[colId] = next;\r\n return out;\r\n}\r\n\r\nexport function ColumnFilterPopover({\r\n column,\r\n kind,\r\n customName,\r\n customParams,\r\n customComponent,\r\n filterModel,\r\n controller,\r\n open,\r\n onOpenChange,\r\n anchorRef,\r\n}: Props) {\r\n const t = useTranslations();\r\n const [pos, setPos] = useState({ top: 0, left: 0 });\r\n const panelRef = useRef<HTMLDivElement>(null);\r\n const current = filterModel[column.fieldName];\r\n const menuStyle = useThemePortalStyle({\r\n position: 'fixed',\r\n top: pos.top,\r\n left: pos.left,\r\n zIndex: 60,\r\n });\r\n\r\n useEffect(() => {\r\n if (!open || !anchorRef.current) return;\r\n const rect = anchorRef.current.getBoundingClientRect();\r\n setPos({ top: rect.bottom + 4, left: rect.left });\r\n }, [open, anchorRef]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onDoc = (e: MouseEvent) => {\r\n const target = e.target as Node;\r\n if (anchorRef.current?.contains(target)) return;\r\n if (panelRef.current?.contains(target)) return;\r\n onOpenChange(false);\r\n };\r\n document.addEventListener('mousedown', onDoc);\r\n return () => document.removeEventListener('mousedown', onDoc);\r\n }, [open, onOpenChange, anchorRef]);\r\n\r\n const uniqueValues = useMemo(() => {\r\n if (!open || kind !== 'set') return [];\r\n const rows = controller.getAllRows() ?? [];\r\n const ids = rows.map((r) => r.id.value);\r\n return collectUniqueFilterValues(ids, column.fieldName, {\r\n getValue: (rowId, colId) =>\r\n controller.getCell(rowId, colId)?.getValue() ?? null,\r\n });\r\n }, [open, kind, controller, column.fieldName]);\r\n\r\n if (!open || typeof document === 'undefined') return null;\r\n\r\n const apply = (next: ColumnFilter | null) => {\r\n controller.setFilterModel(patchModel(filterModel, column.fieldName, next));\r\n };\r\n\r\n const popoverKind = customName ? `custom:${customName}` : kind ?? 'custom';\r\n\r\n return createPortal(\r\n <div\r\n ref={panelRef}\r\n className=\"pdg-filter-popover\"\r\n data-pdg-filter-popover={popoverKind}\r\n data-pdg-filter-col={column.fieldName}\r\n role=\"dialog\"\r\n aria-label={t('general.filter')}\r\n style={menuStyle}\r\n >\r\n {customComponent ? (\r\n <div data-pdg-filter-custom={customName}>\r\n {customComponent({\r\n column,\r\n colId: column.fieldName,\r\n filterModel,\r\n current,\r\n params: customParams,\r\n controller,\r\n apply: (next) => {\r\n apply(next);\r\n onOpenChange(false);\r\n },\r\n close: () => onOpenChange(false),\r\n })}\r\n </div>\r\n ) : null}\r\n {!customComponent && kind === 'text' ? (\r\n <TextFilterForm\r\n current={current}\r\n onApply={(f) => {\r\n apply(f);\r\n onOpenChange(false);\r\n }}\r\n onClear={() => {\r\n apply(null);\r\n onOpenChange(false);\r\n }}\r\n />\r\n ) : null}\r\n {!customComponent && kind === 'number' ? (\r\n <NumberFilterForm\r\n current={current}\r\n onApply={(f) => {\r\n apply(f);\r\n onOpenChange(false);\r\n }}\r\n onClear={() => {\r\n apply(null);\r\n onOpenChange(false);\r\n }}\r\n />\r\n ) : null}\r\n {!customComponent && kind === 'date' ? (\r\n <DateFilterForm\r\n current={current}\r\n onApply={(f) => {\r\n apply(f);\r\n onOpenChange(false);\r\n }}\r\n onClear={() => {\r\n apply(null);\r\n onOpenChange(false);\r\n }}\r\n />\r\n ) : null}\r\n {!customComponent && kind === 'boolean' ? (\r\n <BooleanFilterForm\r\n current={current}\r\n onApply={(f) => {\r\n apply(f);\r\n onOpenChange(false);\r\n }}\r\n onClear={() => {\r\n apply(null);\r\n onOpenChange(false);\r\n }}\r\n />\r\n ) : null}\r\n {!customComponent && kind === 'set' ? (\r\n <SetFilterForm\r\n values={uniqueValues}\r\n current={current}\r\n onApply={(f) => {\r\n apply(f);\r\n onOpenChange(false);\r\n }}\r\n onClear={() => {\r\n apply(null);\r\n onOpenChange(false);\r\n }}\r\n />\r\n ) : null}\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n\r\nfunction TextFilterForm({\r\n current,\r\n onApply,\r\n onClear,\r\n}: {\r\n current: ColumnFilter | undefined;\r\n onApply: (f: ColumnFilter) => void;\r\n onClear: () => void;\r\n}) {\r\n const t = useTranslations();\r\n const initial =\r\n current && 'filterType' in current && current.filterType === 'text'\r\n ? current\r\n : null;\r\n const [type, setType] = useState<TextFilterOp>(initial?.type ?? 'contains');\r\n const [filter, setFilter] = useState(String(initial?.filter ?? ''));\r\n const needsValue = type !== 'blank' && type !== 'notBlank';\r\n\r\n return (\r\n <form\r\n className=\"pdg-filter-form\"\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n onApply({\r\n filterType: 'text',\r\n type,\r\n filter: needsValue ? filter : undefined,\r\n });\r\n }}\r\n >\r\n <select\r\n className=\"pdg-filter-select\"\r\n value={type}\r\n onChange={(e) => setType(e.target.value as TextFilterOp)}\r\n aria-label={t('general.filter')}\r\n >\r\n {TEXT_OPS.map((op) => (\r\n <option key={op} value={op}>\r\n {op}\r\n </option>\r\n ))}\r\n </select>\r\n {needsValue ? (\r\n <input\r\n className=\"pdg-filter-input\"\r\n value={filter}\r\n onChange={(e) => setFilter(e.target.value)}\r\n data-pdg-filter-input=\"text\"\r\n />\r\n ) : null}\r\n <div className=\"pdg-filter-actions\">\r\n <button type=\"submit\" className=\"pdg-filter-btn\">\r\n {t('general.filterApply')}\r\n </button>\r\n <button type=\"button\" className=\"pdg-filter-btn\" onClick={onClear}>\r\n {t('general.filterClear')}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n\r\nfunction NumberFilterForm({\r\n current,\r\n onApply,\r\n onClear,\r\n}: {\r\n current: ColumnFilter | undefined;\r\n onApply: (f: ColumnFilter) => void;\r\n onClear: () => void;\r\n}) {\r\n const t = useTranslations();\r\n const initial =\r\n current && 'filterType' in current && current.filterType === 'number'\r\n ? current\r\n : null;\r\n const [type, setType] = useState<NumberFilterOp>(initial?.type ?? 'equals');\r\n const [filter, setFilter] = useState(String(initial?.filter ?? ''));\r\n const [filterTo, setFilterTo] = useState(String(initial?.filterTo ?? ''));\r\n const needsValue = type !== 'blank';\r\n const needsTo = type === 'inRange';\r\n\r\n return (\r\n <form\r\n className=\"pdg-filter-form\"\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n onApply({\r\n filterType: 'number',\r\n type,\r\n filter: needsValue ? filter : undefined,\r\n filterTo: needsTo ? filterTo : undefined,\r\n });\r\n }}\r\n >\r\n <select\r\n className=\"pdg-filter-select\"\r\n value={type}\r\n onChange={(e) => setType(e.target.value as NumberFilterOp)}\r\n >\r\n {NUMBER_OPS.map((op) => (\r\n <option key={op} value={op}>\r\n {op}\r\n </option>\r\n ))}\r\n </select>\r\n {needsValue ? (\r\n <input\r\n className=\"pdg-filter-input\"\r\n value={filter}\r\n onChange={(e) => setFilter(e.target.value)}\r\n data-pdg-filter-input=\"number\"\r\n />\r\n ) : null}\r\n {needsTo ? (\r\n <input\r\n className=\"pdg-filter-input\"\r\n value={filterTo}\r\n onChange={(e) => setFilterTo(e.target.value)}\r\n data-pdg-filter-input=\"number-to\"\r\n />\r\n ) : null}\r\n <div className=\"pdg-filter-actions\">\r\n <button type=\"submit\" className=\"pdg-filter-btn\">\r\n {t('general.filterApply')}\r\n </button>\r\n <button type=\"button\" className=\"pdg-filter-btn\" onClick={onClear}>\r\n {t('general.filterClear')}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n\r\nfunction DateFilterForm({\r\n current,\r\n onApply,\r\n onClear,\r\n}: {\r\n current: ColumnFilter | undefined;\r\n onApply: (f: ColumnFilter) => void;\r\n onClear: () => void;\r\n}) {\r\n const t = useTranslations();\r\n const initial =\r\n current && 'filterType' in current && current.filterType === 'date'\r\n ? current\r\n : null;\r\n const [type, setType] = useState<DateFilterOp>(initial?.type ?? 'equals');\r\n const [dateFrom, setDateFrom] = useState(\r\n String(initial?.dateFrom ?? initial?.filter ?? ''),\r\n );\r\n const [dateTo, setDateTo] = useState(\r\n String(initial?.dateTo ?? initial?.filterTo ?? ''),\r\n );\r\n const needsFrom = type !== 'blank';\r\n const needsTo = type === 'inRange';\r\n\r\n return (\r\n <form\r\n className=\"pdg-filter-form\"\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n onApply({\r\n filterType: 'date',\r\n type,\r\n dateFrom: needsFrom ? dateFrom : undefined,\r\n dateTo: needsTo ? dateTo : undefined,\r\n });\r\n }}\r\n >\r\n <select\r\n className=\"pdg-filter-select\"\r\n value={type}\r\n onChange={(e) => setType(e.target.value as DateFilterOp)}\r\n >\r\n {DATE_OPS.map((op) => (\r\n <option key={op} value={op}>\r\n {op}\r\n </option>\r\n ))}\r\n </select>\r\n {needsFrom ? (\r\n <input\r\n className=\"pdg-filter-input\"\r\n type=\"date\"\r\n value={dateFrom}\r\n onChange={(e) => setDateFrom(e.target.value)}\r\n data-pdg-filter-input=\"date\"\r\n />\r\n ) : null}\r\n {needsTo ? (\r\n <input\r\n className=\"pdg-filter-input\"\r\n type=\"date\"\r\n value={dateTo}\r\n onChange={(e) => setDateTo(e.target.value)}\r\n data-pdg-filter-input=\"date-to\"\r\n />\r\n ) : null}\r\n <div className=\"pdg-filter-actions\">\r\n <button type=\"submit\" className=\"pdg-filter-btn\">\r\n {t('general.filterApply')}\r\n </button>\r\n <button type=\"button\" className=\"pdg-filter-btn\" onClick={onClear}>\r\n {t('general.filterClear')}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n\r\nfunction BooleanFilterForm({\r\n current,\r\n onApply,\r\n onClear,\r\n}: {\r\n current: ColumnFilter | undefined;\r\n onApply: (f: ColumnFilter) => void;\r\n onClear: () => void;\r\n}) {\r\n const t = useTranslations();\r\n const initial =\r\n current && 'filterType' in current && current.filterType === 'boolean'\r\n ? current.type\r\n : 'any';\r\n const [type, setType] = useState<BooleanFilterOp>(initial);\r\n\r\n return (\r\n <form\r\n className=\"pdg-filter-form\"\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n onApply({ filterType: 'boolean', type });\r\n }}\r\n >\r\n {(['true', 'false', 'any'] as const).map((op) => (\r\n <label key={op} className=\"pdg-filter-check\">\r\n <input\r\n type=\"radio\"\r\n name=\"bool-filter\"\r\n checked={type === op}\r\n onChange={() => setType(op)}\r\n data-pdg-filter-input={`boolean-${op}`}\r\n />\r\n {op}\r\n </label>\r\n ))}\r\n <div className=\"pdg-filter-actions\">\r\n <button type=\"submit\" className=\"pdg-filter-btn\">\r\n {t('general.filterApply')}\r\n </button>\r\n <button type=\"button\" className=\"pdg-filter-btn\" onClick={onClear}>\r\n {t('general.filterClear')}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n\r\nfunction SetFilterForm({\r\n values,\r\n current,\r\n onApply,\r\n onClear,\r\n}: {\r\n values: unknown[];\r\n current: ColumnFilter | undefined;\r\n onApply: (f: ColumnFilter) => void;\r\n onClear: () => void;\r\n}) {\r\n const t = useTranslations();\r\n const initial =\r\n current && 'filterType' in current && current.filterType === 'set'\r\n ? new Set(current.values.map((v) => String(v ?? '')))\r\n : new Set(values.map((v) => String(v ?? '')));\r\n const [selected, setSelected] = useState(initial);\r\n\r\n return (\r\n <form\r\n className=\"pdg-filter-form\"\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n onApply({\r\n filterType: 'set',\r\n type: 'in',\r\n values: values.filter((v) => selected.has(String(v ?? ''))),\r\n });\r\n }}\r\n >\r\n <div className=\"pdg-filter-set-list\" data-pdg-filter-input=\"set\">\r\n {values.map((v, i) => {\r\n const key = String(v ?? '');\r\n const label = v == null || v === '' ? '(blank)' : String(v);\r\n return (\r\n <label key={`${key}-${i}`} className=\"pdg-filter-check\">\r\n <input\r\n type=\"checkbox\"\r\n checked={selected.has(key)}\r\n onChange={(e) => {\r\n setSelected((prev) => {\r\n const next = new Set(prev);\r\n if (e.target.checked) next.add(key);\r\n else next.delete(key);\r\n return next;\r\n });\r\n }}\r\n />\r\n {label}\r\n </label>\r\n );\r\n })}\r\n </div>\r\n <div className=\"pdg-filter-actions\">\r\n <button type=\"submit\" className=\"pdg-filter-btn\">\r\n {t('general.filterApply')}\r\n </button>\r\n <button type=\"button\" className=\"pdg-filter-btn\" onClick={onClear}>\r\n {t('general.filterClear')}\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport {\r\n buildColumnGroupHeaderModel,\r\n type ColumnGroupHeaderCell,\r\n} from '../../engine/dataOps/columnGroups';\r\nimport { columnSizeStyle } from '../../engine/columnWidth';\r\nimport type { ColumnWindowModel } from '../virtual/columnWindow';\r\n\r\ntype Props = {\r\n allVisible: ColumnSchema[];\r\n colWindow: ColumnWindowModel;\r\n columnWidths?: Record<string, number>;\r\n collapsedGroups: Record<string, true>;\r\n onToggleGroup: (groupId: string) => void;\r\n onGroupDragStart?: (groupId: string, leafFields: readonly string[]) => void;\r\n};\r\n\r\nfunction segmentWidth(\r\n columns: readonly ColumnSchema[],\r\n columnWidths: Record<string, number> | undefined,\r\n layoutWidths: Record<string, number>,\r\n): number {\r\n return columns.reduce((sum, col) => {\r\n const size = columnSizeStyle(col, columnWidths, layoutWidths);\r\n return sum + size.width;\r\n }, 0);\r\n}\r\n\r\nfunction renderGroupCell(\r\n cell: ColumnGroupHeaderCell,\r\n columns: readonly ColumnSchema[],\r\n columnWidths: Record<string, number> | undefined,\r\n layoutWidths: Record<string, number>,\r\n onToggleGroup: (groupId: string) => void,\r\n onGroupDragStart?: Props['onGroupDragStart'],\r\n) {\r\n const width = segmentWidth(columns, columnWidths, layoutWidths);\r\n return (\r\n <th\r\n key={`${cell.level}-${cell.groupId}`}\r\n role=\"columnheader\"\r\n colSpan={cell.colspan}\r\n aria-colspan={cell.colspan}\r\n data-erp-col-group={cell.groupId}\r\n className=\"erp-col-group-header relative px-2 text-xs border text-center whitespace-nowrap bg-gray-gray3\"\r\n style={{ width, minWidth: width }}\r\n draggable={Boolean(onGroupDragStart)}\r\n onDragStart={(e) => {\r\n if (!onGroupDragStart) return;\r\n e.dataTransfer.setData('text/plain', cell.groupId);\r\n e.dataTransfer.effectAllowed = 'move';\r\n onGroupDragStart(cell.groupId, cell.leafFields);\r\n }}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"erp-col-group-toggle inline-flex items-center gap-1\"\r\n aria-expanded={!cell.collapsed}\r\n aria-label={cell.collapsed ? 'Expand group' : 'Collapse group'}\r\n data-pdg-no-sort\r\n onClick={() => onToggleGroup(cell.groupId)}\r\n >\r\n <span aria-hidden>{cell.collapsed ? '▸' : '▾'}</span>\r\n <span>{cell.headerName}</span>\r\n </button>\r\n </th>\r\n );\r\n}\r\n\r\nfunction renderZoneGroupRow(\r\n zoneColumns: ColumnSchema[],\r\n level: number,\r\n rowCells: ColumnGroupHeaderCell[],\r\n columnWidths: Record<string, number> | undefined,\r\n layoutWidths: Record<string, number>,\r\n onToggleGroup: (groupId: string) => void,\r\n onGroupDragStart?: Props['onGroupDragStart'],\r\n): React.ReactNode[] {\r\n const nodes: React.ReactNode[] = [];\r\n const fieldSet = new Set(zoneColumns.map((c) => c.fieldName));\r\n let colCursor = 0;\r\n\r\n for (const cell of rowCells) {\r\n const colsInZone = cell.leafFields\r\n .map((f) => zoneColumns.find((c) => c.fieldName === f))\r\n .filter((c): c is ColumnSchema => Boolean(c));\r\n if (colsInZone.length === 0) continue;\r\n\r\n const startIdx = zoneColumns.findIndex((c) => c.fieldName === colsInZone[0]!.fieldName);\r\n while (colCursor < startIdx) {\r\n const gapCol = zoneColumns[colCursor]!;\r\n const gapSize = columnSizeStyle(gapCol, columnWidths, layoutWidths);\r\n nodes.push(\r\n <th\r\n key={`gap-${level}-${gapCol.fieldName}`}\r\n role=\"columnheader\"\r\n aria-hidden\r\n style={{ width: gapSize.width, minWidth: gapSize.width, padding: 0, border: 'none' }}\r\n />,\r\n );\r\n colCursor += 1;\r\n }\r\n\r\n if (!cell.leafFields.some((f) => fieldSet.has(f))) continue;\r\n\r\n nodes.push(\r\n renderGroupCell(\r\n { ...cell, colspan: colsInZone.length },\r\n colsInZone,\r\n columnWidths,\r\n layoutWidths,\r\n onToggleGroup,\r\n onGroupDragStart,\r\n ),\r\n );\r\n colCursor += colsInZone.length;\r\n }\r\n\r\n while (colCursor < zoneColumns.length) {\r\n const gapCol = zoneColumns[colCursor]!;\r\n const gapSize = columnSizeStyle(gapCol, columnWidths, layoutWidths);\r\n nodes.push(\r\n <th\r\n key={`tail-gap-${level}-${gapCol.fieldName}`}\r\n role=\"presentation\"\r\n aria-hidden\r\n style={{ width: gapSize.width, minWidth: gapSize.width, padding: 0, border: 'none' }}\r\n />,\r\n );\r\n colCursor += 1;\r\n }\r\n\r\n return nodes;\r\n}\r\n\r\nexport function ColumnGroupHeaderRows({\r\n allVisible,\r\n colWindow,\r\n columnWidths,\r\n collapsedGroups,\r\n onToggleGroup,\r\n onGroupDragStart,\r\n}: Props) {\r\n const visible = allVisible.filter((c) => !c.hidden);\r\n const model = buildColumnGroupHeaderModel(visible, collapsedGroups);\r\n if (model.maxDepth === 0) return null;\r\n\r\n const layoutWidths = colWindow.layoutWidths;\r\n\r\n return (\r\n <>\r\n {model.rows.map((rowCells, level) => (\r\n <tr\r\n key={`group-row-${level}`}\r\n role=\"row\"\r\n aria-rowindex={level + 1}\r\n className=\"erp-col-group-row bg-gray-gray3\"\r\n data-erp-col-group-level={level}\r\n >\r\n {renderZoneGroupRow(\r\n colWindow.pinnedStart,\r\n level,\r\n rowCells,\r\n columnWidths,\r\n layoutWidths,\r\n onToggleGroup,\r\n onGroupDragStart,\r\n )}\r\n {colWindow.spacerStart > 0 ? (\r\n <th\r\n aria-hidden\r\n role=\"presentation\"\r\n style={{ width: colWindow.spacerStart, minWidth: colWindow.spacerStart, padding: 0, border: 'none' }}\r\n />\r\n ) : null}\r\n {renderZoneGroupRow(\r\n colWindow.scrollable,\r\n level,\r\n rowCells,\r\n columnWidths,\r\n layoutWidths,\r\n onToggleGroup,\r\n onGroupDragStart,\r\n )}\r\n {colWindow.spacerEnd > 0 ? (\r\n <th\r\n aria-hidden\r\n role=\"presentation\"\r\n style={{ width: colWindow.spacerEnd, minWidth: colWindow.spacerEnd, padding: 0, border: 'none' }}\r\n />\r\n ) : null}\r\n {renderZoneGroupRow(\r\n colWindow.pinnedEnd,\r\n level,\r\n rowCells,\r\n columnWidths,\r\n layoutWidths,\r\n onToggleGroup,\r\n onGroupDragStart,\r\n )}\r\n </tr>\r\n ))}\r\n </>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport {\r\n columnMenuItemLabelKey,\r\n isColumnMenuCustomItem,\r\n resolveColumnMenuItems,\r\n sortModelForMenuAction,\r\n type ColumnMenuBuiltInId,\r\n type ColumnMenuItemDef,\r\n type ColumnMenuItemsConfig,\r\n} from '../../engine/dataOps/columnMenu';\r\nimport type { FilterModel } from '../../engine/dataOps/filterModel';\r\nimport type { SortModel } from '../../engine/dataOps/sortModel';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { trapTabKey } from '../../infrastructure/ui/focusTrap';\r\nimport { useThemePortalStyle, useTranslations } from '../host';\r\n\r\nexport type ColumnMenuActionEvent = {\r\n name: string;\r\n columnId: string;\r\n};\r\n\r\ntype Props = {\r\n column: ColumnSchema;\r\n controller: UITableController;\r\n sortModel: SortModel;\r\n filterModel: FilterModel;\r\n itemsConfig?: ColumnMenuItemsConfig;\r\n onCustomAction?: (event: ColumnMenuActionEvent) => void;\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n anchorRef: React.RefObject<HTMLElement | null>;\r\n onOpenFilter?: () => void;\r\n onOpenColumnsPanel?: () => void;\r\n};\r\n\r\ntype MenuRow =\r\n | { kind: 'separator'; key: string }\r\n | { kind: 'item'; key: string; label: string; disabled?: boolean; action: () => void };\r\n\r\nfunction buildRows(\r\n items: ColumnMenuItemDef[],\r\n column: ColumnSchema,\r\n controller: UITableController,\r\n sortModel: SortModel,\r\n onCustomAction: ((event: ColumnMenuActionEvent) => void) | undefined,\r\n onOpenFilter: (() => void) | undefined,\r\n onOpenColumnsPanel: (() => void) | undefined,\r\n t: (key: string) => string,\r\n): MenuRow[] {\r\n const colId = column.fieldName;\r\n const rows: MenuRow[] = [];\r\n\r\n for (const item of items) {\r\n if (item === 'separator') {\r\n rows.push({ kind: 'separator', key: `sep-${rows.length}` });\r\n continue;\r\n }\r\n if (isColumnMenuCustomItem(item)) {\r\n rows.push({\r\n kind: 'item',\r\n key: `custom-${item.name}`,\r\n label: item.label,\r\n disabled: item.disabled,\r\n action: () => onCustomAction?.({ name: item.name, columnId: colId }),\r\n });\r\n continue;\r\n }\r\n const id = item as ColumnMenuBuiltInId;\r\n if (id === 'separator') continue;\r\n rows.push({\r\n kind: 'item',\r\n key: id,\r\n label: t(columnMenuItemLabelKey(id)),\r\n action: () => {\r\n switch (id) {\r\n case 'sortAsc':\r\n controller.setSortModel(sortModelForMenuAction(sortModel, colId, 'asc'));\r\n break;\r\n case 'sortDesc':\r\n controller.setSortModel(sortModelForMenuAction(sortModel, colId, 'desc'));\r\n break;\r\n case 'sortNone':\r\n controller.setSortModel(sortModelForMenuAction(sortModel, colId, 'none'));\r\n break;\r\n case 'filter':\r\n onOpenFilter?.();\r\n break;\r\n case 'hideColumn':\r\n controller.setColumnVisible(colId, false);\r\n break;\r\n case 'pinStart':\r\n controller.setColumnPinned(colId, 'start');\r\n break;\r\n case 'pinEnd':\r\n controller.setColumnPinned(colId, 'end');\r\n break;\r\n case 'pinNone':\r\n controller.setColumnPinned(colId, null);\r\n break;\r\n case 'autoSize':\r\n controller.autoSizeColumns([colId]);\r\n break;\r\n case 'columnsPanel':\r\n onOpenColumnsPanel?.();\r\n break;\r\n default:\r\n break;\r\n }\r\n },\r\n });\r\n }\r\n\r\n return rows;\r\n}\r\n\r\nexport function ColumnMenuPopover({\r\n column,\r\n controller,\r\n sortModel,\r\n itemsConfig,\r\n onCustomAction,\r\n open,\r\n onOpenChange,\r\n anchorRef,\r\n onOpenFilter,\r\n onOpenColumnsPanel,\r\n}: Props) {\r\n const t = useTranslations();\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n const [pos, setPos] = useState({ top: 0, left: 0 });\r\n const [focusIndex, setFocusIndex] = useState(0);\r\n const portalStyle = useThemePortalStyle({\r\n position: 'fixed',\r\n top: pos.top,\r\n left: pos.left,\r\n zIndex: 1200,\r\n });\r\n\r\n const pagedWindow = controller.isPagedWindow();\r\n const items = useMemo(\r\n () => resolveColumnMenuItems(column, itemsConfig, { pagedWindow }),\r\n [column, itemsConfig, pagedWindow],\r\n );\r\n\r\n const rows = useMemo(\r\n () =>\r\n buildRows(\r\n items,\r\n column,\r\n controller,\r\n sortModel,\r\n onCustomAction,\r\n onOpenFilter,\r\n onOpenColumnsPanel,\r\n t,\r\n ),\r\n [\r\n items,\r\n column,\r\n controller,\r\n sortModel,\r\n onCustomAction,\r\n onOpenFilter,\r\n onOpenColumnsPanel,\r\n t,\r\n ],\r\n );\r\n\r\n const actionable = rows.filter((r) => r.kind === 'item') as Extract<\r\n MenuRow,\r\n { kind: 'item' }\r\n >[];\r\n\r\n useEffect(() => {\r\n if (!open || !anchorRef.current) return;\r\n const rect = anchorRef.current.getBoundingClientRect();\r\n setPos({ top: rect.bottom + 4, left: rect.left });\r\n setFocusIndex(0);\r\n }, [open, anchorRef]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onKey = (e: KeyboardEvent) => {\r\n if (menuRef.current && trapTabKey(menuRef.current, e)) {\r\n return;\r\n }\r\n if (e.key === 'Escape') {\r\n e.preventDefault();\r\n onOpenChange(false);\r\n return;\r\n }\r\n if (actionable.length === 0) return;\r\n if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n setFocusIndex((i) => (i + 1) % actionable.length);\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n setFocusIndex((i) => (i - 1 + actionable.length) % actionable.length);\r\n } else if (e.key === 'Enter') {\r\n e.preventDefault();\r\n const row = actionable[focusIndex];\r\n if (row && !row.disabled) {\r\n row.action();\r\n onOpenChange(false);\r\n }\r\n }\r\n };\r\n document.addEventListener('keydown', onKey);\r\n return () => document.removeEventListener('keydown', onKey);\r\n }, [open, actionable, focusIndex, onOpenChange]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const id = requestAnimationFrame(() => {\r\n const focused = menuRef.current?.querySelector<HTMLElement>(\r\n '[role=\"menuitem\"]:not([disabled])',\r\n );\r\n focused?.focus();\r\n });\r\n return () => cancelAnimationFrame(id);\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onDoc = (e: MouseEvent) => {\r\n const target = e.target as Node;\r\n if (menuRef.current?.contains(target)) return;\r\n if (anchorRef.current?.contains(target)) return;\r\n onOpenChange(false);\r\n };\r\n document.addEventListener('mousedown', onDoc);\r\n return () => document.removeEventListener('mousedown', onDoc);\r\n }, [open, onOpenChange, anchorRef]);\r\n\r\n if (!open || typeof document === 'undefined') return null;\r\n\r\n let actionCursor = -1;\r\n\r\n return createPortal(\r\n <div\r\n ref={menuRef}\r\n role=\"menu\"\r\n className=\"erp-col-menu pdg-col-menu\"\r\n data-pdg-col-menu={column.fieldName}\r\n style={portalStyle}\r\n >\r\n {rows.map((row) => {\r\n if (row.kind === 'separator') {\r\n return (\r\n <div\r\n key={row.key}\r\n role=\"separator\"\r\n className=\"erp-col-menu__separator\"\r\n data-pdg-col-menu-separator\r\n />\r\n );\r\n }\r\n actionCursor += 1;\r\n const idx = actionCursor;\r\n const focused = idx === focusIndex;\r\n return (\r\n <button\r\n key={row.key}\r\n type=\"button\"\r\n role=\"menuitem\"\r\n data-pdg-col-menu-item={row.key}\r\n className={`erp-col-menu__item${focused ? ' is-focused' : ''}`}\r\n disabled={row.disabled}\r\n tabIndex={focused ? 0 : -1}\r\n onMouseEnter={() => setFocusIndex(idx)}\r\n onClick={() => {\r\n if (row.disabled) return;\r\n row.action();\r\n onOpenChange(false);\r\n }}\r\n >\r\n {row.label}\r\n </button>\r\n );\r\n })}\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n\r\nexport type { ColumnMenuItemDef, ColumnMenuItemsConfig };\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport { isIndexColumn } from '../../engine/columnWidth';\r\nimport { canSetColumnVisible } from '../../engine/dataOps/columnVisibility';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { trapTabKey } from '../../infrastructure/ui/focusTrap';\r\nimport { useThemePortalStyle, useTranslations } from '../host';\r\n\r\ntype Props = {\r\n columns: ColumnSchema[];\r\n controller: UITableController;\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n anchorRef: React.RefObject<HTMLElement | null>;\r\n};\r\n\r\nexport function ColumnsPanelPopover({\r\n columns,\r\n controller,\r\n open,\r\n onOpenChange,\r\n anchorRef,\r\n}: Props) {\r\n const t = useTranslations();\r\n const panelRef = useRef<HTMLDivElement>(null);\r\n const [pos, setPos] = useState({ top: 0, left: 0 });\r\n const portalStyle = useThemePortalStyle({\r\n position: 'fixed',\r\n top: pos.top,\r\n left: pos.left,\r\n zIndex: 1200,\r\n minWidth: 200,\r\n });\r\n\r\n const togglable = columns.filter((c) => !isIndexColumn(c));\r\n\r\n useEffect(() => {\r\n if (!open || !anchorRef.current) return;\r\n const rect = anchorRef.current.getBoundingClientRect();\r\n setPos({ top: rect.bottom + 4, left: rect.left });\r\n }, [open, anchorRef]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onKey = (e: KeyboardEvent) => {\r\n if (panelRef.current && trapTabKey(panelRef.current, e)) {\r\n return;\r\n }\r\n if (e.key === 'Escape') {\r\n e.preventDefault();\r\n onOpenChange(false);\r\n }\r\n };\r\n document.addEventListener('keydown', onKey);\r\n return () => document.removeEventListener('keydown', onKey);\r\n }, [open, onOpenChange]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onDoc = (e: MouseEvent) => {\r\n const target = e.target as Node;\r\n if (panelRef.current?.contains(target)) return;\r\n if (anchorRef.current?.contains(target)) return;\r\n onOpenChange(false);\r\n };\r\n document.addEventListener('mousedown', onDoc);\r\n return () => document.removeEventListener('mousedown', onDoc);\r\n }, [open, onOpenChange, anchorRef]);\r\n\r\n if (!open || typeof document === 'undefined') return null;\r\n\r\n return createPortal(\r\n <div\r\n ref={panelRef}\r\n role=\"dialog\"\r\n aria-label={t('columnMenu.columnsPanel')}\r\n className=\"erp-col-menu erp-col-columns-panel pdg-col-columns-panel\"\r\n data-pdg-col-columns-panel\r\n style={portalStyle}\r\n >\r\n <div className=\"erp-col-columns-panel__title\">{t('columnMenu.columnsPanel')}</div>\r\n <ul className=\"erp-col-columns-panel__list\" role=\"listbox\">\r\n {togglable.map((col) => {\r\n const visible = !col.hidden;\r\n const locked = canSetColumnVisible(col, true).ok === false && !visible;\r\n return (\r\n <li key={col.fieldName} role=\"option\" aria-selected={visible}>\r\n <label className=\"erp-col-columns-panel__row\">\r\n <input\r\n type=\"checkbox\"\r\n checked={visible}\r\n disabled={locked}\r\n data-pdg-col-panel-toggle={col.fieldName}\r\n onChange={() => {\r\n controller.setColumnVisible(col.fieldName, !visible);\r\n }}\r\n />\r\n <span>{col.fieldCaption}</span>\r\n </label>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useRef } from 'react';\r\n\r\nimport { clampColumnWidth, type ColumnWidthHint } from '../../engine/columnWidth';\r\n\r\ntype Props = {\r\n columnId: string;\r\n currentWidth: number;\r\n column: ColumnWidthHint;\r\n direction: 'rtl' | 'ltr';\r\n onResize: (width: number) => void;\r\n /** Double-click resize handle → auto-size this column (PR-112). */\r\n onAutoSize?: () => void;\r\n};\r\n\r\nexport function ColumnResizeHandle({\r\n columnId,\r\n currentWidth,\r\n column,\r\n direction,\r\n onResize,\r\n onAutoSize,\r\n}: Props) {\r\n const drag = useRef<{ startX: number; startW: number } | null>(null);\r\n\r\n const endDrag = (target: HTMLElement, pointerId: number) => {\r\n drag.current = null;\r\n document.body.classList.remove('erp-col-resizing');\r\n try {\r\n target.releasePointerCapture(pointerId);\r\n } catch {\r\n /* already released */\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n aria-label=\"Resize column\"\r\n data-erp-col-resize={columnId}\r\n className=\"erp-col-resize\"\r\n onDragStart={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }}\r\n onPointerDown={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n e.currentTarget.setPointerCapture(e.pointerId);\r\n drag.current = { startX: e.clientX, startW: currentWidth };\r\n document.body.classList.add('erp-col-resizing');\r\n }}\r\n onPointerMove={(e) => {\r\n if (!drag.current) return;\r\n const delta =\r\n direction === 'rtl'\r\n ? drag.current.startX - e.clientX\r\n : e.clientX - drag.current.startX;\r\n onResize(clampColumnWidth(drag.current.startW + delta, column));\r\n }}\r\n onPointerUp={(e) => {\r\n endDrag(e.currentTarget, e.pointerId);\r\n }}\r\n onPointerCancel={(e) => {\r\n endDrag(e.currentTarget, e.pointerId);\r\n }}\r\n onLostPointerCapture={() => {\r\n drag.current = null;\r\n document.body.classList.remove('erp-col-resizing');\r\n }}\r\n onDoubleClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onAutoSize?.();\r\n }}\r\n />\r\n );\r\n}\r\n","import React, { type ReactNode, useEffect, useRef, useState } from 'react';\r\nimport { CustomDropdownButton, CustomCheckbox } from '../primitives';\r\n\r\nimport { ColumnSchema } from '../../bootstrap/type';\r\nimport { resolveColumnReorder } from '../../engine/columnReorder';\r\nimport { columnSizeStyle, isIndexColumn } from '../../engine/columnWidth';\r\nimport {\r\n isColumnFilterActive,\r\n resolveFilterUi,\r\n type ColumnFilter,\r\n type FilterModel,\r\n} from '../../engine/dataOps/filterModel';\r\nimport {\r\n ariaSortForColumn,\r\n cycleSortModel,\r\n HEADER_SORT_CLICK_MAX_MOVE_PX,\r\n shouldCommitHeaderSortClick,\r\n sortPriorityForColumn,\r\n} from '../../engine/dataOps/sortModel';\r\nimport {\r\n isColumnFilterableInGrid,\r\n isColumnSortableInGrid,\r\n} from '../../engine/dataOps/columnMenu';\r\nimport { ValidationCallbackResult } from '../../engine/type';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useRevalidateRevision } from '../hooks/useRevalidateRevision';\r\nimport { revealRow } from '../gridSearch/utils';\r\nimport {\r\n resolveFilterComponent,\r\n type FilterComponentMap,\r\n} from '../filters';\r\nimport { useDirection, useERPTableHost, useTranslations } from '../host';\r\nimport { useColumnWindowOrAll } from '../virtual/columnWindow';\r\nimport { ColumnWindowCells } from '../virtual/ColumnWindowCells';\r\nimport {\r\n ARIA_HEADER_ROW_INDEX,\r\n ariaColIndex,\r\n} from '../a11y/gridRoles';\r\nimport { columnPinCellProps, columnPinClassName } from '../columnPin';\r\nimport { ColumnFilterPopover } from './ColumnFilterPopover';\r\nimport { ColumnGroupHeaderRows } from './ColumnGroupHeaderRows';\r\nimport { ColumnMenuPopover } from './ColumnMenuPopover';\r\nimport { ColumnsPanelPopover } from './ColumnsPanelPopover';\r\nimport { ColumnResizeHandle } from './ColumnResizeHandle';\r\nimport {\r\n maxColumnGroupDepth,\r\n resolveGroupBlockReorder,\r\n} from '../../engine/dataOps/columnGroups';\r\n\r\ninterface Props {\r\n controller: UITableController;\r\n tableKey: string;\r\n header?: ReactNode;\r\n /** Optional floating filter row under the header (PR-94). */\r\n floatingFilter?: boolean;\r\n /** Custom filter UI registry (PR-95). */\r\n filterComponents?: FilterComponentMap;\r\n}\r\n\r\nfunction isInteractiveHeaderTarget(target: EventTarget | null): boolean {\r\n if (!(target instanceof Element)) return false;\r\n return Boolean(\r\n target.closest(\r\n '.erp-col-resize, button, input, [role=\"checkbox\"], [data-pdg-no-sort], [data-pdg-filter-btn], [data-pdg-col-menu-btn]',\r\n ),\r\n );\r\n}\r\n\r\nfunction floatingFilterValue(\r\n model: FilterModel,\r\n colId: string,\r\n): string {\r\n const entry = model[colId];\r\n if (!entry || !('filterType' in entry)) return '';\r\n if (entry.filterType === 'text') return String(entry.filter ?? '');\r\n if (entry.filterType === 'number') return String(entry.filter ?? '');\r\n if (entry.filterType === 'date') {\r\n return String(entry.dateFrom ?? entry.filter ?? '');\r\n }\r\n return '';\r\n}\r\n\r\nfunction applyFloatingFilter(\r\n model: FilterModel,\r\n col: ColumnSchema,\r\n raw: string,\r\n): FilterModel {\r\n const ui = resolveFilterUi(col);\r\n const next: Record<string, ColumnFilter> = { ...model };\r\n if (!ui || ui.mode !== 'builtin' || raw.trim() === '') {\r\n delete next[col.fieldName];\r\n return next;\r\n }\r\n const kind = ui.kind;\r\n if (kind === 'number') {\r\n next[col.fieldName] = {\r\n filterType: 'number',\r\n type: 'equals',\r\n filter: raw,\r\n };\r\n } else if (kind === 'date') {\r\n next[col.fieldName] = {\r\n filterType: 'date',\r\n type: 'equals',\r\n dateFrom: raw,\r\n };\r\n } else if (kind === 'boolean') {\r\n const v = raw.trim().toLowerCase();\r\n next[col.fieldName] = {\r\n filterType: 'boolean',\r\n type: v === 'true' || v === '1' ? 'true' : v === 'false' || v === '0' ? 'false' : 'any',\r\n };\r\n } else {\r\n next[col.fieldName] = {\r\n filterType: 'text',\r\n type: 'contains',\r\n filter: raw,\r\n };\r\n }\r\n return next;\r\n}\r\n\r\nexport function ERPTableHeader({\r\n controller,\r\n tableKey,\r\n header,\r\n floatingFilter = false,\r\n filterComponents,\r\n}: Props) {\r\n const direction = useDirection();\r\n const t = useTranslations();\r\n const host = useERPTableHost();\r\n const filters = filterComponents ?? host.filterComponents;\r\n const columnMenuItems = host.columnMenuItems;\r\n const onColumnMenuAction = host.onColumnMenuAction;\r\n const table = controller.getViewState();\r\n /** Page-window grid: header sort / filter only on columns that opt in. */\r\n const pagedWindow = controller.isPagedWindow();\r\n const draggedFieldRef = useRef<string | null>(null);\r\n const draggedGroupRef = useRef<string | null>(null);\r\n const pointerOriginRef = useRef<{ x: number; y: number } | null>(null);\r\n const suppressSortClickRef = useRef(false);\r\n const filterBtnRefs = useRef<Record<string, HTMLButtonElement | null>>({});\r\n const menuBtnRefs = useRef<Record<string, HTMLButtonElement | null>>({});\r\n const columnsPanelAnchorRef = useRef<HTMLButtonElement | null>(null);\r\n const [dropField, setDropField] = useState<string | null>(null);\r\n const [openFilterCol, setOpenFilterCol] = useState<string | null>(null);\r\n const [openMenuCol, setOpenMenuCol] = useState<string | null>(null);\r\n const [openColumnsPanel, setOpenColumnsPanel] = useState(false);\r\n const [validationResult, setValidationResult] =\r\n useState<ValidationCallbackResult>({\r\n valid: true,\r\n data: null,\r\n errors: new Map(),\r\n });\r\n\r\n const validationRevision = useRevalidateRevision();\r\n\r\n useEffect(() => {\r\n const validation = controller.validation();\r\n validation((res) => {\r\n setValidationResult(res);\r\n });\r\n }, [\r\n controller,\r\n table?.activeCell?.columnId,\r\n table?.activeCell?.rowId,\r\n validationRevision,\r\n ]);\r\n\r\n const displayColumns = table?.columns ?? [];\r\n const collapsedGroups = table?.collapsedColumnGroups ?? {};\r\n const colWindow = useColumnWindowOrAll(displayColumns, table?.columnWidths);\r\n const groupDepth = maxColumnGroupDepth(displayColumns);\r\n\r\n if (!table || !table.columns) return null;\r\n\r\n const visibleColumns = displayColumns.filter((c: ColumnSchema) => !c.hidden);\r\n const sortModel = table.sortModel ?? [];\r\n const filterModel = table.filterModel ?? {};\r\n const isSelectedActivePageRows = table.rows.every(\r\n (row) => !!table.selectedRows[row.id],\r\n );\r\n const handleSelectActivePageRows = () => {\r\n controller.dispatch({type: \"TOGGLE_PAGE_ROW_SELECTED\"});\r\n };\r\n const allRows = controller.getAllRows() ?? [];\r\n const handleNavigateToError = (rowId: number) => {\r\n void revealRow(controller, rowId);\r\n };\r\n const items = Array.from((validationResult.errors ?? new Map()).entries()).map(\r\n ([key, value], errorIndex) => {\r\n const Index = allRows.findIndex((r) => r.id.value == value.rowId) + 1;\r\n\r\n return {\r\n key: errorIndex.toString(),\r\n\r\n label: (\r\n <button\r\n className=\"flex bg-red-300 text-red-600 text-xs\"\r\n onClick={() => {\r\n handleNavigateToError(value.rowId);\r\n }}\r\n >\r\n {`${t('general.validationInRow')} ${Index} ${t('general.validationInColumn')} ${value.caption} : ${value.message}`}\r\n </button>\r\n ),\r\n };\r\n },\r\n );\r\n const cols = visibleColumns.length;\r\n\r\n const renderHeaderColumn = (col: ColumnSchema, index: number) => {\r\n const size = columnSizeStyle(col, table.columnWidths, colWindow.layoutWidths);\r\n const handle = (\r\n <ColumnResizeHandle\r\n columnId={col.fieldName}\r\n currentWidth={size.width}\r\n column={col}\r\n direction={direction}\r\n onResize={(width) => {\r\n void controller.dispatch({\r\n type: \"UI_RESIZE_COLUMN\",\r\n columnId: col.fieldName,\r\n width,\r\n });\r\n }}\r\n onAutoSize={() => controller.autoSizeColumns([col.fieldName])}\r\n />\r\n );\r\n const pin = columnPinCellProps(col, colWindow.startPinOffsets, colWindow.endPinOffsets);\r\n if (isIndexColumn(col)) {\r\n return (\r\n <th\r\n key={col.fieldName}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n style={{...col.style, ...size, ...pin.style}}\r\n className={`relative px-2 text-xs border text-start whitespace-nowrap ${pin.className} ${col.className || \"\"}`}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <CustomCheckbox\r\n checked={isSelectedActivePageRows}\r\n onClick={handleSelectActivePageRows}\r\n aria-label={t(\"general.toggle\")}\r\n />\r\n\r\n {col.fieldCaption}\r\n </div>\r\n {handle}\r\n </th>\r\n );\r\n }\r\n\r\n const sortable = isColumnSortableInGrid(col, pagedWindow);\r\n const filterUi = isColumnFilterableInGrid(col, pagedWindow)\r\n ? resolveFilterUi(col)\r\n : null;\r\n const customFilter =\r\n filterUi?.mode === 'custom'\r\n ? resolveFilterComponent(filterUi.name, filters)\r\n : undefined;\r\n const filterable =\r\n filterUi != null &&\r\n (filterUi.mode === 'builtin' || customFilter != null);\r\n const filterActive = isColumnFilterActive(filterModel, col.fieldName);\r\n const ariaSort = sortable\r\n ? ariaSortForColumn(sortModel, col.fieldName)\r\n : undefined;\r\n const priority = sortPriorityForColumn(sortModel, col.fieldName);\r\n const showPriority = priority != null && sortModel.length > 1;\r\n\r\n return (\r\n <th\r\n key={col.fieldName}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n aria-sort={ariaSort}\r\n style={{...col.style, ...size, ...pin.style}}\r\n className={`relative px-2 text-xs border text-start min-w-36 ${pin.className} ${col.className || \"\"}`}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n data-erp-col-drag={col.fieldName}\r\n data-erp-col-drop={dropField === col.fieldName ? col.fieldName : undefined}\r\n data-pdg-sortable={sortable ? 'true' : undefined}\r\n data-pdg-filterable={filterable ? 'true' : undefined}\r\n data-pdg-filter-active={filterActive ? 'true' : undefined}\r\n data-pdg-filter-custom={\r\n filterUi?.mode === 'custom' ? filterUi.name : undefined\r\n }\r\n data-pdg-sort-move-px={HEADER_SORT_CLICK_MAX_MOVE_PX}\r\n draggable\r\n onPointerDown={markPointerOrigin}\r\n onPointerMove={trackPointerMove}\r\n onClick={(e) => commitHeaderSort(e, col.fieldName, sortable)}\r\n onDragStart={(e) => beginColumnDrag(e, col.fieldName)}\r\n onDragOver={(e) => {\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = \"move\";\r\n hoverColumnDrop(col.fieldName);\r\n }}\r\n onDragLeave={(e) => {\r\n leaveColumnDrop(\r\n col.fieldName,\r\n e.currentTarget,\r\n e.relatedTarget,\r\n );\r\n }}\r\n onDrop={(e) => {\r\n e.preventDefault();\r\n dropColumn(col.fieldName);\r\n }}\r\n onDragEnd={endColumnDrag}\r\n >\r\n <div className=\"pdg-header-label\">\r\n <span className=\"pdg-header-caption\">{col.fieldCaption}</span>\r\n {sortable ? (\r\n <span className=\"pdg-sort-indicator\" aria-hidden>\r\n {ariaSort === 'ascending' ? (\r\n <span className=\"pdg-sort-icon pdg-sort-icon--asc\">▲</span>\r\n ) : null}\r\n {ariaSort === 'descending' ? (\r\n <span className=\"pdg-sort-icon pdg-sort-icon--desc\">▼</span>\r\n ) : null}\r\n {showPriority ? (\r\n <span className=\"pdg-sort-priority\">{priority}</span>\r\n ) : null}\r\n </span>\r\n ) : null}\r\n {filterable ? (\r\n <button\r\n type=\"button\"\r\n className={`pdg-filter-btn-icon${filterActive ? ' is-active' : ''}`}\r\n data-pdg-filter-btn={col.fieldName}\r\n data-pdg-no-sort\r\n aria-label={t('general.filter')}\r\n aria-expanded={openFilterCol === col.fieldName}\r\n title={filterActive ? t('general.filterActive') : t('general.filter')}\r\n ref={(el) => {\r\n filterBtnRefs.current[col.fieldName] = el;\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setOpenMenuCol(null);\r\n setOpenFilterCol((cur) =>\r\n cur === col.fieldName ? null : col.fieldName,\r\n );\r\n }}\r\n >\r\n ▽\r\n </button>\r\n ) : null}\r\n <button\r\n type=\"button\"\r\n className=\"pdg-col-menu-btn\"\r\n data-pdg-col-menu-btn={col.fieldName}\r\n data-pdg-no-sort\r\n aria-label={t('columnMenu.open')}\r\n aria-haspopup=\"menu\"\r\n aria-expanded={openMenuCol === col.fieldName}\r\n title={t('columnMenu.open')}\r\n ref={(el) => {\r\n menuBtnRefs.current[col.fieldName] = el;\r\n if (openColumnsPanel && openMenuCol === col.fieldName) {\r\n columnsPanelAnchorRef.current = el;\r\n }\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setOpenFilterCol(null);\r\n setOpenColumnsPanel(false);\r\n setOpenMenuCol((cur) =>\r\n cur === col.fieldName ? null : col.fieldName,\r\n );\r\n }}\r\n >\r\n ⋮\r\n </button>\r\n </div>\r\n {openMenuCol === col.fieldName ? (\r\n <ColumnMenuPopover\r\n column={col}\r\n controller={controller}\r\n sortModel={sortModel}\r\n filterModel={filterModel}\r\n itemsConfig={columnMenuItems}\r\n onCustomAction={onColumnMenuAction}\r\n open\r\n onOpenChange={(next) => {\r\n if (!next) setOpenMenuCol(null);\r\n }}\r\n anchorRef={{\r\n get current() {\r\n return menuBtnRefs.current[col.fieldName] ?? null;\r\n },\r\n }}\r\n onOpenFilter={() => {\r\n setOpenMenuCol(null);\r\n setOpenFilterCol(col.fieldName);\r\n }}\r\n onOpenColumnsPanel={() => {\r\n columnsPanelAnchorRef.current =\r\n menuBtnRefs.current[col.fieldName] ?? null;\r\n setOpenMenuCol(null);\r\n setOpenColumnsPanel(true);\r\n }}\r\n />\r\n ) : null}\r\n {filterable && filterUi && openFilterCol === col.fieldName ? (\r\n <ColumnFilterPopover\r\n column={col}\r\n kind={filterUi.mode === 'builtin' ? filterUi.kind : undefined}\r\n customName={\r\n filterUi.mode === 'custom' ? filterUi.name : undefined\r\n }\r\n customParams={\r\n filterUi.mode === 'custom' ? filterUi.params : undefined\r\n }\r\n customComponent={customFilter}\r\n filterModel={filterModel}\r\n controller={controller}\r\n open\r\n onOpenChange={(next) => {\r\n if (!next) setOpenFilterCol(null);\r\n }}\r\n anchorRef={{\r\n get current() {\r\n return filterBtnRefs.current[col.fieldName] ?? null;\r\n },\r\n }}\r\n />\r\n ) : null}\r\n {handle}\r\n </th>\r\n );\r\n };\r\n\r\n const renderFloatingFilterColumn = (col: ColumnSchema, index: number) => {\r\n const size = columnSizeStyle(col, table.columnWidths, colWindow.layoutWidths);\r\n const ui = isColumnFilterableInGrid(col, pagedWindow) ? resolveFilterUi(col) : null;\r\n if (isIndexColumn(col) || !ui || ui.mode !== 'builtin') {\r\n return (\r\n <th\r\n key={`ff-${col.fieldName}`}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n style={size}\r\n className={`pdg-floating-filter-cell ${columnPinClassName(col)}`}\r\n />\r\n );\r\n }\r\n return (\r\n <th\r\n key={`ff-${col.fieldName}`}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n style={size}\r\n className={`pdg-floating-filter-cell ${columnPinClassName(col)}`}\r\n >\r\n <input\r\n className=\"pdg-floating-filter-input\"\r\n data-pdg-floating-filter-input={col.fieldName}\r\n data-pdg-filter-kind={ui.kind}\r\n aria-label={`${t('general.filter')} ${col.fieldCaption}`}\r\n value={floatingFilterValue(filterModel, col.fieldName)}\r\n onChange={(e) => {\r\n controller.setFilterModel(\r\n applyFloatingFilter(filterModel, col, e.target.value),\r\n );\r\n }}\r\n />\r\n </th>\r\n );\r\n };\r\n\r\n const beginColumnDrag = (\r\n e: React.DragEvent<HTMLTableCellElement>,\r\n fieldName: string,\r\n ) => {\r\n suppressSortClickRef.current = true;\r\n draggedFieldRef.current = fieldName;\r\n e.dataTransfer.setData(\"text/plain\", fieldName);\r\n e.dataTransfer.effectAllowed = \"move\";\r\n };\r\n\r\n const hoverColumnDrop = (fieldName: string) => {\r\n setDropField((current) => (current === fieldName ? current : fieldName));\r\n };\r\n\r\n const leaveColumnDrop = (\r\n fieldName: string,\r\n currentTarget: HTMLElement,\r\n relatedTarget: EventTarget | null,\r\n ) => {\r\n if (relatedTarget instanceof Node && currentTarget.contains(relatedTarget)) {\r\n return;\r\n }\r\n setDropField((current) => (current === fieldName ? null : current));\r\n };\r\n\r\n const dropColumn = (destField: string) => {\r\n const sourceField = draggedFieldRef.current;\r\n const sourceGroup = draggedGroupRef.current;\r\n draggedFieldRef.current = null;\r\n draggedGroupRef.current = null;\r\n setDropField(null);\r\n if (sourceGroup) {\r\n const move = resolveGroupBlockReorder(displayColumns, sourceGroup, destField);\r\n if (!move) return;\r\n void controller.dispatch({\r\n type: \"COLUMN_REORDERED\",\r\n sourceIndex: move.sourceIndex,\r\n destIndex: move.destIndex,\r\n });\r\n return;\r\n }\r\n if (!sourceField) return;\r\n const move = resolveColumnReorder(displayColumns, sourceField, destField);\r\n if (!move) return;\r\n void controller.dispatch({\r\n type: \"COLUMN_REORDERED\",\r\n sourceIndex: move.sourceIndex,\r\n destIndex: move.destIndex,\r\n });\r\n };\r\n\r\n const endColumnDrag = () => {\r\n draggedFieldRef.current = null;\r\n draggedGroupRef.current = null;\r\n setDropField(null);\r\n };\r\n\r\n const markPointerOrigin = (e: React.PointerEvent<HTMLTableCellElement>) => {\r\n if (e.button !== 0) return;\r\n pointerOriginRef.current = { x: e.clientX, y: e.clientY };\r\n suppressSortClickRef.current = false;\r\n };\r\n\r\n const trackPointerMove = (e: React.PointerEvent<HTMLTableCellElement>) => {\r\n const origin = pointerOriginRef.current;\r\n if (!origin) return;\r\n const movedPx = Math.hypot(e.clientX - origin.x, e.clientY - origin.y);\r\n if (!shouldCommitHeaderSortClick(movedPx)) {\r\n suppressSortClickRef.current = true;\r\n }\r\n };\r\n\r\n const commitHeaderSort = (\r\n e: React.MouseEvent<HTMLTableCellElement>,\r\n fieldName: string,\r\n sortable: boolean,\r\n ) => {\r\n if (!sortable) return;\r\n if (isInteractiveHeaderTarget(e.target)) return;\r\n if (suppressSortClickRef.current) return;\r\n const origin = pointerOriginRef.current;\r\n if (origin) {\r\n const movedPx = Math.hypot(e.clientX - origin.x, e.clientY - origin.y);\r\n if (!shouldCommitHeaderSortClick(movedPx)) return;\r\n }\r\n const next = cycleSortModel(sortModel, fieldName, { multi: e.shiftKey });\r\n controller.setSortModel(next);\r\n };\r\n\r\n return (\r\n <thead className=\"top-0 z-20 sticky\" role=\"rowgroup\" data-pdg-dir={direction}>\r\n {header}\r\n {!validationResult.valid && (\r\n <CustomDropdownButton\r\n placement=\"bottom\"\r\n className=\"top-1 z-10 absolute flex m-0 p-0 rounded start-1\"\r\n items={items}\r\n >\r\n <span className=\"bg-red-600 border rounded-full w-2 h-2\"></span>\r\n </CustomDropdownButton>\r\n )}\r\n <ColumnGroupHeaderRows\r\n allVisible={visibleColumns}\r\n colWindow={colWindow}\r\n columnWidths={table.columnWidths}\r\n collapsedGroups={collapsedGroups}\r\n onToggleGroup={(groupId) => controller.toggleColumnGroup(groupId)}\r\n onGroupDragStart={(groupId) => {\r\n draggedGroupRef.current = groupId;\r\n }}\r\n />\r\n <tr\r\n role=\"row\"\r\n aria-rowindex={ARIA_HEADER_ROW_INDEX + groupDepth}\r\n style={{gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))`}}\r\n className={`relative h-10 bg-gray-gray3 rounded-t-lg w-full `}\r\n data-pdg-header-cols={\r\n colWindow.pinnedStart.length +\r\n colWindow.mountedScrollableCount +\r\n colWindow.pinnedEnd.length\r\n }\r\n >\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"th\"\r\n spacerRole=\"columnheader\"\r\n renderColumn={renderHeaderColumn}\r\n />\r\n </tr>\r\n <ColumnsPanelPopover\r\n columns={displayColumns}\r\n controller={controller}\r\n open={openColumnsPanel}\r\n onOpenChange={setOpenColumnsPanel}\r\n anchorRef={columnsPanelAnchorRef}\r\n />\r\n {floatingFilter ? (\r\n <tr\r\n role=\"row\"\r\n className=\"pdg-floating-filter-row\"\r\n data-pdg-floating-filter=\"true\"\r\n >\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"th\"\r\n spacerRole=\"columnheader\"\r\n renderColumn={renderFloatingFilterColumn}\r\n />\r\n </tr>\r\n ) : null}\r\n </thead>\r\n );\r\n}\r\n","/**\r\n * Pinned top/bottom host rows (PR-116). Pure — no React/DOM.\r\n * Display-only; not part of the UI row index / sort / filter / selection.\r\n */\r\n\r\nimport type { ColumnSchema } from '../../domain/types/ColumnSchema';\r\nimport { isIndexColumn } from '../columnWidth';\r\n\r\n/** Read a display value from a host pinned row object. */\r\nexport function readPinnedRowCellValue(\r\n row: unknown,\r\n column: ColumnSchema,\r\n): unknown {\r\n if (isIndexColumn(column)) return null;\r\n if (row == null || typeof row !== 'object') return null;\r\n const field = column.fieldName;\r\n if (field in (row as Record<string, unknown>)) {\r\n return (row as Record<string, unknown>)[field];\r\n }\r\n return null;\r\n}\r\n\r\nexport function countPinnedRows(\r\n top: readonly unknown[] | null | undefined,\r\n bottom: readonly unknown[] | null | undefined,\r\n): { top: number; bottom: number } {\r\n return {\r\n top: top?.length ?? 0,\r\n bottom: bottom?.length ?? 0,\r\n };\r\n}\r\n","/**\r\n * Pinned top/bottom rows (PR-116). Rendered outside the virtual window so\r\n * they stay fixed while the scroll body moves.\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\nimport { columnSizeStyle } from '../../engine/columnWidth';\r\nimport { readPinnedRowCellValue } from '../../engine/dataOps/pinnedRows';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport {\r\n ariaColIndex,\r\n ariaPinnedBottomRowIndex,\r\n ariaPinnedTopRowIndex,\r\n} from '../a11y/gridRoles';\r\nimport { columnPinCellProps } from '../columnPin';\r\nimport { valueParser } from '../helper';\r\nimport { useLocale, type ERPTableLocale } from '../host';\r\nimport { useColumnWindowOrAll } from '../virtual/columnWindow';\r\nimport { ColumnWindowCells } from '../virtual/ColumnWindowCells';\r\n\r\nexport type PinnedRowSide = 'top' | 'bottom';\r\n\r\ntype Props<TRow> = {\r\n side: PinnedRowSide;\r\n rows: readonly TRow[];\r\n controller: UITableController;\r\n /** Absolute data row count (for bottom aria indices). */\r\n dataRowCount: number;\r\n pinnedTopCount: number;\r\n};\r\n\r\nfunction PinnedRowCells<TRow>({\r\n row,\r\n columns,\r\n columnWidths,\r\n locale,\r\n}: {\r\n row: TRow;\r\n columns: ColumnSchema[];\r\n columnWidths: Record<string, number> | undefined;\r\n locale: ERPTableLocale;\r\n}) {\r\n const colWindow = useColumnWindowOrAll(columns, columnWidths);\r\n return (\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"td\"\r\n spacerRole=\"presentation\"\r\n renderColumn={(c, index) => {\r\n const pin = columnPinCellProps(\r\n c,\r\n colWindow.startPinOffsets,\r\n colWindow.endPinOffsets,\r\n );\r\n const raw = readPinnedRowCellValue(row, c);\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(index)}\r\n className={pin.className}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n style={{\r\n ...columnSizeStyle(c, columnWidths, colWindow.layoutWidths),\r\n ...pin.style,\r\n }}\r\n >\r\n {valueParser(raw, c.fieldType, locale)}\r\n </td>\r\n );\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport function ERPTablePinnedRows<TRow>({\r\n side,\r\n rows,\r\n controller,\r\n dataRowCount,\r\n pinnedTopCount,\r\n}: Props<TRow>) {\r\n const locale = useLocale();\r\n const view = controller.getViewState();\r\n if (!view || rows.length === 0) return null;\r\n\r\n const columns = view.columns ?? [];\r\n const isTop = side === 'top';\r\n const className = isTop\r\n ? 'erp-pinned-rows erp-pinned-rows--top'\r\n : 'erp-pinned-rows erp-pinned-rows--bottom';\r\n\r\n return (\r\n <tbody\r\n role=\"rowgroup\"\r\n className={className}\r\n data-erp-pinned-top={isTop ? '' : undefined}\r\n data-erp-pinned-bottom={isTop ? undefined : ''}\r\n >\r\n {rows.map((row, index) => {\r\n const ariaRowindex =\r\n side === 'top'\r\n ? ariaPinnedTopRowIndex(index)\r\n : ariaPinnedBottomRowIndex(index, dataRowCount, pinnedTopCount);\r\n return (\r\n <tr\r\n key={`pinned-${side}-${index}`}\r\n role=\"row\"\r\n aria-rowindex={ariaRowindex}\r\n data-erp-pinned-row={side}\r\n className=\"erp-pinned-row\"\r\n >\r\n <PinnedRowCells\r\n row={row}\r\n columns={columns}\r\n columnWidths={view.columnWidths}\r\n locale={locale}\r\n />\r\n </tr>\r\n );\r\n })}\r\n </tbody>\r\n );\r\n}\r\n","// engine/equality.ts — shared equality helpers for selector subscriptions\r\n\r\nexport function shallowEqualArray(\r\n a: unknown[] | null | undefined,\r\n b: unknown[] | null | undefined,\r\n): boolean {\r\n if (a === b) return true;\r\n if (!a || !b || a.length !== b.length) return false;\r\n for (let i = 0; i < a.length; i += 1) {\r\n if (!Object.is(a[i], b[i])) return false;\r\n }\r\n return true;\r\n}\r\n\r\n/** Structural compare for plain JSON-like snapshots (rows / view slices). */\r\nexport function structuralEqual(a: unknown, b: unknown): boolean {\r\n if (Object.is(a, b)) return true;\r\n if (a == null || b == null) return a === b;\r\n if (typeof a !== typeof b) return false;\r\n try {\r\n return JSON.stringify(a) === JSON.stringify(b);\r\n } catch {\r\n return false;\r\n }\r\n}\r\n","import type { VisibleRange } from '../../domain/value-objects/Viewport';\r\nimport { Viewport } from '../../domain/value-objects/Viewport';\r\nimport { SparseRowIndex } from '../../engine/SparseRowIndex';\r\nimport { ViewportCalculator } from '../../engine/ViewportCalculator';\r\n\r\nexport type VirtualWindowModel<T> = {\r\n readonly range: VisibleRange;\r\n readonly visibleItems: readonly T[];\r\n /** Absolute row indices matching visibleItems. */\r\n readonly absoluteIndices: readonly number[];\r\n readonly spacerTop: number;\r\n readonly spacerBottom: number;\r\n readonly totalHeight: number;\r\n};\r\n\r\n/**\r\n * Pure adapter helper: map items + viewport → render window.\r\n * No React / DOM — unit-testable in Node.\r\n */\r\nexport function buildVirtualWindow<T>(\r\n items: readonly T[],\r\n viewport: Viewport,\r\n): VirtualWindowModel<T> {\r\n const range = ViewportCalculator.calculate(items.length, viewport);\r\n const visibleItems = ViewportCalculator.projectRows(items, range);\r\n const absoluteIndices = ViewportCalculator.indices(range);\r\n return {\r\n range,\r\n visibleItems,\r\n absoluteIndices,\r\n spacerTop: range.startOffset,\r\n spacerBottom: range.endOffset,\r\n totalHeight: range.totalHeight,\r\n };\r\n}\r\n\r\n/** Same window as `buildVirtualWindow`, from SparseRowIndex.projectVisible (O(window)). */\r\nexport function buildVirtualWindowFromSparse<T>(\r\n index: SparseRowIndex<T>,\r\n viewport: Viewport,\r\n): VirtualWindowModel<T> {\r\n const range = ViewportCalculator.calculate(index.size, viewport);\r\n const visibleItems = index.projectVisible(range);\r\n const absoluteIndices = ViewportCalculator.indices(range);\r\n return {\r\n range,\r\n visibleItems,\r\n absoluteIndices,\r\n spacerTop: range.startOffset,\r\n spacerBottom: range.endOffset,\r\n totalHeight: range.totalHeight,\r\n };\r\n}\r\n\r\nexport function isSparseRowIndex<T>(\r\n value: readonly T[] | SparseRowIndex<T>,\r\n): value is SparseRowIndex<T> {\r\n return value instanceof SparseRowIndex;\r\n}\r\n\r\nexport function buildVirtualWindowFromSource<T>(\r\n items: readonly T[] | SparseRowIndex<T>,\r\n viewport: Viewport,\r\n): VirtualWindowModel<T> {\r\n return isSparseRowIndex(items)\r\n ? buildVirtualWindowFromSparse(items, viewport)\r\n : buildVirtualWindow(items, viewport);\r\n}\r\n\r\nexport function viewportFromScroll(params: {\r\n scrollOffset: number;\r\n viewportSize: number;\r\n rowHeight: number;\r\n overscan?: number;\r\n}): Viewport {\r\n return new Viewport(\r\n Math.max(0, params.scrollOffset),\r\n params.viewportSize,\r\n params.rowHeight,\r\n params.overscan ?? 2,\r\n );\r\n}\r\n\r\n/** Debounce-friendly equality for visible window identity. */\r\nexport function virtualWindowKey(range: VisibleRange): string {\r\n return `${range.startIndex}:${range.endIndex}:${range.totalHeight}`;\r\n}\r\n","import { useEffect, useState } from 'react';\r\n\r\nimport type { GridSession } from '../../application/session/GridSession';\r\nimport { Viewport } from '../../domain/value-objects/Viewport';\r\nimport { structuralEqual } from '../../engine/equality';\r\nimport {\r\n buildVirtualWindowFromSource,\r\n isSparseRowIndex,\r\n type VirtualWindowModel,\r\n virtualWindowKey,\r\n} from './virtualWindow';\r\nimport type { SparseRowIndex } from '../../engine/SparseRowIndex';\r\n\r\nexport type UseVirtualWindowResult<T> = VirtualWindowModel<T> & {\r\n readonly onScroll: (scrollTop: number, clientHeight?: number) => void;\r\n};\r\n\r\n/**\r\n * Syncs GridSession viewport with a scrollable container and returns\r\n * only the visible item window for rendering.\r\n */\r\nexport function useVirtualWindow<T>(\r\n session: GridSession | null | undefined,\r\n items: readonly T[] | SparseRowIndex<T>,\r\n options?: {\r\n rowHeight?: number;\r\n overscan?: number;\r\n initialViewportSize?: number;\r\n },\r\n): UseVirtualWindowResult<T> {\r\n const rowHeight = options?.rowHeight ?? 40;\r\n const overscan = options?.overscan ?? 2;\r\n const initialViewportSize = options?.initialViewportSize ?? 400;\r\n\r\n const [windowModel, setWindowModel] = useState<VirtualWindowModel<T>>(() =>\r\n buildVirtualWindowFromSource(\r\n items,\r\n session?.getViewport() ??\r\n new Viewport(0, initialViewportSize, rowHeight, overscan),\r\n ),\r\n );\r\n\r\n useEffect(() => {\r\n if (!session) {\r\n setWindowModel(\r\n buildVirtualWindowFromSource(\r\n items,\r\n new Viewport(0, initialViewportSize, rowHeight, overscan),\r\n ),\r\n );\r\n return;\r\n }\r\n\r\n const sync = () => {\r\n const next = buildVirtualWindowFromSource(items, session.getViewport());\r\n setWindowModel((prev) =>\r\n virtualWindowKey(prev.range) === virtualWindowKey(next.range) &&\r\n prev.visibleItems.length === next.visibleItems.length &&\r\n prev.visibleItems.every((item, i) => Object.is(item, next.visibleItems[i]))\r\n ? prev\r\n : next,\r\n );\r\n };\r\n\r\n sync();\r\n\r\n return session.subscribeSelected(\r\n () => {\r\n const vp = session.getViewport();\r\n const itemCount = isSparseRowIndex(items)\r\n ? session.getUiRowCount()\r\n : items.length;\r\n // Read after the count (that rebuilds a dirty index): a sort keeps the\r\n // count but changes the order.\r\n const indexRevision = isSparseRowIndex(items) ? items.revision : 0;\r\n return {\r\n scrollOffset: vp.scrollOffset,\r\n viewportSize: vp.viewportSize,\r\n rowHeight: vp.rowHeight,\r\n overscan: vp.overscan,\r\n itemCount,\r\n indexRevision,\r\n };\r\n },\r\n sync,\r\n structuralEqual,\r\n );\r\n }, [session, items, rowHeight, overscan, initialViewportSize]);\r\n\r\n const onScroll = (scrollTop: number, clientHeight?: number) => {\r\n if (!session) return;\r\n void session.dispatchViewIntent({\r\n type: 'CHANGE_VIEWPORT',\r\n scrollOffset: Math.max(0, scrollTop),\r\n viewportSize: clientHeight,\r\n rowHeight,\r\n overscan,\r\n });\r\n };\r\n\r\n return {\r\n ...windowModel,\r\n onScroll,\r\n };\r\n}\r\n","\"use client\";\r\n\r\nimport React, {\r\n type RefObject,\r\n useEffect,\r\n useRef,\r\n} from 'react';\r\n\r\nimport type { GridSession } from '../../application/session/GridSession';\r\nimport { columnSizeStyle } from '../../engine/columnWidth';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { UIRow } from '../type';\r\nimport { columnPinCellProps } from '../columnPin';\r\nimport { useVirtualWindow } from '../virtual/useVirtualWindow';\r\nimport { useColumnWindowOrAll } from '../virtual/columnWindow';\r\nimport { ColumnWindowCells } from '../virtual/ColumnWindowCells';\r\nimport { ERPTableRow } from './eRPTableRow';\r\n\r\nconst ERPTableGroupRow = React.lazy(() =>\r\n import('./ERPTableGroupRow').then((m) => ({ default: m.ERPTableGroupRow })),\r\n);\r\n\r\nconst DEFAULT_ROW_HEIGHT = 40;\r\n\r\ntype Props = {\r\n controller: UITableController;\r\n session: GridSession;\r\n tableKey: string;\r\n scrollParentRef: RefObject<HTMLDivElement | null>;\r\n viewportHeight: number;\r\n rowHeight?: number;\r\n overscan?: number;\r\n moreDetailComponent?: React.ComponentType<{ data: unknown }>;\r\n /** Shifts aria-rowindex when pinned-top rows are present (PR-116). */\r\n pinnedTopCount?: number;\r\n};\r\n\r\n/**\r\n * Table-native virtual body: same ERPTableRow as pagination path,\r\n * but only the visible window (via GridSession viewport) is mounted.\r\n */\r\nexport function ERPTableVirtualBody({\r\n controller,\r\n session,\r\n tableKey,\r\n scrollParentRef,\r\n viewportHeight,\r\n rowHeight = DEFAULT_ROW_HEIGHT,\r\n overscan = 2,\r\n moreDetailComponent: MoreDetailComponent,\r\n pinnedTopCount = 0,\r\n}: Props) {\r\n const table = controller.getViewState();\r\n const dragRowId = useRef<number | null>(null);\r\n const uiRowIndex = session.getEngine().getUiRowIndex();\r\n\r\n const {\r\n visibleItems: visibleIds,\r\n absoluteIndices,\r\n spacerTop,\r\n spacerBottom,\r\n onScroll,\r\n } = useVirtualWindow(session, uiRowIndex, {\r\n rowHeight,\r\n overscan,\r\n initialViewportSize: viewportHeight,\r\n });\r\n\r\n const visibleItems = visibleIds\r\n .map((id) => controller.getRowView(id))\r\n .filter((row): row is UIRow => row != null);\r\n\r\n useEffect(() => {\r\n void session.dispatchViewIntent({\r\n type: 'CHANGE_VIEWPORT',\r\n scrollOffset: session.getViewport().scrollOffset,\r\n viewportSize: viewportHeight,\r\n rowHeight,\r\n overscan,\r\n });\r\n }, [session, viewportHeight, rowHeight, overscan]);\r\n\r\n useEffect(() => {\r\n const el = scrollParentRef.current;\r\n if (!el) return;\r\n\r\n const handleScroll = () => {\r\n onScroll(el.scrollTop, el.clientHeight);\r\n };\r\n\r\n el.addEventListener('scroll', handleScroll, { passive: true });\r\n return () => el.removeEventListener('scroll', handleScroll);\r\n }, [scrollParentRef, onScroll]);\r\n\r\n const colWindow = useColumnWindowOrAll(\r\n table?.columns ?? [],\r\n table?.columnWidths,\r\n );\r\n\r\n if (!table) return null;\r\n\r\n const spacerStyle = {\r\n height: 0,\r\n padding: 0,\r\n border: 'none',\r\n lineHeight: 0,\r\n } as const;\r\n\r\n const renderSpacer = (kind: 'top' | 'bottom', height: number) => {\r\n if (height <= 0) return null;\r\n return (\r\n <tr aria-hidden role=\"presentation\" data-erp-virtual-spacer={kind}>\r\n <ColumnWindowCells\r\n window={colWindow}\r\n spacerElement=\"td\"\r\n spacerRole=\"presentation\"\r\n spacerStyle={{ ...spacerStyle, height }}\r\n renderColumn={(c) => {\r\n const pin = columnPinCellProps(\r\n c,\r\n colWindow.startPinOffsets,\r\n colWindow.endPinOffsets,\r\n );\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"presentation\"\r\n className={pin.className}\r\n data-erp-col-pin={pin['data-erp-col-pin']}\r\n style={{\r\n ...spacerStyle,\r\n height,\r\n ...columnSizeStyle(c, table.columnWidths, colWindow.layoutWidths),\r\n ...pin.style,\r\n }}\r\n />\r\n );}}\r\n />\r\n </tr>\r\n );\r\n };\r\n\r\n return (\r\n <tbody className=\"w-full min-w-0 overflow-x-auto\" data-erp-virtual-body role=\"rowgroup\">\r\n {renderSpacer('top', spacerTop)}\r\n\r\n <React.Suspense fallback={null}>\r\n {visibleItems.map((row, i) => {\r\n const absoluteIndex = absoluteIndices[i] ?? i;\r\n if (row.rowKind === 'group') {\r\n return (\r\n <ERPTableGroupRow\r\n key={row.id}\r\n row={row}\r\n index={absoluteIndex}\r\n pinnedTopCount={pinnedTopCount}\r\n table={table}\r\n controller={controller}\r\n tableKey={tableKey}\r\n isSelected={!!table.selectedRows?.[row.id]}\r\n isActive={!!controller.isActiveRow(row.id)}\r\n />\r\n );\r\n }\r\n return (\r\n <ERPTableRow\r\n key={row.id}\r\n row={row}\r\n stripeIndex={absoluteIndex}\r\n index={absoluteIndex}\r\n pinnedTopCount={pinnedTopCount}\r\n table={table}\r\n controller={controller}\r\n tableKey={tableKey}\r\n draggedRowIdRef={dragRowId}\r\n moreDetailComponent={MoreDetailComponent}\r\n isSelected={!!table.selectedRows?.[row.id]}\r\n isActive={!!controller.isActiveRow(row.id)}\r\n isCut={!!controller.isCutRow(row.id)}\r\n />\r\n );\r\n })}\r\n </React.Suspense>\r\n\r\n {renderSpacer('bottom', spacerBottom)}\r\n </tbody>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\n\r\nimport { CustomTooltip } from '../primitives';\r\n\r\ntype Props = {\r\n label: string;\r\n disabled?: boolean;\r\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n} & Omit<\r\n React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n 'children' | 'aria-label' | 'type' | 'disabled' | 'onClick' | 'className'\r\n>;\r\n\r\nexport function ToolbarIconButton({\r\n label,\r\n disabled,\r\n onClick,\r\n children,\r\n className,\r\n ...rest\r\n}: Props) {\r\n return (\r\n <CustomTooltip title={label}>\r\n <button\r\n type=\"button\"\r\n aria-label={label}\r\n disabled={disabled}\r\n className={`erp-toolbar-btn flex justify-center items-center p-1 border rounded ${\r\n disabled ? \"opacity-40\" : \"\"\r\n } ${className ?? \"\"}`}\r\n onClick={onClick}\r\n {...rest}\r\n >\r\n {children}\r\n </button>\r\n </CustomTooltip>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState } from 'react';\r\n\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\nimport { useDirection, useHostToast, useTranslations } from '../host';\r\nimport { PdfIcon, Spin, SpinIcon } from '../primitives';\r\n\r\nconst PDF_EXPORT_PLUGIN = 'pdf-export';\r\n\r\ntype Props = {\r\n pluginHost?: PluginHost;\r\n};\r\n\r\n/**\r\n * Desktop/mobile toolbar control. Renders only when PdfExportPlugin is registered.\r\n */\r\nexport function PdfExportToolbarButton({ pluginHost }: Props) {\r\n const t = useTranslations();\r\n const direction = useDirection();\r\n const { success, error } = useHostToast();\r\n const [busy, setBusy] = useState(false);\r\n\r\n if (!pluginHost?.has(PDF_EXPORT_PLUGIN)) return null;\r\n\r\n const handleExport = async () => {\r\n if (busy) return;\r\n setBusy(true);\r\n try {\r\n await pluginHost.requestExport({\r\n format: 'pdf',\r\n direction,\r\n fileName: `export-${new Date().toISOString().slice(0, 10)}.pdf`,\r\n });\r\n success(t('general.exportToPdfSuccess'));\r\n } catch {\r\n error(t('general.exportToPdfError'));\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n return (\r\n <ToolbarIconButton\r\n label={t('general.exportToPdf')}\r\n disabled={busy}\r\n data-erp-pdf-export=\"\"\r\n className={busy ? 'opacity-60 cursor-wait' : ''}\r\n onClick={() => {\r\n void handleExport();\r\n }}\r\n >\r\n {busy ? (\r\n <Spin\r\n size=\"small\"\r\n indicator={<SpinIcon config={{ width: 16, height: 16 }} />}\r\n />\r\n ) : (\r\n <PdfIcon config={{ width: 18, height: 18 }} />\r\n )}\r\n </ToolbarIconButton>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useRef, useState } from 'react';\r\n\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\nimport { useHostToast, useTranslations } from '../host';\r\nimport { ExcelImport, Spin, SpinIcon } from '../primitives';\r\n\r\nconst EXCEL_IMPORT_PLUGIN = 'excel-import';\r\nconst XLSX_ACCEPT =\r\n '.xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\r\n\r\ntype Props = {\r\n pluginHost?: PluginHost;\r\n};\r\n\r\n/**\r\n * Desktop/mobile toolbar control. Renders only when ExcelImportPlugin is registered.\r\n */\r\nexport function ExcelImportToolbarButton({ pluginHost }: Props) {\r\n const t = useTranslations();\r\n const { success, error } = useHostToast();\r\n const [busy, setBusy] = useState(false);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n if (!pluginHost?.has(EXCEL_IMPORT_PLUGIN)) return null;\r\n\r\n const handleImport = async (file: File) => {\r\n if (busy) return;\r\n setBusy(true);\r\n try {\r\n await pluginHost.requestImport({ format: 'xlsx', data: file });\r\n success(t('general.importFromExcelSuccess'));\r\n } catch {\r\n error(t('general.importFromExcelError'));\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <ToolbarIconButton\r\n label={t('general.importFromExcel')}\r\n disabled={busy}\r\n data-erp-xlsx-import=\"\"\r\n className={busy ? 'opacity-60 cursor-wait' : ''}\r\n onClick={() => {\r\n inputRef.current?.click();\r\n }}\r\n >\r\n {busy ? (\r\n <Spin\r\n size=\"small\"\r\n indicator={<SpinIcon config={{ width: 16, height: 16 }} />}\r\n />\r\n ) : (\r\n <ExcelImport config={{ width: 18, height: 18 }} />\r\n )}\r\n </ToolbarIconButton>\r\n <input\r\n ref={inputRef}\r\n type=\"file\"\r\n accept={XLSX_ACCEPT}\r\n hidden\r\n data-erp-xlsx-import-input=\"\"\r\n onChange={(event) => {\r\n const file = event.target.files?.[0];\r\n event.target.value = '';\r\n if (file) void handleImport(file);\r\n }}\r\n />\r\n </>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport React, {\r\n useEffect,\r\n useLayoutEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport { Select } from '../primitives';\r\nimport { useMediaQuery, useThemePortalStyle, useTranslations } from '../host';\r\nimport { LeftChevron, RightChevron } from '../primitives';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useGridSearchState } from '../hooks/useEngineSelector';\r\nimport { findColumnMatches, navigateToMatch } from './utils';\r\n\r\nconst MOBILE_SEARCH_PANEL_HEIGHT = 220;\r\n\r\ninterface GridSearchPanelProps {\r\n controller: UITableController;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n anchorRef: React.RefObject<HTMLElement | null>;\r\n}\r\n\r\nexport function GridSearchPanel({\r\n controller,\r\n isOpen,\r\n onClose,\r\n anchorRef,\r\n}: GridSearchPanelProps) {\r\n const t = useTranslations();\r\n const { match: viewportMatch } = useMediaQuery('XLUP');\r\n const isMobile = viewportMatch === false;\r\n const searchState = useGridSearchState(controller);\r\n const [columnId, setColumnId] = useState('');\r\n const [query, setQuery] = useState('');\r\n const [hasSearched, setHasSearched] = useState(false);\r\n const [position, setPosition] = useState({ top: 0, left: 0 });\r\n const panelRef = useRef<HTMLDivElement>(null);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const themeVars = useThemePortalStyle();\r\n\r\n const table = controller.getViewState();\r\n const columns = useMemo(\r\n () => (table?.columns ?? []).filter(col => !col.hidden && col.fieldName !== 'index'),\r\n [table?.columns],\r\n );\r\n\r\n const columnOptions = useMemo(\r\n () =>\r\n columns.map(col => ({\r\n value: col.fieldName,\r\n label: col.fieldCaption || col.fieldName,\r\n })),\r\n [columns],\r\n );\r\n\r\n const isCurrentSearch =\r\n hasSearched &&\r\n searchState?.columnId === columnId &&\r\n searchState?.query === query.trim();\r\n\r\n const totalMatches = isCurrentSearch ? searchState?.matches.length ?? 0 : 0;\r\n const currentMatchIndex = isCurrentSearch ? searchState?.currentIndex ?? -1 : -1;\r\n const canNavigate = totalMatches > 1;\r\n\r\n useEffect(() => {\r\n if (!columnId && columns.length > 0) {\r\n setColumnId(columns[0].fieldName);\r\n }\r\n }, [columns, columnId]);\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen || isMobile || !anchorRef.current) return;\r\n\r\n const updatePosition = () => {\r\n const rect = anchorRef.current!.getBoundingClientRect();\r\n setPosition({\r\n left: rect.left,\r\n top: rect.top - 8,\r\n });\r\n };\r\n\r\n updatePosition();\r\n window.addEventListener('resize', updatePosition);\r\n window.addEventListener('scroll', updatePosition, true);\r\n\r\n return () => {\r\n window.removeEventListener('resize', updatePosition);\r\n window.removeEventListener('scroll', updatePosition, true);\r\n };\r\n }, [isOpen, isMobile, anchorRef]);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n inputRef.current?.focus();\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n\r\n const handleClickOutside = (event: MouseEvent) => {\r\n const target = event.target as Node;\r\n if (panelRef.current?.contains(target) || anchorRef.current?.contains(target)) {\r\n return;\r\n }\r\n onClose();\r\n };\r\n\r\n const timer = window.setTimeout(() => {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n }, 0);\r\n\r\n return () => {\r\n window.clearTimeout(timer);\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n };\r\n }, [isOpen, onClose, anchorRef]);\r\n\r\n const runSearch = async (startIndex = 0) => {\r\n const trimmedQuery = query.trim();\r\n if (!columnId || !trimmedQuery) return;\r\n\r\n // Page-window mode streams from IndexedDB (lazy module); otherwise the\r\n // in-memory QuickFilterIndex answers synchronously.\r\n const matches = controller.isPagedWindow?.()\r\n ? await (\r\n await import('./pagedSearch')\r\n ).findPagedColumnMatches(controller, columnId, trimmedQuery)\r\n : findColumnMatches(controller, columnId, trimmedQuery);\r\n setHasSearched(true);\r\n\r\n if (!matches.length) {\r\n await controller.dispatch({\r\n type: 'UI_SET_GRID_SEARCH',\r\n search: { columnId, query: trimmedQuery, matches: [], currentIndex: -1 },\r\n });\r\n return;\r\n }\r\n\r\n const index = Math.min(Math.max(startIndex, 0), matches.length - 1);\r\n await controller.dispatch({\r\n type: 'UI_SET_GRID_SEARCH',\r\n search: { columnId, query: trimmedQuery, matches, currentIndex: index },\r\n });\r\n await navigateToMatch(controller, matches[index]);\r\n };\r\n\r\n const goToMatch = async (direction: 1 | -1) => {\r\n if (!canNavigate || !searchState?.matches.length) return;\r\n\r\n const nextIndex =\r\n (searchState.currentIndex + direction + searchState.matches.length) %\r\n searchState.matches.length;\r\n const nextState = { ...searchState, currentIndex: nextIndex };\r\n await controller.dispatch({\r\n type: 'UI_SET_GRID_SEARCH',\r\n search: nextState,\r\n });\r\n await navigateToMatch(controller, nextState.matches[nextIndex]);\r\n };\r\n\r\n if (!isOpen || typeof document === 'undefined') return null;\r\n\r\n const resultSummary = !hasSearched\r\n ? ''\r\n : totalMatches > 0\r\n ? t('general.searchFound', { count: totalMatches })\r\n : t('general.searchNotFound');\r\n\r\n const positionSummary =\r\n totalMatches > 0 && currentMatchIndex >= 0\r\n ? t('general.searchPosition', {\r\n current: currentMatchIndex + 1,\r\n total: totalMatches,\r\n })\r\n : '';\r\n\r\n const panelContent = (\r\n <>\r\n <Select\r\n className=\"w-full\"\r\n value={columnId || undefined}\r\n options={columnOptions}\r\n placeholder={t('general.choice')}\r\n getPopupContainer={(trigger: HTMLElement) => trigger.parentElement ?? document.body}\r\n onChange={(value) => {\r\n setColumnId(String(value ?? ''));\r\n setHasSearched(false);\r\n }}\r\n />\r\n\r\n <input\r\n ref={inputRef}\r\n type=\"text\"\r\n value={query}\r\n placeholder={t('general.search')}\r\n className=\"px-3 py-2 border border-gray-gray5 rounded w-full text-sm outline-none focus:border-blue-blue6\"\r\n onChange={event => {\r\n setQuery(event.target.value);\r\n setHasSearched(false);\r\n }}\r\n onKeyDown={event => {\r\n if (event.key === 'Enter') {\r\n void runSearch(0);\r\n }\r\n }}\r\n />\r\n\r\n <div className=\"flex justify-between items-center gap-2\">\r\n <button\r\n type=\"button\"\r\n className=\"flex-1 bg-blue-blue6 px-3 py-1.5 rounded text-white text-sm\"\r\n onClick={() => void runSearch(0)}\r\n >\r\n {t('general.search')}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n title={t('general.prev')}\r\n aria-label={t('general.prev')}\r\n className=\"erp-toolbar-btn flex justify-center items-center p-1.5 border border-gray-gray5 rounded disabled:opacity-40\"\r\n disabled={!canNavigate}\r\n onClick={() => void goToMatch(-1)}\r\n >\r\n <LeftChevron config={{ width: 16, height: 16 }} />\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n title={t('general.next')}\r\n aria-label={t('general.next')}\r\n className=\"erp-toolbar-btn flex justify-center items-center p-1.5 border border-gray-gray5 rounded disabled:opacity-40\"\r\n disabled={!canNavigate}\r\n onClick={() => void goToMatch(1)}\r\n >\r\n <RightChevron config={{ width: 16, height: 16 }} />\r\n </button>\r\n </div>\r\n\r\n {resultSummary ? (\r\n <span className=\"text-gray-gray7 text-xs text-center\">{resultSummary}</span>\r\n ) : null}\r\n\r\n {positionSummary ? (\r\n <span className=\"text-blue-blue6 text-xs text-center font-medium\">{positionSummary}</span>\r\n ) : null}\r\n </>\r\n );\r\n\r\n if (isMobile) {\r\n return createPortal(\r\n <div\r\n ref={panelRef}\r\n style={{\r\n ...themeVars,\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n width: '100%',\r\n height: MOBILE_SEARCH_PANEL_HEIGHT,\r\n zIndex: 9999,\r\n }}\r\n className=\"flex flex-col gap-2 bg-main-white shadow-lg px-3 py-3 border-b border-gray-gray5\"\r\n >\r\n {panelContent}\r\n </div>,\r\n document.body,\r\n );\r\n }\r\n\r\n return createPortal(\r\n <div\r\n ref={panelRef}\r\n style={{\r\n ...themeVars,\r\n position: 'fixed',\r\n left: position.left,\r\n top: position.top,\r\n transform: 'translateY(-100%)',\r\n zIndex: 9999,\r\n }}\r\n className=\"flex flex-col gap-2 bg-white shadow-lg p-3 border border-gray-gray5 rounded-lg min-w-[320px]\"\r\n >\r\n {panelContent}\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n","'use client';\r\n\r\nimport React, { useRef, useState } from 'react';\r\n\r\nimport { useTranslations } from '../host';\r\nimport { Magnifier } from '../primitives';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\nimport { GridSearchPanel } from './GridSearchPanel';\r\n\r\ninterface GridSearchControlProps {\r\n controller: UITableController;\r\n}\r\n\r\nexport function GridSearchControl({ controller }: GridSearchControlProps) {\r\n const t = useTranslations();\r\n const [searchOpen, setSearchOpen] = useState(false);\r\n const searchAnchorRef = useRef<HTMLDivElement>(null);\r\n\r\n const toggleSearch = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n event.stopPropagation();\r\n setSearchOpen((prev) => {\r\n if (prev) {\r\n void controller.dispatch({ type: 'UI_CLEAR_GRID_SEARCH' });\r\n }\r\n return !prev;\r\n });\r\n };\r\n\r\n const closeSearch = () => {\r\n setSearchOpen(false);\r\n void controller.dispatch({ type: 'UI_CLEAR_GRID_SEARCH' });\r\n };\r\n\r\n return (\r\n <div className=\"relative\" ref={searchAnchorRef}>\r\n <ToolbarIconButton\r\n label={t(\"general.search\")}\r\n className={searchOpen ? \"bg-blue-blue11\" : \"\"}\r\n onClick={toggleSearch}\r\n >\r\n <Magnifier config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n <GridSearchPanel\r\n controller={controller}\r\n isOpen={searchOpen}\r\n anchorRef={searchAnchorRef}\r\n onClose={closeSearch}\r\n />\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nimport { useLocale, useTranslations } from '../host';\r\nimport { CustomCheckbox } from '../primitives';\r\n\r\nimport { valueParser } from '../helper';\r\nimport { IMultiSelectConfig } from '../type';\r\n\r\ntype MultiSelectRow = Record<string, unknown>;\r\ntype MultiSelectRowId = string | number;\r\n\r\ninterface Props {\r\n rows: MultiSelectRow[];\r\n ListConfig: IMultiSelectConfig[\"ListConfig\"];\r\n selectedRows: Map<MultiSelectRowId, MultiSelectRow>;\r\n fieldKey: string;\r\n onToggleRow: (row: MultiSelectRow) => void;\r\n}\r\n\r\nexport function MultiSelectListBody({\r\n rows,\r\n ListConfig,\r\n selectedRows,\r\n fieldKey,\r\n onToggleRow,\r\n}: Props) {\r\n const locale = useLocale()\r\n const t = useTranslations()\r\n return (\r\n <tbody>\r\n {rows.map((row) => {\r\n const rawId = row[fieldKey];\r\n const id =\r\n typeof rawId === 'string' || typeof rawId === 'number' ? rawId : String(rawId);\r\n\r\n return (\r\n <tr key={String(id)} className=\"border h-10\">\r\n {ListConfig.filter((c) => c.hidden !== true).map((col, idx: number) => (\r\n <td key={idx} className=\"px-2 border text-xs\">\r\n {idx === 0 && (\r\n <CustomCheckbox\r\n checked={selectedRows.has(id)}\r\n onClick={() => onToggleRow(row)}\r\n />\r\n )}\r\n\r\n {valueParser(row[col.fieldName],col.fieldType)}\r\n </td>\r\n ))}\r\n </tr>\r\n );\r\n })}\r\n</tbody>\r\n\r\n );\r\n}\r\n ","import React from 'react';\r\n\r\nimport { CustomCheckbox } from '../primitives';\r\n\r\nimport { IMultiSelectConfig } from '../type';\r\n\r\ntype MultiSelectRow = Record<string, unknown>;\r\ntype MultiSelectRowId = string | number;\r\n\r\ninterface Props {\r\n ListConfig: IMultiSelectConfig[\"ListConfig\"];\r\n rows: MultiSelectRow[];\r\n fieldKey: string;\r\n selectedRows: Map<MultiSelectRowId, MultiSelectRow>;\r\n onToggleAll: () => void;\r\n}\r\n\r\nexport function MultiSelectListHeader({\r\n ListConfig,\r\n rows,\r\n fieldKey,\r\n selectedRows,\r\n onToggleAll,\r\n}: Props) {\r\n const isAllSelected =\r\n rows.length > 0 &&\r\n rows.every((r) => {\r\n const rawId = r[fieldKey];\r\n const id =\r\n typeof rawId === 'string' || typeof rawId === 'number'\r\n ? rawId\r\n : String(rawId);\r\n return selectedRows.has(id);\r\n });\r\n\r\n return (\r\n <thead className=\"top-0 z-20 sticky\">\r\n <tr className=\"bg-gray-gray3 h-10\">\r\n {ListConfig.filter((c) => c.hidden !== true).map((col, index) => (\r\n <th key={index} className=\"px-2 border text-xs text-start\">\r\n {col.fieldName == \"index\" ? (\r\n <CustomCheckbox checked={isAllSelected} onClick={onToggleAll} />\r\n ) : (\r\n <>{col.fieldCaption}</>\r\n )}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n );\r\n}\r\n","import React, {\r\n useEffect,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\n\r\nimport { Pagination, CustomButton, InputText, LeftChevron, RightChevron } from '../primitives';\r\nimport {\r\n useDirection,\r\n useHostDependOn,\r\n useLocale,\r\n useRemoteQuery,\r\n useTranslations,\r\n} from '../host';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { IMultiSelectConfig } from '../type';\r\nimport { MultiSelectListBody } from './body';\r\nimport { MultiSelectListHeader } from './header';\r\n\r\nfunction asRowId(value: unknown): string | number | undefined {\r\n return typeof value === 'string' || typeof value === 'number'\r\n ? value\r\n : undefined;\r\n}\r\n\r\ninterface Props {\r\n controller: UITableController;\r\n multiSelectConfig: IMultiSelectConfig;\r\n handleCloseModal: () => void;\r\n}\r\n\r\nexport default function MultiselectList({\r\n multiSelectConfig,\r\n controller,\r\n handleCloseModal,\r\n}: Props) {\r\n const { dynamicValue, fieldKey, detailFieldKey, onAdd, ListConfig } =\r\n multiSelectConfig;\r\n const locale = useLocale();\r\n const direction = useDirection();\r\n const t = useTranslations();\r\n const [pageNumber, setPageNumber] = useState(1);\r\n const [pageRecordCount, setPageRecordCount] = useState(8);\r\n const [selectedRows, setSelectedRows] = useState<\r\n Map<string | number, Record<string, unknown>>\r\n >(new Map());\r\n const [searchInput, setSearchInput] = useState(\"\");\r\n const [quickSearch, setQuickSearch] = useState(\"\");\r\n const { endpoint, repoViewId, dependOn, ...bodyRequest } = dynamicValue;\r\n const { dependencyBody, isReady } = useHostDependOn(dependOn, {\r\n enabled: Boolean(multiSelectConfig.dependOnFromHost),\r\n });\r\n const body = {\r\n ...bodyRequest,\r\n ...dependencyBody,\r\n PagingInfo: {\r\n PageRecordCount: pageRecordCount,\r\n PageNumber: pageNumber,\r\n },\r\n FullSearchPhrase: quickSearch,\r\n RepoViewId: repoViewId,\r\n };\r\n const existBody = Object.fromEntries(\r\n Object.entries(body).filter(([, value]) => value !== null),\r\n );\r\n const { data } = useRemoteQuery<Record<string, unknown>[]>({\r\n url: endpoint,\r\n body: existBody,\r\n skip: !isReady,\r\n });\r\n // const processedData = useProcessedData({\r\n // data: data?.Data,\r\n // columnsConfig: ListConfig,\r\n // locale,\r\n // });\r\n // console.log(processedData);\r\n const rows = useMemo(() => {\r\n return data?.Data ?? [];\r\n }, [data]);\r\n\r\n const toggleRow = (row: Record<string, unknown>) => {\r\n const id = asRowId(row[fieldKey]);\r\n if (id === undefined) return;\r\n setSelectedRows((prev) => {\r\n const newMap = new Map(prev);\r\n\r\n if (newMap.has(id)) {\r\n newMap.delete(id);\r\n } else {\r\n newMap.set(id, row);\r\n }\r\n\r\n return newMap;\r\n });\r\n };\r\n\r\n const toggleSelectAll = () => {\r\n const allSelected = rows.every((r: Record<string, unknown>) => {\r\n const id = asRowId(r[fieldKey]);\r\n return id !== undefined && selectedRows.has(id);\r\n });\r\n\r\n setSelectedRows((prev) => {\r\n const newMap = new Map(prev);\r\n\r\n if (allSelected) {\r\n rows.forEach((r: Record<string, unknown>) => {\r\n const id = asRowId(r[fieldKey]);\r\n if (id !== undefined) newMap.delete(id);\r\n });\r\n } else {\r\n rows.forEach((r: Record<string, unknown>) => {\r\n const id = asRowId(r[fieldKey]);\r\n if (id !== undefined) newMap.set(id, r);\r\n });\r\n }\r\n\r\n return newMap;\r\n });\r\n };\r\n\r\n const handleAdd = () => {\r\n const selected = Array.from(selectedRows.values());\r\n const rows = selected.map((row) =>\r\n Object.entries(row).map(([key, value]) => {\r\n const config = multiSelectConfig.ListConfig.find(\r\n (cfg) => cfg.fieldName === key,\r\n );\r\n return {\r\n key,\r\n value: config?.returnValue ? config.returnValue(row, key) : value,\r\n display: config?.returnDisplayValue\r\n ? config.returnDisplayValue(row, key)\r\n : value,\r\n };\r\n }),\r\n );\r\n controller.dispatch({ type: \"ADD_NEW_ROWS\", rows, detailFieldKey });\r\n onAdd?.(selected);\r\n handleCloseModal();\r\n };\r\n\r\n const handlePagination = (page: number) => {\r\n setPageNumber(page);\r\n };\r\n\r\n const handlePageSizeChange = (_page: number, size: number) => {\r\n setPageRecordCount(size);\r\n setPageNumber(1);\r\n };\r\n\r\n useEffect(() => {\r\n const handler = setTimeout(() => {\r\n setQuickSearch(searchInput);\r\n setPageNumber(1);\r\n }, 808);\r\n\r\n return () => {\r\n clearTimeout(handler);\r\n };\r\n }, [searchInput]);\r\n return (\r\n <div className=\"flex flex-col justify-between gap-2 p-2 border !h-full\">\r\n <div className=\"flex flex-col gap-2\">\r\n <InputText\r\n value={searchInput}\r\n onChange={(e: { target: { value: string } }) => setSearchInput(e.target.value)}\r\n placeholder={t('general.search')}\r\n className=\" \"\r\n />\r\n <table className=\"w-full border-collapse\">\r\n <MultiSelectListHeader\r\n ListConfig={ListConfig}\r\n fieldKey={fieldKey}\r\n rows={rows}\r\n selectedRows={selectedRows}\r\n onToggleAll={toggleSelectAll}\r\n />\r\n\r\n <MultiSelectListBody\r\n rows={rows}\r\n fieldKey={fieldKey}\r\n ListConfig={ListConfig}\r\n selectedRows={selectedRows}\r\n onToggleRow={toggleRow}\r\n />\r\n </table>\r\n </div>\r\n\r\n <div className=\"flex justify-between items-center\">\r\n <CustomButton\r\n type=\"text\"\r\n className=\"bg-main-black dark:bg-main-white text-gray-gray3 dark:text-gray-gray7\"\r\n onClick={handleAdd}\r\n >\r\n {t('general.add')}\r\n </CustomButton>\r\n\r\n <Pagination\r\n prevIcon={\r\n <CustomButton className=\"m-0 p-0 rounded w-fit\">\r\n {direction === \"rtl\" ? <RightChevron /> : <LeftChevron />}\r\n </CustomButton>\r\n }\r\n nextIcon={\r\n <CustomButton className=\"m-0 p-0 w-fit\">\r\n {direction === \"rtl\" ? <LeftChevron /> : <RightChevron />}\r\n </CustomButton>\r\n }\r\n current={pageNumber}\r\n pageSize={pageRecordCount}\r\n total={data?.TotalCount ?? 0}\r\n onShowSizeChange={handlePageSizeChange}\r\n onChange={handlePagination}\r\n // hideOnSinglePage\r\n showTitle={false}\r\n className={`\r\n [&_.ant-pagination-item-active:hover]:!bg-main-black \r\n [&_.ant-pagination-item-active:hover]:!border-main-black \r\n [&_.ant-pagination-item-active]:!border-main-black \r\n [&_.ant-pagination-next_.ant-btn:hover]:!border-main-black \r\n [&_.ant-pagination-prev_.ant-btn:hover]:!border-main-black \r\n [&_.ant-pagination-item-active_a:hover]:!text-main-white \r\n [&_.ant-pagination-item-active_a]:!text-main-black\r\n`}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\n\r\nimport { useERPTableHost, useTranslations } from '../host';\r\nimport { MoonIcon, SunIcon } from '../primitives';\r\nimport { isStockDarkTheme } from './resolveActiveTheme';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\n\r\nexport function ThemeToggleButton() {\r\n const t = useTranslations();\r\n const { themeToggle, themeLocked, theme, onToggleTheme } = useERPTableHost();\r\n if (!themeToggle || themeLocked || !onToggleTheme || !theme) return null;\r\n\r\n const isDark = isStockDarkTheme(theme);\r\n const label = isDark ? t('general.themeLight') : t('general.themeDark');\r\n\r\n return (\r\n <ToolbarIconButton\r\n label={label}\r\n data-erp-theme-toggle=\"\"\r\n aria-pressed={isDark}\r\n onClick={onToggleTheme}\r\n >\r\n {isDark ? (\r\n <SunIcon config={{ width: 18, height: 18 }} />\r\n ) : (\r\n <MoonIcon config={{ width: 18, height: 18 }} />\r\n )}\r\n </ToolbarIconButton>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\n\r\nimport {\r\n formatLocaleNumber,\r\n useDirection,\r\n useHostToast,\r\n useLocale,\r\n useNumberingSystem,\r\n useTranslations,\r\n} from '../host';\r\nimport {\r\n ClipboardCheck,\r\n ClipboardIcon,\r\n CustomModal,\r\n CutIcon,\r\n Excel,\r\n GuaranteeReceive,\r\n Layers,\r\n PlusIcon,\r\n Spin,\r\n SpinIcon,\r\n TrashBin,\r\n} from '../primitives';\r\n\r\nimport { TableActions } from '../../domain/value-objects';\r\nimport { exportActiveCollectionToExcel } from '../../infrastructure/excel/exportActiveCollectionToExcel';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\nimport { PdfExportToolbarButton } from '../export/PdfExportToolbarButton';\r\nimport { ExcelImportToolbarButton } from '../export/ExcelImportToolbarButton';\r\nimport { GridSearchControl } from '../gridSearch/GridSearchControl';\r\nimport MultiselectList from '../multiSelectList';\r\nimport { ThemeToggleButton } from '../theme/ThemeToggleButton';\r\nimport { IMultiSelectConfig } from '../type';\r\n\r\ninterface GroupActionButtonsProps {\r\n controller: UITableController;\r\n multiSelectConfig?: IMultiSelectConfig;\r\n pluginHost?: PluginHost;\r\n}\r\n\r\nexport const GroupActionButtons: React.FC<GroupActionButtonsProps> = ({\r\n controller,\r\n multiSelectConfig,\r\n pluginHost,\r\n}) => {\r\n const t = useTranslations();\r\n const direction = useDirection();\r\n const locale = useLocale();\r\n const numberingSystem = useNumberingSystem();\r\n const { success, error } = useHostToast();\r\n const [modalIsOpen, setModalIsOpen] = useState<boolean>(false);\r\n const [isExporting, setIsExporting] = useState(false);\r\n\r\n const selectedRows = controller.getSelectedRows();\r\n const count = selectedRows ? Object.keys(selectedRows).length : 0;\r\n const table = controller.getViewState();\r\n const tableAction = table?.action;\r\n\r\n const handleAddRow = () => {\r\n void controller.dispatch({ type: \"ADD_EMPTY_ROW\" });\r\n };\r\n\r\n const handleExportToExcel = async () => {\r\n if (isExporting) return;\r\n setIsExporting(true);\r\n try {\r\n await exportActiveCollectionToExcel(controller, {\r\n direction,\r\n rowHeaderLabel: t('general.row'),\r\n });\r\n success(t(\"general.exportToExcelSuccess\"));\r\n } catch {\r\n error(t(\"general.exportToExcelError\"));\r\n } finally {\r\n setIsExporting(false);\r\n }\r\n };\r\n\r\n // Toolbar \"toggle\" = select/deselect all rows (engine TOGGLE_SELECT_ALL_ROWS).\r\n const handleSelectAllRows = () => {\r\n controller.dispatch({ type: \"TOGGLE_ROW_SELECTED\" });\r\n };\r\n\r\n const handleChangeTableAction = (action: TableActions) => {\r\n controller.dispatch({ type: \"UI_ACTION_TABLE\", action });\r\n };\r\n\r\n const handleDeleteSelectedRows = () => {\r\n controller.dispatch({ type: \"UI_DELETE_SELECTED_ROW\" });\r\n };\r\n\r\n const canPaste =\r\n (tableAction == \"copy\" || tableAction == \"cut\") && count != 0;\r\n\r\n return (\r\n <div\r\n className=\"flex items-center gap-2 flex-1 justify-start\"\r\n role=\"toolbar\"\r\n aria-label={t(\"general.toolbar\")}\r\n >\r\n <ToolbarIconButton label={t(\"general.addNewRow\")} onClick={handleAddRow}>\r\n <PlusIcon config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.copy\")}\r\n disabled={count == 0}\r\n onClick={() => {\r\n handleChangeTableAction(\"copy\");\r\n }}\r\n >\r\n <GuaranteeReceive config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.cut\")}\r\n disabled={count == 0}\r\n onClick={() => {\r\n handleChangeTableAction(\"cut\");\r\n }}\r\n >\r\n <CutIcon config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.paste\")}\r\n disabled={!canPaste}\r\n onClick={() => {\r\n handleChangeTableAction(\"paste\");\r\n }}\r\n >\r\n <ClipboardIcon config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.delete\")}\r\n disabled={count == 0}\r\n onClick={handleDeleteSelectedRows}\r\n >\r\n <TrashBin config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n {multiSelectConfig && (\r\n <>\r\n <ToolbarIconButton\r\n label={t(\"general.chooseFromList\")}\r\n data-erp-multiselect=\"\"\r\n onClick={() => {\r\n setModalIsOpen(true);\r\n }}\r\n >\r\n <ClipboardCheck config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n <CustomModal\r\n contentClassName={\"!h-[480px]\"}\r\n width={ 720}\r\n headerName={t(\"general.chooseFromList\")}\r\n headerIcon={<ClipboardCheck config={{ width: 18, height: 18 }} />}\r\n closeModal={() => setModalIsOpen(false)}\r\n isModalOpen={modalIsOpen}\r\n content={\r\n <MultiselectList\r\n controller={controller}\r\n multiSelectConfig={multiSelectConfig}\r\n handleCloseModal={() => { setModalIsOpen(false); }}\r\n />\r\n }\r\n />\r\n </>\r\n )}\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.toggle\")}\r\n onClick={handleSelectAllRows}\r\n >\r\n <Layers config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.exportToExcel\")}\r\n disabled={isExporting}\r\n className={isExporting ? \"opacity-60 cursor-wait\" : \"\"}\r\n onClick={() => {\r\n void handleExportToExcel();\r\n }}\r\n >\r\n {isExporting ? (\r\n <Spin\r\n size=\"small\"\r\n indicator={<SpinIcon config={{ width: 16, height: 16 }} />}\r\n />\r\n ) : (\r\n <Excel config={{ width: 18, height: 18 }} />\r\n )}\r\n </ToolbarIconButton>\r\n\r\n <ExcelImportToolbarButton pluginHost={pluginHost} />\r\n\r\n <PdfExportToolbarButton pluginHost={pluginHost} />\r\n\r\n <GridSearchControl controller={controller} />\r\n\r\n <ThemeToggleButton />\r\n\r\n <span className=\"px-2 text-black-black6 text-xs\">\r\n {t(\"general.selected\")}{' '}\r\n {formatLocaleNumber(count, { locale, numberingSystem })}\r\n </span>\r\n </div>\r\n );\r\n};\r\n","// ui/pagination.tsx\r\n\r\nimport { Pagination } from '../primitives';\r\nimport {\r\n formatLocaleNumber,\r\n useDirection,\r\n useLocale,\r\n useNumberingSystem,\r\n useTranslations,\r\n} from '../host';\r\nimport { LeftChevron, RightChevron } from '../primitives';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\n\r\ninterface Props {\r\n controller: UITableController;\r\n tableKey: string;\r\n store: string;\r\n}\r\n\r\nexport default function ERPTablePagination({\r\n controller,\r\n tableKey\r\n}: Props) {\r\n const table = controller.getViewState();\r\n const locale = useLocale();\r\n const numberingSystem = useNumberingSystem();\r\n const direction = useDirection();\r\n const t = useTranslations();\r\n if (!table) return null;\r\n const { page, pageSize, totalPages, totalRows } = table.pagination;\r\n const handlePageChange = (e: number) => {\r\n controller.dispatch({ type: \"CHANGE_PAGE\", page: e });\r\n };\r\n const handlePageSizeChange = (_page: number, pageSize: number) => {\r\n controller.dispatch({ type: \"CHANGE_PAGE_SIZE\", pageSize: pageSize });\r\n };\r\n const fmt = (n: number) =>\r\n formatLocaleNumber(n, { locale, numberingSystem, useGrouping: true });\r\n\r\n return (\r\n <div className=\"flex justify-center items-center gap-3 bg-main-white p-2 border-gray-gray5 border-t w-full\">\r\n <Pagination\r\n current={page}\r\n prevIcon={direction === \"rtl\" ? <RightChevron /> : <LeftChevron />}\r\n nextIcon={direction === \"rtl\" ? <LeftChevron /> : <RightChevron />}\r\n jumpNextIcon={<span>...</span>}\r\n jumpPrevIcon={<span>...</span>}\r\n pageSize={pageSize}\r\n total={totalRows}\r\n showSizeChanger={true}\r\n onShowSizeChange={handlePageSizeChange}\r\n pageSizeOptions={[\"9\", \"10\", \"20\", \"50\", \"100\"]}\r\n // hideOnSinglePage\r\n locale={{ items_per_page: \"\" }}\r\n showTotal={(total: number) => (\r\n <div className=\"flex items-center gap-1 h-full font-light text-gray-gray10 text-xs\">\r\n <span>{fmt(total)}</span>\r\n <span>{t('general.rowsIn')}</span>\r\n <span>{fmt(totalPages)}</span>\r\n <span>{t('general.page')}</span>\r\n </div>\r\n )}\r\n onChange={handlePageChange}\r\n direction={direction}\r\n />\r\n </div>\r\n );\r\n}\r\n","import type { GridSession } from '../../application/session/GridSession';\r\n\r\n/**\r\n * Desktop row virtualization (PR-97 / D17).\r\n * Default **on** when a `GridSession` is present.\r\n * Pass `virtualization={false}` for classic pagination chrome.\r\n * Without a session, virtualization stays off (no viewport).\r\n */\r\nexport function resolveDesktopVirtualization(\r\n virtualization: boolean | undefined,\r\n session: GridSession | null | undefined,\r\n): boolean {\r\n if (!session) return false;\r\n if (virtualization === false) return false;\r\n return true;\r\n}\r\n","import {\r\n RefObject,\r\n useCallback,\r\n useEffect,\r\n useState,\r\n} from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\n\r\nconst DEFAULT_ROW_HEIGHT = 40;\r\nconst TABLE_HEADER_HEIGHT = 40;\r\nconst VIEWPORT_BOTTOM_GAP = 20;\r\nconst MIN_TABLE_HEIGHT = 240;\r\n\r\ntype UseERPTableLayoutOptions = {\r\n rootRef: RefObject<HTMLDivElement | null>;\r\n bodyRef: RefObject<HTMLDivElement | null>;\r\n controller: UITableController | null;\r\n tableHeight?: number;\r\n ready?: boolean;\r\n /** When false, skip CHANGE_PAGE_SIZE sync (virtual scroll mode). */\r\n syncPageSize?: boolean;\r\n rowHeight?: number;\r\n};\r\n\r\nexport function useERPTableLayout({\r\n rootRef,\r\n bodyRef,\r\n controller,\r\n tableHeight,\r\n ready = false,\r\n syncPageSize = true,\r\n rowHeight = DEFAULT_ROW_HEIGHT,\r\n}: UseERPTableLayoutOptions) {\r\n const [autoHeight, setAutoHeight] = useState<number | null>(null);\r\n\r\n const measureRootHeight = useCallback(() => {\r\n if (tableHeight != null) return;\r\n\r\n const root = rootRef.current;\r\n if (!root) return;\r\n\r\n const top = root.getBoundingClientRect().top;\r\n const available = window.innerHeight - top - VIEWPORT_BOTTOM_GAP;\r\n setAutoHeight(Math.max(MIN_TABLE_HEIGHT, Math.floor(available)));\r\n }, [tableHeight, rootRef]);\r\n\r\n useEffect(() => {\r\n if (!ready) return;\r\n if (tableHeight != null) return;\r\n\r\n const frame = requestAnimationFrame(measureRootHeight);\r\n window.addEventListener('resize', measureRootHeight);\r\n\r\n const parent = rootRef.current?.parentElement;\r\n const observer = parent ? new ResizeObserver(measureRootHeight) : null;\r\n if (parent && observer) {\r\n observer.observe(parent);\r\n }\r\n\r\n return () => {\r\n cancelAnimationFrame(frame);\r\n window.removeEventListener('resize', measureRootHeight);\r\n observer?.disconnect();\r\n };\r\n }, [measureRootHeight, tableHeight, ready]);\r\n\r\n useEffect(() => {\r\n if (!syncPageSize) return;\r\n if (!controller) return;\r\n\r\n const syncPageSizeToHeight = (height: number) => {\r\n if (height < rowHeight * 2) return;\r\n\r\n const rowsArea = Math.max(0, height - TABLE_HEADER_HEIGHT);\r\n const pageSize = Math.max(3, Math.floor(rowsArea / rowHeight));\r\n const table = controller.getViewState();\r\n\r\n if (table && table.pagination.pageSize !== pageSize) {\r\n void controller.dispatch({ type: 'CHANGE_PAGE_SIZE', pageSize });\r\n }\r\n };\r\n\r\n if (tableHeight != null) {\r\n syncPageSizeToHeight(tableHeight);\r\n return;\r\n }\r\n\r\n if (!bodyRef.current) return;\r\n\r\n const updatePageSize = () => {\r\n syncPageSizeToHeight(bodyRef.current?.clientHeight ?? 0);\r\n };\r\n\r\n updatePageSize();\r\n const observer = new ResizeObserver(updatePageSize);\r\n observer.observe(bodyRef.current);\r\n\r\n return () => observer.disconnect();\r\n }, [controller, bodyRef, tableHeight, autoHeight, syncPageSize, rowHeight]);\r\n\r\n return {\r\n bodyHeight: tableHeight ?? autoHeight,\r\n };\r\n}\r\n","/**\r\n * Which full-body overlay to show (PR-103). Pure — no React.\r\n * `loading` wins over no-rows.\r\n */\r\nexport type GridOverlayKind = 'loading' | 'noRows' | null;\r\n\r\nexport function resolveGridOverlay(\r\n loading: boolean | undefined,\r\n rowCount: number,\r\n): GridOverlayKind {\r\n if (loading) return 'loading';\r\n if (rowCount <= 0) return 'noRows';\r\n return null;\r\n}\r\n","\"use client\";\r\n\r\nimport React, { type ReactNode } from 'react';\r\n\r\nimport { useTranslations } from '../host';\r\nimport { NoData, SpinIcon } from '../primitives';\r\nimport {\r\n resolveGridOverlay,\r\n type GridOverlayKind,\r\n} from './resolveGridOverlay';\r\n\r\nexport type GridOverlayContext = {\r\n loading: boolean;\r\n rowCount: number;\r\n kind: Exclude<GridOverlayKind, null>;\r\n};\r\n\r\nexport type GridOverlayComponent = (ctx: GridOverlayContext) => ReactNode;\r\n\r\nexport type GridOverlaysProps = {\r\n loading?: boolean;\r\n rowCount: number;\r\n loadingOverlayComponent?: GridOverlayComponent;\r\n noRowsOverlayComponent?: GridOverlayComponent;\r\n};\r\n\r\nfunction DefaultLoadingOverlay() {\r\n const t = useTranslations();\r\n return (\r\n <div className=\"pdg-overlay__panel\" data-pdg-overlay-default=\"loading\">\r\n <SpinIcon config={{ width: 28, height: 28 }} />\r\n <span>{t('general.loading')}</span>\r\n </div>\r\n );\r\n}\r\n\r\nfunction DefaultNoRowsOverlay() {\r\n const t = useTranslations();\r\n return (\r\n <div className=\"pdg-overlay__panel\" data-pdg-overlay-default=\"noRows\">\r\n <NoData config={{ width: 56, height: 56 }} />\r\n <span>{t('general.noData')}</span>\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * Absolute layer over the scroll body: loading or empty (PR-103).\r\n */\r\nexport function GridOverlays({\r\n loading,\r\n rowCount,\r\n loadingOverlayComponent,\r\n noRowsOverlayComponent,\r\n}: GridOverlaysProps) {\r\n const kind = resolveGridOverlay(loading, rowCount);\r\n if (!kind) return null;\r\n\r\n const ctx: GridOverlayContext = {\r\n loading: Boolean(loading),\r\n rowCount,\r\n kind,\r\n };\r\n\r\n let body: ReactNode;\r\n if (kind === 'loading') {\r\n body = loadingOverlayComponent ? (\r\n loadingOverlayComponent(ctx)\r\n ) : (\r\n <DefaultLoadingOverlay />\r\n );\r\n } else {\r\n body = noRowsOverlayComponent ? (\r\n noRowsOverlayComponent(ctx)\r\n ) : (\r\n <DefaultNoRowsOverlay />\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className=\"pdg-overlay\"\r\n data-pdg-overlay={kind}\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-busy={kind === 'loading' ? true : undefined}\r\n >\r\n {body}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { ReactNode, useEffect, useRef } from 'react';\r\n\r\nimport type { GridSession } from '../../application/session/GridSession';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { useScrollToSearchMatch } from '../hooks/useScrollToSearchMatch';\r\nimport { IMultiSelectConfig } from '../type';\r\nimport { useERPTableTheme } from '../host';\r\nimport { ariaGridRowCount, gridCellDomId } from '../a11y/gridRoles';\r\nimport { GridLiveRegion } from '../a11y/GridLiveRegion';\r\nimport { ERPTableBody } from './ERPTableBody';\r\nimport { ERPTableFooter } from './ERPTableFooter';\r\nimport type { FooterRowDef } from './ERPTableFooter';\r\nimport { ERPTableHeader } from './ERPTableHeader';\r\nimport { ERPTablePinnedRows } from './ERPTablePinnedRows';\r\nimport { ERPTableVirtualBody } from './ERPTableVirtualBody';\r\nimport { GroupActionButtons } from './groupActionButtons';\r\nimport ERPTablePagination from './pagination';\r\nimport { resolveDesktopVirtualization } from './resolveDesktopVirtualization';\r\nimport { useERPTableLayout } from './useERPTableLayout';\r\nimport { ColumnWindowProvider } from '../virtual/columnWindow';\r\nimport {\r\n GridOverlays,\r\n type GridOverlayComponent,\r\n} from '../overlays';\r\n\r\nexport interface DesktopTableProps<TRow = unknown> {\r\n controller: UITableController;\r\n tableKey: string;\r\n store: string;\r\n tableTitle?: ReactNode;\r\n header?: ReactNode;\r\n footer?: boolean | ReactNode;\r\n /** Multi-row aggregation footer (PR-119). Used when `footer={true}`. */\r\n footerRows?: readonly FooterRowDef[];\r\n tableHeight?: number;\r\n multiSelectConfig?: IMultiSelectConfig;\r\n moreDetailComponent?: React.ComponentType<{ data: unknown }>;\r\n ready: boolean;\r\n /**\r\n * Desktop virtual scroll (GridSession viewport + visible window).\r\n * **On by default** when `session` is present (PR-97 / D17).\r\n * Pass `virtualization={false}` for classic pagination.\r\n * Pagination chrome is hidden while virtualization is on.\r\n */\r\n virtualization?: boolean;\r\n /** Used when virtualization is on (default). Ignored when `virtualization={false}`. */\r\n session?: GridSession;\r\n pluginHost?: PluginHost;\r\n /** Floating filter row under the header (PR-94). */\r\n floatingFilter?: boolean;\r\n /** Host-driven full-grid loading overlay (PR-103). */\r\n loading?: boolean;\r\n loadingOverlayComponent?: GridOverlayComponent;\r\n noRowsOverlayComponent?: GridOverlayComponent;\r\n /** Rows stuck under the header (PR-116). Not virtualized. */\r\n pinnedTopRowData?: readonly TRow[];\r\n /** Rows stuck above the footer (PR-116). Not virtualized. */\r\n pinnedBottomRowData?: readonly TRow[];\r\n}\r\n\r\nexport function DesktopTable<TRow = unknown>({\r\n controller,\r\n tableKey,\r\n store,\r\n tableTitle,\r\n header,\r\n footer,\r\n footerRows,\r\n tableHeight,\r\n multiSelectConfig,\r\n moreDetailComponent,\r\n ready,\r\n virtualization,\r\n session,\r\n pluginHost,\r\n floatingFilter = false,\r\n loading = false,\r\n loadingOverlayComponent,\r\n noRowsOverlayComponent,\r\n pinnedTopRowData,\r\n pinnedBottomRowData,\r\n}: DesktopTableProps<TRow>) {\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const bodyRef = useRef<HTMLDivElement>(null);\r\n // Page-window mode ('paged-idb') is pagination-driven: RAM holds one page.\r\n const useVirtual =\r\n !controller.isPagedWindow() &&\r\n resolveDesktopVirtualization(virtualization, session);\r\n const rowHeight = useERPTableTheme().params.rowHeight;\r\n\r\n const { bodyHeight } = useERPTableLayout({\r\n rootRef,\r\n bodyRef,\r\n controller,\r\n tableHeight,\r\n ready,\r\n syncPageSize: !useVirtual,\r\n rowHeight,\r\n });\r\n const resolvedBodyHeight = tableHeight ?? bodyHeight ?? 400;\r\n\r\n useScrollToSearchMatch(bodyRef, controller);\r\n\r\n const view = controller.getViewState();\r\n const colCount = (view?.columns ?? []).filter((c) => !c.hidden).length;\r\n const dataRowCount = useVirtual && session\r\n ? session.getUiRowCount()\r\n : view?.pagination.totalRows ?? 0;\r\n const pinnedTopCount = pinnedTopRowData?.length ?? 0;\r\n const pinnedBottomCount = pinnedBottomRowData?.length ?? 0;\r\n const hasFooter = Boolean(footer);\r\n const footerRowCount =\r\n typeof footer === 'boolean' && footer\r\n ? Math.max(1, footerRows?.length ?? 1)\r\n : hasFooter\r\n ? 1\r\n : 0;\r\n const activeDescendant = view?.activeCell\r\n ? gridCellDomId(tableKey, view.activeCell.rowId, view.activeCell.columnId)\r\n : undefined;\r\n /** Group rows use aria-expanded/aria-level — valid on treegrid, not grid (PR-123). */\r\n const isTreeGrid = Boolean(\r\n view?.rows?.some((r) => r.rowKind === 'group'),\r\n );\r\n\r\n useEffect(() => {\r\n const root = bodyRef.current;\r\n if (!root) return;\r\n const thead = root.querySelector('thead');\r\n const tfoot = root.querySelector('tfoot');\r\n if (thead) {\r\n root.style.setProperty(\r\n '--erp-pinned-top-offset',\r\n `${thead.getBoundingClientRect().height}px`,\r\n );\r\n }\r\n if (tfoot) {\r\n root.style.setProperty(\r\n '--erp-pinned-bottom-offset',\r\n `${tfoot.getBoundingClientRect().height}px`,\r\n );\r\n } else {\r\n root.style.setProperty('--erp-pinned-bottom-offset', '0px');\r\n }\r\n }, [floatingFilter, pinnedTopCount, pinnedBottomCount, hasFooter, view?.columns]);\r\n\r\n return (\r\n <div\r\n ref={rootRef}\r\n className=\"flex flex-col w-full h-full transition-all duration-200 erp-table-desktop\"\r\n >\r\n <GridLiveRegion controller={controller} />\r\n {tableTitle}\r\n <div\r\n ref={bodyRef}\r\n data-erp-table-scroll\r\n data-erp-table-key={tableKey}\r\n data-erp-virtualization={useVirtual ? 'on' : 'off'}\r\n className=\"overflow-auto [overflow-anchor:none] relative\"\r\n style={{\r\n height: resolvedBodyHeight ?? '100%',\r\n width: 'auto',\r\n overflowAnchor: 'none',\r\n }}\r\n >\r\n <GridOverlays\r\n loading={loading}\r\n rowCount={dataRowCount}\r\n loadingOverlayComponent={loadingOverlayComponent}\r\n noRowsOverlayComponent={noRowsOverlayComponent}\r\n />\r\n <table\r\n className=\"min-w-max w-full\"\r\n role={isTreeGrid ? 'treegrid' : 'grid'}\r\n tabIndex={0}\r\n aria-colcount={colCount || undefined}\r\n aria-rowcount={\r\n ariaGridRowCount(\r\n dataRowCount,\r\n footerRowCount,\r\n pinnedTopCount,\r\n pinnedBottomCount,\r\n ) || undefined\r\n }\r\n aria-activedescendant={activeDescendant}\r\n data-pdg-col-virt\r\n data-pdg-grid-focus=\"\"\r\n onFocus={(e) => {\r\n if (e.target !== e.currentTarget) return;\r\n if (controller.getActiveCell()) return;\r\n const firstRow = view?.rows?.find((r) => r.rowKind !== 'group');\r\n const firstCol = (view?.columns ?? []).find(\r\n (c) => !c.hidden && c.fieldType !== 'index' && c.fieldName !== 'index',\r\n );\r\n if (firstRow && firstCol) {\r\n void controller.dispatch({\r\n type: 'UI_ACTIVE_CELL',\r\n rowId: firstRow.id,\r\n columnId: firstCol.fieldName,\r\n });\r\n }\r\n }}\r\n >\r\n <ColumnWindowProvider\r\n scrollRef={bodyRef}\r\n columns={view?.columns ?? []}\r\n columnWidths={view?.columnWidths}\r\n onViewportWidthChange={(w) => controller.setLayoutViewportWidth(w)}\r\n >\r\n <ERPTableHeader\r\n controller={controller}\r\n tableKey={tableKey}\r\n header={header}\r\n floatingFilter={floatingFilter}\r\n />\r\n {pinnedTopCount > 0 && pinnedTopRowData ? (\r\n <ERPTablePinnedRows\r\n side=\"top\"\r\n rows={pinnedTopRowData}\r\n controller={controller}\r\n dataRowCount={dataRowCount}\r\n pinnedTopCount={pinnedTopCount}\r\n />\r\n ) : null}\r\n {useVirtual && session ? (\r\n <ERPTableVirtualBody\r\n controller={controller}\r\n session={session}\r\n tableKey={tableKey}\r\n scrollParentRef={bodyRef}\r\n viewportHeight={resolvedBodyHeight}\r\n rowHeight={rowHeight}\r\n moreDetailComponent={moreDetailComponent}\r\n pinnedTopCount={pinnedTopCount}\r\n />\r\n ) : (\r\n <ERPTableBody\r\n controller={controller}\r\n tableKey={tableKey}\r\n moreDetailComponent={moreDetailComponent}\r\n pinnedTopCount={pinnedTopCount}\r\n />\r\n )}\r\n {pinnedBottomCount > 0 && pinnedBottomRowData ? (\r\n <ERPTablePinnedRows\r\n side=\"bottom\"\r\n rows={pinnedBottomRowData}\r\n controller={controller}\r\n dataRowCount={dataRowCount}\r\n pinnedTopCount={pinnedTopCount}\r\n />\r\n ) : null}\r\n {footer && (\r\n <ERPTableFooter\r\n controller={controller}\r\n footer={footer}\r\n footerRows={footerRows}\r\n dataRowCount={dataRowCount}\r\n pinnedTopCount={pinnedTopCount}\r\n pinnedBottomCount={pinnedBottomCount}\r\n />\r\n )}\r\n </ColumnWindowProvider>\r\n </table>\r\n </div>\r\n <div className=\"flex justify-between items-center gap-3 w-full shrink-0 erp-table-desktop__toolbar\">\r\n <GroupActionButtons\r\n controller={controller}\r\n multiSelectConfig={multiSelectConfig}\r\n pluginHost={pluginHost}\r\n />\r\n {!useVirtual ? (\r\n <ERPTablePagination\r\n controller={controller}\r\n store={store}\r\n tableKey={tableKey}\r\n />\r\n ) : (\r\n <div\r\n className=\"text-xs text-neutral-500 px-2\"\r\n data-erp-virtual-row-count\r\n >\r\n {session?.getUiRowCount() ?? 0} rows\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\n\r\nimport { useTranslations } from '../host';\r\nimport {\r\n CustomModal,\r\n ClipboardCheck,\r\n PlusIcon,\r\n TrashBin,\r\n} from '../primitives';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { ToolbarIconButton } from '../a11y/ToolbarIconButton';\r\nimport { PdfExportToolbarButton } from '../export/PdfExportToolbarButton';\r\nimport { ExcelImportToolbarButton } from '../export/ExcelImportToolbarButton';\r\nimport { GridSearchControl } from '../gridSearch/GridSearchControl';\r\nimport MultiselectList from '../multiSelectList';\r\nimport { ThemeToggleButton } from '../theme/ThemeToggleButton';\r\nimport { IMultiSelectConfig } from '../type';\r\n\r\ninterface MobileActionButtonsProps {\r\n controller: UITableController;\r\n multiSelectConfig?: IMultiSelectConfig;\r\n pluginHost?: PluginHost;\r\n}\r\n\r\nexport function MobileActionButtons({\r\n controller,\r\n multiSelectConfig,\r\n pluginHost,\r\n}: MobileActionButtonsProps) {\r\n const t = useTranslations();\r\n const [modalIsOpen, setModalIsOpen] = useState(false);\r\n\r\n const selectedRows = controller.getSelectedRows();\r\n const count = selectedRows ? Object.keys(selectedRows).length : 0;\r\n const handleAddRow = () => {\r\n void controller.dispatch({ type: 'UI_OPEN_MOBILE_ADD' });\r\n };\r\n\r\n const handleDeleteSelectedRows = () => {\r\n controller.dispatch({ type: \"UI_DELETE_SELECTED_ROW\" });\r\n };\r\n\r\n return (\r\n <div\r\n className=\"flex items-center gap-2 justify-end\"\r\n role=\"toolbar\"\r\n aria-label={t(\"general.toolbar\")}\r\n >\r\n <ToolbarIconButton label={t(\"general.addNewRow\")} onClick={handleAddRow}>\r\n <PlusIcon config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n <ToolbarIconButton\r\n label={t(\"general.delete\")}\r\n disabled={count == 0}\r\n onClick={handleDeleteSelectedRows}\r\n >\r\n <TrashBin config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n\r\n {multiSelectConfig && (\r\n <>\r\n <ToolbarIconButton\r\n label={t(\"general.chooseFromList\")}\r\n data-erp-multiselect=\"\"\r\n onClick={() => setModalIsOpen(true)}\r\n >\r\n <ClipboardCheck config={{ width: 18, height: 18 }} />\r\n </ToolbarIconButton>\r\n <CustomModal\r\n contentClassName={\"w-[720px] !h-[480px]\"}\r\n headerName={t(\"general.chooseFromList\")}\r\n headerIcon={<ClipboardCheck config={{ width: 18, height: 18 }} />}\r\n closeModal={() => setModalIsOpen(false)}\r\n isModalOpen={modalIsOpen}\r\n content={\r\n <MultiselectList\r\n controller={controller}\r\n multiSelectConfig={multiSelectConfig}\r\n handleCloseModal={() => setModalIsOpen(false)}\r\n />\r\n }\r\n />\r\n </>\r\n )}\r\n\r\n <ExcelImportToolbarButton pluginHost={pluginHost} />\r\n\r\n <PdfExportToolbarButton pluginHost={pluginHost} />\r\n\r\n <GridSearchControl controller={controller} />\r\n\r\n <ThemeToggleButton />\r\n\r\n <span className=\"px-2 text-black-black6 text-xs\">\r\n {t(\"general.selected\")} {count}\r\n </span>\r\n </div>\r\n );\r\n}\r\n","import { CustomButton } from '../primitives';\r\nimport {\r\n formatLocaleNumber,\r\n useLocale,\r\n useNumberingSystem,\r\n useTranslations,\r\n} from '../host';\r\n\r\ninterface Props {\r\n onClick: () => void;\r\n visibleCount: number;\r\n totalRows: number;\r\n}\r\n\r\nexport function MobileLoadMoreButton({\r\n onClick,\r\n visibleCount,\r\n totalRows,\r\n}: Props) {\r\n const t = useTranslations();\r\n const locale = useLocale();\r\n const numberingSystem = useNumberingSystem();\r\n const visible = formatLocaleNumber(visibleCount, {\r\n locale,\r\n numberingSystem,\r\n });\r\n const total = formatLocaleNumber(totalRows, { locale, numberingSystem });\r\n\r\n return (\r\n <div className=\"shrink-0 w-full py-3 border-gray-gray5 border-t bg-main-white\">\r\n <CustomButton\r\n htmlType=\"button\"\r\n type=\"default\"\r\n className=\"w-full h-10 text-sm\"\r\n onClick={onClick}\r\n >\r\n {t('general.loadMore', { visible, total })}\r\n </CustomButton>\r\n </div>\r\n );\r\n}\r\n","import { ColumnSchema } from \"../../bootstrap/type\";\r\nimport { UIRow } from \"../type\";\r\n\r\nexport function buildDynamicSourceForRow(\r\n dynamicSource: ColumnSchema[\"dynamicSource\"],\r\n row: UIRow,\r\n): ColumnSchema[\"dynamicSource\"] {\r\n if (!dynamicSource) return dynamicSource;\r\n\r\n const { dependsOn, dependOn, ...rest } = dynamicSource;\r\n\r\n if (dependOn) {\r\n return dynamicSource;\r\n }\r\n\r\n if (!dependsOn?.length) {\r\n return dynamicSource;\r\n }\r\n\r\n const deps = dependsOn.map((fieldName) => ({\r\n fieldName,\r\n value: row.cells[fieldName]?.value ?? null,\r\n }));\r\n\r\n return {\r\n ...rest,\r\n dependsOn,\r\n dependOn: deps.length === 1 ? deps[0] : deps,\r\n };\r\n}\r\n\r\nexport function resolveColumnMetaForRow(\r\n col: ColumnSchema,\r\n row: UIRow,\r\n): ColumnSchema {\r\n if (!col.dynamicSource) return col;\r\n\r\n return {\r\n ...col,\r\n dynamicSource: buildDynamicSourceForRow(col.dynamicSource, row),\r\n };\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useTranslations } from \"../host\";\r\nimport { CustomButton, CustomModal } from \"../primitives\";\r\n\r\nimport { ColumnSchema } from \"../../bootstrap/type\";\r\nimport { RowStateEnum } from \"../../domain/value-objects\";\r\nimport { UITableController } from \"../../infrastructure/ui/UITableController\";\r\nimport { CellRenderer } from \"../cellRenderer\";\r\nimport { resolveColumnMetaForRow } from \"./buildDynamicSource\";\r\nimport type { MobileRowEditorState } from \"./types\";\r\nimport { UIRow } from \"../type\";\r\n\r\ninterface MobileRowFormModalProps {\r\n controller: UITableController;\r\n tableKey: string;\r\n editor: NonNullable<MobileRowEditorState>;\r\n onClose: () => void;\r\n}\r\n\r\nexport function MobileRowFormModal({\r\n controller,\r\n tableKey,\r\n editor,\r\n onClose,\r\n}: MobileRowFormModalProps) {\r\n const t = useTranslations();\r\n\r\n const getRowById = (): UIRow | null => {\r\n return controller.getRowView(editor.rowId);\r\n };\r\n\r\n const [row, setRow] = useState<UIRow | null>(getRowById);\r\n\r\n useEffect(() => {\r\n const syncRow = () => {\r\n setRow(getRowById());\r\n };\r\n\r\n syncRow();\r\n const unsubscribe = controller.subscribe(syncRow);\r\n return () => unsubscribe?.();\r\n }, [controller, editor.rowId]);\r\n\r\n const formColumns = useMemo(() => {\r\n const table = controller.getViewState();\r\n if (!table?.columns) return [];\r\n return table.columns.filter(\r\n (c) =>\r\n !c.hidden && c.fieldType !== \"index\" && c.fieldName !== \"index\",\r\n );\r\n }, [controller, row]);\r\n\r\n if (!row || row.rowState === RowStateEnum.Deleted) {\r\n return null;\r\n }\r\n\r\n const title =\r\n editor.mode === \"add\" ? t(\"general.addNewRow\") : t(\"general.rowEdit\");\r\n\r\n return (\r\n <CustomModal\r\n headerName={title}\r\n isModalOpen\r\n closeModal={onClose}\r\n content={\r\n <div className=\"relative w-full h-[calc(100dvh-150px)]\">\r\n <div className=\"flex flex-col gap-4 px-2 pb-24 w-full h-full overflow-y-auto\">\r\n {formColumns.map((col, idx) => {\r\n const disable =\r\n typeof row.visibilityCondition[col.fieldName] === \"boolean\" &&\r\n row.visibilityCondition[col.fieldName] === false;\r\n\r\n if (disable) return null;\r\n\r\n const meta: ColumnSchema = resolveColumnMetaForRow(\r\n {\r\n ...col,\r\n enableDeleteButton: col.enableDeleteButton ?? true,\r\n enableExpandButton: col.enableExpandButton ?? true,\r\n enableMoveButton: col.enableMoveButton ?? true,\r\n enableOptionsButton: col.enableOptionsButton ?? true,\r\n },\r\n row,\r\n );\r\n\r\n return (\r\n <div key={col.fieldName} className=\"flex flex-col gap-2\">\r\n {col.fieldType !== \"checkbox\" && (\r\n <span className=\"font-medium text-sm\">\r\n {col.fieldCaption}\r\n </span>\r\n )}\r\n <CellRenderer\r\n key={`${row.id}-${col.fieldName}`}\r\n idx={idx}\r\n tableKey={tableKey}\r\n row={row}\r\n columnId={col.fieldName}\r\n meta={meta}\r\n controller={controller}\r\n tabIndex={-1}\r\n mode={col.editable === false ? \"view\" : \"form\"}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n <div className=\"bottom-0 fixed px-4 py-4 -end-4 start-0 topShadow\">\r\n <CustomButton\r\n type=\"text\"\r\n className=\"flex justify-center items-center !bg-black-black95 focus:!text-none rounded w-full h-[42px] text-white text-sm\"\r\n onClick={onClose}\r\n >\r\n {t(\"general.add\")}\r\n </CustomButton>\r\n </div>\r\n </div>\r\n }\r\n />\r\n );\r\n}\r\n","import {\r\n formatLocaleNumber,\r\n useLocale,\r\n useNumberingSystem,\r\n useTranslations,\r\n} from '../host';\r\nimport {\r\n CustomCheckbox,\r\n EditPencil,\r\n RedTrashBin,\r\n Undo,\r\n} from '../primitives';\r\n\r\nimport { ColumnSchema } from '../../bootstrap/type';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { UIRow } from '../type';\r\n\r\ninterface MobileIndexColProps {\r\n idx: number;\r\n row: UIRow;\r\n controller: UITableController;\r\n meta: ColumnSchema;\r\n}\r\n\r\nexport function MobileIndexCol({\r\n idx,\r\n row,\r\n controller,\r\n meta,\r\n}: MobileIndexColProps) {\r\n const t = useTranslations();\r\n const locale = useLocale();\r\n const numberingSystem = useNumberingSystem();\r\n\r\n const handleDeleteRow = () => {\r\n controller.dispatch({ type: \"ROW_DELETED\", rowId: row.id });\r\n };\r\n\r\n const handleSelectRow = (e: React.MouseEvent<HTMLInputElement>) => {\r\n if (!e.shiftKey && !e.ctrlKey && !e.altKey) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n controller.onRowSelect(row.id);\r\n }\r\n };\r\n\r\n const isDeleted = row.rowState === RowStateEnum.Deleted;\r\n const isSelectedRow = controller.isSelectedRow(row.id);\r\n\r\n return (\r\n <div\r\n className={`${isDeleted && \"cursor-not-allowed\"} flex justify-between items-center w-full gap-2 px-2 h-full relative`}\r\n >\r\n <div className=\"flex justify-start items-center gap-2\">\r\n {!isDeleted && (\r\n <CustomCheckbox\r\n disabled={isDeleted}\r\n checked={!!isSelectedRow}\r\n onClick={handleSelectRow}\r\n aria-label={`${t(\"general.selectRow\")} ${idx + 1}`}\r\n />\r\n )}\r\n <div className=\"w-[20px] text-xs text-center\">\r\n {formatLocaleNumber(idx + 1, { locale, numberingSystem })}\r\n </div>\r\n\r\n {!isDeleted && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n void controller.dispatch({\r\n type: 'UI_OPEN_MOBILE_EDIT',\r\n rowId: row.id,\r\n });\r\n }}\r\n className=\"hover:bg-zinc-200\"\r\n aria-label={t(\"general.edit\")}\r\n >\r\n <EditPencil config={{ width: 16, height: 16 }} />\r\n </button>\r\n )}\r\n\r\n {meta.enableDeleteButton && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleDeleteRow();\r\n }}\r\n className=\"hover:bg-red-100\"\r\n >\r\n {!isDeleted ? (\r\n <RedTrashBin config={{ width: 18, height: 18 }} />\r\n ) : (\r\n <Undo config={{ width: 18, height: 18 }} />\r\n )}\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useMemo } from 'react';\r\n\r\nimport { ColumnSchema } from '../../bootstrap/type';\r\nimport { overlayStoredColumnWidth } from '../../engine/columnWidth';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { ariaColIndex, ariaDataRowIndex, gridCellA11y } from '../a11y/gridRoles';\r\nimport { indexPinClassName, indexPinDataAttr } from '../columnPin';\r\nimport { CellRenderer } from '../cellRenderer';\r\nimport { UIRow } from '../type';\r\nimport { MobileIndexCol } from './MobileIndexCol';\r\n\r\ninterface MobileTableRowProps {\r\n row: UIRow;\r\n index: number;\r\n columns: ColumnSchema[];\r\n controller: UITableController;\r\n tableKey: string;\r\n isSelected: boolean;\r\n isActive: boolean;\r\n isCut: boolean;\r\n activeCell?: { rowId: number; columnId: string } | null;\r\n}\r\n\r\nfunction MobileTableRowComponent({\r\n row,\r\n index,\r\n columns,\r\n controller,\r\n tableKey,\r\n isSelected: isSelectedRow,\r\n isActive: isActiveRow,\r\n isCut,\r\n activeCell,\r\n}: MobileTableRowProps) {\r\n const columnWidths = controller.getViewState()?.columnWidths;\r\n const visibleColumns = columns.filter(\r\n (c: ColumnSchema) => !c.hidden,\r\n );\r\n const isDeleted = row.rowState === RowStateEnum.Deleted;\r\n\r\n const handleRowClick = (e: React.MouseEvent) => {\r\n controller.onRowClick(row.id, {\r\n ctrlKey: e.ctrlKey,\r\n shiftKey: e.shiftKey,\r\n });\r\n };\r\n\r\n const rowClass = useMemo(() => {\r\n return `relative w-full border bg-main-white\r\n ${isActiveRow ? \"border-gray-gray8\" : \"border-gray-gray5\"}\r\n ${isSelectedRow && !isDeleted ? \"bg-blue-100\" : \"\"}\r\n ${\r\n isDeleted\r\n ? \"!bg-gray-gray5 absolute inset-0 line-through\"\r\n : isSelectedRow\r\n ? \"\"\r\n : \"bg-main-white\"\r\n }\r\n ${isCut ? \" border-dashed opacity-30\" : \"\"}\r\n h-9 rounded`;\r\n }, [isActiveRow, isSelectedRow, isDeleted, isCut]);\r\n\r\n return (\r\n <tr\r\n role=\"row\"\r\n aria-rowindex={ariaDataRowIndex(index)}\r\n className={rowClass}\r\n data-rowid={row.id}\r\n onClick={handleRowClick}\r\n >\r\n {visibleColumns.map((c: ColumnSchema, idx: number) => {\r\n const meta: ColumnSchema = {\r\n ...c,\r\n enableDeleteButton: c.enableDeleteButton ?? true,\r\n enableExpandButton: c.enableExpandButton ?? true,\r\n enableMoveButton: c.enableMoveButton ?? true,\r\n enableOptionsButton: c.enableOptionsButton ?? true,\r\n };\r\n\r\n if (c.fieldName === \"index\") {\r\n return (\r\n <td\r\n className={`p-0 h-full ${indexPinClassName(c)}`}\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(idx)}\r\n {...gridCellA11y(tableKey, row.id, c.fieldName, activeCell)}\r\n data-columnid={c.fieldName}\r\n data-erp-col-pin={indexPinDataAttr(c)}\r\n style={overlayStoredColumnWidth(c, columnWidths, {})}\r\n >\r\n <MobileIndexCol\r\n idx={index}\r\n row={row}\r\n controller={controller}\r\n meta={meta}\r\n />\r\n </td>\r\n );\r\n }\r\n\r\n return (\r\n <td\r\n key={c.fieldName}\r\n role=\"gridcell\"\r\n aria-colindex={ariaColIndex(idx)}\r\n {...gridCellA11y(tableKey, row.id, c.fieldName, activeCell)}\r\n className=\"p-0 h-full\"\r\n data-columnid={c.fieldName}\r\n style={overlayStoredColumnWidth(c, columnWidths, {})}\r\n >\r\n <CellRenderer\r\n idx={idx}\r\n tableKey={tableKey}\r\n row={row}\r\n columnId={c.fieldName}\r\n meta={meta}\r\n controller={controller}\r\n tabIndex={-1}\r\n mode=\"view\"\r\n />\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n );\r\n}\r\n\r\nexport const MobileTableRow = React.memo(\r\n MobileTableRowComponent,\r\n (prev, next) => {\r\n return (\r\n prev.row === next.row &&\r\n prev.index === next.index &&\r\n prev.columns === next.columns &&\r\n prev.isSelected === next.isSelected &&\r\n prev.isActive === next.isActive &&\r\n prev.isCut === next.isCut &&\r\n prev.activeCell?.rowId === next.activeCell?.rowId &&\r\n prev.activeCell?.columnId === next.activeCell?.columnId\r\n );\r\n },\r\n);\r\n","import { ColumnSchema } from '../../bootstrap/type';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { UIRow } from '../type';\r\nimport { MobileTableRow } from './MobileTableRow';\r\n\r\ninterface MobileTableBodyProps {\r\n controller: UITableController;\r\n tableKey: string;\r\n rows: UIRow[];\r\n columns: ColumnSchema[];\r\n}\r\n\r\nexport function MobileTableBody({\r\n controller,\r\n tableKey,\r\n rows,\r\n columns,\r\n}: MobileTableBodyProps) {\r\n const activeCell = controller.getViewState()?.activeCell ?? null;\r\n return (\r\n <tbody className=\"w-full min-w-0 overflow-x-auto\" role=\"rowgroup\">\r\n {rows.map((row, index) => (\r\n <MobileTableRow\r\n key={row.id}\r\n row={row}\r\n index={index}\r\n columns={columns}\r\n controller={controller}\r\n tableKey={tableKey}\r\n isSelected={!!controller.isSelectedRow(row.id)}\r\n isActive={!!controller.isActiveRow(row.id)}\r\n isCut={!!controller.isCutRow(row.id)}\r\n activeCell={activeCell}\r\n />\r\n ))}\r\n </tbody>\r\n );\r\n}\r\n","import React, { ReactNode, useEffect, useState } from 'react';\r\n\r\nimport { CustomDropdownButton, CustomCheckbox } from '../primitives';\r\n\r\nimport { overlayStoredColumnWidth } from '../../engine/columnWidth';\r\nimport { ValidationCallbackResult } from '../../engine/type';\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useRevalidateRevision } from '../hooks/useRevalidateRevision';\r\nimport { revealRow } from '../gridSearch/utils';\r\nimport {\r\n ARIA_HEADER_ROW_INDEX,\r\n ariaColIndex,\r\n} from '../a11y/gridRoles';\r\nimport { useTranslations } from '../host';\r\nimport { indexPinClassName, indexPinDataAttr } from '../columnPin';\r\n\r\ninterface MobileTableHeaderProps {\r\n controller: UITableController;\r\n header?: ReactNode;\r\n}\r\n\r\nexport function MobileTableHeader({\r\n controller,\r\n header,\r\n}: MobileTableHeaderProps) {\r\n const t = useTranslations();\r\n const table = controller.getViewState();\r\n const [validationResult, setValidationResult] =\r\n useState<ValidationCallbackResult>({\r\n valid: true,\r\n data: null,\r\n errors: new Map(),\r\n });\r\n\r\n const validationRevision = useRevalidateRevision();\r\n\r\n useEffect(() => {\r\n const validation = controller.validation();\r\n validation((res) => {\r\n setValidationResult(res);\r\n });\r\n }, [\r\n controller,\r\n table?.activeCell?.columnId,\r\n table?.activeCell?.rowId,\r\n validationRevision,\r\n ]);\r\n\r\n if (!table || !table.columns) return null;\r\n\r\n const visibleColumns = table.columns.filter((c) => !c.hidden);\r\n const isSelectedActivePageRows = table.rows.every(\r\n (row) => !!table.selectedRows[row.id],\r\n );\r\n const handleSelectActivePageRows = () => {\r\n controller.dispatch({ type: \"TOGGLE_PAGE_ROW_SELECTED\" });\r\n };\r\n\r\n const allRows = controller.getAllRows() ?? [];\r\n const handleNavigateToError = (rowId: number) => {\r\n void revealRow(controller, rowId);\r\n };\r\n\r\n const items = Array.from((validationResult.errors ?? new Map()).entries()).map(\r\n ([key, value], errorIndex) => {\r\n const Index = allRows.findIndex((r) => r.id.value == value.rowId) + 1;\r\n\r\n return {\r\n key: errorIndex.toString(),\r\n label: (\r\n <button\r\n className=\"flex bg-red-300 text-red-600 text-xs\"\r\n onClick={() => {\r\n handleNavigateToError(value.rowId);\r\n }}\r\n >\r\n {`${t('general.validationInRow')} ${Index} ${t('general.validationInColumn')} ${value.caption} : ${value.message}`}\r\n </button>\r\n ),\r\n };\r\n },\r\n );\r\n\r\n return (\r\n <thead className=\"top-0 z-20 sticky\" role=\"rowgroup\">\r\n {header}\r\n {!validationResult.valid && (\r\n <CustomDropdownButton\r\n placement=\"bottom\"\r\n className=\"top-1 z-10 absolute flex m-0 p-0 rounded start-1\"\r\n items={items}\r\n >\r\n <span className=\"bg-red-600 border rounded-full w-2 h-2\"></span>\r\n </CustomDropdownButton>\r\n )}\r\n <tr\r\n role=\"row\"\r\n aria-rowindex={ARIA_HEADER_ROW_INDEX}\r\n className=\"relative h-10 bg-gray-gray3 rounded-t-lg w-full\"\r\n >\r\n {visibleColumns.map((col, index) => {\r\n if (col.fieldType === \"index\") {\r\n return (\r\n <th\r\n key={col.fieldName}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n style={{\r\n ...col.style,\r\n ...overlayStoredColumnWidth(col, table.columnWidths, { width: 120 }),\r\n }}\r\n className={`px-2 text-xs border text-start whitespace-nowrap ${indexPinClassName(col)} ${col.className || \"\"}`}\r\n data-erp-col-pin={indexPinDataAttr(col)}\r\n >\r\n <CustomCheckbox\r\n checked={isSelectedActivePageRows}\r\n onClick={handleSelectActivePageRows}\r\n aria-label={t(\"general.toggle\")}\r\n />\r\n {col.fieldCaption}\r\n </th>\r\n );\r\n }\r\n\r\n return (\r\n <th\r\n key={col.fieldName}\r\n role=\"columnheader\"\r\n aria-colindex={ariaColIndex(index)}\r\n style={{\r\n ...col.style,\r\n ...overlayStoredColumnWidth(col, table.columnWidths, {\r\n minWidth: col.minWidth,\r\n }),\r\n }}\r\n className={`px-2 text-xs border text-start min-w-24 ${col.className || \"\"}`}\r\n >\r\n {col.fieldCaption}\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n );\r\n}\r\n","export function scrollToTableEnd(\r\n container: HTMLElement | null,\r\n rowId?: number,\r\n): void {\r\n if (!container) return;\r\n\r\n container.scrollLeft = Math.max(\r\n 0,\r\n container.scrollWidth - container.clientWidth,\r\n );\r\n\r\n const rowEl = rowId\r\n ? container.querySelector<HTMLElement>(`tr[data-rowid=\"${rowId}\"]`)\r\n : container.querySelector<HTMLElement>('tbody tr:last-child');\r\n\r\n rowEl?.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'auto' });\r\n}\r\n","import { RefObject, useEffect, useRef } from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useMobileEditorState } from '../hooks/useEngineSelector';\r\nimport { scrollToTableEnd } from './scrollToTableEnd';\r\n\r\nexport function useScrollAfterMobileAdd(\r\n scrollRef: RefObject<HTMLElement | null>,\r\n controller: UITableController,\r\n revealAllRows: () => void,\r\n) {\r\n const mobileEditor = useMobileEditorState(controller);\r\n const previousEditorRef = useRef(mobileEditor);\r\n\r\n useEffect(() => {\r\n const previousEditor = previousEditorRef.current;\r\n previousEditorRef.current = mobileEditor;\r\n\r\n if (previousEditor?.mode !== 'add' || mobileEditor) {\r\n return;\r\n }\r\n\r\n revealAllRows();\r\n\r\n const rowId = previousEditor.rowId;\r\n requestAnimationFrame(() => {\r\n scrollToTableEnd(scrollRef.current, rowId);\r\n requestAnimationFrame(() => {\r\n scrollToTableEnd(scrollRef.current, rowId);\r\n });\r\n });\r\n }, [mobileEditor, revealAllRows, scrollRef]);\r\n}\r\n","\"use client\";\r\n\r\nimport React, {\r\n ReactNode,\r\n useEffect,\r\n useRef,\r\n} from 'react';\r\n\r\nimport { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport type { PluginHost } from '../../application/plugins/PluginHost';\r\nimport { ERPTableFooter } from '../desktop/ERPTableFooter';\r\nimport { jsonEqual, useControllerSelector } from '../hooks/useEngineSelector';\r\nimport { useScrollToSearchMatch } from '../hooks/useScrollToSearchMatch';\r\nimport { IMultiSelectConfig } from '../type';\r\nimport { ariaGridRowCount, gridCellDomId } from '../a11y/gridRoles';\r\nimport { GridLiveRegion } from '../a11y/GridLiveRegion';\r\nimport { MobileActionButtons } from './MobileActionButtons';\r\nimport { MobileLoadMoreButton } from './MobileLoadMoreButton';\r\nimport { MobileRowFormModal } from './MobileRowFormModal';\r\nimport { MobileTableBody } from './MobileTableBody';\r\nimport { MobileTableHeader } from './MobileTableHeader';\r\nimport { useScrollAfterMobileAdd } from './useScrollAfterMobileAdd';\r\nimport { scrollToTableEnd } from './scrollToTableEnd';\r\nimport {\r\n GridOverlays,\r\n type GridOverlayComponent,\r\n} from '../overlays';\r\n\r\nexport interface MobileTableProps {\r\n controller: UITableController;\r\n tableKey: string;\r\n tableTitle?: ReactNode;\r\n header?: ReactNode;\r\n footer?: boolean | ReactNode;\r\n multiSelectConfig?: IMultiSelectConfig;\r\n pluginHost?: PluginHost;\r\n loading?: boolean;\r\n loadingOverlayComponent?: GridOverlayComponent;\r\n noRowsOverlayComponent?: GridOverlayComponent;\r\n}\r\n\r\nexport function MobileTable({\r\n controller,\r\n tableKey,\r\n tableTitle,\r\n header,\r\n footer,\r\n multiSelectConfig,\r\n pluginHost,\r\n loading = false,\r\n loadingOverlayComponent,\r\n noRowsOverlayComponent,\r\n}: MobileTableProps) {\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n const mobileView =controller.getMobileViewState();\r\n const mobileEditor = mobileView?.mobileEditor ?? null;\r\n useEffect(() => {\r\n controller.resetMobileVisibleRows();\r\n }, [controller, tableKey]);\r\n\r\n useScrollToSearchMatch(scrollRef, controller);\r\n useScrollAfterMobileAdd(scrollRef, controller, () =>\r\n controller.revealAllMobileRows(),\r\n );\r\n\r\n if (!mobileView) return null;\r\n\r\n const viewState = controller.getViewState();\r\n const activeDescendant = viewState?.activeCell\r\n ? gridCellDomId(\r\n tableKey,\r\n viewState.activeCell.rowId,\r\n viewState.activeCell.columnId,\r\n )\r\n : undefined;\r\n\r\n return (\r\n <>\r\n <GridLiveRegion controller={controller} />\r\n <div className=\"flex flex-col w-full transition-all duration-200\">\r\n <div className=\"flex items-center gap-2 bg-main-white px-1 py-2 border-gray-gray5 border-b w-full shrink-0\">\r\n <div className=\"shrink-0\">{tableTitle}</div>\r\n <div className=\"flex items-center ms-auto\">\r\n <MobileActionButtons\r\n controller={controller}\r\n multiSelectConfig={multiSelectConfig}\r\n pluginHost={pluginHost}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div\r\n ref={scrollRef}\r\n data-erp-table-scroll\r\n className=\"hidden-show-scrollBar overflow-x-auto [overflow-anchor:none] relative\"\r\n style={{ overflowAnchor: 'none', minHeight: 160 }}\r\n >\r\n <GridOverlays\r\n loading={loading}\r\n rowCount={mobileView.totalRows}\r\n loadingOverlayComponent={loadingOverlayComponent}\r\n noRowsOverlayComponent={noRowsOverlayComponent}\r\n />\r\n <table\r\n className=\"min-w-max\"\r\n role=\"grid\"\r\n tabIndex={0}\r\n aria-colcount={\r\n mobileView.columns.filter((c) => !c.hidden).length || undefined\r\n }\r\n aria-rowcount={\r\n ariaGridRowCount(mobileView.totalRows, Boolean(footer)) ||\r\n undefined\r\n }\r\n aria-activedescendant={activeDescendant}\r\n data-pdg-grid-focus=\"\"\r\n onFocus={(e) => {\r\n if (e.target !== e.currentTarget) return;\r\n if (controller.getActiveCell()) return;\r\n const firstRow = mobileView.rows[0];\r\n const firstCol = mobileView.columns.find(\r\n (c) =>\r\n !c.hidden &&\r\n c.fieldType !== 'index' &&\r\n c.fieldName !== 'index',\r\n );\r\n if (firstRow && firstCol) {\r\n void controller.dispatch({\r\n type: 'UI_ACTIVE_CELL',\r\n rowId: firstRow.id,\r\n columnId: firstCol.fieldName,\r\n });\r\n }\r\n }}\r\n >\r\n <MobileTableHeader controller={controller} header={header} />\r\n <MobileTableBody\r\n controller={controller}\r\n tableKey={tableKey}\r\n rows={mobileView.rows}\r\n columns={mobileView.columns}\r\n />\r\n {footer && (\r\n <ERPTableFooter\r\n controller={controller}\r\n footer={footer}\r\n dataRowCount={mobileView.totalRows}\r\n />\r\n )}\r\n </table>\r\n </div>\r\n\r\n {mobileView.hasMore && (\r\n <MobileLoadMoreButton\r\n onClick={\r\n \r\n async () =>{\r\n await controller.loadMoreMobileRows()\r\n scrollToTableEnd(scrollRef.current)\r\n } \r\n\r\n\r\n }\r\n visibleCount={mobileView.visibleCount}\r\n totalRows={mobileView.totalRows}\r\n />\r\n )}\r\n </div>\r\n\r\n {mobileEditor && (\r\n <MobileRowFormModal\r\n controller={controller}\r\n tableKey={tableKey}\r\n editor={mobileEditor}\r\n onClose={() => {\r\n void controller.dispatch({ type: 'UI_CLOSE_MOBILE_EDITOR' });\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n}\r\n","const SELECT_NAV_SKIP = new Set([\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'Enter',\r\n 'NumpadEnter',\r\n]);\r\n\r\nconst TEXTAREA_NAV_SKIP = new Set([\r\n 'Enter',\r\n 'NumpadEnter',\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n]);\r\n\r\ntype ClosestHost = {\r\n closest: (selector: string) => unknown;\r\n getAttribute?: (name: string) => string | null;\r\n};\r\n\r\nfunction asClosestHost(target: EventTarget | null): ClosestHost | null {\r\n if (!target || typeof (target as unknown as ClosestHost).closest !== 'function') {\r\n return null;\r\n }\r\n return target as unknown as ClosestHost;\r\n}\r\n\r\n/** Select widget, its portal dropdown / virtual list, or an option/combobox node. */\r\nfunction isInsideSelect(el: ClosestHost): boolean {\r\n return Boolean(\r\n el.closest('.ant-select') ||\r\n el.closest('.ant-select-dropdown') ||\r\n el.closest('.rc-virtual-list') ||\r\n el.closest('.erp-table-select') ||\r\n el.getAttribute?.('role') === 'option' ||\r\n el.getAttribute?.('role') === 'combobox',\r\n );\r\n}\r\n\r\n/**\r\n * Table shortcuts that must win over a focused Select: every Alt shortcut and\r\n * the Ctrl+Space / Ctrl+Arrow / Ctrl+End row shortcuts. The caller must\r\n * `preventDefault()` + `stopPropagation()` synchronously — an async dispatch\r\n * is too late to stop the Select's own handling.\r\n */\r\nexport function isGridShortcutKey(e: {\r\n altKey: boolean;\r\n ctrlKey: boolean;\r\n code: string;\r\n getModifierState?: (key: string) => boolean;\r\n}): boolean {\r\n // AltGr (reported as Ctrl+Alt on Windows) types a character, it is no chord.\r\n if (typeof e.getModifierState === 'function' && e.getModifierState('AltGraph')) {\r\n return false;\r\n }\r\n if (e.altKey) return true;\r\n return (\r\n e.ctrlKey &&\r\n (e.code === 'Space' ||\r\n e.code === 'ArrowUp' ||\r\n e.code === 'ArrowDown' ||\r\n e.code === 'End')\r\n );\r\n}\r\n\r\n/**\r\n * Window-capture KEY_DOWN must not steal Enter/arrows from native controls.\r\n * Select: keep existing skip. Textarea: Enter inserts a newline (PR-56).\r\n */\r\nexport function shouldSkipGridNavigation(\r\n target: EventTarget | null,\r\n code: string,\r\n): boolean {\r\n const el = asClosestHost(target);\r\n if (!el) return false;\r\n if (isInsideSelect(el)) {\r\n return SELECT_NAV_SKIP.has(code);\r\n }\r\n if (el.closest('[data-erp-cell-textarea]')) {\r\n return TEXTAREA_NAV_SKIP.has(code);\r\n }\r\n return false;\r\n}\r\n\n/**\n * Where a window-level keydown came from, relative to ONE grid root.\n * - `cell`: a body cell or the grid's own table (APG focus) → grid keyboard.\n * - `page`: nothing focused (body / document) → grid keyboard (arrows keep\n * working after a click on a non-focusable area, as in the legacy table).\n * - `outside`: any other control — page forms, the grid toolbar, header\n * filters, popovers, dialogs → only the legacy global chords\n * (`isGridShortcutKey`); typing, copy/paste, Enter, Tab, arrows stay native.\n * - `other-grid`: inside another grid → ignored.\n */\nexport type GridKeyScope = 'cell' | 'page' | 'outside' | 'other-grid';\n\nexport function resolveGridKeyScope(\n target: EventTarget | null,\n root: Element | null,\n): GridKeyScope {\n if (!root) return 'cell';\n if (typeof Element === 'undefined' || !(target instanceof Element)) return 'page';\n if (\n typeof document !== 'undefined' &&\n (target === document.body || target === document.documentElement)\n ) {\n return 'page';\n }\n const owner = target.closest('[data-pdg-grid]');\n if (owner && owner !== root) return 'other-grid';\n if (!root.contains(target)) return 'outside';\n if (target.closest('[role=\"menu\"], [role=\"dialog\"], .erp-table-modal')) return 'outside';\n if (target.closest('[role=\"gridcell\"], [data-erp-cell-textarea]')) return 'cell';\n if (target.closest('[role=\"grid\"], [role=\"treegrid\"]') === target) return 'cell';\n return 'outside';\n}\n","// hooks/useERPTable.ts\r\nimport {\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from 'react';\r\n\r\nimport type { GridSession } from '../application/session/GridSession';\r\nimport type { PluginHost } from '../application/plugins/PluginHost';\r\nimport type { EventStore } from '../application/ports/EventStore';\r\nimport { createGrid } from '../bootstrap';\r\nimport {\r\n createGridTableKey,\r\n DEFAULT_MEMORY_STORE,\r\n isPersistentStore,\r\n} from '../bootstrap/defaults';\r\nimport type {\r\n CreateERPTableConfig,\r\n CreateGridResult,\r\n} from '../bootstrap/type';\r\nimport { flattenColDefOrGroup } from '../infrastructure/columns/flattenColumnDefs';\r\nimport type { TableSnapShot } from '../engine/type';\r\nimport type {\r\n HistoryItem,\r\n HistoryQuery,\r\n} from '../infrastructure/history/HistoryPanelViewModel';\r\nimport type {\r\n ChangelogEntry,\r\n ChangelogQuery,\r\n} from '../infrastructure/projections/ChangelogProjection';\r\nimport type { GridApi } from '../infrastructure/ui/createGridApi';\r\nimport {\r\n UITableController,\r\n} from '../infrastructure/ui/UITableController';\r\n\r\nexport type UseGridResult<TRow = unknown> =\r\n | { ready: false }\r\n | {\r\n ready: true;\r\n controller: UITableController;\r\n api: GridApi<TRow>;\r\n session: GridSession;\r\n pluginHost: PluginHost;\r\n eventStore: EventStore;\r\n store: string;\r\n tableKey: string;\r\n rows: TableSnapShot;\r\n changelog: ChangelogEntry[];\r\n changelogCount: number;\r\n historyItems: HistoryItem[];\r\n historyItemCount: number;\r\n canUndo: boolean;\r\n canRedo: boolean;\r\n getChangelog: (\r\n filter?: Omit<ChangelogQuery, 'tableId'>\r\n ) => ChangelogEntry[];\r\n getHistoryItems: (\r\n filter?: Omit<HistoryQuery, 'tableId'>\r\n ) => HistoryItem[];\r\n subscribeChangelog: (\r\n cb: (entries: ChangelogEntry[]) => void,\r\n filter?: Omit<ChangelogQuery, 'tableId'>\r\n ) => () => void;\r\n subscribeHistoryItems: (\r\n cb: (items: HistoryItem[]) => void,\r\n filter?: Omit<HistoryQuery, 'tableId'>\r\n ) => () => void;\r\n subscribeSelected: GridSession['subscribeSelected'];\r\n getViewport: GridSession['getViewport'];\r\n getVisibleRange: GridSession['getVisibleRange'];\r\n projectVisibleRows: GridSession['projectVisibleRows'];\r\n getUiRowCount: GridSession['getUiRowCount'];\r\n projectVisibleUiRows: GridSession['projectVisibleUiRows'];\r\n changeViewport: (input: {\r\n scrollOffset: number;\r\n viewportSize?: number;\r\n rowHeight?: number;\r\n overscan?: number;\r\n }) => Promise<void>;\r\n undo: () => Promise<boolean>;\r\n redo: () => Promise<boolean>;\r\n };\r\n\r\n/** @deprecated Use {@link UseGridResult}. Removed in 1.0.0. */\r\nexport type UseERPTableResult<TRow = unknown> = UseGridResult<TRow>;\r\n\r\nexport function useGrid<TRow = unknown>(\r\n config: CreateERPTableConfig<TRow>\r\n): UseGridResult<TRow> {\r\n const generatedKeyRef = useRef<string | undefined>(undefined);\r\n if (config.tableKey) {\r\n generatedKeyRef.current = config.tableKey;\r\n } else if (!generatedKeyRef.current) {\r\n generatedKeyRef.current = createGridTableKey();\r\n }\r\n const tableKey = generatedKeyRef.current;\r\n\r\n const [controller, setController] =\r\n useState<UITableController | null>(null);\r\n const [api, setApi] = useState<GridApi<TRow> | null>(null);\r\n const [session, setSession] = useState<GridSession | null>(null);\r\n const [pluginHost, setPluginHost] = useState<PluginHost | null>(null);\r\n const [eventStore, setEventStore] = useState<EventStore | null>(null);\r\n const [rows, setRows] = useState<TableSnapShot | null>(null);\r\n const [, setViewVersion] = useState(0);\r\n const [undoFlags, setUndoFlags] = useState({ canUndo: false, canRedo: false });\r\n const [historyItems, setHistoryItems] = useState<HistoryItem[]>([]);\r\n const [changelog, setChangelog] = useState<ChangelogEntry[]>([]);\r\n\r\n // Page-window mode ('paged-idb'): an empty `tableKey` means \"page left /\r\n // not mounted yet\" — never build (or rebuild IndexedDB for) a grid then.\r\n const pagedIdb = config.persistence === 'paged-idb';\r\n const disabled = pagedIdb && !config.tableKey;\r\n // Latest config for the effect below (config identity changes every render;\r\n // only the listed deps rebuild the grid).\r\n const configRef = useRef(config);\r\n configRef.current = config;\r\n // Teardown of the previous grid. A new grid waits for it so the old one has\r\n // released its event store / IndexedDB connection before the next opens it.\r\n const teardownRef = useRef<Promise<void>>(Promise.resolve());\r\n\r\n // ---------- bootstrap + teardown ----------\r\n // The grid is created inside the effect (never in render / useMemo): render\r\n // is pure, StrictMode's mount→cleanup→mount creates exactly one grid (the\r\n // first run is cancelled before it builds), and every grid that was built is\r\n // released by its own cleanup.\r\n useEffect(() => {\r\n let cancelled = false;\r\n let built: CreateGridResult<TRow> | null = null;\r\n setController(null);\r\n setApi(null);\r\n setSession(null);\r\n setPluginHost(null);\r\n setEventStore(null);\r\n setRows(null);\r\n\r\n if (disabled) return undefined;\r\n\r\n const previous = teardownRef.current;\r\n void previous.then(() => {\r\n if (cancelled) return;\r\n const grid = createGrid<TRow>({ ...configRef.current, tableKey });\r\n built = grid;\r\n void grid.ready.then((result) => {\r\n if (cancelled) return;\r\n setController(result.controller);\r\n setApi(result.api);\r\n setSession(result.session);\r\n setPluginHost(result.pluginHost);\r\n setEventStore(result.eventStore);\r\n });\r\n });\r\n\r\n return () => {\r\n cancelled = true;\r\n const grid = built;\r\n if (!grid) {\r\n teardownRef.current = previous;\r\n return;\r\n }\r\n // Paged mode: dispose() = drop the RAM page window (IndexedDB stays the\r\n // source of truth) + release resources. Default event-sourced mode:\r\n // persisted data is left exactly as it is; only resources are released.\r\n // A failed assembly already cleaned up after itself (ready rejects).\r\n teardownRef.current = previous.then(() =>\r\n grid.ready.then(\r\n (result) =>\r\n pagedIdb\r\n ? result.controller.dispose()\r\n : result.controller.releaseResources(),\r\n () => undefined,\r\n ),\r\n );\r\n };\r\n }, [tableKey, disabled, pagedIdb, config.columns, config.columnDefs, config.store]);\r\n\r\n // Re-apply host rows only when the `rowData` prop changes (PR-82). Inline\r\n // `columnDefs` / `getRowId` get a new identity on every host render; keying\r\n // this effect on them re-applied the unchanged rows and reset grid edits.\r\n useEffect(() => {\r\n if (!controller || config.rowData === undefined) return;\r\n const { columnDefs, getRowId } = configRef.current;\r\n controller.applyHostRowData(config.rowData, columnDefs, getRowId);\r\n }, [controller, config.rowData]);\r\n\r\n useEffect(() => {\r\n if (!controller || !config.columnDefs) return;\r\n for (const def of flattenColDefOrGroup(config.columnDefs)) {\r\n if (def.hide === undefined) continue;\r\n const colId =\r\n typeof def.colId === 'string' && def.colId.length > 0\r\n ? def.colId\r\n : typeof def.field === 'string'\r\n ? def.field\r\n : null;\r\n if (!colId) continue;\r\n controller.setColumnVisible(colId, !def.hide);\r\n }\r\n }, [controller, config.columnDefs]);\r\n\r\n useEffect(() => {\r\n if (!controller || config.quickFilterText === undefined) return;\r\n controller.setQuickFilterText(config.quickFilterText);\r\n }, [controller, config.quickFilterText]);\r\n\r\n useEffect(() => {\r\n if (!controller || config.groupBy === undefined) return;\r\n const cols =\r\n typeof config.groupBy === 'string'\r\n ? [config.groupBy]\r\n : [...config.groupBy];\r\n controller.setRowGroupColumns(cols);\r\n }, [controller, config.groupBy]);\r\n\r\n useEffect(() => {\r\n if (!controller || config.groupDefaultExpanded === undefined) return;\r\n controller.setGroupDefaultExpanded(config.groupDefaultExpanded);\r\n }, [controller, config.groupDefaultExpanded]);\r\n\r\n // Snapshot equality skips selection / active-row / expand because those live\r\n // on view state, not TableSnapShot. Bump viewVersion on every store tick so\r\n // checkboxes and toolbar counts re-render (same as the ERP host hook).\r\n useEffect(() => {\r\n if (!controller) return;\r\n\r\n let cancelled = false;\r\n const syncView = () => {\r\n if (cancelled) return;\r\n // Re-render only in page-window mode — never rebuild a row snapshot on\r\n // every keystroke; server save uses getFullSnapShot().\r\n if (!controller.isPagedWindow()) {\r\n const snapshot = controller.getSnapShot('active');\r\n if (snapshot) setRows(snapshot);\r\n }\r\n setViewVersion((version) => version + 1);\r\n };\r\n\r\n syncView();\r\n const unsubscribe = controller.subscribe(syncView);\r\n\r\n if (!unsubscribe) {\r\n const retryTimer = window.setTimeout(syncView, 0);\r\n return () => {\r\n cancelled = true;\r\n window.clearTimeout(retryTimer);\r\n };\r\n }\r\n\r\n return () => {\r\n cancelled = true;\r\n unsubscribe();\r\n };\r\n }, [controller]);\r\n\r\n // ---------- selector: undo flags (independent of row snapshot) ----------\r\n useEffect(() => {\r\n if (!controller) return;\r\n\r\n const readFlags = () => ({\r\n canUndo: controller.canUndo(),\r\n canRedo: controller.canRedo(),\r\n });\r\n\r\n setUndoFlags(readFlags());\r\n\r\n return controller.subscribeSelected(\r\n readFlags,\r\n setUndoFlags,\r\n (a: { canUndo: boolean; canRedo: boolean }, b: { canUndo: boolean; canRedo: boolean }) =>\r\n a.canUndo === b.canUndo && a.canRedo === b.canRedo,\r\n );\r\n }, [controller]);\r\n\r\n // ---------- history / changelog: dedicated projection subscriptions ----------\r\n useEffect(() => {\r\n if (!controller) return;\r\n setHistoryItems(controller.getHistoryItems());\r\n setChangelog(controller.getChangelog());\r\n const unsubHistory = controller.subscribeHistoryItems(setHistoryItems);\r\n const unsubChangelog = controller.subscribeChangelog(setChangelog);\r\n return () => {\r\n unsubHistory();\r\n unsubChangelog();\r\n };\r\n }, [controller]);\r\n\r\n if (!eventStore || !controller || !api || !session || !pluginHost || !controller.getViewState()) {\r\n return { ready: false };\r\n }\r\n\r\n return {\r\n ready: true,\r\n controller,\r\n api,\r\n session,\r\n pluginHost,\r\n eventStore,\r\n store: isPersistentStore(config.store) ? config.store : DEFAULT_MEMORY_STORE,\r\n tableKey,\r\n rows: rows ?? (controller.getSnapShot('active') as TableSnapShot),\r\n changelog,\r\n changelogCount: changelog.length,\r\n historyItems,\r\n historyItemCount: historyItems.length,\r\n canUndo: undoFlags.canUndo,\r\n canRedo: undoFlags.canRedo,\r\n getChangelog: (filter) => controller.getChangelog(filter),\r\n getHistoryItems: (filter) => controller.getHistoryItems(filter),\r\n subscribeChangelog: (cb, filter) =>\r\n controller.subscribeChangelog(cb, filter),\r\n subscribeHistoryItems: (cb, filter) =>\r\n controller.subscribeHistoryItems(cb, filter),\r\n subscribeSelected: ((selector, listener, isEqual) =>\r\n controller.subscribeSelected(selector, listener, isEqual)) as GridSession['subscribeSelected'],\r\n getViewport: () => session.getViewport(),\r\n getVisibleRange: (totalRows?: number) => session.getVisibleRange(totalRows),\r\n projectVisibleRows: <T,>(rows: T[], totalRows?: number) =>\r\n session.projectVisibleRows(rows, totalRows),\r\n getUiRowCount: () => session.getUiRowCount(),\r\n projectVisibleUiRows: () => session.projectVisibleUiRows(),\r\n changeViewport: (input: {\r\n scrollOffset: number;\r\n viewportSize?: number;\r\n rowHeight?: number;\r\n overscan?: number;\r\n }) =>\r\n session.dispatchViewIntent({ type: 'CHANGE_VIEWPORT', ...input }),\r\n undo: () => controller.undo(),\r\n redo: () => controller.redo(),\r\n };\r\n}\r\n\r\n/** @deprecated Use {@link useGrid}. Removed in 1.0.0. */\r\nexport const useERPTable = useGrid;\r\n","import type { Ref } from 'react';\r\n\r\nexport function assignRef<T>(ref: Ref<T> | undefined, value: T): void {\r\n if (!ref) return;\r\n if (typeof ref === 'function') {\r\n ref(value);\r\n return;\r\n }\r\n (ref as { current: T }).current = value;\r\n}\r\n","\"use client\";\nimport React, {\n ReactNode,\n Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { CreateERPTableConfig } from '../bootstrap/type';\nimport { UITableController } from '../infrastructure/ui/UITableController';\nimport type { GridApi } from '../infrastructure/ui/createGridApi';\nimport {\n ERPTableHostProvider,\n resolveDirection,\n useMediaQuery,\n type ERPTableLocale,\n type ERPTableMessages,\n type ERPTableToastKind,\n type NumberingSystem,\n type DateAdapter,\n type UseDependOnHook,\n} from './host';\nimport type { ColumnMenuItemsConfig } from '../engine/dataOps/columnMenu';\nimport { DesktopTable } from './desktop/DesktopTable';\nimport type { ColumnMenuActionEvent } from './desktop/ColumnMenuPopover';\nimport { MobileTable } from './mobile/MobileTable';\nimport {\n GridTheme,\n isStockDarkTheme,\n resolveActiveTheme,\n themeDefault,\n themeToStyle,\n} from './theme';\nimport { IMultiSelectConfig } from './type';\nimport type { CellComponentMap } from './cellRenderer/cellRegistry';\nimport type { FilterComponentMap } from './filters';\nimport type { GridOverlayComponent } from './overlays';\nimport {\n isGridShortcutKey,\n resolveGridKeyScope,\n shouldSkipGridNavigation,\n} from './keyboard/skipGridNavigation';\nimport { useGrid } from './useERPTable';\nimport { useGridHostEvents } from './host/useGridHostEvents';\nimport { assignRef } from './host/assignRef';\nimport type {\n GridReadyEvent,\n} from './host/bindGridHostEvents';\nimport type {\n CellFocusedEvent,\n CellValueChangedEvent,\n RowDataUpdatedEvent,\n RowValueChangedEvent,\n SelectionChangedEvent,\n} from '../application/events/hostGridEvents';\nimport type { ProcessCellForClipboardParams } from '../engine/selection/clipboardCopy';\nimport type {\n ClipboardCopyEvent,\n ClipboardPasteEvent,\n} from '../infrastructure/ui/gridClipboard';\n\nexport type {\n CellFocusedEvent,\n CellValueChangedEvent,\n RowDataUpdatedEvent,\n RowValueChangedEvent,\n SelectionChangedEvent,\n} from '../application/events/hostGridEvents';\nexport type {\n ClipboardCopyEvent,\n ClipboardPasteEvent,\n} from '../infrastructure/ui/gridClipboard';\nexport type { ProcessCellForClipboardParams } from '../engine/selection/clipboardCopy';\nexport type { GridReadyEvent } from './host/bindGridHostEvents';\nexport type {\n GridApi,\n GridColumnState,\n GridRowNode,\n StartEditingCellParams,\n} from '../infrastructure/ui/createGridApi';\n\nexport interface DataGridProps<TRow = unknown> extends CreateERPTableConfig<TRow> {\n /**\n * Filled when the grid hydrates; cleared on unmount.\n * Prefer this over `onReady` (PR-86).\n */\n apiRef?: Ref<GridApi<TRow> | null>;\n /**\n * @deprecated Prefer {@link DataGridProps.apiRef} / `onGridReady` (PR-86).\n * Still receives `UITableController` for one version so existing hosts compile.\n */\n onReady?: (controller: UITableController) => void;\n /** Fires once when the grid has hydrated. Same moment as `onReady` (PR-85). */\n onGridReady?: (event: GridReadyEvent<NoInfer<TRow>>) => void;\n /** One call per `CELL_CHANGED` catalog event. */\n onCellValueChanged?: (event: CellValueChangedEvent<NoInfer<TRow>>) => void;\n /** Same `CELL_CHANGED` event, with the host row (`data`). */\n onRowValueChanged?: (event: RowValueChangedEvent<NoInfer<TRow>>) => void;\n /** Row add/delete/reorder catalog events, or later `rowData` prop updates. */\n onRowDataUpdated?: (event: RowDataUpdatedEvent<NoInfer<TRow>>) => void;\n /** View-store selection (`selectedRows`), not a second event bus. */\n onSelectionChanged?: (event: SelectionChangedEvent<NoInfer<TRow>>) => void;\n /** View-store active cell. */\n onCellFocused?: (event: CellFocusedEvent) => void;\n tableTitle?: ReactNode;\n header?: ReactNode;\n footer?: boolean | ReactNode;\n /**\n * When `footer={true}`, optional multi-row aggregates (PR-119).\n * Each row can override `aggFunc` (e.g. sum + avg).\n */\n footerRows?: readonly import('./desktop/ERPTableFooter').FooterRowDef[];\n activeCollection?: string;\n tableHeight?: number;\n /** When omitted, the choose-from-list button and modal are not rendered (D11). */\n multiSelectConfig?: IMultiSelectConfig;\n moreDetailComponent?: React.ComponentType<{data: unknown}>;\n /**\n * Desktop virtual scroll. Default **on** when a session is present (PR-97 / D17).\n * Pass `virtualization={false}` for classic pagination chrome.\n */\n virtualization?: boolean;\n locale?: ERPTableLocale;\n /**\n * Writing direction. Default derived from `locale` (`fa`/`ar` → rtl, `en` → ltr).\n * Pass explicitly to override (PR-127).\n */\n direction?: 'rtl' | 'ltr';\n /**\n * Intl digit system (PR-127). Default from locale meta\n * (`fa` → arabext, `ar` → arab, `en` → latn).\n */\n numberingSystem?: NumberingSystem;\n /**\n * Calendar port (PR-128 / D21). Default jalali for `locale=\"fa\"`, else gregorian.\n */\n dateAdapter?: DateAdapter;\n messages?: Partial<ERPTableMessages>;\n onToast?: (kind: ERPTableToastKind, message: string, detail?: unknown) => void;\n /** Typed CSS variables on the table root. Default `themeDefault`. */\n theme?: GridTheme;\n /**\n * Show the light/dark button in product chrome. Default true.\n * Hidden when `theme` is a custom (non-stock) GridTheme.\n */\n themeToggle?: boolean;\n /**\n * Replace built-in FieldType editors (PR-55). Keys are FieldType or a custom\n * string. Column `render` still wins. Omit = CellRenderer switch fallback.\n */\n components?: CellComponentMap;\n /**\n * Custom column filter UIs (PR-95). Keys match `ColumnDef.filter` string /\n * `{ type }`. Built-in names (`text`/`number`/…) stay on the default popover.\n */\n filterComponents?: FilterComponentMap;\n /**\n * Show a floating filter row under the header (PR-94).\n * Column menu filters work without this.\n */\n floatingFilter?: boolean;\n /**\n * Full-grid loading overlay (PR-103). Independent of hydrate `ready`.\n */\n loading?: boolean;\n /** Replace the default loading overlay (PR-103). */\n loadingOverlayComponent?: GridOverlayComponent;\n /** Replace the default empty overlay (PR-103). */\n noRowsOverlayComponent?: GridOverlayComponent;\n /**\n * Copy formatted display strings instead of raw values (PR-106).\n * Default false.\n */\n copyFormattedValue?: boolean;\n /** Include column headers in clipboard TSV/HTML (PR-106). Default false. */\n copyHeadersToClipboard?: boolean;\n /**\n * Convert eastern digits to ASCII in clipboard text (PR-106).\n * Default true.\n */\n copyDigitsAsLatin?: boolean;\n /** Override per-cell clipboard text (PR-106). */\n processCellForClipboard?: (\n params: ProcessCellForClipboardParams,\n ) => string;\n /**\n * Fires before writing to the system clipboard (PR-106).\n * Return `false` to cancel the default write.\n */\n onClipboardCopy?: (event: ClipboardCopyEvent) => boolean | void;\n /**\n * When true (default), paste past the last row adds rows (PR-107).\n */\n pasteAddsRows?: boolean;\n /** Fires before paste; return false to cancel (PR-107). */\n onClipboardPaste?: (event: ClipboardPasteEvent) => boolean | void;\n /**\n * Column header ⋮ menu items (PR-114). Pass a function to trim/reorder defaults\n * or append `{ name, label }` custom entries (handle via `onColumnMenuAction`).\n */\n columnMenuItems?: ColumnMenuItemsConfig;\n /** Fires for custom column menu items (PR-114). */\n onColumnMenuAction?: (event: ColumnMenuActionEvent) => void;\n /**\n * Host hook resolving `dependOn` values of remote lists (see\n * `ERPTableHostProvider`). When omitted, an outer `ERPTableHostProvider`'s\n * hook is used, else the static item values.\n */\n useDependOn?: UseDependOnHook;\n /**\n * Rows stuck under the header (PR-116). Display-only; not virtualized,\n * sorted, filtered, or selected with body rows.\n */\n pinnedTopRowData?: readonly NoInfer<TRow>[];\n /**\n * Rows stuck above the footer (PR-116). Display-only; not virtualized.\n */\n pinnedBottomRowData?: readonly NoInfer<TRow>[];\n}\n\n/** @deprecated Use {@link DataGridProps}. Removed in 1.0.0. */\nexport type ERPTableProps<TRow = unknown> = DataGridProps<TRow>;\n\nexport function DataGrid<TRow = unknown>(props: DataGridProps<TRow>) {\n const {\n apiRef,\n onReady,\n onGridReady,\n onCellValueChanged,\n onRowValueChanged,\n onRowDataUpdated,\n onSelectionChanged,\n onCellFocused,\n tableTitle,\n header,\n footer,\n footerRows,\n tableHeight,\n multiSelectConfig,\n moreDetailComponent,\n virtualization,\n remoteApi,\n locale = 'fa',\n direction,\n numberingSystem,\n dateAdapter,\n messages,\n onToast,\n theme: themeProp,\n themeToggle = true,\n components,\n filterComponents,\n rowData,\n floatingFilter = false,\n loading = false,\n loadingOverlayComponent,\n noRowsOverlayComponent,\n copyFormattedValue,\n copyHeadersToClipboard,\n copyDigitsAsLatin,\n processCellForClipboard,\n onClipboardCopy,\n pasteAddsRows,\n onClipboardPaste,\n columnMenuItems,\n onColumnMenuAction,\n useDependOn,\n pinnedTopRowData,\n pinnedBottomRowData,\n } = props;\n\n /** Grid root — scopes the window key listener to this grid. */\n const rootRef = useRef<HTMLDivElement>(null);\n /** Last focus / pointer event seen inside the grid's React tree (portals included). */\n const insideEventRef = useRef<Event | null>(null);\n const markInsideEvent = useCallback((e: React.SyntheticEvent) => {\n insideEventRef.current = e.nativeEvent;\n }, []);\n\n const requestedTheme = themeProp ?? themeDefault;\n const requestedKey = JSON.stringify(requestedTheme.params);\n const [preferDark, setPreferDark] = useState(() =>\n isStockDarkTheme(requestedTheme),\n );\n\n const { theme: resolvedTheme, locked: themeLocked } = useMemo(\n () =>\n resolveActiveTheme({\n requested: requestedTheme,\n preferDark,\n }),\n [requestedTheme, preferDark],\n );\n\n useEffect(() => {\n if (themeLocked) return;\n setPreferDark(isStockDarkTheme(requestedTheme));\n }, [requestedKey, themeLocked, requestedTheme]);\n\n const onToggleTheme = useCallback(() => {\n setPreferDark((value) => !value);\n }, []);\n\n // Every grid option (`persistence`, `cellEditCommit`, `enterNavigation`,\n // `quickFilterText`, `rowModelType`, `eventStoreName`, …) reaches createGrid;\n // the UI-only props are ignored there. Page size follows the rendered row\n // height of the theme.\n const result = useGrid<TRow>({\n ...props,\n rowHeight: resolvedTheme.params.rowHeight,\n });\n\n useEffect(() => {\n if (!result.ready) return;\n result.controller.configureClipboard({\n copyFormattedValue,\n copyHeadersToClipboard,\n copyDigitsAsLatin,\n processCellForClipboard,\n onClipboardCopy,\n pasteAddsRows,\n onClipboardPaste,\n });\n }, [\n result.ready,\n result.ready ? result.controller : null,\n copyFormattedValue,\n copyHeadersToClipboard,\n copyDigitsAsLatin,\n processCellForClipboard,\n onClipboardCopy,\n pasteAddsRows,\n onClipboardPaste,\n ]);\n\n useEffect(() => {\n if (!result.ready) return;\n const {controller} = result;\n\n const clickHandler = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n const button = target.closest(\"button\");\n if (button) {\n const {pageid, id} = button.dataset;\n if (result.tableKey === id || result.tableKey === pageid) {\n controller.dispose();\n }\n }\n };\n\n const handler = (e: KeyboardEvent) => {\n // The listener is window-level (Select popups, legacy chords): keys\n // typed in page forms, the toolbar, header filters or another grid are\n // never taken — only the legacy global chords are.\n const scope = resolveGridKeyScope(e.target, rootRef.current);\n if (scope === 'other-grid') return;\n const shortcut = isGridShortcutKey(e);\n if (scope === 'outside' && !shortcut) return;\n // Table Alt/Ctrl shortcuts win over Select; preventDefault must run\n // synchronously — the async dispatch below is too late.\n if (shortcut) {\n e.preventDefault();\n e.stopPropagation();\n } else if (shouldSkipGridNavigation(e.target, e.code)) {\n return;\n }\n const activeRow = controller.getActiveRow();\n const activeCell = controller.getActiveCell();\n void controller.dispatch({\n type: \"KEY_DOWN\",\n event: e,\n ctx: {\n activeRowId: activeRow,\n tableKey: result.tableKey,\n activeColumnId: activeCell?.columnId ?? null,\n },\n });\n };\n\n window.addEventListener(\"keydown\", handler, true);\n window.addEventListener(\"click\", clickHandler, true);\n return () => {\n window.removeEventListener(\"click\", clickHandler, true);\n window.removeEventListener(\"keydown\", handler, true);\n };\n }, [result.ready, result]);\n\n // `stopEditingWhenCellsLoseFocus`: a focus / pointer-down outside the grid\n // ends a deferred edit. React events bubble through portals, so Select\n // popups, date pickers and menus rendered by the grid count as inside.\n const readyController = result.ready ? result.controller : null;\n useEffect(() => {\n if (!readyController || typeof document === 'undefined') return;\n const onDocument = (event: Event) => {\n window.setTimeout(() => {\n if (insideEventRef.current === event) return;\n void readyController.leaveGridFocus();\n }, 0);\n };\n document.addEventListener('focusin', onDocument, true);\n document.addEventListener('pointerdown', onDocument, true);\n return () => {\n document.removeEventListener('focusin', onDocument, true);\n document.removeEventListener('pointerdown', onDocument, true);\n };\n }, [readyController]);\n\n useGridHostEvents({\n ready: result.ready,\n controller: result.ready ? result.controller : null,\n eventStore: result.ready ? result.eventStore : null,\n tableKey: result.ready ? result.tableKey : '',\n onCellValueChanged,\n onRowValueChanged,\n onRowDataUpdated,\n onSelectionChanged,\n onCellFocused,\n });\n\n const rowDataPrimedRef = useRef(false);\n useEffect(() => {\n if (!result.ready) {\n rowDataPrimedRef.current = false;\n return;\n }\n if (rowData === undefined) return;\n if (!rowDataPrimedRef.current) {\n rowDataPrimedRef.current = true;\n return;\n }\n onRowDataUpdated?.({\n rowData: [...rowData],\n source: 'rowData',\n });\n }, [result.ready, rowData, onRowDataUpdated]);\n\n useEffect(() => {\n if (!result.ready) return;\n const api = result.api;\n assignRef(apiRef, api);\n onReady?.(result.controller);\n onGridReady?.({ api });\n return () => assignRef(apiRef, null);\n }, [result, apiRef, onReady, onGridReady]);\n\n const {match: viewportMatch} = useMediaQuery(\"XLUP\");\n const isMobile = viewportMatch === false;\n\n if (!result.ready) return null;\n\n const sharedProps = {\n controller: result.controller,\n tableKey: result.tableKey,\n tableTitle,\n header,\n footer,\n multiSelectConfig,\n pluginHost: result.pluginHost,\n loading,\n loadingOverlayComponent,\n noRowsOverlayComponent,\n };\n\n const table = isMobile ? (\n <MobileTable {...sharedProps} />\n ) : (\n <DesktopTable\n {...sharedProps}\n store={result.store}\n tableHeight={tableHeight}\n moreDetailComponent={moreDetailComponent}\n ready={result.ready}\n virtualization={virtualization}\n session={result.session}\n floatingFilter={floatingFilter}\n footerRows={footerRows}\n pinnedTopRowData={pinnedTopRowData}\n pinnedBottomRowData={pinnedBottomRowData}\n />\n );\n\n const dir = resolveDirection(locale, direction);\n const themeMode = isStockDarkTheme(resolvedTheme) ? 'dark' : 'light';\n\n return (\n <ERPTableHostProvider\n locale={locale}\n direction={dir}\n numberingSystem={numberingSystem}\n dateAdapter={dateAdapter}\n messages={messages}\n onToast={onToast}\n remoteApi={remoteApi ?? result.controller.getRemoteApi()}\n theme={resolvedTheme}\n themeToggle={themeToggle}\n themeLocked={themeLocked}\n onToggleTheme={themeLocked ? undefined : onToggleTheme}\n components={components}\n filterComponents={filterComponents}\n columnMenuItems={columnMenuItems}\n onColumnMenuAction={onColumnMenuAction}\n useDependOn={useDependOn}\n >\n <div\n ref={rootRef}\n className=\"pdg-grid erp-table\"\n dir={dir}\n onFocusCapture={markInsideEvent}\n onPointerDownCapture={markInsideEvent}\n data-pdg-grid\n data-erp-table\n data-erp-theme={themeMode}\n data-erp-theme-locked={themeLocked ? 'true' : 'false'}\n style={themeToStyle(resolvedTheme)}\n >\n {table}\n </div>\n </ERPTableHostProvider>\n );\n}\n\n/** @deprecated Use {@link DataGrid}. Removed in 1.0.0. */\nexport const ERPTable = DataGrid;\n","/**\n * GENERATED from ui/styles/erp-table.css — do not edit by hand.\n * Regenerate: yarn generate:inject-styles\n */\nconst STYLE_ID = 'erp-table-injected-css';\n\nconst CSS = `/* Visual tokens copied from the ERP Tailwind theme so the published\r\n table looks identical after npm install (no host Tailwind scan). */\r\n\r\n/* Canonical class is \\`.pdg-grid\\` (PR-87 / D13). \\`.erp-table\\` is a one-version alias. */\r\n.pdg-grid,\r\n.erp-table {\r\n --pdg-main-black: #0e0e0e;\r\n --pdg-main-white: #fff;\r\n --pdg-gray-3: #f4f4f4;\r\n --pdg-gray-5: #ececec;\r\n --pdg-gray-6: #cecece;\r\n --pdg-gray-7: #b1b1b1;\r\n --pdg-gray-8: #939393;\r\n --pdg-gray-85: #848484;\r\n --pdg-gray-9: #767676;\r\n --pdg-gray-10: #585858;\r\n --pdg-gray-11: #515151;\r\n --pdg-black-6: #292929;\r\n --pdg-blue-6: #0658b0;\r\n --pdg-blue-11: #ddecfd;\r\n --pdg-blue-100: #dbeafe;\r\n --pdg-red-100: #fee2e2;\r\n --pdg-red-300: #fca5a5;\r\n --pdg-red-600: #dc2626;\r\n --pdg-yellow-200: #fef08a;\r\n --pdg-yellow-400: #facc15;\r\n --pdg-zinc-200: #e4e4e7;\r\n --pdg-neutral-500: #737373;\r\n --pdg-gray-100: #f3f4f6;\r\n --pdg-scrollbar: #d9d9d9;\r\n --pdg-success: #2c8440;\r\n --pdg-error: #dc3545;\r\n --pdg-overlay: rgba(14, 14, 14, 0.35);\r\n\r\n --erp-main-black: var(--pdg-main-black);\r\n --erp-main-white: var(--pdg-main-white);\r\n --erp-gray-3: var(--pdg-gray-3);\r\n --erp-gray-5: var(--pdg-gray-5);\r\n --erp-gray-6: var(--pdg-gray-6);\r\n --erp-gray-7: var(--pdg-gray-7);\r\n --erp-gray-8: var(--pdg-gray-8);\r\n --erp-gray-85: var(--pdg-gray-85);\r\n --erp-gray-9: var(--pdg-gray-9);\r\n --erp-gray-10: var(--pdg-gray-10);\r\n --erp-gray-11: var(--pdg-gray-11);\r\n --erp-black-6: var(--pdg-black-6);\r\n --erp-blue-6: var(--pdg-blue-6);\r\n --erp-blue-11: var(--pdg-blue-11);\r\n --erp-blue-100: var(--pdg-blue-100);\r\n --erp-red-100: var(--pdg-red-100);\r\n --erp-red-300: var(--pdg-red-300);\r\n --erp-red-600: var(--pdg-red-600);\r\n --erp-yellow-200: var(--pdg-yellow-200);\r\n --erp-yellow-400: var(--pdg-yellow-400);\r\n --erp-zinc-200: var(--pdg-zinc-200);\r\n --erp-neutral-500: var(--pdg-neutral-500);\r\n --erp-gray-100: var(--pdg-gray-100);\r\n --erp-scrollbar: var(--pdg-scrollbar);\r\n --erp-success: var(--pdg-success);\r\n --erp-error: var(--pdg-error);\r\n --erp-overlay: var(--pdg-overlay);\r\n\r\n /* Semantic roles (alias to palette — same computed colors as before). */\r\n --pdg-bg: var(--pdg-main-white);\r\n --pdg-fg: var(--pdg-black-6);\r\n --pdg-accent: var(--pdg-blue-6);\r\n --pdg-range-bg: color-mix(in srgb, var(--pdg-accent) 14%, transparent);\r\n --pdg-range-border: var(--pdg-accent);\r\n --pdg-header-bg: var(--pdg-gray-3);\r\n --pdg-row-stripe: var(--pdg-blue-11);\r\n --pdg-row-selected: var(--pdg-blue-100);\r\n --pdg-border: var(--pdg-gray-5);\r\n --pdg-danger: var(--pdg-red-600);\r\n --pdg-search-match: var(--pdg-yellow-400);\r\n --pdg-search-other: var(--pdg-yellow-200);\r\n --pdg-muted: var(--pdg-neutral-500);\r\n --pdg-font: IRANSans, Tahoma, sans-serif;\r\n --pdg-row-height: 40px;\r\n --pdg-font-size: 12px;\r\n --pdg-radius: 0.25rem;\r\n\r\n --erp-bg: var(--pdg-bg);\r\n --erp-fg: var(--pdg-fg);\r\n --erp-accent: var(--pdg-accent);\r\n --erp-range-bg: var(--pdg-range-bg);\r\n --erp-range-border: var(--pdg-range-border);\r\n --erp-header-bg: var(--pdg-header-bg);\r\n --erp-row-stripe: var(--pdg-row-stripe);\r\n --erp-row-selected: var(--pdg-row-selected);\r\n --erp-border: var(--pdg-border);\r\n --erp-danger: var(--pdg-danger);\r\n --erp-search-match: var(--pdg-search-match);\r\n --erp-search-other: var(--pdg-search-other);\r\n --erp-muted: var(--pdg-muted);\r\n --erp-font: var(--pdg-font);\r\n --erp-row-height: var(--pdg-row-height);\r\n --erp-font-size: var(--pdg-font-size);\r\n --erp-radius: var(--pdg-radius);\r\n\r\n font-family: var(--pdg-font);\r\n color: var(--pdg-fg);\r\n box-sizing: border-box;\r\n width: 100%;\r\n}\r\n\r\n.erp-table *,\r\n.erp-table *::before,\r\n.erp-table *::after {\r\n box-sizing: border-box;\r\n}\r\n\r\n.erp-table table {\r\n border-collapse: separate;\r\n border-spacing: 0;\r\n}\r\n.erp-table .border-collapse { border-collapse: collapse; }\r\n\r\n.erp-table .flex { display: flex; }\r\n.erp-table .inline-flex { display: inline-flex; }\r\n.erp-table .flex-col { flex-direction: column; }\r\n.erp-table .flex-1 { flex: 1 1 0%; }\r\n.erp-table .flex-wrap { flex-wrap: wrap; }\r\n.erp-table .shrink-0 { flex-shrink: 0; }\r\n.erp-table .items-center { align-items: center; }\r\n.erp-table .items-start { align-items: flex-start; }\r\n.erp-table .justify-between { justify-content: space-between; }\r\n.erp-table .justify-start { justify-content: flex-start; }\r\n.erp-table .justify-end { justify-content: flex-end; }\r\n.erp-table .justify-center { justify-content: center; }\r\n.erp-table .gap-1 { gap: 0.25rem; }\r\n.erp-table .gap-2 { gap: 0.5rem; }\r\n.erp-table .gap-3 { gap: 0.75rem; }\r\n.erp-table .gap-4 { gap: 1rem; }\r\n.erp-table .gap-5 { gap: 1.25rem; }\r\n.erp-table .w-full { width: 100%; }\r\n.erp-table .h-full { height: 100%; }\r\n.erp-table .h-8 { height: 2rem; }\r\n.erp-table .h-9 { height: var(--erp-row-height); }\r\n.erp-table .h-10 { height: 2.5rem; }\r\n.erp-table .\\\\!h-9 { height: var(--erp-row-height) !important; }\r\n.erp-table .\\\\!h-full { height: 100% !important; }\r\n.erp-table .\\\\!h-\\\\[480px\\\\] { height: 480px !important; }\r\n.erp-table .min-w-max { min-width: max-content; }\r\n.erp-table .min-w-0 { min-width: 0; }\r\n.erp-table .min-w-24 { min-width: 6rem; }\r\n.erp-table .min-w-36 { min-width: 9rem; }\r\n.erp-table .min-w-5 { min-width: 1.25rem; }\r\n.erp-table .max-w-72 { max-width: 18rem; }\r\n.erp-table .max-h-\\\\[20rem\\\\] { max-height: 20rem; }\r\n.erp-table .max-w-\\\\[40vw\\\\] { max-width: 40vw; }\r\n.erp-table .w-2 { width: 0.5rem; }\r\n.erp-table .h-2 { height: 0.5rem; }\r\n.erp-table .w-fit { width: fit-content; }\r\n.erp-table .w-\\\\[16px\\\\] { width: 16px; }\r\n.erp-table .h-\\\\[16px\\\\] { height: 16px; }\r\n.erp-table .w-\\\\[20px\\\\] { width: 20px; }\r\n.erp-table .w-\\\\[2\\\\.125rem\\\\] { width: 2.125rem; }\r\n.erp-table .h-\\\\[2\\\\.125rem\\\\] { height: 2.125rem; }\r\n.erp-table .w-\\\\[720px\\\\] { width: 720px; }\r\n.erp-table .min-w-\\\\[320px\\\\] { min-width: 320px; }\r\n.erp-table .overflow-auto { overflow: auto; }\r\n.erp-table .overflow-hidden { overflow: hidden; }\r\n.erp-table .overflow-x-auto { overflow-x: auto; }\r\n.erp-table .overflow-y-auto { overflow-y: auto; }\r\n.erp-table .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\r\n.erp-table .text-ellipsis { text-overflow: ellipsis; }\r\n.erp-table .whitespace-nowrap { white-space: nowrap; }\r\n.erp-table .text-3xs { font-size: 8px; }\r\n.erp-table .text-xs { font-size: var(--erp-font-size); line-height: 1.25rem; }\r\n.erp-table .text-sm { font-size: 14px; line-height: 1.25rem; }\r\n.erp-table .text-md { font-size: 16px; }\r\n.erp-table .text-start { text-align: start; }\r\n.erp-table .text-center { text-align: center; }\r\n.erp-table .text-white { color: var(--erp-bg); }\r\n.erp-table .font-light { font-weight: 300; }\r\n.erp-table .font-medium { font-weight: 500; }\r\n.erp-table .font-semibold { font-weight: 600; }\r\n.erp-table .px-1 { padding-left: 0.25rem; padding-right: 0.25rem; }\r\n.erp-table .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }\r\n.erp-table .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }\r\n.erp-table .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }\r\n.erp-table .py-1\\\\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; }\r\n.erp-table .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }\r\n.erp-table .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; }\r\n.erp-table .p-0 { padding: 0; }\r\n.erp-table .p-1 { padding: 0.25rem; }\r\n.erp-table .p-1\\\\.5 { padding: 0.375rem; }\r\n.erp-table .p-2 { padding: 0.5rem; }\r\n.erp-table .p-3 { padding: 0.75rem; }\r\n.erp-table .pb-24 { padding-bottom: 6rem; }\r\n.erp-table .pt-5 { padding-top: 1.25rem; }\r\n.erp-table .m-0 { margin: 0; }\r\n.erp-table .m-12 { margin: 3rem; }\r\n.erp-table .my-1 { margin-top: 0.25rem; margin-bottom: 0.25rem; }\r\n.erp-table .ms-auto { margin-inline-start: auto; }\r\n.erp-table .start-1 { inset-inline-start: 0.25rem; }\r\n.erp-table .border { border-width: 1px; border-style: solid; border-color: var(--erp-border); }\r\n.erp-table .border-0 { border-width: 0; }\r\n.erp-table .border-b { border-bottom: 1px solid var(--erp-border); }\r\n.erp-table .border-t { border-top: 1px solid var(--erp-border); }\r\n.erp-table .border-dashed { border-style: dashed; }\r\n.erp-table .rounded { border-radius: var(--erp-radius); }\r\n.erp-table .rounded-t-lg { border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; }\r\n.erp-table .rounded-lg { border-radius: 0.5rem; }\r\n.erp-table .rounded-full { border-radius: 9999px; }\r\n.erp-table .rounded-sm { border-radius: 0.125rem; }\r\n.erp-table .sticky { position: sticky; }\r\n.erp-table .absolute { position: absolute; }\r\n.erp-table .relative { position: relative; }\r\n.erp-table .fixed { position: fixed; }\r\n.erp-table .inset-0 { inset: 0; }\r\n.erp-table .top-0 { top: 0; }\r\n.erp-table .top-1 { top: 0.25rem; }\r\n.erp-table .right-0 { right: 0; }\r\n.erp-table .left-0 { left: 0; }\r\n.erp-table .z-10 { z-index: 10; }\r\n.erp-table .z-20 { z-index: 20; }\r\n.erp-table .shadow { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); }\r\n.erp-table .shadow-lg { box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1); }\r\n.erp-table .transition-all { transition: all 0.2s ease; }\r\n.erp-table .transition-colors { transition: color 0.15s ease, background-color 0.15s ease; }\r\n.erp-table .duration-200 { transition-duration: 200ms; }\r\n.erp-table .duration-300 { transition-duration: 300ms; }\r\n.erp-table .duration-400 { transition-duration: 400ms; }\r\n.erp-table .cursor-pointer { cursor: pointer; }\r\n.erp-table .cursor-text { cursor: text; }\r\n.erp-table .cursor-not-allowed { cursor: not-allowed; }\r\n.erp-table .cursor-grab { cursor: grab; }\r\n.erp-table .cursor-grabbing,\r\n.erp-table .active\\\\:cursor-grabbing:active { cursor: grabbing; }\r\n.erp-table .cursor-wait { cursor: wait; }\r\n.erp-table .cursor-col-resize { cursor: col-resize; }\r\n.erp-table .opacity-30 { opacity: 0.3; }\r\n.erp-table .opacity-40 { opacity: 0.4; }\r\n.erp-table .opacity-50 { opacity: 0.5; }\r\n.erp-table .opacity-60 { opacity: 0.6; }\r\n.erp-table .opacity-100 { opacity: 1; }\r\n.erp-table .line-through { text-decoration: line-through; }\r\n.erp-table .bg-transparent { background-color: transparent; }\r\n.erp-table .outline-none,\r\n.erp-table .focus\\\\:outline-none:focus,\r\n.erp-table .focus-visible\\\\:outline-none:focus-visible { outline: none; }\r\n.erp-table .ring-0,\r\n.erp-table .focus\\\\:ring-0:focus,\r\n.erp-table .focus\\\\:\\\\!ring-0:focus { box-shadow: none !important; }\r\n.erp-table .ring-2 { box-shadow: 0 0 0 2px var(--erp-search-match); }\r\n.erp-table .ring-yellow-400 { --tw-ring-color: var(--erp-search-match); }\r\n.erp-table .bg-main-white { background-color: var(--erp-bg); }\r\n.erp-table .bg-main-black { background-color: var(--erp-main-black); }\r\n.erp-table .bg-gray-gray3 { background-color: var(--erp-header-bg); }\r\n.erp-table .bg-gray-gray5,\r\n.erp-table .\\\\!bg-gray-gray5 { background-color: var(--erp-gray-5) !important; }\r\n.erp-table .bg-gray-100 { background-color: var(--erp-gray-100); }\r\n.erp-table .bg-blue-100 { background-color: var(--erp-row-selected); }\r\n.erp-table .bg-blue-blue11 { background-color: var(--erp-row-stripe); }\r\n.erp-table .bg-blue-blue6 { background-color: var(--erp-accent); }\r\n.erp-table .bg-red-300 { background-color: var(--erp-red-300); }\r\n.erp-table .bg-red-600 { background-color: var(--erp-danger); }\r\n.erp-table .bg-white,\r\n.erp-table .\\\\!bg-white { background-color: var(--erp-bg) !important; }\r\n.erp-table .text-main-white { color: var(--erp-main-white); }\r\n.erp-table .text-main-black { color: var(--erp-main-black); }\r\n.erp-table .text-gray-gray3 { color: var(--erp-gray-3); }\r\n.erp-table .text-gray-gray7 { color: var(--erp-gray-7); }\r\n.erp-table .text-gray-gray9 { color: var(--erp-gray-9); }\r\n.erp-table .text-gray-gray10 { color: var(--erp-gray-10); }\r\n.erp-table .stroke-gray-gray3 { stroke: var(--erp-gray-3); }\r\n.erp-table .stroke-gray-gray6 { stroke: var(--erp-gray-6); }\r\n.erp-table .stroke-gray-gray10 { stroke: var(--erp-gray-10); }\r\n.erp-table .stroke-gray-gray85 { stroke: var(--erp-gray-85); }\r\n.erp-table .fill-gray-gray6 { fill: var(--erp-gray-6); }\r\n.erp-table .fill-gray-gray7 { fill: var(--erp-gray-7); }\r\n.erp-table .fill-gray-gray8 { fill: var(--erp-gray-8); }\r\n.erp-table .fill-gray-gray10 { fill: var(--erp-gray-10); }\r\n.erp-table .fill-white { fill: var(--erp-bg); }\r\n.erp-table .text-black-black6 { color: var(--erp-fg); }\r\n.erp-table .text-blue-blue6 { color: var(--erp-accent); }\r\n.erp-table .text-red-600 { color: var(--erp-danger); }\r\n.erp-table .text-neutral-500 { color: var(--erp-muted); }\r\n.erp-table .border-gray-gray5 { border-color: var(--erp-border); }\r\n.erp-table .border-gray-gray7,\r\n.erp-table .\\\\!border-gray-gray7 { border-color: var(--erp-gray-7) !important; }\r\n.erp-table .border-gray-gray8 { border-color: var(--erp-gray-8); }\r\n.erp-table .border-gray-gray5 { border-color: var(--erp-border); }\r\n.erp-table .\\\\!border-\\\\[0\\\\.4px\\\\] { border-width: 0.4px !important; }\r\n.erp-table .hover\\\\:bg-red-100:hover { background-color: var(--erp-red-100); }\r\n.erp-table .hover\\\\:bg-zinc-200:hover { background-color: var(--erp-zinc-200); }\r\n.erp-table .disabled\\\\:opacity-40:disabled { opacity: 0.4; }\r\n.erp-table .animate-spin { animation: erp-table-spin 0.8s linear infinite; }\r\n.erp-table .bg-yellow-400 { background-color: var(--erp-search-match); }\r\n.erp-table .bg-yellow-200 { background-color: var(--erp-search-other); }\r\n.erp-table mark.bg-yellow-400 { background-color: var(--erp-search-match); font-weight: 600; }\r\n.erp-table mark.bg-yellow-200 { background-color: var(--erp-search-other); }\r\n.erp-table mark.erp-search-hit {\r\n background-color: var(--erp-search-other);\r\n color: inherit;\r\n}\r\n.erp-table mark.erp-search-hit.is-current {\r\n background-color: var(--erp-search-match);\r\n font-weight: 600;\r\n}\r\n.erp-table tfoot.erp-table-footer tr {\r\n background-color: var(--erp-bg);\r\n border-color: var(--erp-border);\r\n color: var(--erp-fg);\r\n height: var(--erp-row-height);\r\n}\r\n.erp-table tfoot.erp-table-footer td {\r\n color: var(--erp-fg);\r\n font-variant-numeric: tabular-nums;\r\n}\r\n\r\n/* PR-116: pinned top/bottom rows — sticky within the scrollport */\r\n.erp-table tbody.erp-pinned-rows--top {\r\n position: sticky;\r\n top: var(--erp-pinned-top-offset, var(--erp-row-height, 40px));\r\n z-index: 15;\r\n}\r\n.erp-table tbody.erp-pinned-rows--top tr.erp-pinned-row {\r\n background-color: var(--pdg-bg, var(--erp-bg));\r\n box-shadow: 0 1px 0 var(--pdg-border, var(--erp-border));\r\n}\r\n.erp-table tbody.erp-pinned-rows--bottom {\r\n position: sticky;\r\n bottom: var(--erp-pinned-bottom-offset, 0px);\r\n z-index: 15;\r\n}\r\n.erp-table tbody.erp-pinned-rows--bottom tr.erp-pinned-row {\r\n background-color: var(--pdg-bg, var(--erp-bg));\r\n box-shadow: 0 -1px 0 var(--pdg-border, var(--erp-border));\r\n}\r\n.erp-table tbody.erp-pinned-rows td {\r\n background-color: inherit;\r\n font-variant-numeric: tabular-nums;\r\n}\r\n.erp-table tbody.erp-pinned-rows .erp-col-pin-start,\r\n.erp-table tbody.erp-pinned-rows .erp-col-pin-index,\r\n.erp-table tbody.erp-pinned-rows .erp-col-pin-end {\r\n z-index: 16;\r\n}\r\n\r\n.erp-table .hidden-show-scrollBar {\r\n scrollbar-width: thin;\r\n scrollbar-color: var(--erp-scrollbar) transparent;\r\n}\r\n.erp-table .hidden-show-scrollBar::-webkit-scrollbar {\r\n height: 6px;\r\n width: 6px;\r\n}\r\n.erp-table .hidden-show-scrollBar::-webkit-scrollbar-thumb {\r\n background: var(--erp-scrollbar);\r\n border-radius: 999px;\r\n}\r\n\r\n.erp-table .\\\\[overflow-anchor\\\\:none\\\\] { overflow-anchor: none; }\r\n\r\n.erp-table input,\r\n.erp-table select,\r\n.erp-table button {\r\n font-family: inherit;\r\n}\r\n\r\n.erp-table th,\r\n.erp-table td {\r\n vertical-align: middle;\r\n}\r\n\r\n@keyframes erp-table-spin {\r\n to { transform: rotate(360deg); }\r\n}\r\n\r\n/* Pagination (ERP antd look) */\r\n.erp-table-pagination {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n font-size: var(--erp-font-size);\r\n}\r\n.erp-table-pagination__pages {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n}\r\n.erp-table-pagination__page {\r\n min-width: 1.75rem;\r\n height: 1.75rem;\r\n padding: 0 0.4rem;\r\n border: 1px solid var(--erp-border);\r\n border-radius: var(--erp-radius);\r\n background: var(--erp-bg);\r\n cursor: pointer;\r\n}\r\n.erp-table-pagination__page.is-active {\r\n border-color: var(--erp-main-black);\r\n color: var(--erp-main-black);\r\n font-weight: 600;\r\n}\r\n.erp-table-pagination__page.is-active:hover {\r\n background: var(--erp-main-black);\r\n color: var(--erp-bg);\r\n}\r\n.erp-table-pagination__nav {\r\n display: inline-flex;\r\n margin: 0;\r\n padding: 0;\r\n border-radius: var(--erp-radius);\r\n width: fit-content;\r\n border: 1px solid var(--erp-border);\r\n background: var(--erp-bg);\r\n cursor: pointer;\r\n}\r\n.erp-table-pagination__nav:hover {\r\n border-color: var(--erp-main-black);\r\n}\r\n.erp-table-pagination__nav:disabled {\r\n opacity: 0.4;\r\n cursor: not-allowed;\r\n}\r\n.erp-table-pagination select {\r\n height: 1.75rem;\r\n min-width: 3.25rem;\r\n padding: 0 0.4rem;\r\n border: 1px solid var(--erp-border);\r\n border-radius: var(--erp-radius);\r\n background: var(--erp-bg);\r\n font-size: var(--erp-font-size);\r\n color: var(--erp-fg);\r\n cursor: pointer;\r\n}\r\n\r\n/* Modal */\r\n.erp-table-modal-overlay {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 11000;\r\n background: var(--erp-overlay);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 1rem;\r\n}\r\n\r\n/* Cell range selection (PR-105) */\r\n.pdg-cell-range {\r\n background: var(--pdg-range-bg, var(--erp-range-bg));\r\n}\r\n.pdg-cell-range[data-pdg-range-edge~='top'] {\r\n box-shadow: inset 0 2px 0 0 var(--pdg-range-border, var(--erp-range-border));\r\n}\r\n.pdg-cell-range[data-pdg-range-edge~='bottom'] {\r\n box-shadow: inset 0 -2px 0 0 var(--pdg-range-border, var(--erp-range-border));\r\n}\r\n.pdg-cell-range[data-pdg-range-edge~='left'] {\r\n box-shadow: inset 2px 0 0 0 var(--pdg-range-border, var(--erp-range-border));\r\n}\r\n.pdg-cell-range[data-pdg-range-edge~='right'] {\r\n box-shadow: inset -2px 0 0 0 var(--pdg-range-border, var(--erp-range-border));\r\n}\r\n\r\n/* Fill handle (PR-108) */\r\n.pdg-fill-handle {\r\n position: absolute;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 2;\r\n width: 7px;\r\n height: 7px;\r\n margin: 0;\r\n padding: 0;\r\n border: 1px solid var(--pdg-range-border, var(--erp-range-border));\r\n background: var(--pdg-accent, var(--erp-accent));\r\n cursor: crosshair;\r\n touch-action: none;\r\n}\r\n\r\n/* Grid body overlays (PR-103) */\r\n.pdg-overlay {\r\n position: absolute;\r\n inset: 0;\r\n z-index: 5;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n pointer-events: none;\r\n background: color-mix(in srgb, var(--pdg-bg, var(--erp-bg)) 82%, transparent);\r\n color: var(--pdg-fg, var(--erp-fg));\r\n}\r\n.pdg-overlay[data-pdg-overlay='loading'] {\r\n pointer-events: auto;\r\n}\r\n.pdg-overlay__panel {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 0.75rem;\r\n padding: 1rem 1.25rem;\r\n font-size: var(--pdg-font-size, var(--erp-font-size));\r\n color: var(--pdg-muted, var(--erp-muted, var(--pdg-gray-9)));\r\n}\r\n.pdg-row-skeleton {\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n height: 100%;\r\n min-height: calc(var(--pdg-row-height, 40px) - 8px);\r\n padding: 0 0.5rem;\r\n box-sizing: border-box;\r\n}\r\n.pdg-row-skeleton__bar {\r\n display: block;\r\n width: 70%;\r\n height: 0.55rem;\r\n border-radius: 999px;\r\n background: linear-gradient(\r\n 90deg,\r\n var(--pdg-gray-5) 0%,\r\n var(--pdg-gray-3) 45%,\r\n var(--pdg-gray-5) 90%\r\n );\r\n background-size: 200% 100%;\r\n animation: pdg-skeleton-shimmer 1.2s ease-in-out infinite;\r\n}\r\n.pdg-grid[data-erp-theme='dark'] .pdg-row-skeleton__bar {\r\n background: linear-gradient(\r\n 90deg,\r\n var(--pdg-gray-7) 0%,\r\n var(--pdg-gray-6) 45%,\r\n var(--pdg-gray-7) 90%\r\n );\r\n background-size: 200% 100%;\r\n}\r\n@keyframes pdg-skeleton-shimmer {\r\n 0% {\r\n background-position: 100% 0;\r\n }\r\n 100% {\r\n background-position: -100% 0;\r\n }\r\n}\r\n\r\n.erp-table-modal {\r\n background: var(--erp-bg);\r\n border-radius: 0.5rem;\r\n width: min(720px, 100%);\r\n max-height: 90vh;\r\n display: flex;\r\n flex-direction: column;\r\n box-shadow: 0 20px 48px rgba(10, 21, 64, 0.18);\r\n}\r\n.erp-table-modal__header {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n padding: 0.75rem 1rem;\r\n border-bottom: 1px solid var(--erp-border);\r\n font-size: 14px;\r\n}\r\n.erp-table-modal__body {\r\n padding: 0.5rem;\r\n overflow: auto;\r\n flex: 1;\r\n}\r\n.erp-table-modal__close {\r\n margin-inline-start: auto;\r\n border: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n font-size: 1.1rem;\r\n}\r\n\r\n/* Dropdown / tooltip / select */\r\n.erp-table-tooltip {\r\n position: absolute;\r\n z-index: 12000;\r\n background: var(--erp-black-6);\r\n color: var(--erp-bg);\r\n font-size: 11px;\r\n padding: 0.25rem 0.5rem;\r\n border-radius: var(--erp-radius);\r\n pointer-events: none;\r\n white-space: nowrap;\r\n}\r\n.erp-table-dropdown {\r\n position: absolute;\r\n z-index: 12000;\r\n background: var(--erp-bg);\r\n border: 1px solid var(--erp-border);\r\n border-radius: 0.375rem;\r\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);\r\n min-width: 10rem;\r\n max-height: 20rem;\r\n overflow: auto;\r\n padding: 0.25rem 0;\r\n}\r\n.erp-table-dropdown__item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 0.75rem;\r\n width: 100%;\r\n padding: 0.4rem 0.75rem;\r\n background: transparent;\r\n border: 0;\r\n cursor: pointer;\r\n font-size: 13px;\r\n text-align: start;\r\n}\r\n.erp-table-dropdown__item:hover { background: var(--erp-header-bg); }\r\n.erp-table-dropdown__divider {\r\n height: 1px;\r\n background: var(--erp-border);\r\n margin: 0.25rem 0;\r\n}\r\n\r\n\r\n/* DynamicSelect root (host: h-[2.125rem] w-full rounded !bg-gray-gray3, 50% when disabled) */\r\n.pdg-dynamic-select {\r\n width: 100%;\r\n height: 2.125rem;\r\n border-radius: 0.25rem;\r\n background-color: var(--pdg-gray-3);\r\n}\r\n.pdg-dynamic-select.is-disabled { opacity: 0.5; }\r\n\r\n/* Date cell (react-persian-range-picker DatePicker; host: h-[2.125rem] text-sm bg-gray-3 px-2 rounded-sm) */\r\n.pdg-date-picker {\r\n width: 100%;\r\n height: 2.125rem;\r\n padding: 0 0.5rem;\r\n font-size: 0.875rem;\r\n border: none;\r\n border-radius: 0.125rem;\r\n background-color: var(--pdg-gray-3);\r\n}\r\n.pdg-date-picker.is-disabled {\r\n background-color: var(--pdg-gray-5);\r\n color: var(--pdg-gray-7);\r\n}\r\n\r\n.erp-table-checkbox {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n width: 16px;\r\n height: 16px;\r\n min-width: 16px;\r\n margin: 0;\r\n border: 1px solid var(--erp-scrollbar);\r\n border-radius: 4px;\r\n background: var(--erp-bg);\r\n cursor: pointer;\r\n display: inline-block;\r\n position: relative;\r\n vertical-align: middle;\r\n flex-shrink: 0;\r\n}\r\n.erp-table-checkbox:checked {\r\n background: var(--erp-main-black);\r\n border-color: var(--erp-main-black);\r\n}\r\n.erp-table-checkbox:checked::after {\r\n content: '';\r\n position: absolute;\r\n inset-inline-start: 4px;\r\n top: 1px;\r\n width: 5px;\r\n height: 9px;\r\n border: 2px solid var(--erp-bg);\r\n border-top: 0;\r\n border-inline-start: 0;\r\n transform: rotate(45deg);\r\n}\r\n.erp-table-checkbox:disabled {\r\n opacity: 0.45;\r\n cursor: not-allowed;\r\n}\r\n\r\n.erp-table-toast {\r\n position: fixed;\r\n z-index: 14000;\r\n bottom: 1.25rem;\r\n inset-inline-end: 1.25rem;\r\n padding: 0.6rem 0.9rem;\r\n border-radius: 0.4rem;\r\n font-size: var(--erp-font-size);\r\n color: var(--erp-bg);\r\n box-shadow: 0 0 16px rgba(0, 0, 0, 0.1);\r\n}\r\n.erp-table-toast.is-success { background: var(--erp-success); }\r\n.erp-table-toast.is-error { background: var(--erp-error); }\r\n\r\n.erp-table-date {\r\n width: 100%;\r\n height: 100%;\r\n position: relative;\r\n}\r\n.erp-table-date .erp-table-select__control,\r\n.erp-table-date input,\r\n.erp-table-date .pdg-date-range__trigger {\r\n height: 2.25rem;\r\n width: 100%;\r\n background: var(--erp-header-bg);\r\n border: none;\r\n border-radius: 0.125rem;\r\n font-size: var(--erp-font-size);\r\n padding: 0 0.5rem;\r\n text-align: inherit;\r\n cursor: pointer;\r\n}\r\n\r\n/* Internal Jalali calendar / range picker (PR-140) */\r\n.pdg-date-range__popover {\r\n position: absolute;\r\n z-index: 40;\r\n top: calc(100% + 2px);\r\n inset-inline-start: 0;\r\n min-width: 16rem;\r\n padding: 0.5rem;\r\n background: var(--pdg-bg);\r\n border: 1px solid var(--pdg-border);\r\n border-radius: 0.375rem;\r\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);\r\n}\r\n.pdg-date-range__actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 0.35rem;\r\n}\r\n.pdg-date-range__clear {\r\n background: transparent;\r\n border: 0;\r\n font-size: 0.75rem;\r\n cursor: pointer;\r\n color: var(--pdg-accent);\r\n padding: 0.25rem 0.5rem;\r\n}\r\n.pdg-jalali-cal {\r\n font-size: 0.75rem;\r\n user-select: none;\r\n}\r\n.pdg-jalali-cal__header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 0.35rem;\r\n gap: 0.25rem;\r\n}\r\n.pdg-jalali-cal__title {\r\n font-weight: 600;\r\n flex: 1;\r\n text-align: center;\r\n}\r\n.pdg-jalali-cal__nav {\r\n border: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n width: 1.75rem;\r\n height: 1.75rem;\r\n border-radius: 0.25rem;\r\n font-size: 1rem;\r\n line-height: 1;\r\n color: var(--pdg-fg);\r\n}\r\n.pdg-jalali-cal__nav:hover {\r\n background: var(--pdg-row-stripe);\r\n}\r\n.pdg-jalali-cal__weekdays,\r\n.pdg-jalali-cal__grid {\r\n display: grid;\r\n grid-template-columns: repeat(7, 1fr);\r\n gap: 2px;\r\n}\r\n.pdg-jalali-cal__wd {\r\n text-align: center;\r\n opacity: 0.65;\r\n padding: 0.15rem 0;\r\n}\r\n.pdg-jalali-cal__day {\r\n border: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n aspect-ratio: 1;\r\n border-radius: 0.25rem;\r\n font-size: 0.75rem;\r\n color: var(--pdg-fg);\r\n}\r\n.pdg-jalali-cal__day.is-outside {\r\n opacity: 0.35;\r\n}\r\n.pdg-jalali-cal__day.is-holiday:not(.is-selected) {\r\n color: var(--pdg-danger);\r\n font-weight: 600;\r\n}\r\n.pdg-jalali-cal__day.is-today:not(.is-selected) {\r\n outline: 1px solid var(--pdg-accent);\r\n}\r\n.pdg-jalali-cal__day:hover:not(.is-selected) {\r\n background: var(--pdg-row-stripe);\r\n}\r\n\r\n.erp-table-desktop__toolbar {\r\n padding: 0.5rem 0.25rem 0.35rem;\r\n}\r\n\r\n.erp-table-index-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: transparent;\r\n border: 0;\r\n padding: 0.125rem;\r\n border-radius: 0.125rem;\r\n cursor: pointer;\r\n line-height: 0;\r\n}\r\n\r\n.erp-table th[data-pdg-sortable='true'] {\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.erp-table .pdg-header-label {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.35rem;\r\n min-width: 0;\r\n max-width: calc(100% - 0.5rem);\r\n}\r\n\r\n.erp-table .pdg-header-caption {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.erp-table .pdg-sort-indicator {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.15rem;\r\n flex-shrink: 0;\r\n color: var(--pdg-accent, var(--erp-accent));\r\n font-size: 0.65rem;\r\n line-height: 1;\r\n}\r\n\r\n.erp-table .pdg-sort-icon {\r\n opacity: 0.9;\r\n}\r\n\r\n.erp-table .pdg-sort-priority {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-inline-size: 0.9rem;\r\n padding-inline: 0.15rem;\r\n border-radius: 0.2rem;\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 18%, transparent);\r\n color: var(--pdg-accent, var(--erp-accent));\r\n font-size: 0.6rem;\r\n font-weight: 600;\r\n}\r\n\r\n.erp-table .pdg-filter-btn-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-inline-start: 0.15rem;\r\n padding: 0.05rem 0.2rem;\r\n border: 0;\r\n border-radius: 0.2rem;\r\n background: transparent;\r\n color: var(--pdg-fg-muted, var(--erp-fg-muted));\r\n font-size: 0.55rem;\r\n line-height: 1;\r\n cursor: pointer;\r\n}\r\n\r\n.erp-table .pdg-filter-btn-icon.is-active,\r\n.erp-table th[data-pdg-filter-active='true'] .pdg-filter-btn-icon {\r\n color: var(--pdg-accent, var(--erp-accent));\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 16%, transparent);\r\n}\r\n\r\n.pdg-filter-popover {\r\n min-width: 12rem;\r\n max-width: 18rem;\r\n padding: 0.5rem;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 0.375rem;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: var(--pdg-fg, var(--erp-fg));\r\n box-shadow: 0 8px 24px color-mix(in srgb, var(--pdg-fg, var(--erp-fg)) 18%, transparent);\r\n}\r\n\r\n.pdg-filter-form {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.4rem;\r\n}\r\n\r\n.pdg-filter-select,\r\n.pdg-filter-input,\r\n.pdg-floating-filter-input {\r\n width: 100%;\r\n min-height: 1.75rem;\r\n padding: 0.2rem 0.35rem;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 0.25rem;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: inherit;\r\n font-size: 0.75rem;\r\n}\r\n\r\n.pdg-filter-actions {\r\n display: flex;\r\n gap: 0.35rem;\r\n justify-content: flex-end;\r\n}\r\n\r\n.pdg-filter-btn {\r\n padding: 0.2rem 0.45rem;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 0.25rem;\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 12%, transparent);\r\n color: inherit;\r\n font-size: 0.7rem;\r\n cursor: pointer;\r\n}\r\n\r\n.pdg-filter-check {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.35rem;\r\n font-size: 0.75rem;\r\n}\r\n\r\n.pdg-filter-set-list {\r\n max-height: 10rem;\r\n overflow: auto;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.25rem;\r\n}\r\n\r\n.erp-table .pdg-floating-filter-row {\r\n background: var(--pdg-bg-muted, var(--erp-bg-muted));\r\n}\r\n\r\n.erp-table .pdg-floating-filter-cell {\r\n padding: 0.25rem;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n font-weight: normal;\r\n}\r\n\r\n.erp-table .erp-col-resize {\r\n position: absolute;\r\n inset-block: 0;\r\n inset-inline-end: 0;\r\n width: 6px;\r\n padding: 0;\r\n margin: 0;\r\n border: 0;\r\n background: transparent;\r\n cursor: col-resize;\r\n touch-action: none;\r\n z-index: 2;\r\n}\r\n\r\n.erp-table .erp-col-resize:hover,\r\n.erp-table .erp-col-resize:focus-visible {\r\n background: var(--erp-accent);\r\n opacity: 0.35;\r\n}\r\n\r\nbody.erp-col-resizing,\r\nbody.erp-col-resizing * {\r\n cursor: col-resize;\r\n user-select: none;\r\n}\r\n\r\n.erp-table th[data-erp-col-drag] {\r\n cursor: grab;\r\n}\r\n\r\n.erp-table th[data-erp-col-drop] {\r\n box-shadow: inset 0 0 0 2px var(--erp-accent);\r\n}\r\n\r\n.erp-table .erp-col-group-header {\r\n font-weight: 600;\r\n vertical-align: middle;\r\n}\r\n\r\n.erp-table .erp-col-group-toggle {\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n font: inherit;\r\n color: inherit;\r\n padding: 0;\r\n}\r\n\r\n.pdg-col-menu-btn {\r\n margin-inline-start: 0.25rem;\r\n padding: 0 0.25rem;\r\n border: none;\r\n background: transparent;\r\n cursor: pointer;\r\n font-size: 0.875rem;\r\n line-height: 1;\r\n color: var(--pdg-muted, var(--erp-muted));\r\n}\r\n\r\n.pdg-col-menu-btn:hover {\r\n color: var(--pdg-accent, inherit);\r\n}\r\n\r\n.erp-col-menu {\r\n min-width: 11rem;\r\n padding: 0.25rem 0;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 0.375rem;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: var(--pdg-fg, var(--erp-fg));\r\n box-shadow: 0 8px 24px color-mix(in srgb, var(--pdg-fg, var(--erp-fg)) 18%, transparent);\r\n}\r\n\r\n.erp-col-menu__item {\r\n display: block;\r\n width: 100%;\r\n padding: 0.375rem 0.75rem;\r\n border: none;\r\n background: transparent;\r\n text-align: start;\r\n font: inherit;\r\n font-size: 0.75rem;\r\n cursor: pointer;\r\n color: inherit;\r\n}\r\n\r\n.erp-col-menu__item:hover,\r\n.erp-col-menu__item.is-focused {\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 12%, transparent);\r\n}\r\n\r\n.erp-col-menu__item:disabled {\r\n opacity: 0.45;\r\n cursor: not-allowed;\r\n}\r\n\r\n.erp-col-menu__separator {\r\n height: 1px;\r\n margin: 0.25rem 0;\r\n background: var(--pdg-border, var(--erp-border));\r\n}\r\n\r\n.erp-col-columns-panel__title {\r\n padding: 0.375rem 0.75rem;\r\n font-size: 0.75rem;\r\n font-weight: 600;\r\n border-bottom: 1px solid var(--pdg-border, var(--erp-border));\r\n}\r\n\r\n.erp-col-columns-panel__list {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0.25rem 0;\r\n max-height: 16rem;\r\n overflow: auto;\r\n}\r\n\r\n.erp-col-columns-panel__row {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n padding: 0.25rem 0.75rem;\r\n font-size: 0.75rem;\r\n cursor: pointer;\r\n}\r\n\r\n.erp-col-columns-panel__row:hover {\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 12%, transparent);\r\n}\r\n\r\n.erp-table .erp-col-pin-start,\r\n.erp-table .erp-col-pin-index {\r\n position: sticky;\r\n z-index: 2;\r\n background-color: inherit;\r\n}\r\n\r\n.erp-table .erp-col-pin-end {\r\n position: sticky;\r\n z-index: 2;\r\n background-color: inherit;\r\n}\r\n\r\n.erp-table thead .erp-col-pin-start,\r\n.erp-table thead .erp-col-pin-index,\r\n.erp-table thead .erp-col-pin-end {\r\n z-index: 4;\r\n background-color: var(--erp-header-bg);\r\n}\r\n\r\n.erp-table tfoot .erp-col-pin-start,\r\n.erp-table tfoot .erp-col-pin-index,\r\n.erp-table tfoot .erp-col-pin-end {\r\n z-index: 3;\r\n background-color: var(--erp-bg);\r\n}\r\n\r\n.erp-table[dir=\"ltr\"] .erp-col-pin-start,\r\n.erp-table[dir=\"ltr\"] .erp-col-pin-index {\r\n box-shadow: 4px 0 8px -6px rgb(0 0 0 / 0.22);\r\n}\r\n\r\n.erp-table[dir=\"rtl\"] .erp-col-pin-start,\r\n.erp-table[dir=\"rtl\"] .erp-col-pin-index {\r\n box-shadow: -4px 0 8px -6px rgb(0 0 0 / 0.22);\r\n}\r\n\r\n.erp-table[dir=\"ltr\"] .erp-col-pin-end {\r\n box-shadow: -4px 0 8px -6px rgb(0 0 0 / 0.22);\r\n}\r\n\r\n.erp-table[dir=\"rtl\"] .erp-col-pin-end {\r\n box-shadow: 4px 0 8px -6px rgb(0 0 0 / 0.22);\r\n}\r\n\r\n.erp-table .erp-toolbar-btn:focus-visible {\r\n outline: 2px solid var(--erp-accent);\r\n outline-offset: 2px;\r\n}\r\n\r\n/* PR-124: cell editors expose a visible focus ring (APG). */\r\n.erp-table .pdg-cell-editor:focus-visible,\r\n.pdg-grid .pdg-cell-editor:focus-visible {\r\n outline: 2px solid var(--pdg-accent, var(--erp-accent));\r\n outline-offset: 1px;\r\n}\r\n\r\n/* PR-125: polite announcements for AT; keep out of visual layout. */\r\n.pdg-live-region {\r\n position: absolute;\r\n width: 1px;\r\n height: 1px;\r\n padding: 0;\r\n margin: -1px;\r\n overflow: hidden;\r\n clip: rect(0, 0, 0, 0);\r\n white-space: nowrap;\r\n border: 0;\r\n}\r\n\r\n/* PR-136: product audit history panel */\r\n.pdg-history-panel {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n min-width: 220px;\r\n max-width: 360px;\r\n max-height: 100%;\r\n padding: 10px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 6px;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: var(--pdg-fg, var(--erp-fg));\r\n font-size: 12px;\r\n box-sizing: border-box;\r\n}\r\n.pdg-history-panel__header {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n}\r\n.pdg-history-panel__title {\r\n margin: 0;\r\n font-size: 14px;\r\n font-weight: 600;\r\n}\r\n.pdg-history-panel__filters {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 6px;\r\n}\r\n.pdg-history-panel__filter {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n}\r\n.pdg-history-panel__filter select {\r\n font: inherit;\r\n padding: 4px 6px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 4px;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: inherit;\r\n}\r\n.pdg-history-panel__empty {\r\n margin: 0;\r\n opacity: 0.7;\r\n}\r\n.pdg-history-panel__list {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n overflow: auto;\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n}\r\n.pdg-history-panel__item {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 4px;\r\n padding: 6px;\r\n background: var(--pdg-bg-muted, var(--erp-bg-muted));\r\n}\r\n.pdg-history-panel__item[data-pdg-history-severity='warning'] {\r\n border-color: var(--pdg-warning, var(--erp-warning, var(--erp-accent)));\r\n}\r\n.pdg-history-panel__item[data-pdg-history-severity='error'] {\r\n border-color: var(--pdg-danger, var(--erp-danger));\r\n}\r\n.pdg-history-panel__jump {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n align-items: flex-start;\r\n width: 100%;\r\n padding: 0;\r\n border: 0;\r\n background: transparent;\r\n color: inherit;\r\n text-align: inherit;\r\n font: inherit;\r\n cursor: pointer;\r\n}\r\n.pdg-history-panel__jump:disabled {\r\n cursor: default;\r\n opacity: 0.85;\r\n}\r\n.pdg-history-panel__jump:not(:disabled):hover .pdg-history-panel__item-title {\r\n color: var(--pdg-accent, var(--erp-accent));\r\n}\r\n.pdg-history-panel__item-title {\r\n font-weight: 600;\r\n}\r\n.pdg-history-panel__item-meta {\r\n opacity: 0.65;\r\n font-size: 11px;\r\n}\r\n.pdg-history-panel__item-desc {\r\n opacity: 0.85;\r\n}\r\n.pdg-history-panel__restore {\r\n align-self: flex-start;\r\n font: inherit;\r\n font-size: 11px;\r\n padding: 3px 8px;\r\n border-radius: 4px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n background: var(--pdg-bg, var(--erp-bg));\r\n color: var(--pdg-accent, var(--erp-accent));\r\n cursor: pointer;\r\n}\r\n.pdg-history-panel__restore:hover {\r\n border-color: var(--pdg-accent, var(--erp-accent));\r\n}\r\n\r\n/* PR-137: offline / pending mutations status */\r\n.pdg-offline-status {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n padding: 8px 10px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 6px;\r\n background: var(--pdg-bg-muted, var(--erp-bg-muted));\r\n color: var(--pdg-fg, var(--erp-fg));\r\n font-size: 12px;\r\n}\r\n.pdg-offline-status[data-pdg-connectivity='offline'] {\r\n border-color: var(--pdg-warning, var(--erp-warning, var(--erp-accent)));\r\n}\r\n.pdg-offline-status__row {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n.pdg-offline-status__badge {\r\n display: inline-flex;\r\n align-items: center;\r\n padding: 2px 8px;\r\n border-radius: 999px;\r\n font-weight: 600;\r\n font-size: 11px;\r\n background: color-mix(in srgb, var(--pdg-accent, var(--erp-accent)) 16%, transparent);\r\n}\r\n.pdg-offline-status[data-pdg-connectivity='offline'] .pdg-offline-status__badge {\r\n background: color-mix(\r\n in srgb,\r\n var(--pdg-warning, var(--erp-warning, var(--erp-accent))) 22%,\r\n transparent\r\n );\r\n}\r\n.pdg-offline-status__pending {\r\n opacity: 0.9;\r\n}\r\n.pdg-offline-status__queue {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n max-height: 8rem;\r\n overflow: auto;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n}\r\n.pdg-offline-status__queue li {\r\n padding: 4px 6px;\r\n border-radius: 4px;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n}\r\n\r\n.pdg-sync-panel {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n padding: 8px 10px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 6px;\r\n background: var(--pdg-surface, var(--erp-surface));\r\n color: var(--pdg-text, var(--erp-text));\r\n font-size: 0.875rem;\r\n}\r\n.pdg-sync-panel__row {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n.pdg-sync-panel__policy {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n}\r\n.pdg-sync-panel__policy select,\r\n.pdg-sync-panel button {\r\n font: inherit;\r\n color: inherit;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 4px;\r\n padding: 4px 8px;\r\n cursor: pointer;\r\n}\r\n.pdg-sync-panel button:disabled,\r\n.pdg-sync-panel select:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n}\r\n.pdg-sync-panel__status {\r\n margin: 0;\r\n opacity: 0.85;\r\n}\r\n.pdg-sync-panel__conflicts {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n}\r\n.pdg-sync-panel__conflicts li {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n align-items: center;\r\n padding: 6px 8px;\r\n border-radius: 4px;\r\n background: var(--pdg-bg, var(--erp-bg));\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n}\r\n.pdg-sync-panel__conflict-key {\r\n font-weight: 600;\r\n color: var(--pdg-accent, var(--erp-accent));\r\n}\r\n.pdg-sync-panel__conflict-actions {\r\n display: flex;\r\n gap: 6px;\r\n margin-inline-start: auto;\r\n}\r\n\r\n.pdg-presence-panel {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n padding: 8px 10px;\r\n border: 1px solid var(--pdg-border, var(--erp-border));\r\n border-radius: 6px;\r\n background: var(--pdg-surface, var(--erp-surface));\r\n color: var(--pdg-text, var(--erp-text));\r\n font-size: 0.875rem;\r\n}\r\n.pdg-presence-panel__title {\r\n font-weight: 600;\r\n}\r\n.pdg-presence-panel__empty {\r\n margin: 0;\r\n opacity: 0.75;\r\n}\r\n.pdg-presence-panel__list {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n}\r\n.pdg-presence-panel__list li {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n.pdg-presence-panel__dot {\r\n width: 8px;\r\n height: 8px;\r\n border-radius: 50%;\r\n flex-shrink: 0;\r\n}\r\n.pdg-presence-panel__cell {\r\n opacity: 0.8;\r\n margin-inline-start: auto;\r\n}\r\n\r\n`;\n\nexport function injectGridStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const el = document.createElement('style');\n el.id = STYLE_ID;\n el.textContent = CSS;\n document.head.appendChild(el);\n}\n\n/** @deprecated Use `injectGridStyles()` (PR-77 / D16). */\nexport function injectERPTableStyles(): void {\n injectGridStyles();\n}\n","'use client';\r\n\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\n\r\nimport type {\r\n HistoryCategory,\r\n HistoryItem,\r\n HistorySeverity,\r\n} from '../../infrastructure/history/HistoryPanelViewModel';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useTranslations } from '../host';\r\nimport { revealRow } from '../gridSearch/utils';\r\n\r\nexport type GridHistoryPanelProps = {\r\n controller: UITableController;\r\n /** Max timeline rows (newest last in the ViewModel; we reverse for display). */\r\n limit?: number;\r\n className?: string;\r\n /** Fires after jump-to-cell (for hosts that want to close a drawer). */\r\n onNavigate?: (item: HistoryItem) => void;\r\n};\r\n\r\nfunction payloadCell(\r\n item: HistoryItem,\r\n): { rowId: number; columnId: string } | null {\r\n const payload = item.raw.payload as Record<string, unknown> | null;\r\n if (!payload) return null;\r\n const rowRaw = payload.rowId;\r\n const columnId = payload.columnId;\r\n if (typeof columnId !== 'string' || columnId.length === 0) return null;\r\n const rowId =\r\n typeof rowRaw === 'number'\r\n ? rowRaw\r\n : typeof rowRaw === 'string'\r\n ? Number(rowRaw)\r\n : NaN;\r\n if (!Number.isFinite(rowId)) return null;\r\n return { rowId, columnId };\r\n}\r\n\r\nfunction canRestore(item: HistoryItem): boolean {\r\n if (item.type !== 'CELL_CHANGED') return false;\r\n const payload = item.raw.payload as Record<string, unknown> | null;\r\n return Boolean(payload && 'previousValue' in payload && payloadCell(item));\r\n}\r\n\r\nfunction formatWhen(ts: number, locale: string): string {\r\n try {\r\n return new Intl.DateTimeFormat(locale, {\r\n dateStyle: 'short',\r\n timeStyle: 'medium',\r\n }).format(new Date(ts));\r\n } catch {\r\n return new Date(ts).toISOString();\r\n }\r\n}\r\n\r\nconst SEVERITIES: Array<HistorySeverity | ''> = [\r\n '',\r\n 'info',\r\n 'warning',\r\n 'error',\r\n];\r\nconst CATEGORIES: Array<HistoryCategory | ''> = [\r\n '',\r\n 'data',\r\n 'structure',\r\n 'view',\r\n 'system',\r\n];\r\n\r\n/**\r\n * Product audit timeline (PR-136). Subscribes to `HistoryPanelViewModel`\r\n * via the controller; jump focuses a cell; restore writes previousValue.\r\n */\r\nexport function GridHistoryPanel({\r\n controller,\r\n limit = 100,\r\n className,\r\n onNavigate,\r\n}: GridHistoryPanelProps) {\r\n const t = useTranslations();\r\n const [items, setItems] = useState<HistoryItem[]>([]);\r\n const [severity, setSeverity] = useState<HistorySeverity | ''>('');\r\n const [category, setCategory] = useState<HistoryCategory | ''>('');\r\n\r\n const filter = useMemo(\r\n () => ({\r\n ...(severity ? { severity } : {}),\r\n ...(category ? { category } : {}),\r\n limit,\r\n }),\r\n [severity, category, limit],\r\n );\r\n\r\n useEffect(() => {\r\n setItems(controller.getHistoryItems(filter));\r\n return controller.subscribeHistoryItems(setItems, filter);\r\n }, [controller, filter]);\r\n\r\n const timeline = useMemo(() => [...items].reverse(), [items]);\r\n\r\n const jumpTo = async (item: HistoryItem) => {\r\n const cell = payloadCell(item);\r\n if (!cell) return;\r\n await revealRow(controller, cell.rowId);\r\n await controller.dispatch({\r\n type: 'UI_ACTIVE_CELL',\r\n rowId: cell.rowId,\r\n columnId: cell.columnId,\r\n });\r\n onNavigate?.(item);\r\n };\r\n\r\n const restore = async (item: HistoryItem) => {\r\n const cell = payloadCell(item);\r\n const payload = item.raw.payload as Record<string, unknown> | null;\r\n if (!cell || !payload || !('previousValue' in payload)) return;\r\n // Ensure we write through (not a session draft patch).\r\n controller.cancelCellEdit();\r\n await controller.dispatch({\r\n type: 'UI_CELL_CHANGE',\r\n rowId: cell.rowId,\r\n columnId: cell.columnId,\r\n value: payload.previousValue,\r\n });\r\n await jumpTo(item);\r\n };\r\n\r\n return (\r\n <aside\r\n className={['pdg-history-panel', className].filter(Boolean).join(' ')}\r\n data-pdg-history-panel=\"\"\r\n aria-label={t('history.title')}\r\n >\r\n <header className=\"pdg-history-panel__header\">\r\n <h2 className=\"pdg-history-panel__title\">{t('history.title')}</h2>\r\n <div className=\"pdg-history-panel__filters\">\r\n <label className=\"pdg-history-panel__filter\">\r\n <span>{t('history.severity')}</span>\r\n <select\r\n data-pdg-history-severity=\"\"\r\n value={severity}\r\n onChange={(e) =>\r\n setSeverity(e.target.value as HistorySeverity | '')\r\n }\r\n >\r\n {SEVERITIES.map((s) => (\r\n <option key={s || 'all'} value={s}>\r\n {s ? t(`history.severity.${s}`) : t('history.filterAll')}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n <label className=\"pdg-history-panel__filter\">\r\n <span>{t('history.category')}</span>\r\n <select\r\n data-pdg-history-category=\"\"\r\n value={category}\r\n onChange={(e) =>\r\n setCategory(e.target.value as HistoryCategory | '')\r\n }\r\n >\r\n {CATEGORIES.map((c) => (\r\n <option key={c || 'all'} value={c}>\r\n {c ? t(`history.category.${c}`) : t('history.filterAll')}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n </div>\r\n </header>\r\n\r\n {timeline.length === 0 ? (\r\n <p className=\"pdg-history-panel__empty\" data-pdg-history-empty=\"\">\r\n {t('history.empty')}\r\n </p>\r\n ) : (\r\n <ol className=\"pdg-history-panel__list\" data-pdg-history-list=\"\">\r\n {timeline.map((item) => {\r\n const cell = payloadCell(item);\r\n return (\r\n <li\r\n key={item.id}\r\n className=\"pdg-history-panel__item\"\r\n data-pdg-history-item={item.id}\r\n data-pdg-history-type={item.type}\r\n data-pdg-history-severity={item.severity}\r\n data-pdg-history-category={item.category}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"pdg-history-panel__jump\"\r\n data-pdg-history-jump=\"\"\r\n disabled={!cell}\r\n onClick={() => void jumpTo(item)}\r\n >\r\n <span className=\"pdg-history-panel__item-title\">\r\n {item.title}\r\n </span>\r\n <span className=\"pdg-history-panel__item-meta\">\r\n {item.actorId} · {formatWhen(item.occurredAt, 'en')}\r\n </span>\r\n <span className=\"pdg-history-panel__item-desc\">\r\n {item.description}\r\n </span>\r\n </button>\r\n {canRestore(item) ? (\r\n <button\r\n type=\"button\"\r\n className=\"pdg-history-panel__restore\"\r\n data-pdg-history-restore=\"\"\r\n onClick={() => void restore(item)}\r\n >\r\n {t('history.restore')}\r\n </button>\r\n ) : null}\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n )}\r\n </aside>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport type {\r\n Connectivity,\r\n PendingChange,\r\n} from '../../application/offline/OfflineStatus';\r\nimport type { UITableController } from '../../infrastructure/ui/UITableController';\r\nimport { useTranslations } from '../host';\r\n\r\nexport type GridOfflineStatusProps = {\r\n controller: UITableController;\r\n className?: string;\r\n /** Show the pending mutation list (default true). */\r\n showQueue?: boolean;\r\n};\r\n\r\n/**\r\n * Online/offline badge + pending local mutations (PR-137).\r\n */\r\nexport function GridOfflineStatus({\r\n controller,\r\n className,\r\n showQueue = true,\r\n}: GridOfflineStatusProps) {\r\n const t = useTranslations();\r\n const [connectivity, setConnectivity] = useState<Connectivity>(() =>\r\n controller.getConnectivity(),\r\n );\r\n const [pending, setPending] = useState<readonly PendingChange[]>(() =>\r\n controller.getPendingChanges(),\r\n );\r\n\r\n useEffect(() => {\r\n const unsubConn = controller.subscribeConnectivity(setConnectivity);\r\n const unsubPending = controller.subscribePendingChanges(setPending);\r\n return () => {\r\n unsubConn();\r\n unsubPending();\r\n };\r\n }, [controller]);\r\n\r\n const count = pending.length;\r\n const pendingLabel =\r\n count === 0\r\n ? t('offline.pendingEmpty')\r\n : t('offline.pendingCount', { count });\r\n\r\n return (\r\n <aside\r\n className={['pdg-offline-status', className].filter(Boolean).join(' ')}\r\n data-pdg-offline-status=\"\"\r\n data-pdg-connectivity={connectivity}\r\n aria-live=\"polite\"\r\n >\r\n <div className=\"pdg-offline-status__row\">\r\n <span\r\n className=\"pdg-offline-status__badge\"\r\n data-pdg-offline-badge=\"\"\r\n >\r\n {connectivity === 'online'\r\n ? t('offline.online')\r\n : t('offline.offline')}\r\n </span>\r\n <span\r\n className=\"pdg-offline-status__pending\"\r\n data-pdg-offline-pending-count={count}\r\n >\r\n {pendingLabel}\r\n </span>\r\n </div>\r\n {showQueue && count > 0 ? (\r\n <ol className=\"pdg-offline-status__queue\" data-pdg-offline-queue=\"\">\r\n {pending.map((item) => (\r\n <li\r\n key={item.eventId}\r\n data-pdg-offline-queue-item={item.eventId}\r\n data-pdg-offline-queue-type={item.type}\r\n >\r\n {item.summary}\r\n </li>\r\n ))}\r\n </ol>\r\n ) : null}\r\n </aside>\r\n );\r\n}\r\n","export type BenchmarkSample = {\r\n readonly name: string;\r\n readonly iterations: number;\r\n readonly totalMs: number;\r\n readonly avgMs: number;\r\n readonly maxMs: number;\r\n};\r\n\r\nexport type PerformanceBudget = {\r\n readonly name: string;\r\n /** Maximum allowed average milliseconds per iteration. */\r\n readonly maxAvgMs: number;\r\n /** Maximum allowed single-iteration milliseconds. */\r\n readonly maxMaxMs?: number;\r\n};\r\n\r\nexport type BenchmarkResult = {\r\n readonly sample: BenchmarkSample;\r\n readonly budget: PerformanceBudget;\r\n readonly ok: boolean;\r\n readonly reasons: string[];\r\n};\r\n\r\n/**\r\n * Tiny synchronous/async micro-benchmark helper for core hot paths.\r\n * Not a substitute for browser profiling — guards CI regressions.\r\n */\r\nexport async function runBenchmark(\r\n name: string,\r\n iterations: number,\r\n fn: () => void | Promise<void>,\r\n): Promise<BenchmarkSample> {\r\n // Warmup\r\n await fn();\r\n\r\n let totalMs = 0;\r\n let maxMs = 0;\r\n for (let i = 0; i < iterations; i += 1) {\r\n const start = performance.now();\r\n await fn();\r\n const elapsed = performance.now() - start;\r\n totalMs += elapsed;\r\n if (elapsed > maxMs) maxMs = elapsed;\r\n }\r\n\r\n return {\r\n name,\r\n iterations,\r\n totalMs,\r\n avgMs: totalMs / iterations,\r\n maxMs,\r\n };\r\n}\r\n\r\nexport function checkBudget(\r\n sample: BenchmarkSample,\r\n budget: PerformanceBudget,\r\n): BenchmarkResult {\r\n const reasons: string[] = [];\r\n if (sample.avgMs > budget.maxAvgMs) {\r\n reasons.push(\r\n `avg ${sample.avgMs.toFixed(3)}ms exceeds budget ${budget.maxAvgMs}ms`,\r\n );\r\n }\r\n if (budget.maxMaxMs != null && sample.maxMs > budget.maxMaxMs) {\r\n reasons.push(\r\n `max ${sample.maxMs.toFixed(3)}ms exceeds budget ${budget.maxMaxMs}ms`,\r\n );\r\n }\r\n return {\r\n sample,\r\n budget,\r\n ok: reasons.length === 0,\r\n reasons,\r\n };\r\n}\r\n\r\n/** Default budgets for Phase 4 CI guards (generous for CI variance). */\r\nexport const DEFAULT_PERFORMANCE_BUDGETS = {\r\n inMemoryAppend100: {\r\n name: 'inMemoryAppend100',\r\n maxAvgMs: 25,\r\n maxMaxMs: 80,\r\n },\r\n indexedDbAppend100: {\r\n name: 'indexedDbAppend100',\r\n maxAvgMs: 80,\r\n maxMaxMs: 200,\r\n },\r\n selectorNotifyNoop: {\r\n name: 'selectorNotifyNoop',\r\n maxAvgMs: 5,\r\n maxMaxMs: 20,\r\n },\r\n /** PR-99: one arrow-key neighbor lookup on a 100k SparseRowIndex. */\r\n arrowNeighbor100k: {\r\n name: 'arrowNeighbor100k',\r\n maxAvgMs: 2,\r\n // Single-iteration spikes from GC under the 100k harness (PR-100).\r\n maxMaxMs: 20,\r\n },\r\n} as const satisfies Record<string, PerformanceBudget>;\r\n","\"use client\";\r\n\r\nimport React, { useCallback, useRef } from 'react';\r\n\r\nimport type { GridSession } from '../../application/session/GridSession';\r\nimport { useVirtualWindow } from './useVirtualWindow';\r\n\r\nexport type VirtualListProps<T> = {\r\n session: GridSession;\r\n items: readonly T[];\r\n /** Scrollport height in pixels. */\r\n height: number;\r\n rowHeight?: number;\r\n overscan?: number;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n getItemKey?: (item: T, absoluteIndex: number) => string | number;\r\n renderItem: (item: T, absoluteIndex: number) => React.ReactNode;\r\n};\r\n\r\n/**\r\n * Thin React adapter for Core ViewportCalculator.\r\n * Renders spacers + absolute-positioned visible rows only.\r\n */\r\nexport function VirtualList<T>({\r\n session,\r\n items,\r\n height,\r\n rowHeight = 40,\r\n overscan = 2,\r\n className,\r\n style,\r\n getItemKey,\r\n renderItem,\r\n}: VirtualListProps<T>) {\r\n const scrollerRef = useRef<HTMLDivElement>(null);\r\n const {\r\n visibleItems,\r\n absoluteIndices,\r\n spacerTop,\r\n spacerBottom,\r\n totalHeight,\r\n onScroll,\r\n } = useVirtualWindow(session, items, {\r\n rowHeight,\r\n overscan,\r\n initialViewportSize: height,\r\n });\r\n\r\n // Keep session viewportSize aligned with the scrollport height.\r\n React.useEffect(() => {\r\n void session.dispatchViewIntent({\r\n type: 'CHANGE_VIEWPORT',\r\n scrollOffset: session.getViewport().scrollOffset,\r\n viewportSize: height,\r\n rowHeight,\r\n overscan,\r\n });\r\n }, [session, height, rowHeight, overscan]);\r\n\r\n const handleScroll = useCallback(\r\n (event: React.UIEvent<HTMLDivElement>) => {\r\n const el = event.currentTarget;\r\n onScroll(el.scrollTop, el.clientHeight);\r\n },\r\n [onScroll],\r\n );\r\n\r\n return (\r\n <div\r\n ref={scrollerRef}\r\n data-erp-virtual-list\r\n className={className}\r\n style={{\r\n height,\r\n overflow: 'auto',\r\n position: 'relative',\r\n ...style,\r\n }}\r\n onScroll={handleScroll}\r\n >\r\n <div style={{ height: totalHeight, position: 'relative' }}>\r\n <div style={{ height: spacerTop }} aria-hidden />\r\n {visibleItems.map((item, i) => {\r\n const absoluteIndex = absoluteIndices[i] ?? i;\r\n const key = getItemKey\r\n ? getItemKey(item, absoluteIndex)\r\n : absoluteIndex;\r\n return (\r\n <div\r\n key={key}\r\n data-erp-virtual-row={absoluteIndex}\r\n style={{\r\n height: rowHeight,\r\n boxSizing: 'border-box',\r\n }}\r\n >\r\n {renderItem(item, absoluteIndex)}\r\n </div>\r\n );\r\n })}\r\n <div style={{ height: spacerBottom }} aria-hidden />\r\n </div>\r\n </div>\r\n );\r\n}\r\n"]}
|