gg-wf-scripts 6.2.0 → 7.0.1
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/dist/action-engine.d.ts +4 -0
- package/dist/action-engine.js +35 -32
- package/dist/action-engine.js.map +1 -1
- package/dist/attrs.d.ts +2 -1
- package/dist/attrs.js +2 -1
- package/dist/attrs.js.map +1 -1
- package/dist/data-engine.d.ts +2 -0
- package/dist/data-engine.js +92 -49
- package/dist/data-engine.js.map +1 -1
- package/dist/engine-deps.d.ts +2 -2
- package/dist/form-action-engine.js +20 -4
- package/dist/form-action-engine.js.map +1 -1
- package/dist/helpers/run-handler.d.ts +2 -10
- package/dist/helpers/run-handler.js +16 -10
- package/dist/helpers/run-handler.js.map +1 -1
- package/dist/index.d.ts +9 -14
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/queries.d.ts +4 -0
- package/dist/query-params.d.ts +0 -3
- package/dist/query-params.js +9 -6
- package/dist/query-params.js.map +1 -1
- package/package.json +1 -1
- package/dist/helpers/run-with-loading.d.ts +0 -6
- package/dist/helpers/run-with-loading.js +0 -28
- package/dist/helpers/run-with-loading.js.map +0 -1
package/dist/action-engine.d.ts
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
import type { ActionEngineDeps } from "./engine-deps.js";
|
|
2
|
+
import type { ActionResult } from "./actions.js";
|
|
3
|
+
type ActionData = Record<string, unknown>;
|
|
4
|
+
export declare function executeAction<TContext>(id: string, data: ActionData, deps: ActionEngineDeps<TContext>, trigger?: Element): Promise<ActionResult>;
|
|
2
5
|
export declare function initActionEngine<TContext>(deps: ActionEngineDeps<TContext>): () => void;
|
|
6
|
+
export {};
|
package/dist/action-engine.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ATTR, SEL } from "./attrs.js";
|
|
2
2
|
import { runHandler } from "./helpers/run-handler.js";
|
|
3
|
-
import { runWithLoading } from "./helpers/run-with-loading.js";
|
|
4
3
|
import { getParams } from "./query-params.js";
|
|
5
4
|
function parseActionData(el) {
|
|
6
5
|
const attr = el.getAttribute(ATTR.actionData);
|
|
@@ -26,23 +25,46 @@ function findRecord(el) {
|
|
|
26
25
|
}
|
|
27
26
|
return null;
|
|
28
27
|
}
|
|
28
|
+
export async function executeAction(id, data, deps, trigger) {
|
|
29
|
+
const params = getParams();
|
|
30
|
+
const fields = {
|
|
31
|
+
data,
|
|
32
|
+
params: Object.fromEntries(params),
|
|
33
|
+
};
|
|
34
|
+
if (trigger)
|
|
35
|
+
fields.trigger = trigger;
|
|
36
|
+
const action = deps.actions[id];
|
|
37
|
+
if (!action) {
|
|
38
|
+
const error = new Error(`no action registered for "${id}"`);
|
|
39
|
+
console.warn(`[gg-action] no action registered for "${id}"`);
|
|
40
|
+
deps.emitError({ prefix: "[gg-action]", id, error, fields });
|
|
41
|
+
return { ok: false, error };
|
|
42
|
+
}
|
|
43
|
+
const result = await runHandler({
|
|
44
|
+
prefix: "[gg-action]",
|
|
45
|
+
id,
|
|
46
|
+
fields,
|
|
47
|
+
debug: deps.debug,
|
|
48
|
+
emitError: deps.emitError,
|
|
49
|
+
loading: trigger ? [trigger] : undefined,
|
|
50
|
+
}, () => action(deps.context, data, params));
|
|
51
|
+
if (!result.ok)
|
|
52
|
+
return { ok: false, error: result.error };
|
|
53
|
+
const failure = result.value;
|
|
54
|
+
if (failure?.ok === false) {
|
|
55
|
+
const error = failure.error ?? "unknown error";
|
|
56
|
+
console.warn(`[gg-action] "${id}" failed:`, error);
|
|
57
|
+
deps.emitError({ prefix: "[gg-action]", id, error, fields });
|
|
58
|
+
return { ok: false, error };
|
|
59
|
+
}
|
|
60
|
+
return { ok: true };
|
|
61
|
+
}
|
|
29
62
|
async function handleAction(el, deps) {
|
|
30
63
|
if (el.hasAttribute(ATTR.loading))
|
|
31
64
|
return;
|
|
32
65
|
const id = el.getAttribute(ATTR.action);
|
|
33
66
|
if (!id)
|
|
34
67
|
return;
|
|
35
|
-
const action = deps.actions[id];
|
|
36
|
-
if (!action) {
|
|
37
|
-
console.warn(`[gg-action] no action registered for "${id}"`);
|
|
38
|
-
deps.emitError({
|
|
39
|
-
prefix: "[gg-action]",
|
|
40
|
-
id,
|
|
41
|
-
error: "no action registered",
|
|
42
|
-
fields: { trigger: el },
|
|
43
|
-
});
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
68
|
if (el.hasAttribute(ATTR.confirm)) {
|
|
47
69
|
const text = el.getAttribute(ATTR.confirmText) || "Are you sure?";
|
|
48
70
|
if (!window.confirm(text))
|
|
@@ -51,26 +73,7 @@ async function handleAction(el, deps) {
|
|
|
51
73
|
const record = findRecord(el);
|
|
52
74
|
const explicit = parseActionData(el);
|
|
53
75
|
const data = record ? { ...record, ...explicit } : explicit;
|
|
54
|
-
|
|
55
|
-
const result = await runWithLoading([el], () => runHandler({
|
|
56
|
-
prefix: "[gg-action]",
|
|
57
|
-
id,
|
|
58
|
-
fields: { trigger: el, data, params: Object.fromEntries(params) },
|
|
59
|
-
debug: deps.debug,
|
|
60
|
-
emitError: deps.emitError,
|
|
61
|
-
}, () => action(deps.context, data, params)));
|
|
62
|
-
if (!result.ok)
|
|
63
|
-
return;
|
|
64
|
-
if (result.value && result.value.ok === false) {
|
|
65
|
-
const failure = result.value;
|
|
66
|
-
console.warn(`[gg-action] "${id}" failed:`, failure.error ?? "unknown error");
|
|
67
|
-
deps.emitError({
|
|
68
|
-
prefix: "[gg-action]",
|
|
69
|
-
id,
|
|
70
|
-
error: failure.error ?? "unknown error",
|
|
71
|
-
fields: { trigger: el, data },
|
|
72
|
-
});
|
|
73
|
-
}
|
|
76
|
+
await executeAction(id, data, deps, el);
|
|
74
77
|
}
|
|
75
78
|
export function initActionEngine(deps) {
|
|
76
79
|
const onClick = (e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-engine.js","sourceRoot":"","sources":["../src/action-engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"action-engine.js","sourceRoot":"","sources":["../src/action-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/attrs.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export declare const ATTR: {
|
|
|
12
12
|
readonly dataForm: "gg-data-form";
|
|
13
13
|
readonly dataOn: "gg-data-on";
|
|
14
14
|
readonly field: "gg-field";
|
|
15
|
+
readonly fieldList: "gg-field-list";
|
|
15
16
|
readonly listTemplate: "gg-list-template";
|
|
16
17
|
readonly formFieldError: "gg-form-field-error";
|
|
17
18
|
readonly formFieldInvalid: "gg-form-field-invalid";
|
|
@@ -40,8 +41,8 @@ export declare const SEL: {
|
|
|
40
41
|
readonly dataList: "[gg-data-list]";
|
|
41
42
|
readonly dataForm: "[gg-data-form]";
|
|
42
43
|
readonly dataAny: "[gg-data], [gg-data-list], [gg-data-form]";
|
|
43
|
-
readonly dataAnyOn: "[gg-data][gg-data-on], [gg-data-list][gg-data-on], [gg-data-form][gg-data-on]";
|
|
44
44
|
readonly field: "[gg-field]";
|
|
45
|
+
readonly fieldList: "[gg-field-list]";
|
|
45
46
|
readonly listTemplate: "[gg-list-template]";
|
|
46
47
|
readonly switchState: "[gg-switch-state]";
|
|
47
48
|
readonly switchField: "[gg-switch-field]";
|
package/dist/attrs.js
CHANGED
|
@@ -14,6 +14,7 @@ export const ATTR = {
|
|
|
14
14
|
dataForm: "gg-data-form",
|
|
15
15
|
dataOn: "gg-data-on",
|
|
16
16
|
field: "gg-field",
|
|
17
|
+
fieldList: "gg-field-list",
|
|
17
18
|
listTemplate: "gg-list-template",
|
|
18
19
|
// Form errors
|
|
19
20
|
formFieldError: "gg-form-field-error",
|
|
@@ -47,8 +48,8 @@ export const SEL = {
|
|
|
47
48
|
dataList: `[${ATTR.dataList}]`,
|
|
48
49
|
dataForm: `[${ATTR.dataForm}]`,
|
|
49
50
|
dataAny: `[${ATTR.data}], [${ATTR.dataList}], [${ATTR.dataForm}]`,
|
|
50
|
-
dataAnyOn: `[${ATTR.data}][${ATTR.dataOn}], [${ATTR.dataList}][${ATTR.dataOn}], [${ATTR.dataForm}][${ATTR.dataOn}]`,
|
|
51
51
|
field: `[${ATTR.field}]`,
|
|
52
|
+
fieldList: `[${ATTR.fieldList}]`,
|
|
52
53
|
listTemplate: `[${ATTR.listTemplate}]`,
|
|
53
54
|
switchState: `[${ATTR.switchState}]`,
|
|
54
55
|
switchField: `[${ATTR.switchField}]`,
|
package/dist/attrs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attrs.js","sourceRoot":"","sources":["../src/attrs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,UAAU;IACV,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,gBAAgB;IAC5B,UAAU,EAAE,gBAAgB;IAE5B,eAAe;IACf,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,UAAU;IACjB,YAAY,EAAE,kBAAkB;IAEhC,cAAc;IACd,cAAc,EAAE,qBAAqB;IACrC,gBAAgB,EAAE,uBAAuB;IACzC,SAAS,EAAE,eAAe;IAC1B,aAAa,EAAE,oBAAoB;IACnC,SAAS,EAAE,eAAe;IAE1B,WAAW;IACX,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,iBAAiB;IAC9B,IAAI,EAAE,SAAS;IAEf,aAAa;IACb,WAAW,EAAE,iBAAiB;IAE9B,aAAa;IACb,SAAS,EAAE,eAAe;IAC1B,aAAa,EAAE,mBAAmB;IAClC,QAAQ,EAAE,cAAc;IACxB,WAAW,EAAE,iBAAiB;IAE9B,SAAS;IACT,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,WAAW,EAAE,iBAAiB;IAC9B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG;IAC1B,UAAU,EAAE,QAAQ,IAAI,CAAC,UAAU,GAAG;IACtC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG;IACtB,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,GAAG;IAC9B,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,GAAG;IAC9B,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,GAAG;IACjE,
|
|
1
|
+
{"version":3,"file":"attrs.js","sourceRoot":"","sources":["../src/attrs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,UAAU;IACV,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,gBAAgB;IAC5B,UAAU,EAAE,gBAAgB;IAE5B,eAAe;IACf,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,UAAU;IACjB,SAAS,EAAE,eAAe;IAC1B,YAAY,EAAE,kBAAkB;IAEhC,cAAc;IACd,cAAc,EAAE,qBAAqB;IACrC,gBAAgB,EAAE,uBAAuB;IACzC,SAAS,EAAE,eAAe;IAC1B,aAAa,EAAE,oBAAoB;IACnC,SAAS,EAAE,eAAe;IAE1B,WAAW;IACX,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,iBAAiB;IAC9B,IAAI,EAAE,SAAS;IAEf,aAAa;IACb,WAAW,EAAE,iBAAiB;IAE9B,aAAa;IACb,SAAS,EAAE,eAAe;IAC1B,aAAa,EAAE,mBAAmB;IAClC,QAAQ,EAAE,cAAc;IACxB,WAAW,EAAE,iBAAiB;IAE9B,SAAS;IACT,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,WAAW,EAAE,iBAAiB;IAC9B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG;IAC1B,UAAU,EAAE,QAAQ,IAAI,CAAC,UAAU,GAAG;IACtC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG;IACtB,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,GAAG;IAC9B,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,GAAG;IAC9B,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,GAAG;IACjE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,GAAG;IACxB,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG;IAChC,YAAY,EAAE,IAAI,IAAI,CAAC,YAAY,GAAG;IACtC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,GAAG;IACpC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,GAAG;IACpC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,GAAG;IACpC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,GAAG;IACpC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG;IAChC,eAAe,EAAE,IAAI,IAAI,CAAC,SAAS,SAAS;IAC5C,gBAAgB,EAAE,IAAI,IAAI,CAAC,gBAAgB,GAAG;IAC9C,cAAc,EAAE,IAAI,IAAI,CAAC,cAAc,GAAG;IAC1C,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG;IAChC,aAAa,EAAE,IAAI,IAAI,CAAC,aAAa,GAAG;IACxC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG;IACtB,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG;CACd,CAAC"}
|
package/dist/data-engine.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import type { DataEngineDeps } from "./engine-deps.js";
|
|
2
|
+
import { type RunHandlerResult } from "./helpers/run-handler.js";
|
|
3
|
+
export declare function executeQuery<TContext>(id: string, deps: DataEngineDeps<TContext>, container?: Element): Promise<RunHandlerResult<unknown>>;
|
|
2
4
|
export declare function initDataEngine<TContext>(deps: DataEngineDeps<TContext>): () => void;
|
package/dist/data-engine.js
CHANGED
|
@@ -4,7 +4,6 @@ import { populateFields, setSwitchState, applySwitchState, } from "./helpers/dom
|
|
|
4
4
|
import { setVisibility } from "./helpers/visibility.js";
|
|
5
5
|
import { writeField } from "./helpers/form-field.js";
|
|
6
6
|
import { runHandler } from "./helpers/run-handler.js";
|
|
7
|
-
import { runWithLoading } from "./helpers/run-with-loading.js";
|
|
8
7
|
import { onElement } from "./dom-observer.js";
|
|
9
8
|
import { onQueryChanged, getParams } from "./query-params.js";
|
|
10
9
|
function applySwitchFields(root, record) {
|
|
@@ -43,37 +42,96 @@ function populateFormFields(root, record) {
|
|
|
43
42
|
writeField(root, name, getPath(record, name));
|
|
44
43
|
});
|
|
45
44
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
45
|
+
function renderListItems(container, template, items) {
|
|
46
|
+
if (template instanceof HTMLElement)
|
|
47
|
+
template.style.display = "none";
|
|
48
|
+
Array.from(container.children).forEach((child) => {
|
|
49
|
+
if (child !== template)
|
|
50
|
+
child.remove();
|
|
51
|
+
});
|
|
52
|
+
items.forEach((item) => {
|
|
53
|
+
const clone = template.cloneNode(true);
|
|
54
|
+
clone.removeAttribute(ATTR.listTemplate);
|
|
55
|
+
const record = (item ?? {});
|
|
56
|
+
if (clone instanceof HTMLButtonElement) {
|
|
57
|
+
clone.setAttribute(ATTR.querySet, `modal:view,id:${record.id}`);
|
|
58
|
+
}
|
|
59
|
+
if (record?.id != null)
|
|
60
|
+
clone.id = String(record.id);
|
|
61
|
+
clone.__ggRecord = record;
|
|
62
|
+
populateFields(clone, record);
|
|
63
|
+
applySwitchFields(clone, record);
|
|
64
|
+
populateFieldLists(clone, record);
|
|
65
|
+
container.appendChild(clone);
|
|
66
|
+
setVisibility(clone, true);
|
|
67
|
+
emitDataReady(clone, record);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function populateFieldLists(root, record) {
|
|
71
|
+
root.querySelectorAll(SEL.fieldList).forEach((el) => {
|
|
72
|
+
if (el.closest(SEL.listTemplate))
|
|
73
|
+
return;
|
|
74
|
+
const path = el.getAttribute(ATTR.fieldList);
|
|
75
|
+
if (!path)
|
|
76
|
+
return;
|
|
77
|
+
const value = getPath(record, path);
|
|
78
|
+
if (!Array.isArray(value))
|
|
79
|
+
return;
|
|
80
|
+
const template = el.querySelector(SEL.listTemplate);
|
|
81
|
+
if (!template) {
|
|
82
|
+
console.warn(`[gg-field-list] no [${ATTR.listTemplate}] inside "${path}"`);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
renderListItems(el, template, value);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
export async function executeQuery(id, deps, container) {
|
|
89
|
+
const params = getParams();
|
|
90
|
+
const fields = {
|
|
91
|
+
params: Object.fromEntries(params),
|
|
92
|
+
};
|
|
93
|
+
if (container)
|
|
94
|
+
fields.container = container;
|
|
95
|
+
const registered = deps.queries[id];
|
|
96
|
+
if (!registered) {
|
|
97
|
+
const error = new Error(`no query registered for "${id}"`);
|
|
54
98
|
console.warn(`[gg-data] no query registered for "${id}"`);
|
|
55
|
-
deps.emitError({
|
|
56
|
-
|
|
57
|
-
id,
|
|
58
|
-
error: "no query registered",
|
|
59
|
-
fields: { container },
|
|
60
|
-
});
|
|
61
|
-
return;
|
|
99
|
+
deps.emitError({ prefix: "[gg-data]", id, error, fields });
|
|
100
|
+
return { ok: false, error };
|
|
62
101
|
}
|
|
63
|
-
|
|
64
|
-
const handlerResult = await runWithLoading([container], () => runHandler({
|
|
102
|
+
return runHandler({
|
|
65
103
|
prefix: "[gg-data]",
|
|
66
104
|
id,
|
|
67
|
-
fields
|
|
105
|
+
fields,
|
|
68
106
|
debug: deps.debug,
|
|
69
107
|
emitError: deps.emitError,
|
|
70
|
-
|
|
108
|
+
loading: container ? [container] : undefined,
|
|
109
|
+
}, () => registered.handler(deps.context, params));
|
|
110
|
+
}
|
|
111
|
+
function getDataBinding(el) {
|
|
112
|
+
for (const [attr, kind] of [
|
|
113
|
+
[ATTR.dataList, "list"],
|
|
114
|
+
[ATTR.dataForm, "form"],
|
|
115
|
+
[ATTR.data, "single"],
|
|
116
|
+
]) {
|
|
117
|
+
const id = el.getAttribute(attr);
|
|
118
|
+
if (id)
|
|
119
|
+
return { id, kind };
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
async function handleQuery(container, deps) {
|
|
124
|
+
const binding = getDataBinding(container);
|
|
125
|
+
if (!binding)
|
|
126
|
+
return;
|
|
127
|
+
const { id, kind } = binding;
|
|
128
|
+
const handlerResult = await executeQuery(id, deps, container);
|
|
71
129
|
if (!handlerResult.ok)
|
|
72
130
|
return;
|
|
73
131
|
const result = handlerResult.value;
|
|
74
132
|
if (result === undefined)
|
|
75
133
|
return;
|
|
76
|
-
if (
|
|
134
|
+
if (kind === "list") {
|
|
77
135
|
if (!Array.isArray(result)) {
|
|
78
136
|
console.warn(`[gg-data-list] query "${id}" did not return an array`);
|
|
79
137
|
return;
|
|
@@ -83,29 +141,9 @@ async function runQuery(container, deps) {
|
|
|
83
141
|
console.warn(`[gg-data-list] no [${ATTR.listTemplate}] inside "${id}"`);
|
|
84
142
|
return;
|
|
85
143
|
}
|
|
86
|
-
|
|
87
|
-
template.style.display = "none";
|
|
88
|
-
Array.from(container.children).forEach((child) => {
|
|
89
|
-
if (child !== template)
|
|
90
|
-
child.remove();
|
|
91
|
-
});
|
|
92
|
-
result.forEach((record) => {
|
|
93
|
-
const clone = template.cloneNode(true);
|
|
94
|
-
clone.removeAttribute(ATTR.listTemplate);
|
|
95
|
-
if (clone instanceof HTMLButtonElement) {
|
|
96
|
-
clone.setAttribute(ATTR.querySet, `modal:view,id:${record.id}`);
|
|
97
|
-
}
|
|
98
|
-
if (record?.id != null)
|
|
99
|
-
clone.id = String(record.id);
|
|
100
|
-
clone.__ggRecord = record;
|
|
101
|
-
populateFields(clone, record);
|
|
102
|
-
applySwitchFields(clone, record);
|
|
103
|
-
container.appendChild(clone);
|
|
104
|
-
setVisibility(clone, true);
|
|
105
|
-
emitDataReady(clone, record);
|
|
106
|
-
});
|
|
144
|
+
renderListItems(container, template, result);
|
|
107
145
|
}
|
|
108
|
-
else if (
|
|
146
|
+
else if (kind === "form") {
|
|
109
147
|
if (Array.isArray(result)) {
|
|
110
148
|
console.warn(`[gg-data-form] query "${id}" returned an array; expected a single record`);
|
|
111
149
|
return;
|
|
@@ -128,6 +166,7 @@ async function runQuery(container, deps) {
|
|
|
128
166
|
container.__ggRecord = record;
|
|
129
167
|
populateFields(container, record);
|
|
130
168
|
applySwitchFields(container, record);
|
|
169
|
+
populateFieldLists(container, record);
|
|
131
170
|
emitDataReady(container, record);
|
|
132
171
|
}
|
|
133
172
|
}
|
|
@@ -137,16 +176,20 @@ export function initDataEngine(deps) {
|
|
|
137
176
|
if (seen.has(el))
|
|
138
177
|
return;
|
|
139
178
|
seen.add(el);
|
|
140
|
-
|
|
179
|
+
handleQuery(el, deps);
|
|
141
180
|
});
|
|
142
181
|
const unsubscribe = onQueryChanged((key) => {
|
|
143
|
-
document.querySelectorAll(SEL.
|
|
182
|
+
document.querySelectorAll(SEL.dataAny).forEach((c) => {
|
|
183
|
+
const binding = getDataBinding(c);
|
|
184
|
+
if (!binding)
|
|
185
|
+
return;
|
|
144
186
|
const attr = c.getAttribute(ATTR.dataOn);
|
|
145
|
-
|
|
187
|
+
const keys = attr
|
|
188
|
+
? attr.split(",").map((s) => s.trim())
|
|
189
|
+
: deps.queries[binding.id]?.on;
|
|
190
|
+
if (!keys?.includes(key))
|
|
146
191
|
return;
|
|
147
|
-
|
|
148
|
-
if (keys.includes(key))
|
|
149
|
-
runQuery(c, deps);
|
|
192
|
+
handleQuery(c, deps);
|
|
150
193
|
});
|
|
151
194
|
});
|
|
152
195
|
return () => {
|
package/dist/data-engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-engine.js","sourceRoot":"","sources":["../src/data-engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EACL,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"data-engine.js","sourceRoot":"","sources":["../src/data-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/engine-deps.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { GgErrorEvent } from "./errors.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { RegisteredQuery } from "./queries.js";
|
|
3
3
|
import type { Action } from "./actions.js";
|
|
4
4
|
import type { FormAction } from "./form-actions.js";
|
|
5
5
|
/**
|
|
@@ -13,7 +13,7 @@ export type EngineCore<TContext> = {
|
|
|
13
13
|
emitError: (event: GgErrorEvent) => void;
|
|
14
14
|
};
|
|
15
15
|
export type DataEngineDeps<TContext> = EngineCore<TContext> & {
|
|
16
|
-
queries: Record<string,
|
|
16
|
+
queries: Record<string, RegisteredQuery<TContext>>;
|
|
17
17
|
};
|
|
18
18
|
export type ActionEngineDeps<TContext> = EngineCore<TContext> & {
|
|
19
19
|
actions: Record<string, Action<TContext>>;
|
|
@@ -2,7 +2,6 @@ import { ATTR, SEL } from "./attrs.js";
|
|
|
2
2
|
import { populateFields } from "./helpers/dom.js";
|
|
3
3
|
import { findInputs } from "./helpers/form-field.js";
|
|
4
4
|
import { runHandler } from "./helpers/run-handler.js";
|
|
5
|
-
import { runWithLoading } from "./helpers/run-with-loading.js";
|
|
6
5
|
import { onElement } from "./dom-observer.js";
|
|
7
6
|
import { getParams } from "./query-params.js";
|
|
8
7
|
function clearFieldError(form, name) {
|
|
@@ -73,6 +72,22 @@ function applyFormError(form, error) {
|
|
|
73
72
|
el.textContent = message;
|
|
74
73
|
});
|
|
75
74
|
}
|
|
75
|
+
function formDataToObject(formData) {
|
|
76
|
+
const out = {};
|
|
77
|
+
for (const [key, value] of formData) {
|
|
78
|
+
if (key in out) {
|
|
79
|
+
const existing = out[key];
|
|
80
|
+
if (Array.isArray(existing))
|
|
81
|
+
existing.push(value);
|
|
82
|
+
else
|
|
83
|
+
out[key] = [existing, value];
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
out[key] = value;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
76
91
|
function collectShadowFields(root, formData) {
|
|
77
92
|
root.querySelectorAll("*").forEach((el) => {
|
|
78
93
|
if (!el.shadowRoot)
|
|
@@ -146,17 +161,18 @@ async function handleSubmit(form, event, deps) {
|
|
|
146
161
|
collectShadowFields(form, formData);
|
|
147
162
|
const params = getParams();
|
|
148
163
|
const submitControls = form.querySelectorAll('button[type="submit"], button:not([type]), input[type="submit"]');
|
|
149
|
-
const handlerResult = await
|
|
164
|
+
const handlerResult = await runHandler({
|
|
150
165
|
prefix: "[gg-form-action]",
|
|
151
166
|
id,
|
|
152
167
|
fields: {
|
|
153
168
|
form,
|
|
154
|
-
formData:
|
|
169
|
+
formData: formDataToObject(formData),
|
|
155
170
|
params: Object.fromEntries(params),
|
|
156
171
|
},
|
|
157
172
|
debug: deps.debug,
|
|
158
173
|
emitError: deps.emitError,
|
|
159
|
-
|
|
174
|
+
loading: [form, ...submitControls],
|
|
175
|
+
}, () => action(deps.context, formData, params));
|
|
160
176
|
if (!handlerResult.ok) {
|
|
161
177
|
applyFormError(form, "Something went wrong. Please try again.");
|
|
162
178
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-action-engine.js","sourceRoot":"","sources":["../src/form-action-engine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"form-action-engine.js","sourceRoot":"","sources":["../src/form-action-engine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,SAAS,eAAe,CAAC,IAAqB,EAAE,IAAY;IAC1D,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACpC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI;SACD,gBAAgB,CAAC,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,IAAI,CAAC;SACzD,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACd,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,eAAe,CAAC,IAAqB;IAC5C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACzD,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACvD,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAClD,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1C,IAAI,KAAK,KAAK,QAAQ;gBAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAqB,EACrB,WAA6B;IAE7B,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACpC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI;aACD,gBAAgB,CAAC,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,IAAI,CAAC;aACzD,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACd,EAAE,CAAC,WAAW,GAAG,OAAO,IAAI,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,IAAqB,EACrB,WAA6B;IAE7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CACV,IAAI,IAAI,CAAC,aAAa,SAAS,IAAI,CAAC,YAAY,gBAAgB,EAChE,IAAI,CACL,CAAC;YACF,OAAO;QACT,CAAC;QACD,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAgB,CAAC;YACtD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;YACzB,cAAc,CAAC,KAAK,EAAE,MAA4C,CAAC,CAAC;YACpE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,IAAqB,EAAE,KAAc;IAC3D,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO;IAC1B,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAClD,EAAE,CAAC,WAAW,GAAG,OAAO,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CACvB,QAAkB;IAElB,MAAM,GAAG,GAA8D,EAAE,CAAC;IAC1E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;QACpC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;gBAC7C,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAA8B,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAgB,EAAE,QAAkB;IAC/D,IAAI,CAAC,gBAAgB,CAAc,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC,EAAE,CAAC,UAAU;YAAE,OAAO;QAC3B,EAAE,CAAC,UAAU;aACV,gBAAgB,CAEf,2CAA2C,CAAC;aAC7C,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,IACE,KAAK,YAAY,gBAAgB;gBACjC,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;gBACrD,CAAC,KAAK,CAAC,OAAO,EACd,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,KAAK,YAAY,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC/D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;oBACrC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACpC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,KAAK,YAAY,iBAAiB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACzD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAChD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBACzC,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACL,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAqB;IAClD,IAAI,IAAI,CAAC,kBAAkB;QAAE,OAAO;IACpC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,CAAC,MAAM,YAAY,OAAO,CAAC;YAAE,OAAO;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC/C,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,IAAqB,EACrB,KAAY,EACZ,IAAoC;IAEpC,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE;QAAE,OAAO;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,CAAC;YACb,MAAM,EAAE,kBAAkB;YAC1B,EAAE;YACF,KAAK,EAAE,2BAA2B;YAClC,MAAM,EAAE,EAAE,IAAI,EAAE;SACjB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO;IAE5C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO;IACpC,CAAC;IAED,eAAe,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAC1C,iEAAiE,CAClE,CAAC;IAEF,MAAM,aAAa,GAAG,MAAM,UAAU,CACpC;QACE,MAAM,EAAE,kBAAkB;QAC1B,EAAE;QACF,MAAM,EAAE;YACN,IAAI;YACJ,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC;YACpC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;SACnC;QACD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC;KACnC,EACD,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAC7C,CAAC;IAEF,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;QACtB,cAAc,CAAC,IAAI,EAAE,yCAAyC,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;IACnC,IAAI,MAAM,IAAK,MAA2B,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,MAGf,CAAC;QACF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;YACrD,CAAC,CAAC,OAAO,CAAC,YAAY;YACtB,CAAC,CAAC,EAAE,CAAC;QACP,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACpC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAClC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CACV,qBAAqB,EAAE,mDAAmD,CAC3E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,SAAS,CAAC;YACb,MAAM,EAAE,kBAAkB;YAC1B,EAAE;YACF,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,YAAY;YACpC,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAoC;IAEpC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,IAAI,EAAE,YAAY,eAAe;YAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,CAAC,CAAQ,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,IACE,IAAI,YAAY,eAAe;YAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC,CAAC;YACD,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE9C,OAAO,GAAG,EAAE;QACV,MAAM,EAAE,CAAC;QACT,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -5,6 +5,7 @@ type RunHandlerOptions = {
|
|
|
5
5
|
fields: Record<string, unknown>;
|
|
6
6
|
debug: boolean;
|
|
7
7
|
emitError?: (event: GgErrorEvent) => void;
|
|
8
|
+
loading?: Iterable<Element>;
|
|
8
9
|
};
|
|
9
10
|
export type RunHandlerResult<T> = {
|
|
10
11
|
ok: true;
|
|
@@ -13,14 +14,5 @@ export type RunHandlerResult<T> = {
|
|
|
13
14
|
ok: false;
|
|
14
15
|
error: unknown;
|
|
15
16
|
};
|
|
16
|
-
|
|
17
|
-
* Run a registered handler with debug logging and errors-as-values.
|
|
18
|
-
*
|
|
19
|
-
* Catches throws so engine code can branch on a result instead of try/catch.
|
|
20
|
-
* On success, returns { ok: true, value } where value is whatever the handler
|
|
21
|
-
* returned. On throw, returns { ok: false, error }, logs the error, and emits
|
|
22
|
-
* a GgErrorEvent so consumers subscribed via app.onError() can ship it to
|
|
23
|
-
* their error tracker.
|
|
24
|
-
*/
|
|
25
|
-
export declare function runHandler<T>({ prefix, id, fields, debug, emitError }: RunHandlerOptions, fn: () => Promise<T> | T): Promise<RunHandlerResult<T>>;
|
|
17
|
+
export declare function runHandler<T>({ prefix, id, fields, debug, emitError, loading }: RunHandlerOptions, fn: () => Promise<T> | T): Promise<RunHandlerResult<T>>;
|
|
26
18
|
export {};
|
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
* Run a registered handler with debug logging and errors-as-values.
|
|
3
|
-
*
|
|
4
|
-
* Catches throws so engine code can branch on a result instead of try/catch.
|
|
5
|
-
* On success, returns { ok: true, value } where value is whatever the handler
|
|
6
|
-
* returned. On throw, returns { ok: false, error }, logs the error, and emits
|
|
7
|
-
* a GgErrorEvent so consumers subscribed via app.onError() can ship it to
|
|
8
|
-
* their error tracker.
|
|
9
|
-
*/
|
|
10
|
-
export async function runHandler({ prefix, id, fields, debug, emitError }, fn) {
|
|
1
|
+
export async function runHandler({ prefix, id, fields, debug, emitError, loading }, fn) {
|
|
11
2
|
if (debug) {
|
|
12
3
|
console.groupCollapsed(`${prefix} "${id}"`);
|
|
13
4
|
for (const [key, value] of Object.entries(fields)) {
|
|
14
5
|
console.log(`${key}:`, value);
|
|
15
6
|
}
|
|
16
7
|
}
|
|
8
|
+
const targets = loading ? [...loading] : [];
|
|
9
|
+
targets.forEach(applyLoading);
|
|
17
10
|
const startedAt = debug ? performance.now() : 0;
|
|
18
11
|
try {
|
|
19
12
|
const value = await fn();
|
|
@@ -29,8 +22,21 @@ export async function runHandler({ prefix, id, fields, debug, emitError }, fn) {
|
|
|
29
22
|
return { ok: false, error };
|
|
30
23
|
}
|
|
31
24
|
finally {
|
|
25
|
+
targets.forEach(clearLoading);
|
|
32
26
|
if (debug)
|
|
33
27
|
console.groupEnd();
|
|
34
28
|
}
|
|
35
29
|
}
|
|
30
|
+
function applyLoading(el) {
|
|
31
|
+
el.setAttribute("gg-loading", "true");
|
|
32
|
+
if (el instanceof HTMLButtonElement || el instanceof HTMLInputElement) {
|
|
33
|
+
el.disabled = true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function clearLoading(el) {
|
|
37
|
+
el.removeAttribute("gg-loading");
|
|
38
|
+
if (el instanceof HTMLButtonElement || el instanceof HTMLInputElement) {
|
|
39
|
+
el.disabled = false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
36
42
|
//# sourceMappingURL=run-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-handler.js","sourceRoot":"","sources":["../../src/helpers/run-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-handler.js","sourceRoot":"","sources":["../../src/helpers/run-handler.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAqB,EACpE,EAAwB;IAExB,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,EAAE,CAAC;QACzB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QACjD,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9B,IAAI,KAAK;YAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAW;IAC/B,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,EAAE,YAAY,iBAAiB,IAAI,EAAE,YAAY,gBAAgB,EAAE,CAAC;QACtE,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAW;IAC/B,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACjC,IAAI,EAAE,YAAY,iBAAiB,IAAI,EAAE,YAAY,gBAAgB,EAAE,CAAC;QACtE,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;IACtB,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Query } from "./queries.js";
|
|
2
|
-
import type { Action } from "./actions.js";
|
|
1
|
+
import type { Query, RegisteredQuery } from "./queries.js";
|
|
2
|
+
import type { Action, ActionResult } from "./actions.js";
|
|
3
3
|
import type { FormAction } from "./form-actions.js";
|
|
4
4
|
import { setQueryParams, removeQueryParams } from "./query-params.js";
|
|
5
5
|
import { type AuthAdapter } from "./auth.js";
|
|
@@ -8,7 +8,7 @@ import { type ErrorHandler } from "./errors.js";
|
|
|
8
8
|
export { setQueryParams, removeQueryParams };
|
|
9
9
|
export { getPath } from "./helpers/path.js";
|
|
10
10
|
export type { AuthAdapter } from "./auth.js";
|
|
11
|
-
export type { Query } from "./queries.js";
|
|
11
|
+
export type { Query, RegisteredQuery } from "./queries.js";
|
|
12
12
|
export type { Action, ActionResult } from "./actions.js";
|
|
13
13
|
export type { FormAction, FormActionResult, FormFieldError } from "./form-actions.js";
|
|
14
14
|
export type { GgErrorEvent, ErrorHandler } from "./errors.js";
|
|
@@ -49,21 +49,16 @@ export type InitOptions<TContext = unknown> = {
|
|
|
49
49
|
export type App<TContext = unknown> = {
|
|
50
50
|
context: TContext;
|
|
51
51
|
debug: boolean;
|
|
52
|
-
queries: Record<string,
|
|
52
|
+
queries: Record<string, RegisteredQuery<TContext>>;
|
|
53
53
|
actions: Record<string, Action<TContext>>;
|
|
54
54
|
formActions: Record<string, FormAction<TContext>>;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
* handler's return value.
|
|
59
|
-
*/
|
|
60
|
-
addQuery: <TResult = unknown>(id: string, fn: Query<TContext, TResult>) => void;
|
|
61
|
-
/**
|
|
62
|
-
* Register an action. Optionally pin the data shape:
|
|
63
|
-
* `app.addAction<{ id: string }>("posts.delete", ...)`.
|
|
64
|
-
*/
|
|
55
|
+
addQuery: <TResult = unknown>(id: string, fn: Query<TContext, TResult>, opts?: {
|
|
56
|
+
on?: string[];
|
|
57
|
+
}) => void;
|
|
65
58
|
addAction: <TData extends Record<string, unknown> = Record<string, unknown>>(id: string, fn: Action<TContext, TData>) => void;
|
|
66
59
|
addFormAction: (id: string, fn: FormAction<TContext>) => void;
|
|
60
|
+
runQuery: <TResult = unknown>(id: string) => Promise<TResult>;
|
|
61
|
+
runAction: <TData extends Record<string, unknown> = Record<string, unknown>>(id: string, data?: TData) => Promise<ActionResult>;
|
|
67
62
|
/**
|
|
68
63
|
* Subscribe to errors from any registered handler — including thrown
|
|
69
64
|
* exceptions, missing-handler lookups, and `{ ok: false }` returns. Useful
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { setQueryParams, removeQueryParams, initQueryParams } from "./query-params.js";
|
|
2
|
+
import { executeQuery } from "./data-engine.js";
|
|
3
|
+
import { executeAction } from "./action-engine.js";
|
|
2
4
|
import { initAuth } from "./auth.js";
|
|
3
5
|
import { initAuthEngine } from "./auth-engine.js";
|
|
4
6
|
import { initSwitchEngine } from "./switch-engine.js";
|
|
@@ -30,8 +32,8 @@ export function init({ context = {}, auth, debug = false, expose = true, transit
|
|
|
30
32
|
queries,
|
|
31
33
|
actions,
|
|
32
34
|
formActions,
|
|
33
|
-
addQuery: (id, fn) => {
|
|
34
|
-
queries[id] = fn;
|
|
35
|
+
addQuery: (id, fn, opts) => {
|
|
36
|
+
queries[id] = { handler: fn, on: opts?.on };
|
|
35
37
|
},
|
|
36
38
|
addAction: (id, fn) => {
|
|
37
39
|
actions[id] = fn;
|
|
@@ -39,6 +41,23 @@ export function init({ context = {}, auth, debug = false, expose = true, transit
|
|
|
39
41
|
addFormAction: (id, fn) => {
|
|
40
42
|
formActions[id] = fn;
|
|
41
43
|
},
|
|
44
|
+
runQuery: async (id) => {
|
|
45
|
+
const result = await executeQuery(id, {
|
|
46
|
+
context,
|
|
47
|
+
debug,
|
|
48
|
+
queries,
|
|
49
|
+
emitError: (e) => errorBus.emit(e),
|
|
50
|
+
});
|
|
51
|
+
if (!result.ok)
|
|
52
|
+
throw result.error;
|
|
53
|
+
return result.value;
|
|
54
|
+
},
|
|
55
|
+
runAction: (id, data = {}) => executeAction(id, data, {
|
|
56
|
+
context,
|
|
57
|
+
debug,
|
|
58
|
+
actions,
|
|
59
|
+
emitError: (e) => errorBus.emit(e),
|
|
60
|
+
}),
|
|
42
61
|
onError: (handler) => errorBus.subscribe(handler),
|
|
43
62
|
start() {
|
|
44
63
|
function run() {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAoB,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAwC,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/queries.d.ts
CHANGED
package/dist/query-params.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
type QueryChangeCallback = (key: string, value: string | null) => void;
|
|
2
|
-
/**
|
|
3
|
-
* Snapshot of the current URL query string as a URLSearchParams instance.
|
|
4
|
-
*/
|
|
5
2
|
export declare function getParams(): URLSearchParams;
|
|
6
3
|
export declare function onQueryChanged(callback: QueryChangeCallback): () => void;
|
|
7
4
|
/**
|
package/dist/query-params.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { ATTR, SEL } from "./attrs.js";
|
|
2
2
|
import { onElement } from "./dom-observer.js";
|
|
3
3
|
const subscribers = [];
|
|
4
|
-
/**
|
|
5
|
-
* Snapshot of the current URL query string as a URLSearchParams instance.
|
|
6
|
-
*/
|
|
7
4
|
export function getParams() {
|
|
8
|
-
return new
|
|
5
|
+
return new URLSearchParams(window.location.search);
|
|
9
6
|
}
|
|
10
7
|
export function onQueryChanged(callback) {
|
|
11
8
|
subscribers.push(callback);
|
|
@@ -126,8 +123,14 @@ function setupQueryBindInput(el) {
|
|
|
126
123
|
}
|
|
127
124
|
});
|
|
128
125
|
// When the URL changes from elsewhere (back button, programmatic), mirror
|
|
129
|
-
// it into the input without re-firing the input listener.
|
|
130
|
-
|
|
126
|
+
// it into the input without re-firing the input listener. Self-unsubscribe
|
|
127
|
+
// once the input is detached so the subscriber list doesn't grow unbounded
|
|
128
|
+
// across mount/unmount cycles.
|
|
129
|
+
const unsub = onQueryChanged((changedKey, value) => {
|
|
130
|
+
if (!el.isConnected) {
|
|
131
|
+
unsub();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
131
134
|
if (changedKey !== key)
|
|
132
135
|
return;
|
|
133
136
|
const next = value ?? "";
|
package/dist/query-params.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-params.js","sourceRoot":"","sources":["../src/query-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAI9C,MAAM,WAAW,GAA0B,EAAE,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"query-params.js","sourceRoot":"","sources":["../src/query-params.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Set gg-loading="true" on each element while fn runs, clearing it (in a
|
|
3
|
-
* finally block) when fn resolves or throws. Form controls (button, input)
|
|
4
|
-
* also get native `disabled` toggled.
|
|
5
|
-
*/
|
|
6
|
-
export declare function runWithLoading<T>(elements: Iterable<Element>, fn: () => Promise<T> | T): Promise<T>;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Set gg-loading="true" on each element while fn runs, clearing it (in a
|
|
3
|
-
* finally block) when fn resolves or throws. Form controls (button, input)
|
|
4
|
-
* also get native `disabled` toggled.
|
|
5
|
-
*/
|
|
6
|
-
export async function runWithLoading(elements, fn) {
|
|
7
|
-
const targets = [...elements];
|
|
8
|
-
targets.forEach(applyLoading);
|
|
9
|
-
try {
|
|
10
|
-
return await fn();
|
|
11
|
-
}
|
|
12
|
-
finally {
|
|
13
|
-
targets.forEach(clearLoading);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
function applyLoading(el) {
|
|
17
|
-
el.setAttribute("gg-loading", "true");
|
|
18
|
-
if (el instanceof HTMLButtonElement || el instanceof HTMLInputElement) {
|
|
19
|
-
el.disabled = true;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function clearLoading(el) {
|
|
23
|
-
el.removeAttribute("gg-loading");
|
|
24
|
-
if (el instanceof HTMLButtonElement || el instanceof HTMLInputElement) {
|
|
25
|
-
el.disabled = false;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=run-with-loading.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-with-loading.js","sourceRoot":"","sources":["../../src/helpers/run-with-loading.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAA2B,EAC3B,EAAwB;IAExB,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC9B,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAW;IAC/B,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,EAAE,YAAY,iBAAiB,IAAI,EAAE,YAAY,gBAAgB,EAAE,CAAC;QACtE,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAW;IAC/B,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACjC,IAAI,EAAE,YAAY,iBAAiB,IAAI,EAAE,YAAY,gBAAgB,EAAE,CAAC;QACtE,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;IACtB,CAAC;AACH,CAAC"}
|