jsgui3-server 0.0.149 → 0.0.150

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 (98) hide show
  1. package/.github/agents/Mobile Developer.agent.md +89 -0
  2. package/AGENTS.md +4 -0
  3. package/README.md +130 -0
  4. package/admin-ui/client.js +73 -43
  5. package/admin-ui/v1/admin_auth_service.js +197 -0
  6. package/admin-ui/v1/admin_user_store.js +71 -0
  7. package/admin-ui/v1/client.js +17 -0
  8. package/admin-ui/v1/controls/admin_shell.js +1399 -0
  9. package/admin-ui/v1/controls/group_box.js +84 -0
  10. package/admin-ui/v1/controls/stat_card.js +125 -0
  11. package/admin-ui/v1/server.js +658 -0
  12. package/admin-ui/v1/utils/formatters.js +68 -0
  13. package/docs/admin-extension-guide.md +345 -0
  14. package/docs/books/adaptive-control-improvements/01-control-candidate-matrix.md +122 -0
  15. package/docs/books/adaptive-control-improvements/02-tier-1-layout-playbooks.md +207 -0
  16. package/docs/books/adaptive-control-improvements/03-tier-2-navigation-form-overlay.md +140 -0
  17. package/docs/books/adaptive-control-improvements/04-cross-cutting-platform-functionality.md +141 -0
  18. package/docs/books/adaptive-control-improvements/05-styling-theming-density-upgrades.md +114 -0
  19. package/docs/books/adaptive-control-improvements/06-testing-quality-gates.md +97 -0
  20. package/docs/books/adaptive-control-improvements/07-delivery-roadmap-and-ownership.md +137 -0
  21. package/docs/books/adaptive-control-improvements/08-appendix-tier1-acceptance-and-pr-templates.md +261 -0
  22. package/docs/books/adaptive-control-improvements/README.md +66 -0
  23. package/docs/books/admin-ui-authentication/01-threat-model-and-goals.md +124 -0
  24. package/docs/books/admin-ui-authentication/02-session-model-and-token-model.md +75 -0
  25. package/docs/books/admin-ui-authentication/03-auth-middleware-patterns.md +77 -0
  26. package/docs/books/admin-ui-authentication/README.md +25 -0
  27. package/docs/books/creating-a-new-admin-ui/01-introduction-and-vision.md +130 -0
  28. package/docs/books/creating-a-new-admin-ui/02-architecture-and-data-flow.md +298 -0
  29. package/docs/books/creating-a-new-admin-ui/03-server-introspection.md +381 -0
  30. package/docs/books/creating-a-new-admin-ui/04-admin-module-adapter-layer.md +592 -0
  31. package/docs/books/creating-a-new-admin-ui/05-domain-controls-stat-cards-and-gauges.md +513 -0
  32. package/docs/books/creating-a-new-admin-ui/06-domain-controls-process-manager.md +544 -0
  33. package/docs/books/creating-a-new-admin-ui/07-domain-controls-resource-pool-inspector.md +493 -0
  34. package/docs/books/creating-a-new-admin-ui/08-domain-controls-route-table-and-api-explorer.md +586 -0
  35. package/docs/books/creating-a-new-admin-ui/09-domain-controls-log-viewer-and-activity-feed.md +490 -0
  36. package/docs/books/creating-a-new-admin-ui/10-domain-controls-build-status-and-bundle-inspector.md +526 -0
  37. package/docs/books/creating-a-new-admin-ui/11-domain-controls-configuration-panel.md +808 -0
  38. package/docs/books/creating-a-new-admin-ui/12-admin-shell-layout-sidebar-navigation.md +210 -0
  39. package/docs/books/creating-a-new-admin-ui/13-telemetry-integration.md +556 -0
  40. package/docs/books/creating-a-new-admin-ui/14-realtime-sse-observable-integration.md +485 -0
  41. package/docs/books/creating-a-new-admin-ui/15-styling-theming-aero-design-system.md +521 -0
  42. package/docs/books/creating-a-new-admin-ui/16-testing-and-quality-assurance.md +147 -0
  43. package/docs/books/creating-a-new-admin-ui/17-next-steps-process-resource-roadmap.md +356 -0
  44. package/docs/books/creating-a-new-admin-ui/README.md +68 -0
  45. package/docs/books/device-adaptive-composition/01-platform-feature-audit.md +177 -0
  46. package/docs/books/device-adaptive-composition/02-responsive-composition-model.md +187 -0
  47. package/docs/books/device-adaptive-composition/03-data-model-vs-view-model.md +231 -0
  48. package/docs/books/device-adaptive-composition/04-styling-theme-breakpoints.md +234 -0
  49. package/docs/books/device-adaptive-composition/05-showcase-app-multi-device-assessment.md +193 -0
  50. package/docs/books/device-adaptive-composition/06-implementation-patterns-and-apis.md +346 -0
  51. package/docs/books/device-adaptive-composition/07-testing-harness-and-quality-gates.md +265 -0
  52. package/docs/books/device-adaptive-composition/08-roadmap-and-adoption-plan.md +250 -0
  53. package/docs/books/device-adaptive-composition/README.md +47 -0
  54. package/docs/comparison-report-express-plex-cpanel.md +549 -0
  55. package/docs/designs/server-admin-interface-aero.svg +611 -0
  56. package/docs/troubleshooting.md +84 -53
  57. package/module.js +16 -11
  58. package/package.json +1 -1
  59. package/serve-factory.js +1 -0
  60. package/server.js +199 -0
  61. package/tests/README.md +5 -0
  62. package/tests/admin-ui-jsgui-controls.test.js +581 -0
  63. package/tests/test-runner.js +1 -0
  64. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-071799b982906680f5fd699d.js +0 -40
  65. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-07352945ad5c92654fcb8b65.js +0 -39
  66. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-138a601fadb6191ea314c6fd.js +0 -39
  67. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-171f6c381c2cadf2e9fa7087.js +0 -39
  68. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-1d973388156b84a04373fac9.js +0 -39
  69. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-20e117bc8a10d2cd16234bbe.js +0 -40
  70. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-2b028a82b0e5efddba42425f.js +0 -39
  71. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-4518556cd5c7e059e82b22b8.js +0 -40
  72. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-5bac1aa0f213902f718ed74f.js +0 -40
  73. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-5f9996ac7822caf777d92f56.js +0 -39
  74. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-60a92c702e65fd9cf748e3ec.js +0 -39
  75. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-6164c1f8f738995c541895d2.js +0 -44
  76. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-6718a85eb9e5aa782dd47a05.js +0 -45
  77. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-69e280f14e37aee76a1d4675.js +0 -39
  78. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-7570d1b030d44b111ed59c4c.js +0 -39
  79. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-7798c9bbd55e510d5039f936.js +0 -42
  80. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-78cd511ea1ef18ecb03d1be5.js +0 -40
  81. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-7d482e0b95bcb5e3c543118b.js +0 -43
  82. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-80e9476d1127c55b40fdb36f.js +0 -40
  83. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-810ced55d5320a3088a05b13.js +0 -40
  84. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-8423565f1a40e329afc8c6cf.js +0 -40
  85. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-900bef783b8cee36506ec282.js +0 -39
  86. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-a1a37aff6416fdad74040ddf.js +0 -39
  87. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-ad48d5e8eda40f175b4df090.js +0 -39
  88. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-aec5a2d963015528c9099462.js +0 -39
  89. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-af9d34e0f1722fab9e28c269.js +0 -39
  90. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-b818e4015e2f1fe86280b5ab.js +0 -41
  91. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-bcb2541adc70b7aba61768c5.js +0 -44
  92. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-bfe89d2c78ed44f95ed7dd73.js +0 -40
  93. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-c06f04806a1e688e1187110c.js +0 -40
  94. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-c3f3adf904f585afc544b96a.js +0 -39
  95. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-d45acb873e1d8e32d5e60f2e.js +0 -39
  96. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-db06f132533706f4a0163b8c.js +0 -39
  97. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-f660f40d78b135fc8560a862.js +0 -39
  98. package/.jsgui3-server-cache/jsgui3-html-shims/jsgui3-html-controls-shim-f9dee4ec18a96e09bee06bae.js +0 -39
@@ -0,0 +1,84 @@
1
+ 'use strict';
2
+
3
+ const jsgui = require('jsgui3-client');
4
+ const { controls, Control } = jsgui;
5
+
6
+ /**
7
+ * Group_Box — a Windows-style grouping container with a title
8
+ * rendered on the top border. Used to visually separate sections
9
+ * of the admin dashboard.
10
+ *
11
+ * Book reference: Chapter 6 — Implementation Patterns (reusable wrapper)
12
+ * Layer: D (Concrete Render)
13
+ */
14
+ class Group_Box extends Control {
15
+ constructor(spec = {}) {
16
+ spec.__type_name = spec.__type_name || 'group_box';
17
+ super(spec);
18
+ const { context } = this;
19
+
20
+ const compose = () => {
21
+ // Legend / title
22
+ const title_text = spec.title || '';
23
+ if (title_text) {
24
+ const legend = new controls.div({ context, 'class': 'group-box-legend' });
25
+ legend.add(title_text);
26
+ this.add(legend);
27
+ }
28
+
29
+ // Content container — callers add children here
30
+ const content = new controls.div({ context, 'class': 'group-box-content' });
31
+ this.add(content);
32
+ this._content = content;
33
+ };
34
+
35
+ if (!spec.el) {
36
+ compose();
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Returns the inner content container so callers can do:
42
+ * group.inner.add(child);
43
+ */
44
+ get inner() {
45
+ return this._content;
46
+ }
47
+
48
+ activate() {
49
+ if (!this.__active) {
50
+ super.activate();
51
+ }
52
+ }
53
+ }
54
+
55
+ Group_Box.css = `
56
+ .group-box {
57
+ position: relative;
58
+ border: 1px solid #3a3a5a;
59
+ border-radius: 8px;
60
+ margin-bottom: 20px;
61
+ padding: 20px 16px 16px;
62
+ background: transparent;
63
+ }
64
+ .group-box-legend {
65
+ position: absolute;
66
+ top: -10px;
67
+ left: 16px;
68
+ padding: 0 8px;
69
+ font-size: 0.75rem;
70
+ font-weight: 600;
71
+ text-transform: uppercase;
72
+ letter-spacing: 0.08em;
73
+ color: #8888aa;
74
+ background: #1a1a2e;
75
+ }
76
+ .group-box-content {
77
+ display: flex;
78
+ flex-wrap: wrap;
79
+ gap: 16px;
80
+ }
81
+ `;
82
+
83
+ controls.Group_Box = Group_Box;
84
+ module.exports = Group_Box;
@@ -0,0 +1,125 @@
1
+ 'use strict';
2
+
3
+ const jsgui = require('jsgui3-client');
4
+ const { controls, Control } = jsgui;
5
+
6
+ /**
7
+ * Stat_Card — a single KPI card showing value, label, and optional detail.
8
+ * Accent colour on the left border is set via spec.accent (CSS colour string).
9
+ *
10
+ * Usage:
11
+ * new Stat_Card({
12
+ * context,
13
+ * label: 'Uptime',
14
+ * value: '3h 22m',
15
+ * detail: 'Since 09:41',
16
+ * accent: '#4facfe'
17
+ * })
18
+ *
19
+ * Book reference: Chapter 6 — Implementation Patterns (domain control)
20
+ * Layer: D (Concrete Render) — pure presentation, no data fetching
21
+ */
22
+ class Stat_Card extends Control {
23
+ constructor(spec = {}) {
24
+ spec.__type_name = spec.__type_name || 'stat_card';
25
+ super(spec);
26
+ const { context } = this;
27
+
28
+ const compose = () => {
29
+ // Accent stripe colour
30
+ const accent = spec.accent || '#4facfe';
31
+ this.dom.attributes.style = `border-left-color: ${accent};`;
32
+
33
+ // Value (big number / text)
34
+ const value_el = new controls.div({ context, 'class': 'stat-value' });
35
+ value_el.add(String(spec.value != null ? spec.value : '—'));
36
+ this.add(value_el);
37
+ this._value_el = value_el;
38
+
39
+ // Label
40
+ const label_el = new controls.div({ context, 'class': 'stat-label' });
41
+ label_el.add(String(spec.label || ''));
42
+ this.add(label_el);
43
+ this._label_el = label_el;
44
+
45
+ // Detail (small secondary text)
46
+ if (spec.detail) {
47
+ const detail_el = new controls.div({ context, 'class': 'stat-detail' });
48
+ detail_el.add(String(spec.detail));
49
+ this.add(detail_el);
50
+ this._detail_el = detail_el;
51
+ }
52
+ };
53
+
54
+ if (!spec.el) {
55
+ compose();
56
+ }
57
+ }
58
+
59
+ // ─── Client-side updates ─────────────────────────────────
60
+
61
+ /**
62
+ * Update displayed value (client-side only).
63
+ */
64
+ set_value(value) {
65
+ if (this._value_el && this._value_el.el) {
66
+ this._value_el.el.textContent = String(value != null ? value : '—');
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Update displayed detail text (client-side only).
72
+ */
73
+ set_detail(text) {
74
+ if (this._detail_el && this._detail_el.el) {
75
+ this._detail_el.el.textContent = String(text);
76
+ }
77
+ }
78
+
79
+ activate() {
80
+ if (!this.__active) {
81
+ super.activate();
82
+ }
83
+ }
84
+ }
85
+
86
+ Stat_Card.css = `
87
+ .stat_card {
88
+ background: #2a2a4a;
89
+ border-left: 4px solid #4facfe;
90
+ border-radius: 8px;
91
+ padding: 20px 24px;
92
+ min-width: 180px;
93
+ flex: 1 1 180px;
94
+ max-width: 280px;
95
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
96
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
97
+ cursor: default;
98
+ }
99
+ .stat_card:hover {
100
+ transform: translateY(-2px);
101
+ box-shadow: 0 4px 16px rgba(0,0,0,0.25);
102
+ }
103
+ .stat-value {
104
+ font-size: 1.75rem;
105
+ font-weight: 700;
106
+ color: #ffffff;
107
+ line-height: 1.2;
108
+ margin-bottom: 4px;
109
+ }
110
+ .stat-label {
111
+ font-size: 0.8rem;
112
+ font-weight: 500;
113
+ text-transform: uppercase;
114
+ letter-spacing: 0.06em;
115
+ color: #8888aa;
116
+ margin-bottom: 6px;
117
+ }
118
+ .stat-detail {
119
+ font-size: 0.75rem;
120
+ color: #6a6a8a;
121
+ }
122
+ `;
123
+
124
+ controls.Stat_Card = Stat_Card;
125
+ module.exports = Stat_Card;