@alfadocs/ui-kit 1.64.0 → 1.66.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.
Files changed (152) hide show
  1. package/dist/_chunks/{anamnesis-summary-rows-DFWws7mM.js → anamnesis-summary-rows-BIfw890v.js} +3 -3
  2. package/dist/_chunks/{antenatal-schedule-timeline-DuaAQj1m.js → antenatal-schedule-timeline-DW_qkGo1.js} +3 -3
  3. package/dist/_chunks/{appointment-timeline-DaHKV81s.js → appointment-timeline-CCqjORFb.js} +2 -2
  4. package/dist/_chunks/{balance-badge-cell-ejODZU7R.js → balance-badge-cell-DZNthHO1.js} +3 -3
  5. package/dist/_chunks/{booking-CGhOtxad.js → booking-DkjatiXc.js} +5 -5
  6. package/dist/_chunks/{calendar-DCr65Kt1.js → calendar-BhN-jisv.js} +43 -40
  7. package/dist/_chunks/{calendar-workspace-BArq9vkD.js → calendar-workspace-Cp8yTZ1g.js} +9 -9
  8. package/dist/_chunks/chart-CwmyCuWe.js +1340 -0
  9. package/dist/_chunks/{clinical-note-card-D2bbWksq.js → clinical-note-card-BnFTIs6x.js} +2 -2
  10. package/dist/_chunks/{contact-profile-card-B4sjoIqf.js → contact-profile-card-C4-OCshj.js} +2 -2
  11. package/dist/_chunks/{cycle-calculator-D-rwX9Pj.js → cycle-calculator-D2Y4LvgC.js} +3 -3
  12. package/dist/_chunks/{data-table-C6ft3fSd.js → data-table-COoCQ4n_.js} +2 -2
  13. package/dist/_chunks/{date-picker-BSZuKo13.js → date-picker-KcoNNsM0.js} +3 -3
  14. package/dist/_chunks/{date-picker-variants-BnF-sHzq.js → date-picker-variants-DN37Oj5-.js} +2 -2
  15. package/dist/_chunks/{date-range-picker-CFk-5O3R.js → date-range-picker-CjcjUJLW.js} +4 -4
  16. package/dist/_chunks/{date-time-picker-CjxTkblD.js → date-time-picker-BVQNZ4yC.js} +3 -3
  17. package/dist/_chunks/{due-date-calculator-DTfxFJCM.js → due-date-calculator-41uZDkVR.js} +4 -4
  18. package/dist/_chunks/escape-html-Cn9Fao6a.js +7 -0
  19. package/dist/_chunks/{file-manager-w1UEprw8.js → file-manager-RiV7-OEE.js} +2 -2
  20. package/dist/_chunks/{format-price-BKle6Xwt.js → format-price-BcFBa-WP.js} +2 -2
  21. package/dist/_chunks/{freemium-paywall-r-z48YaT.js → freemium-paywall-DKJHRFpp.js} +2 -2
  22. package/dist/_chunks/{gestational-age-calculator-BnCAL5a-.js → gestational-age-calculator-CZYa2D6m.js} +5 -5
  23. package/dist/_chunks/{hcg-doubling-DVDiqFyp.js → hcg-doubling-DwTcjfke.js} +3 -3
  24. package/dist/_chunks/heatmap-C1TeC7wT.js +3650 -0
  25. package/dist/_chunks/intl-locale-FWh-Y5_3.js +33 -0
  26. package/dist/_chunks/{kit-extensions-RnddkrXn.js → kit-extensions-DWs1UEXb.js} +4 -4
  27. package/dist/_chunks/{link-cell-renderer-dtEYlxi2.js → link-cell-renderer-CtTsvfPY.js} +2 -2
  28. package/dist/_chunks/{money-CeClE1nH.js → money-Tsczpjfz.js} +2 -2
  29. package/dist/_chunks/{note-attachment-D8V7PUiR.js → note-attachment-DIlIQ7JF.js} +14 -16
  30. package/dist/_chunks/{note-timeline-CwxPQ2Ak.js → note-timeline-DDqNU46n.js} +2 -2
  31. package/dist/_chunks/{notes-panel-BRLc2ozF.js → notes-panel-uEGIL7mi.js} +2 -2
  32. package/dist/_chunks/{parse-jZ-i8Xgj.js → parse-UB4FJGNA.js} +2 -2
  33. package/dist/_chunks/{patient-details-BY8Rwwpi.js → patient-details-4P1vA9Ls.js} +2 -2
  34. package/dist/_chunks/{patient-field-row-C8ymfffP.js → patient-field-row-CBXhlfGD.js} +2 -2
  35. package/dist/_chunks/{patient-summary-card-cmqjIXMk.js → patient-summary-card-CuDLo8MP.js} +2 -2
  36. package/dist/_chunks/{payment-form-i90DUuNK.js → payment-form-C3dGY7v4.js} +2 -2
  37. package/dist/_chunks/{practice-results-B8L9ZmtR.js → practice-results-8h2Utpt3.js} +2 -2
  38. package/dist/_chunks/{pregnancy-dating-D2XTELiw.js → pregnancy-dating-B8wo4l_r.js} +5 -5
  39. package/dist/_chunks/{radiograph-panel.agent-DDNUo4Ul.js → radiograph-panel.agent-8Ewv8-d7.js} +3 -3
  40. package/dist/_chunks/{sparkline-pkGPCXbl.js → sparkline-SnniCoCl.js} +72 -64
  41. package/dist/_chunks/subDays-xH7cpN6B.js +8 -0
  42. package/dist/_chunks/{task-editor-DoiOzNiC.js → task-editor-CifOznfq.js} +2 -2
  43. package/dist/_chunks/{treatment-receipt-BdJ36vNP.js → treatment-receipt-Cpm8tqQN.js} +2 -2
  44. package/dist/_chunks/{use-appointment-details-read-D6Gb_OuN.js → use-appointment-details-read-B-FEWbQM.js} +5 -5
  45. package/dist/agent-catalog.json +1 -1
  46. package/dist/components/_shared/escape-html.d.ts +7 -0
  47. package/dist/components/_shared/intl-locale.d.ts +5 -3
  48. package/dist/components/_shared/use-apex-radial-centre.d.ts +22 -0
  49. package/dist/components/appointment-details-panel/index.js +1 -1
  50. package/dist/components/appointment-timeline/index.js +1 -1
  51. package/dist/components/booking/index.js +1 -1
  52. package/dist/components/calendar/index.js +1 -1
  53. package/dist/components/chart/chart.d.ts +8 -5
  54. package/dist/components/chart/index.js +1 -1
  55. package/dist/components/clinical-note-card/index.js +1 -1
  56. package/dist/components/contact-profile-card/index.js +1 -1
  57. package/dist/components/cycle-calculator/index.js +1 -1
  58. package/dist/components/data-table/index.js +2 -2
  59. package/dist/components/date-picker/index.js +1 -1
  60. package/dist/components/date-range-picker/index.js +1 -1
  61. package/dist/components/date-time-picker/index.js +1 -1
  62. package/dist/components/due-date-calculator/index.js +2 -2
  63. package/dist/components/file-manager/index.js +1 -1
  64. package/dist/components/freemium-paywall/index.js +1 -1
  65. package/dist/components/gestational-age-calculator/index.js +1 -1
  66. package/dist/components/hcg-doubling/index.js +1 -1
  67. package/dist/components/heatmap/heatmap-context.d.ts +3 -0
  68. package/dist/components/heatmap/heatmap-disclosure.d.ts +67 -0
  69. package/dist/components/heatmap/heatmap-grid.d.ts +1 -1
  70. package/dist/components/heatmap/heatmap-legend.d.ts +5 -2
  71. package/dist/components/heatmap/heatmap-model.d.ts +111 -16
  72. package/dist/components/heatmap/heatmap-table-view.d.ts +3 -2
  73. package/dist/components/heatmap/heatmap.d.ts +34 -6
  74. package/dist/components/heatmap/index.d.ts +1 -1
  75. package/dist/components/heatmap/index.js +1 -1
  76. package/dist/components/money/index.js +1 -1
  77. package/dist/components/note-timeline/index.js +1 -1
  78. package/dist/components/notes-panel/index.js +1 -1
  79. package/dist/components/patient-details/index.js +1 -1
  80. package/dist/components/patient-summary-card/index.js +1 -1
  81. package/dist/components/patient-table/index.js +1 -1
  82. package/dist/components/payment-form/index.js +1 -1
  83. package/dist/components/practice-results/index.js +1 -1
  84. package/dist/components/pregnancy-dating/index.js +1 -1
  85. package/dist/components/radiograph-panel/index.js +1 -1
  86. package/dist/components/rich-text-editor/index.js +1 -1
  87. package/dist/components/sparkline/index.js +1 -1
  88. package/dist/components/task-editor/index.js +1 -1
  89. package/dist/components/treatment-receipt/index.js +1 -1
  90. package/dist/i18n/locales/ar.d.ts +2 -0
  91. package/dist/i18n/locales/ar.js +2 -0
  92. package/dist/i18n/locales/de.d.ts +2 -0
  93. package/dist/i18n/locales/de.js +2 -0
  94. package/dist/i18n/locales/el.d.ts +2 -0
  95. package/dist/i18n/locales/el.js +2 -0
  96. package/dist/i18n/locales/en.d.ts +2 -0
  97. package/dist/i18n/locales/en.js +2 -0
  98. package/dist/i18n/locales/es.d.ts +2 -0
  99. package/dist/i18n/locales/es.js +2 -0
  100. package/dist/i18n/locales/fr.d.ts +2 -0
  101. package/dist/i18n/locales/fr.js +2 -0
  102. package/dist/i18n/locales/hi.d.ts +2 -0
  103. package/dist/i18n/locales/hi.js +2 -0
  104. package/dist/i18n/locales/it.d.ts +2 -0
  105. package/dist/i18n/locales/it.js +2 -0
  106. package/dist/i18n/locales/ja.d.ts +2 -0
  107. package/dist/i18n/locales/ja.js +2 -0
  108. package/dist/i18n/locales/nl.d.ts +2 -0
  109. package/dist/i18n/locales/nl.js +2 -0
  110. package/dist/i18n/locales/pl.d.ts +2 -0
  111. package/dist/i18n/locales/pl.js +2 -0
  112. package/dist/i18n/locales/pt.d.ts +2 -0
  113. package/dist/i18n/locales/pt.js +2 -0
  114. package/dist/i18n/locales/ro.d.ts +2 -0
  115. package/dist/i18n/locales/ro.js +2 -0
  116. package/dist/i18n/locales/ru.d.ts +2 -0
  117. package/dist/i18n/locales/ru.js +2 -0
  118. package/dist/i18n/locales/sq.d.ts +2 -0
  119. package/dist/i18n/locales/sq.js +2 -0
  120. package/dist/i18n/locales/sv.d.ts +2 -0
  121. package/dist/i18n/locales/sv.js +2 -0
  122. package/dist/i18n/locales/tr.d.ts +2 -0
  123. package/dist/i18n/locales/tr.js +2 -0
  124. package/dist/i18n/locales/zh.d.ts +2 -0
  125. package/dist/i18n/locales/zh.js +2 -0
  126. package/dist/index.js +36 -36
  127. package/dist/locales/ar.json +2 -0
  128. package/dist/locales/de.json +2 -0
  129. package/dist/locales/el.json +2 -0
  130. package/dist/locales/en.json +2 -0
  131. package/dist/locales/es.json +2 -0
  132. package/dist/locales/fr.json +2 -0
  133. package/dist/locales/hi.json +2 -0
  134. package/dist/locales/it.json +2 -0
  135. package/dist/locales/ja.json +2 -0
  136. package/dist/locales/nl.json +2 -0
  137. package/dist/locales/pl.json +2 -0
  138. package/dist/locales/pt.json +2 -0
  139. package/dist/locales/ro.json +2 -0
  140. package/dist/locales/ru.json +2 -0
  141. package/dist/locales/sq.json +2 -0
  142. package/dist/locales/sv.json +2 -0
  143. package/dist/locales/tr.json +2 -0
  144. package/dist/locales/zh.json +2 -0
  145. package/dist/patterns/anamnesis/index.js +1 -1
  146. package/dist/patterns/calendar/index.js +1 -1
  147. package/dist/tokens.css +15 -1
  148. package/package.json +1 -1
  149. package/dist/_chunks/chart-CzTF8yhH.js +0 -1123
  150. package/dist/_chunks/heatmap-DuDfTIII.js +0 -2865
  151. package/dist/_chunks/intl-locale-ySteXlDD.js +0 -23
  152. package/dist/_chunks/subDays-DlMw8Xng.js +0 -8
@@ -1,4 +1,4 @@
1
- import { H, M as g, a as o } from "../../_chunks/hcg-doubling-DVDiqFyp.js";
1
+ import { H, M as g, a as o } from "../../_chunks/hcg-doubling-DwTcjfke.js";
2
2
  export {
3
3
  H as HcgDoubling,
4
4
  g as MINIMAL_48H_RISE_PERCENT,
@@ -8,6 +8,9 @@ export interface HeatmapContextValue {
8
8
  describer: HeatmapDescriber;
9
9
  /** True when some cells fall below `minCount`, so the legend explains it. */
10
10
  hasLowSample: boolean;
11
+ /** True when a total the grid draws is withheld to protect small
12
+ * numbers. It may rest on many records, so the legend keys it apart. */
13
+ hasWithheldTotal: boolean;
11
14
  /** True when some cells have no data. */
12
15
  hasEmpty: boolean;
13
16
  /** The sample threshold, when one is set. */
@@ -0,0 +1,67 @@
1
+ /**
2
+ * How narrow a hidden cell's interval may be.
3
+ * - `rate`: the numerator lies in [0, records]. The interval must span at
4
+ * least half that range and, for whole numbers, at least two values.
5
+ * - `scaled`: values are non-negative with no upper bound. The interval
6
+ * must reach down to half its own top or below (and not be a point).
7
+ * - `free`: values have no bounds. The cell must not be pinned.
8
+ */
9
+ export type ProtectionMode = 'rate' | 'scaled' | 'free';
10
+ /** A hidden cell: an arc from its row node to its column-side node. */
11
+ export interface AuditCell {
12
+ from: number;
13
+ to: number;
14
+ /** Bounds of its unknown, in audit units. */
15
+ lo: number;
16
+ hi: number;
17
+ /** The records behind it (its count). */
18
+ records: number;
19
+ }
20
+ /** A total: an arc of the tree above or below the cells. */
21
+ export interface AuditTotal {
22
+ from: number;
23
+ to: number;
24
+ /** The hidden part of the total, in audit units, when it is shown. */
25
+ value: number;
26
+ /** Shown before the audit: drawn, with a value, and not withheld. */
27
+ shown: boolean;
28
+ /** The records behind the total: what withholding it loses. */
29
+ records: number;
30
+ }
31
+ export interface AuditProblem {
32
+ nodeCount: number;
33
+ /** The sink and source the closing arc joins (sink to source). */
34
+ sink: number;
35
+ source: number;
36
+ cells: readonly AuditCell[];
37
+ totals: readonly AuditTotal[];
38
+ /** For each cell, the totals whose scope holds it. */
39
+ cellTotals: readonly (readonly number[])[];
40
+ mode: ProtectionMode;
41
+ /** Whole-number data: numerators and shown totals are integers. */
42
+ integral: boolean;
43
+ minCount: number;
44
+ }
45
+ /**
46
+ * A cap on the audit's work, in edges looked at, so a very large grid
47
+ * cannot stall the page: past it, every total that holds a hidden cell is
48
+ * withheld, which is always safe. Counted, not timed, so the same data
49
+ * always gives the same result on every device. A 60 x 24 grid with 6
50
+ * groups and 10% of cells hidden uses 2.5 million for rates and 3.15
51
+ * million for plain sums, about half the cap (measured at about 12 ms in
52
+ * Chromium on a desktop, not a guarantee); with 20% hidden, or 100 rows,
53
+ * it runs out. Tests hold the count, not the time. Running out while offering totals back keeps the safe set already
54
+ * found; running out before that takes the safe rule. When rates are
55
+ * audited twice (printed and exact), the two passes share the cap.
56
+ */
57
+ export declare const AUDIT_WORK_LIMIT = 5000000;
58
+ /**
59
+ * Which totals may be shown: true at index i when total i may be shown.
60
+ * Starts from `total.shown` and only ever withholds more. `spentBefore`
61
+ * carries the work of an earlier pass over the same data, so that passes
62
+ * share one budget (see auditWorkSpent).
63
+ */
64
+ export declare function secureTotals(problem: AuditProblem, spentBefore?: number): boolean[];
65
+ /** The work the last secureTotals call ended on, for a following pass. */
66
+ export declare function auditWorkSpent(): number;
67
+ //# sourceMappingURL=heatmap-disclosure.d.ts.map
@@ -26,6 +26,7 @@ export interface HeatmapGridProps {
26
26
  palette: HeatmapPalette;
27
27
  describer: HeatmapDescriber;
28
28
  showValues: boolean;
29
+ /** Every total, withheld ones already reduced to a value-less cell. */
29
30
  totals: HeatmapTotals | null;
30
31
  rowTotals: HeatmapAggregate | false;
31
32
  columnTotals: HeatmapAggregate | false;
@@ -33,7 +34,6 @@ export interface HeatmapGridProps {
33
34
  groupColumnMethod: HeatmapAggregate;
34
35
  /** Each group's public id: what DOM hooks carry, never a label. */
35
36
  groupIds: ReadonlyMap<string, string>;
36
- minCount?: number;
37
37
  selectionMode: HeatmapSelectionMode;
38
38
  /** Selection keys (row id + column id) of the selected cells. */
39
39
  selected: ReadonlySet<string>;
@@ -17,8 +17,11 @@ export interface HeatmapLegendProps {
17
17
  valueFormatter?: (value: number) => string;
18
18
  /** Show the key for empty cells. Inside a Heatmap: when any cell is empty. */
19
19
  showEmpty?: boolean;
20
- /** Show the key for low-sample cells. Inside a Heatmap: when any is. */
20
+ /** Show the key for low-sample cells. Inside a Heatmap: when any cell is. */
21
21
  showLowSample?: boolean;
22
+ /** Show the key for totals withheld to protect small numbers. Inside a
23
+ * Heatmap: when any total it draws is withheld. */
24
+ showWithheldTotal?: boolean;
22
25
  /** The sample threshold, named in the low-sample key. Inside a Heatmap it
23
26
  * defaults to the Heatmap's `minCount`. */
24
27
  minCount?: number;
@@ -26,7 +29,7 @@ export interface HeatmapLegendProps {
26
29
  }
27
30
  /**
28
31
  * Heatmap.Legend: the colour steps with the low and high ends of the scale,
29
- * plus keys for empty and low-sample cells. A diverging scale shows its
32
+ * plus keys for empty and low-sample cells and withheld totals. A diverging scale shows its
30
33
  * midpoint between the two hues as a neutral swatch carrying the midpoint
31
34
  * value, the colour of a cell exactly on it. Inside a Heatmap it reads the
32
35
  * Heatmap's scale; render it elsewhere with `legend={false}` on the Heatmap
@@ -1,4 +1,4 @@
1
- import { type AggregateResult, type HeatmapAggregate } from './heatmap-scale';
1
+ import { type HeatmapAggregate } from './heatmap-scale';
2
2
  /** One row of the heatmap. */
3
3
  export interface HeatmapRow {
4
4
  /** Stable, opaque id. Emitted in DOM hooks, so never a name. */
@@ -46,7 +46,10 @@ export interface HeatmapGroup {
46
46
  export declare function publicGroupIds(rows: readonly HeatmapRow[], groups: readonly HeatmapGroup[] | undefined): Map<string, string>;
47
47
  /** The data behind one cell. */
48
48
  export interface HeatmapCellData {
49
- /** The value to colour. `null` means no data. */
49
+ /**
50
+ * The value to colour. `null` means no data, or, with a `count` above 0 but
51
+ * below `minCount`, a value withheld as too few to show.
52
+ */
50
53
  value: number | null;
51
54
  /**
52
55
  * How many records the value rests on (the denominator of a rate). Weights
@@ -94,6 +97,10 @@ export interface ModelCell {
94
97
  count?: number;
95
98
  label?: string;
96
99
  status: HeatmapCellStatus;
100
+ /** A total withheld to protect hidden cells. Its status stays
101
+ * `low-sample`, but it may rest on many records, so it is worded apart
102
+ * from a cell that is too few to show. */
103
+ withheld?: true;
97
104
  }
98
105
  /** How rows are ordered (within their group when grouped). */
99
106
  export type HeatmapSortRows = 'none' | 'label' | 'total-asc' | 'total-desc';
@@ -107,26 +114,114 @@ export declare function buildMatrix(rows: readonly HeatmapRow[], columns: readon
107
114
  export declare function shownValues(matrix: readonly ModelCell[][]): number[];
108
115
  /** Whether at least one cell carries data (a value or a low sample). */
109
116
  export declare function hasAnyData(matrix: readonly ModelCell[][]): boolean;
117
+ /**
118
+ * Which total `getTotal` is asked for, with the rows, columns and group it
119
+ * covers. `method` is how the kit combines the cells for it: the
120
+ * `rowTotals` method for a row, a group and the grand total, the
121
+ * `columnTotals` method for a column, and the column method (else the row
122
+ * method) for a group header cell.
123
+ */
124
+ export type HeatmapTotalScope = {
125
+ /** A row's total, in the totals column. */
126
+ kind: 'row';
127
+ method: HeatmapAggregate;
128
+ row: HeatmapRow;
129
+ rowId: string;
130
+ /** Index into the `rows` prop. */
131
+ rowIndex: number;
132
+ } | {
133
+ /** A column's total, in the totals row. */
134
+ kind: 'column';
135
+ method: HeatmapAggregate;
136
+ column: HeatmapColumn;
137
+ columnId: string | number;
138
+ /** Index into the `columns` prop. */
139
+ columnIndex: number;
140
+ } | {
141
+ /** A group's total, in the totals column of its header row. */
142
+ kind: 'group';
143
+ method: HeatmapAggregate;
144
+ /** The id the group's rows carry in `group`. */
145
+ groupId: string;
146
+ /** The group's entry in `groups`, when it has one. */
147
+ group?: HeatmapGroup;
148
+ /** The group's rows, in the order of the `rows` prop. */
149
+ rows: readonly HeatmapRow[];
150
+ rowIndexes: readonly number[];
151
+ } | {
152
+ /** One column's total within a group, in the group's header row. */
153
+ kind: 'group-column';
154
+ method: HeatmapAggregate;
155
+ groupId: string;
156
+ group?: HeatmapGroup;
157
+ rows: readonly HeatmapRow[];
158
+ rowIndexes: readonly number[];
159
+ column: HeatmapColumn;
160
+ columnId: string | number;
161
+ columnIndex: number;
162
+ } | {
163
+ /** The grand total of every cell, in the corner. */
164
+ kind: 'grand';
165
+ method: HeatmapAggregate;
166
+ };
167
+ /** Returns a total, or undefined to let the kit work it out from the cells. */
168
+ export type HeatmapGetTotal = (scope: HeatmapTotalScope) => HeatmapCellInput | undefined;
169
+ /**
170
+ * Every margin, ready to render. A withheld total is `{ value: null,
171
+ * status: 'low-sample', withheld: true }`: no value and no count, so
172
+ * nothing that reads it (the grid, the table view, a sort by total) can
173
+ * pass one on.
174
+ */
110
175
  export interface HeatmapTotals {
111
176
  /** Per row index (props order), by the row method. */
112
- rows: AggregateResult[];
177
+ rows: ModelCell[];
113
178
  /** Per column index, by the column method. */
114
- columns: AggregateResult[];
179
+ columns: ModelCell[];
115
180
  /** Every cell, by the row method (it sits in the row-totals column). */
116
- grand: AggregateResult;
117
- /** Per group id: one result per column, by the group column method. */
118
- groupColumns: Map<string, AggregateResult[]>;
119
- /** Per group id: every cell in the group, by the row method (it sits in
120
- * the row-totals column). */
121
- groups: Map<string, AggregateResult>;
181
+ grand: ModelCell;
182
+ /** Per group id, whenever rows carry a group: one per column, by the
183
+ * group column method. */
184
+ groupColumns: Map<string, ModelCell[]>;
185
+ /** Per group id, whenever rows carry a group: every cell in the group,
186
+ * by the row method (it sits in the row-totals column). */
187
+ groups: Map<string, ModelCell>;
188
+ }
189
+ /** Which totals the viewer sees: drawn, or, for rows, ordering the rows. */
190
+ export interface ShownTotals {
191
+ rows: boolean;
192
+ columns: boolean;
193
+ grand: boolean;
194
+ groups: boolean;
195
+ groupColumns: boolean;
196
+ }
197
+ export interface TotalsOptions {
198
+ rowMethod: HeatmapAggregate;
199
+ columnMethod: HeatmapAggregate;
200
+ groupColumnMethod: HeatmapAggregate;
201
+ groups?: readonly HeatmapGroup[];
202
+ minCount?: number;
203
+ getTotal?: HeatmapGetTotal;
204
+ /** `rate` values are proportions of their count. Default `number`. */
205
+ valueType?: 'number' | 'rate';
206
+ /** Which totals the viewer sees. Default: every one. */
207
+ shown?: ShownTotals;
122
208
  }
123
209
  /**
124
- * Works out every margin. A total in the row-totals column (a row's, a
125
- * group's, the grand total) uses the row method, so the column means one
126
- * thing; a group's per-column totals use the group column method. Low-sample
127
- * cells count: their data is real, only too thin to show on its own.
210
+ * Works out every margin, then withholds whatever would let someone work
211
+ * out a hidden cell (status `low-sample`), alone or with any combination
212
+ * of the other totals shown, the shown cells and the known bounds. A total
213
+ * in the row-totals column (a row's, a group's, the grand total) uses the
214
+ * row method, so the column means one thing; a group's per-column totals
215
+ * use the group column method. Low-sample cells count: their data is real,
216
+ * only too thin to show on its own. `getTotal` may supply any total
217
+ * instead; the same rule applies.
218
+ *
219
+ * Primary: a total under minCount on its own count, one the kit would work
220
+ * out over a value it never had, and one whose hidden cells hold fewer
221
+ * than minCount records. Secondary: the disclosure audit in
222
+ * heatmap-disclosure.ts, over every total the viewer sees.
128
223
  */
129
- export declare function computeTotals(matrix: readonly ModelCell[][], rows: readonly HeatmapRow[], columnCount: number, rowMethod: HeatmapAggregate, columnMethod: HeatmapAggregate, groupColumnMethod: HeatmapAggregate): HeatmapTotals;
224
+ export declare function computeTotals(matrix: readonly ModelCell[][], rows: readonly HeatmapRow[], columns: readonly HeatmapColumn[], options: TotalsOptions): HeatmapTotals;
130
225
  /** A row the grid body renders. */
131
226
  export type BodyRow = {
132
227
  kind: 'group';
@@ -146,7 +241,7 @@ export declare const dataRowKey: (rowId: string) => string;
146
241
  export declare const groupRowKey: (groupId: string) => string;
147
242
  export declare const FOOTER_ROW_KEY = "f";
148
243
  /** Orders row indexes. Ties keep the props order (a stable sort). */
149
- export declare function sortRowIndexes(indexes: readonly number[], rows: readonly HeatmapRow[], totals: readonly AggregateResult[], sort: HeatmapSortRows, collator: Intl.Collator): number[];
244
+ export declare function sortRowIndexes(indexes: readonly number[], rows: readonly HeatmapRow[], totals: readonly ModelCell[], sort: HeatmapSortRows, collator: Intl.Collator): number[];
150
245
  /** Builds the body: group headers (when grouping) and data rows. */
151
246
  export declare function buildBodyRows(rows: readonly HeatmapRow[], sortedIndexes: readonly number[], groupRows: boolean, collapsed: ReadonlySet<string>): BodyRow[];
152
247
  //# sourceMappingURL=heatmap-model.d.ts.map
@@ -16,11 +16,12 @@ export interface HeatmapTableViewProps {
16
16
  /** Each group's public id, for the table's row ids (never a label). */
17
17
  groupIds: ReadonlyMap<string, string>;
18
18
  describer: HeatmapDescriber;
19
+ /** The grid's totals, withheld ones already reduced to a value-less
20
+ * cell, so the table can show nothing the grid does not. */
19
21
  totals: HeatmapTotals | null;
20
22
  rowTotals: HeatmapAggregate | false;
21
23
  columnTotals: HeatmapAggregate | false;
22
24
  groupColumnMethod: HeatmapAggregate;
23
- minCount?: number;
24
25
  /** The table failed to load or render (announced by the heatmap). */
25
26
  onLoadError?: () => void;
26
27
  }
@@ -31,5 +32,5 @@ export interface HeatmapTableViewProps {
31
32
  * their groups in the grid's order. Labels go through the same privacy
32
33
  * masking as the grid.
33
34
  */
34
- export declare function HeatmapTableView({ title, rowsLabel, rows, columns, matrix, body, grouped, groupIds, describer, totals, rowTotals, columnTotals, groupColumnMethod, minCount, onLoadError, }: HeatmapTableViewProps): import("react/jsx-runtime").JSX.Element;
35
+ export declare function HeatmapTableView({ title, rowsLabel, rows, columns, matrix, body, grouped, groupIds, describer, totals, rowTotals, columnTotals, groupColumnMethod, onLoadError, }: HeatmapTableViewProps): import("react/jsx-runtime").JSX.Element;
35
36
  //# sourceMappingURL=heatmap-table-view.d.ts.map
@@ -1,11 +1,11 @@
1
1
  import { type ReactNode } from 'react';
2
2
  import { type HeatmapPrivacyScope, type HeatmapValueType } from './heatmap-format';
3
3
  import { type HeatmapSelectionMode } from './heatmap-grid';
4
- import { type HeatmapCellInfo, type HeatmapCellInput, type HeatmapCellKey, type HeatmapColumn, type HeatmapGroup, type HeatmapRow, type HeatmapSortRows } from './heatmap-model';
4
+ import { type HeatmapCellInfo, type HeatmapCellInput, type HeatmapCellKey, type HeatmapColumn, type HeatmapGetTotal, type HeatmapGroup, type HeatmapRow, type HeatmapSortRows } from './heatmap-model';
5
5
  import { type HeatmapAggregate, type HeatmapScale } from './heatmap-scale';
6
6
  import { HeatmapTooltip } from './heatmap-tooltip';
7
7
  import { type HeatmapPalette } from './heatmap-variants';
8
- export type { HeatmapCellData, HeatmapCellInfo, HeatmapCellInput, HeatmapCellKey, HeatmapCellStatus, HeatmapColumn, HeatmapGroup, HeatmapRow, HeatmapSortRows, } from './heatmap-model';
8
+ export type { HeatmapCellData, HeatmapCellInfo, HeatmapCellInput, HeatmapCellKey, HeatmapCellStatus, HeatmapColumn, HeatmapGetTotal, HeatmapGroup, HeatmapRow, HeatmapSortRows, HeatmapTotalScope, } from './heatmap-model';
9
9
  export type { HeatmapAggregate, HeatmapScale } from './heatmap-scale';
10
10
  export type { HeatmapPalette } from './heatmap-variants';
11
11
  export type { HeatmapPrivacyScope, HeatmapValueType } from './heatmap-format';
@@ -85,10 +85,32 @@ export interface HeatmapProps {
85
85
  valueType?: HeatmapValueType;
86
86
  /**
87
87
  * Cells with a count below this render as "too few to show", hatched.
88
- * A display rule, not disclosure control: `read_cell`, `onCellClick`,
89
- * `onSelectionChange` and the totals still carry the value.
88
+ * For a cell it is a display rule, not disclosure control: `read_cell`,
89
+ * `onCellClick` and `onSelectionChange` still carry any value you pass.
90
+ * To keep a value off the page, send `{ value: null, count }`: it still
91
+ * renders as too few, and nothing can read a value the kit never had.
92
+ * Totals follow small-number disclosure control: any total that, in any
93
+ * combination with the other totals and cells, would pin down a hidden
94
+ * cell, narrow it below the protection level (half its range, for a
95
+ * rate), or determine a set of hidden cells with fewer than minCount
96
+ * records, is withheld too, and carries no value anywhere. Every total
97
+ * the data could show is audited, drawn or not. See `getTotal` and
98
+ * heatmap.mdx.
90
99
  */
91
100
  minCount?: number;
101
+ /**
102
+ * Supplies a total: a row's, a column's, a group's, a group header cell
103
+ * or the grand total, as `scope.kind` says. Return a cell input (`null`
104
+ * for no total), or `undefined` to let the kit work it out from the
105
+ * cells. Needed when you withhold values (`value: null`): the kit cannot
106
+ * add up a value it never had, so it withholds any total it would get
107
+ * wrong. `minCount` and the disclosure audit apply to a supplied total
108
+ * exactly as to a worked-out one, which must be the exact count-weighted
109
+ * mean (or sum) of its cells. Asked for every row, every column and the
110
+ * grand total, and, whenever rows carry a group, every group and group
111
+ * header cell, drawn or not. Keep it stable (`useCallback`).
112
+ */
113
+ getTotal?: HeatmapGetTotal;
92
114
  /** Formats a value. Default: Intl in the active locale. Keep it stable. */
93
115
  valueFormatter?: (value: number) => string;
94
116
  /** Print the value inside each cell. */
@@ -98,18 +120,24 @@ export interface HeatmapProps {
98
120
  /**
99
121
  * A totals column at the row ends. A mean weights by count. Everything in
100
122
  * that column uses this method: each row's total, each group's and the
101
- * grand total in the corner.
123
+ * grand total in the corner. With `minCount`, a mean of plain numbers
124
+ * (`valueType="number"`) is not audited for hidden cells: every such
125
+ * average that holds one is withheld, so use `sum` for plain numbers.
102
126
  */
103
127
  rowTotals?: HeatmapAggregate | false;
104
128
  /**
105
129
  * A totals row under the columns. A mean weights by count. A group
106
130
  * header's per-column totals use this method too (else `rowTotals`).
131
+ * With `minCount`, a mean of plain numbers is withheld wherever it holds
132
+ * a hidden cell, as for `rowTotals`: use `sum` for plain numbers.
107
133
  */
108
134
  columnTotals?: HeatmapAggregate | false;
109
135
  /**
110
136
  * Row order (within each group). Controlled when set. In privacy mode
111
137
  * `label` keeps the given order: sorting by masked names would reveal
112
- * their order.
138
+ * their order. A sort by total reads each row's total by the
139
+ * `rowTotals` method (else the `columnTotals` one, else mean); a row
140
+ * whose total is withheld sorts last.
113
141
  */
114
142
  sortRows?: HeatmapSortRows;
115
143
  /** Initial row order when uncontrolled. Default `none`. */
@@ -1,5 +1,5 @@
1
1
  export { Heatmap } from './heatmap';
2
- export type { HeatmapProps, HeatmapHandle, HeatmapView, HeatmapCellReading, HeatmapCellData, HeatmapCellInfo, HeatmapCellInput, HeatmapCellKey, HeatmapCellStatus, HeatmapColumn, HeatmapGroup, HeatmapRow, HeatmapSortRows, HeatmapAggregate, HeatmapScale, HeatmapPalette, HeatmapValueType, HeatmapSelectionMode, HeatmapPrivacyScope, HeatmapTooltipContext, } from './heatmap';
2
+ export type { HeatmapProps, HeatmapHandle, HeatmapView, HeatmapCellReading, HeatmapCellData, HeatmapCellInfo, HeatmapCellInput, HeatmapCellKey, HeatmapCellStatus, HeatmapColumn, HeatmapGetTotal, HeatmapGroup, HeatmapRow, HeatmapSortRows, HeatmapTotalScope, HeatmapAggregate, HeatmapScale, HeatmapPalette, HeatmapValueType, HeatmapSelectionMode, HeatmapPrivacyScope, HeatmapTooltipContext, } from './heatmap';
3
3
  export { HeatmapLegend } from './heatmap-legend';
4
4
  export type { HeatmapLegendProps } from './heatmap-legend';
5
5
  export { HeatmapTooltip } from './heatmap-tooltip';
@@ -1,4 +1,4 @@
1
- import { H as t, a as p, b as m, h as o } from "../../_chunks/heatmap-DuDfTIII.js";
1
+ import { H as t, a as p, b as m, h as o } from "../../_chunks/heatmap-C1TeC7wT.js";
2
2
  export {
3
3
  t as Heatmap,
4
4
  p as HeatmapLegend,
@@ -1,4 +1,4 @@
1
- import { M as m } from "../../_chunks/money-CeClE1nH.js";
1
+ import { M as m } from "../../_chunks/money-Tsczpjfz.js";
2
2
  import { m as n } from "../../_chunks/money.agent-BjJ6gOkx.js";
3
3
  export {
4
4
  m as Money,
@@ -1,4 +1,4 @@
1
- import { N as i, n as o } from "../../_chunks/note-timeline-CwxPQ2Ak.js";
1
+ import { N as i, n as o } from "../../_chunks/note-timeline-DDqNU46n.js";
2
2
  export {
3
3
  i as NoteTimeline,
4
4
  o as noteTimelineAgent
@@ -1,4 +1,4 @@
1
- import { N as a } from "../../_chunks/notes-panel-BRLc2ozF.js";
1
+ import { N as a } from "../../_chunks/notes-panel-uEGIL7mi.js";
2
2
  export {
3
3
  a as NotesPanel
4
4
  };
@@ -1,4 +1,4 @@
1
- import { P as e, p as i } from "../../_chunks/patient-details-BY8Rwwpi.js";
1
+ import { P as e, p as i } from "../../_chunks/patient-details-4P1vA9Ls.js";
2
2
  export {
3
3
  e as PatientDetails,
4
4
  i as patientDetailsAgent
@@ -1,4 +1,4 @@
1
- import { P as t, p as m } from "../../_chunks/patient-summary-card-cmqjIXMk.js";
1
+ import { P as t, p as m } from "../../_chunks/patient-summary-card-CuDLo8MP.js";
2
2
  export {
3
3
  t as PatientSummaryCard,
4
4
  m as patientSummaryCardAgent
@@ -1,4 +1,4 @@
1
- import { B as s, C as l, N as n, P as t, a as C, T as i, b as o, g as T, u as p } from "../../_chunks/balance-badge-cell-ejODZU7R.js";
1
+ import { B as s, C as l, N as n, P as t, a as C, T as i, b as o, g as T, u as p } from "../../_chunks/balance-badge-cell-DZNthHO1.js";
2
2
  export {
3
3
  s as BalanceBadgeCell,
4
4
  l as CarePlanStatusCell,
@@ -1,4 +1,4 @@
1
- import { P as r, f as s, p as m, a as e, s as n, b as o, c as i } from "../../_chunks/payment-form-i90DUuNK.js";
1
+ import { P as r, f as s, p as m, a as e, s as n, b as o, c as i } from "../../_chunks/payment-form-C3dGY7v4.js";
2
2
  export {
3
3
  r as PaymentForm,
4
4
  s as formatPaymentAmount,
@@ -1,4 +1,4 @@
1
- import { P as t, p as a } from "../../_chunks/practice-results-B8L9ZmtR.js";
1
+ import { P as t, p as a } from "../../_chunks/practice-results-8h2Utpt3.js";
2
2
  export {
3
3
  t as PracticeResults,
4
4
  a as practiceResultsAgent
@@ -1,4 +1,4 @@
1
- import { P as r } from "../../_chunks/pregnancy-dating-D2XTELiw.js";
1
+ import { P as r } from "../../_chunks/pregnancy-dating-B8wo4l_r.js";
2
2
  export {
3
3
  r as PregnancyDating
4
4
  };
@@ -1,4 +1,4 @@
1
- import { R as o, I as e, r as n } from "../../_chunks/radiograph-panel.agent-DDNUo4Ul.js";
1
+ import { R as o, I as e, r as n } from "../../_chunks/radiograph-panel.agent-8Ewv8-d7.js";
2
2
  export {
3
3
  o as RadiographPanel,
4
4
  e as RadiographPanelIcon,
@@ -1,5 +1,5 @@
1
1
  import { R as i, r as o, w as a } from "../../_chunks/rich-text-editor-M2gT_E7f.js";
2
- import { k as s } from "../../_chunks/kit-extensions-RnddkrXn.js";
2
+ import { k as s } from "../../_chunks/kit-extensions-DWs1UEXb.js";
3
3
  export {
4
4
  i as RichTextEditor,
5
5
  s as kitEditorExtensions,
@@ -1,4 +1,4 @@
1
- import { S as r, s, u as n } from "../../_chunks/sparkline-pkGPCXbl.js";
1
+ import { S as r, s, u as n } from "../../_chunks/sparkline-SnniCoCl.js";
2
2
  export {
3
3
  r as Sparkline,
4
4
  s as sparklineAgent,
@@ -1,4 +1,4 @@
1
- import { T as o, t as r } from "../../_chunks/task-editor-DoiOzNiC.js";
1
+ import { T as o, t as r } from "../../_chunks/task-editor-CifOznfq.js";
2
2
  export {
3
3
  o as TaskEditor,
4
4
  r as taskEditorAgent
@@ -1,4 +1,4 @@
1
- import { T as r } from "../../_chunks/treatment-receipt-BdJ36vNP.js";
1
+ import { T as r } from "../../_chunks/treatment-receipt-Cpm8tqQN.js";
2
2
  import { t as m } from "../../_chunks/treatment-receipt.agent-bpFm2RPH.js";
3
3
  export {
4
4
  r as TreatmentReceipt,
@@ -1553,6 +1553,7 @@ export declare const arUi: {
1553
1553
  readonly allCells: "كل الخلايا";
1554
1554
  readonly noData: "لا توجد بيانات";
1555
1555
  readonly lowSample: "بيانات غير كافية";
1556
+ readonly totalWithheld: "مخفي لحماية الأعداد الصغيرة";
1556
1557
  readonly countOf: "{{part}} من {{total}}";
1557
1558
  readonly records_zero: "عدد السجلات: {{formatted}}";
1558
1559
  readonly records_one: "عدد السجلات: {{formatted}}";
@@ -1581,6 +1582,7 @@ export declare const arUi: {
1581
1582
  readonly noData: "لا توجد بيانات";
1582
1583
  readonly lowSample: "بيانات غير كافية";
1583
1584
  readonly lowSampleUnder: "بيانات غير كافية (أقل من {{value}})";
1585
+ readonly totalWithheld: "الإجماليات مخفية لحماية الأعداد الصغيرة";
1584
1586
  readonly descriptionBands_zero: "مقياس الألوان مقسّم إلى فئات عددها {{formatted}}، وحدود التقسيم عند {{edges}}.";
1585
1587
  readonly descriptionBands_one: "مقياس الألوان مقسّم إلى فئات عددها {{formatted}}، وحدود التقسيم عند {{edges}}.";
1586
1588
  readonly descriptionBands_two: "مقياس الألوان مقسّم إلى فئات عددها {{formatted}}، وحدود التقسيم عند {{edges}}.";
@@ -1548,6 +1548,7 @@ const e = {
1548
1548
  allCells: "كل الخلايا",
1549
1549
  noData: "لا توجد بيانات",
1550
1550
  lowSample: "بيانات غير كافية",
1551
+ totalWithheld: "مخفي لحماية الأعداد الصغيرة",
1551
1552
  countOf: "{{part}} من {{total}}",
1552
1553
  records_zero: "عدد السجلات: {{formatted}}",
1553
1554
  records_one: "عدد السجلات: {{formatted}}",
@@ -1576,6 +1577,7 @@ const e = {
1576
1577
  noData: "لا توجد بيانات",
1577
1578
  lowSample: "بيانات غير كافية",
1578
1579
  lowSampleUnder: "بيانات غير كافية (أقل من {{value}})",
1580
+ totalWithheld: "الإجماليات مخفية لحماية الأعداد الصغيرة",
1579
1581
  descriptionBands_zero: "مقياس الألوان مقسّم إلى فئات عددها {{formatted}}، وحدود التقسيم عند {{edges}}.",
1580
1582
  descriptionBands_one: "مقياس الألوان مقسّم إلى فئات عددها {{formatted}}، وحدود التقسيم عند {{edges}}.",
1581
1583
  descriptionBands_two: "مقياس الألوان مقسّم إلى فئات عددها {{formatted}}، وحدود التقسيم عند {{edges}}.",
@@ -1549,6 +1549,7 @@ export declare const deUi: {
1549
1549
  readonly allCells: "Alle Zellen";
1550
1550
  readonly noData: "keine Daten";
1551
1551
  readonly lowSample: "nicht genügend Daten";
1552
+ readonly totalWithheld: "ausgeblendet zum Schutz kleiner Zahlen";
1552
1553
  readonly countOf: "{{part}} von {{total}}";
1553
1554
  readonly records_zero: "{{formatted}} Datensätze";
1554
1555
  readonly records_one: "{{formatted}} Datensatz";
@@ -1577,6 +1578,7 @@ export declare const deUi: {
1577
1578
  readonly noData: "Keine Daten";
1578
1579
  readonly lowSample: "Nicht genügend Daten";
1579
1580
  readonly lowSampleUnder: "Nicht genügend Daten (weniger als {{value}})";
1581
+ readonly totalWithheld: "Gesamtwerte ausgeblendet zum Schutz kleiner Zahlen";
1580
1582
  readonly descriptionBands_zero: "Farbskala mit {{formatted}} Stufen, Grenzen bei {{edges}}.";
1581
1583
  readonly descriptionBands_one: "Farbskala mit {{formatted}} Stufe, Grenzen bei {{edges}}.";
1582
1584
  readonly descriptionBands_two: "Farbskala mit {{formatted}} Stufen, Grenzen bei {{edges}}.";
@@ -1544,6 +1544,7 @@ const e = {
1544
1544
  allCells: "Alle Zellen",
1545
1545
  noData: "keine Daten",
1546
1546
  lowSample: "nicht genügend Daten",
1547
+ totalWithheld: "ausgeblendet zum Schutz kleiner Zahlen",
1547
1548
  countOf: "{{part}} von {{total}}",
1548
1549
  records_zero: "{{formatted}} Datensätze",
1549
1550
  records_one: "{{formatted}} Datensatz",
@@ -1572,6 +1573,7 @@ const e = {
1572
1573
  noData: "Keine Daten",
1573
1574
  lowSample: "Nicht genügend Daten",
1574
1575
  lowSampleUnder: "Nicht genügend Daten (weniger als {{value}})",
1576
+ totalWithheld: "Gesamtwerte ausgeblendet zum Schutz kleiner Zahlen",
1575
1577
  descriptionBands_zero: "Farbskala mit {{formatted}} Stufen, Grenzen bei {{edges}}.",
1576
1578
  descriptionBands_one: "Farbskala mit {{formatted}} Stufe, Grenzen bei {{edges}}.",
1577
1579
  descriptionBands_two: "Farbskala mit {{formatted}} Stufen, Grenzen bei {{edges}}.",
@@ -1546,6 +1546,7 @@ export declare const elUi: {
1546
1546
  readonly allCells: "Όλα τα κελιά";
1547
1547
  readonly noData: "χωρίς δεδομένα";
1548
1548
  readonly lowSample: "ανεπαρκή δεδομένα";
1549
+ readonly totalWithheld: "κρυμμένο για την προστασία μικρών αριθμών";
1549
1550
  readonly countOf: "{{part}} από {{total}}";
1550
1551
  readonly records_zero: "{{formatted}} εγγραφές";
1551
1552
  readonly records_one: "{{formatted}} εγγραφή";
@@ -1574,6 +1575,7 @@ export declare const elUi: {
1574
1575
  readonly noData: "Δεν υπάρχουν δεδομένα";
1575
1576
  readonly lowSample: "Ανεπαρκή δεδομένα";
1576
1577
  readonly lowSampleUnder: "Ανεπαρκή δεδομένα (κάτω από {{value}})";
1578
+ readonly totalWithheld: "Σύνολα κρυμμένα για την προστασία μικρών αριθμών";
1577
1579
  readonly descriptionBands_zero: "Χρωματική κλίμακα με {{formatted}} ζώνες, όρια στα {{edges}}.";
1578
1580
  readonly descriptionBands_one: "Χρωματική κλίμακα με {{formatted}} ζώνη, όρια στα {{edges}}.";
1579
1581
  readonly descriptionBands_two: "Χρωματική κλίμακα με {{formatted}} ζώνες, όρια στα {{edges}}.";
@@ -1544,6 +1544,7 @@ const e = {
1544
1544
  allCells: "Όλα τα κελιά",
1545
1545
  noData: "χωρίς δεδομένα",
1546
1546
  lowSample: "ανεπαρκή δεδομένα",
1547
+ totalWithheld: "κρυμμένο για την προστασία μικρών αριθμών",
1547
1548
  countOf: "{{part}} από {{total}}",
1548
1549
  records_zero: "{{formatted}} εγγραφές",
1549
1550
  records_one: "{{formatted}} εγγραφή",
@@ -1572,6 +1573,7 @@ const e = {
1572
1573
  noData: "Δεν υπάρχουν δεδομένα",
1573
1574
  lowSample: "Ανεπαρκή δεδομένα",
1574
1575
  lowSampleUnder: "Ανεπαρκή δεδομένα (κάτω από {{value}})",
1576
+ totalWithheld: "Σύνολα κρυμμένα για την προστασία μικρών αριθμών",
1575
1577
  descriptionBands_zero: "Χρωματική κλίμακα με {{formatted}} ζώνες, όρια στα {{edges}}.",
1576
1578
  descriptionBands_one: "Χρωματική κλίμακα με {{formatted}} ζώνη, όρια στα {{edges}}.",
1577
1579
  descriptionBands_two: "Χρωματική κλίμακα με {{formatted}} ζώνες, όρια στα {{edges}}.",
@@ -1579,6 +1579,7 @@ export declare const enUi: {
1579
1579
  readonly allCells: "All cells";
1580
1580
  readonly noData: "no data";
1581
1581
  readonly lowSample: "too few to show";
1582
+ readonly totalWithheld: "hidden to protect small numbers";
1582
1583
  readonly countOf: "{{part}} of {{total}}";
1583
1584
  readonly records_zero: "{{formatted}} records";
1584
1585
  readonly records_one: "{{formatted}} record";
@@ -1607,6 +1608,7 @@ export declare const enUi: {
1607
1608
  readonly noData: "No data";
1608
1609
  readonly lowSample: "Too few to show";
1609
1610
  readonly lowSampleUnder: "Too few to show (under {{value}})";
1611
+ readonly totalWithheld: "Totals hidden to protect small numbers";
1610
1612
  readonly descriptionBands_zero: "Colour scale in {{formatted}} bands, cut at {{edges}}.";
1611
1613
  readonly descriptionBands_one: "Colour scale in {{formatted}} band, cut at {{edges}}.";
1612
1614
  readonly descriptionBands_two: "Colour scale in {{formatted}} bands, cut at {{edges}}.";