api_binding_ui 1.1.0 → 2.0.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 (78) hide show
  1. package/README.md +74 -394
  2. package/SKILL.md +49 -350
  3. package/dist/framework/contract.d.ts +268 -0
  4. package/dist/framework/engine.d.ts +88 -0
  5. package/dist/framework/expr.d.ts +34 -0
  6. package/dist/framework/loadCatalog.d.ts +6 -0
  7. package/dist/framework/names.d.ts +7 -0
  8. package/dist/framework/openapi.d.ts +7 -0
  9. package/dist/framework/runner.d.ts +33 -0
  10. package/dist/framework/schema.d.ts +22 -0
  11. package/dist/framework/store.d.ts +17 -0
  12. package/dist/framework/validate.d.ts +7 -0
  13. package/dist/index-e9twc25y.js +754 -0
  14. package/dist/index-e9twc25y.js.map +16 -0
  15. package/dist/index.d.ts +11 -29
  16. package/dist/index.js +345 -11932
  17. package/dist/index.js.map +14 -0
  18. package/dist/runtime/BindingProvider.d.ts +42 -0
  19. package/dist/runtime/BindingScreen.d.ts +23 -0
  20. package/dist/runtime/hooks.d.ts +22 -0
  21. package/dist/runtime/screenStore.d.ts +7 -0
  22. package/dist/studio/ApiPicker.d.ts +15 -0
  23. package/dist/studio/BindingStudio.d.ts +21 -0
  24. package/dist/studio/BindingWidget.d.ts +9 -0
  25. package/dist/studio/Collapse.d.ts +6 -0
  26. package/dist/studio/ComponentList.d.ts +10 -0
  27. package/dist/studio/FindAnything.d.ts +7 -0
  28. package/dist/studio/Inspector.d.ts +12 -0
  29. package/dist/studio/Navigator.d.ts +17 -0
  30. package/dist/studio/SettingsPanel.d.ts +15 -0
  31. package/dist/studio/Tip.d.ts +23 -0
  32. package/dist/studio/editors/ConsumeEditor.d.ts +4 -0
  33. package/dist/studio/editors/RequestInputs.d.ts +11 -0
  34. package/dist/studio/editors/ScopedEditor.d.ts +3 -0
  35. package/dist/studio/editors/SlotSection.d.ts +3 -0
  36. package/dist/studio/editors/SourceSelect.d.ts +10 -0
  37. package/dist/studio/editors/StepCard.d.ts +12 -0
  38. package/dist/studio/editors/TriggerEditor.d.ts +4 -0
  39. package/dist/studio/editors/types.d.ts +14 -0
  40. package/dist/studio/icons.d.ts +65 -0
  41. package/dist/studio/index.css +2021 -0
  42. package/dist/studio/index.d.ts +3 -0
  43. package/dist/studio/index.js +2806 -0
  44. package/dist/studio/index.js.map +33 -0
  45. package/dist/studio/useBindings.d.ts +20 -0
  46. package/dist/studio/useCatalog.d.ts +15 -0
  47. package/dist/studio/useGlide.d.ts +11 -0
  48. package/dist/studio/useSettings.d.ts +8 -0
  49. package/package.json +20 -14
  50. package/spec/FRAMEWORK.md +271 -0
  51. package/dist/api-binding-ui.css +0 -248
  52. package/dist/components/ApiBindingWorkspace.d.ts +0 -10
  53. package/dist/components/ApiMappings.d.ts +0 -21
  54. package/dist/components/BindApiButton.d.ts +0 -41
  55. package/dist/components/RequestPreview.d.ts +0 -7
  56. package/dist/components/SimulationDialog.d.ts +0 -8
  57. package/dist/components/ValidationDialog.d.ts +0 -8
  58. package/dist/components/WorkspaceContext.d.ts +0 -7
  59. package/dist/components/ui/AppGrid.d.ts +0 -27
  60. package/dist/components/ui/Badge.d.ts +0 -9
  61. package/dist/components/ui/Banner.d.ts +0 -8
  62. package/dist/components/ui/Button.d.ts +0 -31
  63. package/dist/components/ui/Card.d.ts +0 -14
  64. package/dist/components/ui/Dialog.d.ts +0 -61
  65. package/dist/components/ui/Icons.d.ts +0 -21
  66. package/dist/components/ui/Input.d.ts +0 -31
  67. package/dist/core/bindingContext.d.ts +0 -67
  68. package/dist/core/catalog.d.ts +0 -18
  69. package/dist/core/componentId.d.ts +0 -12
  70. package/dist/core/model.d.ts +0 -63
  71. package/dist/core/openapi.d.ts +0 -2
  72. package/dist/core/transport.d.ts +0 -33
  73. package/dist/core/validation.d.ts +0 -2
  74. package/dist/core/valueCoercion.d.ts +0 -17
  75. package/dist/hooks/useAppliedBinding.d.ts +0 -6
  76. package/dist/index.css +0 -248
  77. package/dist/style.css +0 -244
  78. package/dist/types.d.ts +0 -245
package/dist/style.css DELETED
@@ -1,244 +0,0 @@
1
- /* src/styles/highradius-bridge.css */
2
-
3
-
4
- /* src/styles/index.css */
5
-
6
-
7
- /* src/styles/workspace.css */
8
- .binding-workspace, .api-binding, .binding-v2 {
9
- display: flex;
10
- background: var(--ds-color-background, #fff);
11
- color: var(--ds-color-foreground, #0f172a);
12
- font-family: var(--ds-font-family-sans, sans-serif);
13
- flex-direction: column;
14
- height: 100vh;
15
- }
16
-
17
- .binding-workspace h1, .api-binding h1, .binding-v2 h1 {
18
- font-size: var(--ds-font-size-2xl, 1.5rem);
19
- font-weight: var(--ds-font-weight-bold, 700);
20
- margin: 0;
21
- }
22
-
23
- .binding-workspace h2, .api-binding h2, .binding-v2 h2 {
24
- font-size: var(--ds-font-size-lg, 1.125rem);
25
- font-weight: var(--ds-font-weight-semibold, 600);
26
- margin: 0;
27
- }
28
-
29
- .binding-workspace h3, .api-binding h3, .binding-v2 h3 {
30
- font-size: var(--ds-font-size-base, .875rem);
31
- font-weight: var(--ds-font-weight-semibold, 600);
32
- margin: 0;
33
- }
34
-
35
- .binding-workspace p, .api-binding p, .binding-v2 p {
36
- line-height: var(--ds-line-height-normal, 1.5);
37
- margin: 0;
38
- }
39
-
40
- .binding-header, .binding-footer, .binding-v2-header, .binding-v2-footer {
41
- padding: var(--ds-page-padding, 1rem 1.5rem);
42
- display: flex;
43
- gap: var(--ds-space-4, 1rem);
44
- flex-wrap: wrap;
45
- justify-content: space-between;
46
- align-items: center;
47
- }
48
-
49
- .binding-header, .binding-v2-header {
50
- border-bottom-width: var(--ds-screen-surface-border-width, 1px);
51
- border-bottom-style: solid;
52
- border-bottom-color: var(--ds-color-border, #e2e8f0);
53
- }
54
-
55
- .binding-body, .binding-v2-body {
56
- overflow: auto;
57
- position: relative;
58
- padding: var(--ds-page-padding, 1rem 1.5rem);
59
- flex: 1;
60
- min-height: 0;
61
- }
62
-
63
- .binding-columns, .binding-v2-columns {
64
- isolation: isolate;
65
- display: flex;
66
- gap: var(--ds-space-8, 2rem);
67
- flex-wrap: wrap;
68
- align-items: start;
69
- }
70
-
71
- .binding-main, .binding-v2-main {
72
- flex-grow: 1;
73
- flex-basis: var(--ds-dialog-form-min-width, 32rem);
74
- padding-bottom: var(--ds-space-12, 3rem);
75
- }
76
-
77
- .binding-main, .binding-stack, .binding-v2-main, .binding-v2-stack {
78
- display: flex;
79
- gap: var(--ds-space-4, 1rem);
80
- flex-direction: column;
81
- min-width: 0;
82
- }
83
-
84
- .binding-section, .binding-v2-section {
85
- padding-bottom: var(--ds-space-6, 1.5rem);
86
- display: flex;
87
- gap: var(--ds-space-4, 1rem);
88
- border-bottom-width: var(--ds-screen-surface-border-width, 1px);
89
- border-bottom-style: solid;
90
- border-bottom-color: var(--ds-color-border, #e2e8f0);
91
- flex-direction: column;
92
- }
93
-
94
- .binding-section-title, .binding-v2-section-title {
95
- display: flex;
96
- justify-content: space-between;
97
- align-items: center;
98
- gap: var(--ds-space-4, 1rem);
99
- }
100
-
101
- .binding-muted, .binding-v2-muted {
102
- color: var(--ds-color-muted-foreground, #64748b);
103
- font-size: var(--ds-font-size-sm, .8125rem);
104
- }
105
-
106
- .binding-preview, .binding-v2-preview {
107
- flex-basis: var(--ds-dialog-min-width, 24rem);
108
- position: sticky;
109
- background: var(--ds-color-surface, #fff);
110
- border-width: var(--ds-screen-surface-border-width, 1px);
111
- border-style: solid;
112
- border-color: var(--ds-color-border, #e2e8f0);
113
- border-radius: var(--ds-radius-md, 6px);
114
- padding: var(--ds-space-6, 1.5rem);
115
- display: flex;
116
- gap: var(--ds-space-4, 1rem);
117
- flex-direction: column;
118
- flex-grow: 0;
119
- max-width: 100%;
120
- top: 0;
121
- }
122
-
123
- .binding-panel, .binding-v2-panel {
124
- position: absolute;
125
- width: var(--ds-dialog-form-min-width, 32rem);
126
- background: var(--ds-color-background, #fff);
127
- border-left-width: var(--ds-screen-surface-border-width, 1px);
128
- border-left-style: solid;
129
- border-left-color: var(--ds-color-border, #e2e8f0);
130
- box-shadow: var(--ds-shadow-md, 0 4px 6px -1px #0000001a);
131
- padding: var(--ds-space-6, 1.5rem);
132
- display: flex;
133
- gap: var(--ds-space-6, 1.5rem);
134
- z-index: var(--ds-focus-z-index, 50);
135
- flex-direction: column;
136
- max-width: 100%;
137
- min-height: 100%;
138
- top: 0;
139
- right: 0;
140
- }
141
-
142
- .binding-details, .binding-v2-details {
143
- display: flex;
144
- gap: var(--ds-space-2, .5rem);
145
- font-size: var(--ds-font-size-sm, .8125rem);
146
- overflow-wrap: anywhere;
147
- flex-direction: column;
148
- }
149
-
150
- .binding-details summary, .binding-v2-details summary {
151
- cursor: pointer;
152
- color: var(--ds-color-muted-foreground, #64748b);
153
- }
154
-
155
- .binding-footer, .binding-v2-footer {
156
- border-top-width: var(--ds-screen-surface-border-width, 1px);
157
- border-top-style: solid;
158
- border-top-color: var(--ds-color-border, #e2e8f0);
159
- background: var(--ds-color-background, #fff);
160
- }
161
-
162
- .binding-simulation, .binding-v2-simulation {
163
- display: flex;
164
- gap: var(--ds-space-4, 1rem);
165
- flex-direction: column;
166
- }
167
-
168
- .binding-empty, .binding-v2-empty {
169
- padding: var(--ds-space-12, 3rem);
170
- margin: auto;
171
- }
172
-
173
- .binding-error, .binding-v2-error {
174
- color: var(--ds-color-destructive, #ef4444);
175
- }
176
-
177
- .binding-stack-tight, .binding-v2-stack-tight {
178
- display: flex;
179
- align-items: flex-start;
180
- gap: var(--ds-space-1, .25rem);
181
- flex-direction: column;
182
- }
183
-
184
- .binding-list, .binding-v2-list {
185
- padding-left: var(--ds-space-4, 1rem);
186
- margin: 0;
187
- }
188
-
189
- .binding-panel-wide, .binding-v2-panel-wide {
190
- width: var(--ds-dialog-width-large, 48rem);
191
- overflow: auto;
192
- }
193
-
194
- .binding-call, .binding-v2-call {
195
- display: flex;
196
- gap: var(--ds-space-3, .75rem);
197
- padding: var(--ds-space-4, 1rem);
198
- border-width: var(--ds-screen-surface-border-width, 1px);
199
- border-style: solid;
200
- border-color: var(--ds-color-border, #e2e8f0);
201
- border-radius: var(--ds-radius-md, 6px);
202
- flex-direction: column;
203
- min-width: 0;
204
- }
205
-
206
- .binding-call-grid, .binding-v2-call-grid {
207
- display: grid;
208
- grid-template-columns: repeat(auto-fill, minmax(var(--ds-menu-min-width, 12rem), 1fr));
209
- gap: var(--ds-space-3, .75rem);
210
- }
211
-
212
- .binding-params, .binding-v2-params {
213
- display: flex;
214
- gap: var(--ds-space-2, .5rem);
215
- flex-direction: column;
216
- }
217
-
218
- .binding-param, .binding-v2-param {
219
- display: grid;
220
- grid-template-columns: repeat(3, minmax(0, 1fr));
221
- gap: var(--ds-space-3, .75rem);
222
- overflow-wrap: anywhere;
223
- align-items: start;
224
- }
225
-
226
- .binding-endpoint, .binding-v2-endpoint {
227
- font-family: var(--ds-font-family-mono, monospace);
228
- font-size: var(--ds-font-size-sm, .8125rem);
229
- overflow-wrap: anywhere;
230
- }
231
-
232
- .binding-preview-parts, .binding-v2-preview-parts {
233
- display: grid;
234
- grid-template-columns: repeat(auto-fill, minmax(var(--ds-menu-min-width, 12rem), 1fr));
235
- gap: var(--ds-space-3, .75rem);
236
- }
237
-
238
- .binding-pre, .binding-v2-pre {
239
- font-family: var(--ds-font-family-mono, monospace);
240
- font-size: var(--ds-font-size-sm, .8125rem);
241
- white-space: pre-wrap;
242
- overflow-wrap: anywhere;
243
- margin: 0;
244
- }
package/dist/types.d.ts DELETED
@@ -1,245 +0,0 @@
1
- /**
2
- * API Binding Studio - Shared Type Definitions
3
- */
4
- export type ParamLocation = "body" | "query" | "path" | "header";
5
- export interface SnapshotComponent {
6
- name: string;
7
- label: string;
8
- type?: string;
9
- kind?: string;
10
- required?: boolean;
11
- readable?: boolean;
12
- optionsSource?: "static" | "dynamic" | string;
13
- value?: string;
14
- }
15
- export interface SnapshotContext {
16
- id: string;
17
- label?: string;
18
- components: SnapshotComponent[];
19
- buttons?: string[];
20
- }
21
- export type WindowKind = "action-form" | "filter-dialog" | "modal" | string;
22
- export interface WindowTrigger {
23
- button?: string;
24
- needsSelection?: boolean;
25
- gridId?: string;
26
- }
27
- export interface BindingGrid {
28
- gridId: string;
29
- label?: string;
30
- columns?: string[];
31
- rows: Record<string, unknown>[];
32
- }
33
- export interface BindingSnapshot {
34
- key: string;
35
- name: string;
36
- ids: {
37
- appId: string;
38
- windowId: string;
39
- gridId?: string;
40
- parentWindowIds?: string[];
41
- };
42
- source: string;
43
- parent: string;
44
- kind?: WindowKind;
45
- trigger?: WindowTrigger;
46
- components: SnapshotComponent[];
47
- buttons: string[];
48
- contexts?: SnapshotContext[];
49
- grid?: {
50
- id: string;
51
- label?: string;
52
- columns: string[];
53
- rows: Record<string, unknown>[];
54
- };
55
- capturedAt: string;
56
- }
57
- export interface ParamMapping {
58
- param: string;
59
- source: string;
60
- property: string;
61
- required?: boolean;
62
- in?: ParamLocation;
63
- }
64
- export type MappingTiming = "lazy" | "prefetch" | string;
65
- export type MappingFreshness = "fresh" | "reuse" | "poll" | string;
66
- export interface ApiMapping {
67
- id: string;
68
- component: string;
69
- api: string;
70
- method?: string;
71
- timing?: MappingTiming;
72
- freshness?: MappingFreshness;
73
- pollSeconds?: number;
74
- params: ParamMapping[];
75
- }
76
- export interface MappingFile {
77
- key: string;
78
- app: string;
79
- grid?: string;
80
- window: string;
81
- parents?: string[];
82
- name: string;
83
- savedAt: string;
84
- read: Array<Omit<ApiMapping, "id">>;
85
- write: Array<Omit<ApiMapping, "id">>;
86
- }
87
- export interface ApiParameter {
88
- name: string;
89
- type: string;
90
- required: boolean;
91
- in?: ParamLocation | string;
92
- description?: string;
93
- schema?: Record<string, unknown> | boolean;
94
- style?: string;
95
- explode?: boolean;
96
- }
97
- export interface ApiDefinition {
98
- api: string;
99
- method: string;
100
- hook: string;
101
- params: ApiParameter[];
102
- label?: string;
103
- available?: boolean;
104
- problem?: string;
105
- operationId?: string;
106
- summary?: string;
107
- description?: string;
108
- tags?: string[];
109
- tagDescriptions?: Record<string, string>;
110
- requestSchema?: Record<string, unknown> | boolean;
111
- requestBodyRequired?: boolean;
112
- schemaDefinitions?: Record<string, unknown>;
113
- contractIssues?: string[];
114
- }
115
- export interface BindingOption {
116
- value: string;
117
- label: string;
118
- subject?: string;
119
- description?: string;
120
- }
121
- export interface ApiBindingContext {
122
- snapshot: BindingSnapshot;
123
- mappings: MappingFile | null;
124
- definitions: ApiDefinition[];
125
- options: Record<string, BindingOption[]>;
126
- }
127
- export type BindingPurpose = "read" | "write";
128
- export interface BindingCall extends ApiMapping {
129
- purpose: BindingPurpose;
130
- }
131
- export interface BindingField {
132
- name: string;
133
- label: string;
134
- required: boolean;
135
- input: "user" | "template";
136
- excluded: boolean;
137
- }
138
- export interface BindingConflict {
139
- callId: string;
140
- param: string;
141
- fields: string[];
142
- }
143
- export interface ApiBindingConfig {
144
- version: 2;
145
- customerRule: "each" | "single";
146
- success: "close" | "keep";
147
- templateFills: boolean;
148
- fields: BindingField[];
149
- calls: BindingCall[];
150
- conflicts?: BindingConflict[];
151
- }
152
- export interface SimulationInput {
153
- notesType?: string;
154
- template?: string;
155
- subject?: string;
156
- notes?: string;
157
- addCallLog?: boolean;
158
- [key: string]: unknown;
159
- }
160
- export interface SampleNote {
161
- id: string;
162
- customerId?: number | string;
163
- noteType?: number;
164
- subject?: string;
165
- description?: string;
166
- [key: string]: unknown;
167
- }
168
- export type SampleRecord = SampleNote;
169
- export interface RequestParts {
170
- data: Record<string, unknown>;
171
- params: Record<string, unknown>;
172
- path: Record<string, unknown>;
173
- headers?: Record<string, string>;
174
- errors?: string[];
175
- }
176
- export interface RequestPreviewItem {
177
- order: number;
178
- id: string;
179
- purpose: BindingPurpose;
180
- target: string;
181
- method: string;
182
- api: string;
183
- hook: string;
184
- available: boolean;
185
- parts: RequestParts;
186
- issues: string[];
187
- }
188
- export interface ActionContext {
189
- form: Record<string, string>;
190
- grid?: {
191
- gridId: string;
192
- rows: Record<string, unknown>[];
193
- };
194
- parents?: Array<{
195
- id: string;
196
- values: Record<string, string>;
197
- }>;
198
- }
199
- export interface StoredAppliedConfig {
200
- version: number;
201
- config: ApiBindingConfig;
202
- appliedAt: string;
203
- }
204
- export declare const BINDING_CHANNEL = "api-binding-studio";
205
- export declare const BINDING_READY = "api-binding-ready";
206
- export declare const BINDING_CONTEXT = "api-binding-context";
207
- export declare const BINDING_APPLIED = "api-binding-applied";
208
- export declare const BINDING_SELECTION_UPDATE = "api-binding-selection-update";
209
- export interface BindingReadyMessage {
210
- type: typeof BINDING_READY;
211
- key: string;
212
- }
213
- export interface BindingContextMessage {
214
- type: typeof BINDING_CONTEXT;
215
- context: ApiBindingContext;
216
- }
217
- export interface BindingAppliedMessage {
218
- type: typeof BINDING_APPLIED;
219
- key: string;
220
- config: ApiBindingConfig;
221
- }
222
- export interface BindingSelectionUpdateMessage {
223
- type: typeof BINDING_SELECTION_UPDATE;
224
- key: string;
225
- grid: {
226
- id: string;
227
- rows: Record<string, unknown>[];
228
- };
229
- }
230
- export type RequestPreview = RequestPreviewItem;
231
- export interface WorkspaceComponents {
232
- AppGrid?: React.ComponentType<any>;
233
- Button?: React.ComponentType<any>;
234
- ButtonBar?: React.ComponentType<any>;
235
- ButtonGroup?: React.ComponentType<any>;
236
- Badge?: React.ComponentType<any>;
237
- Banner?: React.ComponentType<any>;
238
- DetailCard?: React.ComponentType<any>;
239
- Select?: React.ComponentType<any>;
240
- Input?: React.ComponentType<any>;
241
- TextArea?: React.ComponentType<any>;
242
- Checkbox?: React.ComponentType<any>;
243
- Dialog?: React.ComponentType<any>;
244
- createActionColumn?: <T = any>(config: any) => any;
245
- }