@univerjs/sheets-data-validation-ui 1.0.0-beta.0 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/lib/cjs/index.js +90 -129
  2. package/lib/cjs/locale/ar-SA.js +1 -36
  3. package/lib/cjs/locale/ca-ES.js +1 -36
  4. package/lib/cjs/locale/de-DE.js +1 -36
  5. package/lib/cjs/locale/en-US.js +1 -36
  6. package/lib/cjs/locale/es-ES.js +1 -36
  7. package/lib/cjs/locale/fa-IR.js +1 -36
  8. package/lib/cjs/locale/fr-FR.js +1 -36
  9. package/lib/cjs/locale/id-ID.js +1 -36
  10. package/lib/cjs/locale/it-IT.js +1 -36
  11. package/lib/cjs/locale/ja-JP.js +1 -36
  12. package/lib/cjs/locale/ko-KR.js +1 -36
  13. package/lib/cjs/locale/pl-PL.js +1 -36
  14. package/lib/cjs/locale/pt-BR.js +1 -36
  15. package/lib/cjs/locale/ru-RU.js +1 -36
  16. package/lib/cjs/locale/sk-SK.js +1 -36
  17. package/lib/cjs/locale/vi-VN.js +1 -36
  18. package/lib/cjs/locale/zh-CN.js +1 -36
  19. package/lib/cjs/locale/zh-HK.js +1 -36
  20. package/lib/cjs/locale/zh-TW.js +1 -36
  21. package/lib/es/index.js +91 -130
  22. package/lib/es/locale/ar-SA.js +1 -36
  23. package/lib/es/locale/ca-ES.js +1 -36
  24. package/lib/es/locale/de-DE.js +1 -36
  25. package/lib/es/locale/en-US.js +1 -36
  26. package/lib/es/locale/es-ES.js +1 -36
  27. package/lib/es/locale/fa-IR.js +1 -36
  28. package/lib/es/locale/fr-FR.js +1 -36
  29. package/lib/es/locale/id-ID.js +1 -36
  30. package/lib/es/locale/it-IT.js +1 -36
  31. package/lib/es/locale/ja-JP.js +1 -36
  32. package/lib/es/locale/ko-KR.js +1 -36
  33. package/lib/es/locale/pl-PL.js +1 -36
  34. package/lib/es/locale/pt-BR.js +1 -36
  35. package/lib/es/locale/ru-RU.js +1 -36
  36. package/lib/es/locale/sk-SK.js +1 -36
  37. package/lib/es/locale/vi-VN.js +1 -36
  38. package/lib/es/locale/zh-CN.js +1 -36
  39. package/lib/es/locale/zh-HK.js +1 -36
  40. package/lib/es/locale/zh-TW.js +1 -36
  41. package/lib/index.css +24 -8
  42. package/lib/index.js +91 -130
  43. package/lib/locale/ar-SA.js +1 -36
  44. package/lib/locale/ca-ES.js +1 -36
  45. package/lib/locale/de-DE.js +1 -36
  46. package/lib/locale/en-US.js +1 -36
  47. package/lib/locale/es-ES.js +1 -36
  48. package/lib/locale/fa-IR.js +1 -36
  49. package/lib/locale/fr-FR.js +1 -36
  50. package/lib/locale/id-ID.js +1 -36
  51. package/lib/locale/it-IT.js +1 -36
  52. package/lib/locale/ja-JP.js +1 -36
  53. package/lib/locale/ko-KR.js +1 -36
  54. package/lib/locale/pl-PL.js +1 -36
  55. package/lib/locale/pt-BR.js +1 -36
  56. package/lib/locale/ru-RU.js +1 -36
  57. package/lib/locale/sk-SK.js +1 -36
  58. package/lib/locale/vi-VN.js +1 -36
  59. package/lib/locale/zh-CN.js +1 -36
  60. package/lib/locale/zh-HK.js +1 -36
  61. package/lib/locale/zh-TW.js +1 -36
  62. package/lib/types/const.d.ts +2 -1
  63. package/lib/types/locale/en-US.d.ts +0 -39
  64. package/lib/umd/index.js +1 -1
  65. package/lib/umd/locale/ar-SA.js +1 -1
  66. package/lib/umd/locale/ca-ES.js +1 -1
  67. package/lib/umd/locale/de-DE.js +1 -1
  68. package/lib/umd/locale/en-US.js +1 -1
  69. package/lib/umd/locale/es-ES.js +1 -1
  70. package/lib/umd/locale/fa-IR.js +1 -1
  71. package/lib/umd/locale/fr-FR.js +1 -1
  72. package/lib/umd/locale/id-ID.js +1 -1
  73. package/lib/umd/locale/it-IT.js +1 -1
  74. package/lib/umd/locale/ja-JP.js +1 -1
  75. package/lib/umd/locale/ko-KR.js +1 -1
  76. package/lib/umd/locale/pl-PL.js +1 -1
  77. package/lib/umd/locale/pt-BR.js +1 -1
  78. package/lib/umd/locale/ru-RU.js +1 -1
  79. package/lib/umd/locale/sk-SK.js +1 -1
  80. package/lib/umd/locale/vi-VN.js +1 -1
  81. package/lib/umd/locale/zh-CN.js +1 -1
  82. package/lib/umd/locale/zh-HK.js +1 -1
  83. package/lib/umd/locale/zh-TW.js +1 -1
  84. package/package.json +14 -14
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ComponentManager, IDialogService, IMenuManagerService, ISidebarService, IconManager, KeyCode, MenuItemType, RibbonDataGroup, RibbonInsertGroup, UniverMobileUIPlugin, getMenuHiddenObservable, useDependency, useEvent, useObservable, useSidebarClick } from "@univerjs/ui";
2
- import { CellValueType, ColorKit, CommandType, DEFAULT_STYLES, DataValidationErrorStyle, DataValidationRenderMode, DataValidationStatus, DataValidationType, DependentOn, Disposable, DisposableCollection, HorizontalAlign, ICommandService, IConfigService, IUniverInstanceService, Inject, Injector, InterceptorEffectEnum, LocaleService, ObjectMatrix, Optional, Plugin, Range, Rectangle, RedoCommand, RxDisposable, ThemeService, UndoCommand, UniverInstanceType, VerticalAlign, WrapStrategy, bufferDebounceTime, dateKit, debounce, generateRandomId, isFormulaString, isUnitRangesEqual, merge, numfmt, queryObjectMatrix, sequenceExecute, shallowEqual, toDisposable } from "@univerjs/core";
2
+ import { CellValueType, ColorKit, CommandType, DEFAULT_STYLES, DataValidationErrorStyle, DataValidationRenderMode, DataValidationStatus, DataValidationType, DependentOn, Disposable, DisposableCollection, HorizontalAlign, ICommandService, IConfigService, IUniverInstanceService, Inject, Injector, InterceptorEffectEnum, LocaleService, Optional, Plugin, Rectangle, RedoCommand, RxDisposable, ThemeService, UndoCommand, UniverInstanceType, VerticalAlign, WrapStrategy, bufferDebounceTime, dateKit, debounce, generateRandomId, getIntersectRange, isFormulaString, isUnitRangesEqual, merge, numfmt, sequenceExecute, shallowEqual, toDisposable } from "@univerjs/core";
3
3
  import { AUTO_FILL_APPLY_TYPE, AutoFillTools, IAutoFillService, INTERCEPTOR_POINT, InterceptCellContentPriority, RangeProtectionPermissionEditPoint, SetRangeValuesCommand, SetWorksheetActiveOperation, SheetInterceptorService, SheetPermissionCheckController, SheetsSelectionsService, UniverSheetsPlugin, VALIDATE_CELL, WorkbookEditablePermission, WorksheetEditPermission, WorksheetSetCellStylePermission, checkRangesEditablePermission, deserializeListOptions, getSheetCommandTarget, rangeToDiscreteRange, serializeListOptions } from "@univerjs/sheets";
4
4
  import { AddSheetDataValidationCommand, BASE_FORMULA_INPUT_NAME, CHECKBOX_FORMULA_1, CHECKBOX_FORMULA_2, CHECKBOX_FORMULA_INPUT_NAME, CUSTOM_FORMULA_INPUT_NAME, ClearRangeDataValidationCommand, DATA_VALIDATION_PLUGIN_NAME, DataValidationCacheService, DataValidationFormulaController, DataValidationFormulaService, LIST_FORMULA_INPUT_NAME, RemoveSheetAllDataValidationCommand, RemoveSheetDataValidationCommand, SheetDataValidationModel, SheetsDataValidationValidatorService, UniverSheetsDataValidationPlugin, UpdateSheetDataValidationOptionsCommand, UpdateSheetDataValidationRangeCommand, UpdateSheetDataValidationSettingCommand, createDefaultNewRule, getCellValueOrigin, getDataValidationCellValue, getDataValidationDiffMutations, getFormulaResult, isLegalFormulaResult, transformCheckboxValue } from "@univerjs/sheets-data-validation";
5
5
  import { DataValidationModel, DataValidatorDropdownType, DataValidatorRegistryScope, DataValidatorRegistryService, TWO_FORMULA_OPERATOR_COUNT, UniverDataValidationPlugin, getRuleOptions, getRuleSetting } from "@univerjs/data-validation";
@@ -161,7 +161,8 @@ const defaultPluginConfig = {};
161
161
  * See the License for the specific language governing permissions and
162
162
  * limitations under the License.
163
163
  */
164
- const DROP_DOWN_DEFAULT_COLOR = "#ECECEC";
164
+ const DROP_DOWN_DEFAULT_COLOR = "gray.100";
165
+ const DROP_DOWN_ICON_COLOR = "gray.600";
165
166
 
166
167
  //#endregion
167
168
  //#region src/controllers/dv-reject-input.controller.ts
@@ -449,7 +450,7 @@ let DataValidationDropdownManagerService = class DataValidationDropdownManagerSe
449
450
  options: list.map((item) => ({
450
451
  label: item.label,
451
452
  value: item.label,
452
- color: showColor || item.color ? item.color || "#ECECEC" : "transparent"
453
+ color: showColor || item.color ? item.color || "gray.100" : "transparent"
453
454
  })),
454
455
  onEdit: handleEdit,
455
456
  defaultValue: cellStr,
@@ -774,7 +775,7 @@ function DropdownPresets({ onChange }) {
774
775
  children: presets.map((values) => /* @__PURE__ */ jsx("button", {
775
776
  type: "button",
776
777
  "aria-label": values.join(" / "),
777
- className: "univer-flex univer-min-h-20 univer-cursor-pointer univer-flex-col univer-items-start univer-gap-1.5 univer-rounded-md univer-border-0 univer-bg-gray-50 univer-p-3 univer-text-left univer-text-sm univer-leading-5 univer-text-gray-900 univer-transition-colors hover:univer-bg-gray-100 focus-visible:univer-outline-none focus-visible:univer-ring-2 focus-visible:univer-ring-primary-600 focus-visible:univer-ring-offset-0 dark:!univer-bg-gray-800 dark:!univer-text-white dark:hover:!univer-bg-gray-700",
778
+ className: "univer-flex univer-min-h-20 univer-cursor-pointer univer-flex-col univer-items-start univer-gap-1.5 univer-rounded-md univer-border-0 univer-bg-gray-50 univer-p-3 univer-text-left univer-text-sm univer-leading-5 univer-text-gray-900 univer-transition-colors hover:univer-bg-gray-100 focus-visible:univer-outline-none focus-visible:univer-ring-2 focus-visible:univer-ring-primary-600 focus-visible:univer-ring-offset-0 dark:!univer-bg-gray-800 dark:!univer-text-gray-0 dark:hover:!univer-bg-gray-700",
778
779
  onClick: () => onChange(serializeListOptions(values)),
779
780
  children: values.map((value) => /* @__PURE__ */ jsx("span", {
780
781
  className: "univer-w-full univer-break-words",
@@ -989,7 +990,7 @@ const menuSchema = {
989
990
  //#endregion
990
991
  //#region package.json
991
992
  var name = "@univerjs/sheets-data-validation-ui";
992
- var version = "1.0.0-beta.0";
993
+ var version = "1.0.0-beta.2";
993
994
 
994
995
  //#endregion
995
996
  //#region src/views/components/DataValidationOptions.tsx
@@ -1000,7 +1001,7 @@ function DataValidationOptions(props) {
1000
1001
  const [show, setShow] = useState(false);
1001
1002
  const ExtraOptions = extraComponent ? componentManager.get(extraComponent) : null;
1002
1003
  return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
1003
- className: "univer-mb-3 univer-flex univer-cursor-pointer univer-items-center univer-text-sm univer-text-gray-900 dark:!univer-text-white",
1004
+ className: "univer-mb-3 univer-flex univer-cursor-pointer univer-items-center univer-text-sm univer-text-gray-900 dark:!univer-text-gray-0",
1004
1005
  onClick: () => setShow(!show),
1005
1006
  children: [localeService.t("sheets-data-validation-ui.panel.options"), show ? /* @__PURE__ */ jsx(MoreUpIcon, { className: "univer-ml-1" }) : /* @__PURE__ */ jsx(MoreDownIcon, { className: "univer-ml-1" })]
1006
1007
  }), show && /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -1400,7 +1401,7 @@ const DataValidationItem = (props) => {
1400
1401
  };
1401
1402
  }, [markSelectionService]);
1402
1403
  return /* @__PURE__ */ jsxs("div", {
1403
- className: clsx("univer-bg-secondary univer-relative univer--mx-2 univer-box-border univer-flex univer-w-[287px] univer-cursor-pointer univer-flex-col univer-justify-between univer-overflow-hidden univer-rounded-md univer-p-2 univer-pr-9", {
1404
+ className: clsx("univer-bg-secondary univer-relative univer--mx-2 univer-box-border univer-flex univer-w-[287px] univer-cursor-pointer univer-flex-col univer-justify-between univer-overflow-hidden univer-rounded-md univer-p-2 univer-pr-9 rtl:univer-pl-9 rtl:univer-pr-2", {
1404
1405
  "hover:univer-bg-gray-50 dark:hover:!univer-bg-gray-700": !disable,
1405
1406
  "univer-opacity-50": disable
1406
1407
  }),
@@ -1424,7 +1425,7 @@ const DataValidationItem = (props) => {
1424
1425
  },
1425
1426
  children: [
1426
1427
  /* @__PURE__ */ jsx("div", {
1427
- className: "univer-truncate univer-text-sm univer-font-medium univer-leading-[22px] univer-text-gray-900 dark:!univer-text-white",
1428
+ className: "univer-truncate univer-text-sm univer-font-medium univer-leading-[22px] univer-text-gray-900 dark:!univer-text-gray-0",
1428
1429
  children: validator === null || validator === void 0 ? void 0 : validator.generateRuleName(rule)
1429
1430
  }),
1430
1431
  /* @__PURE__ */ jsx("div", {
@@ -1432,7 +1433,7 @@ const DataValidationItem = (props) => {
1432
1433
  children: rule.ranges.map((range) => serializeRange(range)).join(",")
1433
1434
  }),
1434
1435
  isHover && /* @__PURE__ */ jsx("div", {
1435
- className: "univer-absolute univer-right-2 univer-top-[19px] univer-flex univer-size-5 univer-items-center univer-justify-center univer-rounded hover:univer-bg-gray-200 dark:!univer-text-gray-300 dark:hover:!univer-bg-gray-700",
1436
+ className: "univer-absolute univer-right-2 univer-top-[19px] univer-flex univer-size-5 univer-items-center univer-justify-center univer-rounded hover:univer-bg-gray-200 rtl:univer-left-2 rtl:univer-right-auto dark:!univer-text-gray-300 dark:hover:!univer-bg-gray-700",
1436
1437
  onClick: handleDelete,
1437
1438
  children: /* @__PURE__ */ jsx(DeleteIcon, {})
1438
1439
  })
@@ -1683,7 +1684,7 @@ function CustomFormulaInput(props) {
1683
1684
  error: formula1Res,
1684
1685
  children: /* @__PURE__ */ jsx(FormulaEditor, {
1685
1686
  ref: formulaEditorRef,
1686
- className: 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", borderClassName),
1687
+ className: 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", borderClassName),
1687
1688
  initValue: (value === null || value === void 0 ? void 0 : value.formula1) ?? "=",
1688
1689
  unitId,
1689
1690
  subUnitId,
@@ -1764,6 +1765,9 @@ const DEFAULT_COLOR_PRESET = [
1764
1765
  const ColorSelect = (props) => {
1765
1766
  const { value, onChange, disabled } = props;
1766
1767
  const [open, setOpen] = useState(false);
1768
+ const themeService = useDependency(ThemeService);
1769
+ useObservable(themeService.currentTheme$);
1770
+ const backgroundColor = value.includes(".") && themeService.isValidThemeColor(value) ? themeService.getColorFromTheme(value) : value;
1767
1771
  return /* @__PURE__ */ jsx(Dropdown, {
1768
1772
  align: "start",
1769
1773
  disabled,
@@ -1781,10 +1785,10 @@ const ColorSelect = (props) => {
1781
1785
  }, color))
1782
1786
  }),
1783
1787
  children: /* @__PURE__ */ jsxs("div", {
1784
- className: clsx("univer-box-border univer-inline-flex univer-h-8 univer-w-16 univer-cursor-pointer univer-items-center univer-justify-between univer-gap-2 univer-rounded-lg univer-bg-white univer-px-2.5 univer-transition-colors univer-duration-200 hover:univer-border-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-white", borderClassName),
1788
+ className: clsx("univer-box-border univer-inline-flex univer-h-8 univer-w-16 univer-cursor-pointer univer-items-center univer-justify-between univer-gap-2 univer-rounded-lg univer-bg-gray-0 univer-px-2.5 univer-transition-colors univer-duration-200 hover:univer-border-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-gray-0", borderClassName),
1785
1789
  children: [/* @__PURE__ */ jsx("div", {
1786
1790
  className: "univer-box-border univer-size-4 univer-rounded univer-text-base",
1787
- style: { background: value }
1791
+ style: { background: backgroundColor }
1788
1792
  }), /* @__PURE__ */ jsx(MoreDownIcon, {})]
1789
1793
  })
1790
1794
  });
@@ -1869,7 +1873,7 @@ function ListFormulaInput(props) {
1869
1873
  const strColors = formula2.split(",");
1870
1874
  return strOptions.map((label, i) => ({
1871
1875
  label,
1872
- color: strColors[i] || "#ECECEC",
1876
+ color: strColors[i] || "gray.100",
1873
1877
  isRef: false,
1874
1878
  id: generateRandomId(4)
1875
1879
  }));
@@ -1890,7 +1894,7 @@ function ListFormulaInput(props) {
1890
1894
  };
1891
1895
  const refFinalList = useMemo(() => refOptions.map((label, i) => ({
1892
1896
  label,
1893
- color: refColors[i] || "#ECECEC",
1897
+ color: refColors[i] || "gray.100",
1894
1898
  id: `${i}`,
1895
1899
  isRef: true
1896
1900
  })), [refColors, refOptions]);
@@ -1980,7 +1984,7 @@ function ListFormulaInput(props) {
1980
1984
  error: formula1Res || localError || void 0,
1981
1985
  children: [/* @__PURE__ */ jsx(FormulaEditor, {
1982
1986
  ref: formulaEditorRef,
1983
- className: 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", borderClassName),
1987
+ className: 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", borderClassName),
1984
1988
  initValue: formulaStr,
1985
1989
  unitId,
1986
1990
  subUnitId,
@@ -2203,52 +2207,36 @@ let DataValidationAutoFillController = class DataValidationAutoFillController ex
2203
2207
  const ruleMatrixCopy = this._sheetDataValidationModel.getRuleObjectMatrix(unitId, subUnitId).clone();
2204
2208
  const virtualRange = virtualizeDiscreteRanges([sourceRange, targetRange]);
2205
2209
  const [vSourceRange, vTargetRange] = virtualRange.ranges;
2206
- const { mapFunc } = virtualRange;
2207
- const sourceStartCell = {
2208
- row: vSourceRange.startRow,
2209
- col: vSourceRange.startColumn
2210
- };
2210
+ const { mapRange, projectRange } = virtualRange;
2211
2211
  const repeats = AutoFillTools.getAutoFillRepeatRange(vSourceRange, vTargetRange);
2212
- const additionMatrix = new ObjectMatrix();
2213
- const additionRules = /* @__PURE__ */ new Set();
2214
- repeats.forEach((repeat) => {
2215
- const targetStartCell = repeat.repeatStartCell;
2216
- const relativeRange = repeat.relativeRange;
2217
- const sourceRange = {
2218
- startRow: sourceStartCell.row,
2219
- startColumn: sourceStartCell.col,
2220
- endColumn: sourceStartCell.col,
2221
- endRow: sourceStartCell.row
2222
- };
2223
- const targetRange = {
2224
- startRow: targetStartCell.row,
2225
- startColumn: targetStartCell.col,
2226
- endColumn: targetStartCell.col,
2227
- endRow: targetStartCell.row
2228
- };
2229
- Range.foreach(relativeRange, (row, col) => {
2230
- const sourcePositionRange = Rectangle.getPositionRange({
2231
- startRow: row,
2232
- startColumn: col,
2233
- endColumn: col,
2234
- endRow: row
2235
- }, sourceRange);
2236
- const { row: sourceRow, col: sourceCol } = mapFunc(sourcePositionRange.startRow, sourcePositionRange.startColumn);
2237
- const ruleId = this._sheetDataValidationModel.getRuleIdByLocation(unitId, subUnitId, sourceRow, sourceCol) || "";
2238
- const targetPositionRange = Rectangle.getPositionRange({
2239
- startRow: row,
2240
- startColumn: col,
2241
- endColumn: col,
2242
- endRow: row
2243
- }, targetRange);
2244
- const { row: targetRow, col: targetCol } = mapFunc(targetPositionRange.startRow, targetPositionRange.startColumn);
2245
- additionMatrix.setValue(targetRow, targetCol, ruleId);
2246
- additionRules.add(ruleId);
2212
+ const additionsByRuleId = /* @__PURE__ */ new Map();
2213
+ additionsByRuleId.set("", repeats.flatMap((repeat) => mapRange(Rectangle.getPositionRange(repeat.relativeRange, {
2214
+ startRow: repeat.repeatStartCell.row,
2215
+ endRow: repeat.repeatStartCell.row,
2216
+ startColumn: repeat.repeatStartCell.col,
2217
+ endColumn: repeat.repeatStartCell.col
2218
+ }))));
2219
+ this._sheetDataValidationModel.getRules(unitId, subUnitId).forEach((rule) => {
2220
+ const relativeSourceRanges = rule.ranges.flatMap((range) => {
2221
+ const projected = projectRange(range);
2222
+ const intersected = projected && getIntersectRange(projected, vSourceRange);
2223
+ return intersected ? [Rectangle.getRelativeRange(intersected, vSourceRange)] : [];
2247
2224
  });
2225
+ const targetRanges = repeats.flatMap((repeat) => relativeSourceRanges.flatMap((sourceRange) => {
2226
+ const copiedRange = getIntersectRange(sourceRange, repeat.relativeRange);
2227
+ if (!copiedRange) return [];
2228
+ return mapRange(Rectangle.getPositionRange(copiedRange, {
2229
+ startRow: repeat.repeatStartCell.row,
2230
+ endRow: repeat.repeatStartCell.row,
2231
+ startColumn: repeat.repeatStartCell.col,
2232
+ endColumn: repeat.repeatStartCell.col
2233
+ }));
2234
+ }));
2235
+ if (targetRanges.length) additionsByRuleId.set(rule.uid, targetRanges);
2248
2236
  });
2249
- const additions = Array.from(additionRules).map((id) => ({
2237
+ const additions = Array.from(additionsByRuleId, ([id, ranges]) => ({
2250
2238
  id,
2251
- ranges: queryObjectMatrix(additionMatrix, (value) => value === id)
2239
+ ranges: ranges.length > 1 ? Rectangle.mergeRanges(ranges) : ranges
2252
2240
  }));
2253
2241
  ruleMatrixCopy.addRangeRules(additions);
2254
2242
  const { redoMutations, undoMutations } = getDataValidationDiffMutations(unitId, subUnitId, ruleMatrixCopy.diff(this._sheetDataValidationModel.getRules(unitId, subUnitId)), this._injector, "patched", applyType === AUTO_FILL_APPLY_TYPE.ONLY_FORMAT);
@@ -2261,13 +2249,8 @@ let DataValidationAutoFillController = class DataValidationAutoFillController ex
2261
2249
  id: DATA_VALIDATION_PLUGIN_NAME,
2262
2250
  onBeforeFillData: (location) => {
2263
2251
  const { source: sourceRange, unitId, subUnitId } = location;
2264
- for (const row of sourceRange.rows) for (const col of sourceRange.cols) {
2265
- const dv = this._sheetDataValidationModel.getRuleByLocation(unitId, subUnitId, row, col);
2266
- if (dv && dv.type === DataValidationType.CHECKBOX) {
2267
- this._autoFillService.setDisableApplyType(AUTO_FILL_APPLY_TYPE.SERIES, true);
2268
- return;
2269
- }
2270
- }
2252
+ const { projectRange } = virtualizeDiscreteRanges([sourceRange]);
2253
+ if (this._sheetDataValidationModel.getRules(unitId, subUnitId).some((rule) => rule.type === DataValidationType.CHECKBOX && rule.ranges.some((range) => projectRange(range) !== null))) this._autoFillService.setDisableApplyType(AUTO_FILL_APPLY_TYPE.SERIES, true);
2271
2254
  },
2272
2255
  onFillData: (location, direction, applyType) => {
2273
2256
  if (applyType === AUTO_FILL_APPLY_TYPE.COPY || applyType === AUTO_FILL_APPLY_TYPE.ONLY_FORMAT || applyType === AUTO_FILL_APPLY_TYPE.SERIES) return generalApplyFunc(location, applyType);
@@ -2316,25 +2299,31 @@ let DataValidationCopyPasteController = class DataValidationCopyPasteController
2316
2299
  });
2317
2300
  }
2318
2301
  _collect(unitId, subUnitId, range) {
2319
- const matrix = new ObjectMatrix();
2302
+ const rules = /* @__PURE__ */ new Map();
2320
2303
  this._copyInfo = {
2321
2304
  unitId,
2322
2305
  subUnitId,
2323
- matrix
2306
+ rules
2324
2307
  };
2325
2308
  const discreteRange = this._injector.invoke((accessor) => {
2326
2309
  return rangeToDiscreteRange(range, accessor, unitId, subUnitId);
2327
2310
  });
2328
2311
  if (!discreteRange) return;
2329
- const { rows, cols } = discreteRange;
2330
- rows.forEach((row, rowIndex) => {
2331
- cols.forEach((col, colIndex) => {
2332
- const ruleId = this._sheetDataValidationModel.getRuleIdByLocation(unitId, subUnitId, row, col);
2333
- matrix.setValue(rowIndex, colIndex, ruleId ?? "");
2312
+ const { projectRange } = virtualizeDiscreteRanges([discreteRange]);
2313
+ this._sheetDataValidationModel.getRules(unitId, subUnitId).forEach((rule) => {
2314
+ const projectedRanges = rule.ranges.flatMap((ruleRange) => {
2315
+ const projected = projectRange(ruleRange);
2316
+ return projected ? [projected] : [];
2334
2317
  });
2318
+ if (projectedRanges.length) rules.set(rule.uid, projectedRanges.length > 1 ? Rectangle.mergeRanges(projectedRanges) : projectedRanges);
2335
2319
  });
2336
2320
  }
2337
2321
  _generateMutations(pasteFrom, pasteTo, payload) {
2322
+ const copyInfo = this._copyInfo;
2323
+ if (!copyInfo) return {
2324
+ redos: [],
2325
+ undos: []
2326
+ };
2338
2327
  const { unitId: copyUnitId, subUnitId: copySubUnitId, range: copyRange } = pasteFrom;
2339
2328
  const { unitId: pastedUnitId, subUnitId: pastedSubUnitId, range: pastedRange } = pasteTo;
2340
2329
  const { copyType = COPY_TYPE.COPY } = payload;
@@ -2352,51 +2341,38 @@ let DataValidationCopyPasteController = class DataValidationCopyPasteController
2352
2341
  undos: []
2353
2342
  };
2354
2343
  }
2344
+ const sourceVirtualRange = virtualizeDiscreteRanges([copyRange]).ranges[0];
2345
+ const targetVirtualization = virtualizeDiscreteRanges([pastedRange]);
2346
+ const targetVirtualRange = targetVirtualization.ranges[0];
2347
+ const repeatRange = getRepeatRange(sourceVirtualRange, targetVirtualRange, true);
2348
+ const clearTargetRanges = targetVirtualization.mapRange(targetVirtualRange);
2349
+ const getTargetRanges = (sourceRanges) => repeatRange.flatMap(({ startRange }) => sourceRanges.flatMap((sourceRange) => targetVirtualization.mapRange(Rectangle.getPositionRange(sourceRange, startRange))));
2355
2350
  if (pastedUnitId !== copyUnitId || pastedSubUnitId !== copySubUnitId) {
2356
2351
  const ruleMatrix = this._sheetDataValidationModel.getRuleObjectMatrix(pastedUnitId, pastedSubUnitId).clone();
2357
- const additionMatrix = new ObjectMatrix();
2358
- const addRules = /* @__PURE__ */ new Set();
2359
- const { ranges: [vCopyRange, vPastedRange], mapFunc } = virtualizeDiscreteRanges([copyRange, pastedRange]);
2360
- const repeatRange = getRepeatRange(vCopyRange, vPastedRange, true);
2361
2352
  const additionRules = /* @__PURE__ */ new Map();
2362
- repeatRange.forEach(({ startRange }) => {
2363
- var _this$_copyInfo;
2364
- (_this$_copyInfo = this._copyInfo) === null || _this$_copyInfo === void 0 || _this$_copyInfo.matrix.forValue((row, col, ruleId) => {
2365
- const range = Rectangle.getPositionRange({
2366
- startRow: row,
2367
- endRow: row,
2368
- startColumn: col,
2369
- endColumn: col
2370
- }, startRange);
2371
- const transformedRuleId = `${copySubUnitId}-${ruleId}`;
2372
- const oldRule = this._sheetDataValidationModel.getRuleById(copyUnitId, copySubUnitId, ruleId);
2373
- if (!this._sheetDataValidationModel.getRuleById(pastedUnitId, pastedSubUnitId, transformedRuleId) && oldRule) additionRules.set(transformedRuleId, {
2374
- ...oldRule,
2375
- uid: transformedRuleId
2376
- });
2377
- const { row: startRow, col: startColumn } = mapFunc(range.startRow, range.startColumn);
2378
- addRules.add(transformedRuleId);
2379
- additionMatrix.setValue(startRow, startColumn, transformedRuleId);
2353
+ const additions = [{
2354
+ id: "",
2355
+ ranges: clearTargetRanges
2356
+ }];
2357
+ copyInfo.rules.forEach((ranges, ruleId) => {
2358
+ const transformedRuleId = `${copySubUnitId}-${ruleId}`;
2359
+ const oldRule = this._sheetDataValidationModel.getRuleById(copyUnitId, copySubUnitId, ruleId);
2360
+ if (!this._sheetDataValidationModel.getRuleById(pastedUnitId, pastedSubUnitId, transformedRuleId) && oldRule) additionRules.set(transformedRuleId, {
2361
+ ...oldRule,
2362
+ uid: transformedRuleId
2363
+ });
2364
+ additions.push({
2365
+ id: transformedRuleId,
2366
+ ranges: getTargetRanges(ranges)
2380
2367
  });
2381
2368
  });
2382
- const additions = Array.from(addRules).map((id) => ({
2383
- id,
2384
- ranges: queryObjectMatrix(additionMatrix, (value) => value === id)
2385
- }));
2386
2369
  ruleMatrix.addRangeRules(additions);
2387
2370
  const { redoMutations, undoMutations } = getDataValidationDiffMutations(pastedUnitId, pastedSubUnitId, ruleMatrix.diffWithAddition(this._sheetDataValidationModel.getRules(pastedUnitId, pastedSubUnitId), additionRules.values()), this._injector, "patched", false);
2388
2371
  if (copyType === COPY_TYPE.CUT) {
2389
2372
  const copySheetRuleMatrix = this._sheetDataValidationModel.getRuleObjectMatrix(copyUnitId, copySubUnitId).clone();
2390
- const deleteRangeStartCell = mapFunc(vCopyRange.startRow, vCopyRange.startColumn);
2391
- const deleteRangeEndCell = mapFunc(vCopyRange.endRow, vCopyRange.endColumn);
2392
2373
  copySheetRuleMatrix.addRangeRules([{
2393
2374
  id: "",
2394
- ranges: [{
2395
- startRow: deleteRangeStartCell.row,
2396
- endRow: deleteRangeEndCell.row,
2397
- startColumn: deleteRangeStartCell.col,
2398
- endColumn: deleteRangeEndCell.col
2399
- }]
2375
+ ranges: virtualizeDiscreteRanges([copyRange]).mapRange(sourceVirtualRange)
2400
2376
  }]);
2401
2377
  const { redoMutations: cutRedos, undoMutations: cutUndos } = getDataValidationDiffMutations(copyUnitId, copySubUnitId, copySheetRuleMatrix.diff(this._sheetDataValidationModel.getRules(copyUnitId, copySubUnitId)), this._injector, "patched", false);
2402
2378
  redoMutations.push(...cutRedos);
@@ -2408,27 +2384,13 @@ let DataValidationCopyPasteController = class DataValidationCopyPasteController
2408
2384
  };
2409
2385
  } else {
2410
2386
  const ruleMatrix = this._sheetDataValidationModel.getRuleObjectMatrix(copyUnitId, copySubUnitId).clone();
2411
- const additionMatrix = new ObjectMatrix();
2412
- const additionRules = /* @__PURE__ */ new Set();
2413
- const { ranges: [vCopyRange, vPastedRange], mapFunc } = virtualizeDiscreteRanges([copyRange, pastedRange]);
2414
- getRepeatRange(vCopyRange, vPastedRange, true).forEach(({ startRange }) => {
2415
- var _this$_copyInfo2;
2416
- (_this$_copyInfo2 = this._copyInfo) === null || _this$_copyInfo2 === void 0 || _this$_copyInfo2.matrix.forValue((row, col, ruleId) => {
2417
- const range = Rectangle.getPositionRange({
2418
- startRow: row,
2419
- endRow: row,
2420
- startColumn: col,
2421
- endColumn: col
2422
- }, startRange);
2423
- const { row: startRow, col: startColumn } = mapFunc(range.startRow, range.startColumn);
2424
- additionMatrix.setValue(startRow, startColumn, ruleId);
2425
- additionRules.add(ruleId);
2426
- });
2427
- });
2428
- const additions = Array.from(additionRules).map((id) => ({
2387
+ const additions = [{
2388
+ id: "",
2389
+ ranges: clearTargetRanges
2390
+ }, ...Array.from(copyInfo.rules, ([id, ranges]) => ({
2429
2391
  id,
2430
- ranges: queryObjectMatrix(additionMatrix, (value) => value === id)
2431
- }));
2392
+ ranges: getTargetRanges(ranges)
2393
+ }))];
2432
2394
  ruleMatrix.addRangeRules(additions);
2433
2395
  const { redoMutations, undoMutations } = getDataValidationDiffMutations(pastedUnitId, pastedSubUnitId, ruleMatrix.diff(this._sheetDataValidationModel.getRules(copyUnitId, copySubUnitId)), this._injector, "patched", false);
2434
2396
  return {
@@ -3164,7 +3126,7 @@ var Dropdown$1 = class extends Shape {
3164
3126
  width: layout.width,
3165
3127
  height: layout.height,
3166
3128
  radius: RADIUS,
3167
- fill: fill || "#ECECEC"
3129
+ fill: fill || "gray.100"
3168
3130
  });
3169
3131
  ctx.translateWithPrecision(4, layout.ba);
3170
3132
  ctx.font = fontString;
@@ -3211,7 +3173,7 @@ let DropdownMultipleWidget = class DropdownMultipleWidget {
3211
3173
  }
3212
3174
  ctx.save();
3213
3175
  ctx.translateWithPrecision(cellBounding.startX + left, cellBounding.startY + top);
3214
- ctx.fillStyle = "#565656";
3176
+ ctx.fillStyle = DROP_DOWN_ICON_COLOR;
3215
3177
  ctx.fill(downPath$1);
3216
3178
  ctx.restore();
3217
3179
  }
@@ -3410,7 +3372,6 @@ const PADDING_V = 1;
3410
3372
  const MARGIN_H = 6;
3411
3373
  const MARGIN_V = 3;
3412
3374
  const RADIUS_BG = 8;
3413
- const DROP_DOWN_ICON_COLOR = "#565656";
3414
3375
  const downPath = new Path2D("M3.32201 4.84556C3.14417 5.05148 2.85583 5.05148 2.67799 4.84556L0.134292 1.90016C-0.152586 1.56798 0.0505937 1 0.456301 1L5.5437 1C5.94941 1 6.15259 1.56798 5.86571 1.90016L3.32201 4.84556Z");
3415
3376
  function calcPadding(cellWidth, cellHeight, fontWidth, fontHeight, vt, ht, margin = true) {
3416
3377
  let paddingTop = 0;
@@ -3481,7 +3442,7 @@ let DropdownWidget = class DropdownWidget {
3481
3442
  }
3482
3443
  ctx.save();
3483
3444
  ctx.translateWithPrecision(cellBounding.startX + left, cellBounding.startY + top);
3484
- ctx.fillStyle = "#565656";
3445
+ ctx.fillStyle = DROP_DOWN_ICON_COLOR;
3485
3446
  ctx.fill(downPath);
3486
3447
  ctx.restore();
3487
3448
  }
@@ -3575,7 +3536,7 @@ let DropdownWidget = class DropdownWidget {
3575
3536
  Rect.drawWith(ctx, {
3576
3537
  width: rectWidth,
3577
3538
  height: rectHeight,
3578
- fill: activeColor || "#ECECEC",
3539
+ fill: activeColor || "gray.100",
3579
3540
  radius: RADIUS_BG
3580
3541
  });
3581
3542
  ctx.save();
@@ -19,20 +19,7 @@ const locale = { "sheets-data-validation-ui": {
19
19
  }
20
20
  },
21
21
  operators: { legal: "نوع قانوني" },
22
- validFail: {
23
- value: "يُرجى إدخال قيمة",
24
- common: "يُرجى إدخال قيمة أو صيغة",
25
- number: "يُرجى إدخال رقم أو صيغة",
26
- formula: "يُرجى إدخال صيغة",
27
- integer: "يُرجى إدخال عدد صحيح أو صيغة",
28
- date: "يُرجى إدخال تاريخ أو صيغة",
29
- list: "يُرجى إدخال خيارات",
30
- listInvalid: "يجب أن يكون مصدر القائمة قائمة مفصولة بالفواصل أو مرجعًا لصف أو عمود واحد",
31
- checkboxEqual: "أدخل قيمًا مختلفة لمحتويات الخلية المحددة وغير المحددة.",
32
- formulaError: "يحتوي نطاق المرجع على بيانات غير مرئية، يُرجى إعادة ضبط النطاق",
33
- listIntersects: "لا يمكن أن يتقاطع النطاق المحدد مع نطاق القواعد",
34
- primitive: "الصيغ غير مسموح بها للقيم المخصصة المحددة وغير المحددة."
35
- },
22
+ validFail: { formulaError: "يحتوي نطاق المرجع على بيانات غير مرئية، يُرجى إعادة ضبط النطاق" },
36
23
  panel: {
37
24
  title: "إدارة التحقق من صحة البيانات",
38
25
  addTitle: "إنشاء تحقق جديد من صحة البيانات",
@@ -55,43 +42,21 @@ const locale = { "sheets-data-validation-ui": {
55
42
  rangeError: "النطاقات غير قانونية",
56
43
  allowBlank: "السماح بالقيم الفارغة"
57
44
  },
58
- any: {
59
- title: "أي قيمة",
60
- error: "محتوى هذه الخلية ينتهك قاعدة التحقق"
61
- },
62
45
  date: { title: "تاريخ" },
63
46
  list: {
64
47
  title: "قائمة منسدلة",
65
- name: "القيمة تحتوي على واحدة من النطاق",
66
- error: "يجب أن يكون الإدخال ضمن النطاق المحدد",
67
- emptyError: "يُرجى إدخال قيمة",
68
48
  add: "إضافة",
69
- dropdown: "تحديد",
70
49
  options: "خيارات",
71
50
  customOptions: "مخصص",
72
51
  refOptions: "من نطاق",
73
- formulaError: "يجب أن يكون مصدر القائمة قائمة بيانات مفصولة بالفواصل، أو مرجعًا لصف أو عمود واحد.",
74
52
  edit: "تحرير"
75
53
  },
76
- listMultiple: {
77
- title: "قائمة منسدلة - متعددة",
78
- dropdown: "تحديد متعدد"
79
- },
80
- textLength: { title: "طول النص" },
81
- decimal: { title: "رقم" },
82
- whole: { title: "عدد صحيح" },
83
54
  checkbox: {
84
55
  title: "خانة اختيار",
85
- error: "محتوى هذه الخلية ينتهك قاعدة التحقق",
86
56
  tips: "استخدم قيمًا مخصصة داخل الخلايا",
87
57
  checked: "القيمة المحددة",
88
58
  unchecked: "القيمة غير المحددة"
89
59
  },
90
- custom: {
91
- title: "صيغة مخصصة",
92
- error: "محتوى هذه الخلية ينتهك قاعدة التحقق",
93
- validFail: "يُرجى إدخال صيغة صالحة"
94
- },
95
60
  alert: {
96
61
  title: "خطأ",
97
62
  ok: "موافق"
@@ -19,20 +19,7 @@ const locale = { "sheets-data-validation-ui": {
19
19
  }
20
20
  },
21
21
  operators: { legal: "és tipus legal" },
22
- validFail: {
23
- value: "Si us plau, introdueix un valor",
24
- common: "Si us plau, introdueix un valor o una fórmula",
25
- number: "Si us plau, introdueix un número o una fórmula",
26
- formula: "Si us plau, introdueix una fórmula",
27
- integer: "Si us plau, introdueix un enter o una fórmula",
28
- date: "Si us plau, introdueix una data o una fórmula",
29
- list: "Si us plau, introdueix opcions",
30
- listInvalid: "La font de la llista ha de ser una llista delimitada o una referència a una sola fila o columna",
31
- checkboxEqual: "Introdueix valors diferents per als continguts de cel·la marcats i desmarcats.",
32
- formulaError: "L’interval de referència conté dades invisibles, ajusta l’interval",
33
- listIntersects: "L’interval seleccionat no pot creuar-se amb l’àmbit de les regles",
34
- primitive: "No es permeten fórmules per a valors personalitzats marcats i desmarcats."
35
- },
22
+ validFail: { formulaError: "L’interval de referència conté dades invisibles, ajusta l’interval" },
36
23
  panel: {
37
24
  title: "Gestió de la validació de dades",
38
25
  addTitle: "Crea una nova validació de dades",
@@ -55,43 +42,21 @@ const locale = { "sheets-data-validation-ui": {
55
42
  rangeError: "Els intervals no són vàlids",
56
43
  allowBlank: "Permet valors en blanc"
57
44
  },
58
- any: {
59
- title: "Qualsevol valor",
60
- error: "El contingut d’aquesta cel·la incompleix la regla de validació"
61
- },
62
45
  date: { title: "Data" },
63
46
  list: {
64
47
  title: "Desplegable",
65
- name: "El valor conté un del rang",
66
- error: "L’entrada ha d’estar dins del rang especificat",
67
- emptyError: "Si us plau, introdueix un valor",
68
48
  add: "Afegeix",
69
- dropdown: "Selecciona",
70
49
  options: "Opcions",
71
50
  customOptions: "Personalitzat",
72
51
  refOptions: "D’un interval",
73
- formulaError: "La font de la llista ha de ser una llista delimitada de dades o una referència a una sola fila o columna.",
74
52
  edit: "Edita"
75
53
  },
76
- listMultiple: {
77
- title: "Desplegable-múltiple",
78
- dropdown: "Selecció múltiple"
79
- },
80
- textLength: { title: "Longitud del text" },
81
- decimal: { title: "Número" },
82
- whole: { title: "Enter" },
83
54
  checkbox: {
84
55
  title: "Casella de selecció",
85
- error: "El contingut d’aquesta cel·la incompleix la seva regla de validació",
86
56
  tips: "Utilitza valors personalitzats dins de les cel·les",
87
57
  checked: "Valor seleccionat",
88
58
  unchecked: "Valor no seleccionat"
89
59
  },
90
- custom: {
91
- title: "Fórmula personalitzada",
92
- error: "El contingut d’aquesta cel·la incompleix la seva regla de validació",
93
- validFail: "Si us plau, introdueix una fórmula vàlida"
94
- },
95
60
  alert: {
96
61
  title: "Error",
97
62
  ok: "OK"
@@ -19,20 +19,7 @@ const locale = { "sheets-data-validation-ui": {
19
19
  }
20
20
  },
21
21
  operators: { legal: "ist gültiger Typ" },
22
- validFail: {
23
- value: "Bitte einen Wert eingeben",
24
- common: "Bitte Wert oder Formel eingeben",
25
- number: "Bitte Zahl oder Formel eingeben",
26
- formula: "Bitte Formel eingeben",
27
- integer: "Bitte Ganzzahl oder Formel eingeben",
28
- date: "Bitte Datum oder Formel eingeben",
29
- list: "Bitte Optionen eingeben",
30
- listInvalid: "Die Listenquelle muss eine durch Trennzeichen getrennte Liste oder ein Bezug auf eine einzelne Zeile oder Spalte sein",
31
- checkboxEqual: "Geben Sie unterschiedliche Werte für angekreuzte und nicht angekreuzte Zelleninhalte ein.",
32
- formulaError: "Der Referenzbereich enthält unsichtbare Daten, bitte passen Sie den Bereich an",
33
- listIntersects: "Der ausgewählte Bereich darf sich nicht mit dem Gültigkeitsbereich der Regeln überschneiden",
34
- primitive: "Formeln sind für benutzerdefinierte angekreuzte und nicht angekreuzte Werte nicht zulässig."
35
- },
22
+ validFail: { formulaError: "Der Referenzbereich enthält unsichtbare Daten, bitte passen Sie den Bereich an" },
36
23
  panel: {
37
24
  title: "Datenüberprüfungsverwaltung",
38
25
  addTitle: "Neue Datenüberprüfung erstellen",
@@ -55,43 +42,21 @@ const locale = { "sheets-data-validation-ui": {
55
42
  rangeError: "Bereiche sind ungültig",
56
43
  allowBlank: "Leere Werte zulassen"
57
44
  },
58
- any: {
59
- title: "Beliebiger Wert",
60
- error: "Der Inhalt dieser Zelle verstößt gegen die Überprüfungsregel"
61
- },
62
45
  date: { title: "Datum" },
63
46
  list: {
64
47
  title: "Dropdown",
65
- name: "Wert enthält einen aus dem Bereich",
66
- error: "Eingabe muss innerhalb des angegebenen Bereichs liegen",
67
- emptyError: "Bitte einen Wert eingeben",
68
48
  add: "Hinzufügen",
69
- dropdown: "Auswählen",
70
49
  options: "Optionen",
71
50
  customOptions: "Benutzerdefiniert",
72
51
  refOptions: "Aus einem Bereich",
73
- formulaError: "Die Listenquelle muss eine durch Trennzeichen getrennte Liste von Daten oder ein Bezug auf eine einzelne Zeile oder Spalte sein.",
74
52
  edit: "Bearbeiten"
75
53
  },
76
- listMultiple: {
77
- title: "Dropdown-Mehrfachauswahl",
78
- dropdown: "Mehrfachauswahl"
79
- },
80
- textLength: { title: "Textlänge" },
81
- decimal: { title: "Zahl" },
82
- whole: { title: "Ganzzahl" },
83
54
  checkbox: {
84
55
  title: "Kontrollkästchen",
85
- error: "Der Inhalt dieser Zelle verstößt gegen die Überprüfungsregel",
86
56
  tips: "Benutzerdefinierte Werte in Zellen verwenden",
87
57
  checked: "Ausgewählter Wert",
88
58
  unchecked: "Nicht ausgewählter Wert"
89
59
  },
90
- custom: {
91
- title: "Benutzerdefinierte Formel",
92
- error: "Der Inhalt dieser Zelle verstößt gegen die Überprüfungsregel",
93
- validFail: "Bitte eine gültige Formel eingeben"
94
- },
95
60
  alert: {
96
61
  title: "Fehler",
97
62
  ok: "OK"