@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.
- package/package.json +4 -4
- package/src/lib/canvas-form.d.mts +1 -1
- package/src/lib/canvas-form.d.ts +1 -1
- package/src/lib/canvas-form.js +2 -1
- package/src/lib/canvas-form.js.map +1 -1
- package/src/lib/canvas-form.mjs +2 -1
- package/src/lib/canvas-form.mjs.map +1 -1
- package/src/lib/chrome.js +11 -0
- package/src/lib/chrome.js.map +1 -1
- package/src/lib/chrome.mjs +11 -0
- package/src/lib/chrome.mjs.map +1 -1
- package/src/lib/date-setting.d.mts +49 -0
- package/src/lib/date-setting.d.ts +49 -0
- package/src/lib/date-setting.js +125 -0
- package/src/lib/date-setting.js.map +1 -0
- package/src/lib/date-setting.mjs +122 -0
- package/src/lib/date-setting.mjs.map +1 -0
- package/src/lib/designer.d.mts +19 -1
- package/src/lib/designer.d.ts +19 -1
- package/src/lib/designer.js +32 -8
- package/src/lib/designer.js.map +1 -1
- package/src/lib/designer.mjs +32 -8
- package/src/lib/designer.mjs.map +1 -1
- package/src/lib/head-commands.d.mts +11 -1
- package/src/lib/head-commands.d.ts +11 -1
- package/src/lib/head-commands.js +33 -1
- package/src/lib/head-commands.js.map +1 -1
- package/src/lib/head-commands.mjs +30 -1
- package/src/lib/head-commands.mjs.map +1 -1
- package/src/lib/head-properties.js +19 -6
- package/src/lib/head-properties.js.map +1 -1
- package/src/lib/head-properties.mjs +19 -6
- package/src/lib/head-properties.mjs.map +1 -1
- package/src/lib/inline-settings.js +52 -11
- package/src/lib/inline-settings.js.map +1 -1
- package/src/lib/inline-settings.mjs +52 -11
- package/src/lib/inline-settings.mjs.map +1 -1
- package/src/lib/input-commands.js +3 -2
- package/src/lib/input-commands.js.map +1 -1
- package/src/lib/input-commands.mjs +3 -2
- package/src/lib/input-commands.mjs.map +1 -1
- package/src/lib/kind-settings-choices.js +16 -7
- package/src/lib/kind-settings-choices.js.map +1 -1
- package/src/lib/kind-settings-choices.mjs +16 -7
- package/src/lib/kind-settings-choices.mjs.map +1 -1
- package/src/lib/kind-settings-inputs.js +116 -58
- package/src/lib/kind-settings-inputs.js.map +1 -1
- package/src/lib/kind-settings-inputs.mjs +116 -58
- package/src/lib/kind-settings-inputs.mjs.map +1 -1
- package/src/lib/kind-settings-picker.js +16 -9
- package/src/lib/kind-settings-picker.js.map +1 -1
- package/src/lib/kind-settings-picker.mjs +16 -9
- package/src/lib/kind-settings-picker.mjs.map +1 -1
- package/src/lib/kind-settings-structures.js +28 -14
- package/src/lib/kind-settings-structures.js.map +1 -1
- package/src/lib/kind-settings-structures.mjs +29 -15
- package/src/lib/kind-settings-structures.mjs.map +1 -1
- package/src/lib/kind-settings.js +47 -43
- package/src/lib/kind-settings.js.map +1 -1
- package/src/lib/kind-settings.mjs +47 -43
- package/src/lib/kind-settings.mjs.map +1 -1
- package/src/lib/list-calendar.d.mts +7 -0
- package/src/lib/list-calendar.d.ts +7 -0
- package/src/lib/list-calendar.js +155 -0
- package/src/lib/list-calendar.js.map +1 -0
- package/src/lib/list-calendar.mjs +152 -0
- package/src/lib/list-calendar.mjs.map +1 -0
- package/src/lib/list-commands.d.mts +3 -1
- package/src/lib/list-commands.d.ts +3 -1
- package/src/lib/list-commands.js +8 -0
- package/src/lib/list-commands.js.map +1 -1
- package/src/lib/list-commands.mjs +9 -1
- package/src/lib/list-commands.mjs.map +1 -1
- package/src/lib/list-properties.js +103 -55
- package/src/lib/list-properties.js.map +1 -1
- package/src/lib/list-properties.mjs +103 -55
- package/src/lib/list-properties.mjs.map +1 -1
- package/src/lib/locales/ar/changes.js +3 -0
- package/src/lib/locales/ar/changes.js.map +1 -1
- package/src/lib/locales/ar/changes.mjs +3 -0
- package/src/lib/locales/ar/changes.mjs.map +1 -1
- package/src/lib/locales/ar/index.js +2 -1
- package/src/lib/locales/ar/index.js.map +1 -1
- package/src/lib/locales/ar/index.mjs +2 -1
- package/src/lib/locales/ar/index.mjs.map +1 -1
- package/src/lib/locales/ar/inputs.d.mts +2 -0
- package/src/lib/locales/ar/inputs.d.ts +2 -0
- package/src/lib/locales/ar/inputs.js +20 -0
- package/src/lib/locales/ar/inputs.js.map +1 -0
- package/src/lib/locales/ar/inputs.mjs +17 -0
- package/src/lib/locales/ar/inputs.mjs.map +1 -0
- package/src/lib/locales/ar/list.js +26 -0
- package/src/lib/locales/ar/list.js.map +1 -1
- package/src/lib/locales/ar/list.mjs +26 -0
- package/src/lib/locales/ar/list.mjs.map +1 -1
- package/src/lib/locales/ar/questions.js +7 -0
- package/src/lib/locales/ar/questions.js.map +1 -1
- package/src/lib/locales/ar/questions.mjs +7 -0
- package/src/lib/locales/ar/questions.mjs.map +1 -1
- package/src/lib/locales/ar/refusals.js +1 -0
- package/src/lib/locales/ar/refusals.js.map +1 -1
- package/src/lib/locales/ar/refusals.mjs +1 -0
- package/src/lib/locales/ar/refusals.mjs.map +1 -1
- package/src/lib/locales/en/changes.d.mts +3 -0
- package/src/lib/locales/en/changes.d.ts +3 -0
- package/src/lib/locales/en/changes.js +3 -0
- package/src/lib/locales/en/changes.js.map +1 -1
- package/src/lib/locales/en/changes.mjs +3 -0
- package/src/lib/locales/en/changes.mjs.map +1 -1
- package/src/lib/locales/en/index.d.mts +60 -0
- package/src/lib/locales/en/index.d.ts +60 -0
- package/src/lib/locales/en/index.js +2 -1
- package/src/lib/locales/en/index.js.map +1 -1
- package/src/lib/locales/en/index.mjs +2 -1
- package/src/lib/locales/en/index.mjs.map +1 -1
- package/src/lib/locales/en/inputs.d.mts +26 -0
- package/src/lib/locales/en/inputs.d.ts +26 -0
- package/src/lib/locales/en/inputs.js +30 -0
- package/src/lib/locales/en/inputs.js.map +1 -0
- package/src/lib/locales/en/inputs.mjs +27 -0
- package/src/lib/locales/en/inputs.mjs.map +1 -0
- package/src/lib/locales/en/list.d.mts +34 -0
- package/src/lib/locales/en/list.d.ts +34 -0
- package/src/lib/locales/en/list.js +27 -0
- package/src/lib/locales/en/list.js.map +1 -1
- package/src/lib/locales/en/list.mjs +27 -0
- package/src/lib/locales/en/list.mjs.map +1 -1
- package/src/lib/locales/en/questions.d.mts +8 -0
- package/src/lib/locales/en/questions.d.ts +8 -0
- package/src/lib/locales/en/questions.js +8 -0
- package/src/lib/locales/en/questions.js.map +1 -1
- package/src/lib/locales/en/questions.mjs +8 -0
- package/src/lib/locales/en/questions.mjs.map +1 -1
- package/src/lib/locales/en/refusals.d.mts +1 -0
- package/src/lib/locales/en/refusals.d.ts +1 -0
- package/src/lib/locales/en/refusals.js +1 -0
- package/src/lib/locales/en/refusals.js.map +1 -1
- package/src/lib/locales/en/refusals.mjs +1 -0
- package/src/lib/locales/en/refusals.mjs.map +1 -1
- package/src/lib/number-box.d.mts +66 -0
- package/src/lib/number-box.d.ts +66 -0
- package/src/lib/number-box.js +153 -0
- package/src/lib/number-box.js.map +1 -0
- package/src/lib/number-box.mjs +149 -0
- package/src/lib/number-box.mjs.map +1 -0
- package/src/lib/page-checks.js +5 -0
- package/src/lib/page-checks.js.map +1 -1
- package/src/lib/page-checks.mjs +5 -0
- package/src/lib/page-checks.mjs.map +1 -1
- package/src/lib/page-json.d.mts +3 -1
- package/src/lib/page-json.d.ts +3 -1
- package/src/lib/page-json.js +5 -3
- package/src/lib/page-json.js.map +1 -1
- package/src/lib/page-json.mjs +5 -3
- package/src/lib/page-json.mjs.map +1 -1
- package/src/lib/page-tree.d.mts +3 -1
- package/src/lib/page-tree.d.ts +3 -1
- package/src/lib/page-tree.js +8 -0
- package/src/lib/page-tree.js.map +1 -1
- package/src/lib/page-tree.mjs +7 -0
- package/src/lib/page-tree.mjs.map +1 -1
- package/src/lib/panel-block.js +16 -5
- package/src/lib/panel-block.js.map +1 -1
- package/src/lib/panel-block.mjs +16 -5
- package/src/lib/panel-block.mjs.map +1 -1
- package/src/lib/panel-layout.js +20 -15
- package/src/lib/panel-layout.js.map +1 -1
- package/src/lib/panel-layout.mjs +20 -15
- package/src/lib/panel-layout.mjs.map +1 -1
- package/src/lib/panel-look.js +21 -14
- package/src/lib/panel-look.js.map +1 -1
- package/src/lib/panel-look.mjs +21 -14
- package/src/lib/panel-look.mjs.map +1 -1
- package/src/lib/panel-map.js +53 -20
- package/src/lib/panel-map.js.map +1 -1
- package/src/lib/panel-map.mjs +53 -20
- package/src/lib/panel-map.mjs.map +1 -1
- package/src/lib/rules-answers.d.mts +1 -1
- package/src/lib/rules-answers.d.ts +1 -1
- package/src/lib/rules-answers.js +45 -21
- package/src/lib/rules-answers.js.map +1 -1
- package/src/lib/rules-answers.mjs +45 -21
- package/src/lib/rules-answers.mjs.map +1 -1
- package/src/lib/rules-formula-box.d.mts +7 -3
- package/src/lib/rules-formula-box.d.ts +7 -3
- package/src/lib/rules-formula-box.js +26 -6
- package/src/lib/rules-formula-box.js.map +1 -1
- package/src/lib/rules-formula-box.mjs +26 -6
- package/src/lib/rules-formula-box.mjs.map +1 -1
- package/src/lib/rules-formula.js +7 -5
- package/src/lib/rules-formula.js.map +1 -1
- package/src/lib/rules-formula.mjs +8 -6
- package/src/lib/rules-formula.mjs.map +1 -1
- package/src/lib/rules-worked-out.js +66 -12
- package/src/lib/rules-worked-out.js.map +1 -1
- package/src/lib/rules-worked-out.mjs +66 -12
- package/src/lib/rules-worked-out.mjs.map +1 -1
- package/src/lib/setting-refusals.d.mts +3 -0
- package/src/lib/setting-refusals.d.ts +3 -0
- package/src/lib/setting-refusals.js +25 -0
- package/src/lib/setting-refusals.js.map +1 -0
- package/src/lib/setting-refusals.mjs +22 -0
- package/src/lib/setting-refusals.mjs.map +1 -0
- package/src/lib/table-panel.js +16 -5
- package/src/lib/table-panel.js.map +1 -1
- package/src/lib/table-panel.mjs +16 -5
- package/src/lib/table-panel.mjs.map +1 -1
- package/src/lib/templates.js +1 -1
- package/src/lib/templates.js.map +1 -1
- package/src/lib/templates.mjs +2 -2
- package/src/lib/templates.mjs.map +1 -1
- package/src/lib/try-it.d.mts +6 -1
- package/src/lib/try-it.d.ts +6 -1
- package/src/lib/try-it.js +25 -0
- package/src/lib/try-it.js.map +1 -1
- package/src/lib/try-it.mjs +24 -0
- package/src/lib/try-it.mjs.map +1 -1
- package/src/lib/work-text.d.mts +10 -2
- package/src/lib/work-text.d.ts +10 -2
- package/src/lib/work-text.js +12 -23
- package/src/lib/work-text.js.map +1 -1
- package/src/lib/work-text.mjs +12 -21
- 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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"}
|
package/src/lib/designer.d.mts
CHANGED
|
@@ -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
|
-
/**
|
|
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. */
|
package/src/lib/designer.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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. */
|
package/src/lib/designer.js
CHANGED
|
@@ -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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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);
|