@fieldia/designer 0.20.0 → 0.22.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 (223) hide show
  1. package/package.json +4 -4
  2. package/src/lib/canvas-form.d.mts +1 -1
  3. package/src/lib/canvas-form.d.ts +1 -1
  4. package/src/lib/canvas-form.js +2 -1
  5. package/src/lib/canvas-form.js.map +1 -1
  6. package/src/lib/canvas-form.mjs +2 -1
  7. package/src/lib/canvas-form.mjs.map +1 -1
  8. package/src/lib/chrome.js +11 -0
  9. package/src/lib/chrome.js.map +1 -1
  10. package/src/lib/chrome.mjs +11 -0
  11. package/src/lib/chrome.mjs.map +1 -1
  12. package/src/lib/date-setting.d.mts +49 -0
  13. package/src/lib/date-setting.d.ts +49 -0
  14. package/src/lib/date-setting.js +125 -0
  15. package/src/lib/date-setting.js.map +1 -0
  16. package/src/lib/date-setting.mjs +122 -0
  17. package/src/lib/date-setting.mjs.map +1 -0
  18. package/src/lib/designer.d.mts +19 -1
  19. package/src/lib/designer.d.ts +19 -1
  20. package/src/lib/designer.js +32 -8
  21. package/src/lib/designer.js.map +1 -1
  22. package/src/lib/designer.mjs +32 -8
  23. package/src/lib/designer.mjs.map +1 -1
  24. package/src/lib/head-commands.d.mts +11 -1
  25. package/src/lib/head-commands.d.ts +11 -1
  26. package/src/lib/head-commands.js +33 -1
  27. package/src/lib/head-commands.js.map +1 -1
  28. package/src/lib/head-commands.mjs +30 -1
  29. package/src/lib/head-commands.mjs.map +1 -1
  30. package/src/lib/head-properties.js +19 -6
  31. package/src/lib/head-properties.js.map +1 -1
  32. package/src/lib/head-properties.mjs +19 -6
  33. package/src/lib/head-properties.mjs.map +1 -1
  34. package/src/lib/inline-settings.js +52 -11
  35. package/src/lib/inline-settings.js.map +1 -1
  36. package/src/lib/inline-settings.mjs +52 -11
  37. package/src/lib/inline-settings.mjs.map +1 -1
  38. package/src/lib/input-commands.js +3 -2
  39. package/src/lib/input-commands.js.map +1 -1
  40. package/src/lib/input-commands.mjs +3 -2
  41. package/src/lib/input-commands.mjs.map +1 -1
  42. package/src/lib/kind-settings-choices.js +16 -7
  43. package/src/lib/kind-settings-choices.js.map +1 -1
  44. package/src/lib/kind-settings-choices.mjs +16 -7
  45. package/src/lib/kind-settings-choices.mjs.map +1 -1
  46. package/src/lib/kind-settings-inputs.js +116 -58
  47. package/src/lib/kind-settings-inputs.js.map +1 -1
  48. package/src/lib/kind-settings-inputs.mjs +116 -58
  49. package/src/lib/kind-settings-inputs.mjs.map +1 -1
  50. package/src/lib/kind-settings-picker.js +16 -9
  51. package/src/lib/kind-settings-picker.js.map +1 -1
  52. package/src/lib/kind-settings-picker.mjs +16 -9
  53. package/src/lib/kind-settings-picker.mjs.map +1 -1
  54. package/src/lib/kind-settings-structures.js +28 -14
  55. package/src/lib/kind-settings-structures.js.map +1 -1
  56. package/src/lib/kind-settings-structures.mjs +29 -15
  57. package/src/lib/kind-settings-structures.mjs.map +1 -1
  58. package/src/lib/kind-settings.js +47 -43
  59. package/src/lib/kind-settings.js.map +1 -1
  60. package/src/lib/kind-settings.mjs +47 -43
  61. package/src/lib/kind-settings.mjs.map +1 -1
  62. package/src/lib/list-calendar.d.mts +7 -0
  63. package/src/lib/list-calendar.d.ts +7 -0
  64. package/src/lib/list-calendar.js +155 -0
  65. package/src/lib/list-calendar.js.map +1 -0
  66. package/src/lib/list-calendar.mjs +152 -0
  67. package/src/lib/list-calendar.mjs.map +1 -0
  68. package/src/lib/list-commands.d.mts +3 -1
  69. package/src/lib/list-commands.d.ts +3 -1
  70. package/src/lib/list-commands.js +8 -0
  71. package/src/lib/list-commands.js.map +1 -1
  72. package/src/lib/list-commands.mjs +9 -1
  73. package/src/lib/list-commands.mjs.map +1 -1
  74. package/src/lib/list-properties.js +103 -55
  75. package/src/lib/list-properties.js.map +1 -1
  76. package/src/lib/list-properties.mjs +103 -55
  77. package/src/lib/list-properties.mjs.map +1 -1
  78. package/src/lib/locales/ar/changes.js +3 -0
  79. package/src/lib/locales/ar/changes.js.map +1 -1
  80. package/src/lib/locales/ar/changes.mjs +3 -0
  81. package/src/lib/locales/ar/changes.mjs.map +1 -1
  82. package/src/lib/locales/ar/index.js +2 -1
  83. package/src/lib/locales/ar/index.js.map +1 -1
  84. package/src/lib/locales/ar/index.mjs +2 -1
  85. package/src/lib/locales/ar/index.mjs.map +1 -1
  86. package/src/lib/locales/ar/inputs.d.mts +2 -0
  87. package/src/lib/locales/ar/inputs.d.ts +2 -0
  88. package/src/lib/locales/ar/inputs.js +20 -0
  89. package/src/lib/locales/ar/inputs.js.map +1 -0
  90. package/src/lib/locales/ar/inputs.mjs +17 -0
  91. package/src/lib/locales/ar/inputs.mjs.map +1 -0
  92. package/src/lib/locales/ar/list.js +26 -0
  93. package/src/lib/locales/ar/list.js.map +1 -1
  94. package/src/lib/locales/ar/list.mjs +26 -0
  95. package/src/lib/locales/ar/list.mjs.map +1 -1
  96. package/src/lib/locales/ar/questions.js +7 -0
  97. package/src/lib/locales/ar/questions.js.map +1 -1
  98. package/src/lib/locales/ar/questions.mjs +7 -0
  99. package/src/lib/locales/ar/questions.mjs.map +1 -1
  100. package/src/lib/locales/ar/refusals.js +1 -0
  101. package/src/lib/locales/ar/refusals.js.map +1 -1
  102. package/src/lib/locales/ar/refusals.mjs +1 -0
  103. package/src/lib/locales/ar/refusals.mjs.map +1 -1
  104. package/src/lib/locales/en/changes.d.mts +3 -0
  105. package/src/lib/locales/en/changes.d.ts +3 -0
  106. package/src/lib/locales/en/changes.js +3 -0
  107. package/src/lib/locales/en/changes.js.map +1 -1
  108. package/src/lib/locales/en/changes.mjs +3 -0
  109. package/src/lib/locales/en/changes.mjs.map +1 -1
  110. package/src/lib/locales/en/index.d.mts +60 -0
  111. package/src/lib/locales/en/index.d.ts +60 -0
  112. package/src/lib/locales/en/index.js +2 -1
  113. package/src/lib/locales/en/index.js.map +1 -1
  114. package/src/lib/locales/en/index.mjs +2 -1
  115. package/src/lib/locales/en/index.mjs.map +1 -1
  116. package/src/lib/locales/en/inputs.d.mts +26 -0
  117. package/src/lib/locales/en/inputs.d.ts +26 -0
  118. package/src/lib/locales/en/inputs.js +30 -0
  119. package/src/lib/locales/en/inputs.js.map +1 -0
  120. package/src/lib/locales/en/inputs.mjs +27 -0
  121. package/src/lib/locales/en/inputs.mjs.map +1 -0
  122. package/src/lib/locales/en/list.d.mts +34 -0
  123. package/src/lib/locales/en/list.d.ts +34 -0
  124. package/src/lib/locales/en/list.js +27 -0
  125. package/src/lib/locales/en/list.js.map +1 -1
  126. package/src/lib/locales/en/list.mjs +27 -0
  127. package/src/lib/locales/en/list.mjs.map +1 -1
  128. package/src/lib/locales/en/questions.d.mts +8 -0
  129. package/src/lib/locales/en/questions.d.ts +8 -0
  130. package/src/lib/locales/en/questions.js +8 -0
  131. package/src/lib/locales/en/questions.js.map +1 -1
  132. package/src/lib/locales/en/questions.mjs +8 -0
  133. package/src/lib/locales/en/questions.mjs.map +1 -1
  134. package/src/lib/locales/en/refusals.d.mts +1 -0
  135. package/src/lib/locales/en/refusals.d.ts +1 -0
  136. package/src/lib/locales/en/refusals.js +1 -0
  137. package/src/lib/locales/en/refusals.js.map +1 -1
  138. package/src/lib/locales/en/refusals.mjs +1 -0
  139. package/src/lib/locales/en/refusals.mjs.map +1 -1
  140. package/src/lib/number-box.d.mts +66 -0
  141. package/src/lib/number-box.d.ts +66 -0
  142. package/src/lib/number-box.js +153 -0
  143. package/src/lib/number-box.js.map +1 -0
  144. package/src/lib/number-box.mjs +149 -0
  145. package/src/lib/number-box.mjs.map +1 -0
  146. package/src/lib/page-checks.js +5 -0
  147. package/src/lib/page-checks.js.map +1 -1
  148. package/src/lib/page-checks.mjs +5 -0
  149. package/src/lib/page-checks.mjs.map +1 -1
  150. package/src/lib/page-json.d.mts +3 -1
  151. package/src/lib/page-json.d.ts +3 -1
  152. package/src/lib/page-json.js +5 -3
  153. package/src/lib/page-json.js.map +1 -1
  154. package/src/lib/page-json.mjs +5 -3
  155. package/src/lib/page-json.mjs.map +1 -1
  156. package/src/lib/page-tree.d.mts +3 -1
  157. package/src/lib/page-tree.d.ts +3 -1
  158. package/src/lib/page-tree.js +8 -0
  159. package/src/lib/page-tree.js.map +1 -1
  160. package/src/lib/page-tree.mjs +7 -0
  161. package/src/lib/page-tree.mjs.map +1 -1
  162. package/src/lib/panel-block.js +16 -5
  163. package/src/lib/panel-block.js.map +1 -1
  164. package/src/lib/panel-block.mjs +16 -5
  165. package/src/lib/panel-block.mjs.map +1 -1
  166. package/src/lib/panel-layout.js +20 -15
  167. package/src/lib/panel-layout.js.map +1 -1
  168. package/src/lib/panel-layout.mjs +20 -15
  169. package/src/lib/panel-layout.mjs.map +1 -1
  170. package/src/lib/panel-look.js +21 -14
  171. package/src/lib/panel-look.js.map +1 -1
  172. package/src/lib/panel-look.mjs +21 -14
  173. package/src/lib/panel-look.mjs.map +1 -1
  174. package/src/lib/panel-map.js +53 -20
  175. package/src/lib/panel-map.js.map +1 -1
  176. package/src/lib/panel-map.mjs +53 -20
  177. package/src/lib/panel-map.mjs.map +1 -1
  178. package/src/lib/rules-answers.d.mts +1 -1
  179. package/src/lib/rules-answers.d.ts +1 -1
  180. package/src/lib/rules-answers.js +45 -21
  181. package/src/lib/rules-answers.js.map +1 -1
  182. package/src/lib/rules-answers.mjs +45 -21
  183. package/src/lib/rules-answers.mjs.map +1 -1
  184. package/src/lib/rules-formula-box.d.mts +7 -3
  185. package/src/lib/rules-formula-box.d.ts +7 -3
  186. package/src/lib/rules-formula-box.js +26 -6
  187. package/src/lib/rules-formula-box.js.map +1 -1
  188. package/src/lib/rules-formula-box.mjs +26 -6
  189. package/src/lib/rules-formula-box.mjs.map +1 -1
  190. package/src/lib/rules-formula.js +7 -5
  191. package/src/lib/rules-formula.js.map +1 -1
  192. package/src/lib/rules-formula.mjs +8 -6
  193. package/src/lib/rules-formula.mjs.map +1 -1
  194. package/src/lib/rules-worked-out.js +66 -12
  195. package/src/lib/rules-worked-out.js.map +1 -1
  196. package/src/lib/rules-worked-out.mjs +66 -12
  197. package/src/lib/rules-worked-out.mjs.map +1 -1
  198. package/src/lib/setting-refusals.d.mts +3 -0
  199. package/src/lib/setting-refusals.d.ts +3 -0
  200. package/src/lib/setting-refusals.js +25 -0
  201. package/src/lib/setting-refusals.js.map +1 -0
  202. package/src/lib/setting-refusals.mjs +22 -0
  203. package/src/lib/setting-refusals.mjs.map +1 -0
  204. package/src/lib/table-panel.js +16 -5
  205. package/src/lib/table-panel.js.map +1 -1
  206. package/src/lib/table-panel.mjs +16 -5
  207. package/src/lib/table-panel.mjs.map +1 -1
  208. package/src/lib/templates.js +1 -1
  209. package/src/lib/templates.js.map +1 -1
  210. package/src/lib/templates.mjs +2 -2
  211. package/src/lib/templates.mjs.map +1 -1
  212. package/src/lib/try-it.d.mts +6 -1
  213. package/src/lib/try-it.d.ts +6 -1
  214. package/src/lib/try-it.js +25 -0
  215. package/src/lib/try-it.js.map +1 -1
  216. package/src/lib/try-it.mjs +24 -0
  217. package/src/lib/try-it.mjs.map +1 -1
  218. package/src/lib/work-text.d.mts +10 -2
  219. package/src/lib/work-text.d.ts +10 -2
  220. package/src/lib/work-text.js +12 -23
  221. package/src/lib/work-text.js.map +1 -1
  222. package/src/lib/work-text.mjs +12 -21
  223. package/src/lib/work-text.mjs.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-setting.js","sourceRoot":"","sources":["../../../../../libs/designer/src/lib/date-setting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ import { datePart, dateOrderOf, dateShape, guard, readDateText, refusalHint, restingText, typingText, WIDGET_LABELS } from '@fieldia/widgets';
2
+ const pad = (n) => String(n).padStart(2, '0');
3
+ /** A moment read (an instant) as a page's setting writes a day and time, as the browser's box did: its local day and time, to the minute. */
4
+ const localMoment = (instant) => {
5
+ const d = new Date(instant);
6
+ return `${String(d.getFullYear()).padStart(4, '0')}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`;
7
+ };
8
+ export function settingDate(el, host, options) {
9
+ const locale = host.locale ?? 'en';
10
+ const w = host.words.inputs;
11
+ const labels = WIDGET_LABELS[locale] ?? WIDGET_LABELS.en;
12
+ const { kind } = options;
13
+ // Read as it is at each edit: the page's order, and the setting's name, may change while the box is drawn.
14
+ const reader = {
15
+ kind,
16
+ get order() {
17
+ return dateOrderOf({ page: host.getPage() });
18
+ },
19
+ locale,
20
+ get label() {
21
+ return options.label;
22
+ },
23
+ labels,
24
+ };
25
+ const input = el('input', { type: 'text', class: 'fd-input', autocomplete: 'off', spellcheck: 'false', 'aria-label': options.label, placeholder: dateShape(kind, reader.order, labels), ...options.attrs });
26
+ input.dataset['kind'] = kind;
27
+ const hint = refusalHint(input);
28
+ const focused = () => input.ownerDocument.activeElement === input;
29
+ const atRest = (value) => (value ? restingText(value, kind, locale) : '');
30
+ const typing = (value) => (value ? typingText(value, kind, reader.order, locale) : '');
31
+ // The box's input rules come with Fieldia's own date box, in the date part: at once where a date was drawn already.
32
+ let checks = null;
33
+ let gone = false;
34
+ const attach = (part) => {
35
+ if (gone || checks)
36
+ return;
37
+ checks = guard(input, part.dateRules(input, reader), hint);
38
+ if (focused())
39
+ checks.accept();
40
+ };
41
+ if (datePart.loaded)
42
+ attach(datePart.loaded);
43
+ else
44
+ datePart.load().then(attach, () => undefined);
45
+ /** The box showing `text`: what a refused edit goes back to. */
46
+ const shown = (text) => {
47
+ if (input.value !== text)
48
+ input.value = text;
49
+ checks?.accept();
50
+ };
51
+ /** The text the box was last left with, and what was said of it: change, then focusout, are one leaving. */
52
+ let left = null;
53
+ input.addEventListener('focus', () => {
54
+ left = null;
55
+ // Entered, the box shows what is saved as it is typed, all of it chosen, so typing replaces it.
56
+ const text = typing(options.saved());
57
+ if (input.value !== text) {
58
+ shown(text);
59
+ input.setSelectionRange(0, text.length);
60
+ }
61
+ });
62
+ /** The box back to what was saved, and why, said under it. */
63
+ const keep = (why) => {
64
+ const saved = options.saved();
65
+ shown(focused() ? typing(saved) : atRest(saved));
66
+ const stays = saved ? w.settingStays(atRest(saved)) : '';
67
+ const words = [why?.replace(/[.。]$/, ''), stays].filter(Boolean).join('. ') || stays;
68
+ if (words)
69
+ hint.show(words);
70
+ left = { text: input.value, said: words || null };
71
+ };
72
+ /** A value (or none) kept and shown; refused by the designer, what is saved comes back, with why under the box. */
73
+ const kept = (value) => {
74
+ const done = value === (options.saved() ?? null) || options.commit(value) !== false;
75
+ // Refused with no word of why from the designer: never in silence — that it was not taken, at least.
76
+ if (!done)
77
+ return keep(host.getState?.().issues[0] ?? w.settingDateRefused(options.label));
78
+ shown(focused() ? typing(value) : atRest(value));
79
+ hint.hide();
80
+ left = { text: input.value, said: null };
81
+ };
82
+ /** The box left, or Enter pressed: what it holds kept when it reads, else the setting as it was, and why. */
83
+ function leave() {
84
+ if (left && left.text === input.value) {
85
+ if (left.said)
86
+ hint.show(left.said);
87
+ return;
88
+ }
89
+ // Keys held after a refused one ("1x5/10/2026" where the box shows "1"): what was typed, read whole, is no date.
90
+ const held = checks?.held();
91
+ const read = readDateText(held?.text ?? input.value, reader);
92
+ if (held || !read.ok)
93
+ return keep(read.ok ? held?.words : read.words);
94
+ kept(read.value !== null && kind === 'datetime' ? localMoment(read.value) : read.value);
95
+ }
96
+ input.addEventListener('input', () => (left = null));
97
+ input.addEventListener('change', leave);
98
+ // After the guard's own blur, which takes its hint away: what was found is said last, the box at rest in words.
99
+ input.addEventListener('focusout', () => {
100
+ leave();
101
+ shown(atRest(options.saved()));
102
+ if (left)
103
+ left.text = input.value;
104
+ });
105
+ input.addEventListener('keydown', (event) => {
106
+ if (event.key === 'Enter' && !event.isComposing)
107
+ leave();
108
+ });
109
+ return {
110
+ input,
111
+ refresh: () => {
112
+ input.placeholder = dateShape(kind, reader.order, labels);
113
+ if (!focused())
114
+ shown(atRest(options.saved()));
115
+ },
116
+ destroy: () => {
117
+ gone = true;
118
+ checks?.destroy();
119
+ },
120
+ };
121
+ }
122
+ //# sourceMappingURL=date-setting.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-setting.mjs","sourceRoot":"","sources":["../../../../../libs/designer/src/lib/date-setting.ts"],"names":[],"mappings":"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"}
@@ -247,12 +247,21 @@ export interface Designer extends HeaderCommands, ListCommands, ChoiceCommands,
247
247
  * the largest, in bytes; whether it, or an image, takes several files, and as
248
248
  * few and as many as it takes. `null` lifts a limit; one file again lifts both counts.
249
249
  */
250
+ /**
251
+ * A file upload's or an image's rules: the kinds it takes, the largest file, several files and how many, and
252
+ * `shrink` — its photos made smaller before they are kept ({ maxSide, quality }), kept as taken (false), or as
253
+ * usual (null): smaller where the data source stores files, for an image.
254
+ */
250
255
  setFileRules(id: string, rules: {
251
256
  accept?: string[];
252
257
  maxSize?: number | null;
253
258
  multiple?: boolean;
254
259
  minFiles?: number | null;
255
260
  maxFiles?: number | null;
261
+ shrink?: {
262
+ maxSide?: number;
263
+ quality?: number;
264
+ } | false | null;
256
265
  }): boolean;
257
266
  /**
258
267
  * Drop a part where it goes, as one edit: a part on the page, by its id, or
@@ -306,8 +315,17 @@ export interface Designer extends HeaderCommands, ListCommands, ChoiceCommands,
306
315
  setSeveral(id: string, on: boolean): boolean;
307
316
  undo(): void;
308
317
  redo(): void;
309
- /** Publish the draft as the next version. Returns its number. */
318
+ /**
319
+ * Publish the draft as the next version. Returns its number. A setting still typed in its box is read first, as
320
+ * leaving the box reads it (`settling`): kept when it fits, else the box shows what the setting holds and says why —
321
+ * never a version published under text the person was still typing.
322
+ */
310
323
  publish(): Promise<number>;
324
+ /**
325
+ * How the editors read a setting typed and not yet left — a number, a date, a word — now, as leaving its box would:
326
+ * `publish` runs these first, whatever asked for it (a button's key, the app's own call). Returns what stops it.
327
+ */
328
+ settling(read: () => void): () => void;
311
329
  /** What people would trip over on the page as it is, what would stop them first. */
312
330
  checks(): PageCheck[];
313
331
  /** Do a check's fix: delete an empty page, drop a rule that can never hold, or pick what it is about. */
@@ -247,12 +247,21 @@ export interface Designer extends HeaderCommands, ListCommands, ChoiceCommands,
247
247
  * the largest, in bytes; whether it, or an image, takes several files, and as
248
248
  * few and as many as it takes. `null` lifts a limit; one file again lifts both counts.
249
249
  */
250
+ /**
251
+ * A file upload's or an image's rules: the kinds it takes, the largest file, several files and how many, and
252
+ * `shrink` — its photos made smaller before they are kept ({ maxSide, quality }), kept as taken (false), or as
253
+ * usual (null): smaller where the data source stores files, for an image.
254
+ */
250
255
  setFileRules(id: string, rules: {
251
256
  accept?: string[];
252
257
  maxSize?: number | null;
253
258
  multiple?: boolean;
254
259
  minFiles?: number | null;
255
260
  maxFiles?: number | null;
261
+ shrink?: {
262
+ maxSide?: number;
263
+ quality?: number;
264
+ } | false | null;
256
265
  }): boolean;
257
266
  /**
258
267
  * Drop a part where it goes, as one edit: a part on the page, by its id, or
@@ -306,8 +315,17 @@ export interface Designer extends HeaderCommands, ListCommands, ChoiceCommands,
306
315
  setSeveral(id: string, on: boolean): boolean;
307
316
  undo(): void;
308
317
  redo(): void;
309
- /** Publish the draft as the next version. Returns its number. */
318
+ /**
319
+ * Publish the draft as the next version. Returns its number. A setting still typed in its box is read first, as
320
+ * leaving the box reads it (`settling`): kept when it fits, else the box shows what the setting holds and says why —
321
+ * never a version published under text the person was still typing.
322
+ */
310
323
  publish(): Promise<number>;
324
+ /**
325
+ * How the editors read a setting typed and not yet left — a number, a date, a word — now, as leaving its box would:
326
+ * `publish` runs these first, whatever asked for it (a button's key, the app's own call). Returns what stops it.
327
+ */
328
+ settling(read: () => void): () => void;
311
329
  /** What people would trip over on the page as it is, what would stop them first. */
312
330
  checks(): PageCheck[];
313
331
  /** Do a check's fix: delete an empty page, drop a rule that can never hold, or pick what it is about. */
@@ -5,6 +5,7 @@ exports.blankPage = blankPage;
5
5
  exports.createMemoryPageStore = createMemoryPageStore;
6
6
  exports.createDesigner = createDesigner;
7
7
  const core_1 = require("@fieldia/core");
8
+ const core_2 = require("@fieldia/core");
8
9
  const conditions_1 = require("./conditions");
9
10
  const header_commands_1 = require("./header-commands");
10
11
  const list_commands_1 = require("./list-commands");
@@ -39,6 +40,7 @@ const group_fold_1 = require("./group-fold");
39
40
  const validate_edit_1 = require("./validate-edit");
40
41
  const designer_words_1 = require("./designer-words");
41
42
  const saved_forms_1 = require("./saved-forms");
43
+ const setting_refusals_1 = require("./setting-refusals");
42
44
  /**
43
45
  * The editing model behind the designer: no DOM, so it is tested in Node.
44
46
  *
@@ -98,7 +100,7 @@ function blankPage(kind, title, options = {}) {
98
100
  const written = locale === 'en' ? {} : { language: locale };
99
101
  if (kind === 'survey') {
100
102
  return {
101
- fieldia: '0.1',
103
+ fieldia: core_2.FORMAT_VERSION,
102
104
  id,
103
105
  title,
104
106
  ...written,
@@ -110,7 +112,7 @@ function blankPage(kind, title, options = {}) {
110
112
  if (kind === 'list') {
111
113
  // A list shows at least one column: the records' names, to begin with.
112
114
  return {
113
- fieldia: '0.1',
115
+ fieldia: core_2.FORMAT_VERSION,
114
116
  id,
115
117
  title,
116
118
  ...written,
@@ -122,7 +124,7 @@ function blankPage(kind, title, options = {}) {
122
124
  if (kind === 'sheet') {
123
125
  // A record named in big letters at the top, as a business record is.
124
126
  return {
125
- fieldia: '0.1',
127
+ fieldia: core_2.FORMAT_VERSION,
126
128
  id,
127
129
  title,
128
130
  ...written,
@@ -132,7 +134,7 @@ function blankPage(kind, title, options = {}) {
132
134
  };
133
135
  }
134
136
  return {
135
- fieldia: '0.1',
137
+ fieldia: core_2.FORMAT_VERSION,
136
138
  id,
137
139
  title,
138
140
  ...written,
@@ -174,6 +176,8 @@ function createMemoryPageStore() {
174
176
  const clone = (value) => JSON.parse(JSON.stringify(value));
175
177
  function createDesigner(options) {
176
178
  const store = options.store;
179
+ /** How each editor reads a setting typed and not yet left (`settling`): publish runs them first. */
180
+ const readers = new Set();
177
181
  const locale = (0, designer_words_1.designerLocale)(options.locale);
178
182
  const words = designer_words_1.DESIGNER_WORDS[locale ?? 'en'];
179
183
  const appKinds = (0, kinds_1.registerKinds)(options.kinds ?? []);
@@ -187,7 +191,8 @@ function createDesigner(options) {
187
191
  const model = clone(options.model ?? {});
188
192
  /** A field the backend already has: its definition is the model's, not the designer's. */
189
193
  const fromModel = (name) => Object.prototype.hasOwnProperty.call(model, name);
190
- let page = clone(options.page);
194
+ // A page saved by an older Fieldia is edited, and saved, in the current format.
195
+ let page = clone((0, core_2.upgradePage)(options.page));
191
196
  let selected = null;
192
197
  let picked = [];
193
198
  let issues = [];
@@ -285,7 +290,8 @@ function createDesigner(options) {
285
290
  (0, steps_places_1.forgetGoneTargets)(draft);
286
291
  const checked = checkEdit(page, draft);
287
292
  if (!checked.ok) {
288
- issues = checked.issues.map((issue) => words.refusals.invalid(issue.path, issue.message));
293
+ // A number setting the format refuses is said in its own words, in the designer's language: never a raw path.
294
+ issues = checked.issues.map((issue) => (0, setting_refusals_1.settingRefusal)(issue.path, words) ?? words.refusals.invalid(issue.path, issue.message));
289
295
  notify();
290
296
  return false;
291
297
  }
@@ -388,6 +394,10 @@ function createDesigner(options) {
388
394
  words,
389
395
  locale,
390
396
  getPage: () => page,
397
+ settling(read) {
398
+ readers.add(read);
399
+ return () => void readers.delete(read);
400
+ },
391
401
  modelFields() {
392
402
  const shown = (0, page_tree_1.shownFields)(page);
393
403
  return Object.keys(model)
@@ -1063,6 +1073,17 @@ function createDesigner(options) {
1063
1073
  }
1064
1074
  if ((field.minFiles ?? 0) > (field.maxFiles ?? Infinity))
1065
1075
  throw new refusal_1.Refusal((w) => w.refusals.leastOverMost);
1076
+ // Photos made smaller, kept as taken, or as usual: the format's own bounds.
1077
+ if (rules.shrink === null)
1078
+ delete field.shrink;
1079
+ else if (rules.shrink === false)
1080
+ field.shrink = false;
1081
+ else if (rules.shrink) {
1082
+ const { maxSide, quality } = rules.shrink;
1083
+ if ((maxSide !== undefined && !(Number.isInteger(maxSide) && maxSide >= 160 && maxSide <= 16384)) || (quality !== undefined && !(quality >= 0.3 && quality <= 1)))
1084
+ throw new refusal_1.Refusal((w) => w.refusals.smallerPhotos);
1085
+ field.shrink = { ...(maxSide !== undefined ? { maxSide } : {}), ...(quality !== undefined ? { quality } : {}) };
1086
+ }
1066
1087
  });
1067
1088
  },
1068
1089
  place: (part, drop) => layoutEdit((draft) => ops.place(draft, part, drop, { model, words })),
@@ -1150,6 +1171,9 @@ function createDesigner(options) {
1150
1171
  saveDraft();
1151
1172
  },
1152
1173
  async publish() {
1174
+ // A setting still typed is read first, as leaving its box reads it: what is published is what the boxes show.
1175
+ for (const read of [...readers])
1176
+ read();
1153
1177
  const checked = (0, core_1.validatePage)(page);
1154
1178
  if (!checked.ok)
1155
1179
  throw new Error(words.refusals.cannotPublish);
@@ -1172,7 +1196,7 @@ function createDesigner(options) {
1172
1196
  return false;
1173
1197
  }
1174
1198
  return apply((draft) => {
1175
- Object.assign(draft, clone(found.page));
1199
+ Object.assign(draft, clone((0, core_2.upgradePage)(found.page)));
1176
1200
  });
1177
1201
  },
1178
1202
  async settled() {
@@ -1183,7 +1207,7 @@ function createDesigner(options) {
1183
1207
  // panel lane
1184
1208
  setEach: (ids, change) => apply((draft) => several.setEach(draft, ids, change, fromModel)),
1185
1209
  // json lane
1186
- ...(0, page_json_1.pageJsonCommands)({ getPage: () => page, apply }),
1210
+ ...(0, page_json_1.pageJsonCommands)({ getPage: () => page, apply, words }),
1187
1211
  lists: () => clone(options.lists ?? []),
1188
1212
  setOptionsFrom(id, from) {
1189
1213
  const found = (0, page_tree_1.findNode)(page, id);