@object-ui/i18n 4.2.1 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,134 @@
1
1
  # @object-ui/i18n
2
2
 
3
+ ## 4.3.0
4
+
5
+ ### Patch Changes
6
+
7
+ - f196cf4: feat(plugin-report): popup picker for groupings + section-aware test ids
8
+
9
+ The matrix/summary "Group by" (rows) and "Columns axis" (cols) sections now
10
+ share the same searchable popup picker as the columns section, with a
11
+ commit-on-select single-pick mode wired through `FieldPickerDialog`.
12
+ - Per-row field buttons display the human-readable field label and open a
13
+ dialog scoped to swap that single field (already-used fields filtered out)
14
+ - "Add grouping" trigger uses the same dialog
15
+ - `GroupingsBuilder` accepts a `testIdPrefix` prop; ReportConfigPanel passes
16
+ `rows-grouping` and `cols-grouping` so both instances no longer share the
17
+ ambiguous `grouping-field-0` testid
18
+ - Bigger row spacing (h-7 / text-xs) — the old `text-[10px]` was unreadable
19
+
20
+ `FieldPickerDialog` gains:
21
+ - `commitOnSelect`: hides the Confirm/Cancel footer; clicking a row commits
22
+ - closes immediately (intended for `singleSelect` flows)
23
+ - `trigger`: custom trigger element override (used by the per-row field button)
24
+
25
+ - ee1cc96: feat(plugin-report): joined-report block editor
26
+
27
+ `type: 'joined'` reports were a black hole in the editor — the type
28
+ selector exposed them but no UI knew how to edit the `blocks` array,
29
+ so users could neither create nor modify joined reports without
30
+ hand-editing JSON.
31
+
32
+ This change adds a `Blocks` section to the report editor, visible only
33
+ when `type === 'joined'`. Each block renders as a collapsible card with
34
+ its own name (required + unique-validated), label, description, block
35
+ type, object override, and reuses the existing `ColumnsEditor`,
36
+ `GroupingsBuilder`, `SpecFilterAdapter`, and `ChartConfig` builders so
37
+ every block behaves like a mini standalone report — matching the
38
+ runtime contract of `JoinedReportRenderer`.
39
+
40
+ Block-level validation is surfaced in the main `ValidationBanner`:
41
+ empty blocks array, missing or duplicate block names, and blocks
42
+ without columns all become editor-time errors so saves stay safe.
43
+
44
+ The non-joined sections (Columns / Rows / Columns axis / Filters /
45
+ Chart) are hidden when `type === 'joined'` since they live per-block
46
+ in the spec.
47
+
48
+ New exports from `@object-ui/plugin-report`:
49
+ - `JoinedBlocksEditor` — standalone component for embedding the
50
+ block editor anywhere.
51
+ - `validateJoinedBlocks` — pure helper returning translated
52
+ problem strings, suitable for custom validation banners.
53
+ - `ColumnsEditor`, `GroupingsBuilder`, `ChartConfig`,
54
+ `SpecFilterAdapter`, `normalizeColumns` are now exported so
55
+ downstream consumers can build their own report-editor surfaces.
56
+
57
+ i18n: added `report.editor.blocks*` / `report.editor.addBlock` /
58
+ `report.editor.removeBlock` / `report.editor.blockName*` /
59
+ `report.editor.blockLabel*` / `report.editor.blockDescription*` /
60
+ `report.editor.validationJoinedNeedsBlocks` /
61
+ `report.editor.validationBlockNameRequired` /
62
+ `report.editor.validationBlockNameDuplicate` /
63
+ `report.editor.validationBlockNeedsColumns` to en + zh.
64
+
65
+ - 0b032be: feat(plugin-report): replace inline column picker with a popup field picker
66
+
67
+ The columns section now opens a Dialog-based multi-select picker (`FieldPickerDialog`)
68
+ instead of rendering the unselected field list inline. The popup supports search,
69
+ batched multi-selection (commit several fields in one click), per-field type badges,
70
+ cancel-discards-pending semantics, and is fully i18n'd. Also fixes a latent
71
+ `ReferenceError: normalizeColumns is not defined` that crashed the editor whenever
72
+ the chart section was expanded.
73
+
74
+ - 115d36a: i18n: native translations for the report editor (`report.editor.*`) in 8 locales — ar, de, es, fr, ja, ko, pt, ru. Previously these locales had the English placeholder strings copy-pasted from `en.ts` and the newer `blocks*`, `addCondition`, `opContains`, `formatCurrency` etc. keys were missing entirely (so the report editor surfaced raw key names in those languages). All locales now carry the full key set with locale-appropriate copy.
75
+ - 4e7bc1b: **Report editor panel overhaul**
76
+
77
+ The report configuration panel is now safe to open on any spec-shape `Report` and only exposes fields that are actually persisted by `@objectstack/spec`.
78
+
79
+ `@object-ui/plugin-report`:
80
+ - Add a bidirectional `SpecFilterAdapter` so `ReportConfigPanel` can edit
81
+ spec `FilterCondition` filters (`{field: value}`, `{field: {$op: value}}`,
82
+ top-level `$and`/`$or`). Complex / nested filters fall back to a
83
+ read-only banner and are preserved verbatim on save.
84
+ - Drop sections that never round-tripped through the spec
85
+ (`conditionalFormatting`, `sections`, `export`, `schedule`, `appearance`)
86
+ and their helper components.
87
+ - Add type-driven section visibility: `tabular` shows Columns/Filters,
88
+ `summary` adds Rows + Chart, `matrix` adds Rows + Columns axis + Chart.
89
+ - New `GroupingsBuilder` covers `groupingsDown`/`groupingsAcross` with
90
+ `sortOrder` and date-aware `dateGranularity` controls.
91
+ - New `ColumnsEditor` lets users reorder picked columns, override labels,
92
+ set aggregates and choose a display format.
93
+ - Chart subset now mirrors the spec: chart `title`, `showLegend`,
94
+ `showDataLabels`, plus `funnel` (scatter removed).
95
+ - Validation banner highlights missing `objectName` and missing
96
+ rows/columns for `matrix`/`summary` reports.
97
+ - All editor labels and hints are i18n-driven (`report.editor.*`).
98
+ - 18 new unit tests cover the filter adapter round-trip.
99
+
100
+ `@object-ui/components`:
101
+ - `FilterBuilder` now guards against malformed external `value` props.
102
+ Previously a spec-shape filter (`{is_active: true}`) would crash the
103
+ component on first render; the builder now falls back to an empty
104
+ AND group whenever `value` is not a valid `FilterGroup`.
105
+
106
+ `@object-ui/i18n`:
107
+ - Add `report.editor.*` strings to `en` and `zh`.
108
+
109
+ - 8442c05: Improve report editor panel usability based on real-user browser testing:
110
+ - **Wider config panel** — the report editor now defaults to a `--config-panel-width`
111
+ of 440px (up from 280px), driven by a new optional `style` prop on
112
+ `ConfigPanelRenderer`. Long field labels, report titles, type labels, and filter
113
+ rows no longer truncate to "Account Na" / "kup" / "ct" / 1-character widths.
114
+ - **Disambiguated "Columns" sections** — for `summary` and `matrix` reports the
115
+ measure list is now labelled **"Values / 度量"** (pivot-style vocabulary) instead
116
+ of "Columns", which previously clashed with the matrix's pivot column axis
117
+ (also called "Columns / 列"). The two sections used to be indistinguishable.
118
+ New i18n key `report.editor.values` / `valuesHint` is shipped for all 10
119
+ locales (en, zh, ar, de, es, fr, ja, ko, pt, ru).
120
+ - **Reordered sections for matrix/summary** — the editor now surfaces _Rows_
121
+ and _Columns_ (the pivot axes) **before** _Values_, mirroring how a business
122
+ user thinks about a pivot table.
123
+ - **Per-row aggregate/format headers** — each column row in `ColumnsEditor` now
124
+ shows small "Aggregate" / "Format" labels above the respective selects, and
125
+ the row uses a 2-line layout so the label input has its own line. The cramped
126
+ 3-dropdowns-side-by-side layout at 10px font is gone.
127
+ - **Searchable field picker** — the "Add columns" list now has a search box,
128
+ a `filtered / total` counter, an empty-state message, and a scrollable bordered
129
+ container. New i18n keys: `report.editor.searchFields`,
130
+ `report.editor.noMatchingFields`.
131
+
3
132
  ## 4.2.1
4
133
 
5
134
  ## 4.2.0
@@ -974,66 +974,100 @@ declare const ar: {
974
974
  readonly first: "First";
975
975
  };
976
976
  readonly editor: {
977
- readonly breadcrumb: "Configuration";
978
- readonly basic: "Basic";
979
- readonly title: "Title";
980
- readonly titlePlaceholder: "e.g. Pipeline by Quarter";
981
- readonly description: "Description";
982
- readonly descriptionPlaceholder: "What does this report show?";
983
- readonly type: "Report type";
984
- readonly typeTabular: "Tabular — flat list";
985
- readonly typeSummary: "Summary — grouped with totals";
986
- readonly typeMatrix: "Matrix — pivot rows × columns";
987
- readonly typeJoined: "Joined — multiple blocks";
988
- readonly typeHelp: "Pick the layout that matches what you want to see.";
989
- readonly data: "Data";
990
- readonly objectName: "Data source";
991
- readonly objectNamePlaceholder: "e.g. opportunity";
992
- readonly objectNameHelp: "Which object should this report query?";
993
- readonly limit: "Row limit";
994
- readonly limitPlaceholder: "e.g. 100";
995
- readonly columns: "Columns";
996
- readonly columnsHint: "Pick which fields appear as columns. Add an aggregate (Sum, Count…) on Summary or Matrix reports.";
997
- readonly filters: "Filters";
998
- readonly filtersHint: "Limit the rows that go into this report.";
999
- readonly filtersComplex: "This report uses an advanced filter that cannot be edited here. Save will keep it unchanged.";
1000
- readonly groupBy: "Group by";
1001
- readonly groupByHint: "Group the data and compute subtotals.";
1002
- readonly rows: "Rows";
1003
- readonly rowsHint: "Group rows by these fields.";
1004
- readonly columnsAxis: "Columns";
1005
- readonly columnsAxisHint: "Pivot these fields across the top.";
1006
- readonly grouping: "Grouping";
1007
- readonly addGrouping: "Add grouping";
1008
- readonly dateGranularity: "Date bucket";
1009
- readonly dateGranularityNone: "(use raw value)";
1010
- readonly day: "Day";
1011
- readonly week: "Week";
1012
- readonly month: "Month";
1013
- readonly quarter: "Quarter";
1014
- readonly year: "Year";
1015
- readonly sortAsc: "Ascending";
1016
- readonly sortDesc: "Descending";
1017
- readonly chart: "Chart";
1018
- readonly chartHint: "Optional visualization rendered alongside the table.";
1019
- readonly chartType: "Chart type";
1020
- readonly chartTitle: "Chart title";
1021
- readonly chartTitlePlaceholder: "Defaults to the report title";
1022
- readonly chartXAxis: "X-axis (category)";
1023
- readonly chartYAxis: "Y-axis (value)";
1024
- readonly chartShowLegend: "Show legend";
1025
- readonly chartShowDataLabels: "Show data labels";
1026
- readonly chartNone: "(no chart)";
1027
- readonly chartBar: "Bar";
1028
- readonly chartLine: "Line";
1029
- readonly chartArea: "Area";
1030
- readonly chartPie: "Pie";
1031
- readonly chartDonut: "Donut";
1032
- readonly chartFunnel: "Funnel";
1033
- readonly validationNeedsObject: "Pick a data source before adding columns.";
1034
- readonly validationMatrixNeedsRowsCols: "Matrix reports need at least one Row and one Column.";
1035
- readonly validationSummaryNeedsRows: "Summary reports need at least one grouping field.";
1036
- readonly noneOption: "(none)";
977
+ readonly breadcrumb: "الإعدادات";
978
+ readonly basic: "أساسي";
979
+ readonly title: "العنوان";
980
+ readonly titlePlaceholder: "مثال: المسار حسب الربع";
981
+ readonly description: "الوصف";
982
+ readonly descriptionPlaceholder: "ماذا يعرض هذا التقرير؟";
983
+ readonly type: "نوع التقرير";
984
+ readonly typeTabular: "جدولي — قائمة مسطّحة";
985
+ readonly typeSummary: "ملخص — مجمّع مع المجاميع";
986
+ readonly typeMatrix: "مصفوفة — محور صفوف × أعمدة";
987
+ readonly typeJoined: "مدمج — كتل متعددة";
988
+ readonly typeHelp: "اختر التخطيط الذي يطابق ما تريد رؤيته.";
989
+ readonly data: "البيانات";
990
+ readonly objectName: "مصدر البيانات";
991
+ readonly objectNamePlaceholder: "مثال: opportunity";
992
+ readonly objectNameHelp: "أي كائن يجب أن يستعلم عنه هذا التقرير؟";
993
+ readonly limit: "حد عدد الصفوف";
994
+ readonly limitPlaceholder: "مثال: 100";
995
+ readonly columns: "الأعمدة";
996
+ readonly columnsHint: "اختر الحقول التي ستظهر كأعمدة. أضف تجميعًا (مجموع، عدد…) في تقارير الملخص أو المصفوفة.";
997
+ readonly filters: "عوامل التصفية";
998
+ readonly filtersHint: "قيّد الصفوف التي تدخل في هذا التقرير.";
999
+ readonly filtersComplex: "يستخدم هذا التقرير عامل تصفية متقدّمًا لا يمكن تحريره هنا. سيُحتفظ به كما هو عند الحفظ.";
1000
+ readonly groupBy: "التجميع حسب";
1001
+ readonly groupByHint: "جمّع البيانات واحسب المجاميع الفرعية.";
1002
+ readonly rows: "الصفوف";
1003
+ readonly rowsHint: "جمّع الصفوف حسب هذه الحقول.";
1004
+ readonly columnsAxis: "الأعمدة";
1005
+ readonly columnsAxisHint: "اعرض هذه الحقول كمحور في الأعلى.";
1006
+ readonly values: "القيم";
1007
+ readonly valuesHint: "الأرقام التي تظهر في كل خلية. اختر حقلاً واحدًا أو أكثر وأضف تجميعًا (مجموع، عدد…).";
1008
+ readonly grouping: "تجميع";
1009
+ readonly addGrouping: "إضافة تجميع";
1010
+ readonly dateGranularity: "دقة التاريخ";
1011
+ readonly dateGranularityNone: "(استخدام القيمة الأصلية)";
1012
+ readonly day: "يوم";
1013
+ readonly week: "أسبوع";
1014
+ readonly month: "شهر";
1015
+ readonly quarter: "ربع";
1016
+ readonly year: "سنة";
1017
+ readonly sortAsc: "تصاعدي";
1018
+ readonly sortDesc: "تنازلي";
1019
+ readonly chart: "الرسم البياني";
1020
+ readonly chartHint: "عرض مرئي اختياري بجانب الجدول.";
1021
+ readonly chartType: "نوع الرسم";
1022
+ readonly chartTitle: "عنوان الرسم";
1023
+ readonly chartTitlePlaceholder: "افتراضيًا يستخدم عنوان التقرير";
1024
+ readonly chartXAxis: "المحور السيني (الفئة)";
1025
+ readonly chartYAxis: "المحور الصادي (القيمة)";
1026
+ readonly chartShowLegend: "إظهار وسيلة الإيضاح";
1027
+ readonly chartShowDataLabels: "إظهار تسميات البيانات";
1028
+ readonly chartNone: "(بدون رسم)";
1029
+ readonly chartBar: "أعمدة";
1030
+ readonly chartLine: "خطي";
1031
+ readonly chartArea: "منطقة";
1032
+ readonly chartPie: "دائري";
1033
+ readonly chartDonut: "حلقي";
1034
+ readonly chartFunnel: "قمعي";
1035
+ readonly validationNeedsObject: "اختر مصدر بيانات قبل إضافة الأعمدة.";
1036
+ readonly validationMatrixNeedsRowsCols: "تتطلب تقارير المصفوفة صفًا وعمودًا واحدًا على الأقل.";
1037
+ readonly validationSummaryNeedsRows: "تتطلب تقارير الملخص حقل تجميع واحدًا على الأقل.";
1038
+ readonly blocks: "الكتل";
1039
+ readonly blocksHint: "كل كتلة هي جدولها أو رسمها البياني الخاص. عوامل تصفية الكتلة تُدمج مع عامل تصفية التقرير بمنطق AND.";
1040
+ readonly addBlock: "إضافة كتلة";
1041
+ readonly removeBlock: "إزالة الكتلة";
1042
+ readonly blockName: "اسم الكتلة";
1043
+ readonly blockNamePlaceholder: "اسم_فريد_للكتلة";
1044
+ readonly blockLabel: "التسمية المعروضة";
1045
+ readonly blockLabelPlaceholder: "تُعرض فوق الكتلة";
1046
+ readonly blockDescription: "الوصف";
1047
+ readonly blockDescriptionPlaceholder: "سياق اختياري لهذه الكتلة";
1048
+ readonly validationJoinedNeedsBlocks: "تتطلب التقارير المدمجة كتلة واحدة على الأقل.";
1049
+ readonly validationBlockNameRequired: "يجب أن يكون لكل كتلة اسم غير فارغ.";
1050
+ readonly validationBlockNameDuplicate: "يجب أن تكون أسماء الكتل فريدة داخل التقرير.";
1051
+ readonly validationBlockNeedsColumns: "تحتاج كل كتلة إلى عمود واحد على الأقل.";
1052
+ readonly noneOption: "(بلا)";
1053
+ readonly addCondition: "إضافة شرط";
1054
+ readonly combineLogic: "الدمج مع";
1055
+ readonly opContains: "يحتوي على";
1056
+ readonly opIsEmpty: "فارغ";
1057
+ readonly opIsNotEmpty: "ليس فارغًا";
1058
+ readonly formatAuto: "تلقائي";
1059
+ readonly formatCurrency: "عملة";
1060
+ readonly formatPercent: "نسبة مئوية";
1061
+ readonly formatInteger: "عدد صحيح";
1062
+ readonly formatDate: "تاريخ";
1063
+ readonly formatDatetime: "تاريخ ووقت";
1064
+ readonly columnLabelPlaceholder: "تجاوز التسمية";
1065
+ readonly aggregateColumn: "تجميع";
1066
+ readonly formatColumn: "تنسيق";
1067
+ readonly addColumns: "إضافة أعمدة";
1068
+ readonly searchFields: "البحث في الحقول…";
1069
+ readonly noMatchingFields: "لا توجد حقول تطابق بحثك.";
1070
+ readonly noFieldsAvailable: "لا توجد حقول متاحة.";
1037
1071
  };
1038
1072
  };
1039
1073
  };
@@ -969,66 +969,100 @@ const ar = {
969
969
  first: 'First',
970
970
  },
971
971
  editor: {
972
- breadcrumb: 'Configuration',
973
- basic: 'Basic',
974
- title: 'Title',
975
- titlePlaceholder: 'e.g. Pipeline by Quarter',
976
- description: 'Description',
977
- descriptionPlaceholder: 'What does this report show?',
978
- type: 'Report type',
979
- typeTabular: 'Tabular — flat list',
980
- typeSummary: 'Summary — grouped with totals',
981
- typeMatrix: 'Matrix — pivot rows × columns',
982
- typeJoined: 'Joined — multiple blocks',
983
- typeHelp: 'Pick the layout that matches what you want to see.',
984
- data: 'Data',
985
- objectName: 'Data source',
986
- objectNamePlaceholder: 'e.g. opportunity',
987
- objectNameHelp: 'Which object should this report query?',
988
- limit: 'Row limit',
989
- limitPlaceholder: 'e.g. 100',
990
- columns: 'Columns',
991
- columnsHint: 'Pick which fields appear as columns. Add an aggregate (Sum, Count…) on Summary or Matrix reports.',
992
- filters: 'Filters',
993
- filtersHint: 'Limit the rows that go into this report.',
994
- filtersComplex: 'This report uses an advanced filter that cannot be edited here. Save will keep it unchanged.',
995
- groupBy: 'Group by',
996
- groupByHint: 'Group the data and compute subtotals.',
997
- rows: 'Rows',
998
- rowsHint: 'Group rows by these fields.',
999
- columnsAxis: 'Columns',
1000
- columnsAxisHint: 'Pivot these fields across the top.',
1001
- grouping: 'Grouping',
1002
- addGrouping: 'Add grouping',
1003
- dateGranularity: 'Date bucket',
1004
- dateGranularityNone: '(use raw value)',
1005
- day: 'Day',
1006
- week: 'Week',
1007
- month: 'Month',
1008
- quarter: 'Quarter',
1009
- year: 'Year',
1010
- sortAsc: 'Ascending',
1011
- sortDesc: 'Descending',
1012
- chart: 'Chart',
1013
- chartHint: 'Optional visualization rendered alongside the table.',
1014
- chartType: 'Chart type',
1015
- chartTitle: 'Chart title',
1016
- chartTitlePlaceholder: 'Defaults to the report title',
1017
- chartXAxis: 'X-axis (category)',
1018
- chartYAxis: 'Y-axis (value)',
1019
- chartShowLegend: 'Show legend',
1020
- chartShowDataLabels: 'Show data labels',
1021
- chartNone: '(no chart)',
1022
- chartBar: 'Bar',
1023
- chartLine: 'Line',
1024
- chartArea: 'Area',
1025
- chartPie: 'Pie',
1026
- chartDonut: 'Donut',
1027
- chartFunnel: 'Funnel',
1028
- validationNeedsObject: 'Pick a data source before adding columns.',
1029
- validationMatrixNeedsRowsCols: 'Matrix reports need at least one Row and one Column.',
1030
- validationSummaryNeedsRows: 'Summary reports need at least one grouping field.',
1031
- noneOption: '(none)',
972
+ breadcrumb: 'الإعدادات',
973
+ basic: 'أساسي',
974
+ title: 'العنوان',
975
+ titlePlaceholder: 'مثال: المسار حسب الربع',
976
+ description: 'الوصف',
977
+ descriptionPlaceholder: 'ماذا يعرض هذا التقرير؟',
978
+ type: 'نوع التقرير',
979
+ typeTabular: 'جدولي — قائمة مسطّحة',
980
+ typeSummary: 'ملخص — مجمّع مع المجاميع',
981
+ typeMatrix: 'مصفوفة — محور صفوف × أعمدة',
982
+ typeJoined: 'مدمج — كتل متعددة',
983
+ typeHelp: 'اختر التخطيط الذي يطابق ما تريد رؤيته.',
984
+ data: 'البيانات',
985
+ objectName: 'مصدر البيانات',
986
+ objectNamePlaceholder: 'مثال: opportunity',
987
+ objectNameHelp: 'أي كائن يجب أن يستعلم عنه هذا التقرير؟',
988
+ limit: 'حد عدد الصفوف',
989
+ limitPlaceholder: 'مثال: 100',
990
+ columns: 'الأعمدة',
991
+ columnsHint: 'اختر الحقول التي ستظهر كأعمدة. أضف تجميعًا (مجموع، عدد…) في تقارير الملخص أو المصفوفة.',
992
+ filters: 'عوامل التصفية',
993
+ filtersHint: 'قيّد الصفوف التي تدخل في هذا التقرير.',
994
+ filtersComplex: 'يستخدم هذا التقرير عامل تصفية متقدّمًا لا يمكن تحريره هنا. سيُحتفظ به كما هو عند الحفظ.',
995
+ groupBy: 'التجميع حسب',
996
+ groupByHint: 'جمّع البيانات واحسب المجاميع الفرعية.',
997
+ rows: 'الصفوف',
998
+ rowsHint: 'جمّع الصفوف حسب هذه الحقول.',
999
+ columnsAxis: 'الأعمدة',
1000
+ columnsAxisHint: 'اعرض هذه الحقول كمحور في الأعلى.',
1001
+ values: 'القيم',
1002
+ valuesHint: 'الأرقام التي تظهر في كل خلية. اختر حقلاً واحدًا أو أكثر وأضف تجميعًا (مجموع، عدد…).',
1003
+ grouping: 'تجميع',
1004
+ addGrouping: 'إضافة تجميع',
1005
+ dateGranularity: 'دقة التاريخ',
1006
+ dateGranularityNone: '(استخدام القيمة الأصلية)',
1007
+ day: 'يوم',
1008
+ week: 'أسبوع',
1009
+ month: 'شهر',
1010
+ quarter: 'ربع',
1011
+ year: 'سنة',
1012
+ sortAsc: 'تصاعدي',
1013
+ sortDesc: 'تنازلي',
1014
+ chart: 'الرسم البياني',
1015
+ chartHint: 'عرض مرئي اختياري بجانب الجدول.',
1016
+ chartType: 'نوع الرسم',
1017
+ chartTitle: 'عنوان الرسم',
1018
+ chartTitlePlaceholder: 'افتراضيًا يستخدم عنوان التقرير',
1019
+ chartXAxis: 'المحور السيني (الفئة)',
1020
+ chartYAxis: 'المحور الصادي (القيمة)',
1021
+ chartShowLegend: 'إظهار وسيلة الإيضاح',
1022
+ chartShowDataLabels: 'إظهار تسميات البيانات',
1023
+ chartNone: '(بدون رسم)',
1024
+ chartBar: 'أعمدة',
1025
+ chartLine: 'خطي',
1026
+ chartArea: 'منطقة',
1027
+ chartPie: 'دائري',
1028
+ chartDonut: 'حلقي',
1029
+ chartFunnel: 'قمعي',
1030
+ validationNeedsObject: 'اختر مصدر بيانات قبل إضافة الأعمدة.',
1031
+ validationMatrixNeedsRowsCols: 'تتطلب تقارير المصفوفة صفًا وعمودًا واحدًا على الأقل.',
1032
+ validationSummaryNeedsRows: 'تتطلب تقارير الملخص حقل تجميع واحدًا على الأقل.',
1033
+ blocks: 'الكتل',
1034
+ blocksHint: 'كل كتلة هي جدولها أو رسمها البياني الخاص. عوامل تصفية الكتلة تُدمج مع عامل تصفية التقرير بمنطق AND.',
1035
+ addBlock: 'إضافة كتلة',
1036
+ removeBlock: 'إزالة الكتلة',
1037
+ blockName: 'اسم الكتلة',
1038
+ blockNamePlaceholder: 'اسم_فريد_للكتلة',
1039
+ blockLabel: 'التسمية المعروضة',
1040
+ blockLabelPlaceholder: 'تُعرض فوق الكتلة',
1041
+ blockDescription: 'الوصف',
1042
+ blockDescriptionPlaceholder: 'سياق اختياري لهذه الكتلة',
1043
+ validationJoinedNeedsBlocks: 'تتطلب التقارير المدمجة كتلة واحدة على الأقل.',
1044
+ validationBlockNameRequired: 'يجب أن يكون لكل كتلة اسم غير فارغ.',
1045
+ validationBlockNameDuplicate: 'يجب أن تكون أسماء الكتل فريدة داخل التقرير.',
1046
+ validationBlockNeedsColumns: 'تحتاج كل كتلة إلى عمود واحد على الأقل.',
1047
+ noneOption: '(بلا)',
1048
+ addCondition: 'إضافة شرط',
1049
+ combineLogic: 'الدمج مع',
1050
+ opContains: 'يحتوي على',
1051
+ opIsEmpty: 'فارغ',
1052
+ opIsNotEmpty: 'ليس فارغًا',
1053
+ formatAuto: 'تلقائي',
1054
+ formatCurrency: 'عملة',
1055
+ formatPercent: 'نسبة مئوية',
1056
+ formatInteger: 'عدد صحيح',
1057
+ formatDate: 'تاريخ',
1058
+ formatDatetime: 'تاريخ ووقت',
1059
+ columnLabelPlaceholder: 'تجاوز التسمية',
1060
+ aggregateColumn: 'تجميع',
1061
+ formatColumn: 'تنسيق',
1062
+ addColumns: 'إضافة أعمدة',
1063
+ searchFields: 'البحث في الحقول…',
1064
+ noMatchingFields: 'لا توجد حقول تطابق بحثك.',
1065
+ noFieldsAvailable: 'لا توجد حقول متاحة.',
1032
1066
  },
1033
1067
  },
1034
1068
  };