@portel/photon 1.18.0 → 1.20.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.
- package/dist/auto-ui/beam/routes/api-browse.d.ts.map +1 -1
- package/dist/auto-ui/beam/routes/api-browse.js +16 -4
- package/dist/auto-ui/beam/routes/api-browse.js.map +1 -1
- package/dist/auto-ui/beam/routes/api-config.js +4 -4
- package/dist/auto-ui/beam/routes/api-config.js.map +1 -1
- package/dist/auto-ui/beam/routes/api-marketplace.d.ts.map +1 -1
- package/dist/auto-ui/beam/routes/api-marketplace.js +14 -1
- package/dist/auto-ui/beam/routes/api-marketplace.js.map +1 -1
- package/dist/auto-ui/beam.d.ts.map +1 -1
- package/dist/auto-ui/beam.js +196 -77
- package/dist/auto-ui/beam.js.map +1 -1
- package/dist/auto-ui/bridge/index.d.ts.map +1 -1
- package/dist/auto-ui/bridge/index.js +17 -0
- package/dist/auto-ui/bridge/index.js.map +1 -1
- package/dist/auto-ui/streamable-http-transport.d.ts +1 -0
- package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
- package/dist/auto-ui/streamable-http-transport.js +64 -16
- package/dist/auto-ui/streamable-http-transport.js.map +1 -1
- package/dist/auto-ui/types.d.ts +12 -0
- package/dist/auto-ui/types.d.ts.map +1 -1
- package/dist/auto-ui/types.js.map +1 -1
- package/dist/beam-form.bundle.js +49 -6
- package/dist/beam-form.bundle.js.map +2 -2
- package/dist/beam.bundle.js +2090 -512
- package/dist/beam.bundle.js.map +4 -4
- package/dist/capability-negotiator.d.ts +67 -0
- package/dist/capability-negotiator.d.ts.map +1 -0
- package/dist/capability-negotiator.js +104 -0
- package/dist/capability-negotiator.js.map +1 -0
- package/dist/channel-manager.d.ts +122 -0
- package/dist/channel-manager.d.ts.map +1 -0
- package/dist/channel-manager.js +266 -0
- package/dist/channel-manager.js.map +1 -0
- package/dist/claude-code-plugin.js +1 -1
- package/dist/cli/commands/beam.d.ts.map +1 -1
- package/dist/cli/commands/beam.js +8 -2
- package/dist/cli/commands/beam.js.map +1 -1
- package/dist/cli/commands/changelog.d.ts +9 -0
- package/dist/cli/commands/changelog.d.ts.map +1 -0
- package/dist/cli/commands/changelog.js +133 -0
- package/dist/cli/commands/changelog.js.map +1 -0
- package/dist/cli/commands/maker.d.ts.map +1 -1
- package/dist/cli/commands/maker.js +23 -2
- package/dist/cli/commands/maker.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +53 -0
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/package.d.ts.map +1 -1
- package/dist/cli/commands/package.js +43 -9
- package/dist/cli/commands/package.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +1 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/update.d.ts +3 -2
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +50 -43
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +16 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli-alias.js +1 -1
- package/dist/cli-alias.js.map +1 -1
- package/dist/context-store.d.ts +23 -33
- package/dist/context-store.d.ts.map +1 -1
- package/dist/context-store.js +147 -97
- package/dist/context-store.js.map +1 -1
- package/dist/context.d.ts +15 -10
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +37 -13
- package/dist/context.js.map +1 -1
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +12 -0
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/server.js +34 -51
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/worker-manager.d.ts.map +1 -1
- package/dist/daemon/worker-manager.js +21 -7
- package/dist/daemon/worker-manager.js.map +1 -1
- package/dist/data-migration.d.ts +27 -0
- package/dist/data-migration.d.ts.map +1 -0
- package/dist/data-migration.js +307 -0
- package/dist/data-migration.js.map +1 -0
- package/dist/editor-support/docblock-tag-catalog.d.ts.map +1 -1
- package/dist/editor-support/docblock-tag-catalog.js +6 -0
- package/dist/editor-support/docblock-tag-catalog.js.map +1 -1
- package/dist/loader.d.ts +13 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +169 -22
- package/dist/loader.js.map +1 -1
- package/dist/marketplace-manager.d.ts +6 -0
- package/dist/marketplace-manager.d.ts.map +1 -1
- package/dist/marketplace-manager.js +185 -62
- package/dist/marketplace-manager.js.map +1 -1
- package/dist/namespace-migration.d.ts +1 -0
- package/dist/namespace-migration.d.ts.map +1 -1
- package/dist/namespace-migration.js +86 -0
- package/dist/namespace-migration.js.map +1 -1
- package/dist/photon-cli-runner.d.ts.map +1 -1
- package/dist/photon-cli-runner.js +47 -21
- package/dist/photon-cli-runner.js.map +1 -1
- package/dist/photon-doc-extractor.d.ts +1 -0
- package/dist/photon-doc-extractor.d.ts.map +1 -1
- package/dist/photon-doc-extractor.js +6 -0
- package/dist/photon-doc-extractor.js.map +1 -1
- package/dist/readme-syncer.d.ts.map +1 -1
- package/dist/readme-syncer.js +6 -1
- package/dist/readme-syncer.js.map +1 -1
- package/dist/resource-server.d.ts +105 -0
- package/dist/resource-server.d.ts.map +1 -0
- package/dist/resource-server.js +723 -0
- package/dist/resource-server.js.map +1 -0
- package/dist/serv/auth/jwt.d.ts +2 -0
- package/dist/serv/auth/jwt.d.ts.map +1 -1
- package/dist/serv/auth/jwt.js +11 -5
- package/dist/serv/auth/jwt.js.map +1 -1
- package/dist/serv/vault/token-vault.d.ts +2 -0
- package/dist/serv/vault/token-vault.d.ts.map +1 -1
- package/dist/serv/vault/token-vault.js +6 -0
- package/dist/serv/vault/token-vault.js.map +1 -1
- package/dist/server.d.ts +30 -119
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +252 -1122
- package/dist/server.js.map +1 -1
- package/dist/shared/audit.d.ts.map +1 -1
- package/dist/shared/audit.js +11 -4
- package/dist/shared/audit.js.map +1 -1
- package/dist/shared/security.d.ts +10 -0
- package/dist/shared/security.d.ts.map +1 -1
- package/dist/shared/security.js +27 -0
- package/dist/shared/security.js.map +1 -1
- package/dist/task-executor.d.ts +69 -0
- package/dist/task-executor.d.ts.map +1 -0
- package/dist/task-executor.js +182 -0
- package/dist/task-executor.js.map +1 -0
- package/dist/tasks/store.d.ts.map +1 -1
- package/dist/tasks/store.js +6 -2
- package/dist/tasks/store.js.map +1 -1
- package/dist/types/photon-instance.d.ts +50 -0
- package/dist/types/photon-instance.d.ts.map +1 -0
- package/dist/types/photon-instance.js +9 -0
- package/dist/types/photon-instance.js.map +1 -0
- package/dist/types/server-types.d.ts +61 -0
- package/dist/types/server-types.d.ts.map +1 -0
- package/dist/types/server-types.js +8 -0
- package/dist/types/server-types.js.map +1 -0
- package/dist/version-notify.d.ts +27 -0
- package/dist/version-notify.d.ts.map +1 -0
- package/dist/version-notify.js +142 -0
- package/dist/version-notify.js.map +1 -0
- package/package.json +3 -3
- package/dist/auto-ui/bridge/openai-shim.d.ts +0 -20
- package/dist/auto-ui/bridge/openai-shim.d.ts.map +0 -1
- package/dist/auto-ui/bridge/openai-shim.js +0 -231
- package/dist/auto-ui/bridge/openai-shim.js.map +0 -1
- package/dist/auto-ui/bridge/photon-app.d.ts +0 -162
- package/dist/auto-ui/bridge/photon-app.d.ts.map +0 -1
- package/dist/auto-ui/bridge/photon-app.js +0 -460
- package/dist/auto-ui/bridge/photon-app.js.map +0 -1
- package/dist/auto-ui/daemon-tools.d.ts +0 -45
- package/dist/auto-ui/daemon-tools.d.ts.map +0 -1
- package/dist/auto-ui/daemon-tools.js +0 -581
- package/dist/auto-ui/daemon-tools.js.map +0 -1
- package/dist/auto-ui/design-system/index.d.ts +0 -21
- package/dist/auto-ui/design-system/index.d.ts.map +0 -1
- package/dist/auto-ui/design-system/index.js +0 -27
- package/dist/auto-ui/design-system/index.js.map +0 -1
- package/dist/auto-ui/design-system/transaction-ui.d.ts +0 -70
- package/dist/auto-ui/design-system/transaction-ui.d.ts.map +0 -1
- package/dist/auto-ui/design-system/transaction-ui.js +0 -982
- package/dist/auto-ui/design-system/transaction-ui.js.map +0 -1
- package/dist/auto-ui/playground-server.d.ts +0 -7
- package/dist/auto-ui/playground-server.d.ts.map +0 -1
- package/dist/auto-ui/playground-server.js +0 -840
- package/dist/auto-ui/playground-server.js.map +0 -1
- package/dist/auto-ui/rendering/components.d.ts +0 -29
- package/dist/auto-ui/rendering/components.d.ts.map +0 -1
- package/dist/auto-ui/rendering/components.js +0 -1341
- package/dist/auto-ui/rendering/components.js.map +0 -1
- package/dist/auto-ui/rendering/field-analyzer.d.ts +0 -104
- package/dist/auto-ui/rendering/field-analyzer.d.ts.map +0 -1
- package/dist/auto-ui/rendering/field-analyzer.js +0 -447
- package/dist/auto-ui/rendering/field-analyzer.js.map +0 -1
- package/dist/auto-ui/rendering/field-renderers.d.ts +0 -64
- package/dist/auto-ui/rendering/field-renderers.d.ts.map +0 -1
- package/dist/auto-ui/rendering/field-renderers.js +0 -317
- package/dist/auto-ui/rendering/field-renderers.js.map +0 -1
- package/dist/auto-ui/rendering/index.d.ts +0 -28
- package/dist/auto-ui/rendering/index.d.ts.map +0 -1
- package/dist/auto-ui/rendering/index.js +0 -60
- package/dist/auto-ui/rendering/index.js.map +0 -1
- package/dist/auto-ui/rendering/layout-selector.d.ts +0 -60
- package/dist/auto-ui/rendering/layout-selector.d.ts.map +0 -1
- package/dist/auto-ui/rendering/layout-selector.js +0 -476
- package/dist/auto-ui/rendering/layout-selector.js.map +0 -1
- package/dist/markdown-utils.d.ts +0 -8
- package/dist/markdown-utils.d.ts.map +0 -1
- package/dist/markdown-utils.js +0 -64
- package/dist/markdown-utils.js.map +0 -1
- package/dist/mcp-client.d.ts +0 -9
- package/dist/mcp-client.d.ts.map +0 -1
- package/dist/mcp-client.js +0 -11
- package/dist/mcp-client.js.map +0 -1
- package/dist/mcp-elicitation.d.ts +0 -32
- package/dist/mcp-elicitation.d.ts.map +0 -1
- package/dist/mcp-elicitation.js +0 -26
- package/dist/mcp-elicitation.js.map +0 -1
- package/dist/photons/builder-compass.photon.d.ts +0 -167
- package/dist/photons/builder-compass.photon.d.ts.map +0 -1
- package/dist/photons/builder-compass.photon.js +0 -816
- package/dist/photons/builder-compass.photon.js.map +0 -1
- package/dist/photons/builder-compass.photon.ts +0 -1129
- package/dist/photons/docs/ui/docs.html +0 -441
- package/dist/photons/docs.photon.d.ts +0 -237
- package/dist/photons/docs.photon.d.ts.map +0 -1
- package/dist/photons/docs.photon.js +0 -483
- package/dist/photons/docs.photon.js.map +0 -1
- package/dist/photons/docs.photon.ts +0 -536
- package/dist/photons/slides.photon.d.ts +0 -212
- package/dist/photons/slides.photon.d.ts.map +0 -1
- package/dist/photons/slides.photon.js +0 -355
- package/dist/photons/slides.photon.js.map +0 -1
- package/dist/photons/slides.photon.ts +0 -370
- package/dist/photons/spreadsheet/ui/spreadsheet.html +0 -779
- package/dist/photons/spreadsheet.photon.d.ts +0 -554
- package/dist/photons/spreadsheet.photon.d.ts.map +0 -1
- package/dist/photons/spreadsheet.photon.js +0 -1050
- package/dist/photons/spreadsheet.photon.js.map +0 -1
- package/dist/photons/spreadsheet.photon.ts +0 -1239
- package/dist/photons/ui/builder-compass.html +0 -1199
- package/dist/photons/ui/builder-compass.photon.html +0 -380
- package/dist/security-scanner.d.ts +0 -52
- package/dist/security-scanner.d.ts.map +0 -1
- package/dist/security-scanner.js +0 -181
- package/dist/security-scanner.js.map +0 -1
- package/dist/shared/performance.d.ts +0 -65
- package/dist/shared/performance.d.ts.map +0 -1
- package/dist/shared/performance.js +0 -136
- 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"}
|