@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.
- package/package.json +4 -4
- package/src/lib/canvas-head.d.mts +22 -0
- package/src/lib/canvas-head.d.ts +22 -0
- package/src/lib/canvas-head.js +121 -0
- package/src/lib/canvas-head.js.map +1 -0
- package/src/lib/canvas-head.mjs +118 -0
- package/src/lib/canvas-head.mjs.map +1 -0
- package/src/lib/canvas-header.js +7 -1
- package/src/lib/canvas-header.js.map +1 -1
- package/src/lib/canvas-header.mjs +7 -1
- package/src/lib/canvas-header.mjs.map +1 -1
- package/src/lib/choice-commands.d.mts +2 -1
- package/src/lib/choice-commands.d.ts +2 -1
- package/src/lib/choice-commands.js +3 -0
- package/src/lib/choice-commands.js.map +1 -1
- package/src/lib/choice-commands.mjs +3 -0
- package/src/lib/choice-commands.mjs.map +1 -1
- package/src/lib/chrome.js +11 -0
- package/src/lib/chrome.js.map +1 -1
- package/src/lib/chrome.mjs +11 -0
- package/src/lib/chrome.mjs.map +1 -1
- package/src/lib/date-setting.d.mts +49 -0
- package/src/lib/date-setting.d.ts +49 -0
- package/src/lib/date-setting.js +125 -0
- package/src/lib/date-setting.js.map +1 -0
- package/src/lib/date-setting.mjs +122 -0
- package/src/lib/date-setting.mjs.map +1 -0
- package/src/lib/designer.d.mts +16 -4
- package/src/lib/designer.d.ts +16 -4
- package/src/lib/designer.js +25 -2
- package/src/lib/designer.js.map +1 -1
- package/src/lib/designer.mjs +25 -2
- package/src/lib/designer.mjs.map +1 -1
- package/src/lib/group-fold.js +2 -0
- package/src/lib/group-fold.js.map +1 -1
- package/src/lib/group-fold.mjs +2 -0
- package/src/lib/group-fold.mjs.map +1 -1
- package/src/lib/head-commands.d.mts +116 -0
- package/src/lib/head-commands.d.ts +116 -0
- package/src/lib/head-commands.js +504 -0
- package/src/lib/head-commands.js.map +1 -0
- package/src/lib/head-commands.mjs +497 -0
- package/src/lib/head-commands.mjs.map +1 -0
- package/src/lib/head-parts.d.mts +15 -0
- package/src/lib/head-parts.d.ts +15 -0
- package/src/lib/head-parts.js +69 -0
- package/src/lib/head-parts.js.map +1 -0
- package/src/lib/head-parts.mjs +64 -0
- package/src/lib/head-parts.mjs.map +1 -0
- package/src/lib/head-properties.d.mts +25 -0
- package/src/lib/head-properties.d.ts +25 -0
- package/src/lib/head-properties.js +383 -0
- package/src/lib/head-properties.js.map +1 -0
- package/src/lib/head-properties.mjs +376 -0
- package/src/lib/head-properties.mjs.map +1 -0
- package/src/lib/header-commands.js +7 -0
- package/src/lib/header-commands.js.map +1 -1
- package/src/lib/header-commands.mjs +7 -0
- package/src/lib/header-commands.mjs.map +1 -1
- package/src/lib/header-properties.js +5 -1
- package/src/lib/header-properties.js.map +1 -1
- package/src/lib/header-properties.mjs +5 -1
- package/src/lib/header-properties.mjs.map +1 -1
- package/src/lib/inline-settings.js +19 -11
- package/src/lib/inline-settings.js.map +1 -1
- package/src/lib/inline-settings.mjs +19 -11
- package/src/lib/inline-settings.mjs.map +1 -1
- package/src/lib/input-commands.js +3 -2
- package/src/lib/input-commands.js.map +1 -1
- package/src/lib/input-commands.mjs +3 -2
- package/src/lib/input-commands.mjs.map +1 -1
- package/src/lib/kind-settings-choices.js +16 -7
- package/src/lib/kind-settings-choices.js.map +1 -1
- package/src/lib/kind-settings-choices.mjs +16 -7
- package/src/lib/kind-settings-choices.mjs.map +1 -1
- package/src/lib/kind-settings-inputs.js +116 -58
- package/src/lib/kind-settings-inputs.js.map +1 -1
- package/src/lib/kind-settings-inputs.mjs +116 -58
- package/src/lib/kind-settings-inputs.mjs.map +1 -1
- package/src/lib/kind-settings-picker.d.mts +4 -0
- package/src/lib/kind-settings-picker.d.ts +4 -0
- package/src/lib/kind-settings-picker.js +115 -0
- package/src/lib/kind-settings-picker.js.map +1 -0
- package/src/lib/kind-settings-picker.mjs +112 -0
- package/src/lib/kind-settings-picker.mjs.map +1 -0
- package/src/lib/kind-settings-structures.js +35 -16
- package/src/lib/kind-settings-structures.js.map +1 -1
- package/src/lib/kind-settings-structures.mjs +36 -17
- package/src/lib/kind-settings-structures.mjs.map +1 -1
- package/src/lib/kind-settings.js +47 -43
- package/src/lib/kind-settings.js.map +1 -1
- package/src/lib/kind-settings.mjs +47 -43
- package/src/lib/kind-settings.mjs.map +1 -1
- package/src/lib/layout-settings.d.mts +7 -0
- package/src/lib/layout-settings.d.ts +7 -0
- package/src/lib/layout-settings.js +15 -2
- package/src/lib/layout-settings.js.map +1 -1
- package/src/lib/layout-settings.mjs +15 -2
- package/src/lib/layout-settings.mjs.map +1 -1
- package/src/lib/list-canvas.js +18 -7
- package/src/lib/list-canvas.js.map +1 -1
- package/src/lib/list-canvas.mjs +18 -7
- package/src/lib/list-canvas.mjs.map +1 -1
- package/src/lib/list-commands.d.mts +24 -1
- package/src/lib/list-commands.d.ts +24 -1
- package/src/lib/list-commands.js +105 -2
- package/src/lib/list-commands.js.map +1 -1
- package/src/lib/list-commands.mjs +102 -1
- package/src/lib/list-commands.mjs.map +1 -1
- package/src/lib/list-properties.js +248 -28
- package/src/lib/list-properties.js.map +1 -1
- package/src/lib/list-properties.mjs +248 -28
- package/src/lib/list-properties.mjs.map +1 -1
- package/src/lib/locales/ar/head.d.mts +2 -0
- package/src/lib/locales/ar/head.d.ts +2 -0
- package/src/lib/locales/ar/head.js +97 -0
- package/src/lib/locales/ar/head.js.map +1 -0
- package/src/lib/locales/ar/head.mjs +94 -0
- package/src/lib/locales/ar/head.mjs.map +1 -0
- package/src/lib/locales/ar/index.js +4 -1
- package/src/lib/locales/ar/index.js.map +1 -1
- package/src/lib/locales/ar/index.mjs +4 -1
- package/src/lib/locales/ar/index.mjs.map +1 -1
- package/src/lib/locales/ar/inputs.d.mts +2 -0
- package/src/lib/locales/ar/inputs.d.ts +2 -0
- package/src/lib/locales/ar/inputs.js +20 -0
- package/src/lib/locales/ar/inputs.js.map +1 -0
- package/src/lib/locales/ar/inputs.mjs +17 -0
- package/src/lib/locales/ar/inputs.mjs.map +1 -0
- package/src/lib/locales/ar/list.js +31 -0
- package/src/lib/locales/ar/list.js.map +1 -1
- package/src/lib/locales/ar/list.mjs +31 -0
- package/src/lib/locales/ar/list.mjs.map +1 -1
- package/src/lib/locales/ar/panel.js +38 -0
- package/src/lib/locales/ar/panel.js.map +1 -1
- package/src/lib/locales/ar/panel.mjs +38 -0
- package/src/lib/locales/ar/panel.mjs.map +1 -1
- package/src/lib/locales/ar/questions.js +8 -0
- package/src/lib/locales/ar/questions.js.map +1 -1
- package/src/lib/locales/ar/questions.mjs +8 -0
- package/src/lib/locales/ar/questions.mjs.map +1 -1
- package/src/lib/locales/ar/refusals.js +11 -0
- package/src/lib/locales/ar/refusals.js.map +1 -1
- package/src/lib/locales/ar/refusals.mjs +11 -0
- package/src/lib/locales/ar/refusals.mjs.map +1 -1
- package/src/lib/locales/ar/work-text.d.mts +3 -0
- package/src/lib/locales/ar/work-text.d.ts +3 -0
- package/src/lib/locales/ar/work-text.js +58 -0
- package/src/lib/locales/ar/work-text.js.map +1 -0
- package/src/lib/locales/ar/work-text.mjs +55 -0
- package/src/lib/locales/ar/work-text.mjs.map +1 -0
- package/src/lib/locales/en/head.d.mts +101 -0
- package/src/lib/locales/en/head.d.ts +101 -0
- package/src/lib/locales/en/head.js +106 -0
- package/src/lib/locales/en/head.js.map +1 -0
- package/src/lib/locales/en/head.mjs +103 -0
- package/src/lib/locales/en/head.mjs.map +1 -0
- package/src/lib/locales/en/index.d.mts +237 -0
- package/src/lib/locales/en/index.d.ts +237 -0
- package/src/lib/locales/en/index.js +4 -1
- package/src/lib/locales/en/index.js.map +1 -1
- package/src/lib/locales/en/index.mjs +4 -1
- package/src/lib/locales/en/index.mjs.map +1 -1
- package/src/lib/locales/en/inputs.d.mts +26 -0
- package/src/lib/locales/en/inputs.d.ts +26 -0
- package/src/lib/locales/en/inputs.js +30 -0
- package/src/lib/locales/en/inputs.js.map +1 -0
- package/src/lib/locales/en/inputs.mjs +27 -0
- package/src/lib/locales/en/inputs.mjs.map +1 -0
- package/src/lib/locales/en/list.d.mts +48 -0
- package/src/lib/locales/en/list.d.ts +48 -0
- package/src/lib/locales/en/list.js +33 -0
- package/src/lib/locales/en/list.js.map +1 -1
- package/src/lib/locales/en/list.mjs +33 -0
- package/src/lib/locales/en/list.mjs.map +1 -1
- package/src/lib/locales/en/panel.d.mts +6 -0
- package/src/lib/locales/en/panel.d.ts +6 -0
- package/src/lib/locales/en/panel.js +3 -0
- package/src/lib/locales/en/panel.js.map +1 -1
- package/src/lib/locales/en/panel.mjs +3 -0
- package/src/lib/locales/en/panel.mjs.map +1 -1
- package/src/lib/locales/en/questions.d.mts +8 -0
- package/src/lib/locales/en/questions.d.ts +8 -0
- package/src/lib/locales/en/questions.js +9 -0
- package/src/lib/locales/en/questions.js.map +1 -1
- package/src/lib/locales/en/questions.mjs +9 -0
- package/src/lib/locales/en/questions.mjs.map +1 -1
- package/src/lib/locales/en/refusals.d.mts +11 -0
- package/src/lib/locales/en/refusals.d.ts +11 -0
- package/src/lib/locales/en/refusals.js +11 -0
- package/src/lib/locales/en/refusals.js.map +1 -1
- package/src/lib/locales/en/refusals.mjs +11 -0
- package/src/lib/locales/en/refusals.mjs.map +1 -1
- package/src/lib/locales/en/work-text.d.mts +58 -0
- package/src/lib/locales/en/work-text.d.ts +58 -0
- package/src/lib/locales/en/work-text.js +67 -0
- package/src/lib/locales/en/work-text.js.map +1 -0
- package/src/lib/locales/en/work-text.mjs +64 -0
- package/src/lib/locales/en/work-text.mjs.map +1 -0
- package/src/lib/number-box.d.mts +66 -0
- package/src/lib/number-box.d.ts +66 -0
- package/src/lib/number-box.js +153 -0
- package/src/lib/number-box.js.map +1 -0
- package/src/lib/number-box.mjs +149 -0
- package/src/lib/number-box.mjs.map +1 -0
- package/src/lib/page-json.d.mts +3 -1
- package/src/lib/page-json.d.ts +3 -1
- package/src/lib/page-json.js +5 -3
- package/src/lib/page-json.js.map +1 -1
- package/src/lib/page-json.mjs +5 -3
- package/src/lib/page-json.mjs.map +1 -1
- package/src/lib/page-tree.js +11 -1
- package/src/lib/page-tree.js.map +1 -1
- package/src/lib/page-tree.mjs +11 -1
- package/src/lib/page-tree.mjs.map +1 -1
- package/src/lib/panel-block.js +22 -6
- package/src/lib/panel-block.js.map +1 -1
- package/src/lib/panel-block.mjs +22 -6
- package/src/lib/panel-block.mjs.map +1 -1
- package/src/lib/panel-field.js +5 -1
- package/src/lib/panel-field.js.map +1 -1
- package/src/lib/panel-field.mjs +5 -1
- package/src/lib/panel-field.mjs.map +1 -1
- package/src/lib/panel-group.js +7 -3
- package/src/lib/panel-group.js.map +1 -1
- package/src/lib/panel-group.mjs +7 -3
- package/src/lib/panel-group.mjs.map +1 -1
- package/src/lib/panel-layout.js +20 -15
- package/src/lib/panel-layout.js.map +1 -1
- package/src/lib/panel-layout.mjs +20 -15
- package/src/lib/panel-layout.mjs.map +1 -1
- package/src/lib/panel-look.js +28 -14
- package/src/lib/panel-look.js.map +1 -1
- package/src/lib/panel-look.mjs +28 -14
- package/src/lib/panel-look.mjs.map +1 -1
- package/src/lib/panel-map.js +53 -20
- package/src/lib/panel-map.js.map +1 -1
- package/src/lib/panel-map.mjs +53 -20
- package/src/lib/panel-map.mjs.map +1 -1
- package/src/lib/panel-page.js +5 -1
- package/src/lib/panel-page.js.map +1 -1
- package/src/lib/panel-page.mjs +5 -1
- package/src/lib/panel-page.mjs.map +1 -1
- package/src/lib/panel-parts.js +5 -1
- package/src/lib/panel-parts.js.map +1 -1
- package/src/lib/panel-parts.mjs +5 -1
- package/src/lib/panel-parts.mjs.map +1 -1
- package/src/lib/picker-commands.d.mts +16 -0
- package/src/lib/picker-commands.d.ts +16 -0
- package/src/lib/picker-commands.js +61 -0
- package/src/lib/picker-commands.js.map +1 -0
- package/src/lib/picker-commands.mjs +58 -0
- package/src/lib/picker-commands.mjs.map +1 -0
- package/src/lib/rules-answers.d.mts +1 -1
- package/src/lib/rules-answers.d.ts +1 -1
- package/src/lib/rules-answers.js +45 -21
- package/src/lib/rules-answers.js.map +1 -1
- package/src/lib/rules-answers.mjs +45 -21
- package/src/lib/rules-answers.mjs.map +1 -1
- package/src/lib/rules-formula-box.d.mts +7 -3
- package/src/lib/rules-formula-box.d.ts +7 -3
- package/src/lib/rules-formula-box.js +26 -6
- package/src/lib/rules-formula-box.js.map +1 -1
- package/src/lib/rules-formula-box.mjs +26 -6
- package/src/lib/rules-formula-box.mjs.map +1 -1
- package/src/lib/rules-formula.js +7 -5
- package/src/lib/rules-formula.js.map +1 -1
- package/src/lib/rules-formula.mjs +8 -6
- package/src/lib/rules-formula.mjs.map +1 -1
- package/src/lib/rules-worked-out.js +66 -12
- package/src/lib/rules-worked-out.js.map +1 -1
- package/src/lib/rules-worked-out.mjs +66 -12
- package/src/lib/rules-worked-out.mjs.map +1 -1
- package/src/lib/screen-properties.js +9 -2
- package/src/lib/screen-properties.js.map +1 -1
- package/src/lib/screen-properties.mjs +9 -2
- package/src/lib/screen-properties.mjs.map +1 -1
- package/src/lib/setting-refusals.d.mts +3 -0
- package/src/lib/setting-refusals.d.ts +3 -0
- package/src/lib/setting-refusals.js +25 -0
- package/src/lib/setting-refusals.js.map +1 -0
- package/src/lib/setting-refusals.mjs +22 -0
- package/src/lib/setting-refusals.mjs.map +1 -0
- package/src/lib/styles-head.d.mts +7 -0
- package/src/lib/styles-head.d.ts +7 -0
- package/src/lib/styles-head.js +28 -0
- package/src/lib/styles-head.js.map +1 -0
- package/src/lib/styles-head.mjs +25 -0
- package/src/lib/styles-head.mjs.map +1 -0
- package/src/lib/styles.d.mts +1 -1
- package/src/lib/styles.d.ts +1 -1
- package/src/lib/styles.js +9 -2
- package/src/lib/styles.js.map +1 -1
- package/src/lib/styles.mjs +9 -2
- package/src/lib/styles.mjs.map +1 -1
- package/src/lib/table-panel.js +16 -5
- package/src/lib/table-panel.js.map +1 -1
- package/src/lib/table-panel.mjs +16 -5
- package/src/lib/table-panel.mjs.map +1 -1
- package/src/lib/work-text.d.mts +43 -0
- package/src/lib/work-text.d.ts +43 -0
- package/src/lib/work-text.js +235 -0
- package/src/lib/work-text.js.map +1 -0
- package/src/lib/work-text.mjs +227 -0
- 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":";;AAgDA,oCAuMC;AAoBD,kDA0EC;AAGD,4CAoBC;AAGD,8CAeC;AAGD,gDAYC;AA5YD,8CAAyC;AAGzC,2CAA2D;AAC3D,qDAA2C;AAC3C,mDAA6C;AAC7C,6CAA6C;AAgB7C,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,CAAC;AAE7E,6DAA6D;AAC7D,SAAS,SAAS,CAAC,QAAkB,EAAE,IAAU;IAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAoB,CAAC,CAAC,CAAC;AAChI,CAAC;AAED,0FAA0F;AAC1F,SAAS,IAAI,CAAC,EAAkB,EAAE,MAAyB,EAAE,OAA2B,EAAE,KAAa;IACrG,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;QAChC,MAAM,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AAC7C,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,EAAkB,EAAE,KAAa,EAAE,QAAgC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAAqB,CAAC;AAClM,MAAM,IAAI,GAAG,CAAC,EAAkB,EAAE,KAAa,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,KAAK,EAAE,CAAsB,CAAC;AAC5I,MAAM,IAAI,GAAG,CAAC,EAAkB,EAAE,KAAa,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,CAAqB,CAAC;AAClJ,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,eAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAEnD,+FAA+F;AAC/F,SAAgB,YAAY,CAAC,EAAkB,EAAE,QAAkB;IACjE,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9B,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAEzG,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACnG,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACvC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAC1C,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACzG,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACvF,qEAAqE;IACrE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAA,0BAAU,EAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,2DAA2D;IAC3D,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,MAAM,UAAU,GAAG,IAAA,0BAAa,EAAC,EAAE,EAAE,QAAQ,EAAE;QAC7C,KAAK,EAAE,CAAC,CAAC,UAAU;QACnB,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE;QAC/C,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,EAAE;QACP,GAAG,EAAE,GAAG;QACR,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU;QACvB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;KACnD,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3J,KAAK,MAAM,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEtF,wFAAwF;IACxF,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5C,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC1C,IAAI,WAAW,CAAC,KAAK;YAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAClF,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAC1C,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;QACzC,IAAI,UAAU,CAAC,KAAK;YAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/E,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACnG,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACpG,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IAC9C,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC3C,IAAI,YAAY,CAAC,KAAK;YAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;QACpF,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG;QACX,KAAK;QACL,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACpE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAChG,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1E,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;QACxE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QACzE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QACzE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxG,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACpG,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1F,IAAA,wBAAO,EAAC,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAClG,IAAA,wBAAO,EAAC,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;QACxF,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAChE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAChE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,6BAA6B,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;KACxF,CAAC;IACF,MAAM,CAAC,EAAE,AAAD,EAAG,QAAQ,EAAE,AAAD,EAAG,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,8FAA8F;IAC9F,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,IAAY,EAAE,GAAkB,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE;QAC9F,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,GAAe,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE;YAC7E,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACtJ,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QACF,OAAO,EAAE,CACP,KAAK,EACL,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,EAAE,EAC1C,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,IAAI,CAAC,EAChD,GAAG,GAAG,EACN,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,EAChF,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,EACrF,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAClE,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,MAAM,CAAC,IAAI;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAClD,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC;YACzB,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;YACxE,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;YACpB,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;YAChH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACzM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACnE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBAAE,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5D,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YAChM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;YAC9D,MAAM,KAAK,GAAuB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAqB,CAAC,CAAC,CAAC;YACpH,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACvC,uDAAuD;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7D,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,QAAQ,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC9F,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;gBAClC,KAAK,CAAC,eAAe,CACnB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACxB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;oBACjC,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;oBACtG,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9C,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;oBACxC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACzH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBACvC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBACrC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC3I,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzE,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC;YAC3C,UAAU,CAAC,OAAO,EAAE,CAAC;YACrB,iDAAiD;YACjD,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;YACrL,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;YAC1L,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACrH,6EAA6E;YAC7E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9I,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACvH,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAqB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrG,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAqB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3K,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAqB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtG,kGAAkG;YAClG,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvG,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;YACtK,IAAI,QAAQ,KAAK,UAAU,IAAI,IAAI;gBAAE,OAAO;YAC5C,UAAU,GAAG,QAAQ,CAAC;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC7B,OAAO,CAAC,eAAe,CACrB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACtB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;oBAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3F,MAAM,IAAI,GAAG,IAAgB,CAAC;gBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC3E,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC1F,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC3E,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAChG,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAuB,CAAC;gBACpH,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBAC3C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACpG,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvE,CAAC,CAAC,CACH,CAAC;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YACnC,UAAU,CAAC,eAAe,CACxB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAkB,EAAE,CAAC,EAAE,EAAE;gBACvC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/F,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjE,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACtE,CAAC,CAAC,CACH,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;YACvC,QAAQ,CAAC,eAAe,CACtB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACtB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;oBAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjF,MAAM,IAAI,GAAG,IAAiB,CAAC;gBAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC;gBACvI,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC;gBAC1F,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrE,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,cAAc,CAAC,IAAU;IAChC,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,KAA4B,EAAE,EAAE;QAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,KAAK;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChF,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6HAA6H;AAC7H,SAAgB,mBAAmB,CAAC,EAAkB,EAAE,QAAkB,EAAE,EAAU;IACpF,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvG,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACxG,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IAC7C,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAChH,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC/C,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,kBAAkB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/G,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACnG,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACzC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7G,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrG,MAAM,OAAO,GAAG,GAA2B,EAAE;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,MAAM,IAAI,GAAG,IAAA,oBAAQ,EAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;QACtC,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACzC,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/H,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACtI,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnI,MAAM,UAAU,GAAG,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1G,MAAM,WAAW,GAAG,CAAC,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACjL,MAAM,IAAI,GAAG;QACX,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QACpE,UAAU;QACV,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,sCAAsC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,kBAAkB,EAAE,CAAC;QACxG,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpG,GAAG,WAAW;KACf,CAAC;IACF,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,OAAO;QACL,IAAI;QACJ,MAAM,CAAC,IAAI;YACT,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;YACzB,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,KAAK,GAAuB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAqB,CAAC,CAAC,CAAC;YACpH,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACzC,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;YAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAChF,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAqB,CAAC,CAAC,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5J,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;gBAAE,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;YAC3E,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,kBAAkB,KAAK,IAAI,CAAC;YACrD,KAAK,MAAM,GAAG,IAAI,WAAW;gBAAE,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;YACjE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC7H,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAAE,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YAChE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAC9C,IAAI,GAAG,KAAK,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC;gBAAE,OAAO;YACrF,KAAK,GAAG,GAAG,CAAC;YACZ,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC;YACrB,QAAQ,CAAC,eAAe,CACtB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACtB,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC1E,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;gBAClG,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClK,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACvC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACxC,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBACzJ,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3H,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3F,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,SAAgB,gBAAgB,CAAC,EAAkB,EAAE,QAAkB,EAAE,EAAU;IACjF,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACzC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpG,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACpC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACjG,MAAM,IAAI,GAAG,CAAC,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACrO,OAAO;QACL,IAAI;QACJ,MAAM,CAAC,IAAI;YACT,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;YACnC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAqB,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAClH,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC;YACzC,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3J,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAqB,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACpH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,SAAgB,iBAAiB,CAAC,EAAkB,EAAE,QAAkB,EAAE,EAAU;IAClF,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACpF,MAAM,GAAG,GAAG,IAAA,wBAAO,EAAC,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3G,OAAO;QACL,IAAI,EAAE,CAAC,GAAG,CAAC;QACX,MAAM,CAAC,IAAI;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAK,IAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAC9I,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;YACrB,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,SAAgB,kBAAkB,CAAC,EAAkB,EAAE,QAAkB,EAAE,EAAU;IACnF,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,0BAA0B,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/H,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,IAAA,wBAAO,EAAC,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/G,OAAO;QACL,IAAI,EAAE,CAAC,GAAG,CAAC;QACX,MAAM,CAAC,IAAI;YACT,MAAM,IAAI,GAAG,IAAA,oBAAQ,EAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;YACtC,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7F,CAAC;KACF,CAAC;AACJ,CAAC"}
|