juxscript 1.1.390 → 1.1.395

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 (127) hide show
  1. package/bin/cli.js +9 -9
  2. package/dist/components/barChart.d.ts +103 -0
  3. package/dist/components/barChart.d.ts.map +1 -0
  4. package/dist/components/barChart.js +520 -0
  5. package/dist/components/barChart.js.map +1 -0
  6. package/dist/components/c.d.ts +53 -0
  7. package/dist/components/c.d.ts.map +1 -0
  8. package/dist/components/c.js +127 -0
  9. package/dist/components/c.js.map +1 -0
  10. package/dist/components/g.d.ts +21 -0
  11. package/dist/components/g.d.ts.map +1 -0
  12. package/dist/components/g.js +52 -0
  13. package/dist/components/g.js.map +1 -0
  14. package/dist/components/gateway.d.ts +97 -0
  15. package/dist/components/gateway.d.ts.map +1 -0
  16. package/dist/components/gateway.js +188 -0
  17. package/dist/components/gateway.js.map +1 -0
  18. package/dist/components/lineChart.d.ts +87 -0
  19. package/dist/components/lineChart.d.ts.map +1 -0
  20. package/dist/components/lineChart.js +330 -0
  21. package/dist/components/lineChart.js.map +1 -0
  22. package/dist/components/pieChart.d.ts +86 -0
  23. package/dist/components/pieChart.d.ts.map +1 -0
  24. package/dist/components/pieChart.js +300 -0
  25. package/dist/components/pieChart.js.map +1 -0
  26. package/dist/components/stack.d.ts +42 -0
  27. package/dist/components/stack.d.ts.map +1 -0
  28. package/dist/components/stack.js +109 -0
  29. package/dist/components/stack.js.map +1 -0
  30. package/dist/index.d.ts +19 -2
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +19 -2
  33. package/dist/index.js.map +1 -1
  34. package/dist/primitives/button.d.ts +53 -0
  35. package/dist/primitives/button.d.ts.map +1 -0
  36. package/dist/primitives/button.js +170 -0
  37. package/dist/primitives/button.js.map +1 -0
  38. package/dist/primitives/c.d.ts +53 -0
  39. package/dist/primitives/c.d.ts.map +1 -0
  40. package/dist/primitives/c.js +127 -0
  41. package/dist/primitives/c.js.map +1 -0
  42. package/dist/primitives/checkbox.d.ts +92 -0
  43. package/dist/primitives/checkbox.d.ts.map +1 -0
  44. package/dist/primitives/checkbox.js +217 -0
  45. package/dist/primitives/checkbox.js.map +1 -0
  46. package/dist/primitives/data.d.ts +58 -0
  47. package/dist/primitives/data.d.ts.map +1 -0
  48. package/dist/primitives/data.js +131 -0
  49. package/dist/primitives/data.js.map +1 -0
  50. package/dist/primitives/grid.d.ts +58 -0
  51. package/dist/primitives/grid.d.ts.map +1 -0
  52. package/dist/primitives/grid.js +128 -0
  53. package/dist/primitives/grid.js.map +1 -0
  54. package/dist/primitives/include.d.ts +86 -0
  55. package/dist/primitives/include.d.ts.map +1 -0
  56. package/dist/primitives/include.js +239 -0
  57. package/dist/primitives/include.js.map +1 -0
  58. package/dist/primitives/indexDb.d.ts +80 -0
  59. package/dist/primitives/indexDb.d.ts.map +1 -0
  60. package/dist/primitives/indexDb.js +253 -0
  61. package/dist/primitives/indexDb.js.map +1 -0
  62. package/dist/primitives/input.d.ts +88 -0
  63. package/dist/primitives/input.d.ts.map +1 -0
  64. package/dist/primitives/input.js +216 -0
  65. package/dist/primitives/input.js.map +1 -0
  66. package/dist/primitives/link.d.ts +51 -0
  67. package/dist/primitives/link.d.ts.map +1 -0
  68. package/dist/primitives/link.js +178 -0
  69. package/dist/primitives/link.js.map +1 -0
  70. package/dist/primitives/list.d.ts +66 -0
  71. package/dist/primitives/list.d.ts.map +1 -0
  72. package/dist/primitives/list.js +233 -0
  73. package/dist/primitives/list.js.map +1 -0
  74. package/dist/primitives/nav.d.ts +64 -0
  75. package/dist/primitives/nav.d.ts.map +1 -0
  76. package/dist/primitives/nav.js +236 -0
  77. package/dist/primitives/nav.js.map +1 -0
  78. package/dist/primitives/radio.d.ts +58 -0
  79. package/dist/primitives/radio.d.ts.map +1 -0
  80. package/dist/primitives/radio.js +135 -0
  81. package/dist/primitives/radio.js.map +1 -0
  82. package/dist/primitives/routes.d.ts +15 -0
  83. package/dist/primitives/routes.d.ts.map +1 -0
  84. package/dist/primitives/routes.js +34 -0
  85. package/dist/primitives/routes.js.map +1 -0
  86. package/dist/primitives/select.d.ts +67 -0
  87. package/dist/primitives/select.d.ts.map +1 -0
  88. package/dist/primitives/select.js +160 -0
  89. package/dist/primitives/select.js.map +1 -0
  90. package/dist/primitives/style.d.ts +27 -0
  91. package/dist/primitives/style.d.ts.map +1 -0
  92. package/dist/primitives/style.js +53 -0
  93. package/dist/primitives/style.js.map +1 -0
  94. package/dist/primitives/table.d.ts +83 -0
  95. package/dist/primitives/table.d.ts.map +1 -0
  96. package/dist/primitives/table.js +264 -0
  97. package/dist/primitives/table.js.map +1 -0
  98. package/dist/primitives/tabs.d.ts +75 -0
  99. package/dist/primitives/tabs.d.ts.map +1 -0
  100. package/dist/primitives/tabs.js +263 -0
  101. package/dist/primitives/tabs.js.map +1 -0
  102. package/dist/primitives/tag.d.ts +92 -0
  103. package/dist/primitives/tag.d.ts.map +1 -0
  104. package/dist/primitives/tag.js +151 -0
  105. package/dist/primitives/tag.js.map +1 -0
  106. package/dist/services/db.d.ts +44 -0
  107. package/dist/services/db.d.ts.map +1 -0
  108. package/dist/services/db.js +59 -0
  109. package/dist/services/db.js.map +1 -0
  110. package/dist/services/email.d.ts +50 -0
  111. package/dist/services/email.d.ts.map +1 -0
  112. package/dist/services/email.js +60 -0
  113. package/dist/services/email.js.map +1 -0
  114. package/dist/services/s3.d.ts +61 -0
  115. package/dist/services/s3.d.ts.map +1 -0
  116. package/dist/services/s3.js +79 -0
  117. package/dist/services/s3.js.map +1 -0
  118. package/juxconfig.example.js +7 -0
  119. package/machinery/build3.js +2 -1
  120. package/machinery/compiler4.js +2 -0
  121. package/machinery/serve.js +6 -26
  122. package/machinery/validate-jux.js +4 -0
  123. package/package.json +2 -2
  124. /package/{presets → components}/calendar/calendar-usage.jux +0 -0
  125. /package/{presets → components}/calendar/calendar.jux +0 -0
  126. /package/{presets → components}/sidebar/index.jux +0 -0
  127. /package/{presets → components}/sidebar/usage.jux +0 -0
@@ -0,0 +1,127 @@
1
+ import generateId from "../utils/idgen.js";
2
+ function sanitizeCSSValue(value) {
3
+ // Fix calc('...') or calc("...") → calc(...)
4
+ return value.replace(/calc\(\s*['"]([^'"]*)['"]\s*\)/g, 'calc($1)');
5
+ }
6
+ class C {
7
+ constructor(width, height, padding, radius, margin, border, overflow, options = {}) {
8
+ this.id = options.id || generateId('c');
9
+ this.opts = { ...options };
10
+ this._element = document.createElement('div');
11
+ this._element.id = this.id;
12
+ this._element.style.boxSizing = 'border-box';
13
+ this._element.style.float = 'left';
14
+ if (width)
15
+ this._element.style.width = sanitizeCSSValue(width);
16
+ if (height)
17
+ this._element.style.height = sanitizeCSSValue(height);
18
+ if (padding)
19
+ this._element.style.padding = sanitizeCSSValue(padding);
20
+ if (radius)
21
+ this._element.style.borderRadius = sanitizeCSSValue(radius);
22
+ if (margin)
23
+ this._element.style.margin = sanitizeCSSValue(margin);
24
+ if (border)
25
+ this._element.style.border = sanitizeCSSValue(border);
26
+ if (overflow)
27
+ this._element.style.overflow = overflow;
28
+ if (this.opts.class)
29
+ this._element.className = this.opts.class;
30
+ if (this.opts.style)
31
+ this._element.setAttribute('style', this._element.getAttribute('style') + ';' + this.opts.style);
32
+ // Extra data-* attributes
33
+ const reserved = ['id', 'class', 'style', 'target'];
34
+ for (const [key, value] of Object.entries(this.opts)) {
35
+ if (reserved.includes(key))
36
+ continue;
37
+ this._element.setAttribute(`data-${key}`, String(value));
38
+ }
39
+ // Auto-mount
40
+ if (this.opts.target) {
41
+ this.render(this.opts.target);
42
+ }
43
+ else {
44
+ this.render();
45
+ }
46
+ }
47
+ // ═══════════════════════════════════════════════════════════
48
+ // ELEMENT ACCESS
49
+ // ═══════════════════════════════════════════════════════════
50
+ get element() { return this._element; }
51
+ getElement() { return this._element; }
52
+ // ═══════════════════════════════════════════════════════════
53
+ // FLUENT BUILDER API
54
+ // ═══════════════════════════════════════════════════════════
55
+ id_set(value) { this.id = value; this._element.id = value; return this; }
56
+ class(value) { this.opts.class = value; this._element.className = value; return this; }
57
+ style(css) {
58
+ this.opts.style = css;
59
+ const existing = this._element.getAttribute('style') || '';
60
+ this._element.setAttribute('style', existing + ';' + css);
61
+ return this;
62
+ }
63
+ padding(value) { this.opts.padding = value; this._element.style.padding = sanitizeCSSValue(value); return this; }
64
+ radius(value) { this.opts.radius = value; this._element.style.borderRadius = sanitizeCSSValue(value); return this; }
65
+ margin(value) { this.opts.margin = value; this._element.style.margin = sanitizeCSSValue(value); return this; }
66
+ border(value) { this.opts.border = value; this._element.style.border = sanitizeCSSValue(value); return this; }
67
+ overflow(value) { this.opts.overflow = value; this._element.style.overflow = value; return this; }
68
+ width(value) { this._element.style.width = sanitizeCSSValue(value); return this; }
69
+ height(value) { this._element.style.height = sanitizeCSSValue(value); return this; }
70
+ target_set(value) { this.opts.target = value; return this; }
71
+ // ═══════════════════════════════════════════════════════════
72
+ // GETTERS / SETTERS (delegators)
73
+ // ═══════════════════════════════════════════════════════════
74
+ getId() { return this.id; }
75
+ getClass() { return this.opts.class ?? ''; }
76
+ getStyle() { return this.opts.style ?? ''; }
77
+ getPadding() { return this.opts.padding ?? ''; }
78
+ getRadius() { return this.opts.radius ?? ''; }
79
+ getMargin() { return this.opts.margin ?? ''; }
80
+ getBorder() { return this.opts.border ?? ''; }
81
+ getOverflow() { return this.opts.overflow ?? ''; }
82
+ getTarget() { return this.opts.target ?? ''; }
83
+ getValue() { return this._element.textContent ?? ''; }
84
+ setId(val) { return this.id_set(val); }
85
+ setClass(val) { return this.class(val); }
86
+ setStyle(val) { return this.style(val); }
87
+ setPadding(val) { return this.padding(val); }
88
+ setRadius(val) { return this.radius(val); }
89
+ setMargin(val) { return this.margin(val); }
90
+ setBorder(val) { return this.border(val); }
91
+ setOverflow(val) { return this.overflow(val); }
92
+ setTarget(val) { return this.target_set(val); }
93
+ setValue(val) { this._element.textContent = val; return this; }
94
+ setInnerHTML(val) { this._element.innerHTML = val; return this; }
95
+ // ═══════════════════════════════════════════════════════════
96
+ // TREE / RENDER
97
+ // ═══════════════════════════════════════════════════════════
98
+ append(child) {
99
+ const node = child instanceof C ? child.element : child;
100
+ this._element.appendChild(node);
101
+ return this;
102
+ }
103
+ render(target) {
104
+ let parent;
105
+ if (target instanceof C) {
106
+ parent = target.element;
107
+ }
108
+ else if (typeof target === 'string') {
109
+ parent = document.getElementById(target) || document.querySelector(target);
110
+ }
111
+ else {
112
+ parent = target || document.getElementById('app');
113
+ }
114
+ parent?.appendChild(this._element);
115
+ return this;
116
+ }
117
+ }
118
+ // ═══════════════════════════════════════════════════════════
119
+ // FACTORIES
120
+ // ═══════════════════════════════════════════════════════════
121
+ export function c(width, height, padding, radius, margin, border, overflow, options) {
122
+ const inst = new C(width, height, padding, radius, margin, border, overflow, options);
123
+ return inst;
124
+ }
125
+ export { C, c as container };
126
+ export default c;
127
+ //# sourceMappingURL=c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c.js","sourceRoot":"","sources":["../../lib/components/c.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { C } from "./c.js";
2
+ type GChild = C | HTMLElement | {
3
+ element: HTMLElement;
4
+ };
5
+ declare class G {
6
+ private _children;
7
+ constructor(children: GChild[]);
8
+ private _resolveNode;
9
+ private _resolveParent;
10
+ render(target?: string | HTMLElement | C | {
11
+ element: HTMLElement;
12
+ }): this;
13
+ into(target?: string | HTMLElement | C | {
14
+ element: HTMLElement;
15
+ }): this;
16
+ get children(): GChild[];
17
+ }
18
+ export declare function g(children: GChild[]): G;
19
+ export { G, GChild, g as group };
20
+ export default g;
21
+ //# sourceMappingURL=g.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"g.d.ts","sourceRoot":"","sources":["../../lib/components/g.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,KAAK,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAEzD,cAAM,CAAC;IACH,OAAO,CAAC,SAAS,CAAW;gBAEhB,QAAQ,EAAE,MAAM,EAAE;IAI9B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,cAAc;IAStB,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI;IAS1E,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI;IAIxE,IAAI,QAAQ,IAAI,MAAM,EAAE,CAEvB;CACJ;AAMD,wBAAgB,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAEvC;AAED,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;AACjC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { C } from "./c.js";
2
+ class G {
3
+ constructor(children) {
4
+ this._children = children;
5
+ }
6
+ _resolveNode(child) {
7
+ if (child instanceof C)
8
+ return child.element;
9
+ if (child instanceof HTMLElement)
10
+ return child;
11
+ if (child && typeof child === 'object' && 'element' in child)
12
+ return child.element;
13
+ throw new Error('G: child is not a valid node');
14
+ }
15
+ _resolveParent(target) {
16
+ if (!target)
17
+ return document.getElementById('app');
18
+ if (target instanceof C)
19
+ return target.element;
20
+ if (target instanceof HTMLElement)
21
+ return target;
22
+ if (typeof target === 'string')
23
+ return document.getElementById(target) || document.querySelector(target);
24
+ if (typeof target === 'object' && 'element' in target)
25
+ return target.element;
26
+ return null;
27
+ }
28
+ render(target) {
29
+ const parent = this._resolveParent(target);
30
+ if (!parent)
31
+ return this;
32
+ for (const child of this._children) {
33
+ parent.appendChild(this._resolveNode(child));
34
+ }
35
+ return this;
36
+ }
37
+ into(target) {
38
+ return this.render(target);
39
+ }
40
+ get children() {
41
+ return this._children;
42
+ }
43
+ }
44
+ // ═══════════════════════════════════════════════════════════
45
+ // FACTORY
46
+ // ═══════════════════════════════════════════════════════════
47
+ export function g(children) {
48
+ return new G(children);
49
+ }
50
+ export { G, g as group };
51
+ export default g;
52
+ //# sourceMappingURL=g.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"g.js","sourceRoot":"","sources":["../../lib/components/g.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,MAAM,CAAC;IAGH,YAAY,QAAkB;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAEO,YAAY,CAAC,KAAa;QAC9B,IAAI,KAAK,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC;QAC7C,IAAI,KAAK,YAAY,WAAW;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACpD,CAAC;IAEO,cAAc,CAAC,MAA4D;QAC/E,IAAI,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,MAAM,YAAY,CAAC;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC;QAC/C,IAAI,MAAM,YAAY,WAAW;YAAE,OAAO,MAAM,CAAC;QACjD,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAgB,CAAC;QACxH,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC;QAC7E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,MAA4D;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,MAA4D;QAC7D,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;CACJ;AAED,8DAA8D;AAC9D,UAAU;AACV,8DAA8D;AAE9D,MAAM,UAAU,CAAC,CAAC,QAAkB;IAChC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED,OAAO,EAAE,CAAC,EAAU,CAAC,IAAI,KAAK,EAAE,CAAC;AACjC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,97 @@
1
+ export interface GatewayOptions {
2
+ serverUrl?: string;
3
+ storageKey?: string;
4
+ }
5
+ /**
6
+ * Authenticated HTTP client bound to a specific downstream service.
7
+ * Obtained via ApiGateway.dbClient(), .s3Client(), or .emailClient().
8
+ */
9
+ export declare class ServiceClient {
10
+ private _gateway;
11
+ private _service;
12
+ constructor(gateway: ApiGateway, service: string);
13
+ /** Make an authenticated request to the service proxy. */
14
+ fetch(path: string, body?: any, method?: string): Promise<any>;
15
+ query(sql: string, params?: any[]): Promise<any>;
16
+ execute(sql: string, params?: any[]): Promise<any>;
17
+ upload(key: string, data: any, contentType?: string): Promise<any>;
18
+ download(key: string): Promise<any>;
19
+ list(prefix?: string): Promise<any>;
20
+ send(to: string, subject: string, body: string, html?: string): Promise<any>;
21
+ }
22
+ /**
23
+ * Client-side API gateway that handles JWT auth and proxies calls
24
+ * to jux-server downstream services (db, storage, email).
25
+ *
26
+ * Tokens are persisted in localStorage so they survive page reloads.
27
+ */
28
+ export declare class ApiGateway {
29
+ id: string;
30
+ options: GatewayOptions;
31
+ private _accessToken;
32
+ private _refreshToken;
33
+ private _tenantId;
34
+ constructor(id: string, options?: GatewayOptions);
35
+ serverUrl(value: string): this;
36
+ storageKey(value: string): this;
37
+ private _key;
38
+ private _loadTokens;
39
+ private _saveTokens;
40
+ private _clearTokens;
41
+ getAccessToken(): string | null;
42
+ getRefreshToken(): string | null;
43
+ getTenantId(): string | null;
44
+ getValue(): boolean;
45
+ isAuthenticated(): boolean;
46
+ setServerUrl(value: string): void;
47
+ getServerUrl(): string | undefined;
48
+ setStorageKey(value: string): void;
49
+ getStorageKey(): string | undefined;
50
+ _request(path: string, method?: string, body?: any): Promise<any>;
51
+ /** Register a new tenant account. */
52
+ register(email: string, password: string, plan?: string): Promise<any>;
53
+ /**
54
+ * Log in and persist the returned JWT tokens to localStorage.
55
+ * After a successful login, `isAuthenticated()` returns true.
56
+ */
57
+ login(email: string, password: string): Promise<any>;
58
+ /** Clear stored tokens and notify pageState listeners. */
59
+ logout(): void;
60
+ /** Returns an authenticated client for the db-service. */
61
+ dbClient(): ServiceClient;
62
+ /** Returns an authenticated client for the storage-service (S3). */
63
+ s3Client(): ServiceClient;
64
+ /** Returns an authenticated client for the email-service (SES). */
65
+ emailClient(): ServiceClient;
66
+ /** Returns the reactive pageState proxy for this component. */
67
+ get state(): any;
68
+ }
69
+ /**
70
+ * Create an API gateway client that handles JWT auth, browser-side token
71
+ * storage, and proxied calls to jux-server downstream services.
72
+ *
73
+ * @example
74
+ * // Configure once (e.g. in a boot file)
75
+ * const gw = await jux.gateway('auth', { serverUrl: 'https://api.example.com' });
76
+ *
77
+ * // Register
78
+ * await gw.register('alice@example.com', 'p4ssw0rd');
79
+ *
80
+ * // Login (tokens saved to localStorage automatically)
81
+ * await gw.login('alice@example.com', 'p4ssw0rd');
82
+ *
83
+ * // Call downstream services
84
+ * const db = gw.dbClient();
85
+ * const rows = await db.query('SELECT * FROM users');
86
+ *
87
+ * const s3 = gw.s3Client();
88
+ * await s3.upload('avatar.jpg', fileBlob, 'image/jpeg');
89
+ *
90
+ * const email = gw.emailClient();
91
+ * await email.send('bob@example.com', 'Hello', 'World');
92
+ *
93
+ * // Logout (tokens cleared from localStorage)
94
+ * gw.logout();
95
+ */
96
+ export declare function gateway(id: string, options?: GatewayOptions): Promise<ApiGateway>;
97
+ //# sourceMappingURL=gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../lib/components/gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,188 @@
1
+ import generateId from '../utils/idgen.js';
2
+ import { pageState } from '../state/pageState.js';
3
+ /**
4
+ * Authenticated HTTP client bound to a specific downstream service.
5
+ * Obtained via ApiGateway.dbClient(), .s3Client(), or .emailClient().
6
+ */
7
+ export class ServiceClient {
8
+ constructor(gateway, service) {
9
+ this._gateway = gateway;
10
+ this._service = service;
11
+ }
12
+ /** Make an authenticated request to the service proxy. */
13
+ async fetch(path, body, method = body !== undefined ? 'POST' : 'GET') {
14
+ return this._gateway._request(`/proxy/${this._service}${path}`, method, body);
15
+ }
16
+ // ── db-service helpers ──
17
+ async query(sql, params = []) {
18
+ return this.fetch('/', { action: 'query', sql, params }, 'POST');
19
+ }
20
+ async execute(sql, params = []) {
21
+ return this.fetch('/', { action: 'execute', sql, params }, 'POST');
22
+ }
23
+ // ── storage-service helpers ──
24
+ async upload(key, data, contentType = 'application/octet-stream') {
25
+ return this.fetch(`/${key}`, { data, contentType }, 'PUT');
26
+ }
27
+ async download(key) {
28
+ return this.fetch(`/${key}`, undefined, 'GET');
29
+ }
30
+ async list(prefix = '') {
31
+ return this.fetch(`/?prefix=${encodeURIComponent(prefix)}`, undefined, 'GET');
32
+ }
33
+ // ── email-service helpers ──
34
+ async send(to, subject, body, html) {
35
+ return this.fetch('/', { to, subject, body, html }, 'POST');
36
+ }
37
+ }
38
+ /**
39
+ * Client-side API gateway that handles JWT auth and proxies calls
40
+ * to jux-server downstream services (db, storage, email).
41
+ *
42
+ * Tokens are persisted in localStorage so they survive page reloads.
43
+ */
44
+ export class ApiGateway {
45
+ constructor(id, options = {}) {
46
+ this._accessToken = null;
47
+ this._refreshToken = null;
48
+ this._tenantId = null;
49
+ this.id = id || generateId();
50
+ // Fall back to juxConfig.proxy.url when no serverUrl is supplied
51
+ const configUrl = (typeof window !== 'undefined' && window.juxConfig?.proxy?.url) || '';
52
+ this.options = { storageKey: 'jux_auth', serverUrl: configUrl, ...options };
53
+ this._loadTokens();
54
+ }
55
+ // ── Fluent setters ──
56
+ serverUrl(value) { this.options.serverUrl = value; return this; }
57
+ storageKey(value) { this.options.storageKey = value; return this; }
58
+ // ── Token persistence ──
59
+ _key(suffix) {
60
+ return `${this.options.storageKey}_${suffix}`;
61
+ }
62
+ _loadTokens() {
63
+ if (typeof localStorage === 'undefined')
64
+ return;
65
+ this._accessToken = localStorage.getItem(this._key('access'));
66
+ this._refreshToken = localStorage.getItem(this._key('refresh'));
67
+ this._tenantId = localStorage.getItem(this._key('tenant'));
68
+ }
69
+ _saveTokens(accessToken, refreshToken, tenantId) {
70
+ this._accessToken = accessToken;
71
+ if (typeof localStorage === 'undefined')
72
+ return;
73
+ localStorage.setItem(this._key('access'), accessToken);
74
+ if (refreshToken) {
75
+ this._refreshToken = refreshToken;
76
+ localStorage.setItem(this._key('refresh'), refreshToken);
77
+ }
78
+ if (tenantId) {
79
+ this._tenantId = tenantId;
80
+ localStorage.setItem(this._key('tenant'), tenantId);
81
+ }
82
+ }
83
+ _clearTokens() {
84
+ this._accessToken = null;
85
+ this._refreshToken = null;
86
+ this._tenantId = null;
87
+ if (typeof localStorage === 'undefined')
88
+ return;
89
+ localStorage.removeItem(this._key('access'));
90
+ localStorage.removeItem(this._key('refresh'));
91
+ localStorage.removeItem(this._key('tenant'));
92
+ }
93
+ // ── Getters ──
94
+ getAccessToken() { return this._accessToken; }
95
+ getRefreshToken() { return this._refreshToken; }
96
+ getTenantId() { return this._tenantId; }
97
+ getValue() { return this.isAuthenticated(); }
98
+ isAuthenticated() { return !!this._accessToken; }
99
+ // ── Setters (for pageState delegation) ──
100
+ setServerUrl(value) { this.options.serverUrl = value; }
101
+ getServerUrl() { return this.options.serverUrl; }
102
+ setStorageKey(value) { this.options.storageKey = value; }
103
+ getStorageKey() { return this.options.storageKey; }
104
+ // ── HTTP helper (used by ServiceClient) ──
105
+ async _request(path, method = 'GET', body) {
106
+ const base = this.options.serverUrl || '';
107
+ const url = `${base}${path}`;
108
+ const headers = { 'Content-Type': 'application/json' };
109
+ if (this._accessToken) {
110
+ headers['Authorization'] = `Bearer ${this._accessToken}`;
111
+ }
112
+ const init = { method, headers };
113
+ if (body !== undefined) {
114
+ init.body = JSON.stringify(body);
115
+ }
116
+ const res = await globalThis.fetch(url, init);
117
+ const ct = res.headers.get('content-type') || '';
118
+ const data = ct.includes('application/json') ? await res.json() : await res.text();
119
+ if (!res.ok) {
120
+ throw new Error(data?.message || data?.error || `HTTP ${res.status}`);
121
+ }
122
+ return data;
123
+ }
124
+ // ── Auth methods ──
125
+ /** Register a new tenant account. */
126
+ async register(email, password, plan = 'free') {
127
+ return this._request('/auth/register', 'POST', { email, password, plan });
128
+ }
129
+ /**
130
+ * Log in and persist the returned JWT tokens to localStorage.
131
+ * After a successful login, `isAuthenticated()` returns true.
132
+ */
133
+ async login(email, password) {
134
+ const data = await this._request('/auth/login', 'POST', { email, password });
135
+ if (data.accessToken) {
136
+ this._saveTokens(data.accessToken, data.refreshToken, data.tenantId);
137
+ pageState.__notify(`${this.id}.authenticated`);
138
+ }
139
+ return data;
140
+ }
141
+ /** Clear stored tokens and notify pageState listeners. */
142
+ logout() {
143
+ this._clearTokens();
144
+ pageState.__notify(`${this.id}.authenticated`);
145
+ }
146
+ // ── Service client factories ──
147
+ /** Returns an authenticated client for the db-service. */
148
+ dbClient() { return new ServiceClient(this, 'db'); }
149
+ /** Returns an authenticated client for the storage-service (S3). */
150
+ s3Client() { return new ServiceClient(this, 'storage'); }
151
+ /** Returns an authenticated client for the email-service (SES). */
152
+ emailClient() { return new ServiceClient(this, 'email'); }
153
+ /** Returns the reactive pageState proxy for this component. */
154
+ get state() { return pageState[this.id]; }
155
+ }
156
+ /**
157
+ * Create an API gateway client that handles JWT auth, browser-side token
158
+ * storage, and proxied calls to jux-server downstream services.
159
+ *
160
+ * @example
161
+ * // Configure once (e.g. in a boot file)
162
+ * const gw = await jux.gateway('auth', { serverUrl: 'https://api.example.com' });
163
+ *
164
+ * // Register
165
+ * await gw.register('alice@example.com', 'p4ssw0rd');
166
+ *
167
+ * // Login (tokens saved to localStorage automatically)
168
+ * await gw.login('alice@example.com', 'p4ssw0rd');
169
+ *
170
+ * // Call downstream services
171
+ * const db = gw.dbClient();
172
+ * const rows = await db.query('SELECT * FROM users');
173
+ *
174
+ * const s3 = gw.s3Client();
175
+ * await s3.upload('avatar.jpg', fileBlob, 'image/jpeg');
176
+ *
177
+ * const email = gw.emailClient();
178
+ * await email.send('bob@example.com', 'Hello', 'World');
179
+ *
180
+ * // Logout (tokens cleared from localStorage)
181
+ * gw.logout();
182
+ */
183
+ export async function gateway(id, options = {}) {
184
+ const gw = new ApiGateway(id, options);
185
+ pageState.__register(gw);
186
+ return gw;
187
+ }
188
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../lib/components/gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ interface LineDataItem {
2
+ x: number;
3
+ label?: string;
4
+ [key: string]: any;
5
+ }
6
+ interface LineClickDetail {
7
+ chartId: string;
8
+ index: number;
9
+ label: string;
10
+ value: number;
11
+ item: LineDataItem;
12
+ }
13
+ interface LineChartOptions {
14
+ title?: string;
15
+ subtitle?: string;
16
+ colors?: string | string[];
17
+ aspectRatio?: string | number;
18
+ showValues?: boolean;
19
+ showDots?: boolean;
20
+ showGrid?: boolean;
21
+ smooth?: boolean;
22
+ filled?: boolean;
23
+ lineWidth?: number;
24
+ dotRadius?: number;
25
+ ticks?: number;
26
+ animate?: boolean;
27
+ responsive?: boolean;
28
+ maintainAspectRatio?: boolean;
29
+ width?: number;
30
+ class?: string;
31
+ style?: string;
32
+ disabled?: boolean;
33
+ content?: string;
34
+ onClick?: (event: LineClickDetail) => void;
35
+ }
36
+ declare class LineChart {
37
+ id: string;
38
+ private _values;
39
+ private _opts;
40
+ private _palette;
41
+ private _wrapperEl;
42
+ private _stateEl;
43
+ private _resizeObserver;
44
+ private _lastClickDetail;
45
+ private _onChange;
46
+ private _listeners;
47
+ constructor(id: string, values: LineDataItem[], options?: LineChartOptions);
48
+ title(val: string): this;
49
+ subtitle(val: string): this;
50
+ content(val: string): this;
51
+ disabled(val: boolean): this;
52
+ style(val: string): this;
53
+ class(val: string): this;
54
+ getValue(): LineClickDetail | null;
55
+ setValue(val: any): this;
56
+ getElement(): HTMLButtonElement;
57
+ setContent(val: string): this;
58
+ getTitle(): string;
59
+ getSubtitle(): string;
60
+ getContent(): string;
61
+ getDisabled(): boolean;
62
+ getClass(): string;
63
+ getStyle(): string;
64
+ setTitle(val: string): this;
65
+ setSubtitle(val: string): this;
66
+ setDisabled(val: boolean): this;
67
+ setClass(val: string): this;
68
+ setStyle(val: string): this;
69
+ onChange(fn: (value: any) => void): this;
70
+ get state(): any;
71
+ get element(): HTMLDivElement;
72
+ private _handleDotClick;
73
+ private _buildChart;
74
+ render(target?: string | HTMLElement | {
75
+ element: HTMLElement;
76
+ }): this;
77
+ into(target?: string | HTMLElement | {
78
+ element: HTMLElement;
79
+ }): this;
80
+ on(event: string, fn: Function): this;
81
+ off(event: string, fn: Function): this;
82
+ destroy(): void;
83
+ }
84
+ export declare function lineChart(id: string, values: LineDataItem[], options?: LineChartOptions): LineChart;
85
+ export { LineChart, LineChartOptions, LineDataItem, LineClickDetail };
86
+ export default lineChart;
87
+ //# sourceMappingURL=lineChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineChart.d.ts","sourceRoot":"","sources":["../../lib/components/lineChart.ts"],"names":[],"mappings":"AAiBA,UAAU,YAAY;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,UAAU,eAAe;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACtB;AAED,UAAU,gBAAgB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CAC9C;AAgBD,cAAM,SAAS;IACX,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,KAAK,CAAoP;IACjQ,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,UAAU,CAA6C;gBAEnD,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,GAAE,gBAAqB;IAqC9E,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAC5B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMxB,QAAQ,IAAI,eAAe,GAAG,IAAI;IAClC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IACxB,UAAU,IAAI,iBAAiB;IAC/B,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAE7B,QAAQ,IAAI,MAAM;IAClB,WAAW,IAAI,MAAM;IACrB,UAAU,IAAI,MAAM;IACpB,WAAW,IAAI,OAAO;IACtB,QAAQ,IAAI,MAAM;IAClB,QAAQ,IAAI,MAAM;IAElB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAC3B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAC9B,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAE3B,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAExC,IAAI,KAAK,IAAI,GAAG,CAA+B;IAC/C,IAAI,OAAO,IAAI,cAAc,CAA4B;IAMzD,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,WAAW;IA2KnB,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI;IAoBtE,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI;IAEpE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI;IAKrC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI;IAKtC,OAAO;CAIV;AAMD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,GAAE,gBAAqB,GAAG,SAAS,CAIvG;AAED,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;AACtE,eAAe,SAAS,CAAC"}