@portel/photon 1.17.6 → 1.19.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 (194) hide show
  1. package/dist/auto-ui/beam/photon-management.d.ts.map +1 -1
  2. package/dist/auto-ui/beam/photon-management.js +28 -1
  3. package/dist/auto-ui/beam/photon-management.js.map +1 -1
  4. package/dist/auto-ui/beam/routes/api-marketplace.d.ts.map +1 -1
  5. package/dist/auto-ui/beam/routes/api-marketplace.js +10 -5
  6. package/dist/auto-ui/beam/routes/api-marketplace.js.map +1 -1
  7. package/dist/auto-ui/beam.d.ts.map +1 -1
  8. package/dist/auto-ui/beam.js +14 -4
  9. package/dist/auto-ui/beam.js.map +1 -1
  10. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  11. package/dist/auto-ui/streamable-http-transport.js +259 -88
  12. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  13. package/dist/auto-ui/types.d.ts +2 -0
  14. package/dist/auto-ui/types.d.ts.map +1 -1
  15. package/dist/auto-ui/types.js +5 -0
  16. package/dist/auto-ui/types.js.map +1 -1
  17. package/dist/beam-form.bundle.js +5 -3
  18. package/dist/beam-form.bundle.js.map +2 -2
  19. package/dist/beam.bundle.js +912 -59
  20. package/dist/beam.bundle.js.map +3 -3
  21. package/dist/claude-code-plugin.js +1 -1
  22. package/dist/cli/commands/beam.d.ts.map +1 -1
  23. package/dist/cli/commands/beam.js +8 -2
  24. package/dist/cli/commands/beam.js.map +1 -1
  25. package/dist/cli/commands/changelog.d.ts +9 -0
  26. package/dist/cli/commands/changelog.d.ts.map +1 -0
  27. package/dist/cli/commands/changelog.js +133 -0
  28. package/dist/cli/commands/changelog.js.map +1 -0
  29. package/dist/cli/commands/maker.d.ts.map +1 -1
  30. package/dist/cli/commands/maker.js +23 -2
  31. package/dist/cli/commands/maker.js.map +1 -1
  32. package/dist/cli/commands/mcp.d.ts.map +1 -1
  33. package/dist/cli/commands/mcp.js +53 -0
  34. package/dist/cli/commands/mcp.js.map +1 -1
  35. package/dist/cli/commands/package.d.ts.map +1 -1
  36. package/dist/cli/commands/package.js +18 -2
  37. package/dist/cli/commands/package.js.map +1 -1
  38. package/dist/cli/commands/run.d.ts.map +1 -1
  39. package/dist/cli/commands/run.js +1 -0
  40. package/dist/cli/commands/run.js.map +1 -1
  41. package/dist/cli/commands/update.d.ts +3 -2
  42. package/dist/cli/commands/update.d.ts.map +1 -1
  43. package/dist/cli/commands/update.js +50 -43
  44. package/dist/cli/commands/update.js.map +1 -1
  45. package/dist/cli/index.d.ts.map +1 -1
  46. package/dist/cli/index.js +16 -2
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/cli-alias.js +1 -1
  49. package/dist/cli-alias.js.map +1 -1
  50. package/dist/context-store.d.ts +23 -33
  51. package/dist/context-store.d.ts.map +1 -1
  52. package/dist/context-store.js +147 -97
  53. package/dist/context-store.js.map +1 -1
  54. package/dist/context.d.ts +15 -10
  55. package/dist/context.d.ts.map +1 -1
  56. package/dist/context.js +37 -13
  57. package/dist/context.js.map +1 -1
  58. package/dist/daemon/server.js +4 -2
  59. package/dist/daemon/server.js.map +1 -1
  60. package/dist/data-migration.d.ts +27 -0
  61. package/dist/data-migration.d.ts.map +1 -0
  62. package/dist/data-migration.js +307 -0
  63. package/dist/data-migration.js.map +1 -0
  64. package/dist/editor-support/docblock-tag-catalog.d.ts.map +1 -1
  65. package/dist/editor-support/docblock-tag-catalog.js +6 -0
  66. package/dist/editor-support/docblock-tag-catalog.js.map +1 -1
  67. package/dist/loader.d.ts +10 -0
  68. package/dist/loader.d.ts.map +1 -1
  69. package/dist/loader.js +106 -20
  70. package/dist/loader.js.map +1 -1
  71. package/dist/marketplace-manager.d.ts.map +1 -1
  72. package/dist/marketplace-manager.js +25 -5
  73. package/dist/marketplace-manager.js.map +1 -1
  74. package/dist/photon-cli-runner.d.ts.map +1 -1
  75. package/dist/photon-cli-runner.js +56 -19
  76. package/dist/photon-cli-runner.js.map +1 -1
  77. package/dist/photon-doc-extractor.d.ts +1 -0
  78. package/dist/photon-doc-extractor.d.ts.map +1 -1
  79. package/dist/photon-doc-extractor.js +6 -0
  80. package/dist/photon-doc-extractor.js.map +1 -1
  81. package/dist/readme-syncer.d.ts.map +1 -1
  82. package/dist/readme-syncer.js +6 -1
  83. package/dist/readme-syncer.js.map +1 -1
  84. package/dist/server.d.ts +40 -0
  85. package/dist/server.d.ts.map +1 -1
  86. package/dist/server.js +298 -29
  87. package/dist/server.js.map +1 -1
  88. package/dist/shared/audit.js +4 -4
  89. package/dist/shared/audit.js.map +1 -1
  90. package/dist/tasks/executor.d.ts +47 -0
  91. package/dist/tasks/executor.d.ts.map +1 -0
  92. package/dist/tasks/executor.js +180 -0
  93. package/dist/tasks/executor.js.map +1 -0
  94. package/dist/tasks/store.d.ts +13 -6
  95. package/dist/tasks/store.d.ts.map +1 -1
  96. package/dist/tasks/store.js +56 -11
  97. package/dist/tasks/store.js.map +1 -1
  98. package/dist/tasks/types.d.ts +23 -2
  99. package/dist/tasks/types.d.ts.map +1 -1
  100. package/dist/tasks/types.js +23 -3
  101. package/dist/tasks/types.js.map +1 -1
  102. package/dist/version-notify.d.ts +27 -0
  103. package/dist/version-notify.d.ts.map +1 -0
  104. package/dist/version-notify.js +142 -0
  105. package/dist/version-notify.js.map +1 -0
  106. package/package.json +5 -4
  107. package/dist/auto-ui/bridge/openai-shim.d.ts +0 -20
  108. package/dist/auto-ui/bridge/openai-shim.d.ts.map +0 -1
  109. package/dist/auto-ui/bridge/openai-shim.js +0 -231
  110. package/dist/auto-ui/bridge/openai-shim.js.map +0 -1
  111. package/dist/auto-ui/bridge/photon-app.d.ts +0 -162
  112. package/dist/auto-ui/bridge/photon-app.d.ts.map +0 -1
  113. package/dist/auto-ui/bridge/photon-app.js +0 -460
  114. package/dist/auto-ui/bridge/photon-app.js.map +0 -1
  115. package/dist/auto-ui/daemon-tools.d.ts +0 -45
  116. package/dist/auto-ui/daemon-tools.d.ts.map +0 -1
  117. package/dist/auto-ui/daemon-tools.js +0 -581
  118. package/dist/auto-ui/daemon-tools.js.map +0 -1
  119. package/dist/auto-ui/design-system/index.d.ts +0 -21
  120. package/dist/auto-ui/design-system/index.d.ts.map +0 -1
  121. package/dist/auto-ui/design-system/index.js +0 -27
  122. package/dist/auto-ui/design-system/index.js.map +0 -1
  123. package/dist/auto-ui/design-system/transaction-ui.d.ts +0 -70
  124. package/dist/auto-ui/design-system/transaction-ui.d.ts.map +0 -1
  125. package/dist/auto-ui/design-system/transaction-ui.js +0 -982
  126. package/dist/auto-ui/design-system/transaction-ui.js.map +0 -1
  127. package/dist/auto-ui/playground-server.d.ts +0 -7
  128. package/dist/auto-ui/playground-server.d.ts.map +0 -1
  129. package/dist/auto-ui/playground-server.js +0 -840
  130. package/dist/auto-ui/playground-server.js.map +0 -1
  131. package/dist/auto-ui/rendering/components.d.ts +0 -29
  132. package/dist/auto-ui/rendering/components.d.ts.map +0 -1
  133. package/dist/auto-ui/rendering/components.js +0 -1341
  134. package/dist/auto-ui/rendering/components.js.map +0 -1
  135. package/dist/auto-ui/rendering/field-analyzer.d.ts +0 -104
  136. package/dist/auto-ui/rendering/field-analyzer.d.ts.map +0 -1
  137. package/dist/auto-ui/rendering/field-analyzer.js +0 -447
  138. package/dist/auto-ui/rendering/field-analyzer.js.map +0 -1
  139. package/dist/auto-ui/rendering/field-renderers.d.ts +0 -64
  140. package/dist/auto-ui/rendering/field-renderers.d.ts.map +0 -1
  141. package/dist/auto-ui/rendering/field-renderers.js +0 -317
  142. package/dist/auto-ui/rendering/field-renderers.js.map +0 -1
  143. package/dist/auto-ui/rendering/index.d.ts +0 -28
  144. package/dist/auto-ui/rendering/index.d.ts.map +0 -1
  145. package/dist/auto-ui/rendering/index.js +0 -60
  146. package/dist/auto-ui/rendering/index.js.map +0 -1
  147. package/dist/auto-ui/rendering/layout-selector.d.ts +0 -60
  148. package/dist/auto-ui/rendering/layout-selector.d.ts.map +0 -1
  149. package/dist/auto-ui/rendering/layout-selector.js +0 -476
  150. package/dist/auto-ui/rendering/layout-selector.js.map +0 -1
  151. package/dist/markdown-utils.d.ts +0 -8
  152. package/dist/markdown-utils.d.ts.map +0 -1
  153. package/dist/markdown-utils.js +0 -64
  154. package/dist/markdown-utils.js.map +0 -1
  155. package/dist/mcp-client.d.ts +0 -9
  156. package/dist/mcp-client.d.ts.map +0 -1
  157. package/dist/mcp-client.js +0 -11
  158. package/dist/mcp-client.js.map +0 -1
  159. package/dist/mcp-elicitation.d.ts +0 -32
  160. package/dist/mcp-elicitation.d.ts.map +0 -1
  161. package/dist/mcp-elicitation.js +0 -26
  162. package/dist/mcp-elicitation.js.map +0 -1
  163. package/dist/photons/builder-compass.photon.d.ts +0 -167
  164. package/dist/photons/builder-compass.photon.d.ts.map +0 -1
  165. package/dist/photons/builder-compass.photon.js +0 -816
  166. package/dist/photons/builder-compass.photon.js.map +0 -1
  167. package/dist/photons/builder-compass.photon.ts +0 -1129
  168. package/dist/photons/docs/ui/docs.html +0 -441
  169. package/dist/photons/docs.photon.d.ts +0 -237
  170. package/dist/photons/docs.photon.d.ts.map +0 -1
  171. package/dist/photons/docs.photon.js +0 -483
  172. package/dist/photons/docs.photon.js.map +0 -1
  173. package/dist/photons/docs.photon.ts +0 -536
  174. package/dist/photons/slides.photon.d.ts +0 -212
  175. package/dist/photons/slides.photon.d.ts.map +0 -1
  176. package/dist/photons/slides.photon.js +0 -355
  177. package/dist/photons/slides.photon.js.map +0 -1
  178. package/dist/photons/slides.photon.ts +0 -370
  179. package/dist/photons/spreadsheet/ui/spreadsheet.html +0 -779
  180. package/dist/photons/spreadsheet.photon.d.ts +0 -554
  181. package/dist/photons/spreadsheet.photon.d.ts.map +0 -1
  182. package/dist/photons/spreadsheet.photon.js +0 -1050
  183. package/dist/photons/spreadsheet.photon.js.map +0 -1
  184. package/dist/photons/spreadsheet.photon.ts +0 -1239
  185. package/dist/photons/ui/builder-compass.html +0 -1199
  186. package/dist/photons/ui/builder-compass.photon.html +0 -380
  187. package/dist/security-scanner.d.ts +0 -52
  188. package/dist/security-scanner.d.ts.map +0 -1
  189. package/dist/security-scanner.js +0 -181
  190. package/dist/security-scanner.js.map +0 -1
  191. package/dist/shared/performance.d.ts +0 -65
  192. package/dist/shared/performance.d.ts.map +0 -1
  193. package/dist/shared/performance.js +0 -136
  194. package/dist/shared/performance.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/auto-ui/rendering/components.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsrBR,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+mBR,CAAC;AACF,CAAC"}
@@ -1,104 +0,0 @@
1
- /**
2
- * Field Analyzer - Smart detection of field semantics
3
- *
4
- * Analyzes object fields to determine their semantic meaning
5
- * for automatic UI rendering (iOS/React Admin inspired).
6
- */
7
- export interface FieldMapping {
8
- title?: string;
9
- subtitle?: string;
10
- icon?: string;
11
- badge?: string;
12
- detail?: string;
13
- link?: string;
14
- id?: string;
15
- date?: string;
16
- boolean?: string;
17
- remaining: string[];
18
- }
19
- export interface FieldTypeHint {
20
- field: string;
21
- type: 'email' | 'url' | 'date' | 'currency' | 'boolean' | 'code' | 'image' | 'text';
22
- }
23
- /**
24
- * Analyze an object's fields to determine semantic mapping
25
- */
26
- export declare function analyzeFields(data: object | object[]): FieldMapping;
27
- /**
28
- * Detect field types from sample values
29
- */
30
- export declare function detectFieldTypes(data: object | object[]): FieldTypeHint[];
31
- /**
32
- * Check if a field value looks like an image URL or emoji
33
- */
34
- export declare function isVisualField(value: any): boolean;
35
- /**
36
- * Format a field name as a human-readable label
37
- * camelCase -> Title Case, snake_case -> Title Case
38
- */
39
- export declare function formatFieldLabel(field: string): string;
40
- /**
41
- * Get the best display value for a field
42
- */
43
- export declare function getDisplayValue(value: any, typeHint?: string): string;
44
- /**
45
- * Count numeric fields in an object
46
- */
47
- export declare function countNumericFields(obj: object): number;
48
- /**
49
- * Check if object has date-like fields (by name or value)
50
- */
51
- export declare function hasDateFields(obj: object): boolean;
52
- /**
53
- * Check if object has numeric fields
54
- */
55
- export declare function hasNumericFields(obj: object): boolean;
56
- /**
57
- * Get the names of string fields in an object
58
- */
59
- export declare function getStringFields(obj: object): string[];
60
- /**
61
- * Get the names of numeric fields in an object
62
- */
63
- export declare function getNumericFields(obj: object): string[];
64
- /**
65
- * Get date field names from an object (by name pattern or ISO value)
66
- */
67
- export declare function getDateFields(obj: object): string[];
68
- /**
69
- * Check if data looks like a single metric (KPI)
70
- * Patterns: { value: 1234 }, { value: 1234, label: "Users" }, { value: 1234, delta: "+12%" }
71
- */
72
- export declare function isMetricShaped(data: any): boolean;
73
- /**
74
- * Check if data looks like a gauge value
75
- * Patterns: { value: 73, max: 100 }, { progress: 0.73 }
76
- */
77
- export declare function isGaugeShaped(data: any): boolean;
78
- /**
79
- * Check if array data is chart-shaped
80
- * Conservative: only returns true for clearly chart-like data
81
- */
82
- export declare function isChartShaped(data: any[]): boolean;
83
- /**
84
- * Check if array data is timeline-shaped
85
- * Requires: date field + title/event/description field, 3+ items
86
- */
87
- export declare function isTimelineShaped(data: any[]): boolean;
88
- /**
89
- * Check if object data is dashboard-shaped
90
- * Object where values are a mix of metrics, arrays, and objects (3+ keys)
91
- */
92
- export declare function isDashboardShaped(data: any): boolean;
93
- /**
94
- * Check if data looks like a shopping cart
95
- * Patterns:
96
- * - Array where all items have price + (quantity | qty)
97
- * - Object with items array where items have price + (quantity | qty)
98
- */
99
- export declare function isCartShaped(data: any): boolean;
100
- /**
101
- * Generate JavaScript code for field analyzer (to embed in HTML)
102
- */
103
- export declare function generateFieldAnalyzerJS(): string;
104
- //# sourceMappingURL=field-analyzer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-analyzer.d.ts","sourceRoot":"","sources":["../../../src/auto-ui/rendering/field-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CACrF;AAyBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,YAAY,CAgCnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,aAAa,EAAE,CA4CzE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAajD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBrE;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMlD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAItD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAQnD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAYjD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAQhD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAmBlD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAerD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAqBpD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CA0B/C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAuGhD"}
@@ -1,447 +0,0 @@
1
- /**
2
- * Field Analyzer - Smart detection of field semantics
3
- *
4
- * Analyzes object fields to determine their semantic meaning
5
- * for automatic UI rendering (iOS/React Admin inspired).
6
- */
7
- // Patterns for semantic field detection
8
- const FIELD_PATTERNS = {
9
- title: /^(name|title|label|displayName|heading|subject)$/i,
10
- subtitle: /^(description|subtitle|summary|bio|about|tagline|ip|address|host|hostname|endpoint)$/i,
11
- icon: /^(icon|avatar|image|photo|thumbnail|picture|logo)$/i,
12
- badge: /^(status|state|type|role|category|kind|tag|level)$/i,
13
- detail: /^(count|total|amount|price|value|size|quantity|score)$/i,
14
- link: /^(url|link|href|website|homepage|uri)$/i,
15
- id: /^(id|key|code|uuid|slug|_id)$/i,
16
- date: /^(date|time|createdAt|updatedAt|created|updated|timestamp|.*At|.*Date|.*Time)$/i,
17
- boolean: /^(is[A-Z]|has[A-Z]|can[A-Z]|should[A-Z]|enabled|disabled|active|visible|checked|selected)$/i,
18
- };
19
- // Patterns for type detection from field values
20
- const VALUE_PATTERNS = {
21
- email: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
22
- url: /^(https?:\/\/|www\.)/i,
23
- isoDate: /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2})?/,
24
- currency: /^\$?\d+(\.\d{2})?$/,
25
- image: /\.(jpg|jpeg|png|gif|webp|svg|ico)(\?.*)?$/i,
26
- };
27
- /**
28
- * Analyze an object's fields to determine semantic mapping
29
- */
30
- export function analyzeFields(data) {
31
- const sample = Array.isArray(data) ? data[0] : data;
32
- if (!sample || typeof sample !== 'object') {
33
- return { remaining: [] };
34
- }
35
- const fields = Object.keys(sample);
36
- const mapping = { remaining: [] };
37
- const assigned = new Set();
38
- // First pass: match by field name patterns
39
- for (const [slot, pattern] of Object.entries(FIELD_PATTERNS)) {
40
- const match = fields.find((f) => pattern.test(f) && !assigned.has(f));
41
- if (match) {
42
- mapping[slot] = match;
43
- assigned.add(match);
44
- }
45
- }
46
- // Special case: if no subtitle but we have email, use it
47
- if (!mapping.subtitle) {
48
- const emailField = fields.find((f) => /email/i.test(f) && !assigned.has(f));
49
- if (emailField) {
50
- mapping.subtitle = emailField;
51
- assigned.add(emailField);
52
- }
53
- }
54
- // Collect remaining fields
55
- mapping.remaining = fields.filter((f) => !assigned.has(f));
56
- return mapping;
57
- }
58
- /**
59
- * Detect field types from sample values
60
- */
61
- export function detectFieldTypes(data) {
62
- const sample = Array.isArray(data) ? data[0] : data;
63
- if (!sample || typeof sample !== 'object') {
64
- return [];
65
- }
66
- const hints = [];
67
- for (const [field, value] of Object.entries(sample)) {
68
- if (value === null || value === undefined)
69
- continue;
70
- // Boolean detection
71
- if (typeof value === 'boolean') {
72
- hints.push({ field, type: 'boolean' });
73
- continue;
74
- }
75
- // String-based detection
76
- if (typeof value === 'string') {
77
- if (VALUE_PATTERNS.email.test(value)) {
78
- hints.push({ field, type: 'email' });
79
- }
80
- else if (VALUE_PATTERNS.url.test(value)) {
81
- hints.push({ field, type: 'url' });
82
- }
83
- else if (VALUE_PATTERNS.image.test(value)) {
84
- hints.push({ field, type: 'image' });
85
- }
86
- else if (VALUE_PATTERNS.isoDate.test(value)) {
87
- hints.push({ field, type: 'date' });
88
- }
89
- else if (VALUE_PATTERNS.currency.test(value)) {
90
- hints.push({ field, type: 'currency' });
91
- }
92
- else {
93
- hints.push({ field, type: 'text' });
94
- }
95
- continue;
96
- }
97
- // Number with currency-like field name
98
- if (typeof value === 'number') {
99
- if (/price|cost|amount|total|fee/i.test(field)) {
100
- hints.push({ field, type: 'currency' });
101
- }
102
- }
103
- }
104
- return hints;
105
- }
106
- /**
107
- * Check if a field value looks like an image URL or emoji
108
- */
109
- export function isVisualField(value) {
110
- if (typeof value !== 'string')
111
- return false;
112
- // Emoji detection (single emoji character or common emoji patterns)
113
- const emojiRegex = /^[\p{Emoji}]$/u;
114
- if (emojiRegex.test(value) || value.length <= 2) {
115
- // Check if it's actually an emoji (simplified check)
116
- const codePoint = value.codePointAt(0) || 0;
117
- if (codePoint > 0x1f000)
118
- return true;
119
- }
120
- // Image URL detection
121
- return VALUE_PATTERNS.image.test(value) || VALUE_PATTERNS.url.test(value);
122
- }
123
- /**
124
- * Format a field name as a human-readable label
125
- * camelCase -> Title Case, snake_case -> Title Case
126
- */
127
- export function formatFieldLabel(field) {
128
- return (field
129
- // camelCase to spaces
130
- .replace(/([a-z])([A-Z])/g, '$1 $2')
131
- // snake_case to spaces
132
- .replace(/_/g, ' ')
133
- // Capitalize first letter of each word
134
- .replace(/\b\w/g, (c) => c.toUpperCase())
135
- .trim());
136
- }
137
- /**
138
- * Get the best display value for a field
139
- */
140
- export function getDisplayValue(value, typeHint) {
141
- if (value === null || value === undefined)
142
- return '—';
143
- if (typeof value === 'boolean')
144
- return value ? '✓' : '✗';
145
- if (typeof value === 'object')
146
- return JSON.stringify(value);
147
- // Date formatting
148
- if (typeHint === 'date' && typeof value === 'string') {
149
- try {
150
- const date = new Date(value);
151
- return date.toLocaleDateString();
152
- }
153
- catch {
154
- return String(value);
155
- }
156
- }
157
- // Currency formatting
158
- if (typeHint === 'currency' && typeof value === 'number') {
159
- return `$${value.toFixed(2)}`;
160
- }
161
- return String(value);
162
- }
163
- // ════════════════════════════════════════════════════════════════════════════════
164
- // Chart Data Shape Detection
165
- // ════════════════════════════════════════════════════════════════════════════════
166
- /**
167
- * Count numeric fields in an object
168
- */
169
- export function countNumericFields(obj) {
170
- return Object.values(obj).filter((v) => typeof v === 'number').length;
171
- }
172
- /**
173
- * Check if object has date-like fields (by name or value)
174
- */
175
- export function hasDateFields(obj) {
176
- for (const [key, value] of Object.entries(obj)) {
177
- if (FIELD_PATTERNS.date.test(key))
178
- return true;
179
- if (typeof value === 'string' && VALUE_PATTERNS.isoDate.test(value))
180
- return true;
181
- }
182
- return false;
183
- }
184
- /**
185
- * Check if object has numeric fields
186
- */
187
- export function hasNumericFields(obj) {
188
- return Object.values(obj).some((v) => typeof v === 'number');
189
- }
190
- /**
191
- * Get the names of string fields in an object
192
- */
193
- export function getStringFields(obj) {
194
- return Object.entries(obj)
195
- .filter(([, v]) => typeof v === 'string')
196
- .map(([k]) => k);
197
- }
198
- /**
199
- * Get the names of numeric fields in an object
200
- */
201
- export function getNumericFields(obj) {
202
- return Object.entries(obj)
203
- .filter(([, v]) => typeof v === 'number')
204
- .map(([k]) => k);
205
- }
206
- /**
207
- * Get date field names from an object (by name pattern or ISO value)
208
- */
209
- export function getDateFields(obj) {
210
- return Object.entries(obj)
211
- .filter(([key, value]) => FIELD_PATTERNS.date.test(key) ||
212
- (typeof value === 'string' && VALUE_PATTERNS.isoDate.test(value)))
213
- .map(([k]) => k);
214
- }
215
- /**
216
- * Check if data looks like a single metric (KPI)
217
- * Patterns: { value: 1234 }, { value: 1234, label: "Users" }, { value: 1234, delta: "+12%" }
218
- */
219
- export function isMetricShaped(data) {
220
- if (!data || typeof data !== 'object' || Array.isArray(data))
221
- return false;
222
- const keys = Object.keys(data);
223
- if (keys.length < 1 || keys.length > 5)
224
- return false;
225
- // Must have a primary numeric field
226
- const numericKeys = keys.filter((k) => typeof data[k] === 'number');
227
- if (numericKeys.length !== 1)
228
- return false;
229
- // Remaining fields should be label-like strings (not complex objects)
230
- const nonNumericKeys = keys.filter((k) => typeof data[k] !== 'number');
231
- return nonNumericKeys.every((k) => typeof data[k] === 'string' || typeof data[k] === 'boolean');
232
- }
233
- /**
234
- * Check if data looks like a gauge value
235
- * Patterns: { value: 73, max: 100 }, { progress: 0.73 }
236
- */
237
- export function isGaugeShaped(data) {
238
- if (!data || typeof data !== 'object' || Array.isArray(data))
239
- return false;
240
- if ('progress' in data && typeof data.progress === 'number')
241
- return true;
242
- if ('value' in data && typeof data.value === 'number' && ('max' in data || 'min' in data)) {
243
- return true;
244
- }
245
- return false;
246
- }
247
- /**
248
- * Check if array data is chart-shaped
249
- * Conservative: only returns true for clearly chart-like data
250
- */
251
- export function isChartShaped(data) {
252
- if (!Array.isArray(data) || data.length < 2)
253
- return false;
254
- const sample = data[0];
255
- if (!sample || typeof sample !== 'object')
256
- return false;
257
- const numFields = countNumericFields(sample);
258
- const strFields = getStringFields(sample).length;
259
- const totalFields = Object.keys(sample).length;
260
- // Pattern 1: exactly 1 string label + 1 numeric value (pie/bar candidate)
261
- if (totalFields === 2 && strFields === 1 && numFields === 1)
262
- return true;
263
- // Pattern 2: date field + numeric field(s) → time series
264
- if (hasDateFields(sample) && numFields >= 1)
265
- return true;
266
- // Pattern 3: 1 string label + 2+ numeric values → grouped bar
267
- if (strFields === 1 && numFields >= 2 && totalFields <= 6)
268
- return true;
269
- return false;
270
- }
271
- /**
272
- * Check if array data is timeline-shaped
273
- * Requires: date field + title/event/description field, 3+ items
274
- */
275
- export function isTimelineShaped(data) {
276
- if (!Array.isArray(data) || data.length < 3)
277
- return false;
278
- const sample = data[0];
279
- if (!sample || typeof sample !== 'object')
280
- return false;
281
- const hasDate = hasDateFields(sample);
282
- const keys = Object.keys(sample).map((k) => k.toLowerCase());
283
- const hasTitleLike = keys.some((k) => /^(title|event|name|label|subject|heading|action|activity)$/i.test(k));
284
- const hasDescLike = keys.some((k) => /^(description|details|body|content|message|summary|text|note)$/i.test(k));
285
- return hasDate && (hasTitleLike || hasDescLike);
286
- }
287
- /**
288
- * Check if object data is dashboard-shaped
289
- * Object where values are a mix of metrics, arrays, and objects (3+ keys)
290
- */
291
- export function isDashboardShaped(data) {
292
- if (!data || typeof data !== 'object' || Array.isArray(data))
293
- return false;
294
- const keys = Object.keys(data);
295
- if (keys.length < 3)
296
- return false;
297
- let hasArray = false;
298
- let hasMetric = false;
299
- let hasObject = false;
300
- for (const key of keys) {
301
- const val = data[key];
302
- if (Array.isArray(val))
303
- hasArray = true;
304
- else if (typeof val === 'object' && val !== null) {
305
- if (isMetricShaped(val) || isGaugeShaped(val))
306
- hasMetric = true;
307
- else
308
- hasObject = true;
309
- }
310
- else if (typeof val === 'number')
311
- hasMetric = true;
312
- }
313
- // Dashboard needs at least 2 different types of content
314
- const types = [hasArray, hasMetric, hasObject].filter(Boolean).length;
315
- return types >= 2 || (hasArray && keys.length >= 3);
316
- }
317
- /**
318
- * Check if data looks like a shopping cart
319
- * Patterns:
320
- * - Array where all items have price + (quantity | qty)
321
- * - Object with items array where items have price + (quantity | qty)
322
- */
323
- export function isCartShaped(data) {
324
- if (Array.isArray(data)) {
325
- return (data.length > 0 &&
326
- data.every((item) => item &&
327
- typeof item === 'object' &&
328
- 'price' in item &&
329
- ('quantity' in item || 'qty' in item)));
330
- }
331
- if (data && typeof data === 'object' && data.items && Array.isArray(data.items)) {
332
- return (data.items.length > 0 &&
333
- data.items.every((item) => item &&
334
- typeof item === 'object' &&
335
- 'price' in item &&
336
- ('quantity' in item || 'qty' in item)));
337
- }
338
- return false;
339
- }
340
- /**
341
- * Generate JavaScript code for field analyzer (to embed in HTML)
342
- */
343
- export function generateFieldAnalyzerJS() {
344
- return `
345
- // Field Analyzer - Smart detection of field semantics
346
- const FIELD_PATTERNS = {
347
- title: /^(name|title|label|displayName|heading|subject)$/i,
348
- subtitle: /^(description|subtitle|summary|bio|about|tagline|ip|address|host|hostname|endpoint)$/i,
349
- icon: /^(icon|avatar|image|photo|thumbnail|picture|logo)$/i,
350
- badge: /^(status|state|type|role|category|kind|tag|level)$/i,
351
- detail: /^(count|total|amount|price|value|size|quantity|score)$/i,
352
- link: /^(url|link|href|website|homepage|uri)$/i,
353
- id: /^(id|key|code|uuid|slug|_id)$/i,
354
- date: /^(date|time|createdAt|updatedAt|created|updated|timestamp|.*At|.*Date|.*Time)$/i,
355
- boolean: /^(is[A-Z]|has[A-Z]|can[A-Z]|should[A-Z]|enabled|disabled|active|visible|checked|selected)$/i,
356
- };
357
-
358
- const VALUE_PATTERNS = {
359
- email: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,
360
- url: /^(https?:\\/\\/|www\\.)/i,
361
- isoDate: /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2})?/,
362
- currency: /^\\$?\\d+(\\.\\d{2})?$/,
363
- image: /\\.(jpg|jpeg|png|gif|webp|svg|ico)(\\?.*)?$/i,
364
- };
365
-
366
- function analyzeFields(data) {
367
- const sample = Array.isArray(data) ? data[0] : data;
368
- if (!sample || typeof sample !== 'object') {
369
- return { remaining: [] };
370
- }
371
-
372
- const fields = Object.keys(sample);
373
- const mapping = { remaining: [] };
374
- const assigned = new Set();
375
-
376
- for (const [slot, pattern] of Object.entries(FIELD_PATTERNS)) {
377
- const match = fields.find(f => pattern.test(f) && !assigned.has(f));
378
- if (match) {
379
- mapping[slot] = match;
380
- assigned.add(match);
381
- }
382
- }
383
-
384
- if (!mapping.subtitle) {
385
- const emailField = fields.find(f => /email/i.test(f) && !assigned.has(f));
386
- if (emailField) {
387
- mapping.subtitle = emailField;
388
- assigned.add(emailField);
389
- }
390
- }
391
-
392
- mapping.remaining = fields.filter(f => !assigned.has(f));
393
- return mapping;
394
- }
395
-
396
- function detectFieldTypes(data) {
397
- const sample = Array.isArray(data) ? data[0] : data;
398
- if (!sample || typeof sample !== 'object') return [];
399
-
400
- const hints = [];
401
- for (const [field, value] of Object.entries(sample)) {
402
- if (value === null || value === undefined) continue;
403
- if (typeof value === 'boolean') {
404
- hints.push({ field, type: 'boolean' });
405
- } else if (typeof value === 'string') {
406
- if (VALUE_PATTERNS.email.test(value)) hints.push({ field, type: 'email' });
407
- else if (VALUE_PATTERNS.url.test(value)) hints.push({ field, type: 'url' });
408
- else if (VALUE_PATTERNS.image.test(value)) hints.push({ field, type: 'image' });
409
- else if (VALUE_PATTERNS.isoDate.test(value)) hints.push({ field, type: 'date' });
410
- else hints.push({ field, type: 'text' });
411
- } else if (typeof value === 'number' && /price|cost|amount|total|fee/i.test(field)) {
412
- hints.push({ field, type: 'currency' });
413
- }
414
- }
415
- return hints;
416
- }
417
-
418
- function isVisualField(value) {
419
- if (typeof value !== 'string') return false;
420
- const codePoint = value.codePointAt(0) || 0;
421
- if (codePoint > 0x1F000 && value.length <= 2) return true;
422
- return VALUE_PATTERNS.image.test(value) || VALUE_PATTERNS.url.test(value);
423
- }
424
-
425
- function formatFieldLabel(field) {
426
- return field
427
- .replace(/([a-z])([A-Z])/g, '$1 $2')
428
- .replace(/_/g, ' ')
429
- .replace(/\\b\\w/g, c => c.toUpperCase())
430
- .trim();
431
- }
432
-
433
- function getDisplayValue(value, typeHint) {
434
- if (value === null || value === undefined) return '—';
435
- if (typeof value === 'boolean') return value ? '✓' : '✗';
436
- if (typeof value === 'object') return JSON.stringify(value);
437
- if (typeHint === 'date' && typeof value === 'string') {
438
- try { return new Date(value).toLocaleDateString(); } catch { return String(value); }
439
- }
440
- if (typeHint === 'currency' && typeof value === 'number') {
441
- return '$' + value.toFixed(2);
442
- }
443
- return String(value);
444
- }
445
- `;
446
- }
447
- //# sourceMappingURL=field-analyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-analyzer.js","sourceRoot":"","sources":["../../../src/auto-ui/rendering/field-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1,64 +0,0 @@
1
- /**
2
- * Field Renderers - Type-specific value rendering
3
- *
4
- * Provides specialized renderers for different field types:
5
- * - Email (mailto link)
6
- * - URL (clickable link)
7
- * - Date (formatted)
8
- * - Currency ($X.XX)
9
- * - Boolean (checkmark)
10
- * - Badge (status pill)
11
- * - Code (syntax highlighted)
12
- */
13
- export type FieldRendererType = 'text' | 'email' | 'url' | 'link' | 'date' | 'currency' | 'boolean' | 'badge' | 'code' | 'image';
14
- export interface FieldRendererOptions {
15
- escapeHtml: (str: string) => string;
16
- locale?: string;
17
- currency?: string;
18
- dateFormat?: 'short' | 'medium' | 'long' | 'relative';
19
- }
20
- /**
21
- * Render a field value based on its type
22
- */
23
- export declare function renderField(value: any, type: FieldRendererType, options: FieldRendererOptions): string;
24
- /**
25
- * Render email as mailto link
26
- */
27
- export declare function renderEmail(value: any, escapeHtml: (s: string) => string): string;
28
- /**
29
- * Render URL as clickable link
30
- */
31
- export declare function renderUrl(value: any, escapeHtml: (s: string) => string): string;
32
- /**
33
- * Render date with formatting
34
- */
35
- export declare function renderDate(value: any, format: 'short' | 'medium' | 'long' | 'relative', locale: string): string;
36
- /**
37
- * Render number as currency
38
- */
39
- export declare function renderCurrency(value: any, currency: string, locale: string): string;
40
- /**
41
- * Render boolean as checkmark
42
- */
43
- export declare function renderBoolean(value: any): string;
44
- /**
45
- * Render value as status badge
46
- */
47
- export declare function renderBadge(value: any, escapeHtml: (s: string) => string): string;
48
- /**
49
- * Render value as code
50
- */
51
- export declare function renderCode(value: any, escapeHtml: (s: string) => string): string;
52
- /**
53
- * Render value as image
54
- */
55
- export declare function renderImage(value: any, escapeHtml: (s: string) => string): string;
56
- /**
57
- * Generate CSS for field renderers
58
- */
59
- export declare function generateFieldRendererCSS(): string;
60
- /**
61
- * Generate JavaScript for field renderers (to embed in HTML)
62
- */
63
- export declare function generateFieldRenderersJS(): string;
64
- //# sourceMappingURL=field-renderers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-renderers.d.ts","sourceRoot":"","sources":["../../../src/auto-ui/rendering/field-renderers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,OAAO,GACP,KAAK,GACL,MAAM,GACN,MAAM,GACN,UAAU,GACV,SAAS,GACT,OAAO,GACP,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACvD;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,GAAG,EACV,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CA6BR;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAGjF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAO/E;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,EAChD,MAAM,EAAE,MAAM,GACb,MAAM,CAwCR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAYnF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAKhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAgBjF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAGhF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAGjF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAqFjD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CA4DjD"}