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