@univerjs/sheets-conditional-formatting-ui 1.0.0-beta.0 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/lib/cjs/index.js +274 -310
  2. package/lib/cjs/locale/ar-SA.js +2 -7
  3. package/lib/cjs/locale/ca-ES.js +2 -7
  4. package/lib/cjs/locale/de-DE.js +2 -7
  5. package/lib/cjs/locale/en-US.js +2 -7
  6. package/lib/cjs/locale/es-ES.js +2 -7
  7. package/lib/cjs/locale/fa-IR.js +2 -7
  8. package/lib/cjs/locale/fr-FR.js +2 -7
  9. package/lib/cjs/locale/id-ID.js +2 -7
  10. package/lib/cjs/locale/it-IT.js +2 -7
  11. package/lib/cjs/locale/ja-JP.js +2 -7
  12. package/lib/cjs/locale/ko-KR.js +2 -7
  13. package/lib/cjs/locale/pl-PL.js +2 -7
  14. package/lib/cjs/locale/pt-BR.js +2 -7
  15. package/lib/cjs/locale/ru-RU.js +2 -7
  16. package/lib/cjs/locale/sk-SK.js +2 -7
  17. package/lib/cjs/locale/vi-VN.js +2 -7
  18. package/lib/cjs/locale/zh-CN.js +2 -7
  19. package/lib/cjs/locale/zh-HK.js +2 -7
  20. package/lib/cjs/locale/zh-TW.js +2 -7
  21. package/lib/es/index.js +276 -312
  22. package/lib/es/locale/ar-SA.js +2 -7
  23. package/lib/es/locale/ca-ES.js +2 -7
  24. package/lib/es/locale/de-DE.js +2 -7
  25. package/lib/es/locale/en-US.js +2 -7
  26. package/lib/es/locale/es-ES.js +2 -7
  27. package/lib/es/locale/fa-IR.js +2 -7
  28. package/lib/es/locale/fr-FR.js +2 -7
  29. package/lib/es/locale/id-ID.js +2 -7
  30. package/lib/es/locale/it-IT.js +2 -7
  31. package/lib/es/locale/ja-JP.js +2 -7
  32. package/lib/es/locale/ko-KR.js +2 -7
  33. package/lib/es/locale/pl-PL.js +2 -7
  34. package/lib/es/locale/pt-BR.js +2 -7
  35. package/lib/es/locale/ru-RU.js +2 -7
  36. package/lib/es/locale/sk-SK.js +2 -7
  37. package/lib/es/locale/vi-VN.js +2 -7
  38. package/lib/es/locale/zh-CN.js +2 -7
  39. package/lib/es/locale/zh-HK.js +2 -7
  40. package/lib/es/locale/zh-TW.js +2 -7
  41. package/lib/index.css +40 -18
  42. package/lib/index.js +276 -312
  43. package/lib/locale/ar-SA.js +2 -7
  44. package/lib/locale/ca-ES.js +2 -7
  45. package/lib/locale/de-DE.js +2 -7
  46. package/lib/locale/en-US.js +2 -7
  47. package/lib/locale/es-ES.js +2 -7
  48. package/lib/locale/fa-IR.js +2 -7
  49. package/lib/locale/fr-FR.js +2 -7
  50. package/lib/locale/id-ID.js +2 -7
  51. package/lib/locale/it-IT.js +2 -7
  52. package/lib/locale/ja-JP.js +2 -7
  53. package/lib/locale/ko-KR.js +2 -7
  54. package/lib/locale/pl-PL.js +2 -7
  55. package/lib/locale/pt-BR.js +2 -7
  56. package/lib/locale/ru-RU.js +2 -7
  57. package/lib/locale/sk-SK.js +2 -7
  58. package/lib/locale/vi-VN.js +2 -7
  59. package/lib/locale/zh-CN.js +2 -7
  60. package/lib/locale/zh-HK.js +2 -7
  61. package/lib/locale/zh-TW.js +2 -7
  62. package/lib/types/controllers/cf.auto-fill.controller.d.ts +2 -3
  63. package/lib/types/controllers/cf.copy-paste.controller.d.ts +2 -3
  64. package/lib/types/controllers/cf.painter.controller.d.ts +2 -3
  65. package/lib/types/controllers/cf.render.controller.d.ts +7 -2
  66. package/lib/types/locale/en-US.d.ts +0 -5
  67. package/lib/umd/index.js +1 -1
  68. package/lib/umd/locale/ar-SA.js +1 -1
  69. package/lib/umd/locale/ca-ES.js +1 -1
  70. package/lib/umd/locale/de-DE.js +1 -1
  71. package/lib/umd/locale/en-US.js +1 -1
  72. package/lib/umd/locale/es-ES.js +1 -1
  73. package/lib/umd/locale/fa-IR.js +1 -1
  74. package/lib/umd/locale/fr-FR.js +1 -1
  75. package/lib/umd/locale/id-ID.js +1 -1
  76. package/lib/umd/locale/it-IT.js +1 -1
  77. package/lib/umd/locale/ja-JP.js +1 -1
  78. package/lib/umd/locale/ko-KR.js +1 -1
  79. package/lib/umd/locale/pl-PL.js +1 -1
  80. package/lib/umd/locale/pt-BR.js +1 -1
  81. package/lib/umd/locale/ru-RU.js +1 -1
  82. package/lib/umd/locale/sk-SK.js +1 -1
  83. package/lib/umd/locale/vi-VN.js +1 -1
  84. package/lib/umd/locale/zh-CN.js +1 -1
  85. package/lib/umd/locale/zh-HK.js +1 -1
  86. package/lib/umd/locale/zh-TW.js +1 -1
  87. package/package.json +12 -12
package/lib/cjs/index.js CHANGED
@@ -985,7 +985,7 @@ const menuSchema = {
985
985
  //#endregion
986
986
  //#region package.json
987
987
  var name = "@univerjs/sheets-conditional-formatting-ui";
988
- var version = "1.0.0-beta.0";
988
+ var version = "1.0.0-beta.1";
989
989
 
990
990
  //#endregion
991
991
  //#region src/config/config.ts
@@ -1182,12 +1182,11 @@ const specialPastes = [
1182
1182
  _univerjs_sheets_ui.PREDEFINED_HOOK_NAME_PASTE.SPECIAL_PASTE_BESIDES_BORDER
1183
1183
  ];
1184
1184
  let ConditionalFormattingCopyPasteController = class ConditionalFormattingCopyPasteController extends _univerjs_core.Disposable {
1185
- constructor(_sheetClipboardService, _conditionalFormattingRuleModel, _injector, _conditionalFormattingViewModel, _univerInstanceService, _conditionalFormattingRangeTransformService) {
1185
+ constructor(_sheetClipboardService, _conditionalFormattingRuleModel, _injector, _univerInstanceService, _conditionalFormattingRangeTransformService) {
1186
1186
  super();
1187
1187
  this._sheetClipboardService = _sheetClipboardService;
1188
1188
  this._conditionalFormattingRuleModel = _conditionalFormattingRuleModel;
1189
1189
  this._injector = _injector;
1190
- this._conditionalFormattingViewModel = _conditionalFormattingViewModel;
1191
1190
  this._univerInstanceService = _univerInstanceService;
1192
1191
  this._conditionalFormattingRangeTransformService = _conditionalFormattingRangeTransformService;
1193
1192
  _defineProperty(this, "_copyInfo", void 0);
@@ -1207,10 +1206,11 @@ let ConditionalFormattingCopyPasteController = class ConditionalFormattingCopyPa
1207
1206
  }));
1208
1207
  }
1209
1208
  _collectConditionalRule(unitId, subUnitId, range) {
1210
- const matrix = new _univerjs_core.ObjectMatrix();
1209
+ var _this$_conditionalFor;
1210
+ const rules = /* @__PURE__ */ new Map();
1211
1211
  const cfMap = {};
1212
1212
  this._copyInfo = {
1213
- matrix,
1213
+ rules,
1214
1214
  info: {
1215
1215
  unitId,
1216
1216
  subUnitId,
@@ -1221,22 +1221,28 @@ let ConditionalFormattingCopyPasteController = class ConditionalFormattingCopyPa
1221
1221
  return (0, _univerjs_sheets.rangeToDiscreteRange)(range, accessor, unitId, subUnitId);
1222
1222
  });
1223
1223
  if (!discreteRange) return;
1224
- const { rows, cols } = discreteRange;
1225
- const cfIdSet = /* @__PURE__ */ new Set();
1226
- rows.forEach((row, rowIndex) => {
1227
- cols.forEach((col, colIndex) => {
1228
- const cellCfList = this._conditionalFormattingViewModel.getCellCfs(unitId, subUnitId, row, col);
1229
- if (!cellCfList) return;
1230
- cellCfList.forEach((item) => cfIdSet.add(item.cfId));
1231
- matrix.setValue(rowIndex, colIndex, cellCfList.map((item) => item.cfId));
1224
+ const { projectRange } = (0, _univerjs_sheets_ui.virtualizeDiscreteRanges)([discreteRange]);
1225
+ (_this$_conditionalFor = this._conditionalFormattingRuleModel.getSubunitRules(unitId, subUnitId)) === null || _this$_conditionalFor === void 0 || _this$_conditionalFor.forEach((rule) => {
1226
+ const projectedRanges = rule.ranges.flatMap((ruleRange) => {
1227
+ const projected = projectRange(ruleRange);
1228
+ return projected ? [projected] : [];
1232
1229
  });
1233
- });
1234
- cfIdSet.forEach((cfId) => {
1235
- const rule = this._conditionalFormattingRuleModel.getRule(unitId, subUnitId, cfId);
1236
- if (rule) cfMap[cfId] = rule.rule;
1230
+ if (projectedRanges.length) {
1231
+ rules.set(rule.cfId, projectedRanges.length > 1 ? _univerjs_core.Rectangle.mergeRanges(projectedRanges) : projectedRanges);
1232
+ cfMap[rule.cfId] = {
1233
+ rule: rule.rule,
1234
+ stopIfTrue: rule.stopIfTrue
1235
+ };
1236
+ }
1237
1237
  });
1238
1238
  }
1239
1239
  _generateConditionalFormattingMutations(pasteFrom, pasteTo, payload) {
1240
+ var _this$_conditionalFor2;
1241
+ const copyInfo = this._copyInfo;
1242
+ if (!copyInfo) return {
1243
+ redos: [],
1244
+ undos: []
1245
+ };
1240
1246
  const { unitId: copyUnitId, subUnitId: copySubUnitId, range: copyRange } = pasteFrom;
1241
1247
  const { unitId: pastedUnitId, subUnitId: pastedSubUnitId, range: pastedRange } = pasteTo;
1242
1248
  const { copyType = _univerjs_sheets_ui.COPY_TYPE.COPY } = payload;
@@ -1254,109 +1260,86 @@ let ConditionalFormattingCopyPasteController = class ConditionalFormattingCopyPa
1254
1260
  undos: []
1255
1261
  };
1256
1262
  }
1257
- const { ranges: [vCopyRange, vPastedRange], mapFunc } = (0, _univerjs_sheets_ui.virtualizeDiscreteRanges)([copyRange, pastedRange]);
1258
- const repeatRange = (0, _univerjs_sheets_ui.getRepeatRange)(vCopyRange, vPastedRange, true);
1259
- const effectedConditionalFormattingRuleRanges = {};
1260
- _univerjs_core.Range.foreach(vPastedRange, (row, col) => {
1261
- const { row: realRow, col: realCol } = mapFunc(row, col);
1262
- const cellCfList = this._conditionalFormattingViewModel.getCellCfs(pastedUnitId, pastedSubUnitId, realRow, realCol);
1263
- if (cellCfList) cellCfList.forEach((item) => {
1264
- if (!effectedConditionalFormattingRuleRanges[item.cfId]) {
1265
- const rule = this._conditionalFormattingRuleModel.getRule(pastedUnitId, pastedSubUnitId, item.cfId);
1266
- if (!rule) return;
1267
- effectedConditionalFormattingRuleRanges[item.cfId] = {
1268
- unitId: pastedUnitId,
1269
- subUnitId: pastedSubUnitId,
1270
- ranges: rule.ranges,
1271
- add: [],
1272
- remove: []
1273
- };
1274
- }
1275
- effectedConditionalFormattingRuleRanges[item.cfId].remove.push({
1276
- startRow: realRow,
1277
- endRow: realRow,
1278
- startColumn: realCol,
1279
- endColumn: realCol
1280
- });
1263
+ const sourceVirtualization = (0, _univerjs_sheets_ui.virtualizeDiscreteRanges)([copyRange]);
1264
+ const sourceVirtualRange = sourceVirtualization.ranges[0];
1265
+ const targetVirtualization = (0, _univerjs_sheets_ui.virtualizeDiscreteRanges)([pastedRange]);
1266
+ const targetVirtualRange = targetVirtualization.ranges[0];
1267
+ const repeatRange = (0, _univerjs_sheets_ui.getRepeatRange)(sourceVirtualRange, targetVirtualRange, true);
1268
+ const targetRanges = targetVirtualization.mapRange(targetVirtualRange);
1269
+ const isSameSheet = pastedUnitId === copyUnitId && pastedSubUnitId === copySubUnitId;
1270
+ const effectedConditionalFormattingRuleRanges = /* @__PURE__ */ new Map();
1271
+ const getEffectKey = (unitId, subUnitId, cfId) => JSON.stringify([
1272
+ unitId,
1273
+ subUnitId,
1274
+ cfId
1275
+ ]);
1276
+ (_this$_conditionalFor2 = this._conditionalFormattingRuleModel.getSubunitRules(pastedUnitId, pastedSubUnitId)) === null || _this$_conditionalFor2 === void 0 || _this$_conditionalFor2.forEach((rule) => {
1277
+ if (!_univerjs_core.Rectangle.doAnyRangesIntersect(rule.ranges, targetRanges)) return;
1278
+ effectedConditionalFormattingRuleRanges.set(getEffectKey(pastedUnitId, pastedSubUnitId, rule.cfId), {
1279
+ cfId: rule.cfId,
1280
+ unitId: pastedUnitId,
1281
+ subUnitId: pastedSubUnitId,
1282
+ ranges: rule.ranges,
1283
+ add: [],
1284
+ remove: targetRanges
1281
1285
  });
1282
1286
  });
1283
- if (copyType === _univerjs_sheets_ui.COPY_TYPE.CUT && (pastedUnitId !== copyUnitId || pastedSubUnitId !== copySubUnitId)) _univerjs_core.Range.foreach(vCopyRange, (row, col) => {
1284
- const { row: realRow, col: realCol } = mapFunc(row, col);
1285
- const cellCfList = this._conditionalFormattingViewModel.getCellCfs(copyUnitId, copySubUnitId, realRow, realCol);
1286
- if (cellCfList) cellCfList.forEach((item) => {
1287
- if (!effectedConditionalFormattingRuleRanges[item.cfId]) {
1288
- const rule = this._conditionalFormattingRuleModel.getRule(copyUnitId, copySubUnitId, item.cfId);
1289
- if (!rule) return;
1290
- effectedConditionalFormattingRuleRanges[item.cfId] = {
1291
- unitId: copyUnitId,
1292
- subUnitId: copySubUnitId,
1293
- ranges: rule.ranges,
1294
- add: [],
1295
- remove: []
1296
- };
1297
- }
1298
- effectedConditionalFormattingRuleRanges[item.cfId].remove.push({
1299
- startRow: realRow,
1300
- endRow: realRow,
1301
- startColumn: realCol,
1302
- endColumn: realCol
1287
+ if (copyType === _univerjs_sheets_ui.COPY_TYPE.CUT && (pastedUnitId !== copyUnitId || pastedSubUnitId !== copySubUnitId)) {
1288
+ const sourceRanges = sourceVirtualization.mapRange(sourceVirtualRange);
1289
+ copyInfo.rules.forEach((_ranges, cfId) => {
1290
+ const rule = this._conditionalFormattingRuleModel.getRule(copyUnitId, copySubUnitId, cfId);
1291
+ if (!rule) return;
1292
+ effectedConditionalFormattingRuleRanges.set(getEffectKey(copyUnitId, copySubUnitId, cfId), {
1293
+ cfId,
1294
+ unitId: copyUnitId,
1295
+ subUnitId: copySubUnitId,
1296
+ ranges: rule.ranges,
1297
+ add: [],
1298
+ remove: sourceRanges
1303
1299
  });
1304
1300
  });
1305
- });
1306
- const { matrix, info } = this._copyInfo;
1307
- const waitAddRule = [];
1301
+ }
1302
+ const { rules, info } = copyInfo;
1303
+ const waitAddRule = /* @__PURE__ */ new Map();
1308
1304
  const cacheCfIdMap = {};
1309
1305
  const getCurrentSheetCfRule = (copyRangeCfId) => {
1310
1306
  const oldRule = info === null || info === void 0 ? void 0 : info.cfMap[copyRangeCfId];
1311
- const targetRule = [...this._conditionalFormattingRuleModel.getSubunitRules(pastedUnitId, pastedSubUnitId) || [], ...waitAddRule].find((rule) => {
1312
- return _univerjs_core.Tools.diffValue(rule.rule, oldRule);
1313
- });
1314
- if (targetRule) {
1315
- cacheCfIdMap[copyRangeCfId] = targetRule;
1316
- return targetRule;
1317
- } else {
1318
- const rule = {
1319
- rule: oldRule,
1320
- cfId: this._conditionalFormattingRuleModel.createCfId(pastedUnitId, pastedSubUnitId),
1321
- ranges: [],
1322
- stopIfTrue: false
1323
- };
1324
- cacheCfIdMap[copyRangeCfId] = rule;
1325
- waitAddRule.push(rule);
1326
- return rule;
1307
+ if (isSameSheet) {
1308
+ const rule = this._conditionalFormattingRuleModel.getRule(pastedUnitId, pastedSubUnitId, copyRangeCfId);
1309
+ if (rule) {
1310
+ cacheCfIdMap[copyRangeCfId] = rule;
1311
+ return rule;
1312
+ }
1327
1313
  }
1314
+ const rule = {
1315
+ rule: oldRule.rule,
1316
+ cfId: this._conditionalFormattingRuleModel.createCfId(pastedUnitId, pastedSubUnitId),
1317
+ ranges: [],
1318
+ stopIfTrue: oldRule.stopIfTrue
1319
+ };
1320
+ cacheCfIdMap[copyRangeCfId] = rule;
1321
+ waitAddRule.set(rule.cfId, rule);
1322
+ return rule;
1328
1323
  };
1329
- repeatRange.forEach((item) => {
1330
- matrix && matrix.forValue((row, col, copyRangeCfIdList) => {
1331
- const range = _univerjs_core.Rectangle.getPositionRange({
1332
- startRow: row,
1333
- endRow: row,
1334
- startColumn: col,
1335
- endColumn: col
1336
- }, item.startRange);
1337
- const { row: _row, col: _col } = mapFunc(range.startRow, range.startColumn);
1338
- copyRangeCfIdList.forEach((cfId) => {
1339
- const rule = cacheCfIdMap[cfId] || getCurrentSheetCfRule(cfId);
1340
- if (!effectedConditionalFormattingRuleRanges[rule.cfId]) effectedConditionalFormattingRuleRanges[rule.cfId] = {
1341
- unitId: pastedUnitId,
1342
- subUnitId: pastedSubUnitId,
1343
- ranges: rule.ranges,
1344
- add: [],
1345
- remove: []
1346
- };
1347
- effectedConditionalFormattingRuleRanges[rule.cfId].add.push({
1348
- startRow: _row,
1349
- endRow: _row,
1350
- startColumn: _col,
1351
- endColumn: _col
1352
- });
1353
- });
1324
+ const sourceRuleEntries = Array.from(rules.entries());
1325
+ if (!isSameSheet) sourceRuleEntries.reverse();
1326
+ sourceRuleEntries.forEach(([cfId, sourceRanges]) => {
1327
+ const rule = cacheCfIdMap[cfId] || getCurrentSheetCfRule(cfId);
1328
+ const effectKey = getEffectKey(pastedUnitId, pastedSubUnitId, rule.cfId);
1329
+ if (!effectedConditionalFormattingRuleRanges.has(effectKey)) effectedConditionalFormattingRuleRanges.set(effectKey, {
1330
+ cfId: rule.cfId,
1331
+ unitId: pastedUnitId,
1332
+ subUnitId: pastedSubUnitId,
1333
+ ranges: rule.ranges,
1334
+ add: [],
1335
+ remove: []
1354
1336
  });
1337
+ effectedConditionalFormattingRuleRanges.get(effectKey).add.push(...repeatRange.flatMap((item) => sourceRanges.flatMap((sourceRange) => targetVirtualization.mapRange(_univerjs_core.Rectangle.getPositionRange(sourceRange, item.startRange)))));
1355
1338
  });
1356
1339
  const redos = [];
1357
1340
  const undos = [];
1358
- for (const cfId in effectedConditionalFormattingRuleRanges) {
1359
- const { unitId, subUnitId, ranges: sourceRanges, add, remove } = effectedConditionalFormattingRuleRanges[cfId];
1341
+ for (const effect of effectedConditionalFormattingRuleRanges.values()) {
1342
+ const { cfId, unitId, subUnitId, ranges: sourceRanges, add, remove } = effect;
1360
1343
  const ranges = this._conditionalFormattingRangeTransformService.applyRangeDelta(sourceRanges, remove, add);
1361
1344
  if (!ranges.length) {
1362
1345
  const deleteParams = {
@@ -1369,13 +1352,15 @@ let ConditionalFormattingCopyPasteController = class ConditionalFormattingCopyPa
1369
1352
  params: deleteParams
1370
1353
  });
1371
1354
  undos.push(...(0, _univerjs_sheets_conditional_formatting.DeleteConditionalRuleMutationUndoFactory)(this._injector, deleteParams));
1355
+ continue;
1372
1356
  }
1373
- if (waitAddRule.some((rule) => rule.cfId === cfId)) {
1357
+ const waitAdd = waitAddRule.get(cfId);
1358
+ if (waitAdd) {
1374
1359
  const addParams = {
1375
1360
  unitId: pastedUnitId,
1376
1361
  subUnitId: pastedSubUnitId,
1377
1362
  rule: {
1378
- ...waitAddRule.find((rule) => rule.cfId === cfId),
1363
+ ...waitAdd,
1379
1364
  ranges
1380
1365
  }
1381
1366
  };
@@ -1412,9 +1397,8 @@ ConditionalFormattingCopyPasteController = __decorate([
1412
1397
  __decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_sheets_ui.ISheetClipboardService)),
1413
1398
  __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRuleModel)),
1414
1399
  __decorateParam(2, (0, _univerjs_core.Inject)(_univerjs_core.Injector)),
1415
- __decorateParam(3, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingViewModel)),
1416
- __decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_core.IUniverInstanceService)),
1417
- __decorateParam(5, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRangeTransformService))
1400
+ __decorateParam(3, (0, _univerjs_core.Inject)(_univerjs_core.IUniverInstanceService)),
1401
+ __decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRangeTransformService))
1418
1402
  ], ConditionalFormattingCopyPasteController);
1419
1403
 
1420
1404
  //#endregion
@@ -1500,7 +1484,7 @@ ConditionalFormattingPermissionController = __decorate([
1500
1484
  //#endregion
1501
1485
  //#region src/controllers/cf.render.controller.ts
1502
1486
  let SheetsCfRenderController = class SheetsCfRenderController extends _univerjs_core.Disposable {
1503
- constructor(_sheetInterceptorService, _conditionalFormattingService, _univerInstanceService, _renderManagerService, _conditionalFormattingViewModel, _conditionalFormattingRuleModel) {
1487
+ constructor(_sheetInterceptorService, _conditionalFormattingService, _univerInstanceService, _renderManagerService, _conditionalFormattingViewModel, _conditionalFormattingRuleModel, _conditionalFormattingRangeIndexModel) {
1504
1488
  super();
1505
1489
  this._sheetInterceptorService = _sheetInterceptorService;
1506
1490
  this._conditionalFormattingService = _conditionalFormattingService;
@@ -1508,14 +1492,69 @@ let SheetsCfRenderController = class SheetsCfRenderController extends _univerjs_
1508
1492
  this._renderManagerService = _renderManagerService;
1509
1493
  this._conditionalFormattingViewModel = _conditionalFormattingViewModel;
1510
1494
  this._conditionalFormattingRuleModel = _conditionalFormattingRuleModel;
1495
+ this._conditionalFormattingRangeIndexModel = _conditionalFormattingRangeIndexModel;
1511
1496
  _defineProperty(this, "_ruleChangeCacheMap", /* @__PURE__ */ new Map());
1497
+ _defineProperty(this, "_boundRenderExtensions", /* @__PURE__ */ new Map());
1512
1498
  this._initViewModelInterceptor();
1499
+ this._initRenderRangeResolvers();
1513
1500
  this._initSkeleton();
1514
1501
  queueMicrotask(() => this._markActiveSheetRulesDirty());
1515
1502
  this.disposeWithMe(() => {
1516
1503
  this._ruleChangeCacheMap.clear();
1504
+ this._boundRenderExtensions.forEach((extensions) => {
1505
+ extensions.forEach((extension) => extension.setRenderRangeResolver(null));
1506
+ });
1507
+ this._boundRenderExtensions.clear();
1517
1508
  });
1518
1509
  }
1510
+ _initRenderRangeResolvers() {
1511
+ const dataBarResolver = this._createRenderRangeResolver(_univerjs_sheets_conditional_formatting.CFRuleType.dataBar);
1512
+ const iconResolver = this._createRenderRangeResolver(_univerjs_sheets_conditional_formatting.CFRuleType.iconSet);
1513
+ const bind = (unitId) => {
1514
+ var _this$_renderManagerS;
1515
+ this._unbindRenderRangeResolvers(unitId);
1516
+ const mainComponent = (_this$_renderManagerS = this._renderManagerService.getRenderUnitById(unitId)) === null || _this$_renderManagerS === void 0 ? void 0 : _this$_renderManagerS.mainComponent;
1517
+ if (!mainComponent || !("getExtensionByKey" in mainComponent)) return;
1518
+ const extensions = /* @__PURE__ */ new Set();
1519
+ const dataBar = mainComponent.getExtensionByKey(_univerjs_sheets_conditional_formatting.dataBarUKey);
1520
+ if (dataBar instanceof _univerjs_sheets_conditional_formatting.DataBar) {
1521
+ dataBar.setRenderRangeResolver(dataBarResolver);
1522
+ extensions.add(dataBar);
1523
+ }
1524
+ const icon = mainComponent.getExtensionByKey(_univerjs_sheets_conditional_formatting.IconUKey);
1525
+ if (icon instanceof _univerjs_sheets_conditional_formatting.ConditionalFormattingIcon) {
1526
+ icon.setRenderRangeResolver(iconResolver);
1527
+ extensions.add(icon);
1528
+ }
1529
+ if (extensions.size) this._boundRenderExtensions.set(unitId, extensions);
1530
+ };
1531
+ this._renderManagerService.getAllRenderersOfType(_univerjs_core.UniverInstanceType.UNIVER_SHEET).forEach((render) => bind(render.unitId));
1532
+ this.disposeWithMe(this._renderManagerService.created$.subscribe((render) => {
1533
+ if (render.type === _univerjs_core.UniverInstanceType.UNIVER_SHEET) bind(render.unitId);
1534
+ }));
1535
+ this.disposeWithMe(this._renderManagerService.disposed$.subscribe((unitId) => this._unbindRenderRangeResolvers(unitId)));
1536
+ }
1537
+ _createRenderRangeResolver(ruleType) {
1538
+ return (unitId, subUnitId, ranges) => {
1539
+ const intersections = [];
1540
+ const indexedRules = this._conditionalFormattingRangeIndexModel.getRulesByRanges(unitId, subUnitId, ranges).filter((rule) => rule.rule.type === ruleType);
1541
+ const matchingRules = indexedRules.length ? indexedRules : (this._conditionalFormattingRuleModel.getSubunitRules(unitId, subUnitId) ?? []).filter((rule) => rule.rule.type === ruleType);
1542
+ ranges.forEach((range) => {
1543
+ matchingRules.forEach((rule) => {
1544
+ rule.ranges.forEach((ruleRange) => {
1545
+ const intersection = (0, _univerjs_core.getIntersectRange)(range, ruleRange);
1546
+ if (intersection) intersections.push(intersection);
1547
+ });
1548
+ });
1549
+ });
1550
+ return intersections.length > 1 ? _univerjs_core.Rectangle.mergeRanges(intersections) : intersections;
1551
+ };
1552
+ }
1553
+ _unbindRenderRangeResolvers(unitId) {
1554
+ const extensions = this._boundRenderExtensions.get(unitId);
1555
+ extensions === null || extensions === void 0 || extensions.forEach((extension) => extension.setRenderRangeResolver(null));
1556
+ this._boundRenderExtensions.delete(unitId);
1557
+ }
1519
1558
  _collectDirtyRanges(items, unitId, subUnitId) {
1520
1559
  const ranges = [];
1521
1560
  items.forEach((item) => {
@@ -1610,7 +1649,8 @@ SheetsCfRenderController = __decorate([
1610
1649
  __decorateParam(2, (0, _univerjs_core.Inject)(_univerjs_core.IUniverInstanceService)),
1611
1650
  __decorateParam(3, (0, _univerjs_core.Inject)(_univerjs_engine_render.IRenderManagerService)),
1612
1651
  __decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingViewModel)),
1613
- __decorateParam(5, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRuleModel))
1652
+ __decorateParam(5, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRuleModel)),
1653
+ __decorateParam(6, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRangeIndexModel))
1614
1654
  ], SheetsCfRenderController);
1615
1655
 
1616
1656
  //#endregion
@@ -1664,13 +1704,12 @@ UniverSheetsConditionalFormattingMobileUIPlugin = __decorate([
1664
1704
  //#endregion
1665
1705
  //#region src/controllers/cf.auto-fill.controller.ts
1666
1706
  let ConditionalFormattingAutoFillController = class ConditionalFormattingAutoFillController extends _univerjs_core.Disposable {
1667
- constructor(_injector, _univerInstanceService, _autoFillService, _conditionalFormattingRuleModel, _conditionalFormattingViewModel, _conditionalFormattingRangeTransformService) {
1707
+ constructor(_injector, _univerInstanceService, _autoFillService, _conditionalFormattingRuleModel, _conditionalFormattingRangeTransformService) {
1668
1708
  super();
1669
1709
  this._injector = _injector;
1670
1710
  this._univerInstanceService = _univerInstanceService;
1671
1711
  this._autoFillService = _autoFillService;
1672
1712
  this._conditionalFormattingRuleModel = _conditionalFormattingRuleModel;
1673
- this._conditionalFormattingViewModel = _conditionalFormattingViewModel;
1674
1713
  this._conditionalFormattingRangeTransformService = _conditionalFormattingRangeTransformService;
1675
1714
  this._initAutoFill();
1676
1715
  }
@@ -1679,11 +1718,24 @@ let ConditionalFormattingAutoFillController = class ConditionalFormattingAutoFil
1679
1718
  redos: [],
1680
1719
  undos: []
1681
1720
  });
1682
- const loopFunc = (sourceStartCell, targetStartCell, relativeRange, rangeMap, rangeDeltaMap, mapFunc) => {
1683
- var _getActiveSheet;
1684
- const unitId = this._univerInstanceService.getCurrentUnitOfType(_univerjs_core.UniverInstanceType.UNIVER_SHEET).getUnitId();
1685
- const subUnitId = (_getActiveSheet = this._univerInstanceService.getCurrentUnitOfType(_univerjs_core.UniverInstanceType.UNIVER_SHEET).getActiveSheet()) === null || _getActiveSheet === void 0 ? void 0 : _getActiveSheet.getSheetId();
1686
- if (!unitId || !subUnitId) return;
1721
+ const generalApplyFunc = (sourceRange, targetRange) => {
1722
+ var _this$_univerInstance, _this$_univerInstance2;
1723
+ const unitId = (_this$_univerInstance = this._univerInstanceService.getCurrentUnitOfType(_univerjs_core.UniverInstanceType.UNIVER_SHEET)) === null || _this$_univerInstance === void 0 ? void 0 : _this$_univerInstance.getUnitId();
1724
+ const subUnitId = (_this$_univerInstance2 = this._univerInstanceService.getCurrentUnitOfType(_univerjs_core.UniverInstanceType.UNIVER_SHEET)) === null || _this$_univerInstance2 === void 0 || (_this$_univerInstance2 = _this$_univerInstance2.getActiveSheet()) === null || _this$_univerInstance2 === void 0 ? void 0 : _this$_univerInstance2.getSheetId();
1725
+ const rangeMap = /* @__PURE__ */ new Map();
1726
+ const rangeDeltaMap = /* @__PURE__ */ new Map();
1727
+ const redos = [];
1728
+ const undos = [];
1729
+ if (!unitId || !subUnitId) return noopReturnFunc();
1730
+ const virtualization = (0, _univerjs_sheets_ui.virtualizeDiscreteRanges)([sourceRange, targetRange]);
1731
+ const [vSourceRange, vTargetRange] = virtualization.ranges;
1732
+ const repeats = _univerjs_sheets.AutoFillTools.getAutoFillRepeatRange(vSourceRange, vTargetRange);
1733
+ const targetRanges = repeats.flatMap((repeat) => virtualization.mapRange(_univerjs_core.Rectangle.getPositionRange(repeat.relativeRange, {
1734
+ startRow: repeat.repeatStartCell.row,
1735
+ endRow: repeat.repeatStartCell.row,
1736
+ startColumn: repeat.repeatStartCell.col,
1737
+ endColumn: repeat.repeatStartCell.col
1738
+ })));
1687
1739
  const getRangeDelta = (cfId) => {
1688
1740
  let rangeDelta = rangeDeltaMap.get(cfId);
1689
1741
  if (!rangeDelta) {
@@ -1695,80 +1747,29 @@ let ConditionalFormattingAutoFillController = class ConditionalFormattingAutoFil
1695
1747
  }
1696
1748
  return rangeDelta;
1697
1749
  };
1698
- const ensureRuleRanges = (cfId) => {
1699
- if (rangeMap.has(cfId)) return true;
1700
- const rule = this._conditionalFormattingRuleModel.getRule(unitId, subUnitId, cfId);
1701
- if (!rule) return false;
1702
- rangeMap.set(cfId, rule.ranges);
1703
- return true;
1704
- };
1705
- const sourceRange = {
1706
- startRow: sourceStartCell.row,
1707
- startColumn: sourceStartCell.col,
1708
- endColumn: sourceStartCell.col,
1709
- endRow: sourceStartCell.row
1710
- };
1711
- const targetRange = {
1712
- startRow: targetStartCell.row,
1713
- startColumn: targetStartCell.col,
1714
- endColumn: targetStartCell.col,
1715
- endRow: targetStartCell.row
1716
- };
1717
- _univerjs_core.Range.foreach(relativeRange, (row, col) => {
1718
- const sourcePositionRange = _univerjs_core.Rectangle.getPositionRange({
1719
- startRow: row,
1720
- startColumn: col,
1721
- endColumn: col,
1722
- endRow: row
1723
- }, sourceRange);
1724
- const targetPositionRange = _univerjs_core.Rectangle.getPositionRange({
1725
- startRow: row,
1726
- startColumn: col,
1727
- endColumn: col,
1728
- endRow: row
1729
- }, targetRange);
1730
- const { row: sourceRow, col: sourceCol } = mapFunc(sourcePositionRange.startRow, sourcePositionRange.startColumn);
1731
- const sourceCellCf = this._conditionalFormattingViewModel.getCellCfs(unitId, subUnitId, sourceRow, sourceCol);
1732
- const { row: targetRow, col: targetCol } = mapFunc(targetPositionRange.startRow, targetPositionRange.startColumn);
1733
- const targetCellCf = this._conditionalFormattingViewModel.getCellCfs(unitId, subUnitId, targetRow, targetCol);
1734
- if (targetCellCf) targetCellCf.forEach((cf) => {
1735
- if (!ensureRuleRanges(cf.cfId)) return;
1736
- getRangeDelta(cf.cfId).remove.push({
1737
- startRow: targetRow,
1738
- endRow: targetRow,
1739
- startColumn: targetCol,
1740
- endColumn: targetCol
1741
- });
1742
- });
1743
- if (sourceCellCf) sourceCellCf.forEach((cf) => {
1744
- if (!ensureRuleRanges(cf.cfId)) return;
1745
- getRangeDelta(cf.cfId).add.push({
1746
- startRow: targetRow,
1747
- endRow: targetRow,
1748
- startColumn: targetCol,
1749
- endColumn: targetCol
1750
- });
1750
+ (this._conditionalFormattingRuleModel.getSubunitRules(unitId, subUnitId) ?? []).forEach((rule) => {
1751
+ if (_univerjs_core.Rectangle.doAnyRangesIntersect(rule.ranges, targetRanges)) {
1752
+ rangeMap.set(rule.cfId, rule.ranges);
1753
+ getRangeDelta(rule.cfId).remove.push(...targetRanges);
1754
+ }
1755
+ const sourceRanges = rule.ranges.flatMap((range) => {
1756
+ const projected = virtualization.projectRange(range);
1757
+ const intersected = projected && (0, _univerjs_core.getIntersectRange)(projected, vSourceRange);
1758
+ return intersected ? [_univerjs_core.Rectangle.getRelativeRange(intersected, vSourceRange)] : [];
1751
1759
  });
1752
- });
1753
- };
1754
- const generalApplyFunc = (sourceRange, targetRange) => {
1755
- var _this$_univerInstance, _this$_univerInstance2;
1756
- const unitId = (_this$_univerInstance = this._univerInstanceService.getCurrentUnitOfType(_univerjs_core.UniverInstanceType.UNIVER_SHEET)) === null || _this$_univerInstance === void 0 ? void 0 : _this$_univerInstance.getUnitId();
1757
- const subUnitId = (_this$_univerInstance2 = this._univerInstanceService.getCurrentUnitOfType(_univerjs_core.UniverInstanceType.UNIVER_SHEET)) === null || _this$_univerInstance2 === void 0 || (_this$_univerInstance2 = _this$_univerInstance2.getActiveSheet()) === null || _this$_univerInstance2 === void 0 ? void 0 : _this$_univerInstance2.getSheetId();
1758
- const rangeMap = /* @__PURE__ */ new Map();
1759
- const rangeDeltaMap = /* @__PURE__ */ new Map();
1760
- const redos = [];
1761
- const undos = [];
1762
- if (!unitId || !subUnitId) return noopReturnFunc();
1763
- const virtualRange = (0, _univerjs_sheets_ui.virtualizeDiscreteRanges)([sourceRange, targetRange]);
1764
- const [vSourceRange, vTargetRange] = virtualRange.ranges;
1765
- const { mapFunc } = virtualRange;
1766
- const sourceStartCell = {
1767
- row: vSourceRange.startRow,
1768
- col: vSourceRange.startColumn
1769
- };
1770
- _univerjs_sheets.AutoFillTools.getAutoFillRepeatRange(vSourceRange, vTargetRange).forEach((repeat) => {
1771
- loopFunc(sourceStartCell, repeat.repeatStartCell, repeat.relativeRange, rangeMap, rangeDeltaMap, mapFunc);
1760
+ const additions = repeats.flatMap((repeat) => sourceRanges.flatMap((range) => {
1761
+ const copiedRange = (0, _univerjs_core.getIntersectRange)(range, repeat.relativeRange);
1762
+ return copiedRange ? virtualization.mapRange(_univerjs_core.Rectangle.getPositionRange(copiedRange, {
1763
+ startRow: repeat.repeatStartCell.row,
1764
+ endRow: repeat.repeatStartCell.row,
1765
+ startColumn: repeat.repeatStartCell.col,
1766
+ endColumn: repeat.repeatStartCell.col
1767
+ })) : [];
1768
+ }));
1769
+ if (additions.length) {
1770
+ rangeMap.set(rule.cfId, rule.ranges);
1771
+ getRangeDelta(rule.cfId).add.push(...additions);
1772
+ }
1772
1773
  });
1773
1774
  rangeDeltaMap.forEach((rangeDelta, cfId) => {
1774
1775
  const ranges = rangeMap.get(cfId);
@@ -1828,8 +1829,7 @@ ConditionalFormattingAutoFillController = __decorate([
1828
1829
  __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_core.IUniverInstanceService)),
1829
1830
  __decorateParam(2, (0, _univerjs_core.Inject)(_univerjs_sheets.IAutoFillService)),
1830
1831
  __decorateParam(3, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRuleModel)),
1831
- __decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingViewModel)),
1832
- __decorateParam(5, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRangeTransformService))
1832
+ __decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRangeTransformService))
1833
1833
  ], ConditionalFormattingAutoFillController);
1834
1834
 
1835
1835
  //#endregion
@@ -1946,14 +1946,13 @@ const repeatByRange = (sourceRange, targetRange) => {
1946
1946
  return repeatList;
1947
1947
  };
1948
1948
  let ConditionalFormattingPainterController = class ConditionalFormattingPainterController extends _univerjs_core.Disposable {
1949
- constructor(_injector, _univerInstanceService, _formatPainterService, _sheetsSelectionsService, _conditionalFormattingRuleModel, _conditionalFormattingViewModel, _conditionalFormattingRangeTransformService) {
1949
+ constructor(_injector, _univerInstanceService, _formatPainterService, _sheetsSelectionsService, _conditionalFormattingRuleModel, _conditionalFormattingRangeTransformService) {
1950
1950
  super();
1951
1951
  this._injector = _injector;
1952
1952
  this._univerInstanceService = _univerInstanceService;
1953
1953
  this._formatPainterService = _formatPainterService;
1954
1954
  this._sheetsSelectionsService = _sheetsSelectionsService;
1955
1955
  this._conditionalFormattingRuleModel = _conditionalFormattingRuleModel;
1956
- this._conditionalFormattingViewModel = _conditionalFormattingViewModel;
1957
1956
  this._conditionalFormattingRangeTransformService = _conditionalFormattingRangeTransformService;
1958
1957
  _defineProperty(this, "_painterConfig", null);
1959
1958
  this._initFormattingPainter();
@@ -1963,9 +1962,16 @@ let ConditionalFormattingPainterController = class ConditionalFormattingPainterC
1963
1962
  redos: [],
1964
1963
  undos: []
1965
1964
  });
1966
- const loopFunc = (sourceStartCell, targetStartCell, relativeRange, rangeMap, rangeDeltaMap, config) => {
1967
- const { unitId: sourceUnitId, subUnitId: sourceSubUnitId } = this._painterConfig;
1968
- const { targetUnitId, targetSubUnitId } = config;
1965
+ const generalApplyFunc = (targetUnitId, targetSubUnitId, targetRange) => {
1966
+ const { range: sourceRange, unitId: sourceUnitId, subUnitId: sourceSubUnitId } = this._painterConfig;
1967
+ const isSkipSheet = targetUnitId !== sourceUnitId || sourceSubUnitId !== targetSubUnitId;
1968
+ const rangeMap = /* @__PURE__ */ new Map();
1969
+ const rangeDeltaMap = /* @__PURE__ */ new Map();
1970
+ const redos = [];
1971
+ const undos = [];
1972
+ if (!targetUnitId || !targetSubUnitId || !sourceUnitId || !sourceSubUnitId) return noopReturnFunc();
1973
+ const repeats = repeatByRange(sourceRange, targetRange);
1974
+ const targetRanges = repeats.map((repeat) => _univerjs_core.Rectangle.getPositionRange(repeat.repeatRelativeRange, repeat.startRange));
1969
1975
  const getRangeDelta = (cfId) => {
1970
1976
  let rangeDelta = rangeDeltaMap.get(cfId);
1971
1977
  if (!rangeDelta) {
@@ -1977,82 +1983,38 @@ let ConditionalFormattingPainterController = class ConditionalFormattingPainterC
1977
1983
  }
1978
1984
  return rangeDelta;
1979
1985
  };
1980
- const sourceRange = {
1981
- startRow: sourceStartCell.row,
1982
- startColumn: sourceStartCell.col,
1983
- endColumn: sourceStartCell.col,
1984
- endRow: sourceStartCell.row
1985
- };
1986
- const targetRange = {
1987
- startRow: targetStartCell.row,
1988
- startColumn: targetStartCell.col,
1989
- endColumn: targetStartCell.col,
1990
- endRow: targetStartCell.row
1991
- };
1992
- _univerjs_core.Range.foreach(relativeRange, (row, col) => {
1993
- const sourcePositionRange = _univerjs_core.Rectangle.getPositionRange({
1994
- startRow: row,
1995
- startColumn: col,
1996
- endColumn: col,
1997
- endRow: row
1998
- }, sourceRange);
1999
- const targetPositionRange = _univerjs_core.Rectangle.getPositionRange({
2000
- startRow: row,
2001
- startColumn: col,
2002
- endColumn: col,
2003
- endRow: row
2004
- }, targetRange);
2005
- const sourceCellCf = this._conditionalFormattingViewModel.getCellCfs(sourceUnitId, sourceSubUnitId, sourcePositionRange.startRow, sourcePositionRange.startColumn);
2006
- const targetCellCf = this._conditionalFormattingViewModel.getCellCfs(targetUnitId, targetSubUnitId, targetPositionRange.startRow, targetPositionRange.startColumn);
2007
- if (targetCellCf) targetCellCf.forEach((cf) => {
2008
- if (!rangeMap.has(cf.cfId)) {
2009
- const rule = this._conditionalFormattingRuleModel.getRule(targetUnitId, targetSubUnitId, cf.cfId);
2010
- if (!rule) return;
2011
- rangeMap.set(cf.cfId, rule.ranges);
2012
- }
2013
- getRangeDelta(cf.cfId).remove.push({
2014
- startRow: targetPositionRange.startRow,
2015
- endRow: targetPositionRange.startRow,
2016
- startColumn: targetPositionRange.startColumn,
2017
- endColumn: targetPositionRange.startColumn
2018
- });
2019
- });
2020
- if (sourceCellCf) sourceCellCf.forEach((cf) => {
2021
- if (!rangeMap.has(cf.cfId)) return;
2022
- getRangeDelta(cf.cfId).add.push({
2023
- startRow: targetPositionRange.startRow,
2024
- endRow: targetPositionRange.startRow,
2025
- startColumn: targetPositionRange.startColumn,
2026
- endColumn: targetPositionRange.startColumn
2027
- });
2028
- });
2029
- });
2030
- };
2031
- const generalApplyFunc = (targetUnitId, targetSubUnitId, targetRange) => {
2032
- const { range: sourceRange, unitId: sourceUnitId, subUnitId: sourceSubUnitId } = this._painterConfig;
2033
- const isSkipSheet = targetUnitId !== sourceUnitId || sourceSubUnitId !== targetSubUnitId;
2034
- const rangeMap = /* @__PURE__ */ new Map();
2035
- const rangeDeltaMap = /* @__PURE__ */ new Map();
2036
- const redos = [];
2037
- const undos = [];
2038
- if (!targetUnitId || !targetSubUnitId || !sourceUnitId || !sourceSubUnitId) return noopReturnFunc();
2039
- const ruleList = this._conditionalFormattingRuleModel.getSubunitRules(sourceUnitId, sourceSubUnitId) ?? [];
2040
- ruleList === null || ruleList === void 0 || ruleList.forEach((rule) => {
2041
- const { ranges, cfId } = rule;
2042
- if (ranges.some((range) => _univerjs_core.Rectangle.intersects(sourceRange, range))) rangeMap.set(cfId, isSkipSheet ? [] : ranges);
1986
+ const targetRuleList = this._conditionalFormattingRuleModel.getSubunitRules(targetUnitId, targetSubUnitId) ?? [];
1987
+ const waitAddRule = /* @__PURE__ */ new Map();
1988
+ targetRuleList.forEach((rule) => {
1989
+ if (_univerjs_core.Rectangle.doAnyRangesIntersect(rule.ranges, targetRanges)) {
1990
+ rangeMap.set(rule.cfId, rule.ranges);
1991
+ getRangeDelta(rule.cfId).remove.push(...targetRanges);
1992
+ }
2043
1993
  });
2044
- const sourceStartCell = {
2045
- row: sourceRange.startRow,
2046
- col: sourceRange.startColumn
2047
- };
2048
- repeatByRange(sourceRange, targetRange).forEach((repeat) => {
2049
- loopFunc(sourceStartCell, {
2050
- row: repeat.startRange.startRow,
2051
- col: repeat.startRange.startColumn
2052
- }, repeat.repeatRelativeRange, rangeMap, rangeDeltaMap, {
2053
- targetUnitId,
2054
- targetSubUnitId
1994
+ const sourceRuleList = this._conditionalFormattingRuleModel.getSubunitRules(sourceUnitId, sourceSubUnitId) ?? [];
1995
+ (isSkipSheet ? [...sourceRuleList].reverse() : sourceRuleList).forEach((rule) => {
1996
+ const sourceRanges = rule.ranges.flatMap((range) => {
1997
+ const intersected = (0, _univerjs_core.getIntersectRange)(range, sourceRange);
1998
+ return intersected ? [_univerjs_core.Rectangle.getRelativeRange(intersected, sourceRange)] : [];
2055
1999
  });
2000
+ const additions = repeats.flatMap((repeat) => sourceRanges.flatMap((range) => {
2001
+ const copiedRange = (0, _univerjs_core.getIntersectRange)(range, repeat.repeatRelativeRange);
2002
+ return copiedRange ? [_univerjs_core.Rectangle.getPositionRange(copiedRange, repeat.startRange)] : [];
2003
+ }));
2004
+ if (additions.length) {
2005
+ let targetCfId = rule.cfId;
2006
+ if (isSkipSheet) {
2007
+ targetCfId = this._conditionalFormattingRuleModel.createCfId(targetUnitId, targetSubUnitId);
2008
+ waitAddRule.set(targetCfId, {
2009
+ ..._univerjs_core.Tools.deepClone(rule),
2010
+ cfId: targetCfId,
2011
+ ranges: []
2012
+ });
2013
+ rangeMap.set(targetCfId, []);
2014
+ }
2015
+ if (!rangeMap.has(targetCfId)) rangeMap.set(targetCfId, rule.ranges);
2016
+ getRangeDelta(targetCfId).add.push(...additions);
2017
+ }
2056
2018
  });
2057
2019
  rangeDeltaMap.forEach((rangeDelta, cfId) => {
2058
2020
  const ranges = rangeMap.get(cfId);
@@ -2090,28 +2052,27 @@ let ConditionalFormattingPainterController = class ConditionalFormattingPainterC
2090
2052
  undos.push(...(0, _univerjs_sheets_conditional_formatting.DeleteConditionalRuleMutationUndoFactory)(this._injector, params));
2091
2053
  }
2092
2054
  } else {
2093
- const rule = this._conditionalFormattingRuleModel.getRule(targetUnitId, targetSubUnitId, cfId);
2094
- if (!rule) {
2055
+ const waitAdd = waitAddRule.get(cfId);
2056
+ if (waitAdd) {
2095
2057
  if (ranges.length) {
2096
- const sourceRule = this._conditionalFormattingRuleModel.getRule(sourceUnitId, sourceSubUnitId, cfId);
2097
- if (sourceRule) {
2098
- const params = {
2099
- unitId: targetUnitId,
2100
- subUnitId: targetSubUnitId,
2101
- rule: {
2102
- ..._univerjs_core.Tools.deepClone(sourceRule),
2103
- cfId: this._conditionalFormattingRuleModel.createCfId(targetUnitId, targetSubUnitId),
2104
- ranges
2105
- }
2106
- };
2107
- redos.push({
2108
- id: _univerjs_sheets_conditional_formatting.AddConditionalRuleMutation.id,
2109
- params
2110
- });
2111
- undos.push((0, _univerjs_sheets_conditional_formatting.AddConditionalRuleMutationUndoFactory)(this._injector, params));
2112
- }
2058
+ const params = {
2059
+ unitId: targetUnitId,
2060
+ subUnitId: targetSubUnitId,
2061
+ rule: {
2062
+ ...waitAdd,
2063
+ ranges
2064
+ }
2065
+ };
2066
+ redos.push({
2067
+ id: _univerjs_sheets_conditional_formatting.AddConditionalRuleMutation.id,
2068
+ params
2069
+ });
2070
+ undos.push((0, _univerjs_sheets_conditional_formatting.AddConditionalRuleMutationUndoFactory)(this._injector, params));
2113
2071
  }
2114
- } else if (ranges.length) {
2072
+ return;
2073
+ }
2074
+ const rule = this._conditionalFormattingRuleModel.getRule(targetUnitId, targetSubUnitId, cfId);
2075
+ if (rule) if (ranges.length) {
2115
2076
  const params = {
2116
2077
  unitId: targetUnitId,
2117
2078
  subUnitId: targetSubUnitId,
@@ -2184,8 +2145,7 @@ ConditionalFormattingPainterController = __decorate([
2184
2145
  __decorateParam(2, (0, _univerjs_core.Inject)(_univerjs_sheets_ui.IFormatPainterService)),
2185
2146
  __decorateParam(3, (0, _univerjs_core.Inject)(_univerjs_sheets.SheetsSelectionsService)),
2186
2147
  __decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRuleModel)),
2187
- __decorateParam(5, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingViewModel)),
2188
- __decorateParam(6, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRangeTransformService))
2148
+ __decorateParam(5, (0, _univerjs_core.Inject)(_univerjs_sheets_conditional_formatting.ConditionalFormattingRangeTransformService))
2189
2149
  ], ConditionalFormattingPainterController);
2190
2150
 
2191
2151
  //#endregion
@@ -2411,7 +2371,7 @@ const TextInput$1 = (props) => {
2411
2371
  className: "univer-ml-1 univer-w-full",
2412
2372
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_sheets_formula_ui.FormulaEditor, {
2413
2373
  ref: formulaEditorRef,
2414
- className: (0, _univerjs_design.clsx)("univer-box-border univer-h-8 univer-w-full univer-cursor-pointer univer-items-center univer-rounded-lg univer-bg-white univer-pt-2 univer-transition-colors hover:univer-border-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-white [&>div:first-child]:univer-px-2.5 [&>div]:univer-h-5 [&>div]:univer-ring-transparent", _univerjs_design.borderClassName),
2374
+ className: (0, _univerjs_design.clsx)("univer-box-border univer-h-8 univer-w-full univer-cursor-pointer univer-items-center univer-rounded-lg univer-bg-gray-0 univer-pt-2 univer-transition-colors hover:univer-border-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-gray-0 [&>div:first-child]:univer-px-2.5 [&>div]:univer-h-5 [&>div]:univer-ring-transparent", _univerjs_design.borderClassName),
2415
2375
  initValue: formulaInitValue,
2416
2376
  unitId,
2417
2377
  subUnitId,
@@ -2832,7 +2792,7 @@ const InputText = (props) => {
2832
2792
  className: "univer-w-full",
2833
2793
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_sheets_formula_ui.FormulaEditor, {
2834
2794
  ref: formulaEditorRef,
2835
- className: (0, _univerjs_design.clsx)("univer-box-border univer-h-8 univer-w-full univer-cursor-pointer univer-items-center univer-rounded-lg univer-bg-white univer-pt-2 univer-transition-colors hover:univer-border-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-white [&>div:first-child]:univer-px-2.5 [&>div]:univer-h-5 [&>div]:univer-ring-transparent", _univerjs_design.borderClassName),
2795
+ className: (0, _univerjs_design.clsx)("univer-box-border univer-h-8 univer-w-full univer-cursor-pointer univer-items-center univer-rounded-lg univer-bg-gray-0 univer-pt-2 univer-transition-colors hover:univer-border-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-gray-0 [&>div:first-child]:univer-px-2.5 [&>div]:univer-h-5 [&>div]:univer-ring-transparent", _univerjs_design.borderClassName),
2836
2796
  initValue: v,
2837
2797
  unitId,
2838
2798
  subUnitId,
@@ -3352,7 +3312,7 @@ const FormulaStyleEditor = (props) => {
3352
3312
  className: "univer-mt-3",
3353
3313
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_sheets_formula_ui.FormulaEditor, {
3354
3314
  ref: formulaEditorRef,
3355
- className: (0, _univerjs_design.clsx)("univer-box-border univer-h-8 univer-w-full univer-cursor-pointer univer-items-center univer-rounded-lg univer-bg-white univer-pt-2 univer-transition-colors hover:univer-border-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-white [&>div:first-child]:univer-px-2.5 [&>div]:univer-h-5 [&>div]:univer-ring-transparent", _univerjs_design.borderClassName),
3315
+ className: (0, _univerjs_design.clsx)("univer-box-border univer-h-8 univer-w-full univer-cursor-pointer univer-items-center univer-rounded-lg univer-bg-gray-0 univer-pt-2 univer-transition-colors hover:univer-border-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-gray-0 [&>div:first-child]:univer-px-2.5 [&>div]:univer-h-5 [&>div]:univer-ring-transparent", _univerjs_design.borderClassName),
3356
3316
  errorText: formulaError,
3357
3317
  isFocus: isFocusFormulaEditor,
3358
3318
  initValue: formula,
@@ -3826,7 +3786,7 @@ const TextInput = (props) => {
3826
3786
  className: "univer-w-full",
3827
3787
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_sheets_formula_ui.FormulaEditor, {
3828
3788
  ref: formulaEditorRef,
3829
- className: (0, _univerjs_design.clsx)("univer-box-border univer-h-8 univer-w-full univer-cursor-pointer univer-items-center univer-rounded-lg univer-bg-white univer-pt-2 univer-transition-colors hover:univer-border-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-white [&>div:first-child]:univer-px-2.5 [&>div]:univer-h-5 [&>div]:univer-ring-transparent", _univerjs_design.borderClassName),
3789
+ className: (0, _univerjs_design.clsx)("univer-box-border univer-h-8 univer-w-full univer-cursor-pointer univer-items-center univer-rounded-lg univer-bg-gray-0 univer-pt-2 univer-transition-colors hover:univer-border-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-gray-0 [&>div:first-child]:univer-px-2.5 [&>div]:univer-h-5 [&>div]:univer-ring-transparent", _univerjs_design.borderClassName),
3830
3790
  initValue: String(props.value),
3831
3791
  unitId,
3832
3792
  subUnitId,
@@ -3851,8 +3811,9 @@ const createDefaultConfigItem = (iconType, index, list) => ({
3851
3811
  const IconGroupList = (props) => {
3852
3812
  const { iconType, onClick } = props;
3853
3813
  const localeService = (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService);
3814
+ const direction = (0, _univerjs_ui.useObservable)(localeService.direction$, localeService.getDirection());
3854
3815
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3855
- dir: (0, _univerjs_ui.useObservable)(localeService.direction$, localeService.getDirection()),
3816
+ dir: direction,
3856
3817
  className: "univer-w-80",
3857
3818
  children: _univerjs_sheets_conditional_formatting.iconGroup.map((group) => {
3858
3819
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -3861,6 +3822,8 @@ const IconGroupList = (props) => {
3861
3822
  className: "univer-mb-2 univer-px-1 univer-text-xs univer-font-medium univer-text-gray-500 dark:!univer-text-gray-400",
3862
3823
  children: localeService.t(group.title)
3863
3824
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3825
+ dir: direction,
3826
+ "data-u-comp": "cf-icon-set-group-grid",
3864
3827
  className: "univer-grid univer-grid-cols-2 univer-gap-1",
3865
3828
  children: group.group.map((groupItem, groupItemIndex) => {
3866
3829
  const selected = groupItem.name === iconType;
@@ -3868,11 +3831,12 @@ const IconGroupList = (props) => {
3868
3831
  type: "button",
3869
3832
  "aria-label": `${localeService.t(group.title)} ${groupItemIndex + 1}`,
3870
3833
  "aria-pressed": selected,
3871
- className: (0, _univerjs_design.clsx)("univer-flex univer-h-8 univer-w-full univer-cursor-pointer univer-items-center univer-rounded-md univer-border-0 univer-bg-transparent univer-px-2 univer-outline-none univer-transition-colors focus-visible:univer-ring-2 focus-visible:univer-ring-primary-600 rtl:univer-flex-row-reverse", selected ? "univer-bg-primary-50 univer-ring-1 univer-ring-primary-600 dark:!univer-bg-primary-900" : "hover:univer-bg-gray-100 dark:hover:!univer-bg-gray-700"),
3834
+ className: (0, _univerjs_design.clsx)("univer-flex univer-h-8 univer-w-full univer-cursor-pointer univer-items-center univer-justify-start univer-rounded-md univer-border-0 univer-bg-transparent univer-px-2 univer-outline-none univer-transition-colors focus-visible:univer-ring-2 focus-visible:univer-ring-primary-600", selected ? "univer-bg-primary-50 univer-ring-1 univer-ring-primary-600 dark:!univer-bg-primary-900" : "hover:univer-bg-gray-100 dark:hover:!univer-bg-gray-700"),
3872
3835
  onClick: () => {
3873
3836
  onClick(groupItem.name);
3874
3837
  },
3875
3838
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3839
+ dir: direction,
3876
3840
  className: "univer-flex univer-items-center univer-gap-0.5",
3877
3841
  children: groupItem.list.map((base64, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
3878
3842
  alt: "",
@@ -4036,7 +4000,7 @@ const IconSetRuleEdit = (props) => {
4036
4000
  })
4037
4001
  }),
4038
4002
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4039
- className: (0, _univerjs_design.clsx)("univer-box-border univer-flex univer-h-8 univer-w-full univer-items-center univer-justify-between univer-rounded-md univer-bg-white univer-px-4 univer-py-2 univer-text-xs univer-text-gray-600 univer-transition-all hover:univer-border-primary-600 dark:!univer-text-gray-200", _univerjs_design.borderClassName),
4003
+ className: (0, _univerjs_design.clsx)("univer-box-border univer-flex univer-h-8 univer-w-full univer-items-center univer-justify-between univer-rounded-md univer-bg-gray-0 univer-px-4 univer-py-2 univer-text-xs univer-text-gray-600 univer-transition-all hover:univer-border-primary-600 dark:!univer-text-gray-200", _univerjs_design.borderClassName),
4040
4004
  children: [icon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
4041
4005
  src: icon,
4042
4006
  className: "univer-size-4",
@@ -4248,7 +4212,7 @@ const IconSet = (props) => {
4248
4212
  })
4249
4213
  }),
4250
4214
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4251
- className: (0, _univerjs_design.clsx)("univer-box-border univer-flex univer-h-8 univer-w-full univer-items-center univer-justify-between univer-rounded-md univer-bg-white univer-px-4 univer-py-2 univer-text-xs univer-text-gray-600 univer-transition-all hover:univer-border-primary-600", _univerjs_design.borderClassName),
4215
+ className: (0, _univerjs_design.clsx)("univer-box-border univer-flex univer-h-8 univer-w-full univer-items-center univer-justify-between univer-rounded-md univer-bg-gray-0 univer-px-4 univer-py-2 univer-text-xs univer-text-gray-600 univer-transition-all hover:univer-border-primary-600", _univerjs_design.borderClassName),
4252
4216
  children: [previewIcon, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreDownIcon, {})]
4253
4217
  })
4254
4218
  })
@@ -4889,7 +4853,7 @@ function RuleList(props) {
4889
4853
  }
4890
4854
  })).map((ele, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: ele }, index))
4891
4855
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4892
- className: "univer-flex univer-justify-end univer-space-x-2",
4856
+ className: "univer-flex univer-justify-end univer-gap-2",
4893
4857
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Tooltip, {
4894
4858
  title: localeService.t("sheets-conditional-formatting-ui.panel.createRule"),
4895
4859
  placement: "bottom",
@@ -4919,7 +4883,7 @@ function RuleList(props) {
4919
4883
  onDragStop: handleDragStop,
4920
4884
  onDragStart: handleDragStart,
4921
4885
  itemRender: (rule) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4922
- className: (0, _univerjs_design.clsx)("univer-group univer-relative univer-flex univer-items-center univer-justify-between univer-rounded univer-py-2 univer-pl-5 univer-pr-8 hover:univer-bg-gray-100 dark:hover:!univer-bg-gray-700", { "univer-bg-gray-100 dark:!univer-bg-gray-700": draggingId === rule.cfId }),
4886
+ className: (0, _univerjs_design.clsx)("univer-group univer-relative univer-flex univer-items-center univer-justify-between univer-rounded univer-py-2 univer-pl-5 univer-pr-8 hover:univer-bg-gray-100 rtl:univer-pl-8 rtl:univer-pr-5 dark:hover:!univer-bg-gray-700", { "univer-bg-gray-100 dark:!univer-bg-gray-700": draggingId === rule.cfId }),
4923
4887
  onMouseMove: () => {
4924
4888
  rule.ranges !== currentRuleRanges && setCurrentRuleRanges(rule.ranges);
4925
4889
  },
@@ -4929,14 +4893,14 @@ function RuleList(props) {
4929
4893
  },
4930
4894
  children: [
4931
4895
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4932
- className: (0, _univerjs_design.clsx)("univer-absolute univer-left-0 univer-hidden univer-size-5 univer-cursor-grab univer-items-center univer-justify-center univer-rounded group-hover:univer-flex", "draggableHandle"),
4896
+ className: (0, _univerjs_design.clsx)("univer-absolute univer-left-0 univer-hidden univer-size-5 univer-cursor-grab univer-items-center univer-justify-center univer-rounded group-hover:univer-flex rtl:univer-left-auto rtl:univer-right-0", "draggableHandle"),
4933
4897
  onClick: (e) => e.stopPropagation(),
4934
4898
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.GripVerticalIcon, {})
4935
4899
  }),
4936
4900
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4937
4901
  className: "univer-min-w-0 univer-max-w-full univer-flex-shrink univer-overflow-hidden",
4938
4902
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4939
- className: "univer-text-sm univer-text-gray-900 dark:!univer-text-white",
4903
+ className: "univer-text-sm univer-text-gray-900 dark:!univer-text-gray-0",
4940
4904
  children: getRuleDescribe(rule, localeService)
4941
4905
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4942
4906
  className: "univer-max-w-[250px] univer-overflow-hidden univer-text-ellipsis univer-text-xs univer-text-gray-400",
@@ -4945,7 +4909,7 @@ function RuleList(props) {
4945
4909
  }),
4946
4910
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Preview, { rule: rule.rule }) }),
4947
4911
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4948
- className: (0, _univerjs_design.clsx)("univer-absolute univer-right-1 univer-hidden univer-size-6 univer-cursor-pointer univer-items-center univer-justify-center univer-rounded univer-text-red-500 group-hover:univer-flex hover:univer-bg-gray-200", { "univer-flex univer-items-center univer-justify-center": draggingId === rule.cfId }),
4912
+ className: (0, _univerjs_design.clsx)("univer-absolute univer-right-1 univer-hidden univer-size-6 univer-cursor-pointer univer-items-center univer-justify-center univer-rounded univer-text-red-500 group-hover:univer-flex hover:univer-bg-gray-200 rtl:univer-left-1 rtl:univer-right-auto", { "univer-flex univer-items-center univer-justify-center": draggingId === rule.cfId }),
4949
4913
  onClick: (e) => {
4950
4914
  e.stopPropagation();
4951
4915
  handleDelete(rule);