@ai-table/grid 0.0.17 → 0.0.18

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.
@@ -13,4 +13,4 @@ export var AITableAreaType;
13
13
  AITableAreaType["grid"] = "grid";
14
14
  AITableAreaType["none"] = "none";
15
15
  })(AITableAreaType || (AITableAreaType = {}));
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3R5cGVzL2dyaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0RBLE1BQU0sQ0FBTixJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDNUIsbUNBQVcsQ0FBQTtJQUNYLHlDQUFpQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBRy9CO0FBZ0JELE1BQU0sQ0FBTixJQUFZLGdCQUdYO0FBSEQsV0FBWSxnQkFBZ0I7SUFDeEIsdUNBQW1CLENBQUE7SUFDbkIsMkNBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQUhXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFHM0I7QUFlRCxNQUFNLENBQU4sSUFBWSxlQUdYO0FBSEQsV0FBWSxlQUFlO0lBQ3ZCLGdDQUFhLENBQUE7SUFDYixnQ0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICduZ3gtdGV0aHlzL3R5cGVzJztcbmltcG9ydCB7IEFJVGFibGUsIEFJVGFibGVGaWVsZCwgQUlUYWJsZUZpZWxkVHlwZSwgQUlUYWJsZVJlY29yZCwgQ29vcmRpbmF0ZSwgRmllbGRWYWx1ZSwgVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnMgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVGaWVsZE1lbnVJdGVtIH0gZnJvbSAnLi9maWVsZCc7XG5pbXBvcnQgeyBBSVRhYmxlTGluZWFyUm93IH0gZnJvbSAnLi9yb3cnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVHcmlkQ2VsbFJlbmRlclNjaGVtYSB7XG4gICAgZWRpdG9yPzogYW55O1xuICAgIHRyYW5zZm9ybT86IChmaWVsZDogQUlUYWJsZUZpZWxkLCB2YWx1ZTogRmllbGRWYWx1ZSkgPT4gYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVHcmlkRGF0YSB7XG4gICAgdHlwZTogJ2dyaWQnO1xuICAgIGZpZWxkczogQUlUYWJsZUZpZWxkW107XG4gICAgcmVjb3JkczogQUlUYWJsZVJlY29yZFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVTZWxlY3Rpb24ge1xuICAgIHNlbGVjdGVkUmVjb3JkczogTWFwPHN0cmluZywgYm9vbGVhbj47XG4gICAgc2VsZWN0ZWRGaWVsZHM6IE1hcDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIHNlbGVjdGVkQ2VsbHM6IE1hcDxzdHJpbmcsIHt9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUZpZWxkQ29uZmlnIHtcbiAgICBmaWVsZFJlbmRlcmVycz86IFBhcnRpYWw8UmVjb3JkPEFJVGFibGVGaWVsZFR5cGUsIEFJVGFibGVHcmlkQ2VsbFJlbmRlclNjaGVtYT4+O1xuICAgIGZpZWxkUHJvcGVydHlFZGl0b3I/OiBhbnk7XG4gICAgZmllbGRNZW51cz86IEFJVGFibGVGaWVsZE1lbnVJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZVVzZXJJbmZvIHtcbiAgICB1aWQ/OiBzdHJpbmc7XG4gICAgZGlzcGxheV9uYW1lPzogc3RyaW5nO1xuICAgIGF2YXRhcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlUmVmZXJlbmNlcyB7XG4gICAgbWVtYmVyczogRGljdGlvbmFyeTxBSVRhYmxlVXNlckluZm8+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVSZW5kZXJlckNvbmZpZyB7XG4gICAgYWlUYWJsZTogQUlUYWJsZTtcbiAgICBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50O1xuICAgIGNvb3JkaW5hdGU6IENvb3JkaW5hdGU7XG4gICAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcbiAgICBjb250YWluZXJIZWlnaHQ6IG51bWJlcjtcbiAgICByZWZlcmVuY2VzOiBBSVRhYmxlUmVmZXJlbmNlcztcbn1cblxuZXhwb3J0IGVudW0gQUlUYWJsZVJvd0NvbHVtblR5cGUge1xuICAgIHJvdyA9ICdyb3cnLFxuICAgIGNvbHVtbiA9ICdjb2x1bW4nXG59XG5cbmV4cG9ydCB0eXBlIEFJVGFibGVTaXplTWFwID0gUmVjb3JkPG51bWJlciwgbnVtYmVyPjtcblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlQ29vcmRpbmF0ZSB7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICBjb2x1bW5Db3VudDogbnVtYmVyO1xuICAgIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQ7XG4gICAgcm93SGVpZ2h0OiBudW1iZXI7XG4gICAgcm93SW5pdFNpemU/OiBudW1iZXI7XG4gICAgcm93SW5kaWNlc01hcDogQUlUYWJsZVNpemVNYXA7XG4gICAgY29sdW1uSW5kaWNlc01hcDogQUlUYWJsZVNpemVNYXA7XG4gICAgY29sdW1uSW5pdFNpemU/OiBudW1iZXI7XG4gICAgZnJvemVuQ29sdW1uQ291bnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIEFJVGFibGVDaGVja1R5cGUge1xuICAgIGNoZWNrZWQgPSAnY2hlY2tlZCcsXG4gICAgdW5jaGVja2VkID0gJ3VuY2hlY2tlZCdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlU2Nyb2xsU3RhdGUge1xuICAgIHNjcm9sbFRvcDogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQ6IG51bWJlcjtcbiAgICBpc1Njcm9sbGluZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JvbGxBY3Rpb25PcHRpb25zIHtcbiAgICBkZWx0YVg6IG51bWJlcjtcbiAgICBkZWx0YVk6IG51bWJlcjtcbiAgICBzaGlmdEtleTogYm9vbGVhbjtcbiAgICBjYWxsYmFjaz86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBlbnVtIEFJVGFibGVBcmVhVHlwZSB7XG4gICAgZ3JpZCA9ICdncmlkJyxcbiAgICBub25lID0gJ25vbmUnXG59XG5cbmV4cG9ydCB0eXBlIEFJVGFibGVQb2ludFBvc2l0aW9uID0ge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgYXJlYVR5cGU6IEFJVGFibGVBcmVhVHlwZTtcbiAgICB0YXJnZXROYW1lOiBzdHJpbmc7XG4gICAgcmVhbFRhcmdldE5hbWU6IHN0cmluZztcbiAgICByb3dJbmRleDogbnVtYmVyO1xuICAgIGNvbHVtbkluZGV4OiBudW1iZXI7XG4gICAgb2Zmc2V0VG9wOiBudW1iZXI7XG4gICAgb2Zmc2V0TGVmdDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlRWRpdFBvc2l0aW9uIHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZU9wZW5FZGl0T3B0aW9ucyB7XG4gICAgcmVjb3JkSWQ6IHN0cmluZztcbiAgICBmaWVsZElkOiBzdHJpbmc7XG4gICAgY29vcmRpbmF0ZTogQ29vcmRpbmF0ZTtcbiAgICBjb250YWluZXI/OiBIVE1MRGl2RWxlbWVudDtcbiAgICBpc0hvdmVyRWRpdD86IGJvb2xlYW47XG4gICAgdXBkYXRlRmllbGRWYWx1ZTogKG9wdGlvbnM6IFVwZGF0ZUZpZWxkVmFsdWVPcHRpb25zPGFueT4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUNvbnRleHQge1xuICAgIGxpbmVhclJvd3M6IFNpZ25hbDxBSVRhYmxlTGluZWFyUm93W10+O1xuICAgIHBvaW50UG9zaXRpb246IFdyaXRhYmxlU2lnbmFsPEFJVGFibGVQb2ludFBvc2l0aW9uPjtcbiAgICBzY3JvbGxTdGF0ZTogV3JpdGFibGVTaWduYWw8QUlUYWJsZVNjcm9sbFN0YXRlPjtcbiAgICBzY3JvbGxBY3Rpb246IChvcHRpb25zOiBTY3JvbGxBY3Rpb25PcHRpb25zKSA9PiB2b2lkO1xuICAgIHZpc2libGVDb2x1bW5zTWFwOiBTaWduYWw8TWFwPHN0cmluZywgbnVtYmVyPj47XG4gICAgdmlzaWJsZVJvd3NJbmRleE1hcDogU2lnbmFsPE1hcDxzdHJpbmcsIG51bWJlcj4+O1xufVxuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3R5cGVzL2dyaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaURBLE1BQU0sQ0FBTixJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDNUIsbUNBQVcsQ0FBQTtJQUNYLHlDQUFpQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBRy9CO0FBZ0JELE1BQU0sQ0FBTixJQUFZLGdCQUdYO0FBSEQsV0FBWSxnQkFBZ0I7SUFDeEIsdUNBQW1CLENBQUE7SUFDbkIsMkNBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQUhXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFHM0I7QUFlRCxNQUFNLENBQU4sSUFBWSxlQUdYO0FBSEQsV0FBWSxlQUFlO0lBQ3ZCLGdDQUFhLENBQUE7SUFDYixnQ0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICduZ3gtdGV0aHlzL3R5cGVzJztcbmltcG9ydCB7IEFJVGFibGUsIEFJVGFibGVGaWVsZCwgQUlUYWJsZUZpZWxkVHlwZSwgQUlUYWJsZVJlY29yZCwgQ29vcmRpbmF0ZSwgRmllbGRWYWx1ZSwgVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnMgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVGaWVsZE1lbnVJdGVtIH0gZnJvbSAnLi9maWVsZCc7XG5pbXBvcnQgeyBBSVRhYmxlTGluZWFyUm93IH0gZnJvbSAnLi9yb3cnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVHcmlkQ2VsbFJlbmRlclNjaGVtYSB7XG4gICAgZWRpdG9yPzogYW55O1xuICAgIHRyYW5zZm9ybT86IChmaWVsZDogQUlUYWJsZUZpZWxkLCB2YWx1ZTogRmllbGRWYWx1ZSkgPT4gYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVHcmlkRGF0YSB7XG4gICAgdHlwZTogJ2dyaWQnO1xuICAgIGZpZWxkczogQUlUYWJsZUZpZWxkW107XG4gICAgcmVjb3JkczogQUlUYWJsZVJlY29yZFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVTZWxlY3Rpb24ge1xuICAgIHNlbGVjdGVkUmVjb3JkczogTWFwPHN0cmluZywgYm9vbGVhbj47XG4gICAgc2VsZWN0ZWRGaWVsZHM6IE1hcDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIHNlbGVjdGVkQ2VsbHM6IE1hcDxzdHJpbmcsIHt9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUZpZWxkQ29uZmlnIHtcbiAgICBmaWVsZFJlbmRlcmVycz86IFBhcnRpYWw8UmVjb3JkPEFJVGFibGVGaWVsZFR5cGUsIEFJVGFibGVHcmlkQ2VsbFJlbmRlclNjaGVtYT4+O1xuICAgIGZpZWxkUHJvcGVydHlFZGl0b3I/OiBhbnk7XG4gICAgZmllbGRNZW51cz86IEFJVGFibGVGaWVsZE1lbnVJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZVVzZXJJbmZvIHtcbiAgICB1aWQ/OiBzdHJpbmc7XG4gICAgZGlzcGxheV9uYW1lPzogc3RyaW5nO1xuICAgIGF2YXRhcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlUmVmZXJlbmNlcyB7XG4gICAgbWVtYmVyczogRGljdGlvbmFyeTxBSVRhYmxlVXNlckluZm8+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVSZW5kZXJlckNvbmZpZyB7XG4gICAgYWlUYWJsZTogQUlUYWJsZTtcbiAgICBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50O1xuICAgIGNvb3JkaW5hdGU6IENvb3JkaW5hdGU7XG4gICAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcbiAgICBjb250YWluZXJIZWlnaHQ6IG51bWJlcjtcbiAgICByZWZlcmVuY2VzOiBBSVRhYmxlUmVmZXJlbmNlcztcbiAgICByZWFkb25seT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIEFJVGFibGVSb3dDb2x1bW5UeXBlIHtcbiAgICByb3cgPSAncm93JyxcbiAgICBjb2x1bW4gPSAnY29sdW1uJ1xufVxuXG5leHBvcnQgdHlwZSBBSVRhYmxlU2l6ZU1hcCA9IFJlY29yZDxudW1iZXIsIG51bWJlcj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUNvb3JkaW5hdGUge1xuICAgIHJvd0NvdW50OiBudW1iZXI7XG4gICAgY29sdW1uQ291bnQ6IG51bWJlcjtcbiAgICBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50O1xuICAgIHJvd0hlaWdodDogbnVtYmVyO1xuICAgIHJvd0luaXRTaXplPzogbnVtYmVyO1xuICAgIHJvd0luZGljZXNNYXA6IEFJVGFibGVTaXplTWFwO1xuICAgIGNvbHVtbkluZGljZXNNYXA6IEFJVGFibGVTaXplTWFwO1xuICAgIGNvbHVtbkluaXRTaXplPzogbnVtYmVyO1xuICAgIGZyb3plbkNvbHVtbkNvdW50PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBBSVRhYmxlQ2hlY2tUeXBlIHtcbiAgICBjaGVja2VkID0gJ2NoZWNrZWQnLFxuICAgIHVuY2hlY2tlZCA9ICd1bmNoZWNrZWQnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZVNjcm9sbFN0YXRlIHtcbiAgICBzY3JvbGxUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXI7XG4gICAgaXNTY3JvbGxpbmc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nyb2xsQWN0aW9uT3B0aW9ucyB7XG4gICAgZGVsdGFYOiBudW1iZXI7XG4gICAgZGVsdGFZOiBudW1iZXI7XG4gICAgc2hpZnRLZXk6IGJvb2xlYW47XG4gICAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZW51bSBBSVRhYmxlQXJlYVR5cGUge1xuICAgIGdyaWQgPSAnZ3JpZCcsXG4gICAgbm9uZSA9ICdub25lJ1xufVxuXG5leHBvcnQgdHlwZSBBSVRhYmxlUG9pbnRQb3NpdGlvbiA9IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIGFyZWFUeXBlOiBBSVRhYmxlQXJlYVR5cGU7XG4gICAgdGFyZ2V0TmFtZTogc3RyaW5nO1xuICAgIHJlYWxUYXJnZXROYW1lOiBzdHJpbmc7XG4gICAgcm93SW5kZXg6IG51bWJlcjtcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyO1xuICAgIG9mZnNldFRvcDogbnVtYmVyO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUVkaXRQb3NpdGlvbiB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVPcGVuRWRpdE9wdGlvbnMge1xuICAgIHJlY29yZElkOiBzdHJpbmc7XG4gICAgZmllbGRJZDogc3RyaW5nO1xuICAgIGNvb3JkaW5hdGU6IENvb3JkaW5hdGU7XG4gICAgY29udGFpbmVyPzogSFRNTERpdkVsZW1lbnQ7XG4gICAgaXNIb3ZlckVkaXQ/OiBib29sZWFuO1xuICAgIHVwZGF0ZUZpZWxkVmFsdWU6IChvcHRpb25zOiBVcGRhdGVGaWVsZFZhbHVlT3B0aW9uczxhbnk+KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVDb250ZXh0IHtcbiAgICBsaW5lYXJSb3dzOiBTaWduYWw8QUlUYWJsZUxpbmVhclJvd1tdPjtcbiAgICBwb2ludFBvc2l0aW9uOiBXcml0YWJsZVNpZ25hbDxBSVRhYmxlUG9pbnRQb3NpdGlvbj47XG4gICAgc2Nyb2xsU3RhdGU6IFdyaXRhYmxlU2lnbmFsPEFJVGFibGVTY3JvbGxTdGF0ZT47XG4gICAgc2Nyb2xsQWN0aW9uOiAob3B0aW9uczogU2Nyb2xsQWN0aW9uT3B0aW9ucykgPT4gdm9pZDtcbiAgICB2aXNpYmxlQ29sdW1uc01hcDogU2lnbmFsPE1hcDxzdHJpbmcsIG51bWJlcj4+O1xuICAgIHZpc2libGVSb3dzSW5kZXhNYXA6IFNpZ25hbDxNYXA8c3RyaW5nLCBudW1iZXI+Pjtcbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { FieldOptions } from '../core';
2
2
  import { AITableRowType } from '../types/row';
3
- export const buildGridLinearRows = (visibleRecords) => {
3
+ export const buildGridLinearRows = (visibleRecords, isAddingVisible = true) => {
4
4
  const linearRows = [];
5
5
  let displayRowIndex = 0;
6
6
  [...visibleRecords, { _id: '' }].forEach((row) => {
@@ -12,7 +12,7 @@ export const buildGridLinearRows = (visibleRecords) => {
12
12
  displayIndex: displayRowIndex
13
13
  });
14
14
  }
15
- if (!row._id) {
15
+ if (isAddingVisible && !row._id) {
16
16
  linearRows.push({
17
17
  type: AITableRowType.add,
18
18
  _id: ''
@@ -36,4 +36,4 @@ export const buildGridData = (recordValue, fieldsValue) => {
36
36
  records: recordValue
37
37
  };
38
38
  };
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9idWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsY0FBOEIsRUFBc0IsRUFBRTtJQUN0RixNQUFNLFVBQVUsR0FBdUIsRUFBRSxDQUFDO0lBQzFDLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDLEdBQUcsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDN0MsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVixlQUFlLEVBQUUsQ0FBQztZQUNsQixVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxjQUFjLENBQUMsTUFBTTtnQkFDM0IsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO2dCQUNaLFlBQVksRUFBRSxlQUFlO2FBQ2hDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1gsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDWixJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUc7Z0JBQ3hCLEdBQUcsRUFBRSxFQUFFO2FBQ1YsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsV0FBMkIsRUFBRSxXQUEwQixFQUFtQixFQUFFO0lBQ3RHLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNyQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUUsQ0FBQztRQUMzRSxPQUFPO1lBQ0gsR0FBRyxLQUFLO1lBQ1IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLElBQUk7WUFDcEMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUs7U0FDMUMsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTztRQUNILElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTTtRQUNOLE9BQU8sRUFBRSxXQUFXO0tBQ3ZCLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBSVRhYmxlRmllbGRzLCBBSVRhYmxlUmVjb3JkcywgRmllbGRPcHRpb25zIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZERhdGEsIEFJVGFibGVMaW5lYXJSb3cgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBBSVRhYmxlUm93VHlwZSB9IGZyb20gJy4uL3R5cGVzL3Jvdyc7XG5cbmV4cG9ydCBjb25zdCBidWlsZEdyaWRMaW5lYXJSb3dzID0gKHZpc2libGVSZWNvcmRzOiBBSVRhYmxlUmVjb3Jkcyk6IEFJVGFibGVMaW5lYXJSb3dbXSA9PiB7XG4gICAgY29uc3QgbGluZWFyUm93czogQUlUYWJsZUxpbmVhclJvd1tdID0gW107XG4gICAgbGV0IGRpc3BsYXlSb3dJbmRleCA9IDA7XG4gICAgWy4uLnZpc2libGVSZWNvcmRzLCB7IF9pZDogJycgfV0uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGlmIChyb3cuX2lkKSB7XG4gICAgICAgICAgICBkaXNwbGF5Um93SW5kZXgrKztcbiAgICAgICAgICAgIGxpbmVhclJvd3MucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogQUlUYWJsZVJvd1R5cGUucmVjb3JkLFxuICAgICAgICAgICAgICAgIF9pZDogcm93Ll9pZCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5SW5kZXg6IGRpc3BsYXlSb3dJbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyb3cuX2lkKSB7XG4gICAgICAgICAgICBsaW5lYXJSb3dzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IEFJVGFibGVSb3dUeXBlLmFkZCxcbiAgICAgICAgICAgICAgICBfaWQ6ICcnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBsaW5lYXJSb3dzO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkR3JpZERhdGEgPSAocmVjb3JkVmFsdWU6IEFJVGFibGVSZWNvcmRzLCBmaWVsZHNWYWx1ZTogQUlUYWJsZUZpZWxkcyk6IEFJVGFibGVHcmlkRGF0YSA9PiB7XG4gICAgY29uc3QgZmllbGRzID0gZmllbGRzVmFsdWUubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZE9wdGlvbiA9IEZpZWxkT3B0aW9ucy5maW5kKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IHZhbHVlLnR5cGUpITtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgaWNvbjogdmFsdWUuaWNvbiB8fCBmaWVsZE9wdGlvbi5pY29uLFxuICAgICAgICAgICAgd2lkdGg6IHZhbHVlLndpZHRoIHx8IGZpZWxkT3B0aW9uLndpZHRoXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2dyaWQnLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIHJlY29yZHM6IHJlY29yZFZhbHVlXG4gICAgfTtcbn07XG4iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9idWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsY0FBOEIsRUFBRSxrQkFBMkIsSUFBSSxFQUFzQixFQUFFO0lBQ3ZILE1BQU0sVUFBVSxHQUF1QixFQUFFLENBQUM7SUFDMUMsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsR0FBRyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUM3QyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNWLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ1osSUFBSSxFQUFFLGNBQWMsQ0FBQyxNQUFNO2dCQUMzQixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7Z0JBQ1osWUFBWSxFQUFFLGVBQWU7YUFDaEMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELElBQUksZUFBZSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ1osSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHO2dCQUN4QixHQUFHLEVBQUUsRUFBRTthQUNWLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFdBQTJCLEVBQUUsV0FBMEIsRUFBbUIsRUFBRTtJQUN0RyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDckMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFFLENBQUM7UUFDM0UsT0FBTztZQUNILEdBQUcsS0FBSztZQUNSLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJO1lBQ3BDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxLQUFLO1NBQzFDLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUNILE9BQU87UUFDSCxJQUFJLEVBQUUsTUFBTTtRQUNaLE1BQU07UUFDTixPQUFPLEVBQUUsV0FBVztLQUN2QixDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQUlUYWJsZUZpZWxkcywgQUlUYWJsZVJlY29yZHMsIEZpZWxkT3B0aW9ucyB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWREYXRhLCBBSVRhYmxlTGluZWFyUm93IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQUlUYWJsZVJvd1R5cGUgfSBmcm9tICcuLi90eXBlcy9yb3cnO1xuXG5leHBvcnQgY29uc3QgYnVpbGRHcmlkTGluZWFyUm93cyA9ICh2aXNpYmxlUmVjb3JkczogQUlUYWJsZVJlY29yZHMsIGlzQWRkaW5nVmlzaWJsZTogYm9vbGVhbiA9IHRydWUpOiBBSVRhYmxlTGluZWFyUm93W10gPT4ge1xuICAgIGNvbnN0IGxpbmVhclJvd3M6IEFJVGFibGVMaW5lYXJSb3dbXSA9IFtdO1xuICAgIGxldCBkaXNwbGF5Um93SW5kZXggPSAwO1xuICAgIFsuLi52aXNpYmxlUmVjb3JkcywgeyBfaWQ6ICcnIH1dLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBpZiAocm93Ll9pZCkge1xuICAgICAgICAgICAgZGlzcGxheVJvd0luZGV4Kys7XG4gICAgICAgICAgICBsaW5lYXJSb3dzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IEFJVGFibGVSb3dUeXBlLnJlY29yZCxcbiAgICAgICAgICAgICAgICBfaWQ6IHJvdy5faWQsXG4gICAgICAgICAgICAgICAgZGlzcGxheUluZGV4OiBkaXNwbGF5Um93SW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FkZGluZ1Zpc2libGUgJiYgIXJvdy5faWQpIHtcbiAgICAgICAgICAgIGxpbmVhclJvd3MucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogQUlUYWJsZVJvd1R5cGUuYWRkLFxuICAgICAgICAgICAgICAgIF9pZDogJydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxpbmVhclJvd3M7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRHcmlkRGF0YSA9IChyZWNvcmRWYWx1ZTogQUlUYWJsZVJlY29yZHMsIGZpZWxkc1ZhbHVlOiBBSVRhYmxlRmllbGRzKTogQUlUYWJsZUdyaWREYXRhID0+IHtcbiAgICBjb25zdCBmaWVsZHMgPSBmaWVsZHNWYWx1ZS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkT3B0aW9uID0gRmllbGRPcHRpb25zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gdmFsdWUudHlwZSkhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICBpY29uOiB2YWx1ZS5pY29uIHx8IGZpZWxkT3B0aW9uLmljb24sXG4gICAgICAgICAgICB3aWR0aDogdmFsdWUud2lkdGggfHwgZmllbGRPcHRpb24ud2lkdGhcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZ3JpZCcsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgcmVjb3JkczogcmVjb3JkVmFsdWVcbiAgICB9O1xufTtcbiJdfQ==
@@ -19,7 +19,7 @@ import { ThyButton } from 'ngx-tethys/button';
19
19
  import * as i2 from 'ngx-tethys/form';
20
20
  import { ThyFormSubmitDirective, ThyFormModule, ThyUniqueCheckValidator, ThyConfirmValidatorDirective } from 'ngx-tethys/form';
21
21
  import * as _ from 'lodash';
22
- import ___default from 'lodash';
22
+ import ___default, { isNil } from 'lodash';
23
23
  import { ThyNotifyService } from 'ngx-tethys/notify';
24
24
  import { ThyInputNumber } from 'ngx-tethys/input-number';
25
25
  import { ThySlider } from 'ngx-tethys/slider';
@@ -406,7 +406,7 @@ class Coordinate {
406
406
  offset = itemMetadata.offset + itemMetadata.size;
407
407
  }
408
408
  for (let i = lastMeasuredIndex + 1; i <= index; i++) {
409
- const size = isColumnType ? this.columnIndicesMap[i] : this.rowIndicesMap[i] ?? this.rowHeight;
409
+ const size = isColumnType ? this.columnIndicesMap[i] : (this.rowIndicesMap[i] ?? this.rowHeight);
410
410
  cellMetadataMap[i] = {
411
411
  offset,
412
412
  size
@@ -1603,7 +1603,7 @@ class FieldMenu extends ThyDropdownAbstractMenu {
1603
1603
  }
1604
1604
  }
1605
1605
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FieldMenu, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1606
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: FieldMenu, isStandalone: true, selector: "field-menu", inputs: { fieldId: "fieldId", aiTable: "aiTable", fieldMenus: "fieldMenus", origin: "origin", position: "position" }, usesInheritance: true, ngImport: i0, template: "@for (menu of fieldMenus; track index; let index = $index) {\n @if (menu.type === 'divider') {\n <thy-divider [thyStyle]=\"'solid'\"></thy-divider>\n } @else {\n @if ((menu.hidden && !menu.hidden(aiTable, field)) || !menu.hidden) {\n <a thyDropdownMenuItem href=\"javascript:;\" (click)=\"execute(menu)\">\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name! }}</span>\n </a>\n }\n }\n}\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1606
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: FieldMenu, isStandalone: true, selector: "field-menu", inputs: { fieldId: "fieldId", aiTable: "aiTable", fieldMenus: "fieldMenus", origin: "origin", position: "position" }, usesInheritance: true, ngImport: i0, template: "@for (menu of fieldMenus; track index; let index = $index) {\n @if ((menu.hidden && !menu.hidden(aiTable, field)) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider [thyStyle]=\"'solid'\"></thy-divider>\n } @else {\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"!!(menu.disabled && menu.disabled(aiTable, field))\"\n >\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name! }}</span>\n </a>\n }\n }\n}\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1607
1607
  }
1608
1608
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FieldMenu, decorators: [{
1609
1609
  type: Component,
@@ -1614,7 +1614,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1614
1614
  ThyDropdownMenuItemDirective,
1615
1615
  ThyDropdownMenuItemNameDirective,
1616
1616
  ThyDropdownMenuItemIconDirective
1617
- ], template: "@for (menu of fieldMenus; track index; let index = $index) {\n @if (menu.type === 'divider') {\n <thy-divider [thyStyle]=\"'solid'\"></thy-divider>\n } @else {\n @if ((menu.hidden && !menu.hidden(aiTable, field)) || !menu.hidden) {\n <a thyDropdownMenuItem href=\"javascript:;\" (click)=\"execute(menu)\">\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name! }}</span>\n </a>\n }\n }\n}\n" }]
1617
+ ], template: "@for (menu of fieldMenus; track index; let index = $index) {\n @if ((menu.hidden && !menu.hidden(aiTable, field)) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider [thyStyle]=\"'solid'\"></thy-divider>\n } @else {\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"!!(menu.disabled && menu.disabled(aiTable, field))\"\n >\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name! }}</span>\n </a>\n }\n }\n}\n" }]
1618
1618
  }], propDecorators: { fieldId: [{
1619
1619
  type: Input,
1620
1620
  args: [{ required: true }]
@@ -1630,7 +1630,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1630
1630
  type: Input
1631
1631
  }] } });
1632
1632
 
1633
- const buildGridLinearRows = (visibleRecords) => {
1633
+ const buildGridLinearRows = (visibleRecords, isAddingVisible = true) => {
1634
1634
  const linearRows = [];
1635
1635
  let displayRowIndex = 0;
1636
1636
  [...visibleRecords, { _id: '' }].forEach((row) => {
@@ -1642,7 +1642,7 @@ const buildGridLinearRows = (visibleRecords) => {
1642
1642
  displayIndex: displayRowIndex
1643
1643
  });
1644
1644
  }
1645
- if (!row._id) {
1645
+ if (isAddingVisible && !row._id) {
1646
1646
  linearRows.push({
1647
1647
  type: AITableRowType.add,
1648
1648
  _id: ''
@@ -1682,6 +1682,7 @@ class AITableGridFieldService {
1682
1682
  origin,
1683
1683
  originPosition: position,
1684
1684
  placement: 'bottomLeft',
1685
+ manualClosure: true,
1685
1686
  originActiveClass: undefined,
1686
1687
  initialState: {
1687
1688
  aiTable,
@@ -2506,6 +2507,9 @@ class AITableGridBase {
2506
2507
  this.aiAddRecord = output();
2507
2508
  this.aiAddField = output();
2508
2509
  this.aiUpdateFieldValue = output();
2510
+ this.fieldMenus = computed(() => {
2511
+ return this.aiFieldConfig()?.fieldMenus || [];
2512
+ });
2509
2513
  this.gridData = computed(() => {
2510
2514
  if (this.aiBuildRenderDataFn && this.aiBuildRenderDataFn() && this.aiTable) {
2511
2515
  return this.aiBuildRenderDataFn()(this.aiTable);
@@ -2525,7 +2529,6 @@ class AITableGridBase {
2525
2529
  ngOnInit() {
2526
2530
  this.initAITable();
2527
2531
  this.initService();
2528
- this.buildFieldMenus();
2529
2532
  }
2530
2533
  initAITable() {
2531
2534
  this.aiTable = createAITable(this.aiRecords, this.aiFields);
@@ -2541,9 +2544,6 @@ class AITableGridBase {
2541
2544
  this.aiTableGridFieldService.initAIFieldConfig(this.aiFieldConfig());
2542
2545
  AI_TABLE_GRID_FIELD_SERVICE_MAP.set(this.aiTable, this.aiTableGridFieldService);
2543
2546
  }
2544
- buildFieldMenus() {
2545
- this.fieldMenus = this.aiFieldConfig()?.fieldMenus || [];
2546
- }
2547
2547
  addRecord() {
2548
2548
  const records = this.gridData().records;
2549
2549
  const recordCount = records.length;
@@ -2644,7 +2644,7 @@ class AITableDomGrid extends AITableGridBase {
2644
2644
  origin: moreBtn,
2645
2645
  editOrigin: fieldAction,
2646
2646
  fieldId: field._id,
2647
- fieldMenus: this.fieldMenus
2647
+ fieldMenus: this.fieldMenus()
2648
2648
  });
2649
2649
  }
2650
2650
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AITableDomGrid, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
@@ -3195,13 +3195,13 @@ class AITableAddField {
3195
3195
  return lastColumnWidth + lastColumnOffset;
3196
3196
  });
3197
3197
  this.rectConfig = computed(() => {
3198
- const { targetName } = this.config().pointPosition;
3198
+ const { pointPosition: { targetName }, readonly } = this.config();
3199
3199
  const fill = targetName === AI_TABLE_FIELD_ADD_BUTTON ? Colors.gray80 : Colors.white;
3200
3200
  return {
3201
3201
  name: generateTargetName({
3202
3202
  targetName: AI_TABLE_FIELD_ADD_BUTTON,
3203
3203
  fieldId: this.config().fields[this.config().columnStopIndex]._id,
3204
- mouseStyle: 'pointer'
3204
+ mouseStyle: readonly ? 'default' : 'pointer'
3205
3205
  }),
3206
3206
  x: AI_TABLE_OFFSET,
3207
3207
  y: AI_TABLE_OFFSET,
@@ -3216,24 +3216,28 @@ class AITableAddField {
3216
3216
  };
3217
3217
  });
3218
3218
  this.addIconConfig = computed(() => {
3219
+ const { readonly } = this.config();
3219
3220
  const offsetY = (this.config().coordinate.rowInitSize - AI_TABLE_ICON_COMMON_SIZE) / 2;
3220
3221
  return {
3221
3222
  x: AI_TABLE_CELL_PADDING,
3222
3223
  y: offsetY,
3223
3224
  data: AddOutlinedPath,
3224
3225
  fill: Colors.gray600,
3225
- listening: false
3226
+ listening: false,
3227
+ visible: isNil(readonly) ? true : !readonly
3226
3228
  };
3227
3229
  });
3228
3230
  }
3229
3231
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AITableAddField, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3230
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: AITableAddField, isStandalone: true, selector: "ai-table-add-field", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
3232
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AITableAddField, isStandalone: true, selector: "ai-table-add-field", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
3231
3233
  <ko-group [config]="{ x: x() }">
3232
3234
  <ko-group>
3233
3235
  <ko-rect [config]="rectConfig()"></ko-rect>
3234
3236
  </ko-group>
3235
3237
  <ko-group>
3236
- <ai-table-icon [config]="addIconConfig()"></ai-table-icon>
3238
+ @if (addIconConfig().visible) {
3239
+ <ai-table-icon [config]="addIconConfig()"></ai-table-icon>
3240
+ }
3237
3241
  </ko-group>
3238
3242
  </ko-group>
3239
3243
  `, isInline: true, dependencies: [{ kind: "component", type: KoContainer, selector: "ko-layer, ko-fastlayer, ko-group" }, { kind: "component", type: KoShape, selector: "ko-shape, ko-circle, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: AITableIcon, selector: "ai-table-icon", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -3248,7 +3252,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
3248
3252
  <ko-rect [config]="rectConfig()"></ko-rect>
3249
3253
  </ko-group>
3250
3254
  <ko-group>
3251
- <ai-table-icon [config]="addIconConfig()"></ai-table-icon>
3255
+ @if (addIconConfig().visible) {
3256
+ <ai-table-icon [config]="addIconConfig()"></ai-table-icon>
3257
+ }
3252
3258
  </ko-group>
3253
3259
  </ko-group>
3254
3260
  `,
@@ -5936,6 +5942,9 @@ class AITableRenderer {
5936
5942
  this.fields = computed(() => {
5937
5943
  return AITable.getVisibleFields(this.config().aiTable);
5938
5944
  });
5945
+ this.readonly = computed(() => {
5946
+ return this.config()?.readonly;
5947
+ });
5939
5948
  this.coordinate = computed(() => {
5940
5949
  return this.config()?.coordinate;
5941
5950
  });
@@ -6024,7 +6033,7 @@ class AITableRenderer {
6024
6033
  });
6025
6034
  this.columnHeadOrAddFieldConfig = computed(() => {
6026
6035
  const { columnStartIndex, columnStopIndex } = this.visibleRangeInfo();
6027
- const { aiTable, coordinate } = this.config();
6036
+ const { aiTable, coordinate, readonly } = this.config();
6028
6037
  const { pointPosition } = aiTable.context;
6029
6038
  const fields = this.fields();
6030
6039
  return {
@@ -6033,7 +6042,8 @@ class AITableRenderer {
6033
6042
  fields,
6034
6043
  columnStartIndex,
6035
6044
  columnStopIndex,
6036
- pointPosition: pointPosition()
6045
+ pointPosition: pointPosition(),
6046
+ readonly
6037
6047
  };
6038
6048
  });
6039
6049
  this.cellsConfig = computed(() => {
@@ -6066,7 +6076,7 @@ class AITableRenderer {
6066
6076
  this.koDblclick.emit(e);
6067
6077
  }
6068
6078
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AITableRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6069
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AITableRenderer, isStandalone: true, selector: "ai-table-renderer", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { koMousemove: "koMousemove", koMousedown: "koMousedown", koWheel: "koWheel", koClick: "koClick", koDblclick: "koDblclick" }, ngImport: i0, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field\n [config]=\"columnHeadOrAddFieldConfig()\"\n ></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n", dependencies: [{ kind: "component", type: KoContainer, selector: "ko-layer, ko-fastlayer, ko-group" }, { kind: "component", type: KoStage, selector: "ko-stage", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: KoShape, selector: "ko-shape, ko-circle, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: AITableColumnHeads, selector: "ai-table-column-heads", inputs: ["config"] }, { kind: "component", type: AITableFrozenColumnHeads, selector: "ai-table-frozen-column-heads", inputs: ["config"] }, { kind: "component", type: AITableCells, selector: "ai-table-cells", inputs: ["config"] }, { kind: "component", type: AITableFrozenCells, selector: "ai-table-frozen-cells", inputs: ["config"] }, { kind: "component", type: AITableFrozenPlaceholderCells, selector: "ai-table-frozen-placeholder-cells", inputs: ["config"] }, { kind: "component", type: AITablePlaceholderCells, selector: "ai-table-placeholder-cells", inputs: ["config"] }, { kind: "component", type: AITableAddField, selector: "ai-table-add-field", inputs: ["config"] }, { kind: "component", type: AITableHoverRowHeads, selector: "ai-table-hover-row-heads", inputs: ["config"] }, { kind: "component", type: AITableOtherRows, selector: "ai-table-other-rows", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6079
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AITableRenderer, isStandalone: true, selector: "ai-table-renderer", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { koMousemove: "koMousemove", koMousedown: "koMousedown", koWheel: "koWheel", koClick: "koClick", koDblclick: "koDblclick" }, ngImport: i0, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n", dependencies: [{ kind: "component", type: KoContainer, selector: "ko-layer, ko-fastlayer, ko-group" }, { kind: "component", type: KoStage, selector: "ko-stage", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: KoShape, selector: "ko-shape, ko-circle, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: AITableColumnHeads, selector: "ai-table-column-heads", inputs: ["config"] }, { kind: "component", type: AITableFrozenColumnHeads, selector: "ai-table-frozen-column-heads", inputs: ["config"] }, { kind: "component", type: AITableCells, selector: "ai-table-cells", inputs: ["config"] }, { kind: "component", type: AITableFrozenCells, selector: "ai-table-frozen-cells", inputs: ["config"] }, { kind: "component", type: AITableFrozenPlaceholderCells, selector: "ai-table-frozen-placeholder-cells", inputs: ["config"] }, { kind: "component", type: AITablePlaceholderCells, selector: "ai-table-placeholder-cells", inputs: ["config"] }, { kind: "component", type: AITableAddField, selector: "ai-table-add-field", inputs: ["config"] }, { kind: "component", type: AITableHoverRowHeads, selector: "ai-table-hover-row-heads", inputs: ["config"] }, { kind: "component", type: AITableOtherRows, selector: "ai-table-other-rows", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6070
6080
  }
6071
6081
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AITableRenderer, decorators: [{
6072
6082
  type: Component,
@@ -6083,7 +6093,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
6083
6093
  AITableAddField,
6084
6094
  AITableHoverRowHeads,
6085
6095
  AITableOtherRows
6086
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field\n [config]=\"columnHeadOrAddFieldConfig()\"\n ></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n" }]
6096
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n" }]
6087
6097
  }] });
6088
6098
 
6089
6099
  class AITableGrid extends AITableGridBase {
@@ -6098,7 +6108,7 @@ class AITableGrid extends AITableGridBase {
6098
6108
  this.verticalBarRef = viewChild('verticalBar');
6099
6109
  this.horizontalBarRef = viewChild('horizontalBar');
6100
6110
  this.linearRows = computed(() => {
6101
- return buildGridLinearRows(this.gridData().records);
6111
+ return buildGridLinearRows(this.gridData().records, !this.aiReadonly());
6102
6112
  });
6103
6113
  this.visibleColumnsMap = computed(() => {
6104
6114
  const columns = AITable.getVisibleFields(this.aiTable);
@@ -6129,7 +6139,8 @@ class AITableGrid extends AITableGridBase {
6129
6139
  coordinate: coordinate,
6130
6140
  containerWidth: this.containerRect().width,
6131
6141
  containerHeight: this.containerRect().height,
6132
- references: this.aiReferences()
6142
+ references: this.aiReferences(),
6143
+ readonly: this.aiReadonly()
6133
6144
  };
6134
6145
  });
6135
6146
  this.coordinate = computed(() => {
@@ -6186,7 +6197,7 @@ class AITableGrid extends AITableGridBase {
6186
6197
  }
6187
6198
  });
6188
6199
  effect(() => {
6189
- if (this.aiTable.context?.pointPosition()) {
6200
+ if (!this.aiReadonly() && this.aiTable.context?.pointPosition()) {
6190
6201
  this.toggleHoverCellEditor();
6191
6202
  }
6192
6203
  });
@@ -6257,7 +6268,7 @@ class AITableGrid extends AITableGridBase {
6257
6268
  mouseEvent.preventDefault();
6258
6269
  const { context } = this.aiTable;
6259
6270
  const { targetName, rowIndex: pointRowIndex } = context.pointPosition();
6260
- if (mouseEvent.button !== AITableMouseDownType.Left)
6271
+ if (mouseEvent.button !== AITableMouseDownType.Left || (targetName !== AI_TABLE_FIELD_HEAD_MORE && this.aiReadonly()))
6261
6272
  return;
6262
6273
  switch (targetName) {
6263
6274
  case AI_TABLE_ROW_ADD_BUTTON: {
@@ -6304,7 +6315,7 @@ class AITableGrid extends AITableGridBase {
6304
6315
  const editOrigin = this.containerElement().querySelector('.konvajs-content');
6305
6316
  this.aiTableGridFieldService.openFieldMenu(this.aiTable, {
6306
6317
  fieldId: fieldId,
6307
- fieldMenus: this.fieldMenus,
6318
+ fieldMenus: this.fieldMenus(),
6308
6319
  origin: this.containerElement(),
6309
6320
  position,
6310
6321
  editOrigin: editOrigin,
@@ -6315,6 +6326,9 @@ class AITableGrid extends AITableGridBase {
6315
6326
  }
6316
6327
  }
6317
6328
  stageDblclick(e) {
6329
+ if (this.aiReadonly()) {
6330
+ return;
6331
+ }
6318
6332
  const _targetName = e.event.target.name();
6319
6333
  const { fieldId, recordId } = getDetailByTargetName(_targetName);
6320
6334
  if (!recordId || !fieldId) {