@fieldia/viewer 0.11.0 → 0.13.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/bundle/fieldia.ar.js +2 -2
- package/bundle/fieldia.ar.js.map +2 -2
- package/bundle/fieldia.de.js +2 -2
- package/bundle/fieldia.de.js.map +2 -2
- package/bundle/fieldia.fr.js +2 -2
- package/bundle/fieldia.fr.js.map +2 -2
- package/bundle/fieldia.js +62 -4
- package/bundle/fieldia.js.map +4 -4
- package/package.json +3 -3
- package/src/index.d.mts +1 -1
- package/src/index.d.ts +1 -1
- package/src/index.js +5 -1
- package/src/index.js.map +1 -1
- package/src/index.mjs +1 -1
- package/src/index.mjs.map +1 -1
- package/src/lib/attachment-preview.d.mts +27 -0
- package/src/lib/attachment-preview.d.ts +27 -0
- package/src/lib/attachment-preview.js +89 -0
- package/src/lib/attachment-preview.js.map +1 -0
- package/src/lib/attachment-preview.mjs +86 -0
- package/src/lib/attachment-preview.mjs.map +1 -0
- package/src/lib/dialog.d.mts +8 -1
- package/src/lib/dialog.d.ts +8 -1
- package/src/lib/dialog.js +75 -10
- package/src/lib/dialog.js.map +1 -1
- package/src/lib/dialog.mjs +75 -11
- package/src/lib/dialog.mjs.map +1 -1
- package/src/lib/hotkeys.d.mts +11 -0
- package/src/lib/hotkeys.d.ts +11 -0
- package/src/lib/hotkeys.js +34 -0
- package/src/lib/hotkeys.js.map +1 -0
- package/src/lib/hotkeys.mjs +30 -0
- package/src/lib/hotkeys.mjs.map +1 -0
- package/src/lib/labels.d.mts +25 -0
- package/src/lib/labels.d.ts +25 -0
- package/src/lib/labels.js +17 -0
- package/src/lib/labels.js.map +1 -1
- package/src/lib/labels.mjs +17 -0
- package/src/lib/labels.mjs.map +1 -1
- package/src/lib/list.d.mts +3 -1
- package/src/lib/list.d.ts +3 -1
- package/src/lib/list.js +1 -1
- package/src/lib/list.js.map +1 -1
- package/src/lib/list.mjs +1 -1
- package/src/lib/list.mjs.map +1 -1
- package/src/lib/locales/ar.js +17 -0
- package/src/lib/locales/ar.js.map +1 -1
- package/src/lib/locales/ar.mjs +17 -0
- package/src/lib/locales/ar.mjs.map +1 -1
- package/src/lib/locales/de.js +17 -0
- package/src/lib/locales/de.js.map +1 -1
- package/src/lib/locales/de.mjs +17 -0
- package/src/lib/locales/de.mjs.map +1 -1
- package/src/lib/locales/fr.js +17 -0
- package/src/lib/locales/fr.js.map +1 -1
- package/src/lib/locales/fr.mjs +17 -0
- package/src/lib/locales/fr.mjs.map +1 -1
- package/src/lib/look.d.mts +16 -1
- package/src/lib/look.d.ts +16 -1
- package/src/lib/look.js +34 -0
- package/src/lib/look.js.map +1 -1
- package/src/lib/look.mjs +31 -0
- package/src/lib/look.mjs.map +1 -1
- package/src/lib/open.d.mts +7 -1
- package/src/lib/open.d.ts +7 -1
- package/src/lib/open.js +19 -8
- package/src/lib/open.js.map +1 -1
- package/src/lib/open.mjs +20 -9
- package/src/lib/open.mjs.map +1 -1
- package/src/lib/place.d.mts +2 -0
- package/src/lib/place.d.ts +2 -0
- package/src/lib/place.js.map +1 -1
- package/src/lib/place.mjs.map +1 -1
- package/src/lib/record-bar.d.mts +56 -0
- package/src/lib/record-bar.d.ts +56 -0
- package/src/lib/record-bar.js +237 -0
- package/src/lib/record-bar.js.map +1 -0
- package/src/lib/record-bar.mjs +234 -0
- package/src/lib/record-bar.mjs.map +1 -0
- package/src/lib/record-styles.d.mts +9 -0
- package/src/lib/record-styles.d.ts +9 -0
- package/src/lib/record-styles.js +83 -0
- package/src/lib/record-styles.js.map +1 -0
- package/src/lib/record-styles.mjs +79 -0
- package/src/lib/record-styles.mjs.map +1 -0
- package/src/lib/related.d.mts +7 -3
- package/src/lib/related.d.ts +7 -3
- package/src/lib/related.js +28 -9
- package/src/lib/related.js.map +1 -1
- package/src/lib/related.mjs +28 -9
- package/src/lib/related.mjs.map +1 -1
- package/src/lib/say.d.mts +3 -1
- package/src/lib/say.d.ts +3 -1
- package/src/lib/say.js +17 -1
- package/src/lib/say.js.map +1 -1
- package/src/lib/say.mjs +17 -1
- package/src/lib/say.mjs.map +1 -1
- package/src/lib/tab-strip.d.mts +17 -0
- package/src/lib/tab-strip.d.ts +17 -0
- package/src/lib/tab-strip.js +51 -0
- package/src/lib/tab-strip.js.map +1 -0
- package/src/lib/tab-strip.mjs +48 -0
- package/src/lib/tab-strip.mjs.map +1 -0
- package/src/lib/value-words.d.mts +10 -0
- package/src/lib/value-words.d.ts +10 -0
- package/src/lib/value-words.js +38 -0
- package/src/lib/value-words.js.map +1 -0
- package/src/lib/value-words.mjs +35 -0
- package/src/lib/value-words.mjs.map +1 -0
- package/src/lib/viewer.d.mts +45 -2
- package/src/lib/viewer.d.ts +45 -2
- package/src/lib/viewer.js +575 -51
- package/src/lib/viewer.js.map +1 -1
- package/src/lib/viewer.mjs +576 -53
- package/src/lib/viewer.mjs.map +1 -1
package/src/lib/open.js
CHANGED
|
@@ -27,25 +27,33 @@ async function openPage(opener, request) {
|
|
|
27
27
|
form: undefined,
|
|
28
28
|
recordId: request.recordId ?? null,
|
|
29
29
|
values: request.values,
|
|
30
|
+
listFilter: request.filter,
|
|
30
31
|
// What belongs to the page that opened it alone.
|
|
31
32
|
drafts: undefined,
|
|
32
33
|
autosave: undefined,
|
|
33
34
|
readonly: undefined,
|
|
34
35
|
editSwitch: undefined,
|
|
35
36
|
saveStatus: undefined,
|
|
37
|
+
// The pager and the trail are this record's: a dialog has neither, and a page in its place a trail of its own.
|
|
38
|
+
records: undefined,
|
|
39
|
+
breadcrumbs: undefined,
|
|
36
40
|
};
|
|
37
41
|
const title = request.title ?? opener.title(found);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
// Over this form, its words are this form's: a page in its place has this form's place, and its own. Either posts in this record's conversation.
|
|
43
|
+
const over = { ...shared, host: { ...options.host, say: opener.say, post: opener.post } };
|
|
44
|
+
const result = request.as === 'page' ? await inPlace(opener, { ...shared, host: { ...options.host, post: opener.post } })
|
|
45
|
+
: request.as === 'panel' ? await (0, dialog_1.openFormPanel)({ ...over, title, side: request.side })
|
|
46
|
+
: await (0, dialog_1.openFormDialog)({ ...over, title, size: found.layout.type === 'sheet' ? 'large' : 'medium' });
|
|
41
47
|
const name = (0, related_1.nameFieldOf)(found);
|
|
42
48
|
const label = name ? result.values[name] : undefined;
|
|
43
49
|
return { ...result, ...(typeof label === 'string' && label ? { label } : {}) };
|
|
44
50
|
}
|
|
45
51
|
/**
|
|
46
|
-
* A page in this form's place, with
|
|
52
|
+
* A page in this form's place, with the way back over it: where the app
|
|
53
|
+
* gives this record breadcrumbs, the trail with this record last; else, or
|
|
54
|
+
* where its page draws none (a list), Back. Saved or sent — once its own
|
|
47
55
|
* after-save steps have run — it gives way back to this form, as it was, and
|
|
48
|
-
* the run goes on;
|
|
56
|
+
* the run goes on; the way back, or a `close` step inside it, returns without.
|
|
49
57
|
*/
|
|
50
58
|
function inPlace(opener, options) {
|
|
51
59
|
const { place, root } = opener;
|
|
@@ -65,17 +73,20 @@ function inPlace(opener, options) {
|
|
|
65
73
|
resolve({ saved, recordId: state.recordId ?? null, values: state.values });
|
|
66
74
|
};
|
|
67
75
|
root.hidden = true;
|
|
68
|
-
|
|
76
|
+
// Where the app keeps a trail, this record joins it as the way back.
|
|
77
|
+
const trail = opener.options.breadcrumbs ? [...opener.options.breadcrumbs, { label: opener.name(), open: () => end(false) }] : undefined;
|
|
78
|
+
const opened = (0, viewer_1.mountViewer)(place, { ...options, breadcrumbs: trail, host: { ...options.host, close: () => end(false) } });
|
|
69
79
|
const back = doc.createElement('button');
|
|
70
80
|
back.type = 'button';
|
|
71
81
|
back.className = 'fd-button fd-button-link fd-back';
|
|
72
82
|
back.textContent = opener.back;
|
|
73
83
|
back.addEventListener('click', () => end(false));
|
|
74
|
-
opened.element.
|
|
84
|
+
if (!opened.element.querySelector('.fd-breadcrumbs'))
|
|
85
|
+
opened.element.prepend(back);
|
|
75
86
|
const leave = () => void opened.form.settled().then(() => end(true));
|
|
76
87
|
opened.on('save', leave);
|
|
77
88
|
opened.on('send', leave);
|
|
78
|
-
(opened.element.querySelector(dialog_1.FIRST_FIELD) ?? back).focus();
|
|
89
|
+
((0, dialog_1.focusField)(opened.element) ?? opened.element.querySelector(dialog_1.FIRST_FIELD) ?? back).focus();
|
|
79
90
|
});
|
|
80
91
|
}
|
|
81
92
|
//# sourceMappingURL=open.js.map
|
package/src/lib/open.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/open.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/open.ts"],"names":[],"mappings":"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"}
|
package/src/lib/open.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FIRST_FIELD, openFormDialog, openFormPanel } from './dialog.mjs';
|
|
1
|
+
import { FIRST_FIELD, focusField, openFormDialog, openFormPanel } from './dialog.mjs';
|
|
2
2
|
import { findPage, nameFieldOf } from './related.mjs';
|
|
3
3
|
import { mountViewer } from './viewer.mjs';
|
|
4
4
|
/**
|
|
@@ -24,25 +24,33 @@ export async function openPage(opener, request) {
|
|
|
24
24
|
form: undefined,
|
|
25
25
|
recordId: request.recordId ?? null,
|
|
26
26
|
values: request.values,
|
|
27
|
+
listFilter: request.filter,
|
|
27
28
|
// What belongs to the page that opened it alone.
|
|
28
29
|
drafts: undefined,
|
|
29
30
|
autosave: undefined,
|
|
30
31
|
readonly: undefined,
|
|
31
32
|
editSwitch: undefined,
|
|
32
33
|
saveStatus: undefined,
|
|
34
|
+
// The pager and the trail are this record's: a dialog has neither, and a page in its place a trail of its own.
|
|
35
|
+
records: undefined,
|
|
36
|
+
breadcrumbs: undefined,
|
|
33
37
|
};
|
|
34
38
|
const title = request.title ?? opener.title(found);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
// Over this form, its words are this form's: a page in its place has this form's place, and its own. Either posts in this record's conversation.
|
|
40
|
+
const over = { ...shared, host: { ...options.host, say: opener.say, post: opener.post } };
|
|
41
|
+
const result = request.as === 'page' ? await inPlace(opener, { ...shared, host: { ...options.host, post: opener.post } })
|
|
42
|
+
: request.as === 'panel' ? await openFormPanel({ ...over, title, side: request.side })
|
|
43
|
+
: await openFormDialog({ ...over, title, size: found.layout.type === 'sheet' ? 'large' : 'medium' });
|
|
38
44
|
const name = nameFieldOf(found);
|
|
39
45
|
const label = name ? result.values[name] : undefined;
|
|
40
46
|
return { ...result, ...(typeof label === 'string' && label ? { label } : {}) };
|
|
41
47
|
}
|
|
42
48
|
/**
|
|
43
|
-
* A page in this form's place, with
|
|
49
|
+
* A page in this form's place, with the way back over it: where the app
|
|
50
|
+
* gives this record breadcrumbs, the trail with this record last; else, or
|
|
51
|
+
* where its page draws none (a list), Back. Saved or sent — once its own
|
|
44
52
|
* after-save steps have run — it gives way back to this form, as it was, and
|
|
45
|
-
* the run goes on;
|
|
53
|
+
* the run goes on; the way back, or a `close` step inside it, returns without.
|
|
46
54
|
*/
|
|
47
55
|
function inPlace(opener, options) {
|
|
48
56
|
const { place, root } = opener;
|
|
@@ -62,17 +70,20 @@ function inPlace(opener, options) {
|
|
|
62
70
|
resolve({ saved, recordId: state.recordId ?? null, values: state.values });
|
|
63
71
|
};
|
|
64
72
|
root.hidden = true;
|
|
65
|
-
|
|
73
|
+
// Where the app keeps a trail, this record joins it as the way back.
|
|
74
|
+
const trail = opener.options.breadcrumbs ? [...opener.options.breadcrumbs, { label: opener.name(), open: () => end(false) }] : undefined;
|
|
75
|
+
const opened = mountViewer(place, { ...options, breadcrumbs: trail, host: { ...options.host, close: () => end(false) } });
|
|
66
76
|
const back = doc.createElement('button');
|
|
67
77
|
back.type = 'button';
|
|
68
78
|
back.className = 'fd-button fd-button-link fd-back';
|
|
69
79
|
back.textContent = opener.back;
|
|
70
80
|
back.addEventListener('click', () => end(false));
|
|
71
|
-
opened.element.
|
|
81
|
+
if (!opened.element.querySelector('.fd-breadcrumbs'))
|
|
82
|
+
opened.element.prepend(back);
|
|
72
83
|
const leave = () => void opened.form.settled().then(() => end(true));
|
|
73
84
|
opened.on('save', leave);
|
|
74
85
|
opened.on('send', leave);
|
|
75
|
-
(opened.element.querySelector(FIRST_FIELD) ?? back).focus();
|
|
86
|
+
(focusField(opened.element) ?? opened.element.querySelector(FIRST_FIELD) ?? back).focus();
|
|
76
87
|
});
|
|
77
88
|
}
|
|
78
89
|
//# sourceMappingURL=open.mjs.map
|
package/src/lib/open.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.mjs","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/open.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"open.mjs","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/open.ts"],"names":[],"mappings":"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"}
|
package/src/lib/place.d.mts
CHANGED
|
@@ -11,6 +11,8 @@ export interface Place {
|
|
|
11
11
|
onPage: boolean;
|
|
12
12
|
/** Where labels sit here, as the page or a group round it says; undefined leaves them to the skin. */
|
|
13
13
|
labels?: LabelPlace;
|
|
14
|
+
/** On a line of parts: words are drawn as words in the line, not a paragraph of their own. */
|
|
15
|
+
inline?: boolean;
|
|
14
16
|
}
|
|
15
17
|
export type SectionStyle = NonNullable<SectionNode['style']>;
|
|
16
18
|
export interface SectionPlan {
|
package/src/lib/place.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export interface Place {
|
|
|
11
11
|
onPage: boolean;
|
|
12
12
|
/** Where labels sit here, as the page or a group round it says; undefined leaves them to the skin. */
|
|
13
13
|
labels?: LabelPlace;
|
|
14
|
+
/** On a line of parts: words are drawn as words in the line, not a paragraph of their own. */
|
|
15
|
+
inline?: boolean;
|
|
14
16
|
}
|
|
15
17
|
export type SectionStyle = NonNullable<SectionNode['style']>;
|
|
16
18
|
export interface SectionPlan {
|
package/src/lib/place.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place.js","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/place.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"place.js","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/place.ts"],"names":[],"mappings":";;AAmCA,kCAiBC;AASD,gCAIC;AAjED,wCAA+G;AAkC/G,uFAAuF;AACvF,SAAgB,WAAW,CAAC,IAAiB,EAAE,KAAY;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACrD,MAAM,GAAG,GAAG,IAAA,kBAAW,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,WAAW,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxG,OAAO;QACL,KAAK;QACL,WAAW;QACX,EAAE;QACF,KAAK,EAAE;YACL,OAAO,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG;YAC9D,kGAAkG;YAClG,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC;YAC/D,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;SACpC;KACF,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE1D;;;GAGG;AACH,SAAgB,UAAU,CAAC,IAAe,EAAE,IAAe,EAAE,KAA6B;IACxF,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACpC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACpE,CAAC"}
|
package/src/lib/place.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place.mjs","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/place.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"place.mjs","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/place.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqE,MAAM,eAAe,CAAC;AAkC/G,uFAAuF;AACvF,MAAM,UAAU,WAAW,CAAC,IAAiB,EAAE,KAAY;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACrD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,WAAW,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxG,OAAO;QACL,KAAK;QACL,WAAW;QACX,EAAE;QACF,KAAK,EAAE;YACL,OAAO,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG;YAC9D,kGAAkG;YAClG,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC;YAC/D,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;SACpC;KACF,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAe,EAAE,IAAe,EAAE,KAA6B;IACxF,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACpC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Form, RecordId, RecordToolbar, RunResult } from '@fieldia/core';
|
|
2
|
+
import { type IconSet } from '@fieldia/widgets';
|
|
3
|
+
import { type El } from './dom.mjs';
|
|
4
|
+
import type { ViewerLabels } from './labels.mjs';
|
|
5
|
+
/**
|
|
6
|
+
* The records round the one shown, for the pager over it: how many there
|
|
7
|
+
* are, where this one is among them (from 0), and the id at a place, which
|
|
8
|
+
* may come from the server.
|
|
9
|
+
*/
|
|
10
|
+
export interface RecordPager {
|
|
11
|
+
total: number;
|
|
12
|
+
at: number;
|
|
13
|
+
id(at: number): RecordId | Promise<RecordId>;
|
|
14
|
+
}
|
|
15
|
+
/** A page on the way to the record, as the breadcrumbs show it: its words, and what a press does — back to it. */
|
|
16
|
+
export interface Breadcrumb {
|
|
17
|
+
label: string;
|
|
18
|
+
/** Back to that page: the app's own way. */
|
|
19
|
+
open?: () => void;
|
|
20
|
+
/** Or an address to go to. */
|
|
21
|
+
href?: string;
|
|
22
|
+
}
|
|
23
|
+
/** What the bar over a record needs of the viewer that draws it. */
|
|
24
|
+
export interface RecordBarContext {
|
|
25
|
+
doc: Document;
|
|
26
|
+
el: El;
|
|
27
|
+
form: Form;
|
|
28
|
+
toolbar: RecordToolbar | undefined;
|
|
29
|
+
records: readonly RecordId[] | RecordPager | undefined;
|
|
30
|
+
breadcrumbs: readonly Breadcrumb[] | undefined;
|
|
31
|
+
labels: ViewerLabels;
|
|
32
|
+
icons?: IconSet;
|
|
33
|
+
uid(id: string): string;
|
|
34
|
+
fill(template: string, values: Record<string, string | number>): string;
|
|
35
|
+
withIcon(name: string | undefined, text: string): (Node | string)[];
|
|
36
|
+
/** A press of an item: one run at a time, the gear busy meanwhile. */
|
|
37
|
+
press(button: HTMLElement, run: () => Promise<RunResult>): Promise<void>;
|
|
38
|
+
/** The record's name, as its crumb says it; empty for a new one. */
|
|
39
|
+
name(): string;
|
|
40
|
+
/** Save what changed before the pager moves on; false keeps the record where it is. */
|
|
41
|
+
leave(): Promise<boolean>;
|
|
42
|
+
/** Draw the form again: the pager's records changed, the record shown perhaps not. */
|
|
43
|
+
render(): void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The bar over a record, as Flectra's control panel: the breadcrumbs the app
|
|
47
|
+
* gives, the gear menu the page fills (its Print group, then its actions),
|
|
48
|
+
* and the pager over the records the app gives. Null when it would hold
|
|
49
|
+
* nothing. A dialog is given neither breadcrumbs nor records, so there only
|
|
50
|
+
* the menu shows; on a phone the trail folds to the page before this one.
|
|
51
|
+
*/
|
|
52
|
+
export declare function recordBar(context: RecordBarContext): {
|
|
53
|
+
element: HTMLElement;
|
|
54
|
+
update(): void;
|
|
55
|
+
destroy(): void;
|
|
56
|
+
} | null;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Form, RecordId, RecordToolbar, RunResult } from '@fieldia/core';
|
|
2
|
+
import { type IconSet } from '@fieldia/widgets';
|
|
3
|
+
import { type El } from './dom';
|
|
4
|
+
import type { ViewerLabels } from './labels';
|
|
5
|
+
/**
|
|
6
|
+
* The records round the one shown, for the pager over it: how many there
|
|
7
|
+
* are, where this one is among them (from 0), and the id at a place, which
|
|
8
|
+
* may come from the server.
|
|
9
|
+
*/
|
|
10
|
+
export interface RecordPager {
|
|
11
|
+
total: number;
|
|
12
|
+
at: number;
|
|
13
|
+
id(at: number): RecordId | Promise<RecordId>;
|
|
14
|
+
}
|
|
15
|
+
/** A page on the way to the record, as the breadcrumbs show it: its words, and what a press does — back to it. */
|
|
16
|
+
export interface Breadcrumb {
|
|
17
|
+
label: string;
|
|
18
|
+
/** Back to that page: the app's own way. */
|
|
19
|
+
open?: () => void;
|
|
20
|
+
/** Or an address to go to. */
|
|
21
|
+
href?: string;
|
|
22
|
+
}
|
|
23
|
+
/** What the bar over a record needs of the viewer that draws it. */
|
|
24
|
+
export interface RecordBarContext {
|
|
25
|
+
doc: Document;
|
|
26
|
+
el: El;
|
|
27
|
+
form: Form;
|
|
28
|
+
toolbar: RecordToolbar | undefined;
|
|
29
|
+
records: readonly RecordId[] | RecordPager | undefined;
|
|
30
|
+
breadcrumbs: readonly Breadcrumb[] | undefined;
|
|
31
|
+
labels: ViewerLabels;
|
|
32
|
+
icons?: IconSet;
|
|
33
|
+
uid(id: string): string;
|
|
34
|
+
fill(template: string, values: Record<string, string | number>): string;
|
|
35
|
+
withIcon(name: string | undefined, text: string): (Node | string)[];
|
|
36
|
+
/** A press of an item: one run at a time, the gear busy meanwhile. */
|
|
37
|
+
press(button: HTMLElement, run: () => Promise<RunResult>): Promise<void>;
|
|
38
|
+
/** The record's name, as its crumb says it; empty for a new one. */
|
|
39
|
+
name(): string;
|
|
40
|
+
/** Save what changed before the pager moves on; false keeps the record where it is. */
|
|
41
|
+
leave(): Promise<boolean>;
|
|
42
|
+
/** Draw the form again: the pager's records changed, the record shown perhaps not. */
|
|
43
|
+
render(): void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The bar over a record, as Flectra's control panel: the breadcrumbs the app
|
|
47
|
+
* gives, the gear menu the page fills (its Print group, then its actions),
|
|
48
|
+
* and the pager over the records the app gives. Null when it would hold
|
|
49
|
+
* nothing. A dialog is given neither breadcrumbs nor records, so there only
|
|
50
|
+
* the menu shows; on a phone the trail folds to the page before this one.
|
|
51
|
+
*/
|
|
52
|
+
export declare function recordBar(context: RecordBarContext): {
|
|
53
|
+
element: HTMLElement;
|
|
54
|
+
update(): void;
|
|
55
|
+
destroy(): void;
|
|
56
|
+
} | null;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordBar = recordBar;
|
|
4
|
+
const widgets_1 = require("@fieldia/widgets");
|
|
5
|
+
const dom_1 = require("./dom");
|
|
6
|
+
const hotkeys_1 = require("./hotkeys");
|
|
7
|
+
const GEAR = {
|
|
8
|
+
gear: '<circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.7 1.7 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.7 1.7 0 0 0-1.8-.3 1.7 1.7 0 0 0-1 1.5V21a2 2 0 1 1-4 0v-.1a1.7 1.7 0 0 0-1.1-1.5 1.7 1.7 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.7 1.7 0 0 0 .3-1.8 1.7 1.7 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.7 1.7 0 0 0 1.5-1.1 1.7 1.7 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.7 1.7 0 0 0 1.8.3H9a1.7 1.7 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.7 1.7 0 0 0 1 1.5 1.7 1.7 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.7 1.7 0 0 0-.3 1.8V9a1.7 1.7 0 0 0 1.5 1H21a2 2 0 1 1 0 4h-.1a1.7 1.7 0 0 0-1.5 1z"/>',
|
|
9
|
+
};
|
|
10
|
+
const same = (a, b) => a != null && b != null && String(a) === String(b);
|
|
11
|
+
/**
|
|
12
|
+
* The bar over a record, as Flectra's control panel: the breadcrumbs the app
|
|
13
|
+
* gives, the gear menu the page fills (its Print group, then its actions),
|
|
14
|
+
* and the pager over the records the app gives. Null when it would hold
|
|
15
|
+
* nothing. A dialog is given neither breadcrumbs nor records, so there only
|
|
16
|
+
* the menu shows; on a phone the trail folds to the page before this one.
|
|
17
|
+
*/
|
|
18
|
+
function recordBar(context) {
|
|
19
|
+
const { el, labels, toolbar } = context;
|
|
20
|
+
const menuItems = toolbar?.menu ?? [];
|
|
21
|
+
const trail = toolbar?.breadcrumbs === false ? undefined : context.breadcrumbs;
|
|
22
|
+
const given = toolbar?.pager === false ? undefined : context.records;
|
|
23
|
+
if (!menuItems.length && !trail?.length && !given)
|
|
24
|
+
return null;
|
|
25
|
+
const updaters = [];
|
|
26
|
+
const cleanups = [];
|
|
27
|
+
const bar = el('div', { class: 'fd-record-bar' });
|
|
28
|
+
// ---- the trail ----
|
|
29
|
+
if (trail?.length) {
|
|
30
|
+
const current = el('span', { class: 'fd-crumb-current', 'aria-current': 'page' });
|
|
31
|
+
const list = el('ol', {}, ...trail.map((crumb) => {
|
|
32
|
+
const link = crumb.href !== undefined ? el('a', { class: 'fd-crumb', href: crumb.href }, crumb.label) : el('button', { type: 'button', class: 'fd-crumb' }, crumb.label);
|
|
33
|
+
if (crumb.open) {
|
|
34
|
+
link.addEventListener('click', (event) => {
|
|
35
|
+
event.preventDefault();
|
|
36
|
+
crumb.open?.();
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return el('li', {}, link);
|
|
40
|
+
}), el('li', {}, current));
|
|
41
|
+
bar.append(el('nav', { class: 'fd-breadcrumbs', 'aria-label': labels.breadcrumbs }, list));
|
|
42
|
+
updaters.push(() => (0, dom_1.setText)(current, context.name() || labels.newRecord));
|
|
43
|
+
}
|
|
44
|
+
// ---- the gear menu ----
|
|
45
|
+
if (menuItems.length)
|
|
46
|
+
bar.append(gearMenu(context, menuItems, updaters, cleanups));
|
|
47
|
+
// ---- the pager ----
|
|
48
|
+
if (given)
|
|
49
|
+
bar.append(pager(context, given, trail, updaters, cleanups));
|
|
50
|
+
return {
|
|
51
|
+
element: bar,
|
|
52
|
+
update: () => {
|
|
53
|
+
for (const update of updaters)
|
|
54
|
+
update();
|
|
55
|
+
},
|
|
56
|
+
destroy: () => {
|
|
57
|
+
for (const cleanup of cleanups)
|
|
58
|
+
cleanup();
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** The gear and its menu: a real menu, opened with Enter, Space or the arrows, its items reached with the arrows, gone with Escape. */
|
|
63
|
+
function gearMenu(context, items, updaters, cleanups) {
|
|
64
|
+
const { doc, el, form, labels } = context;
|
|
65
|
+
const id = context.uid('record-menu');
|
|
66
|
+
const gear = el('button', { type: 'button', class: 'fd-button fd-record-gear', id: `${id}-button`, 'aria-haspopup': 'menu', 'aria-expanded': 'false', 'aria-controls': id, title: labels.actions });
|
|
67
|
+
const icon = (0, widgets_1.drawIcon)(doc, 'gear', GEAR);
|
|
68
|
+
if (icon)
|
|
69
|
+
gear.append(icon);
|
|
70
|
+
gear.append(el('span', { class: 'fd-record-gear-words' }, labels.actions));
|
|
71
|
+
const menu = el('div', { class: 'fd-record-menu', role: 'menu', id, 'aria-labelledby': gear.id, hidden: '' });
|
|
72
|
+
const drawn = items.map((item) => {
|
|
73
|
+
const words = item.label ?? (item.builtin ? labels[item.builtin] : item.id);
|
|
74
|
+
const button = el('button', { type: 'button', role: 'menuitem', tabindex: '-1', class: 'fd-record-menu-item', 'data-node': item.id }, ...context.withIcon(item.icon, words));
|
|
75
|
+
if (item.builtin === 'delete')
|
|
76
|
+
button.classList.add('fd-record-menu-danger');
|
|
77
|
+
button.addEventListener('click', () => {
|
|
78
|
+
close(true);
|
|
79
|
+
void context.press(gear, () => form.runAction(item.id));
|
|
80
|
+
});
|
|
81
|
+
return { item, button };
|
|
82
|
+
});
|
|
83
|
+
const printed = drawn.filter((d) => d.item.group === 'print');
|
|
84
|
+
const acted = drawn.filter((d) => d.item.group !== 'print');
|
|
85
|
+
const heading = el('div', { class: 'fd-record-menu-heading', role: 'presentation' }, labels.print);
|
|
86
|
+
const printGroup = el('div', { role: 'group', 'aria-label': labels.print }, heading, ...printed.map((d) => d.button));
|
|
87
|
+
const rule = el('div', { class: 'fd-record-menu-rule', role: 'separator' });
|
|
88
|
+
menu.append(...(printed.length ? [printGroup] : []), ...(printed.length && acted.length ? [rule] : []), ...acted.map((d) => d.button));
|
|
89
|
+
const wrap = el('div', { class: 'fd-record-actions' }, gear, menu);
|
|
90
|
+
const shown = () => drawn.filter((d) => !d.button.hidden).map((d) => d.button);
|
|
91
|
+
const onOutside = (event) => {
|
|
92
|
+
if (!wrap.contains(event.target))
|
|
93
|
+
close(false);
|
|
94
|
+
};
|
|
95
|
+
function open(at) {
|
|
96
|
+
if (!menu.hidden)
|
|
97
|
+
return;
|
|
98
|
+
menu.hidden = false;
|
|
99
|
+
// From the gear's start, unless that runs past the screen's edge: then from its end.
|
|
100
|
+
menu.removeAttribute('data-end');
|
|
101
|
+
const box = menu.getBoundingClientRect();
|
|
102
|
+
if (box.right > doc.documentElement.clientWidth - 4 || box.left < 4)
|
|
103
|
+
menu.setAttribute('data-end', '');
|
|
104
|
+
gear.setAttribute('aria-expanded', 'true');
|
|
105
|
+
doc.addEventListener('pointerdown', onOutside, true);
|
|
106
|
+
const items = shown();
|
|
107
|
+
(at === 'first' ? items[0] : items[items.length - 1])?.focus();
|
|
108
|
+
}
|
|
109
|
+
function close(refocus) {
|
|
110
|
+
if (menu.hidden)
|
|
111
|
+
return;
|
|
112
|
+
menu.hidden = true;
|
|
113
|
+
gear.setAttribute('aria-expanded', 'false');
|
|
114
|
+
doc.removeEventListener('pointerdown', onOutside, true);
|
|
115
|
+
if (refocus)
|
|
116
|
+
gear.focus();
|
|
117
|
+
}
|
|
118
|
+
cleanups.push(() => doc.removeEventListener('pointerdown', onOutside, true));
|
|
119
|
+
gear.addEventListener('click', () => (menu.hidden ? open('first') : close(false)));
|
|
120
|
+
gear.addEventListener('keydown', (event) => {
|
|
121
|
+
if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
|
|
122
|
+
event.preventDefault();
|
|
123
|
+
open(event.key === 'ArrowDown' ? 'first' : 'last');
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
menu.addEventListener('keydown', (event) => {
|
|
127
|
+
const items = shown();
|
|
128
|
+
const at = items.indexOf(doc.activeElement);
|
|
129
|
+
const to = { ArrowDown: at + 1, ArrowUp: at - 1, Home: 0, End: items.length - 1 }[event.key];
|
|
130
|
+
if (to !== undefined) {
|
|
131
|
+
event.preventDefault();
|
|
132
|
+
items[(to + items.length) % items.length]?.focus();
|
|
133
|
+
}
|
|
134
|
+
else if (event.key === 'Escape') {
|
|
135
|
+
// Escape closes the menu, not the dialog round the form.
|
|
136
|
+
event.preventDefault();
|
|
137
|
+
event.stopPropagation();
|
|
138
|
+
close(true);
|
|
139
|
+
}
|
|
140
|
+
else if (event.key === 'Tab')
|
|
141
|
+
close(false);
|
|
142
|
+
});
|
|
143
|
+
updaters.push(() => {
|
|
144
|
+
for (const { item, button } of drawn)
|
|
145
|
+
(0, dom_1.setHidden)(button, form.node(item.id).invisible);
|
|
146
|
+
(0, dom_1.setHidden)(printGroup, !printed.some((d) => !d.button.hidden));
|
|
147
|
+
(0, dom_1.setHidden)(rule, printGroup.hidden || !acted.some((d) => !d.button.hidden));
|
|
148
|
+
(0, dom_1.setHidden)(wrap, !drawn.some((d) => !d.button.hidden));
|
|
149
|
+
});
|
|
150
|
+
return wrap;
|
|
151
|
+
}
|
|
152
|
+
/** "3 / 42" with Previous and Next, round from the last to the first as Flectra's; Alt+P and Alt+N press them. */
|
|
153
|
+
function pager(context, given, trail, updaters, cleanups) {
|
|
154
|
+
const { el, form, labels } = context;
|
|
155
|
+
/** The ids, when the app gave them; else the app's count and its place, followed as the pager moves. */
|
|
156
|
+
const ids = Array.isArray(given) ? [...given] : null;
|
|
157
|
+
const asked = Array.isArray(given) ? null : given;
|
|
158
|
+
let total = ids ? ids.length : asked.total;
|
|
159
|
+
let at = ids ? -1 : asked.at;
|
|
160
|
+
/** The record the app's place stands for: once the form shows another, its place is unknown. */
|
|
161
|
+
let placed = ids ? null : form.getState().recordId;
|
|
162
|
+
let moving = false;
|
|
163
|
+
const here = () => {
|
|
164
|
+
const id = form.getState().recordId;
|
|
165
|
+
if (ids)
|
|
166
|
+
return ids.findIndex((other) => same(other, id));
|
|
167
|
+
return same(placed, id) ? at : -1;
|
|
168
|
+
};
|
|
169
|
+
// "3 / 42" reads left to right in every language, as numbers do.
|
|
170
|
+
const text = el('span', { class: 'fd-record-pager-text', dir: 'ltr' });
|
|
171
|
+
const previous = el('button', { type: 'button', class: 'fd-button fd-record-step', 'aria-label': labels.previousRecord }, el('span', { 'aria-hidden': 'true', class: 'fd-record-arrow' }, '‹'));
|
|
172
|
+
const next = el('button', { type: 'button', class: 'fd-button fd-record-step', 'aria-label': labels.nextRecord }, el('span', { 'aria-hidden': 'true', class: 'fd-record-arrow' }, '›'));
|
|
173
|
+
(0, hotkeys_1.hotkeyOn)(previous, 'p', labels.previousRecord);
|
|
174
|
+
(0, hotkeys_1.hotkeyOn)(next, 'n', labels.nextRecord);
|
|
175
|
+
const box = el('div', { class: 'fd-record-pager', role: 'group', 'aria-label': labels.records }, text, previous, next);
|
|
176
|
+
const idAt = async (place) => (ids ? ids[place] : asked.id(place));
|
|
177
|
+
async function move(by) {
|
|
178
|
+
const from = here();
|
|
179
|
+
if (moving || from === -1 || total < 2)
|
|
180
|
+
return;
|
|
181
|
+
moving = true;
|
|
182
|
+
try {
|
|
183
|
+
const to = (from + by + total) % total;
|
|
184
|
+
if (!(await context.leave()))
|
|
185
|
+
return;
|
|
186
|
+
const id = await idAt(to);
|
|
187
|
+
at = to;
|
|
188
|
+
placed = id;
|
|
189
|
+
await form.openRecord(id);
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
moving = false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
previous.addEventListener('click', () => void move(-1));
|
|
196
|
+
next.addEventListener('click', () => void move(1));
|
|
197
|
+
// A copy joins the records after the one it was made from; a record deleted leaves them, the pager moving to the next.
|
|
198
|
+
cleanups.push(form.on('duplicate', ({ from, recordId }) => {
|
|
199
|
+
if (!ids)
|
|
200
|
+
return;
|
|
201
|
+
const place = ids.findIndex((id) => same(id, from));
|
|
202
|
+
ids.splice(place + 1, 0, recordId);
|
|
203
|
+
total = ids.length;
|
|
204
|
+
// Told once the copy shows: the pager counts it now.
|
|
205
|
+
context.render();
|
|
206
|
+
}), form.on('delete', ({ recordId }) => {
|
|
207
|
+
const place = ids ? ids.findIndex((id) => same(id, recordId)) : same(placed, recordId) ? at : -1;
|
|
208
|
+
if (place === -1)
|
|
209
|
+
return;
|
|
210
|
+
if (ids)
|
|
211
|
+
ids.splice(place, 1);
|
|
212
|
+
total = ids ? ids.length : total - 1;
|
|
213
|
+
if (total < 1)
|
|
214
|
+
return void trail?.[trail.length - 1]?.open?.();
|
|
215
|
+
at = Math.min(place, total - 1);
|
|
216
|
+
// At once when the id is at hand, so the form never starts a new record meanwhile.
|
|
217
|
+
const go = (id) => {
|
|
218
|
+
placed = id;
|
|
219
|
+
void form.openRecord(id);
|
|
220
|
+
};
|
|
221
|
+
const id = ids ? ids[at] : asked.id(at);
|
|
222
|
+
if (id instanceof Promise)
|
|
223
|
+
void id.then(go);
|
|
224
|
+
else
|
|
225
|
+
go(id);
|
|
226
|
+
}));
|
|
227
|
+
updaters.push(() => {
|
|
228
|
+
const place = here();
|
|
229
|
+
(0, dom_1.setHidden)(box, place === -1);
|
|
230
|
+
(0, dom_1.setText)(text, context.fill(labels.recordAt, { n: place + 1, total }));
|
|
231
|
+
const alone = total < 2;
|
|
232
|
+
(0, dom_1.setAttr)(previous, 'aria-disabled', alone ? 'true' : null);
|
|
233
|
+
(0, dom_1.setAttr)(next, 'aria-disabled', alone ? 'true' : null);
|
|
234
|
+
});
|
|
235
|
+
return box;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=record-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-bar.js","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/record-bar.ts"],"names":[],"mappings":"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"}
|