gg-wf-scripts 2.8.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +15 -10
  2. package/dist/action-engine.d.ts +2 -3
  3. package/dist/action-engine.js +59 -40
  4. package/dist/action-engine.js.map +1 -1
  5. package/dist/actions.d.ts +1 -10
  6. package/dist/actions.js +1 -11
  7. package/dist/actions.js.map +1 -1
  8. package/dist/attrs.d.ts +56 -0
  9. package/dist/attrs.js +64 -0
  10. package/dist/attrs.js.map +1 -0
  11. package/dist/auth.d.ts +3 -3
  12. package/dist/auth.js +6 -5
  13. package/dist/auth.js.map +1 -1
  14. package/dist/bridges.d.ts +1 -1
  15. package/dist/bridges.js +23 -13
  16. package/dist/bridges.js.map +1 -1
  17. package/dist/data-engine.d.ts +2 -3
  18. package/dist/data-engine.js +100 -119
  19. package/dist/data-engine.js.map +1 -1
  20. package/dist/dialog.d.ts +1 -1
  21. package/dist/dialog.js +15 -11
  22. package/dist/dialog.js.map +1 -1
  23. package/dist/dom-observer.d.ts +4 -0
  24. package/dist/dom-observer.js +47 -0
  25. package/dist/dom-observer.js.map +1 -0
  26. package/dist/engine-deps.d.ts +23 -0
  27. package/dist/engine-deps.js +2 -0
  28. package/dist/engine-deps.js.map +1 -0
  29. package/dist/errors.d.ts +25 -0
  30. package/dist/errors.js +30 -0
  31. package/dist/errors.js.map +1 -0
  32. package/dist/form-action-engine.d.ts +2 -3
  33. package/dist/form-action-engine.js +90 -73
  34. package/dist/form-action-engine.js.map +1 -1
  35. package/dist/form-actions.d.ts +1 -13
  36. package/dist/form-actions.js +1 -14
  37. package/dist/form-actions.js.map +1 -1
  38. package/dist/form-visibility.d.ts +1 -1
  39. package/dist/form-visibility.js +89 -88
  40. package/dist/form-visibility.js.map +1 -1
  41. package/dist/helpers/form-field.d.ts +19 -0
  42. package/dist/helpers/form-field.js +58 -0
  43. package/dist/helpers/form-field.js.map +1 -0
  44. package/dist/helpers/run-handler.d.ts +6 -2
  45. package/dist/helpers/run-handler.js +5 -2
  46. package/dist/helpers/run-handler.js.map +1 -1
  47. package/dist/index.d.ts +46 -14
  48. package/dist/index.js +43 -17
  49. package/dist/index.js.map +1 -1
  50. package/dist/queries.d.ts +1 -10
  51. package/dist/queries.js +1 -11
  52. package/dist/queries.js.map +1 -1
  53. package/dist/query-params.d.ts +1 -1
  54. package/dist/query-params.js +40 -22
  55. package/dist/query-params.js.map +1 -1
  56. package/dist/switch-engine.d.ts +1 -1
  57. package/dist/switch-engine.js +16 -9
  58. package/dist/switch-engine.js.map +1 -1
  59. package/package.json +8 -3
package/README.md CHANGED
@@ -88,22 +88,27 @@ Display data from your queries in the DOM.
88
88
 
89
89
  #### Passing data to web components / React
90
90
 
91
- For elements that manage their own DOM (custom elements wrapping React, Lit, etc.), use `gg-data-key` to receive a JSON-serialized value as a `gg-data-value` attribute. The component listens for attribute changes and updates its own state.
91
+ For elements that manage their own DOM (custom elements wrapping React, Lit, etc.), pull the record from the container's `__ggRecord` property after each query run. Every `gg-data`, `gg-data-form`, and cloned `gg-data-list` row exposes the record this way, and the engine dispatches a `gg-data-ready` CustomEvent on the same element with `detail.record` once it's set.
92
92
 
93
93
  ```html
94
- <div gg-data="post_form">
95
- <!-- record.schools is e.g. [{ id, name }, ...] -->
96
- <my-select gg-data-key="schools"></my-select>
97
- </div>
94
+ <form gg-data-form="post_form">
95
+ <input name="title" />
96
+ <my-select name="school_id"></my-select>
97
+ </form>
98
98
  ```
99
99
 
100
- After the query runs, the engine resolves the dot-path against the record and writes the result:
101
-
102
- ```html
103
- <my-select gg-data-key="schools" gg-data-value='[{"id":1,"name":"Acme"}]'></my-select>
100
+ ```js
101
+ // Inside <my-select> — read the parent record once it's ready.
102
+ const form = host.closest("form");
103
+ form.addEventListener("gg-data-ready", (e) => {
104
+ const record = e.detail.record;
105
+ // hydrate from record[host.getAttribute("name")] or whatever path makes sense
106
+ });
107
+ // Already populated? Read it directly:
108
+ if (form.__ggRecord) hydrate(form.__ggRecord);
104
109
  ```
105
110
 
106
- The lookup pierces shadow roots, so the marker can live inside a component's shadow DOM. Leaving `gg-data-key=""` passes the entire record. Note: if the component renders after the query runs, it won't be found re-run the query (e.g. via `gg-data-on`) once the component has mounted, or have the component pull from `host.__ggRecord` on connect.
111
+ The event bubbles, so each form/container's events are scoped to that subtree listeners attached to one form never fire for another. From inside a shadow root, walk out via `getRootNode().host` before calling `closest("form")`.
107
112
 
108
113
  #### Re-running on URL changes
109
114
 
@@ -1,3 +1,2 @@
1
- export declare function initActionEngine(context: unknown, { debug }?: {
2
- debug?: boolean;
3
- }): void;
1
+ import type { ActionEngineDeps } from "./engine-deps.js";
2
+ export declare function initActionEngine<TContext>(deps: ActionEngineDeps<TContext>): () => void;
@@ -1,9 +1,9 @@
1
- import { actionRegistry } from "./actions.js";
1
+ import { ATTR, SEL } from "./attrs.js";
2
2
  import { runHandler } from "./helpers/run-handler.js";
3
3
  import { runWithLoading } from "./helpers/run-with-loading.js";
4
4
  import { getParams } from "./query-params.js";
5
5
  function parseActionData(el) {
6
- const attr = el.getAttribute("gg-action-data");
6
+ const attr = el.getAttribute(ATTR.actionData);
7
7
  if (!attr)
8
8
  return {};
9
9
  const data = {};
@@ -26,53 +26,72 @@ function findRecord(el) {
26
26
  }
27
27
  return null;
28
28
  }
29
- export function initActionEngine(context, { debug = false } = {}) {
30
- async function handleAction(el) {
31
- if (el.hasAttribute("gg-loading"))
32
- return;
33
- const id = el.getAttribute("gg-action");
34
- if (!id)
35
- return;
36
- const action = actionRegistry[id];
37
- if (!action) {
38
- console.warn(`[gg-action] no action registered for "${id}"`);
39
- return;
40
- }
41
- if (el.hasAttribute("gg-confirm")) {
42
- const text = el.getAttribute("gg-confirm-text") || "Are you sure?";
43
- if (!window.confirm(text))
44
- return;
45
- }
46
- const record = findRecord(el);
47
- const explicit = parseActionData(el);
48
- const data = record ? { ...record, ...explicit } : explicit;
49
- const params = getParams();
50
- const result = await runWithLoading([el], () => runHandler({
29
+ async function handleAction(el, deps) {
30
+ if (el.hasAttribute(ATTR.loading))
31
+ return;
32
+ const id = el.getAttribute(ATTR.action);
33
+ if (!id)
34
+ return;
35
+ const action = deps.actions[id];
36
+ if (!action) {
37
+ console.warn(`[gg-action] no action registered for "${id}"`);
38
+ deps.emitError({
51
39
  prefix: "[gg-action]",
52
40
  id,
53
- fields: { trigger: el, data, params: Object.fromEntries(params) },
54
- debug,
55
- }, () => action(context, data, params)));
56
- if (!result.ok)
41
+ error: "no action registered",
42
+ fields: { trigger: el },
43
+ });
44
+ return;
45
+ }
46
+ if (el.hasAttribute(ATTR.confirm)) {
47
+ const text = el.getAttribute(ATTR.confirmText) || "Are you sure?";
48
+ if (!window.confirm(text))
57
49
  return;
58
- if (result.value && result.value.ok === false) {
59
- const failure = result.value;
60
- console.warn(`[gg-action] "${id}" failed:`, failure.error ?? "unknown error");
61
- }
62
50
  }
63
- document.addEventListener("click", (e) => {
51
+ const record = findRecord(el);
52
+ const explicit = parseActionData(el);
53
+ const data = record ? { ...record, ...explicit } : explicit;
54
+ const params = getParams();
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
+ }
74
+ }
75
+ export function initActionEngine(deps) {
76
+ const onClick = (e) => {
64
77
  const target = e.target;
65
78
  if (!(target instanceof Element))
66
79
  return;
67
- const trigger = target.closest("[gg-action]");
80
+ const trigger = target.closest(SEL.action);
68
81
  if (trigger)
69
- handleAction(trigger);
70
- });
71
- document.addEventListener("gg:shadow:click", (e) => {
82
+ handleAction(trigger, deps);
83
+ };
84
+ const onShadowClick = (e) => {
72
85
  const detail = e.detail;
73
- const trigger = detail?.target?.closest?.("[gg-action]");
86
+ const trigger = detail?.target?.closest?.(SEL.action);
74
87
  if (trigger)
75
- handleAction(trigger);
76
- });
88
+ handleAction(trigger, deps);
89
+ };
90
+ document.addEventListener("click", onClick);
91
+ document.addEventListener("gg:shadow:click", onShadowClick);
92
+ return () => {
93
+ document.removeEventListener("click", onClick);
94
+ document.removeEventListener("gg:shadow:click", onShadowClick);
95
+ };
77
96
  }
78
97
  //# sourceMappingURL=action-engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-engine.js","sourceRoot":"","sources":["../src/action-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action-engine.js","sourceRoot":"","sources":["../src/action-engine.ts"],"names":[],"mappings":"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"}
package/dist/actions.d.ts CHANGED
@@ -2,13 +2,4 @@ export type ActionResult = {
2
2
  ok: boolean;
3
3
  error?: unknown;
4
4
  };
5
- export type Action = (context: unknown, data: Record<string, unknown>, params: URLSearchParams) => Promise<ActionResult | void> | ActionResult | void;
6
- export declare const actionRegistry: Record<string, Action>;
7
- /**
8
- * Register an action triggered by gg-action="<id>" on click.
9
- *
10
- * Receives the context object passed to init(), a data object (merged from the nearest
11
- * gg-data record and any explicit gg-action-data attribute), and a URLSearchParams
12
- * snapshot of the current URL query string. Return { ok: true } or { ok: false, error }.
13
- */
14
- export declare function registerAction(id: string, fn: Action): void;
5
+ export type Action<TContext = unknown, TData extends Record<string, unknown> = Record<string, unknown>> = (context: TContext, data: TData, params: URLSearchParams) => Promise<ActionResult | void> | ActionResult | void;
package/dist/actions.js CHANGED
@@ -1,12 +1,2 @@
1
- export const actionRegistry = {};
2
- /**
3
- * Register an action triggered by gg-action="<id>" on click.
4
- *
5
- * Receives the context object passed to init(), a data object (merged from the nearest
6
- * gg-data record and any explicit gg-action-data attribute), and a URLSearchParams
7
- * snapshot of the current URL query string. Return { ok: true } or { ok: false, error }.
8
- */
9
- export function registerAction(id, fn) {
10
- actionRegistry[id] = fn;
11
- }
1
+ export {};
12
2
  //# sourceMappingURL=actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,cAAc,GAA2B,EAAE,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,EAAU;IACnD,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Single source of truth for every gg-* attribute the library reads or writes.
3
+ * Engines should reference these constants instead of inline string literals so
4
+ * the attribute vocabulary stays discoverable and renameable.
5
+ */
6
+ export declare const ATTR: {
7
+ readonly action: "gg-action";
8
+ readonly actionData: "gg-action-data";
9
+ readonly formAction: "gg-form-action";
10
+ readonly data: "gg-data";
11
+ readonly dataList: "gg-data-list";
12
+ readonly dataForm: "gg-data-form";
13
+ readonly dataOn: "gg-data-on";
14
+ readonly field: "gg-field";
15
+ readonly listTemplate: "gg-list-template";
16
+ readonly formFieldError: "gg-form-field-error";
17
+ readonly formFieldInvalid: "gg-form-field-invalid";
18
+ readonly formError: "gg-form-error";
19
+ readonly formErrorList: "gg-form-error-list";
20
+ readonly formScope: "gg-form-scope";
21
+ readonly switchState: "gg-switch-state";
22
+ readonly switchField: "gg-switch-field";
23
+ readonly switchQuery: "gg-switch-query";
24
+ readonly case: "gg-case";
25
+ readonly visibleWhen: "gg-visible-when";
26
+ readonly queryBind: "gg-query-bind";
27
+ readonly queryDebounce: "gg-query-debounce";
28
+ readonly querySet: "gg-query-set";
29
+ readonly queryRemove: "gg-query-remove";
30
+ readonly loading: "gg-loading";
31
+ readonly confirm: "gg-confirm";
32
+ readonly confirmText: "gg-confirm-text";
33
+ readonly auth: "gg-auth";
34
+ readonly role: "gg-role";
35
+ };
36
+ export declare const SEL: {
37
+ readonly action: "[gg-action]";
38
+ readonly formAction: "form[gg-form-action]";
39
+ readonly data: "[gg-data]";
40
+ readonly dataList: "[gg-data-list]";
41
+ readonly dataForm: "[gg-data-form]";
42
+ 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
+ readonly field: "[gg-field]";
45
+ readonly listTemplate: "[gg-list-template]";
46
+ readonly switchState: "[gg-switch-state]";
47
+ readonly switchField: "[gg-switch-field]";
48
+ readonly switchQuery: "[gg-switch-query]";
49
+ readonly visibleWhen: "[gg-visible-when]";
50
+ readonly queryBind: "[gg-query-bind]";
51
+ readonly formScopeOrForm: "[gg-form-scope], form";
52
+ readonly formFieldInvalid: "[gg-form-field-invalid]";
53
+ readonly formFieldError: "[gg-form-field-error]";
54
+ readonly formError: "[gg-form-error]";
55
+ readonly formErrorList: "[gg-form-error-list]";
56
+ };
package/dist/attrs.js ADDED
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Single source of truth for every gg-* attribute the library reads or writes.
3
+ * Engines should reference these constants instead of inline string literals so
4
+ * the attribute vocabulary stays discoverable and renameable.
5
+ */
6
+ export const ATTR = {
7
+ // Actions
8
+ action: "gg-action",
9
+ actionData: "gg-action-data",
10
+ formAction: "gg-form-action",
11
+ // Data binding
12
+ data: "gg-data",
13
+ dataList: "gg-data-list",
14
+ dataForm: "gg-data-form",
15
+ dataOn: "gg-data-on",
16
+ field: "gg-field",
17
+ listTemplate: "gg-list-template",
18
+ // Form errors
19
+ formFieldError: "gg-form-field-error",
20
+ formFieldInvalid: "gg-form-field-invalid",
21
+ formError: "gg-form-error",
22
+ formErrorList: "gg-form-error-list",
23
+ formScope: "gg-form-scope",
24
+ // Switcher
25
+ switchState: "gg-switch-state",
26
+ switchField: "gg-switch-field",
27
+ switchQuery: "gg-switch-query",
28
+ case: "gg-case",
29
+ // Visibility
30
+ visibleWhen: "gg-visible-when",
31
+ // URL params
32
+ queryBind: "gg-query-bind",
33
+ queryDebounce: "gg-query-debounce",
34
+ querySet: "gg-query-set",
35
+ queryRemove: "gg-query-remove",
36
+ // Status
37
+ loading: "gg-loading",
38
+ confirm: "gg-confirm",
39
+ confirmText: "gg-confirm-text",
40
+ auth: "gg-auth",
41
+ role: "gg-role",
42
+ };
43
+ export const SEL = {
44
+ action: `[${ATTR.action}]`,
45
+ formAction: `form[${ATTR.formAction}]`,
46
+ data: `[${ATTR.data}]`,
47
+ dataList: `[${ATTR.dataList}]`,
48
+ dataForm: `[${ATTR.dataForm}]`,
49
+ dataAny: `[${ATTR.data}], [${ATTR.dataList}], [${ATTR.dataForm}]`,
50
+ dataAnyOn: `[${ATTR.data}][${ATTR.dataOn}], [${ATTR.dataList}][${ATTR.dataOn}], [${ATTR.dataForm}][${ATTR.dataOn}]`,
51
+ field: `[${ATTR.field}]`,
52
+ listTemplate: `[${ATTR.listTemplate}]`,
53
+ switchState: `[${ATTR.switchState}]`,
54
+ switchField: `[${ATTR.switchField}]`,
55
+ switchQuery: `[${ATTR.switchQuery}]`,
56
+ visibleWhen: `[${ATTR.visibleWhen}]`,
57
+ queryBind: `[${ATTR.queryBind}]`,
58
+ formScopeOrForm: `[${ATTR.formScope}], form`,
59
+ formFieldInvalid: `[${ATTR.formFieldInvalid}]`,
60
+ formFieldError: `[${ATTR.formFieldError}]`,
61
+ formError: `[${ATTR.formError}]`,
62
+ formErrorList: `[${ATTR.formErrorList}]`,
63
+ };
64
+ //# sourceMappingURL=attrs.js.map
@@ -0,0 +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,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,GAAG;IACnH,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,GAAG;IACxB,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;CAChC,CAAC"}
package/dist/auth.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export type AuthAdapter = {
1
+ export type AuthAdapter<TContext = unknown> = {
2
2
  getUser: () => string | null | Promise<string | null>;
3
3
  onChange?: (cb: (userId: string | null) => void) => void;
4
- roleQuery?: (context: unknown, userId: string) => Promise<string | null> | string | null;
4
+ roleQuery?: (context: TContext, userId: string) => Promise<string | null> | string | null;
5
5
  };
6
- export declare function initAuth(context: unknown, auth: AuthAdapter): Promise<void>;
6
+ export declare function initAuth<TContext>(context: TContext, auth: AuthAdapter<TContext>): Promise<void>;
package/dist/auth.js CHANGED
@@ -1,20 +1,21 @@
1
+ import { ATTR } from "./attrs.js";
1
2
  export async function initAuth(context, auth) {
2
3
  const { getUser, onChange, roleQuery } = auth;
3
4
  async function applyAuthAttrs(userId) {
4
5
  const body = document.body;
5
6
  if (!userId) {
6
- body.setAttribute("gg-auth", "false");
7
- body.removeAttribute("gg-role");
7
+ body.setAttribute(ATTR.auth, "false");
8
+ body.removeAttribute(ATTR.role);
8
9
  return;
9
10
  }
10
- body.setAttribute("gg-auth", "true");
11
+ body.setAttribute(ATTR.auth, "true");
11
12
  if (roleQuery) {
12
13
  const role = await roleQuery(context, userId);
13
14
  if (role) {
14
- body.setAttribute("gg-role", role);
15
+ body.setAttribute(ATTR.role, role);
15
16
  }
16
17
  else {
17
- body.removeAttribute("gg-role");
18
+ body.removeAttribute(ATTR.role);
18
19
  }
19
20
  }
20
21
  }
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAgB,EAChB,IAAiB;IAEjB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAE9C,KAAK,UAAU,cAAc,CAAC,MAAqB;QACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC9C,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;IAC/B,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAE/B,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAWlC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAiB,EACjB,IAA2B;IAE3B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAE9C,KAAK,UAAU,cAAc,CAAC,MAAqB;QACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC9C,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;IAC/B,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAE/B,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
package/dist/bridges.d.ts CHANGED
@@ -1 +1 @@
1
- export declare function initBridges(): void;
1
+ export declare function initBridges(): () => void;
package/dist/bridges.js CHANGED
@@ -1,33 +1,43 @@
1
+ import { ATTR, SEL } from "./attrs.js";
1
2
  import { setSwitchState } from "./helpers/dom.js";
2
3
  import { onQueryChanged } from "./query-params.js";
4
+ import { onElement } from "./dom-observer.js";
3
5
  export function initBridges() {
4
6
  // ---- gg-switch-query: URL params → gg-switch-state ----
5
- // On any URL param change, mirror its value onto matching
6
- // [gg-switch-query="<key>"] elements' gg-switch-state.
7
- onQueryChanged((key, value) => {
7
+ const unsubscribeQuery = onQueryChanged((key, value) => {
8
8
  document
9
- .querySelectorAll(`[gg-switch-query="${CSS.escape(key)}"]`)
9
+ .querySelectorAll(`[${ATTR.switchQuery}="${CSS.escape(key)}"]`)
10
10
  .forEach((el) => setSwitchState(el, value));
11
11
  });
12
- // Initial-load pass: read current URL params and set state for every
13
- // [gg-switch-query] on the page, so we don't flash before the first change.
14
- const params = new URLSearchParams(window.location.search);
15
- document.querySelectorAll("[gg-switch-query]").forEach((el) => {
16
- const key = el.getAttribute("gg-switch-query");
12
+ // Apply current URL state to every [gg-switch-query] element on the page,
13
+ // including any inserted later via Webflow IX or CMS templates.
14
+ const unbindSwitch = onElement(SEL.switchQuery, (el) => {
15
+ const key = el.getAttribute(ATTR.switchQuery);
17
16
  if (!key)
18
17
  return;
18
+ const params = new URLSearchParams(window.location.search);
19
19
  setSwitchState(el, params.get(key));
20
20
  });
21
21
  // ---- webflow:emit → Webflow IX ----
22
- window.addEventListener("load", () => {
22
+ let wfHandler = null;
23
+ const onLoad = () => {
23
24
  Webflow.push(() => {
24
25
  const wfIx = Webflow.require("ix3");
25
- document.addEventListener("webflow:emit", (e) => {
26
+ wfHandler = (e) => {
26
27
  const detail = e.detail;
27
28
  if (detail?.event)
28
29
  wfIx.emit(detail.event);
29
- });
30
+ };
31
+ document.addEventListener("webflow:emit", wfHandler);
30
32
  });
31
- });
33
+ };
34
+ window.addEventListener("load", onLoad);
35
+ return () => {
36
+ unsubscribeQuery();
37
+ unbindSwitch();
38
+ window.removeEventListener("load", onLoad);
39
+ if (wfHandler)
40
+ document.removeEventListener("webflow:emit", wfHandler);
41
+ };
32
42
  }
33
43
  //# sourceMappingURL=bridges.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bridges.js","sourceRoot":"","sources":["../src/bridges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,UAAU,WAAW;IACzB,0DAA0D;IAC1D,0DAA0D;IAC1D,uDAAuD;IACvD,cAAc,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC5B,QAAQ;aACL,gBAAgB,CAAC,qBAAqB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;aAC1D,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,4EAA4E;IAC5E,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAC5D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;QACnC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAChB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,QAAQ,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;gBAC9C,MAAM,MAAM,GAAI,CAAoC,CAAC,MAAM,CAAC;gBAC5D,IAAI,MAAM,EAAE,KAAK;oBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"bridges.js","sourceRoot":"","sources":["../src/bridges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,UAAU,WAAW;IACzB,0DAA0D;IAC1D,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACrD,QAAQ;aACL,gBAAgB,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;aAC9D,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,gEAAgE;IAChE,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;QACrD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3D,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,IAAI,SAAS,GAAgC,IAAI,CAAC;IAClD,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAChB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,SAAS,GAAG,CAAC,CAAQ,EAAE,EAAE;gBACvB,MAAM,MAAM,GAAI,CAAoC,CAAC,MAAM,CAAC;gBAC5D,IAAI,MAAM,EAAE,KAAK;oBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,OAAO,GAAG,EAAE;QACV,gBAAgB,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;QACf,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,SAAS;YAAE,QAAQ,CAAC,mBAAmB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IACzE,CAAC,CAAC;AACJ,CAAC"}
@@ -1,3 +1,2 @@
1
- export declare function initDataEngine(context: unknown, { debug }?: {
2
- debug?: boolean;
3
- }): void;
1
+ import type { DataEngineDeps } from "./engine-deps.js";
2
+ export declare function initDataEngine<TContext>(deps: DataEngineDeps<TContext>): () => void;