@aquera/mcp-ui-render 0.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.
Files changed (42) hide show
  1. package/CHANGELOG.md +437 -0
  2. package/CONFIGURATION.md +178 -0
  3. package/LICENSE +21 -0
  4. package/README.md +237 -0
  5. package/RELEASE-NOTES.md +77 -0
  6. package/TEST-PLAN.md +72 -0
  7. package/USAGE.md +100 -0
  8. package/package.json +52 -0
  9. package/src/controls.d.ts +1 -0
  10. package/src/controls.js +572 -0
  11. package/src/controls.js.map +1 -0
  12. package/src/elements/aq-mcp-config.d.ts +289 -0
  13. package/src/elements/aq-mcp-config.js +673 -0
  14. package/src/elements/aq-mcp-config.js.map +1 -0
  15. package/src/elements/aq-mcp-field.d.ts +92 -0
  16. package/src/elements/aq-mcp-field.js +275 -0
  17. package/src/elements/aq-mcp-field.js.map +1 -0
  18. package/src/elements/aq-mcp-section.d.ts +101 -0
  19. package/src/elements/aq-mcp-section.js +261 -0
  20. package/src/elements/aq-mcp-section.js.map +1 -0
  21. package/src/engine/status.d.ts +31 -0
  22. package/src/engine/status.js +44 -0
  23. package/src/engine/status.js.map +1 -0
  24. package/src/engine/submit.d.ts +26 -0
  25. package/src/engine/submit.js +37 -0
  26. package/src/engine/submit.js.map +1 -0
  27. package/src/engine/validate.d.ts +24 -0
  28. package/src/engine/validate.js +144 -0
  29. package/src/engine/validate.js.map +1 -0
  30. package/src/engine/values.d.ts +20 -0
  31. package/src/engine/values.js +42 -0
  32. package/src/engine/values.js.map +1 -0
  33. package/src/index.d.ts +18 -0
  34. package/src/index.js +20 -0
  35. package/src/index.js.map +1 -0
  36. package/src/mcp-ui-render.css +811 -0
  37. package/src/registry.d.ts +63 -0
  38. package/src/registry.js +39 -0
  39. package/src/registry.js.map +1 -0
  40. package/src/types.d.ts +239 -0
  41. package/src/types.js +8 -0
  42. package/src/types.js.map +1 -0
@@ -0,0 +1,42 @@
1
+ export function asArray(v) {
2
+ if (v == null)
3
+ return [];
4
+ return Array.isArray(v) ? v : [v];
5
+ }
6
+ /**
7
+ * A field applies unless it declares at least one dependency condition — either
8
+ * `dependencyAttribute`/`dependencyValue` (single attribute) or `dependsOn` (a list
9
+ * of attribute/value conditions, §9.7) — and NONE of them currently match. With
10
+ * both present, or multiple `dependsOn` entries, they're OR'd together: any one
11
+ * condition matching is enough (e.g. an FTP-server picker relevant when EITHER
12
+ * `sourceConnectionType === 'directConnection'` OR `storageType === 'sftpStorage'`).
13
+ * A field with no dependency declared at all always applies (§12). Non-applying
14
+ * fields are skipped and their stored value dropped by the caller.
15
+ */
16
+ export function fieldApplies(field, values) {
17
+ const conditions = [];
18
+ if (field.dependencyAttribute)
19
+ conditions.push({ attribute: field.dependencyAttribute, value: field.dependencyValue });
20
+ if (field.dependsOn)
21
+ conditions.push(...field.dependsOn);
22
+ if (conditions.length === 0)
23
+ return true;
24
+ return conditions.some((c) => asArray(c.value).includes(String(values[c.attribute])));
25
+ }
26
+ /** Seed `defaultValue` for applied, value-bearing fields that have no value yet (§12). */
27
+ export function seedDefaults(descriptor, values) {
28
+ const out = { ...values };
29
+ for (const section of descriptor.sections ?? []) {
30
+ for (const field of section.fields ?? []) {
31
+ if (field.datatype === 'none' || field.hidden)
32
+ continue;
33
+ if (!fieldApplies(field, out))
34
+ continue;
35
+ if (out[field.attribute] === undefined && field.defaultValue !== undefined) {
36
+ out[field.attribute] = field.defaultValue;
37
+ }
38
+ }
39
+ }
40
+ return out;
41
+ }
42
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../../../../apps/mcp-ui-render/src/engine/values.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,OAAO,CAAC,CAAgC;IACtD,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IACzB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,MAAc;IACvD,MAAM,UAAU,GAAkE,EAAE,CAAC;IACrF,IAAI,KAAK,CAAC,mBAAmB;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,mBAAmB,EAAE,KAAK,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IACvH,IAAI,KAAK,CAAC,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,YAAY,CAAC,UAAsB,EAAE,MAAc;IACjE,MAAM,GAAG,GAAW,EAAE,GAAG,MAAM,EAAE,CAAC;IAClC,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM;gBAAE,SAAS;YACxD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;gBAAE,SAAS;YACxC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC3E,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
package/src/index.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @aquera/mcp-ui-render — public entry.
3
+ *
4
+ * Exports the descriptor types, the component-registry API, and the engine
5
+ * helpers, and registers the custom elements as a side effect (importing this
6
+ * module defines the `aq-mcp-*` tags and the default controls).
7
+ */
8
+ export * from './types.js';
9
+ export * from './registry.js';
10
+ export { validateField, isEmpty } from './engine/validate.js';
11
+ export { sectionStatus, type SectionStatus } from './engine/status.js';
12
+ export { collectSubmit, sectionHasEditableFields, WRITE_ONCE_UNCHANGED, type SubmitPayload } from './engine/submit.js';
13
+ export { fieldApplies, seedDefaults, asArray } from './engine/values.js';
14
+ import './controls.js';
15
+ import './elements/aq-mcp-config.js';
16
+ export { AqMcpConfig } from './elements/aq-mcp-config.js';
17
+ export { AqMcpSection } from './elements/aq-mcp-section.js';
18
+ export { AqMcpField } from './elements/aq-mcp-field.js';
package/src/index.js ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @aquera/mcp-ui-render — public entry.
3
+ *
4
+ * Exports the descriptor types, the component-registry API, and the engine
5
+ * helpers, and registers the custom elements as a side effect (importing this
6
+ * module defines the `aq-mcp-*` tags and the default controls).
7
+ */
8
+ export * from './types.js';
9
+ export * from './registry.js';
10
+ export { validateField, isEmpty } from './engine/validate.js';
11
+ export { sectionStatus } from './engine/status.js';
12
+ export { collectSubmit, sectionHasEditableFields, WRITE_ONCE_UNCHANGED } from './engine/submit.js';
13
+ export { fieldApplies, seedDefaults, asArray } from './engine/values.js';
14
+ // Side-effects: register default controls + define the custom elements.
15
+ import './controls.js';
16
+ import './elements/aq-mcp-config.js';
17
+ export { AqMcpConfig } from './elements/aq-mcp-config.js';
18
+ export { AqMcpSection } from './elements/aq-mcp-section.js';
19
+ export { AqMcpField } from './elements/aq-mcp-field.js';
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../apps/mcp-ui-render/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAsB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,oBAAoB,EAAsB,MAAM,oBAAoB,CAAC;AACvH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEzE,wEAAwE;AACxE,OAAO,eAAe,CAAC;AACvB,OAAO,6BAA6B,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC"}