@portel/photon-core 2.3.0 → 2.5.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 (130) hide show
  1. package/dist/asset-discovery.d.ts +25 -0
  2. package/dist/asset-discovery.d.ts.map +1 -0
  3. package/dist/asset-discovery.js +145 -0
  4. package/dist/asset-discovery.js.map +1 -0
  5. package/dist/base.d.ts +6 -0
  6. package/dist/base.d.ts.map +1 -1
  7. package/dist/base.js +11 -1
  8. package/dist/base.js.map +1 -1
  9. package/dist/class-detection.d.ts +32 -0
  10. package/dist/class-detection.d.ts.map +1 -0
  11. package/dist/class-detection.js +86 -0
  12. package/dist/class-detection.js.map +1 -0
  13. package/dist/collections/ReactiveArray.d.ts +97 -0
  14. package/dist/collections/ReactiveArray.d.ts.map +1 -0
  15. package/dist/collections/ReactiveArray.js +158 -0
  16. package/dist/collections/ReactiveArray.js.map +1 -0
  17. package/dist/collections/ReactiveMap.d.ts +50 -0
  18. package/dist/collections/ReactiveMap.d.ts.map +1 -0
  19. package/dist/collections/ReactiveMap.js +71 -0
  20. package/dist/collections/ReactiveMap.js.map +1 -0
  21. package/dist/collections/ReactiveSet.d.ts +50 -0
  22. package/dist/collections/ReactiveSet.d.ts.map +1 -0
  23. package/dist/collections/ReactiveSet.js +71 -0
  24. package/dist/collections/ReactiveSet.js.map +1 -0
  25. package/dist/collections/index.d.ts +44 -0
  26. package/dist/collections/index.d.ts.map +1 -0
  27. package/dist/collections/index.js +44 -0
  28. package/dist/collections/index.js.map +1 -0
  29. package/dist/compiler.d.ts +22 -0
  30. package/dist/compiler.d.ts.map +1 -0
  31. package/dist/compiler.js +48 -0
  32. package/dist/compiler.js.map +1 -0
  33. package/dist/env-utils.d.ts +61 -0
  34. package/dist/env-utils.d.ts.map +1 -0
  35. package/dist/env-utils.js +171 -0
  36. package/dist/env-utils.js.map +1 -0
  37. package/dist/index.d.ts +9 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +37 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/mime-types.d.ts +13 -0
  42. package/dist/mime-types.d.ts.map +1 -0
  43. package/dist/mime-types.js +47 -0
  44. package/dist/mime-types.js.map +1 -0
  45. package/dist/rendering/index.d.ts +49 -0
  46. package/dist/rendering/index.d.ts.map +1 -1
  47. package/dist/rendering/index.js +153 -0
  48. package/dist/rendering/index.js.map +1 -1
  49. package/dist/schema-extractor.d.ts.map +1 -1
  50. package/dist/schema-extractor.js +3 -0
  51. package/dist/schema-extractor.js.map +1 -1
  52. package/dist/types.d.ts +4 -0
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/types.js.map +1 -1
  55. package/dist/ui-types/Cards.d.ts +139 -0
  56. package/dist/ui-types/Cards.d.ts.map +1 -0
  57. package/dist/ui-types/Cards.js +235 -0
  58. package/dist/ui-types/Cards.js.map +1 -0
  59. package/dist/ui-types/Chart.d.ts +136 -0
  60. package/dist/ui-types/Chart.d.ts.map +1 -0
  61. package/dist/ui-types/Chart.js +188 -0
  62. package/dist/ui-types/Chart.js.map +1 -0
  63. package/dist/ui-types/Field.d.ts +342 -0
  64. package/dist/ui-types/Field.d.ts.map +1 -0
  65. package/dist/ui-types/Field.js +200 -0
  66. package/dist/ui-types/Field.js.map +1 -0
  67. package/dist/ui-types/FieldRenderer.d.ts +32 -0
  68. package/dist/ui-types/FieldRenderer.d.ts.map +1 -0
  69. package/dist/ui-types/FieldRenderer.js +277 -0
  70. package/dist/ui-types/FieldRenderer.js.map +1 -0
  71. package/dist/ui-types/Form.d.ts +212 -0
  72. package/dist/ui-types/Form.d.ts.map +1 -0
  73. package/dist/ui-types/Form.js +278 -0
  74. package/dist/ui-types/Form.js.map +1 -0
  75. package/dist/ui-types/Progress.d.ts +130 -0
  76. package/dist/ui-types/Progress.d.ts.map +1 -0
  77. package/dist/ui-types/Progress.js +191 -0
  78. package/dist/ui-types/Progress.js.map +1 -0
  79. package/dist/ui-types/Stats.d.ts +108 -0
  80. package/dist/ui-types/Stats.d.ts.map +1 -0
  81. package/dist/ui-types/Stats.js +162 -0
  82. package/dist/ui-types/Stats.js.map +1 -0
  83. package/dist/ui-types/Table.d.ts +206 -0
  84. package/dist/ui-types/Table.d.ts.map +1 -0
  85. package/dist/ui-types/Table.js +367 -0
  86. package/dist/ui-types/Table.js.map +1 -0
  87. package/dist/ui-types/base.d.ts +17 -0
  88. package/dist/ui-types/base.d.ts.map +1 -0
  89. package/dist/ui-types/base.js +18 -0
  90. package/dist/ui-types/base.js.map +1 -0
  91. package/dist/ui-types/index.d.ts +42 -0
  92. package/dist/ui-types/index.d.ts.map +1 -0
  93. package/dist/ui-types/index.js +50 -0
  94. package/dist/ui-types/index.js.map +1 -0
  95. package/dist/validation.d.ts +51 -0
  96. package/dist/validation.d.ts.map +1 -0
  97. package/dist/validation.js +249 -0
  98. package/dist/validation.js.map +1 -0
  99. package/dist/version-check.d.ts +22 -0
  100. package/dist/version-check.d.ts.map +1 -0
  101. package/dist/version-check.js +91 -0
  102. package/dist/version-check.js.map +1 -0
  103. package/package.json +2 -2
  104. package/src/asset-discovery.ts +161 -0
  105. package/src/base.ts +13 -1
  106. package/src/class-detection.ts +94 -0
  107. package/src/collections/ReactiveArray.ts +179 -0
  108. package/src/collections/ReactiveMap.ts +81 -0
  109. package/src/collections/ReactiveSet.ts +81 -0
  110. package/src/collections/index.ts +44 -0
  111. package/src/compiler.ts +57 -0
  112. package/src/env-utils.ts +216 -0
  113. package/src/index.ts +155 -0
  114. package/src/mime-types.ts +49 -0
  115. package/src/rendering/index.ts +197 -0
  116. package/src/schema-extractor.ts +4 -0
  117. package/src/types.ts +4 -0
  118. package/src/ui-types/Cards.ts +286 -0
  119. package/src/ui-types/Chart.ts +239 -0
  120. package/src/ui-types/Field.ts +594 -0
  121. package/src/ui-types/FieldRenderer.ts +364 -0
  122. package/src/ui-types/Form.ts +363 -0
  123. package/src/ui-types/Progress.ts +237 -0
  124. package/src/ui-types/Stats.ts +204 -0
  125. package/src/ui-types/Table.ts +438 -0
  126. package/src/ui-types/base.ts +25 -0
  127. package/src/ui-types/index.ts +96 -0
  128. package/src/ui-types/ui-types.test.ts +444 -0
  129. package/src/validation.ts +363 -0
  130. package/src/version-check.ts +92 -0
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Progress - Purpose-driven type for progress indicators
3
+ *
4
+ * Automatically renders as progress bars or steps.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // Simple progress bar
9
+ * async uploadStatus() {
10
+ * return new Progress(75)
11
+ * .label('Uploading files...')
12
+ * .color('blue');
13
+ * }
14
+ *
15
+ * // Multiple progress bars
16
+ * async projectStatus() {
17
+ * return new Progress()
18
+ * .bar('Design', 100, { color: 'green' })
19
+ * .bar('Development', 65, { color: 'blue' })
20
+ * .bar('Testing', 20, { color: 'yellow' });
21
+ * }
22
+ *
23
+ * // Step indicator
24
+ * async checkoutSteps() {
25
+ * return new Progress('steps')
26
+ * .step('Cart', 'completed')
27
+ * .step('Shipping', 'current')
28
+ * .step('Payment', 'pending')
29
+ * .step('Confirm', 'pending');
30
+ * }
31
+ * ```
32
+ */
33
+ import { PhotonUIType } from './base.js';
34
+ export class Progress extends PhotonUIType {
35
+ _photonType = 'progress';
36
+ _bars = [];
37
+ _steps = [];
38
+ _value = 0;
39
+ _max = 100;
40
+ _options = {
41
+ style: 'bar',
42
+ size: 'md',
43
+ showValue: true,
44
+ animated: true,
45
+ };
46
+ /**
47
+ * Create a new Progress indicator
48
+ * @param valueOrStyle Initial value (0-100) or style ('steps', 'circle')
49
+ */
50
+ constructor(valueOrStyle) {
51
+ super();
52
+ if (typeof valueOrStyle === 'number') {
53
+ this._value = valueOrStyle;
54
+ }
55
+ else if (valueOrStyle) {
56
+ this._options.style = valueOrStyle;
57
+ }
58
+ }
59
+ /**
60
+ * Set progress value (0-100)
61
+ */
62
+ value(val, max) {
63
+ this._value = val;
64
+ if (max !== undefined)
65
+ this._max = max;
66
+ return this;
67
+ }
68
+ /**
69
+ * Set label
70
+ */
71
+ label(text) {
72
+ this._options.title = text;
73
+ return this;
74
+ }
75
+ /**
76
+ * Add a progress bar (for multi-bar display)
77
+ */
78
+ bar(label, value, options) {
79
+ this._bars.push({
80
+ label,
81
+ value,
82
+ max: options?.max ?? 100,
83
+ color: options?.color,
84
+ showValue: options?.showValue ?? true,
85
+ });
86
+ return this;
87
+ }
88
+ /**
89
+ * Add a step (for step indicator)
90
+ */
91
+ step(label, status = 'pending', options) {
92
+ this._options.style = 'steps';
93
+ this._steps.push({
94
+ label,
95
+ status,
96
+ ...options,
97
+ });
98
+ return this;
99
+ }
100
+ /**
101
+ * Set color
102
+ */
103
+ color(color) {
104
+ this._options.color = color;
105
+ return this;
106
+ }
107
+ /**
108
+ * Set size
109
+ */
110
+ size(size) {
111
+ this._options.size = size;
112
+ return this;
113
+ }
114
+ /**
115
+ * Use striped style
116
+ */
117
+ striped(enabled = true) {
118
+ this._options.striped = enabled;
119
+ return this;
120
+ }
121
+ /**
122
+ * Enable animation
123
+ */
124
+ animated(enabled = true) {
125
+ this._options.animated = enabled;
126
+ return this;
127
+ }
128
+ /**
129
+ * Show/hide value text
130
+ */
131
+ showValue(enabled = true) {
132
+ this._options.showValue = enabled;
133
+ return this;
134
+ }
135
+ /**
136
+ * Use circle style
137
+ */
138
+ circle() {
139
+ this._options.style = 'circle';
140
+ return this;
141
+ }
142
+ toJSON() {
143
+ return {
144
+ _photonType: this._photonType,
145
+ value: this._value,
146
+ max: this._max,
147
+ bars: this._bars,
148
+ steps: this._steps,
149
+ options: this._options,
150
+ };
151
+ }
152
+ /**
153
+ * Render as plain text for MCP clients
154
+ */
155
+ toString() {
156
+ const lines = [];
157
+ if (this._options.title) {
158
+ lines.push(this._options.title);
159
+ }
160
+ // Steps display
161
+ if (this._steps.length > 0) {
162
+ const stepMarkers = this._steps.map(s => {
163
+ switch (s.status) {
164
+ case 'completed': return `[✓] ${s.label}`;
165
+ case 'current': return `[●] ${s.label}`;
166
+ case 'error': return `[✗] ${s.label}`;
167
+ default: return `[ ] ${s.label}`;
168
+ }
169
+ });
170
+ lines.push(stepMarkers.join(' → '));
171
+ return lines.join('\n');
172
+ }
173
+ // Multiple bars
174
+ if (this._bars.length > 0) {
175
+ for (const bar of this._bars) {
176
+ const pct = Math.round((bar.value / (bar.max ?? 100)) * 100);
177
+ const filled = Math.round(pct / 5);
178
+ const barStr = '█'.repeat(filled) + '░'.repeat(20 - filled);
179
+ lines.push(`${bar.label}: [${barStr}] ${pct}%`);
180
+ }
181
+ return lines.join('\n');
182
+ }
183
+ // Single progress bar
184
+ const pct = Math.round((this._value / this._max) * 100);
185
+ const filled = Math.round(pct / 5);
186
+ const barStr = '█'.repeat(filled) + '░'.repeat(20 - filled);
187
+ lines.push(`[${barStr}] ${pct}%`);
188
+ return lines.join('\n');
189
+ }
190
+ }
191
+ //# sourceMappingURL=Progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.js","sourceRoot":"","sources":["../../src/ui-types/Progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Stats - Purpose-driven type for key metrics/KPIs
3
+ *
4
+ * Automatically renders as a dashboard-style stats display.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * async overview() {
9
+ * return new Stats()
10
+ * .stat('Users', 1234, { trend: '+12%', trendUp: true })
11
+ * .stat('Revenue', 50000, { format: 'currency', prefix: '$' })
12
+ * .stat('Orders', 89, { suffix: 'today' })
13
+ * .stat('Conversion', 3.2, { format: 'percent' });
14
+ * }
15
+ * ```
16
+ */
17
+ import { PhotonUIType } from './base.js';
18
+ export type StatFormat = 'number' | 'currency' | 'percent' | 'compact';
19
+ export interface StatItem {
20
+ label: string;
21
+ value: number | string;
22
+ format?: StatFormat;
23
+ prefix?: string;
24
+ suffix?: string;
25
+ trend?: string;
26
+ trendUp?: boolean;
27
+ icon?: string;
28
+ color?: string;
29
+ description?: string;
30
+ }
31
+ export interface StatsOptions {
32
+ title?: string;
33
+ columns?: 2 | 3 | 4 | 6;
34
+ compact?: boolean;
35
+ bordered?: boolean;
36
+ animated?: boolean;
37
+ }
38
+ export declare class Stats extends PhotonUIType {
39
+ readonly _photonType: "stats";
40
+ private _stats;
41
+ private _options;
42
+ /**
43
+ * Create a new Stats display
44
+ */
45
+ constructor();
46
+ /**
47
+ * Add a stat
48
+ */
49
+ stat(label: string, value: number | string, options?: Partial<Omit<StatItem, 'label' | 'value'>>): this;
50
+ /**
51
+ * Add a currency stat
52
+ */
53
+ currency(label: string, value: number, options?: {
54
+ prefix?: string;
55
+ trend?: string;
56
+ trendUp?: boolean;
57
+ }): this;
58
+ /**
59
+ * Add a percentage stat
60
+ */
61
+ percent(label: string, value: number, options?: {
62
+ trend?: string;
63
+ trendUp?: boolean;
64
+ }): this;
65
+ /**
66
+ * Add a count stat with compact formatting (1.2K, 5M, etc.)
67
+ */
68
+ count(label: string, value: number, options?: {
69
+ trend?: string;
70
+ trendUp?: boolean;
71
+ suffix?: string;
72
+ }): this;
73
+ /**
74
+ * Set section title
75
+ */
76
+ title(title: string): this;
77
+ /**
78
+ * Set number of columns
79
+ */
80
+ columns(count: 2 | 3 | 4 | 6): this;
81
+ /**
82
+ * Use compact layout
83
+ */
84
+ compact(enabled?: boolean): this;
85
+ /**
86
+ * Show borders
87
+ */
88
+ bordered(enabled?: boolean): this;
89
+ /**
90
+ * Enable count-up animation
91
+ */
92
+ animated(enabled?: boolean): this;
93
+ /**
94
+ * Get stat count
95
+ */
96
+ get length(): number;
97
+ toJSON(): {
98
+ _photonType: "stats";
99
+ stats: StatItem[];
100
+ options: StatsOptions;
101
+ };
102
+ /**
103
+ * Render as plain text for MCP clients
104
+ */
105
+ toString(): string;
106
+ private _formatCompact;
107
+ }
108
+ //# sourceMappingURL=Stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stats.d.ts","sourceRoot":"","sources":["../../src/ui-types/Stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,KAAM,SAAQ,YAAY;IACrC,QAAQ,CAAC,WAAW,EAAG,OAAO,CAAU;IAExC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAId;IAEF;;OAEG;;IAKH;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI;IASvG;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAS9G;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAQ5F;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAO3G;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;IAKnC;;OAEG;IACH,OAAO,CAAC,OAAO,GAAE,OAAc,GAAG,IAAI;IAKtC;;OAEG;IACH,QAAQ,CAAC,OAAO,GAAE,OAAc,GAAG,IAAI;IAKvC;;OAEG;IACH,QAAQ,CAAC,OAAO,GAAE,OAAc,GAAG,IAAI;IAKvC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,MAAM;;;;;IAQN;;OAEG;IACH,QAAQ,IAAI,MAAM;IAoClB,OAAO,CAAC,cAAc;CAKvB"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Stats - Purpose-driven type for key metrics/KPIs
3
+ *
4
+ * Automatically renders as a dashboard-style stats display.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * async overview() {
9
+ * return new Stats()
10
+ * .stat('Users', 1234, { trend: '+12%', trendUp: true })
11
+ * .stat('Revenue', 50000, { format: 'currency', prefix: '$' })
12
+ * .stat('Orders', 89, { suffix: 'today' })
13
+ * .stat('Conversion', 3.2, { format: 'percent' });
14
+ * }
15
+ * ```
16
+ */
17
+ import { PhotonUIType } from './base.js';
18
+ export class Stats extends PhotonUIType {
19
+ _photonType = 'stats';
20
+ _stats = [];
21
+ _options = {
22
+ columns: 4,
23
+ bordered: true,
24
+ animated: true,
25
+ };
26
+ /**
27
+ * Create a new Stats display
28
+ */
29
+ constructor() {
30
+ super();
31
+ }
32
+ /**
33
+ * Add a stat
34
+ */
35
+ stat(label, value, options) {
36
+ this._stats.push({
37
+ label,
38
+ value,
39
+ ...options,
40
+ });
41
+ return this;
42
+ }
43
+ /**
44
+ * Add a currency stat
45
+ */
46
+ currency(label, value, options) {
47
+ return this.stat(label, value, {
48
+ format: 'currency',
49
+ prefix: options?.prefix ?? '$',
50
+ trend: options?.trend,
51
+ trendUp: options?.trendUp,
52
+ });
53
+ }
54
+ /**
55
+ * Add a percentage stat
56
+ */
57
+ percent(label, value, options) {
58
+ return this.stat(label, value, {
59
+ format: 'percent',
60
+ suffix: '%',
61
+ ...options,
62
+ });
63
+ }
64
+ /**
65
+ * Add a count stat with compact formatting (1.2K, 5M, etc.)
66
+ */
67
+ count(label, value, options) {
68
+ return this.stat(label, value, {
69
+ format: 'compact',
70
+ ...options,
71
+ });
72
+ }
73
+ /**
74
+ * Set section title
75
+ */
76
+ title(title) {
77
+ this._options.title = title;
78
+ return this;
79
+ }
80
+ /**
81
+ * Set number of columns
82
+ */
83
+ columns(count) {
84
+ this._options.columns = count;
85
+ return this;
86
+ }
87
+ /**
88
+ * Use compact layout
89
+ */
90
+ compact(enabled = true) {
91
+ this._options.compact = enabled;
92
+ return this;
93
+ }
94
+ /**
95
+ * Show borders
96
+ */
97
+ bordered(enabled = true) {
98
+ this._options.bordered = enabled;
99
+ return this;
100
+ }
101
+ /**
102
+ * Enable count-up animation
103
+ */
104
+ animated(enabled = true) {
105
+ this._options.animated = enabled;
106
+ return this;
107
+ }
108
+ /**
109
+ * Get stat count
110
+ */
111
+ get length() {
112
+ return this._stats.length;
113
+ }
114
+ toJSON() {
115
+ return {
116
+ _photonType: this._photonType,
117
+ stats: this._stats,
118
+ options: this._options,
119
+ };
120
+ }
121
+ /**
122
+ * Render as plain text for MCP clients
123
+ */
124
+ toString() {
125
+ const lines = [];
126
+ if (this._options.title) {
127
+ lines.push(`## ${this._options.title}`, '');
128
+ }
129
+ for (const stat of this._stats) {
130
+ let value = String(stat.value);
131
+ // Format value
132
+ if (stat.format === 'currency' || stat.prefix) {
133
+ value = (stat.prefix ?? '$') + value;
134
+ }
135
+ if (stat.format === 'percent' || stat.suffix === '%') {
136
+ value = value + '%';
137
+ }
138
+ else if (stat.suffix) {
139
+ value = value + ' ' + stat.suffix;
140
+ }
141
+ if (stat.format === 'compact' && typeof stat.value === 'number') {
142
+ value = this._formatCompact(stat.value);
143
+ }
144
+ // Add trend
145
+ let line = `**${stat.label}**: ${value}`;
146
+ if (stat.trend) {
147
+ const arrow = stat.trendUp ? '↑' : stat.trendUp === false ? '↓' : '';
148
+ line += ` (${arrow}${stat.trend})`;
149
+ }
150
+ lines.push(line);
151
+ }
152
+ return lines.join('\n');
153
+ }
154
+ _formatCompact(num) {
155
+ if (num >= 1_000_000)
156
+ return (num / 1_000_000).toFixed(1) + 'M';
157
+ if (num >= 1_000)
158
+ return (num / 1_000).toFixed(1) + 'K';
159
+ return String(num);
160
+ }
161
+ }
162
+ //# sourceMappingURL=Stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stats.js","sourceRoot":"","sources":["../../src/ui-types/Stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Table - Purpose-driven type for tabular data
3
+ *
4
+ * Automatically renders as a table UI with sorting, filtering, etc.
5
+ *
6
+ * @example Basic usage
7
+ * ```typescript
8
+ * async users() {
9
+ * return new Table()
10
+ * .column('name', 'Name', 'string')
11
+ * .column('email', 'Email', 'string')
12
+ * .rows(users);
13
+ * }
14
+ * ```
15
+ *
16
+ * @example With Field system (React Admin-style)
17
+ * ```typescript
18
+ * async products() {
19
+ * return new Table()
20
+ * .fields([
21
+ * Field.image('thumbnail', { width: 60, rounded: true }),
22
+ * Field.text('name', { link: '/products/{id}' }),
23
+ * Field.price('price', { originalSource: 'msrp', currency: 'USD' }),
24
+ * Field.rating('rating', { countSource: 'reviewCount' }),
25
+ * Field.badge('status', { colors: { active: 'green', draft: 'gray' } }),
26
+ * Field.actions([
27
+ * { label: 'Edit', method: 'edit', icon: 'pencil' },
28
+ * { label: 'Delete', method: 'delete', confirm: true },
29
+ * ]),
30
+ * ])
31
+ * .rows(products);
32
+ * }
33
+ * ```
34
+ */
35
+ import { PhotonUIType } from './base.js';
36
+ import { FieldDefinition, Field } from './Field.js';
37
+ export type ColumnType = 'string' | 'number' | 'boolean' | 'date' | 'currency' | 'link' | 'image' | 'badge';
38
+ export interface TableColumn {
39
+ key: string;
40
+ label: string;
41
+ type: ColumnType;
42
+ sortable?: boolean;
43
+ width?: string;
44
+ align?: 'left' | 'center' | 'right';
45
+ format?: string;
46
+ }
47
+ export interface TableOptions {
48
+ title?: string;
49
+ searchable?: boolean;
50
+ sortable?: boolean;
51
+ paginated?: boolean;
52
+ pageSize?: number;
53
+ selectable?: boolean;
54
+ striped?: boolean;
55
+ compact?: boolean;
56
+ }
57
+ export declare class Table extends PhotonUIType {
58
+ readonly _photonType: "table";
59
+ private _columns;
60
+ private _fields;
61
+ private _rows;
62
+ private _options;
63
+ /**
64
+ * Create a new Table
65
+ * @param data Optional initial data (array of objects)
66
+ */
67
+ constructor(data?: Record<string, any>[]);
68
+ /**
69
+ * Add a column definition
70
+ */
71
+ column(key: string, label: string, type?: ColumnType, options?: Partial<TableColumn>): this;
72
+ /**
73
+ * Add multiple columns at once
74
+ */
75
+ columns(cols: Array<[key: string, label: string, type?: ColumnType] | TableColumn>): this;
76
+ /**
77
+ * Add fields using the Field system
78
+ */
79
+ fields(fieldDefs: FieldDefinition[]): this;
80
+ /**
81
+ * Add a single field
82
+ */
83
+ field(fieldDef: FieldDefinition): this;
84
+ /** Add text field */
85
+ text(source: string, options?: Parameters<typeof Field.text>[1]): this;
86
+ /** Add email field */
87
+ email(source: string, options?: Parameters<typeof Field.email>[1]): this;
88
+ /** Add URL field */
89
+ url(source: string, options?: Parameters<typeof Field.url>[1]): this;
90
+ /** Add phone field */
91
+ phone(source: string, options?: Parameters<typeof Field.phone>[1]): this;
92
+ /** Add number field */
93
+ number(source: string, options?: Parameters<typeof Field.number>[1]): this;
94
+ /** Add currency field */
95
+ currency(source: string, options?: Parameters<typeof Field.currency>[1]): this;
96
+ /** Add percent field */
97
+ percent(source: string, options?: Parameters<typeof Field.percent>[1]): this;
98
+ /** Add date field */
99
+ date(source: string, options?: Parameters<typeof Field.date>[1]): this;
100
+ /** Add datetime field */
101
+ datetime(source: string, options?: Parameters<typeof Field.datetime>[1]): this;
102
+ /** Add boolean field */
103
+ boolean(source: string, options?: Parameters<typeof Field.boolean>[1]): this;
104
+ /** Add image field */
105
+ image(source: string, options?: Parameters<typeof Field.image>[1]): this;
106
+ /** Add avatar field */
107
+ avatar(source: string, options?: Parameters<typeof Field.avatar>[1]): this;
108
+ /** Add badge field */
109
+ badge(source: string, options?: Parameters<typeof Field.badge>[1]): this;
110
+ /** Add tags field */
111
+ tags(source: string, options?: Parameters<typeof Field.tags>[1]): this;
112
+ /** Add rating field */
113
+ rating(source: string, options?: Parameters<typeof Field.rating>[1]): this;
114
+ /** Add price field */
115
+ price(source: string, options?: Parameters<typeof Field.price>[1]): this;
116
+ /** Add stock field */
117
+ stock(source: string, options?: Parameters<typeof Field.stock>[1]): this;
118
+ /** Add user field */
119
+ user(source: string, options?: Parameters<typeof Field.user>[1]): this;
120
+ /** Add reference field */
121
+ reference(source: string, options?: Parameters<typeof Field.reference>[1]): this;
122
+ /** Add actions field */
123
+ actions(items: Parameters<typeof Field.actions>[0], options?: Parameters<typeof Field.actions>[1]): this;
124
+ /** Add custom field */
125
+ custom(source: string, render: Parameters<typeof Field.custom>[1], options?: Parameters<typeof Field.custom>[2]): this;
126
+ /**
127
+ * Set the table rows
128
+ */
129
+ rows(data: Record<string, any>[]): this;
130
+ /**
131
+ * Add a single row
132
+ */
133
+ row(data: Record<string, any>): this;
134
+ /**
135
+ * Set table title
136
+ */
137
+ title(title: string): this;
138
+ /**
139
+ * Enable/disable search
140
+ */
141
+ searchable(enabled?: boolean): this;
142
+ /**
143
+ * Enable/disable sorting
144
+ */
145
+ sortable(enabled?: boolean): this;
146
+ /**
147
+ * Enable pagination
148
+ */
149
+ paginated(pageSize?: number): this;
150
+ /**
151
+ * Enable row selection
152
+ */
153
+ selectable(enabled?: boolean): this;
154
+ /**
155
+ * Use striped rows
156
+ */
157
+ striped(enabled?: boolean): this;
158
+ /**
159
+ * Use compact layout
160
+ */
161
+ compact(enabled?: boolean): this;
162
+ /**
163
+ * Infer columns from a data row
164
+ */
165
+ private _inferColumns;
166
+ /**
167
+ * Infer column type from value
168
+ */
169
+ private _inferType;
170
+ /**
171
+ * Format key to human-readable label
172
+ */
173
+ private _formatLabel;
174
+ /**
175
+ * Get row count
176
+ */
177
+ get length(): number;
178
+ /**
179
+ * Check if table is empty
180
+ */
181
+ get isEmpty(): boolean;
182
+ /**
183
+ * Check if using Field system or legacy columns
184
+ */
185
+ private get _useFields();
186
+ /**
187
+ * Get effective headers for display
188
+ */
189
+ private _getHeaders;
190
+ /**
191
+ * Get cell values for a row
192
+ */
193
+ private _getCells;
194
+ toJSON(): {
195
+ _photonType: "table";
196
+ columns: TableColumn[];
197
+ fields: FieldDefinition[];
198
+ rows: Record<string, any>[];
199
+ options: TableOptions;
200
+ };
201
+ /**
202
+ * Render as plain text/markdown for MCP clients
203
+ */
204
+ toString(): string;
205
+ }
206
+ //# sourceMappingURL=Table.d.ts.map