@fieldia/viewer 0.11.0 → 0.12.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 (103) hide show
  1. package/bundle/fieldia.ar.js +2 -2
  2. package/bundle/fieldia.ar.js.map +2 -2
  3. package/bundle/fieldia.de.js +2 -2
  4. package/bundle/fieldia.de.js.map +2 -2
  5. package/bundle/fieldia.fr.js +2 -2
  6. package/bundle/fieldia.fr.js.map +2 -2
  7. package/bundle/fieldia.js +6 -4
  8. package/bundle/fieldia.js.map +4 -4
  9. package/package.json +3 -3
  10. package/src/lib/attachment-preview.d.mts +27 -0
  11. package/src/lib/attachment-preview.d.ts +27 -0
  12. package/src/lib/attachment-preview.js +89 -0
  13. package/src/lib/attachment-preview.js.map +1 -0
  14. package/src/lib/attachment-preview.mjs +86 -0
  15. package/src/lib/attachment-preview.mjs.map +1 -0
  16. package/src/lib/dialog.d.mts +2 -0
  17. package/src/lib/dialog.d.ts +2 -0
  18. package/src/lib/dialog.js +65 -4
  19. package/src/lib/dialog.js.map +1 -1
  20. package/src/lib/dialog.mjs +64 -4
  21. package/src/lib/dialog.mjs.map +1 -1
  22. package/src/lib/hotkeys.d.mts +11 -0
  23. package/src/lib/hotkeys.d.ts +11 -0
  24. package/src/lib/hotkeys.js +34 -0
  25. package/src/lib/hotkeys.js.map +1 -0
  26. package/src/lib/hotkeys.mjs +30 -0
  27. package/src/lib/hotkeys.mjs.map +1 -0
  28. package/src/lib/labels.d.mts +25 -0
  29. package/src/lib/labels.d.ts +25 -0
  30. package/src/lib/labels.js +17 -0
  31. package/src/lib/labels.js.map +1 -1
  32. package/src/lib/labels.mjs +17 -0
  33. package/src/lib/labels.mjs.map +1 -1
  34. package/src/lib/list.d.mts +3 -1
  35. package/src/lib/list.d.ts +3 -1
  36. package/src/lib/list.js +1 -1
  37. package/src/lib/list.js.map +1 -1
  38. package/src/lib/list.mjs +1 -1
  39. package/src/lib/list.mjs.map +1 -1
  40. package/src/lib/locales/ar.js +17 -0
  41. package/src/lib/locales/ar.js.map +1 -1
  42. package/src/lib/locales/ar.mjs +17 -0
  43. package/src/lib/locales/ar.mjs.map +1 -1
  44. package/src/lib/locales/de.js +17 -0
  45. package/src/lib/locales/de.js.map +1 -1
  46. package/src/lib/locales/de.mjs +17 -0
  47. package/src/lib/locales/de.mjs.map +1 -1
  48. package/src/lib/locales/fr.js +17 -0
  49. package/src/lib/locales/fr.js.map +1 -1
  50. package/src/lib/locales/fr.mjs +17 -0
  51. package/src/lib/locales/fr.mjs.map +1 -1
  52. package/src/lib/open.d.mts +7 -1
  53. package/src/lib/open.d.ts +7 -1
  54. package/src/lib/open.js +19 -8
  55. package/src/lib/open.js.map +1 -1
  56. package/src/lib/open.mjs +20 -9
  57. package/src/lib/open.mjs.map +1 -1
  58. package/src/lib/place.d.mts +2 -0
  59. package/src/lib/place.d.ts +2 -0
  60. package/src/lib/place.js.map +1 -1
  61. package/src/lib/place.mjs.map +1 -1
  62. package/src/lib/record-bar.d.mts +56 -0
  63. package/src/lib/record-bar.d.ts +56 -0
  64. package/src/lib/record-bar.js +237 -0
  65. package/src/lib/record-bar.js.map +1 -0
  66. package/src/lib/record-bar.mjs +234 -0
  67. package/src/lib/record-bar.mjs.map +1 -0
  68. package/src/lib/record-styles.d.mts +9 -0
  69. package/src/lib/record-styles.d.ts +9 -0
  70. package/src/lib/record-styles.js +83 -0
  71. package/src/lib/record-styles.js.map +1 -0
  72. package/src/lib/record-styles.mjs +79 -0
  73. package/src/lib/record-styles.mjs.map +1 -0
  74. package/src/lib/related.d.mts +7 -3
  75. package/src/lib/related.d.ts +7 -3
  76. package/src/lib/related.js +22 -8
  77. package/src/lib/related.js.map +1 -1
  78. package/src/lib/related.mjs +22 -8
  79. package/src/lib/related.mjs.map +1 -1
  80. package/src/lib/say.d.mts +3 -1
  81. package/src/lib/say.d.ts +3 -1
  82. package/src/lib/say.js +17 -1
  83. package/src/lib/say.js.map +1 -1
  84. package/src/lib/say.mjs +17 -1
  85. package/src/lib/say.mjs.map +1 -1
  86. package/src/lib/tab-strip.d.mts +17 -0
  87. package/src/lib/tab-strip.d.ts +17 -0
  88. package/src/lib/tab-strip.js +51 -0
  89. package/src/lib/tab-strip.js.map +1 -0
  90. package/src/lib/tab-strip.mjs +48 -0
  91. package/src/lib/tab-strip.mjs.map +1 -0
  92. package/src/lib/value-words.d.mts +10 -0
  93. package/src/lib/value-words.d.ts +10 -0
  94. package/src/lib/value-words.js +38 -0
  95. package/src/lib/value-words.js.map +1 -0
  96. package/src/lib/value-words.mjs +35 -0
  97. package/src/lib/value-words.mjs.map +1 -0
  98. package/src/lib/viewer.d.mts +22 -1
  99. package/src/lib/viewer.d.ts +22 -1
  100. package/src/lib/viewer.js +488 -46
  101. package/src/lib/viewer.js.map +1 -1
  102. package/src/lib/viewer.mjs +489 -47
  103. package/src/lib/viewer.mjs.map +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fieldia/viewer",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "Mount a Fieldia page in any web page: plain DOM, no framework.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://fieldia.dev",
@@ -27,8 +27,8 @@
27
27
  "./package.json": "./package.json"
28
28
  },
29
29
  "dependencies": {
30
- "@fieldia/core": "0.11.0",
31
- "@fieldia/widgets": "0.11.0",
30
+ "@fieldia/core": "0.12.0",
31
+ "@fieldia/widgets": "0.12.0",
32
32
  "tslib": "^2.8.1"
33
33
  },
34
34
  "sideEffects": false,
@@ -0,0 +1,27 @@
1
+ import type { AttachmentPreview, DataSource, Form, FormState, Page } from '@fieldia/core';
2
+ import { type El } from './dom.mjs';
3
+ import type { ViewerLabels } from './labels.mjs';
4
+ /** What the preview beside a sheet needs of the viewer that draws it. */
5
+ export interface PreviewContext {
6
+ doc: Document;
7
+ el: El;
8
+ form: Form;
9
+ page: Page;
10
+ node: AttachmentPreview;
11
+ dataSource: DataSource | undefined;
12
+ labels: ViewerLabels;
13
+ fill(template: string, values: Record<string, string | number>): string;
14
+ }
15
+ /**
16
+ * The record's main attachment beside its sheet, as Flectra's
17
+ * o_attachment_preview: a PDF in the browser's own viewer or a picture, with
18
+ * Previous and Next when it has several, and a link that opens it on its own.
19
+ * From a file field of the page, or the data source's `attachments` of the
20
+ * record — asked again when the form shows another record, and after a save.
21
+ * Hidden while there is nothing to show.
22
+ */
23
+ export declare function attachmentPreview(context: PreviewContext): {
24
+ element: HTMLElement;
25
+ update(state: FormState): void;
26
+ destroy(): void;
27
+ };
@@ -0,0 +1,27 @@
1
+ import type { AttachmentPreview, DataSource, Form, FormState, Page } from '@fieldia/core';
2
+ import { type El } from './dom';
3
+ import type { ViewerLabels } from './labels';
4
+ /** What the preview beside a sheet needs of the viewer that draws it. */
5
+ export interface PreviewContext {
6
+ doc: Document;
7
+ el: El;
8
+ form: Form;
9
+ page: Page;
10
+ node: AttachmentPreview;
11
+ dataSource: DataSource | undefined;
12
+ labels: ViewerLabels;
13
+ fill(template: string, values: Record<string, string | number>): string;
14
+ }
15
+ /**
16
+ * The record's main attachment beside its sheet, as Flectra's
17
+ * o_attachment_preview: a PDF in the browser's own viewer or a picture, with
18
+ * Previous and Next when it has several, and a link that opens it on its own.
19
+ * From a file field of the page, or the data source's `attachments` of the
20
+ * record — asked again when the form shows another record, and after a save.
21
+ * Hidden while there is nothing to show.
22
+ */
23
+ export declare function attachmentPreview(context: PreviewContext): {
24
+ element: HTMLElement;
25
+ update(state: FormState): void;
26
+ destroy(): void;
27
+ };
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.attachmentPreview = attachmentPreview;
4
+ const widgets_1 = require("@fieldia/widgets");
5
+ const dom_1 = require("./dom");
6
+ /** A file the browser shows itself: a picture or a PDF. */
7
+ const showable = (file) => /^image\//.test(file.type) || /pdf/i.test(file.type) || /\.pdf$/i.test(file.name);
8
+ const filesOf = (value) => (Array.isArray(value) ? value : value ? [value] : []).filter((file) => file && typeof file === 'object' && 'name' in file);
9
+ /**
10
+ * The record's main attachment beside its sheet, as Flectra's
11
+ * o_attachment_preview: a PDF in the browser's own viewer or a picture, with
12
+ * Previous and Next when it has several, and a link that opens it on its own.
13
+ * From a file field of the page, or the data source's `attachments` of the
14
+ * record — asked again when the form shows another record, and after a save.
15
+ * Hidden while there is nothing to show.
16
+ */
17
+ function attachmentPreview(context) {
18
+ const { el, form, labels, node } = context;
19
+ const name = el('span', { class: 'fd-attachment-name', dir: 'auto' });
20
+ const count = el('span', { class: 'fd-attachment-count', dir: 'ltr' });
21
+ const previous = el('button', { type: 'button', class: 'fd-button fd-record-step', 'aria-label': labels.previousAttachment }, el('span', { 'aria-hidden': 'true', class: 'fd-record-arrow' }, '‹'));
22
+ const next = el('button', { type: 'button', class: 'fd-button fd-record-step', 'aria-label': labels.nextAttachment }, el('span', { 'aria-hidden': 'true', class: 'fd-record-arrow' }, '›'));
23
+ const open = el('a', { class: 'fd-button fd-button-link fd-attachment-open', target: '_blank', rel: 'noopener' }, labels.openAttachment);
24
+ const body = el('div', { class: 'fd-attachment-body' });
25
+ const element = el('aside', { class: 'fd-attachment-preview', hidden: '' }, el('div', { class: 'fd-attachment-head' }, name, count, previous, next, open), body);
26
+ let files = [];
27
+ let at = 0;
28
+ let shown = null;
29
+ /** The record the attachments were asked for, and the latest ask: an older answer is let go. */
30
+ let askedFor;
31
+ let asks = 0;
32
+ let status;
33
+ let held;
34
+ function draw() {
35
+ shown?.free();
36
+ shown = null;
37
+ const file = files[at];
38
+ if (!file)
39
+ return body.replaceChildren();
40
+ const made = (0, widgets_1.fileShown)(context.doc, file);
41
+ shown = made;
42
+ body.replaceChildren(...(made ? [made.element] : []));
43
+ (0, dom_1.setText)(name, file.name);
44
+ (0, dom_1.setText)(count, files.length > 1 ? context.fill(labels.recordAt, { n: at + 1, total: files.length }) : '');
45
+ (0, dom_1.setHidden)(previous, files.length < 2);
46
+ (0, dom_1.setHidden)(next, files.length < 2);
47
+ (0, dom_1.setAttr)(open, 'href', made?.url ?? null);
48
+ (0, dom_1.setAttr)(element, 'aria-label', context.fill(labels.attachment, { name: file.name }));
49
+ }
50
+ const step = (by) => {
51
+ at = (at + by + files.length) % files.length;
52
+ draw();
53
+ };
54
+ previous.addEventListener('click', () => step(-1));
55
+ next.addEventListener('click', () => step(1));
56
+ const take = (found) => {
57
+ files = found.filter(showable);
58
+ at = 0;
59
+ draw();
60
+ show();
61
+ };
62
+ const show = () => (0, dom_1.setHidden)(element, form.node('#preview').invisible || !files.length);
63
+ function ask(state) {
64
+ const source = context.dataSource;
65
+ const ask = ++asks;
66
+ askedFor = state.recordId;
67
+ if (state.recordId == null || !source?.attachments || context.page.data.kind !== 'record')
68
+ return take([]);
69
+ source.attachments({ model: context.page.data.model, id: state.recordId, fields: context.page.fields }).then((found) => ask === asks && take(found), () => ask === asks && take([]));
70
+ }
71
+ return {
72
+ element,
73
+ update(state) {
74
+ if (node.field) {
75
+ const value = state.values[node.field];
76
+ if (value !== held) {
77
+ held = value;
78
+ take(filesOf(value));
79
+ }
80
+ }
81
+ else if (state.status !== 'loading' && state.status !== 'idle' && (state.recordId !== askedFor || (state.status === 'saved' && status !== 'saved')))
82
+ ask(state);
83
+ status = state.status;
84
+ show();
85
+ },
86
+ destroy: () => shown?.free(),
87
+ };
88
+ }
89
+ //# sourceMappingURL=attachment-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-preview.js","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/attachment-preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import { fileShown } from '@fieldia/widgets';
2
+ import { setAttr, setHidden, setText } from './dom.mjs';
3
+ /** A file the browser shows itself: a picture or a PDF. */
4
+ const showable = (file) => /^image\//.test(file.type) || /pdf/i.test(file.type) || /\.pdf$/i.test(file.name);
5
+ const filesOf = (value) => (Array.isArray(value) ? value : value ? [value] : []).filter((file) => file && typeof file === 'object' && 'name' in file);
6
+ /**
7
+ * The record's main attachment beside its sheet, as Flectra's
8
+ * o_attachment_preview: a PDF in the browser's own viewer or a picture, with
9
+ * Previous and Next when it has several, and a link that opens it on its own.
10
+ * From a file field of the page, or the data source's `attachments` of the
11
+ * record — asked again when the form shows another record, and after a save.
12
+ * Hidden while there is nothing to show.
13
+ */
14
+ export function attachmentPreview(context) {
15
+ const { el, form, labels, node } = context;
16
+ const name = el('span', { class: 'fd-attachment-name', dir: 'auto' });
17
+ const count = el('span', { class: 'fd-attachment-count', dir: 'ltr' });
18
+ const previous = el('button', { type: 'button', class: 'fd-button fd-record-step', 'aria-label': labels.previousAttachment }, el('span', { 'aria-hidden': 'true', class: 'fd-record-arrow' }, '‹'));
19
+ const next = el('button', { type: 'button', class: 'fd-button fd-record-step', 'aria-label': labels.nextAttachment }, el('span', { 'aria-hidden': 'true', class: 'fd-record-arrow' }, '›'));
20
+ const open = el('a', { class: 'fd-button fd-button-link fd-attachment-open', target: '_blank', rel: 'noopener' }, labels.openAttachment);
21
+ const body = el('div', { class: 'fd-attachment-body' });
22
+ const element = el('aside', { class: 'fd-attachment-preview', hidden: '' }, el('div', { class: 'fd-attachment-head' }, name, count, previous, next, open), body);
23
+ let files = [];
24
+ let at = 0;
25
+ let shown = null;
26
+ /** The record the attachments were asked for, and the latest ask: an older answer is let go. */
27
+ let askedFor;
28
+ let asks = 0;
29
+ let status;
30
+ let held;
31
+ function draw() {
32
+ shown?.free();
33
+ shown = null;
34
+ const file = files[at];
35
+ if (!file)
36
+ return body.replaceChildren();
37
+ const made = fileShown(context.doc, file);
38
+ shown = made;
39
+ body.replaceChildren(...(made ? [made.element] : []));
40
+ setText(name, file.name);
41
+ setText(count, files.length > 1 ? context.fill(labels.recordAt, { n: at + 1, total: files.length }) : '');
42
+ setHidden(previous, files.length < 2);
43
+ setHidden(next, files.length < 2);
44
+ setAttr(open, 'href', made?.url ?? null);
45
+ setAttr(element, 'aria-label', context.fill(labels.attachment, { name: file.name }));
46
+ }
47
+ const step = (by) => {
48
+ at = (at + by + files.length) % files.length;
49
+ draw();
50
+ };
51
+ previous.addEventListener('click', () => step(-1));
52
+ next.addEventListener('click', () => step(1));
53
+ const take = (found) => {
54
+ files = found.filter(showable);
55
+ at = 0;
56
+ draw();
57
+ show();
58
+ };
59
+ const show = () => setHidden(element, form.node('#preview').invisible || !files.length);
60
+ function ask(state) {
61
+ const source = context.dataSource;
62
+ const ask = ++asks;
63
+ askedFor = state.recordId;
64
+ if (state.recordId == null || !source?.attachments || context.page.data.kind !== 'record')
65
+ return take([]);
66
+ source.attachments({ model: context.page.data.model, id: state.recordId, fields: context.page.fields }).then((found) => ask === asks && take(found), () => ask === asks && take([]));
67
+ }
68
+ return {
69
+ element,
70
+ update(state) {
71
+ if (node.field) {
72
+ const value = state.values[node.field];
73
+ if (value !== held) {
74
+ held = value;
75
+ take(filesOf(value));
76
+ }
77
+ }
78
+ else if (state.status !== 'loading' && state.status !== 'idle' && (state.recordId !== askedFor || (state.status === 'saved' && status !== 'saved')))
79
+ ask(state);
80
+ status = state.status;
81
+ show();
82
+ },
83
+ destroy: () => shown?.free(),
84
+ };
85
+ }
86
+ //# sourceMappingURL=attachment-preview.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-preview.mjs","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/attachment-preview.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,8 @@ export interface FormPanelOptions extends Omit<FormDialogOptions, 'size'> {
47
47
  }
48
48
  /** The first box to type or choose in, where a page opened takes the focus. */
49
49
  export declare const FIRST_FIELD = "input:not([type=\"hidden\"]), select, textarea, [contenteditable=\"true\"]";
50
+ /** The box of the first field shown that takes the focus as the record opens (a node's `focus`), if there is one. */
51
+ export declare function focusField(scope: Element): HTMLElement | null;
50
52
  export declare function openFormDialog(options: FormDialogOptions): Promise<FormDialogResult>;
51
53
  /**
52
54
  * A page in a side panel: the dialog's twin, at full height along the
@@ -47,6 +47,8 @@ export interface FormPanelOptions extends Omit<FormDialogOptions, 'size'> {
47
47
  }
48
48
  /** The first box to type or choose in, where a page opened takes the focus. */
49
49
  export declare const FIRST_FIELD = "input:not([type=\"hidden\"]), select, textarea, [contenteditable=\"true\"]";
50
+ /** The box of the first field shown that takes the focus as the record opens (a node's `focus`), if there is one. */
51
+ export declare function focusField(scope: Element): HTMLElement | null;
50
52
  export declare function openFormDialog(options: FormDialogOptions): Promise<FormDialogResult>;
51
53
  /**
52
54
  * A page in a side panel: the dialog's twin, at full height along the
package/src/lib/dialog.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FIRST_FIELD = void 0;
4
+ exports.focusField = focusField;
4
5
  exports.openFormDialog = openFormDialog;
5
6
  exports.openFormPanel = openFormPanel;
6
7
  exports.openSearchDialog = openSearchDialog;
@@ -8,10 +9,16 @@ const widgets_1 = require("@fieldia/widgets");
8
9
  const labels_1 = require("./labels");
9
10
  const focus_trap_1 = require("./focus-trap");
10
11
  const look_1 = require("./look");
12
+ const hotkeys_1 = require("./hotkeys");
11
13
  const viewer_1 = require("./viewer");
12
14
  let dialogs = 0;
13
15
  /** The first box to type or choose in, where a page opened takes the focus. */
14
16
  exports.FIRST_FIELD = 'input:not([type="hidden"]), select, textarea, [contenteditable="true"]';
17
+ /** The box of the first field shown that takes the focus as the record opens (a node's `focus`), if there is one. */
18
+ function focusField(scope) {
19
+ const wrapper = [...scope.querySelectorAll('.fd-field[data-focus]')].find((one) => !one.closest('[hidden]'));
20
+ return wrapper?.querySelector(exports.FIRST_FIELD) ?? null;
21
+ }
15
22
  /** The dialogs' way to make an element of a document: a tag, its attributes, and its words. */
16
23
  const maker = (doc) => (tag, attrs = {}, text) => {
17
24
  const element = doc.createElement(tag);
@@ -70,7 +77,13 @@ function openForm(options, shape, side) {
70
77
  (0, look_1.applyLook)(box, look);
71
78
  box.append(make('div', { class: 'fd-form-dialog-head' }), body, make('div', { class: 'fd-actions fd-actions-end fd-form-dialog-foot' }));
72
79
  box.firstElementChild?.append(title, closeButton);
73
- box.lastElementChild?.append(discard, saveClose);
80
+ // A page's own buttons at its foot, as a wizard's, stand in place of Discard and Save & Close.
81
+ const footer = options.page.layout.type === 'sections' || options.page.layout.type === 'sheet' ? (options.page.layout.footer ?? []) : [];
82
+ const own = footer.map((node) => ({ node, button: make('button', { type: 'button', class: `fd-button fd-button-${node.style ?? 'secondary'}`, 'data-node': node.id }, node.label) }));
83
+ for (const { node, button } of own)
84
+ if (node.hotkey)
85
+ (0, hotkeys_1.hotkeyOn)(button, node.hotkey, node.label);
86
+ box.lastElementChild?.append(...(own.length ? own.map((b) => b.button) : [discard, saveClose]));
74
87
  const backdrop = make('div', { class: `fd-dialog-backdrop fd-form-dialog-backdrop${panel ? ' fd-form-panel-backdrop' : ''}` });
75
88
  backdrop.append(box);
76
89
  // The panel this one opens over steps back while it is open.
@@ -82,6 +95,9 @@ function openForm(options, shape, side) {
82
95
  ...options,
83
96
  page: look && !options.page.look ? { ...options.page, look } : options.page,
84
97
  showActions: false,
98
+ // A dialog has no pager or breadcrumbs: they belong to the record under it.
99
+ records: undefined,
100
+ breadcrumbs: undefined,
85
101
  host: { ...options.host, close: () => discard.click() },
86
102
  });
87
103
  // A panel runs the way its page does, its language's way unless told: the inline end it sits at is the left, right to left.
@@ -90,8 +106,8 @@ function openForm(options, shape, side) {
90
106
  let done = false;
91
107
  if (options.recompute)
92
108
  recalculate(handle.form, options.page.fields, options.recompute, () => done);
93
- // Into the dialog: its first field, once the record is in, or the dialog itself meanwhile.
94
- const firstField = () => body.querySelector(exports.FIRST_FIELD);
109
+ // Into the dialog: its field that takes the focus (focus) or its first, once the record is in, or the dialog itself meanwhile.
110
+ const firstField = () => focusField(body) ?? body.querySelector(exports.FIRST_FIELD);
95
111
  (firstField() ?? box).focus();
96
112
  void handle.form.settled().then(() => {
97
113
  if (doc.activeElement === box || !box.contains(doc.activeElement))
@@ -153,8 +169,49 @@ function openForm(options, shape, side) {
153
169
  close(true);
154
170
  });
155
171
  discard.addEventListener('click', () => close(false));
172
+ // A footer button runs its steps; once they saved or sent, the dialog closes with the answers.
173
+ let saved = false;
174
+ handle.on('save', () => (saved = true));
175
+ handle.on('send', () => (saved = true));
176
+ const shown = () => {
177
+ for (const { node, button } of own)
178
+ button.hidden = handle.form.node(node.id).invisible;
179
+ };
180
+ if (own.length) {
181
+ shown();
182
+ handle.form.subscribe(shown);
183
+ }
184
+ for (const { node, button } of own) {
185
+ button.addEventListener('click', async () => {
186
+ if (button.hasAttribute('aria-busy'))
187
+ return;
188
+ button.setAttribute('aria-busy', 'true');
189
+ saved = false;
190
+ const result = await handle.form.runAction(node.id);
191
+ button.removeAttribute('aria-busy');
192
+ if (done)
193
+ return;
194
+ if (saved)
195
+ close(true);
196
+ // A check or a save that stopped them shows its problems, as Save & Close does.
197
+ else if (result.reason === 'check' || result.reason === 'save')
198
+ handle.check();
199
+ });
200
+ }
156
201
  closeButton.addEventListener('click', leave);
202
+ // A footer button's key, with Alt, and the keys shown while Alt is held.
203
+ box.addEventListener('keyup', (event) => event.key === 'Alt' && box.removeAttribute('data-hotkeys'));
157
204
  box.addEventListener('keydown', (event) => {
205
+ if (event.key === 'Alt')
206
+ box.setAttribute('data-hotkeys', '');
207
+ const key = (0, hotkeys_1.hotkeyOf)(event);
208
+ const pressed = key ? own.find(({ node, button }) => node.hotkey === key && !button.hidden && !button.disabled)?.button : undefined;
209
+ if (pressed) {
210
+ event.preventDefault();
211
+ box.removeAttribute('data-hotkeys');
212
+ pressed.click();
213
+ return;
214
+ }
158
215
  // Ctrl+Enter is Save & Close from wherever the cursor is, even after a field used the Enter
159
216
  // (a tag box adding its tag), taking what is still being typed. The grid keeps its own keys.
160
217
  if (event.key === 'Enter' && (event.ctrlKey || event.metaKey) && !event.isComposing) {
@@ -162,7 +219,11 @@ function openForm(options, shape, side) {
162
219
  return;
163
220
  event.preventDefault();
164
221
  doc.activeElement?.dispatchEvent(new Event('change', { bubbles: true }));
165
- saveClose.click();
222
+ // With buttons of its own, the page's primary one; else Save & Close.
223
+ if (own.length)
224
+ own.find(({ node, button }) => node.style === 'primary' && !button.hidden)?.button.click();
225
+ else
226
+ saveClose.click();
166
227
  return;
167
228
  }
168
229
  // A key a field used itself (Escape closing a list) is not the dialog's.
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/dialog.ts"],"names":[],"mappings":";;;AAuEA,wCAEC;AAYD,sCAGC;AAgLD,4CA6FC;AApWD,8CAAiD;AACjD,qCAAqC;AACrC,6CAAyC;AACzC,iCAAmC;AACnC,qCAAwG;AAmDxG,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,+EAA+E;AAClE,QAAA,WAAW,GAAG,wEAAwE,CAAC;AAEpG,+FAA+F;AAC/F,MAAM,KAAK,GACT,CAAC,GAAa,EAAE,EAAE,CAClB,CAAwC,GAAM,EAAE,QAAgC,EAAE,EAAE,IAAa,EAAE,EAAE;IACnG,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrF,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IACnD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEJ,SAAgB,cAAc,CAAC,OAA0B;IACvD,OAAO,QAAQ,CAAC,OAAO,EAAE,WAAW,OAAO,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,aAAa,CAAC,OAAyB;IACrD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IACnC,OAAO,QAAQ,CAAC,OAAO,EAAE,iBAAiB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,KAAK,IAAI,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC/K,CAAC;AAED,0IAA0I;AAC1I,SAAS,QAAQ,CAAC,OAA0B,EAAE,KAAa,EAAE,IAAgB;IAC3E,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;IACrB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,aAAa,IAAI,QAAQ,CAAC;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,YAAY,GAAG,CAAC,WAAY,CAAC,WAAW,CAAC,CAAC,CAAE,GAAG,CAAC,aAA6B,CAAC,CAAC,CAAC,IAAI,CAAC;IACrH,MAAM,MAAM,GAAG,EAAE,GAAG,sBAAa,CAAC,IAAA,kBAAS,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAClF,MAAM,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAExB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9F,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;IAClH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,6BAA6B,EAAE,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChK,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;QACtB,4EAA4E;QAC5E,KAAK,EAAE,2BAA2B,KAAK,EAAE;QACzC,cAAc,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;QAC3C,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,MAAM;QACpB,iBAAiB,EAAE,KAAK,CAAC,EAAE;QAC3B,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,IAAI,IAAI;QAAE,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,GAAG;QAAE,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtD,8EAA8E;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAC/C,IAAA,gBAAS,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC,CAAC,CAAC;IACzI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClD,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,6CAA6C,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/H,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,6DAA6D;IAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACvC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE3B,kFAAkF;IAClF,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,IAAI,EAAE;QAC/B,GAAG,OAAO;QACV,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI;QAC3E,WAAW,EAAE,KAAK;QAClB,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;KACxD,CAAC,CAAC;IACH,4HAA4H;IAC5H,IAAI,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG;QAAE,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IACnE,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,OAAO,CAAC,SAAS;QAAE,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAEpG,2FAA2F;IAC3F,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAc,mBAAW,CAAC,CAAC;IACtE,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACnC,IAAI,GAAG,CAAC,aAAa,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;YAAE,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,CAAC,KAAc,EAAE,EAAE;YAC/B,IAAI,IAAI;gBAAE,OAAO;YACjB,IAAI,GAAG,IAAI,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,8EAA8E;YAC9E,MAAM,MAAM,GAAqB,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAgB,EAAE,CAAC;YAC7G,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;YACtC,MAAM,EAAE,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,2GAA2G;QAC3G,MAAM,GAAG,GAAG,GAAG,EAAE,CACf,IAAI,OAAO,CAAU,CAAC,MAAM,EAAE,EAAE;YAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,aAAmC,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;YACnE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACjF,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,6BAA6B,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACrG,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5H,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACxB,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,CAAC,UAAmB,EAAE,EAAE;gBAClC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,EAAE,KAAK,EAAE,CAAC;gBACb,MAAM,CAAC,UAAU,CAAC,CAAC;YACrB,CAAC,CAAC;YACF,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1C,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;oBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;;oBAClC,IAAA,sBAAS,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC,CAAC,CAAC;QACL,sGAAsG;QACtG,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACvB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;gBAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACpF,CAAC,CAAC;QACF,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YAC7C,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAClF,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC3B,IAAI,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7C,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACxC,4FAA4F;YAC5F,6FAA6F;YAC7F,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBACpF,IAAK,KAAK,CAAC,MAAkB,CAAC,OAAO,CAAC,kBAAkB,CAAC;oBAAE,OAAO;gBAClE,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzE,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YACD,yEAAyE;YACzE,IAAI,KAAK,CAAC,gBAAgB;gBAAE,OAAO;YACnC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,KAAK,EAAE,CAAC;YACf,CAAC;;gBAAM,IAAA,sBAAS,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sHAAsH;AACtH,SAAS,WAAW,CAAC,IAA0B,EAAE,MAA+B,EAAE,SAA8C,EAAE,MAAqB;IACrJ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAgB,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,OAAO,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO;QACpC,IAAI,GAAG,GAAG,CAAC;QACX,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CACpB,CAAC,IAAI,EAAE,EAAE;YACP,IAAI,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG;gBAAE,OAAO,CAAC,+BAA+B;YACvG,OAAO,GAAG,IAAI,CAAC;YACf,6FAA6F;YAC7F,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7K,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;gBAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACzD,OAAO,GAAG,KAAK,CAAC;YAChB,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC,EACD,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAgBD;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,OAA4B;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,aAAa,IAAI,QAAQ,CAAC;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,YAAY,GAAG,CAAC,WAAY,CAAC,WAAW,CAAC,CAAC,CAAE,GAAG,CAAC,aAA6B,CAAC,CAAC,CAAC,IAAI,CAAC;IACrH,MAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,sBAAa,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,uBAAa,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9F,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;IAClH,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9K,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACrH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;QACtB,KAAK,EAAE,wDAAwD;QAC/D,cAAc,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;QAC3C,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,MAAM;QACpB,iBAAiB,EAAE,KAAK,CAAC,EAAE;KAC5B,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,GAAG;QAAE,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtD,IAAA,gBAAS,EAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAC;IAC1E,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC,CAAC;IACtF,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3B,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,KAAK,GAAoB,EAAE,CAAC;QAChC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAgD,CAAC;QACrD,MAAM,KAAK,GAAG,CAAC,MAA4B,EAAE,EAAE;YAC7C,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,EAAE,CAAC;YACR,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,EAAE,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,eAAe,CAClB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnL,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CACH,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YACnF,IAAI,MAAM,IAAI,CAAC;gBAAE,KAAK,CAAC,YAAY,CAAC,uBAAuB,EAAE,GAAG,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;;gBAClF,KAAK,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;QACtD,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,EAAE,KAAK,CAAC;YACrB,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gBAC5B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAqB,CAAC,CAAC;gBACzF,IAAI,IAAI,KAAK,KAAK;oBAAE,OAAO,CAAC,uCAAuC;gBACnE,KAAK,GAAG,OAAO,CAAC;gBAChB,MAAM,GAAG,CAAC,CAAC,CAAC;gBACZ,IAAI,EAAE,CAAC;YACT,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,CAAC;QACF,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1C,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACzD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,MAAM;oBAAE,OAAO;gBAC1B,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBACvF,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAChE,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACxC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;;gBAAM,IAAA,sBAAS,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/dialog.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,16 @@ import { WIDGET_LABELS } from '@fieldia/widgets';
2
2
  import { ownLocale } from './labels.mjs';
3
3
  import { keepTabIn } from './focus-trap.mjs';
4
4
  import { applyLook } from './look.mjs';
5
+ import { hotkeyOf, hotkeyOn } from './hotkeys.mjs';
5
6
  import { mountViewer, VIEWER_LABELS } from './viewer.mjs';
6
7
  let dialogs = 0;
7
8
  /** The first box to type or choose in, where a page opened takes the focus. */
8
9
  export const FIRST_FIELD = 'input:not([type="hidden"]), select, textarea, [contenteditable="true"]';
10
+ /** The box of the first field shown that takes the focus as the record opens (a node's `focus`), if there is one. */
11
+ export function focusField(scope) {
12
+ const wrapper = [...scope.querySelectorAll('.fd-field[data-focus]')].find((one) => !one.closest('[hidden]'));
13
+ return wrapper?.querySelector(FIRST_FIELD) ?? null;
14
+ }
9
15
  /** The dialogs' way to make an element of a document: a tag, its attributes, and its words. */
10
16
  const maker = (doc) => (tag, attrs = {}, text) => {
11
17
  const element = doc.createElement(tag);
@@ -64,7 +70,13 @@ function openForm(options, shape, side) {
64
70
  applyLook(box, look);
65
71
  box.append(make('div', { class: 'fd-form-dialog-head' }), body, make('div', { class: 'fd-actions fd-actions-end fd-form-dialog-foot' }));
66
72
  box.firstElementChild?.append(title, closeButton);
67
- box.lastElementChild?.append(discard, saveClose);
73
+ // A page's own buttons at its foot, as a wizard's, stand in place of Discard and Save & Close.
74
+ const footer = options.page.layout.type === 'sections' || options.page.layout.type === 'sheet' ? (options.page.layout.footer ?? []) : [];
75
+ const own = footer.map((node) => ({ node, button: make('button', { type: 'button', class: `fd-button fd-button-${node.style ?? 'secondary'}`, 'data-node': node.id }, node.label) }));
76
+ for (const { node, button } of own)
77
+ if (node.hotkey)
78
+ hotkeyOn(button, node.hotkey, node.label);
79
+ box.lastElementChild?.append(...(own.length ? own.map((b) => b.button) : [discard, saveClose]));
68
80
  const backdrop = make('div', { class: `fd-dialog-backdrop fd-form-dialog-backdrop${panel ? ' fd-form-panel-backdrop' : ''}` });
69
81
  backdrop.append(box);
70
82
  // The panel this one opens over steps back while it is open.
@@ -76,6 +88,9 @@ function openForm(options, shape, side) {
76
88
  ...options,
77
89
  page: look && !options.page.look ? { ...options.page, look } : options.page,
78
90
  showActions: false,
91
+ // A dialog has no pager or breadcrumbs: they belong to the record under it.
92
+ records: undefined,
93
+ breadcrumbs: undefined,
79
94
  host: { ...options.host, close: () => discard.click() },
80
95
  });
81
96
  // A panel runs the way its page does, its language's way unless told: the inline end it sits at is the left, right to left.
@@ -84,8 +99,8 @@ function openForm(options, shape, side) {
84
99
  let done = false;
85
100
  if (options.recompute)
86
101
  recalculate(handle.form, options.page.fields, options.recompute, () => done);
87
- // Into the dialog: its first field, once the record is in, or the dialog itself meanwhile.
88
- const firstField = () => body.querySelector(FIRST_FIELD);
102
+ // Into the dialog: its field that takes the focus (focus) or its first, once the record is in, or the dialog itself meanwhile.
103
+ const firstField = () => focusField(body) ?? body.querySelector(FIRST_FIELD);
89
104
  (firstField() ?? box).focus();
90
105
  void handle.form.settled().then(() => {
91
106
  if (doc.activeElement === box || !box.contains(doc.activeElement))
@@ -147,8 +162,49 @@ function openForm(options, shape, side) {
147
162
  close(true);
148
163
  });
149
164
  discard.addEventListener('click', () => close(false));
165
+ // A footer button runs its steps; once they saved or sent, the dialog closes with the answers.
166
+ let saved = false;
167
+ handle.on('save', () => (saved = true));
168
+ handle.on('send', () => (saved = true));
169
+ const shown = () => {
170
+ for (const { node, button } of own)
171
+ button.hidden = handle.form.node(node.id).invisible;
172
+ };
173
+ if (own.length) {
174
+ shown();
175
+ handle.form.subscribe(shown);
176
+ }
177
+ for (const { node, button } of own) {
178
+ button.addEventListener('click', async () => {
179
+ if (button.hasAttribute('aria-busy'))
180
+ return;
181
+ button.setAttribute('aria-busy', 'true');
182
+ saved = false;
183
+ const result = await handle.form.runAction(node.id);
184
+ button.removeAttribute('aria-busy');
185
+ if (done)
186
+ return;
187
+ if (saved)
188
+ close(true);
189
+ // A check or a save that stopped them shows its problems, as Save & Close does.
190
+ else if (result.reason === 'check' || result.reason === 'save')
191
+ handle.check();
192
+ });
193
+ }
150
194
  closeButton.addEventListener('click', leave);
195
+ // A footer button's key, with Alt, and the keys shown while Alt is held.
196
+ box.addEventListener('keyup', (event) => event.key === 'Alt' && box.removeAttribute('data-hotkeys'));
151
197
  box.addEventListener('keydown', (event) => {
198
+ if (event.key === 'Alt')
199
+ box.setAttribute('data-hotkeys', '');
200
+ const key = hotkeyOf(event);
201
+ const pressed = key ? own.find(({ node, button }) => node.hotkey === key && !button.hidden && !button.disabled)?.button : undefined;
202
+ if (pressed) {
203
+ event.preventDefault();
204
+ box.removeAttribute('data-hotkeys');
205
+ pressed.click();
206
+ return;
207
+ }
152
208
  // Ctrl+Enter is Save & Close from wherever the cursor is, even after a field used the Enter
153
209
  // (a tag box adding its tag), taking what is still being typed. The grid keeps its own keys.
154
210
  if (event.key === 'Enter' && (event.ctrlKey || event.metaKey) && !event.isComposing) {
@@ -156,7 +212,11 @@ function openForm(options, shape, side) {
156
212
  return;
157
213
  event.preventDefault();
158
214
  doc.activeElement?.dispatchEvent(new Event('change', { bubbles: true }));
159
- saveClose.click();
215
+ // With buttons of its own, the page's primary one; else Save & Close.
216
+ if (own.length)
217
+ own.find(({ node, button }) => node.style === 'primary' && !button.hidden)?.button.click();
218
+ else
219
+ saveClose.click();
160
220
  return;
161
221
  }
162
222
  // A key a field used itself (Escape closing a list) is not the dialog's.