@fieldia/designer 0.19.0 → 0.20.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 (217) hide show
  1. package/package.json +4 -4
  2. package/src/lib/canvas-head.d.mts +22 -0
  3. package/src/lib/canvas-head.d.ts +22 -0
  4. package/src/lib/canvas-head.js +121 -0
  5. package/src/lib/canvas-head.js.map +1 -0
  6. package/src/lib/canvas-head.mjs +118 -0
  7. package/src/lib/canvas-head.mjs.map +1 -0
  8. package/src/lib/canvas-header.js +7 -1
  9. package/src/lib/canvas-header.js.map +1 -1
  10. package/src/lib/canvas-header.mjs +7 -1
  11. package/src/lib/canvas-header.mjs.map +1 -1
  12. package/src/lib/choice-commands.d.mts +2 -1
  13. package/src/lib/choice-commands.d.ts +2 -1
  14. package/src/lib/choice-commands.js +3 -0
  15. package/src/lib/choice-commands.js.map +1 -1
  16. package/src/lib/choice-commands.mjs +3 -0
  17. package/src/lib/choice-commands.mjs.map +1 -1
  18. package/src/lib/designer.d.mts +6 -3
  19. package/src/lib/designer.d.ts +6 -3
  20. package/src/lib/designer.js +12 -0
  21. package/src/lib/designer.js.map +1 -1
  22. package/src/lib/designer.mjs +12 -0
  23. package/src/lib/designer.mjs.map +1 -1
  24. package/src/lib/group-fold.js +2 -0
  25. package/src/lib/group-fold.js.map +1 -1
  26. package/src/lib/group-fold.mjs +2 -0
  27. package/src/lib/group-fold.mjs.map +1 -1
  28. package/src/lib/head-commands.d.mts +106 -0
  29. package/src/lib/head-commands.d.ts +106 -0
  30. package/src/lib/head-commands.js +472 -0
  31. package/src/lib/head-commands.js.map +1 -0
  32. package/src/lib/head-commands.mjs +468 -0
  33. package/src/lib/head-commands.mjs.map +1 -0
  34. package/src/lib/head-parts.d.mts +15 -0
  35. package/src/lib/head-parts.d.ts +15 -0
  36. package/src/lib/head-parts.js +69 -0
  37. package/src/lib/head-parts.js.map +1 -0
  38. package/src/lib/head-parts.mjs +64 -0
  39. package/src/lib/head-parts.mjs.map +1 -0
  40. package/src/lib/head-properties.d.mts +25 -0
  41. package/src/lib/head-properties.d.ts +25 -0
  42. package/src/lib/head-properties.js +370 -0
  43. package/src/lib/head-properties.js.map +1 -0
  44. package/src/lib/head-properties.mjs +363 -0
  45. package/src/lib/head-properties.mjs.map +1 -0
  46. package/src/lib/header-commands.js +7 -0
  47. package/src/lib/header-commands.js.map +1 -1
  48. package/src/lib/header-commands.mjs +7 -0
  49. package/src/lib/header-commands.mjs.map +1 -1
  50. package/src/lib/header-properties.js +5 -1
  51. package/src/lib/header-properties.js.map +1 -1
  52. package/src/lib/header-properties.mjs +5 -1
  53. package/src/lib/header-properties.mjs.map +1 -1
  54. package/src/lib/inline-settings.js +3 -1
  55. package/src/lib/inline-settings.js.map +1 -1
  56. package/src/lib/inline-settings.mjs +3 -1
  57. package/src/lib/inline-settings.mjs.map +1 -1
  58. package/src/lib/kind-settings-picker.d.mts +4 -0
  59. package/src/lib/kind-settings-picker.d.ts +4 -0
  60. package/src/lib/kind-settings-picker.js +108 -0
  61. package/src/lib/kind-settings-picker.js.map +1 -0
  62. package/src/lib/kind-settings-picker.mjs +105 -0
  63. package/src/lib/kind-settings-picker.mjs.map +1 -0
  64. package/src/lib/kind-settings-structures.js +7 -2
  65. package/src/lib/kind-settings-structures.js.map +1 -1
  66. package/src/lib/kind-settings-structures.mjs +7 -2
  67. package/src/lib/kind-settings-structures.mjs.map +1 -1
  68. package/src/lib/layout-settings.d.mts +7 -0
  69. package/src/lib/layout-settings.d.ts +7 -0
  70. package/src/lib/layout-settings.js +15 -2
  71. package/src/lib/layout-settings.js.map +1 -1
  72. package/src/lib/layout-settings.mjs +15 -2
  73. package/src/lib/layout-settings.mjs.map +1 -1
  74. package/src/lib/list-canvas.js +18 -7
  75. package/src/lib/list-canvas.js.map +1 -1
  76. package/src/lib/list-canvas.mjs +18 -7
  77. package/src/lib/list-canvas.mjs.map +1 -1
  78. package/src/lib/list-commands.d.mts +24 -1
  79. package/src/lib/list-commands.d.ts +24 -1
  80. package/src/lib/list-commands.js +105 -2
  81. package/src/lib/list-commands.js.map +1 -1
  82. package/src/lib/list-commands.mjs +102 -1
  83. package/src/lib/list-commands.mjs.map +1 -1
  84. package/src/lib/list-properties.js +177 -2
  85. package/src/lib/list-properties.js.map +1 -1
  86. package/src/lib/list-properties.mjs +177 -2
  87. package/src/lib/list-properties.mjs.map +1 -1
  88. package/src/lib/locales/ar/head.d.mts +2 -0
  89. package/src/lib/locales/ar/head.d.ts +2 -0
  90. package/src/lib/locales/ar/head.js +97 -0
  91. package/src/lib/locales/ar/head.js.map +1 -0
  92. package/src/lib/locales/ar/head.mjs +94 -0
  93. package/src/lib/locales/ar/head.mjs.map +1 -0
  94. package/src/lib/locales/ar/index.js +3 -1
  95. package/src/lib/locales/ar/index.js.map +1 -1
  96. package/src/lib/locales/ar/index.mjs +3 -1
  97. package/src/lib/locales/ar/index.mjs.map +1 -1
  98. package/src/lib/locales/ar/list.js +31 -0
  99. package/src/lib/locales/ar/list.js.map +1 -1
  100. package/src/lib/locales/ar/list.mjs +31 -0
  101. package/src/lib/locales/ar/list.mjs.map +1 -1
  102. package/src/lib/locales/ar/panel.js +38 -0
  103. package/src/lib/locales/ar/panel.js.map +1 -1
  104. package/src/lib/locales/ar/panel.mjs +38 -0
  105. package/src/lib/locales/ar/panel.mjs.map +1 -1
  106. package/src/lib/locales/ar/questions.js +8 -0
  107. package/src/lib/locales/ar/questions.js.map +1 -1
  108. package/src/lib/locales/ar/questions.mjs +8 -0
  109. package/src/lib/locales/ar/questions.mjs.map +1 -1
  110. package/src/lib/locales/ar/refusals.js +11 -0
  111. package/src/lib/locales/ar/refusals.js.map +1 -1
  112. package/src/lib/locales/ar/refusals.mjs +11 -0
  113. package/src/lib/locales/ar/refusals.mjs.map +1 -1
  114. package/src/lib/locales/ar/work-text.d.mts +3 -0
  115. package/src/lib/locales/ar/work-text.d.ts +3 -0
  116. package/src/lib/locales/ar/work-text.js +58 -0
  117. package/src/lib/locales/ar/work-text.js.map +1 -0
  118. package/src/lib/locales/ar/work-text.mjs +55 -0
  119. package/src/lib/locales/ar/work-text.mjs.map +1 -0
  120. package/src/lib/locales/en/head.d.mts +101 -0
  121. package/src/lib/locales/en/head.d.ts +101 -0
  122. package/src/lib/locales/en/head.js +106 -0
  123. package/src/lib/locales/en/head.js.map +1 -0
  124. package/src/lib/locales/en/head.mjs +103 -0
  125. package/src/lib/locales/en/head.mjs.map +1 -0
  126. package/src/lib/locales/en/index.d.mts +222 -0
  127. package/src/lib/locales/en/index.d.ts +222 -0
  128. package/src/lib/locales/en/index.js +3 -1
  129. package/src/lib/locales/en/index.js.map +1 -1
  130. package/src/lib/locales/en/index.mjs +3 -1
  131. package/src/lib/locales/en/index.mjs.map +1 -1
  132. package/src/lib/locales/en/list.d.mts +48 -0
  133. package/src/lib/locales/en/list.d.ts +48 -0
  134. package/src/lib/locales/en/list.js +33 -0
  135. package/src/lib/locales/en/list.js.map +1 -1
  136. package/src/lib/locales/en/list.mjs +33 -0
  137. package/src/lib/locales/en/list.mjs.map +1 -1
  138. package/src/lib/locales/en/panel.d.mts +6 -0
  139. package/src/lib/locales/en/panel.d.ts +6 -0
  140. package/src/lib/locales/en/panel.js +3 -0
  141. package/src/lib/locales/en/panel.js.map +1 -1
  142. package/src/lib/locales/en/panel.mjs +3 -0
  143. package/src/lib/locales/en/panel.mjs.map +1 -1
  144. package/src/lib/locales/en/questions.d.mts +8 -0
  145. package/src/lib/locales/en/questions.d.ts +8 -0
  146. package/src/lib/locales/en/questions.js +9 -0
  147. package/src/lib/locales/en/questions.js.map +1 -1
  148. package/src/lib/locales/en/questions.mjs +9 -0
  149. package/src/lib/locales/en/questions.mjs.map +1 -1
  150. package/src/lib/locales/en/refusals.d.mts +11 -0
  151. package/src/lib/locales/en/refusals.d.ts +11 -0
  152. package/src/lib/locales/en/refusals.js +11 -0
  153. package/src/lib/locales/en/refusals.js.map +1 -1
  154. package/src/lib/locales/en/refusals.mjs +11 -0
  155. package/src/lib/locales/en/refusals.mjs.map +1 -1
  156. package/src/lib/locales/en/work-text.d.mts +58 -0
  157. package/src/lib/locales/en/work-text.d.ts +58 -0
  158. package/src/lib/locales/en/work-text.js +67 -0
  159. package/src/lib/locales/en/work-text.js.map +1 -0
  160. package/src/lib/locales/en/work-text.mjs +64 -0
  161. package/src/lib/locales/en/work-text.mjs.map +1 -0
  162. package/src/lib/page-tree.js +11 -1
  163. package/src/lib/page-tree.js.map +1 -1
  164. package/src/lib/page-tree.mjs +11 -1
  165. package/src/lib/page-tree.mjs.map +1 -1
  166. package/src/lib/panel-block.js +6 -1
  167. package/src/lib/panel-block.js.map +1 -1
  168. package/src/lib/panel-block.mjs +6 -1
  169. package/src/lib/panel-block.mjs.map +1 -1
  170. package/src/lib/panel-field.js +5 -1
  171. package/src/lib/panel-field.js.map +1 -1
  172. package/src/lib/panel-field.mjs +5 -1
  173. package/src/lib/panel-field.mjs.map +1 -1
  174. package/src/lib/panel-group.js +7 -3
  175. package/src/lib/panel-group.js.map +1 -1
  176. package/src/lib/panel-group.mjs +7 -3
  177. package/src/lib/panel-group.mjs.map +1 -1
  178. package/src/lib/panel-look.js +7 -0
  179. package/src/lib/panel-look.js.map +1 -1
  180. package/src/lib/panel-look.mjs +7 -0
  181. package/src/lib/panel-look.mjs.map +1 -1
  182. package/src/lib/panel-page.js +5 -1
  183. package/src/lib/panel-page.js.map +1 -1
  184. package/src/lib/panel-page.mjs +5 -1
  185. package/src/lib/panel-page.mjs.map +1 -1
  186. package/src/lib/panel-parts.js +5 -1
  187. package/src/lib/panel-parts.js.map +1 -1
  188. package/src/lib/panel-parts.mjs +5 -1
  189. package/src/lib/panel-parts.mjs.map +1 -1
  190. package/src/lib/picker-commands.d.mts +16 -0
  191. package/src/lib/picker-commands.d.ts +16 -0
  192. package/src/lib/picker-commands.js +61 -0
  193. package/src/lib/picker-commands.js.map +1 -0
  194. package/src/lib/picker-commands.mjs +58 -0
  195. package/src/lib/picker-commands.mjs.map +1 -0
  196. package/src/lib/screen-properties.js +9 -2
  197. package/src/lib/screen-properties.js.map +1 -1
  198. package/src/lib/screen-properties.mjs +9 -2
  199. package/src/lib/screen-properties.mjs.map +1 -1
  200. package/src/lib/styles-head.d.mts +7 -0
  201. package/src/lib/styles-head.d.ts +7 -0
  202. package/src/lib/styles-head.js +28 -0
  203. package/src/lib/styles-head.js.map +1 -0
  204. package/src/lib/styles-head.mjs +25 -0
  205. package/src/lib/styles-head.mjs.map +1 -0
  206. package/src/lib/styles.d.mts +1 -1
  207. package/src/lib/styles.d.ts +1 -1
  208. package/src/lib/styles.js +9 -2
  209. package/src/lib/styles.js.map +1 -1
  210. package/src/lib/styles.mjs +9 -2
  211. package/src/lib/styles.mjs.map +1 -1
  212. package/src/lib/work-text.d.mts +35 -0
  213. package/src/lib/work-text.d.ts +35 -0
  214. package/src/lib/work-text.js +246 -0
  215. package/src/lib/work-text.js.map +1 -0
  216. package/src/lib/work-text.mjs +236 -0
  217. package/src/lib/work-text.mjs.map +1 -0
@@ -0,0 +1,64 @@
1
+ import { compileModifier } from '@fieldia/core';
2
+ /**
3
+ * What a record's head (`SheetHead`) holds, for the designer's walk through a
4
+ * page: the parts with ids of their own — its buttons and their menus' items,
5
+ * its row's fields and links, its band's parts — and the fields it names, so
6
+ * an edit elsewhere never drops a field the head shows or reads.
7
+ */
8
+ /** The parts of a sheet's head with ids of their own. */
9
+ export function headParts(root) {
10
+ const head = root.head;
11
+ if (!head)
12
+ return [];
13
+ const buttons = head.actions ?? [];
14
+ return [...buttons, ...buttons.flatMap((button) => button.menu ?? []), ...(head.meta ?? []), ...(head.band?.children ?? [])];
15
+ }
16
+ /** The fields a sheet's head names besides its parts' own: the kind's and the number's, who updated it and when, and what a toggle reads. */
17
+ export function headFields(root) {
18
+ const head = root.head;
19
+ if (!head)
20
+ return [];
21
+ const names = [head.kind?.field, head.kind?.numberField, head.updated?.byField, head.updated?.atField].filter((name) => !!name);
22
+ for (const button of [...(head.actions ?? []), ...(root.buttons ?? [])])
23
+ names.push(...pressedReads(button));
24
+ return names;
25
+ }
26
+ /** The fields a toggle's condition reads. */
27
+ function pressedReads(button) {
28
+ if (typeof button.pressed !== 'string')
29
+ return [];
30
+ try {
31
+ return [...compileModifier(button.pressed).fields];
32
+ }
33
+ catch {
34
+ // A condition that does not read is the page's checks' to say.
35
+ return [];
36
+ }
37
+ }
38
+ /** The fields a page's tabs count (a tab's `count`), wherever the tabs are. */
39
+ export function tabCountFields(page) {
40
+ const found = [];
41
+ const walk = (nodes) => {
42
+ for (const node of nodes) {
43
+ if (node.type === 'section')
44
+ walk(node.children);
45
+ if (node.type === 'tabs') {
46
+ for (const tab of node.children) {
47
+ if (tab.count)
48
+ found.push(tab.count);
49
+ walk(tab.children);
50
+ }
51
+ }
52
+ }
53
+ };
54
+ const root = page.layout;
55
+ if (root.type === 'tabs')
56
+ walk([root]);
57
+ else if (root.type === 'wizard')
58
+ for (const step of root.children)
59
+ walk(step.children);
60
+ else if (root.type !== 'list')
61
+ walk(root.children);
62
+ return found;
63
+ }
64
+ //# sourceMappingURL=head-parts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"head-parts.mjs","sourceRoot":"","sources":["../../../../../libs/designer/src/lib/head-parts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Page } from '@fieldia/core';
2
+ import type { ElementFactory } from './chrome.mjs';
3
+ import type { Designer } from './designer.mjs';
4
+ /**
5
+ * A record's head in the panel: the sheet's "Record head" settings — on or
6
+ * off, its kind and each kind's look, its number, Copy title, the row under
7
+ * the title, its buttons, the band's fields with their access keys, its
8
+ * columns and labels' width, "Updated by" — and the parts it brought to other
9
+ * panels: a button's icon alone, toggle, menu and look while the record has
10
+ * changes; a tab's icon and count, and tabs in the head; a field's access key.
11
+ */
12
+ export interface SettingRows {
13
+ rows: HTMLElement[];
14
+ update(page: Page): void;
15
+ }
16
+ /** The sheet's Record head settings, for the page's panel; none on a page that is no sheet. */
17
+ export declare function headSettings(el: ElementFactory, designer: Designer): SettingRows;
18
+ /** A button's own parts: its icon alone, a toggle and its words, the look while the record has changes, a menu beside it. */
19
+ export declare function buttonPartsSettings(el: ElementFactory, designer: Designer, id: string): SettingRows;
20
+ /** A tab's icon, shown alone or with its words, and the field whose count shows after it. */
21
+ export declare function tabPartsSettings(el: ElementFactory, designer: Designer, id: string): SettingRows;
22
+ /** Tabs directly in a sheet with a head: in the head's band, or over the body. */
23
+ export declare function tabsInHeadSetting(el: ElementFactory, designer: Designer, id: string): SettingRows;
24
+ /** A field's access key: a letter of its label, with Alt. */
25
+ export declare function fieldHotkeySetting(el: ElementFactory, designer: Designer, id: string): SettingRows;
@@ -0,0 +1,25 @@
1
+ import type { Page } from '@fieldia/core';
2
+ import type { ElementFactory } from './chrome';
3
+ import type { Designer } from './designer';
4
+ /**
5
+ * A record's head in the panel: the sheet's "Record head" settings — on or
6
+ * off, its kind and each kind's look, its number, Copy title, the row under
7
+ * the title, its buttons, the band's fields with their access keys, its
8
+ * columns and labels' width, "Updated by" — and the parts it brought to other
9
+ * panels: a button's icon alone, toggle, menu and look while the record has
10
+ * changes; a tab's icon and count, and tabs in the head; a field's access key.
11
+ */
12
+ export interface SettingRows {
13
+ rows: HTMLElement[];
14
+ update(page: Page): void;
15
+ }
16
+ /** The sheet's Record head settings, for the page's panel; none on a page that is no sheet. */
17
+ export declare function headSettings(el: ElementFactory, designer: Designer): SettingRows;
18
+ /** A button's own parts: its icon alone, a toggle and its words, the look while the record has changes, a menu beside it. */
19
+ export declare function buttonPartsSettings(el: ElementFactory, designer: Designer, id: string): SettingRows;
20
+ /** A tab's icon, shown alone or with its words, and the field whose count shows after it. */
21
+ export declare function tabPartsSettings(el: ElementFactory, designer: Designer, id: string): SettingRows;
22
+ /** Tabs directly in a sheet with a head: in the head's band, or over the body. */
23
+ export declare function tabsInHeadSetting(el: ElementFactory, designer: Designer, id: string): SettingRows;
24
+ /** A field's access key: a letter of its label, with Alt. */
25
+ export declare function fieldHotkeySetting(el: ElementFactory, designer: Designer, id: string): SettingRows;
@@ -0,0 +1,370 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.headSettings = headSettings;
4
+ exports.buttonPartsSettings = buttonPartsSettings;
5
+ exports.tabPartsSettings = tabPartsSettings;
6
+ exports.tabsInHeadSetting = tabsInHeadSetting;
7
+ exports.fieldHotkeySetting = fieldHotkeySetting;
8
+ const widgets_1 = require("@fieldia/widgets");
9
+ const page_tree_1 = require("./page-tree");
10
+ const panel_controls_1 = require("./panel-controls");
11
+ const focused = (node) => node.ownerDocument.activeElement === node;
12
+ /** The page's fields and the model's, each once, by name. */
13
+ function allFields(designer, page) {
14
+ const own = Object.entries(page.fields);
15
+ const names = new Set(own.map(([name]) => name));
16
+ return [...own, ...designer.modelFields().filter((m) => !names.has(m.name)).map((m) => [m.name, m.field])];
17
+ }
18
+ /** A select of choices, drawn again only when its choices change, then set to `value`. */
19
+ function fill(el, select, choices, value) {
20
+ const key = JSON.stringify(choices);
21
+ if (select.dataset['choices'] !== key) {
22
+ select.dataset['choices'] = key;
23
+ select.replaceChildren(...choices.map(([v, words]) => el('option', { value: v }, words)));
24
+ }
25
+ if (!focused(select))
26
+ select.value = value;
27
+ }
28
+ const box = (el, label, attrs = {}) => el('input', { class: 'fd-input', 'aria-label': label, autocomplete: 'off', ...attrs });
29
+ const pick = (el, label) => el('select', { class: 'fd-input fd-select', 'aria-label': label });
30
+ const tick = (el, label) => el('input', { type: 'checkbox', class: 'fd-check', 'aria-label': label });
31
+ const ICON_NAMES = () => Object.keys(widgets_1.ICONS).sort();
32
+ /** The sheet's Record head settings, for the page's panel; none on a page that is no sheet. */
33
+ function headSettings(el, designer) {
34
+ const w = designer.words.head;
35
+ const on = tick(el, w.headOn);
36
+ on.addEventListener('change', () => designer.setHead(on.checked ? {} : null));
37
+ const onRow = (0, panel_controls_1.setting)(el, 'content', 'Record head', on, { hint: w.recordHeadHint, words: w.recordHead });
38
+ const kindFrom = pick(el, w.kindFrom);
39
+ kindFrom.addEventListener('change', () => designer.setHead({ kindField: kindFrom.value || null }));
40
+ const kindWords = box(el, w.kindWords);
41
+ kindWords.addEventListener('input', () => designer.setHead({ kindLabel: kindWords.value }));
42
+ const numberFrom = pick(el, w.numberFrom);
43
+ numberFrom.addEventListener('change', () => designer.setHead({ numberField: numberFrom.value || null }));
44
+ const colour = box(el, w.kindColour, { type: 'color' });
45
+ colour.addEventListener('change', () => designer.setHead({ colour: colour.value }));
46
+ const icon = pick(el, w.kindIcon);
47
+ icon.addEventListener('change', () => designer.setHead({ icon: icon.value || null }));
48
+ const looks = el('div', { class: 'fd-head-looks' });
49
+ const copy = tick(el, w.copyTitle);
50
+ copy.addEventListener('change', () => designer.setHead({ copyTitle: copy.checked }));
51
+ const tracks = box(el, w.bandColumns, { placeholder: '1fr 1fr', spellcheck: 'false' });
52
+ tracks.addEventListener('change', () => designer.setHead({ tracks: tracks.value.trim() ? tracks.value.trim().split(/\s+/) : null }));
53
+ const labelWidth = box(el, w.labelWidth, { type: 'number', min: '48', max: '320', placeholder: '76' });
54
+ labelWidth.addEventListener('change', () => designer.setHead({ labelWidth: labelWidth.value ? Number(labelWidth.value) : null }));
55
+ const by = pick(el, w.updatedBy);
56
+ const at = pick(el, w.updatedAt);
57
+ const opens = pick(el, w.updatedOpens);
58
+ const setUpdated = () => designer.setHead({ updated: by.value && at.value ? { byField: by.value, atField: at.value, opens: opens.value || null } : null });
59
+ for (const control of [by, at, opens])
60
+ control.addEventListener('change', setUpdated);
61
+ // The row under the title, the buttons, the band's fields: lists with their own adders.
62
+ const rowList = el('div', { class: 'fd-head-list' });
63
+ const addRowField = pick(el, w.addRowField);
64
+ addRowField.addEventListener('change', () => {
65
+ if (addRowField.value)
66
+ designer.addHeadPart('meta', { field: addRowField.value });
67
+ addRowField.value = '';
68
+ });
69
+ const addRowLink = pick(el, w.addRowLink);
70
+ addRowLink.addEventListener('change', () => {
71
+ if (addRowLink.value)
72
+ designer.addHeadPart('meta', { link: addRowLink.value });
73
+ addRowLink.value = '';
74
+ });
75
+ const buttonList = el('div', { class: 'fd-head-list' });
76
+ const addButton = el('button', { type: 'button', class: 'fd-button fd-button-link' }, w.addButton);
77
+ addButton.addEventListener('click', () => designer.addHeadPart('actions', { button: w.newButton }));
78
+ const bandList = el('div', { class: 'fd-head-list' });
79
+ const addBandField = pick(el, w.addBandField);
80
+ addBandField.addEventListener('change', () => {
81
+ if (addBandField.value)
82
+ designer.addHeadPart('band', { field: addBandField.value });
83
+ addBandField.value = '';
84
+ });
85
+ const rows = [
86
+ onRow,
87
+ (0, panel_controls_1.setting)(el, 'content', 'Kind from', kindFrom, { words: w.kindFrom }),
88
+ (0, panel_controls_1.setting)(el, 'content', 'Kind’s words', kindWords, { hint: w.kindWordsHint, words: w.kindWords }),
89
+ (0, panel_controls_1.setting)(el, 'content', 'Number from', numberFrom, { words: w.numberFrom }),
90
+ (0, panel_controls_1.setting)(el, 'content', 'Kind’s colour', colour, { words: w.kindColour }),
91
+ (0, panel_controls_1.setting)(el, 'content', 'Kind’s icon', icon, { words: w.kindIcon }),
92
+ (0, panel_controls_1.setting)(el, 'content', 'Each kind’s look', looks, { words: w.kindLooks }),
93
+ (0, panel_controls_1.setting)(el, 'content', 'Copy title button', copy, { words: w.copyTitle }),
94
+ (0, panel_controls_1.setting)(el, 'content', 'Row under the title', [rowList, addRowField, addRowLink], { words: w.rowParts }),
95
+ (0, panel_controls_1.setting)(el, 'content', 'Buttons', [buttonList, addButton], { hint: w.buttonHint, words: w.actions }),
96
+ (0, panel_controls_1.setting)(el, 'content', 'Band’s fields', [bandList, addBandField], { words: w.bandFields }),
97
+ (0, panel_controls_1.setting)(el, 'layout', 'Band’s columns', tracks, { hint: w.bandColumnsHint, words: w.bandColumns }),
98
+ (0, panel_controls_1.setting)(el, 'layout', 'Band’s labels’ width', labelWidth, { words: w.labelWidth }),
99
+ (0, panel_controls_1.setting)(el, 'content', 'Updated by', by, { words: w.updatedBy }),
100
+ (0, panel_controls_1.setting)(el, 'content', 'Updated on', at, { words: w.updatedAt }),
101
+ (0, panel_controls_1.setting)(el, 'content', 'Pressed, “Updated by” shows', opens, { words: w.updatedOpens }),
102
+ ];
103
+ const [, , wordsRow, , colourRow, iconRow, looksRow] = rows;
104
+ let drawnLists = '';
105
+ /** A part's line in its list: its name, what it has of its own, earlier, later and remove. */
106
+ const partLine = (id, name, own, index, count) => {
107
+ const tool = (label, words, run, hidden = false) => {
108
+ const button = el('button', { type: 'button', class: 'fd-icon-button', 'aria-label': label, title: label, ...(hidden ? { hidden: '' } : {}) }, words);
109
+ button.addEventListener('click', run);
110
+ return button;
111
+ };
112
+ return el('div', { class: 'fd-head-line', 'data-part': id }, el('span', { class: 'fd-head-line-name' }, name), ...own, tool(w.moveEarlier(name), '↑', () => designer.moveHeadPart(id, -1), index === 0), tool(w.moveLater(name), '↓', () => designer.moveHeadPart(id, 1), index === count - 1), tool(w.removeNamed(name), '×', () => designer.removeHeadPart(id)));
113
+ };
114
+ return {
115
+ rows,
116
+ update(page) {
117
+ const root = page.layout;
118
+ const sheet = root.type === 'sheet' ? root : null;
119
+ const head = sheet?.head;
120
+ for (const row of rows)
121
+ row.hidden = !sheet || (row !== onRow && !head);
122
+ if (!sheet)
123
+ return;
124
+ on.checked = !!head;
125
+ if (!head)
126
+ return;
127
+ const fields = allFields(designer, page);
128
+ const label = (name) => page.fields[name]?.label ?? fields.find(([n]) => n === name)?.[1].label ?? name;
129
+ const kind = head.kind ?? {};
130
+ fill(el, kindFrom, [['', w.oneKind], ...fields.filter(([, f]) => (f.type === 'selection' && !f.multiple) || f.type === 'many2one').map(([n, f]) => [n, f.label])], kind.field ?? '');
131
+ wordsRow.hidden = colourRow.hidden = iconRow.hidden = !!kind.field;
132
+ if (!focused(kindWords))
133
+ kindWords.value = kind.label ?? '';
134
+ fill(el, numberFrom, [['', w.recordsId], ...fields.filter(([, f]) => ['integer', 'float', 'char'].includes(f.type)).map(([n, f]) => [n, f.label])], kind.numberField ?? '');
135
+ if (!focused(colour))
136
+ colour.value = kind.colour ?? '#cc293d';
137
+ const icons = [['', w.noIcon], ...ICON_NAMES().map((name) => [name, name])];
138
+ fill(el, icon, icons, kind.icon ?? '');
139
+ // Each kind's colour and icon, by the choice's values.
140
+ const def = kind.field ? page.fields[kind.field] : undefined;
141
+ const options = def?.type === 'selection' ? def.options : [];
142
+ looksRow.hidden = !options.length;
143
+ const looksKey = JSON.stringify([options, kind.looks]);
144
+ if (looks.dataset['drawn'] !== looksKey && !looks.contains(looks.ownerDocument.activeElement)) {
145
+ looks.dataset['drawn'] = looksKey;
146
+ looks.replaceChildren(...options.map((option) => {
147
+ const value = String(option.value);
148
+ const look = kind.looks?.[value];
149
+ const swatch = box(el, w.colourOf(option.label), { type: 'color', value: look?.colour ?? '#7e7e7e' });
150
+ const mark = pick(el, w.iconOf(option.label));
151
+ fill(el, mark, icons, look?.icon ?? '');
152
+ const set = () => designer.setHeadKindLook(value, { colour: swatch.value, ...(mark.value ? { icon: mark.value } : {}) });
153
+ swatch.addEventListener('change', set);
154
+ mark.addEventListener('change', set);
155
+ return el('div', { class: 'fd-head-look', 'data-value': value }, el('span', { class: 'fd-head-line-name' }, option.label), swatch, mark);
156
+ }));
157
+ }
158
+ copy.checked = head.copyTitle !== false;
159
+ if (!focused(tracks))
160
+ tracks.value = (head.band?.tracks ?? []).join(' ');
161
+ if (!focused(labelWidth))
162
+ labelWidth.value = head.band?.labelWidth ? String(head.band.labelWidth) : '';
163
+ // "Updated by": who, when, and the tab it opens.
164
+ const tabs = (0, page_tree_1.tabsNodes)(page).flatMap((t) => t.children);
165
+ fill(el, by, [['', w.noUpdated], ...fields.filter(([, f]) => ['many2one', 'char'].includes(f.type)).map(([n, f]) => [n, f.label])], head.updated?.byField ?? '');
166
+ fill(el, at, [['', w.noUpdated], ...fields.filter(([, f]) => f.type === 'date' || f.type === 'datetime').map(([n, f]) => [n, f.label])], head.updated?.atField ?? '');
167
+ fill(el, opens, [['', w.noTab], ...tabs.map((t) => [t.id, t.label])], head.updated?.opens ?? '');
168
+ // What can be added: a field not in the head yet; a count of a number field.
169
+ const placed = new Set([...(head.meta ?? []), ...(head.band?.children ?? [])].flatMap((part) => (part.type === 'field' ? [part.field] : [])));
170
+ const free = fields.filter(([n, f]) => !placed.has(n) && !['one2many', 'html', 'json', 'properties'].includes(f.type));
171
+ fill(el, addRowField, [['', w.pick], ...free.map(([n, f]) => [n, f.label])], '');
172
+ fill(el, addRowLink, [['', w.pick], ...fields.filter(([, f]) => ['integer', 'float', 'monetary'].includes(f.type)).map(([n, f]) => [n, f.label])], '');
173
+ fill(el, addBandField, [['', w.pick], ...free.map(([n, f]) => [n, f.label])], '');
174
+ // The lists, drawn again only when the head's parts change and nothing in them is being typed in.
175
+ const listsKey = JSON.stringify([head.meta, head.actions, head.band?.children, tabs.map((t) => t.id)]);
176
+ const busy = [rowList, bandList, buttonList].some((list) => list.contains(list.ownerDocument.activeElement) && list.ownerDocument.activeElement?.tagName === 'INPUT');
177
+ if (listsKey === drawnLists || busy)
178
+ return;
179
+ drawnLists = listsKey;
180
+ const meta = head.meta ?? [];
181
+ rowList.replaceChildren(...meta.map((part, i) => {
182
+ if (part.type === 'field')
183
+ return partLine(part.id, label(part.field), [], i, meta.length);
184
+ const link = part;
185
+ const name = label(link.field);
186
+ const one = box(el, w.linkWordsOne(name), { value: link.words.one ?? '' });
187
+ one.addEventListener('input', () => designer.updateHeadLink(link.id, { one: one.value }));
188
+ const other = box(el, w.linkWordsOther(name), { value: link.words.other });
189
+ other.addEventListener('input', () => designer.updateHeadLink(link.id, { other: other.value }));
190
+ const target = pick(el, w.linkTarget(name));
191
+ const parts = [['', w.nowhere], ...tabs.map((t) => [t.id, t.label]), ...sectionTargets(page)];
192
+ fill(el, target, parts, link.target ?? '');
193
+ target.addEventListener('change', () => designer.updateHeadLink(link.id, { target: target.value }));
194
+ return partLine(link.id, name, [one, other, target], i, meta.length);
195
+ }));
196
+ const actions = head.actions ?? [];
197
+ buttonList.replaceChildren(...actions.map((button, i) => {
198
+ const open = el('button', { type: 'button', class: 'fd-button fd-button-link' }, button.label);
199
+ open.addEventListener('click', () => designer.select(button.id));
200
+ return partLine(button.id, button.label, [open], i, actions.length);
201
+ }));
202
+ const band = head.band?.children ?? [];
203
+ bandList.replaceChildren(...band.map((part, i) => {
204
+ if (part.type !== 'field')
205
+ return partLine(part.id, part.id, [], i, band.length);
206
+ const node = part;
207
+ const key = box(el, w.accessKeyOf(label(node.field)), { value: node.hotkey ?? '', maxlength: '1', class: 'fd-input fd-hotkey-input' });
208
+ key.addEventListener('change', () => designer.setFieldHotkey(node.id, key.value || null));
209
+ return partLine(node.id, label(node.field), [key], i, band.length);
210
+ }));
211
+ },
212
+ };
213
+ }
214
+ /** The groups a count can take the reader to, by their titles. */
215
+ function sectionTargets(page) {
216
+ const found = [];
217
+ const walk = (nodes) => {
218
+ for (const node of nodes) {
219
+ if (node.type === 'section') {
220
+ if (node.title)
221
+ found.push([node.id, node.title]);
222
+ walk(node.children);
223
+ }
224
+ if (node.type === 'tabs')
225
+ for (const tab of node.children)
226
+ walk(tab.children);
227
+ }
228
+ };
229
+ const root = page.layout;
230
+ if (root.type === 'sheet' || root.type === 'sections')
231
+ walk(root.children);
232
+ return found;
233
+ }
234
+ /** A button's own parts: its icon alone, a toggle and its words, the look while the record has changes, a menu beside it. */
235
+ function buttonPartsSettings(el, designer, id) {
236
+ const w = designer.words.head;
237
+ const icon = pick(el, w.icon);
238
+ icon.addEventListener('change', () => designer.setButtonParts(id, { icon: icon.value || null }));
239
+ const iconOnly = tick(el, w.iconOnly);
240
+ iconOnly.addEventListener('change', () => designer.setButtonParts(id, { iconOnly: iconOnly.checked }));
241
+ const toggle = pick(el, w.toggle);
242
+ toggle.addEventListener('change', () => designer.setButtonParts(id, { pressed: toggle.value || null }));
243
+ const pressedWords = box(el, w.pressedWords);
244
+ pressedWords.addEventListener('input', () => designer.setButtonParts(id, { pressedLabel: pressedWords.value }));
245
+ const primary = tick(el, w.primaryWhenChanged);
246
+ primary.addEventListener('change', () => designer.setButtonParts(id, { primaryWhenChanged: primary.checked }));
247
+ const menuList = el('div', { class: 'fd-head-list' });
248
+ const addChoice = el('button', { type: 'button', class: 'fd-button fd-button-link' }, w.addChoice);
249
+ const menuIcon = pick(el, w.chevronIcon);
250
+ menuIcon.addEventListener('change', () => designer.setButtonParts(id, { menuIcon: menuIcon.value || null }));
251
+ const menuName = box(el, w.chevronName);
252
+ menuName.addEventListener('input', () => designer.setButtonParts(id, { menuLabel: menuName.value }));
253
+ const current = () => {
254
+ const page = designer.getPage();
255
+ const root = page.layout;
256
+ const node = (0, page_tree_1.findNode)(page, id)?.node;
257
+ if (node?.type === 'button')
258
+ return node;
259
+ return root.type === 'sheet' ? [...(root.head?.actions ?? []), ...(root.buttons ?? [])].find((b) => b.id === id) : undefined;
260
+ };
261
+ const items = () => (current()?.menu ?? []).map((item) => ({ id: item.id, label: item.label ?? item.id, action: item.action ?? '' }));
262
+ addChoice.addEventListener('click', () => designer.setButtonParts(id, { menu: [...items(), { label: w.newChoice, action: '' }] }));
263
+ const pressedRow = (0, panel_controls_1.setting)(el, 'content', 'Words while pressed', pressedWords, { words: w.pressedWords });
264
+ const chevronRows = [(0, panel_controls_1.setting)(el, 'content', 'Chevron’s icon', menuIcon, { words: w.chevronIcon }), (0, panel_controls_1.setting)(el, 'content', 'Chevron’s name', menuName, { words: w.chevronName })];
265
+ const rows = [
266
+ (0, panel_controls_1.setting)(el, 'content', 'Icon', icon, { words: w.icon }),
267
+ (0, panel_controls_1.setting)(el, 'content', 'Its icon alone', iconOnly, { words: w.iconOnly }),
268
+ (0, panel_controls_1.setting)(el, 'content', 'Pressed while', toggle, { words: w.toggle }),
269
+ pressedRow,
270
+ (0, panel_controls_1.setting)(el, 'content', 'Primary while the record has changes', primary, { words: w.primaryWhenChanged }),
271
+ (0, panel_controls_1.setting)(el, 'content', 'Menu beside it', [menuList, addChoice], { hint: w.menuHint, words: w.menu }),
272
+ ...chevronRows,
273
+ ];
274
+ let drawn = '';
275
+ return {
276
+ rows,
277
+ update(page) {
278
+ const button = current();
279
+ for (const row of rows)
280
+ row.hidden = !button;
281
+ if (!button)
282
+ return;
283
+ const icons = [['', w.noIcon], ...ICON_NAMES().map((name) => [name, name])];
284
+ fill(el, icon, icons, button.icon ?? '');
285
+ iconOnly.checked = button.iconOnly === true;
286
+ const flags = allFields(designer, page).filter(([, f]) => f.type === 'boolean');
287
+ fill(el, toggle, [['', w.notToggle], ...flags.map(([n, f]) => [n, f.label])], typeof button.pressed === 'string' ? button.pressed : '');
288
+ pressedRow.hidden = button.pressed === undefined;
289
+ if (!focused(pressedWords))
290
+ pressedWords.value = button.pressedLabel ?? '';
291
+ primary.checked = button.primaryWhenChanged === true;
292
+ for (const row of chevronRows)
293
+ row.hidden = !button.menu?.length;
294
+ fill(el, menuIcon, [['', w.noIcon], ...ICON_NAMES().map((name) => [name, name])], button.menuIcon ?? '');
295
+ if (!focused(menuName))
296
+ menuName.value = button.menuLabel ?? '';
297
+ const key = JSON.stringify(button.menu ?? []);
298
+ if (key === drawn || menuList.contains(menuList.ownerDocument.activeElement))
299
+ return;
300
+ drawn = key;
301
+ const list = items();
302
+ menuList.replaceChildren(...list.map((item, i) => {
303
+ const words = box(el, `${w.choiceWords} ${i + 1}`, { value: item.label });
304
+ const action = box(el, `${w.choiceAction} ${i + 1}`, { value: item.action, spellcheck: 'false' });
305
+ const save = () => designer.setButtonParts(id, { menu: items().map((one) => (one.id === item.id ? { ...one, label: words.value, action: action.value } : one)) });
306
+ words.addEventListener('change', save);
307
+ action.addEventListener('change', save);
308
+ const remove = el('button', { type: 'button', class: 'fd-icon-button', 'aria-label': w.removeNamed(item.label), title: w.removeNamed(item.label) }, '×');
309
+ remove.addEventListener('click', () => designer.setButtonParts(id, { menu: items().filter((one) => one.id !== item.id) }));
310
+ return el('div', { class: 'fd-head-line', 'data-part': item.id }, words, action, remove);
311
+ }));
312
+ },
313
+ };
314
+ }
315
+ /** A tab's icon, shown alone or with its words, and the field whose count shows after it. */
316
+ function tabPartsSettings(el, designer, id) {
317
+ const w = designer.words.head;
318
+ const icon = pick(el, w.tabIcon);
319
+ icon.addEventListener('change', () => designer.setTabParts(id, { icon: icon.value || null }));
320
+ const iconOnly = tick(el, w.tabIconOnly);
321
+ iconOnly.addEventListener('change', () => designer.setTabParts(id, { iconOnly: iconOnly.checked }));
322
+ const count = pick(el, w.countFrom);
323
+ count.addEventListener('change', () => designer.setTabParts(id, { count: count.value || null }));
324
+ const rows = [(0, panel_controls_1.setting)(el, 'content', 'Tab’s icon', icon, { words: w.tabIcon }), (0, panel_controls_1.setting)(el, 'content', 'Tab’s icon alone', iconOnly, { words: w.tabIconOnly }), (0, panel_controls_1.setting)(el, 'content', 'Count from', count, { words: w.countFrom })];
325
+ return {
326
+ rows,
327
+ update(page) {
328
+ const tab = (0, page_tree_1.findTab)(page, id)?.tab;
329
+ if (!tab)
330
+ return;
331
+ fill(el, icon, [['', w.noIcon], ...ICON_NAMES().map((name) => [name, name])], tab.icon ?? '');
332
+ iconOnly.checked = tab.iconOnly === true;
333
+ const counted = allFields(designer, page).filter(([, f]) => ['integer', 'float', 'monetary', 'one2many', 'many2many', 'binary', 'image'].includes(f.type));
334
+ fill(el, count, [['', w.noCount], ...counted.map(([n, f]) => [n, f.label])], tab.count ?? '');
335
+ },
336
+ };
337
+ }
338
+ /** Tabs directly in a sheet with a head: in the head's band, or over the body. */
339
+ function tabsInHeadSetting(el, designer, id) {
340
+ const w = designer.words.head;
341
+ const inHead = tick(el, w.inHead);
342
+ inHead.addEventListener('change', () => designer.setTabsInHead(id, inHead.checked));
343
+ const row = (0, panel_controls_1.setting)(el, 'layout', 'In the record’s head', inHead, { hint: w.inHeadHint, words: w.inHead });
344
+ return {
345
+ rows: [row],
346
+ update(page) {
347
+ const root = page.layout;
348
+ const direct = root.type === 'sheet' && !!root.head && root.children.some((child) => child.id === id && child.type === 'tabs');
349
+ row.hidden = !direct;
350
+ const tabs = (0, page_tree_1.tabsNodes)(page).find((t) => t.id === id);
351
+ inHead.checked = tabs?.place === 'head';
352
+ },
353
+ };
354
+ }
355
+ /** A field's access key: a letter of its label, with Alt. */
356
+ function fieldHotkeySetting(el, designer, id) {
357
+ const w = designer.words.head;
358
+ const key = box(el, w.accessKey, { maxlength: '1', class: 'fd-input fd-hotkey-input', placeholder: 'E', spellcheck: 'false' });
359
+ key.addEventListener('change', () => designer.setFieldHotkey(id, key.value || null));
360
+ const row = (0, panel_controls_1.setting)(el, 'content', 'Access key, with Alt', key, { hint: w.accessKeyHint, words: w.accessKey });
361
+ return {
362
+ rows: [row],
363
+ update(page) {
364
+ const node = (0, page_tree_1.findNode)(page, id)?.node;
365
+ if (node?.type === 'field' && !focused(key))
366
+ key.value = (node.hotkey ?? '').toUpperCase();
367
+ },
368
+ };
369
+ }
370
+ //# sourceMappingURL=head-properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"head-properties.js","sourceRoot":"","sources":["../../../../../libs/designer/src/lib/head-properties.ts"],"names":[],"mappings":"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"}