@maxhealth.tech/prefab 0.1.2

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 (217) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/LICENSE +21 -0
  3. package/README.md +340 -0
  4. package/dist/actions/client.d.ts +98 -0
  5. package/dist/actions/client.d.ts.map +1 -0
  6. package/dist/actions/client.js +188 -0
  7. package/dist/actions/client.js.map +1 -0
  8. package/dist/actions/index.d.ts +6 -0
  9. package/dist/actions/index.d.ts.map +1 -0
  10. package/dist/actions/index.js +3 -0
  11. package/dist/actions/index.js.map +1 -0
  12. package/dist/actions/mcp.d.ts +37 -0
  13. package/dist/actions/mcp.d.ts.map +1 -0
  14. package/dist/actions/mcp.js +64 -0
  15. package/dist/actions/mcp.js.map +1 -0
  16. package/dist/actions/types.d.ts +16 -0
  17. package/dist/actions/types.d.ts.map +1 -0
  18. package/dist/actions/types.js +8 -0
  19. package/dist/actions/types.js.map +1 -0
  20. package/dist/app.d.ts +65 -0
  21. package/dist/app.d.ts.map +1 -0
  22. package/dist/app.js +120 -0
  23. package/dist/app.js.map +1 -0
  24. package/dist/auto/chart.d.ts +36 -0
  25. package/dist/auto/chart.d.ts.map +1 -0
  26. package/dist/auto/chart.js +50 -0
  27. package/dist/auto/chart.js.map +1 -0
  28. package/dist/auto/comparison.d.ts +32 -0
  29. package/dist/auto/comparison.d.ts.map +1 -0
  30. package/dist/auto/comparison.js +66 -0
  31. package/dist/auto/comparison.js.map +1 -0
  32. package/dist/auto/form.d.ts +50 -0
  33. package/dist/auto/form.d.ts.map +1 -0
  34. package/dist/auto/form.js +68 -0
  35. package/dist/auto/form.js.map +1 -0
  36. package/dist/auto/index.d.ts +84 -0
  37. package/dist/auto/index.d.ts.map +1 -0
  38. package/dist/auto/index.js +240 -0
  39. package/dist/auto/index.js.map +1 -0
  40. package/dist/auto/metrics.d.ts +44 -0
  41. package/dist/auto/metrics.d.ts.map +1 -0
  42. package/dist/auto/metrics.js +55 -0
  43. package/dist/auto/metrics.js.map +1 -0
  44. package/dist/auto/progress.d.ts +38 -0
  45. package/dist/auto/progress.d.ts.map +1 -0
  46. package/dist/auto/progress.js +72 -0
  47. package/dist/auto/progress.js.map +1 -0
  48. package/dist/auto/timeline.d.ts +41 -0
  49. package/dist/auto/timeline.d.ts.map +1 -0
  50. package/dist/auto/timeline.js +72 -0
  51. package/dist/auto/timeline.js.map +1 -0
  52. package/dist/components/alert/index.d.ts +14 -0
  53. package/dist/components/alert/index.d.ts.map +1 -0
  54. package/dist/components/alert/index.js +31 -0
  55. package/dist/components/alert/index.js.map +1 -0
  56. package/dist/components/card/index.d.ts +12 -0
  57. package/dist/components/card/index.d.ts.map +1 -0
  58. package/dist/components/card/index.js +33 -0
  59. package/dist/components/card/index.js.map +1 -0
  60. package/dist/components/charts/index.d.ts +57 -0
  61. package/dist/components/charts/index.d.ts.map +1 -0
  62. package/dist/components/charts/index.js +91 -0
  63. package/dist/components/charts/index.js.map +1 -0
  64. package/dist/components/control/index.d.ts +48 -0
  65. package/dist/components/control/index.d.ts.map +1 -0
  66. package/dist/components/control/index.js +47 -0
  67. package/dist/components/control/index.js.map +1 -0
  68. package/dist/components/data/index.d.ts +53 -0
  69. package/dist/components/data/index.d.ts.map +1 -0
  70. package/dist/components/data/index.js +88 -0
  71. package/dist/components/data/index.js.map +1 -0
  72. package/dist/components/form/index.d.ts +103 -0
  73. package/dist/components/form/index.d.ts.map +1 -0
  74. package/dist/components/form/index.js +247 -0
  75. package/dist/components/form/index.js.map +1 -0
  76. package/dist/components/interactive/index.d.ts +33 -0
  77. package/dist/components/interactive/index.d.ts.map +1 -0
  78. package/dist/components/interactive/index.js +59 -0
  79. package/dist/components/interactive/index.js.map +1 -0
  80. package/dist/components/layout/index.d.ts +61 -0
  81. package/dist/components/layout/index.d.ts.map +1 -0
  82. package/dist/components/layout/index.js +86 -0
  83. package/dist/components/layout/index.js.map +1 -0
  84. package/dist/components/media/index.d.ts +17 -0
  85. package/dist/components/media/index.d.ts.map +1 -0
  86. package/dist/components/media/index.js +41 -0
  87. package/dist/components/media/index.js.map +1 -0
  88. package/dist/components/table/index.d.ts +28 -0
  89. package/dist/components/table/index.d.ts.map +1 -0
  90. package/dist/components/table/index.js +56 -0
  91. package/dist/components/table/index.js.map +1 -0
  92. package/dist/components/typography/index.d.ts +34 -0
  93. package/dist/components/typography/index.d.ts.map +1 -0
  94. package/dist/components/typography/index.js +93 -0
  95. package/dist/components/typography/index.js.map +1 -0
  96. package/dist/core/component.d.ts +67 -0
  97. package/dist/core/component.d.ts.map +1 -0
  98. package/dist/core/component.js +122 -0
  99. package/dist/core/component.js.map +1 -0
  100. package/dist/core/index.d.ts +5 -0
  101. package/dist/core/index.d.ts.map +1 -0
  102. package/dist/core/index.js +3 -0
  103. package/dist/core/index.js.map +1 -0
  104. package/dist/core/validate.d.ts +30 -0
  105. package/dist/core/validate.d.ts.map +1 -0
  106. package/dist/core/validate.js +178 -0
  107. package/dist/core/validate.js.map +1 -0
  108. package/dist/index.d.ts +48 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +48 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/mcp/display.d.ts +102 -0
  113. package/dist/mcp/display.d.ts.map +1 -0
  114. package/dist/mcp/display.js +124 -0
  115. package/dist/mcp/display.js.map +1 -0
  116. package/dist/mcp/index.d.ts +7 -0
  117. package/dist/mcp/index.d.ts.map +1 -0
  118. package/dist/mcp/index.js +5 -0
  119. package/dist/mcp/index.js.map +1 -0
  120. package/dist/mcp/types.d.ts +35 -0
  121. package/dist/mcp/types.d.ts.map +1 -0
  122. package/dist/mcp/types.js +8 -0
  123. package/dist/mcp/types.js.map +1 -0
  124. package/dist/renderer/actions.d.ts +36 -0
  125. package/dist/renderer/actions.d.ts.map +1 -0
  126. package/dist/renderer/actions.js +296 -0
  127. package/dist/renderer/actions.js.map +1 -0
  128. package/dist/renderer/app.d.ts +87 -0
  129. package/dist/renderer/app.d.ts.map +1 -0
  130. package/dist/renderer/app.js +166 -0
  131. package/dist/renderer/app.js.map +1 -0
  132. package/dist/renderer/bridge.d.ts +91 -0
  133. package/dist/renderer/bridge.d.ts.map +1 -0
  134. package/dist/renderer/bridge.js +302 -0
  135. package/dist/renderer/bridge.js.map +1 -0
  136. package/dist/renderer/components/alert.d.ts +5 -0
  137. package/dist/renderer/components/alert.d.ts.map +1 -0
  138. package/dist/renderer/components/alert.js +44 -0
  139. package/dist/renderer/components/alert.js.map +1 -0
  140. package/dist/renderer/components/card.d.ts +5 -0
  141. package/dist/renderer/components/card.d.ts.map +1 -0
  142. package/dist/renderer/components/card.js +38 -0
  143. package/dist/renderer/components/card.js.map +1 -0
  144. package/dist/renderer/components/charts.d.ts +8 -0
  145. package/dist/renderer/components/charts.d.ts.map +1 -0
  146. package/dist/renderer/components/charts.js +232 -0
  147. package/dist/renderer/components/charts.js.map +1 -0
  148. package/dist/renderer/components/control.d.ts +5 -0
  149. package/dist/renderer/components/control.d.ts.map +1 -0
  150. package/dist/renderer/components/control.js +140 -0
  151. package/dist/renderer/components/control.js.map +1 -0
  152. package/dist/renderer/components/data.d.ts +5 -0
  153. package/dist/renderer/components/data.d.ts.map +1 -0
  154. package/dist/renderer/components/data.js +268 -0
  155. package/dist/renderer/components/data.js.map +1 -0
  156. package/dist/renderer/components/form.d.ts +5 -0
  157. package/dist/renderer/components/form.d.ts.map +1 -0
  158. package/dist/renderer/components/form.js +523 -0
  159. package/dist/renderer/components/form.js.map +1 -0
  160. package/dist/renderer/components/index.d.ts +5 -0
  161. package/dist/renderer/components/index.d.ts.map +1 -0
  162. package/dist/renderer/components/index.js +32 -0
  163. package/dist/renderer/components/index.js.map +1 -0
  164. package/dist/renderer/components/interactive.d.ts +5 -0
  165. package/dist/renderer/components/interactive.d.ts.map +1 -0
  166. package/dist/renderer/components/interactive.js +324 -0
  167. package/dist/renderer/components/interactive.js.map +1 -0
  168. package/dist/renderer/components/layout.d.ts +5 -0
  169. package/dist/renderer/components/layout.d.ts.map +1 -0
  170. package/dist/renderer/components/layout.js +113 -0
  171. package/dist/renderer/components/layout.js.map +1 -0
  172. package/dist/renderer/components/media.d.ts +5 -0
  173. package/dist/renderer/components/media.d.ts.map +1 -0
  174. package/dist/renderer/components/media.js +132 -0
  175. package/dist/renderer/components/media.js.map +1 -0
  176. package/dist/renderer/components/table.d.ts +5 -0
  177. package/dist/renderer/components/table.d.ts.map +1 -0
  178. package/dist/renderer/components/table.js +101 -0
  179. package/dist/renderer/components/table.js.map +1 -0
  180. package/dist/renderer/components/typography.d.ts +5 -0
  181. package/dist/renderer/components/typography.d.ts.map +1 -0
  182. package/dist/renderer/components/typography.js +90 -0
  183. package/dist/renderer/components/typography.js.map +1 -0
  184. package/dist/renderer/engine.d.ts +53 -0
  185. package/dist/renderer/engine.d.ts.map +1 -0
  186. package/dist/renderer/engine.js +112 -0
  187. package/dist/renderer/engine.js.map +1 -0
  188. package/dist/renderer/index.d.ts +94 -0
  189. package/dist/renderer/index.d.ts.map +1 -0
  190. package/dist/renderer/index.js +215 -0
  191. package/dist/renderer/index.js.map +1 -0
  192. package/dist/renderer/rx.d.ts +37 -0
  193. package/dist/renderer/rx.d.ts.map +1 -0
  194. package/dist/renderer/rx.js +360 -0
  195. package/dist/renderer/rx.js.map +1 -0
  196. package/dist/renderer/state.d.ts +34 -0
  197. package/dist/renderer/state.d.ts.map +1 -0
  198. package/dist/renderer/state.js +132 -0
  199. package/dist/renderer/state.js.map +1 -0
  200. package/dist/renderer/theme.d.ts +13 -0
  201. package/dist/renderer/theme.d.ts.map +1 -0
  202. package/dist/renderer/theme.js +69 -0
  203. package/dist/renderer/theme.js.map +1 -0
  204. package/dist/renderer/transport.d.ts +22 -0
  205. package/dist/renderer/transport.d.ts.map +1 -0
  206. package/dist/renderer/transport.js +69 -0
  207. package/dist/renderer/transport.js.map +1 -0
  208. package/dist/renderer.min.js +83 -0
  209. package/dist/rx/index.d.ts +2 -0
  210. package/dist/rx/index.d.ts.map +1 -0
  211. package/dist/rx/index.js +2 -0
  212. package/dist/rx/index.js.map +1 -0
  213. package/dist/rx/rx.d.ts +81 -0
  214. package/dist/rx/rx.d.ts.map +1 -0
  215. package/dist/rx/rx.js +196 -0
  216. package/dist/rx/rx.js.map +1 -0
  217. package/package.json +84 -0
@@ -0,0 +1,2 @@
1
+ export { Rx, rx, ITEM, INDEX, EVENT, ERROR, RESULT, STATE } from './rx.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { Rx, rx, ITEM, INDEX, EVENT, ERROR, RESULT, STATE } from './rx.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Rx — Reactive expression builder.
3
+ *
4
+ * Builds template expressions like "{{ count + 1 }}" or "{{ user.name }}"
5
+ * that are evaluated client-side by the prefab renderer.
6
+ *
7
+ * Usage:
8
+ * rx('count') → "{{ count }}"
9
+ * rx('count').add(1) → "{{ count + 1 }}"
10
+ * rx('user').dot('name') → "{{ user.name }}"
11
+ * rx('items').length() → "{{ items | length }}"
12
+ * rx('price').currency('USD') → "{{ price | currency:'USD' }}"
13
+ * rx('active').then('Yes', 'No') → "{{ active ? 'Yes' : 'No' }}"
14
+ */
15
+ export declare class Rx {
16
+ private readonly expr;
17
+ constructor(expression: string);
18
+ /** Raw expression string without {{ }} wrapper */
19
+ get expression(): string;
20
+ /** Serialize to "{{ expression }}" template string */
21
+ toString(): string;
22
+ toJSON(): string;
23
+ /** Dot-path access: rx('user').dot('name') → "{{ user.name }}" */
24
+ dot(key: string): Rx;
25
+ /** Index access: rx('items').at(0) → "{{ items.0 }}" */
26
+ at(index: number | Rx): Rx;
27
+ add(other: number | string | Rx): Rx;
28
+ sub(other: number | string | Rx): Rx;
29
+ mul(other: number | string | Rx): Rx;
30
+ div(other: number | string | Rx): Rx;
31
+ mod(other: number | string | Rx): Rx;
32
+ eq(other: unknown): Rx;
33
+ neq(other: unknown): Rx;
34
+ gt(other: number | Rx): Rx;
35
+ gte(other: number | Rx): Rx;
36
+ lt(other: number | Rx): Rx;
37
+ lte(other: number | Rx): Rx;
38
+ and(other: Rx): Rx;
39
+ or(other: Rx): Rx;
40
+ not(): Rx;
41
+ then(ifTrue: unknown, ifFalse: unknown): Rx;
42
+ currency(code?: string): Rx;
43
+ percent(decimals?: number): Rx;
44
+ number(decimals?: number): Rx;
45
+ round(decimals?: number): Rx;
46
+ compact(decimals?: number): Rx;
47
+ abs(): Rx;
48
+ date(format?: string): Rx;
49
+ time(): Rx;
50
+ datetime(): Rx;
51
+ upper(): Rx;
52
+ lower(): Rx;
53
+ truncate(maxLength: number): Rx;
54
+ pluralize(word?: string): Rx;
55
+ length(): Rx;
56
+ join(separator?: string): Rx;
57
+ first(): Rx;
58
+ last(): Rx;
59
+ selectattr(attr: string): Rx;
60
+ rejectattr(attr: string): Rx;
61
+ default(value: unknown): Rx;
62
+ private pipe;
63
+ }
64
+ /** Create an Rx expression referencing a state key */
65
+ export declare function rx(key: string): Rx;
66
+ /** Current item in a ForEach loop */
67
+ export declare const ITEM: Rx;
68
+ /** Current index in a ForEach loop */
69
+ export declare const INDEX: Rx;
70
+ /** Value from an interaction event (input value, checkbox state, etc.) */
71
+ export declare const EVENT: Rx;
72
+ /** Error message available in on_error callbacks */
73
+ export declare const ERROR: Rx;
74
+ /** Return value available in on_success callbacks */
75
+ export declare const RESULT: Rx;
76
+ /**
77
+ * STATE proxy — convenience for accessing state keys.
78
+ * Usage: STATE.foo → rx('foo'), STATE.user.name → rx('user.name')
79
+ */
80
+ export declare const STATE: Record<string, Rx>;
81
+ //# sourceMappingURL=rx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rx.d.ts","sourceRoot":"","sources":["../../src/rx/rx.ts"],"names":[],"mappings":"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"}
package/dist/rx/rx.js ADDED
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Rx — Reactive expression builder.
3
+ *
4
+ * Builds template expressions like "{{ count + 1 }}" or "{{ user.name }}"
5
+ * that are evaluated client-side by the prefab renderer.
6
+ *
7
+ * Usage:
8
+ * rx('count') → "{{ count }}"
9
+ * rx('count').add(1) → "{{ count + 1 }}"
10
+ * rx('user').dot('name') → "{{ user.name }}"
11
+ * rx('items').length() → "{{ items | length }}"
12
+ * rx('price').currency('USD') → "{{ price | currency:'USD' }}"
13
+ * rx('active').then('Yes', 'No') → "{{ active ? 'Yes' : 'No' }}"
14
+ */
15
+ export class Rx {
16
+ expr;
17
+ constructor(expression) {
18
+ this.expr = expression;
19
+ }
20
+ // ── Core ─────────────────────────────────────────────────────────────────
21
+ /** Raw expression string without {{ }} wrapper */
22
+ get expression() {
23
+ return this.expr;
24
+ }
25
+ /** Serialize to "{{ expression }}" template string */
26
+ toString() {
27
+ return `{{ ${this.expr} }}`;
28
+ }
29
+ toJSON() {
30
+ return this.toString();
31
+ }
32
+ // ── Property access ──────────────────────────────────────────────────────
33
+ /** Dot-path access: rx('user').dot('name') → "{{ user.name }}" */
34
+ dot(key) {
35
+ return new Rx(`${this.expr}.${key}`);
36
+ }
37
+ /** Index access: rx('items').at(0) → "{{ items.0 }}" */
38
+ at(index) {
39
+ const idx = index instanceof Rx ? `{{ ${index.expr} }}` : String(index);
40
+ return new Rx(`${this.expr}.${idx}`);
41
+ }
42
+ // ── Arithmetic ───────────────────────────────────────────────────────────
43
+ add(other) {
44
+ return new Rx(`${this.expr} + ${formatOperand(other)}`);
45
+ }
46
+ sub(other) {
47
+ return new Rx(`${this.expr} - ${formatOperand(other)}`);
48
+ }
49
+ mul(other) {
50
+ return new Rx(`${this.expr} * ${formatOperand(other)}`);
51
+ }
52
+ div(other) {
53
+ return new Rx(`${this.expr} / ${formatOperand(other)}`);
54
+ }
55
+ mod(other) {
56
+ return new Rx(`${this.expr} % ${formatOperand(other)}`);
57
+ }
58
+ // ── Comparison ───────────────────────────────────────────────────────────
59
+ eq(other) {
60
+ return new Rx(`${this.expr} === ${formatOperand(other)}`);
61
+ }
62
+ neq(other) {
63
+ return new Rx(`${this.expr} !== ${formatOperand(other)}`);
64
+ }
65
+ gt(other) {
66
+ return new Rx(`${this.expr} > ${formatOperand(other)}`);
67
+ }
68
+ gte(other) {
69
+ return new Rx(`${this.expr} >= ${formatOperand(other)}`);
70
+ }
71
+ lt(other) {
72
+ return new Rx(`${this.expr} < ${formatOperand(other)}`);
73
+ }
74
+ lte(other) {
75
+ return new Rx(`${this.expr} <= ${formatOperand(other)}`);
76
+ }
77
+ // ── Logical ──────────────────────────────────────────────────────────────
78
+ and(other) {
79
+ return new Rx(`${this.expr} && ${other.expr}`);
80
+ }
81
+ or(other) {
82
+ return new Rx(`${this.expr} || ${other.expr}`);
83
+ }
84
+ not() {
85
+ return new Rx(`!${this.expr}`);
86
+ }
87
+ // ── Ternary ──────────────────────────────────────────────────────────────
88
+ then(ifTrue, ifFalse) {
89
+ return new Rx(`${this.expr} ? ${formatOperand(ifTrue)} : ${formatOperand(ifFalse)}`);
90
+ }
91
+ // ── Pipe methods (format filters) ────────────────────────────────────────
92
+ currency(code) {
93
+ return this.pipe('currency', code);
94
+ }
95
+ percent(decimals) {
96
+ return this.pipe('percent', decimals);
97
+ }
98
+ number(decimals) {
99
+ return this.pipe('number', decimals);
100
+ }
101
+ round(decimals = 0) {
102
+ return this.pipe('round', decimals);
103
+ }
104
+ compact(decimals) {
105
+ return this.pipe('compact', decimals);
106
+ }
107
+ abs() {
108
+ return this.pipe('abs');
109
+ }
110
+ date(format) {
111
+ return this.pipe('date', format);
112
+ }
113
+ time() {
114
+ return this.pipe('time');
115
+ }
116
+ datetime() {
117
+ return this.pipe('datetime');
118
+ }
119
+ upper() {
120
+ return this.pipe('upper');
121
+ }
122
+ lower() {
123
+ return this.pipe('lower');
124
+ }
125
+ truncate(maxLength) {
126
+ return this.pipe('truncate', maxLength);
127
+ }
128
+ pluralize(word) {
129
+ return this.pipe('pluralize', word);
130
+ }
131
+ length() {
132
+ return this.pipe('length');
133
+ }
134
+ join(separator) {
135
+ return this.pipe('join', separator);
136
+ }
137
+ first() {
138
+ return this.pipe('first');
139
+ }
140
+ last() {
141
+ return this.pipe('last');
142
+ }
143
+ selectattr(attr) {
144
+ return this.pipe('selectattr', attr);
145
+ }
146
+ rejectattr(attr) {
147
+ return this.pipe('rejectattr', attr);
148
+ }
149
+ default(value) {
150
+ return this.pipe('default', value);
151
+ }
152
+ // ── Internal ─────────────────────────────────────────────────────────────
153
+ pipe(name, arg) {
154
+ const pipeStr = arg !== undefined ? `${name}:${formatPipeArg(arg)}` : name;
155
+ return new Rx(`${this.expr} | ${pipeStr}`);
156
+ }
157
+ }
158
+ // ── Factory ──────────────────────────────────────────────────────────────────
159
+ /** Create an Rx expression referencing a state key */
160
+ export function rx(key) {
161
+ return new Rx(key);
162
+ }
163
+ // ── Built-in reactive variables ──────────────────────────────────────────────
164
+ /** Current item in a ForEach loop */
165
+ export const ITEM = new Rx('$item');
166
+ /** Current index in a ForEach loop */
167
+ export const INDEX = new Rx('$index');
168
+ /** Value from an interaction event (input value, checkbox state, etc.) */
169
+ export const EVENT = new Rx('$event');
170
+ /** Error message available in on_error callbacks */
171
+ export const ERROR = new Rx('$error');
172
+ /** Return value available in on_success callbacks */
173
+ export const RESULT = new Rx('$result');
174
+ /**
175
+ * STATE proxy — convenience for accessing state keys.
176
+ * Usage: STATE.foo → rx('foo'), STATE.user.name → rx('user.name')
177
+ */
178
+ export const STATE = new Proxy({}, {
179
+ get(_target, prop) {
180
+ return rx(prop);
181
+ },
182
+ });
183
+ // ── Helpers ──────────────────────────────────────────────────────────────────
184
+ function formatOperand(v) {
185
+ if (v instanceof Rx)
186
+ return v.expression;
187
+ if (typeof v === 'string')
188
+ return `'${v}'`;
189
+ return String(v);
190
+ }
191
+ function formatPipeArg(v) {
192
+ if (typeof v === 'string')
193
+ return `'${v}'`;
194
+ return String(v);
195
+ }
196
+ //# sourceMappingURL=rx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rx.js","sourceRoot":"","sources":["../../src/rx/rx.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@maxhealth.tech/prefab",
3
+ "version": "0.1.2",
4
+ "description": "TypeScript declarative UI component library for MCP apps. Wire-compatible with Python prefab-ui.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./actions": {
15
+ "import": "./dist/actions/index.js",
16
+ "types": "./dist/actions/index.d.ts"
17
+ },
18
+ "./rx": {
19
+ "import": "./dist/rx/index.js",
20
+ "types": "./dist/rx/index.d.ts"
21
+ },
22
+ "./charts": {
23
+ "import": "./dist/components/charts/index.js",
24
+ "types": "./dist/components/charts/index.d.ts"
25
+ },
26
+ "./mcp": {
27
+ "import": "./dist/mcp/index.js",
28
+ "types": "./dist/mcp/index.d.ts"
29
+ },
30
+ "./renderer": {
31
+ "import": "./dist/renderer/index.js",
32
+ "types": "./dist/renderer/index.d.ts"
33
+ },
34
+ "./auto": {
35
+ "import": "./dist/auto/index.js",
36
+ "types": "./dist/auto/index.d.ts"
37
+ }
38
+ },
39
+ "sideEffects": false,
40
+ "files": [
41
+ "dist",
42
+ "README.md",
43
+ "LICENSE",
44
+ "CHANGELOG.md"
45
+ ],
46
+ "scripts": {
47
+ "build": "bun run scripts/build.ts",
48
+ "fixtures": "python test/fixtures/run_fixtures.py",
49
+ "pretest": "python test/fixtures/run_fixtures.py",
50
+ "test": "bun test",
51
+ "lint": "eslint src/ test/",
52
+ "lint:fix": "eslint src/ test/ --fix",
53
+ "typecheck": "tsc --noEmit",
54
+ "prepublishOnly": "bun run build"
55
+ },
56
+ "keywords": [
57
+ "mcp",
58
+ "prefab",
59
+ "ui",
60
+ "components",
61
+ "model-context-protocol",
62
+ "declarative-ui",
63
+ "fastmcp"
64
+ ],
65
+ "author": "Max Health Inc",
66
+ "license": "MIT",
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "https://github.com/Max-Health-Inc/prefab.git"
70
+ },
71
+ "devDependencies": {
72
+ "@eslint/js": "^10.0.1",
73
+ "@happy-dom/global-registrator": "^20.9.0",
74
+ "@types/bun": "^1.3.12",
75
+ "eslint": "^10.2.1",
76
+ "happy-dom": "^20.9.0",
77
+ "jiti": "^2.6.1",
78
+ "typescript": "^6.0.3",
79
+ "typescript-eslint": "^8.58.2"
80
+ },
81
+ "dependencies": {
82
+ "@modelcontextprotocol/ext-apps": "^1.6.0"
83
+ }
84
+ }