@cratis/scene.components 3.4.0 → 3.6.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 (188) hide show
  1. package/README.md +87 -3
  2. package/bindings/ArcBoundComponents.tsx +40 -0
  3. package/bindings/BoundConstructor.ts +5 -5
  4. package/bindings/bindingRegistry.ts +52 -4
  5. package/bindings/for_bindingRegistry/when_registering_query_identities.ts +81 -0
  6. package/bindings/for_requireArcProxy/NativeProxies.ts +28 -0
  7. package/bindings/for_requireArcProxy/when_mounting_bound_adapters.tsx +73 -0
  8. package/bindings/for_requireArcProxy/when_previewing_without_arc.tsx +37 -0
  9. package/bindings/for_requireArcProxy/when_validating_a_proxy.ts +44 -0
  10. package/bindings/requireArcProxy.ts +24 -0
  11. package/cratisComponents.ts +4 -1
  12. package/cratisComponentsPackage.ts +3 -1
  13. package/data/SceneDataTable.tsx +1 -1
  14. package/data/SceneObservableDataTable.tsx +1 -1
  15. package/data/SceneSingleResult.tsx +29 -0
  16. package/data/SingleResultRuntime.tsx +103 -0
  17. package/data/SingleResultStatus.tsx +13 -0
  18. package/data/for_SceneDataTable/when_forwarding_query_arguments.tsx +23 -2
  19. package/data/for_SceneSingleResult/when_executing_a_native_query.tsx +290 -0
  20. package/data/for_SceneSingleResult/when_gating_the_lazy_runtime.tsx +60 -0
  21. package/data/index.ts +1 -0
  22. package/dialogs/SceneCommandDialog.tsx +1 -1
  23. package/dialogs/SceneStepperCommandDialog.tsx +1 -1
  24. package/dist/cjs/bindings/ArcBoundComponents.js +55 -0
  25. package/dist/cjs/bindings/ArcBoundComponents.js.map +1 -0
  26. package/dist/cjs/bindings/bindingRegistry.js +52 -4
  27. package/dist/cjs/bindings/bindingRegistry.js.map +1 -1
  28. package/dist/cjs/bindings/requireArcProxy.js +25 -0
  29. package/dist/cjs/bindings/requireArcProxy.js.map +1 -0
  30. package/dist/cjs/cratisComponents.js +4 -0
  31. package/dist/cjs/cratisComponents.js.map +1 -1
  32. package/dist/cjs/cratisComponentsPackage.js +3 -1
  33. package/dist/cjs/cratisComponentsPackage.js.map +1 -1
  34. package/dist/cjs/data/SceneDataTable.js +1 -1
  35. package/dist/cjs/data/SceneDataTable.js.map +1 -1
  36. package/dist/cjs/data/SceneObservableDataTable.js +1 -1
  37. package/dist/cjs/data/SceneObservableDataTable.js.map +1 -1
  38. package/dist/cjs/data/SceneSingleResult.js +41 -0
  39. package/dist/cjs/data/SceneSingleResult.js.map +1 -0
  40. package/dist/cjs/data/SingleResultRuntime.js +137 -0
  41. package/dist/cjs/data/SingleResultRuntime.js.map +1 -0
  42. package/dist/cjs/data/SingleResultStatus.js +23 -0
  43. package/dist/cjs/data/SingleResultStatus.js.map +1 -0
  44. package/dist/cjs/dialogs/SceneCommandDialog.js +1 -1
  45. package/dist/cjs/dialogs/SceneCommandDialog.js.map +1 -1
  46. package/dist/cjs/dialogs/SceneStepperCommandDialog.js +1 -1
  47. package/dist/cjs/dialogs/SceneStepperCommandDialog.js.map +1 -1
  48. package/dist/cjs/forms/SceneQueryInputForm.js +141 -0
  49. package/dist/cjs/forms/SceneQueryInputForm.js.map +1 -0
  50. package/dist/cjs/forms/fields/SceneRadioButtonField.js +4 -1
  51. package/dist/cjs/forms/fields/SceneRadioButtonField.js.map +1 -1
  52. package/dist/cjs/forms/queryInputs.js +50 -0
  53. package/dist/cjs/forms/queryInputs.js.map +1 -0
  54. package/dist/cjs/index.js +8 -0
  55. package/dist/cjs/index.js.map +1 -1
  56. package/dist/cjs/pages/SceneDataPage.js +1 -1
  57. package/dist/cjs/pages/SceneDataPage.js.map +1 -1
  58. package/dist/esm/bindings/ArcBoundComponents.d.ts +18 -0
  59. package/dist/esm/bindings/ArcBoundComponents.d.ts.map +1 -0
  60. package/dist/esm/bindings/ArcBoundComponents.js +49 -0
  61. package/dist/esm/bindings/ArcBoundComponents.js.map +1 -0
  62. package/dist/esm/bindings/bindingRegistry.d.ts +4 -0
  63. package/dist/esm/bindings/bindingRegistry.d.ts.map +1 -1
  64. package/dist/esm/bindings/bindingRegistry.js +49 -5
  65. package/dist/esm/bindings/bindingRegistry.js.map +1 -1
  66. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.d.ts +2 -0
  67. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.d.ts.map +1 -0
  68. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.js +73 -0
  69. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.js.map +1 -0
  70. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.d.ts +25 -0
  71. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.d.ts.map +1 -0
  72. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.js +23 -0
  73. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.js.map +1 -0
  74. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.d.ts +2 -0
  75. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.d.ts.map +1 -0
  76. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.js +56 -0
  77. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.js.map +1 -0
  78. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.d.ts +2 -0
  79. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.d.ts.map +1 -0
  80. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.js +32 -0
  81. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.js.map +1 -0
  82. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.d.ts +2 -0
  83. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.d.ts.map +1 -0
  84. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.js +45 -0
  85. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.js.map +1 -0
  86. package/dist/esm/bindings/requireArcProxy.d.ts +5 -0
  87. package/dist/esm/bindings/requireArcProxy.d.ts.map +1 -0
  88. package/dist/esm/bindings/requireArcProxy.js +23 -0
  89. package/dist/esm/bindings/requireArcProxy.js.map +1 -0
  90. package/dist/esm/cratisComponents.d.ts.map +1 -1
  91. package/dist/esm/cratisComponents.js +4 -0
  92. package/dist/esm/cratisComponents.js.map +1 -1
  93. package/dist/esm/cratisComponentsPackage.d.ts.map +1 -1
  94. package/dist/esm/cratisComponentsPackage.js +3 -1
  95. package/dist/esm/cratisComponentsPackage.js.map +1 -1
  96. package/dist/esm/data/SceneDataTable.js +1 -1
  97. package/dist/esm/data/SceneDataTable.js.map +1 -1
  98. package/dist/esm/data/SceneObservableDataTable.js +1 -1
  99. package/dist/esm/data/SceneObservableDataTable.js.map +1 -1
  100. package/dist/esm/data/SceneSingleResult.d.ts +3 -0
  101. package/dist/esm/data/SceneSingleResult.d.ts.map +1 -0
  102. package/dist/esm/data/SceneSingleResult.js +39 -0
  103. package/dist/esm/data/SceneSingleResult.js.map +1 -0
  104. package/dist/esm/data/SingleResultRuntime.d.ts +10 -0
  105. package/dist/esm/data/SingleResultRuntime.d.ts.map +1 -0
  106. package/dist/esm/data/SingleResultRuntime.js +133 -0
  107. package/dist/esm/data/SingleResultRuntime.js.map +1 -0
  108. package/dist/esm/data/SingleResultStatus.d.ts +7 -0
  109. package/dist/esm/data/SingleResultStatus.d.ts.map +1 -0
  110. package/dist/esm/data/SingleResultStatus.js +21 -0
  111. package/dist/esm/data/SingleResultStatus.js.map +1 -0
  112. package/dist/esm/data/for_SceneDataTable/when_forwarding_query_arguments.js +21 -4
  113. package/dist/esm/data/for_SceneDataTable/when_forwarding_query_arguments.js.map +1 -1
  114. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.d.ts +2 -0
  115. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.d.ts.map +1 -0
  116. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.js +255 -0
  117. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.js.map +1 -0
  118. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.d.ts +2 -0
  119. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.d.ts.map +1 -0
  120. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.js +54 -0
  121. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.js.map +1 -0
  122. package/dist/esm/data/index.d.ts +1 -0
  123. package/dist/esm/data/index.d.ts.map +1 -1
  124. package/dist/esm/data/index.js +1 -0
  125. package/dist/esm/data/index.js.map +1 -1
  126. package/dist/esm/dialogs/SceneCommandDialog.js +1 -1
  127. package/dist/esm/dialogs/SceneCommandDialog.js.map +1 -1
  128. package/dist/esm/dialogs/SceneStepperCommandDialog.js +1 -1
  129. package/dist/esm/dialogs/SceneStepperCommandDialog.js.map +1 -1
  130. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.d.ts +2 -0
  131. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.d.ts.map +1 -0
  132. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.js +14 -0
  133. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.js.map +1 -0
  134. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.d.ts +2 -0
  135. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.d.ts.map +1 -0
  136. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.js +16 -0
  137. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.js.map +1 -0
  138. package/dist/esm/forms/SceneQueryInputForm.d.ts +3 -0
  139. package/dist/esm/forms/SceneQueryInputForm.d.ts.map +1 -0
  140. package/dist/esm/forms/SceneQueryInputForm.js +139 -0
  141. package/dist/esm/forms/SceneQueryInputForm.js.map +1 -0
  142. package/dist/esm/forms/fields/SceneRadioButtonField.d.ts.map +1 -1
  143. package/dist/esm/forms/fields/SceneRadioButtonField.js +4 -1
  144. package/dist/esm/forms/fields/SceneRadioButtonField.js.map +1 -1
  145. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.d.ts +2 -0
  146. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.d.ts.map +1 -0
  147. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.js +38 -0
  148. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.js.map +1 -0
  149. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js +4 -0
  150. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js.map +1 -1
  151. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.d.ts +26 -0
  152. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.d.ts.map +1 -0
  153. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.js +44 -0
  154. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.js.map +1 -0
  155. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.d.ts +2 -0
  156. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.d.ts.map +1 -0
  157. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.js +175 -0
  158. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.js.map +1 -0
  159. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.d.ts +2 -0
  160. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.d.ts.map +1 -0
  161. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.js +413 -0
  162. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.js.map +1 -0
  163. package/dist/esm/forms/index.d.ts +2 -0
  164. package/dist/esm/forms/index.d.ts.map +1 -1
  165. package/dist/esm/forms/index.js +1 -0
  166. package/dist/esm/forms/index.js.map +1 -1
  167. package/dist/esm/forms/queryInputs.d.ts +10 -0
  168. package/dist/esm/forms/queryInputs.d.ts.map +1 -0
  169. package/dist/esm/forms/queryInputs.js +47 -0
  170. package/dist/esm/forms/queryInputs.js.map +1 -0
  171. package/dist/esm/index.js +3 -1
  172. package/dist/esm/index.js.map +1 -1
  173. package/dist/esm/pages/SceneDataPage.js +1 -1
  174. package/dist/esm/pages/SceneDataPage.js.map +1 -1
  175. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  176. package/for_cratisComponentsPackage/when_describing_query_input_form.ts +17 -0
  177. package/for_cratisComponentsPackage/when_describing_single_result.ts +20 -0
  178. package/forms/SceneQueryInputForm.tsx +79 -0
  179. package/forms/fields/SceneRadioButtonField.tsx +4 -1
  180. package/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.tsx +45 -0
  181. package/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.ts +6 -0
  182. package/forms/for_SceneQueryInputForm/ProjectLookup.ts +54 -0
  183. package/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.tsx +188 -0
  184. package/forms/for_SceneQueryInputForm/when_submitting_native_queries.tsx +423 -0
  185. package/forms/index.ts +2 -0
  186. package/forms/queryInputs.ts +50 -0
  187. package/package.json +23 -7
  188. package/pages/SceneDataPage.tsx +1 -1
@@ -0,0 +1,413 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { act, cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react';
3
+ import { expect, vi } from 'vitest';
4
+ import { ArcContext } from '@cratis/arc.react';
5
+ import { QueryFor, QueryHttpMethod, QueryValidator } from '@cratis/arc/queries';
6
+ import { ParameterDescriptor } from '@cratis/arc/reflection';
7
+ import { SceneElementView } from '@cratis/scene.react';
8
+ import { clearBindings, registerQuery, registerQueryIdentity, unregisterQueryIdentity } from '../../bindings';
9
+ import { cratisComponents } from '../../cratisComponents';
10
+ import { externalComponent } from '../../given';
11
+ class ArgumentsValidator extends QueryValidator {
12
+ static received = [];
13
+ constructor() {
14
+ super();
15
+ this.ruleFor(args => {
16
+ if (Object.hasOwn(args, 'projectId'))
17
+ ArgumentsValidator.received.push(args);
18
+ return args.projectId;
19
+ }).minLength(2);
20
+ }
21
+ }
22
+ class ProjectName extends QueryFor {
23
+ route = '/projects/{projectId}/name';
24
+ requiredRequestParameters = ['projectId'];
25
+ parameterDescriptors = [
26
+ new ParameterDescriptor('projectId', String, false),
27
+ new ParameterDescriptor('locale', String, false),
28
+ new ParameterDescriptor('toString', String, false),
29
+ ];
30
+ validation = new ArgumentsValidator();
31
+ defaultValue = undefined;
32
+ constructor() {
33
+ super(Object, false);
34
+ this.setHttpMethod(QueryHttpMethod.Get);
35
+ Object.defineProperty(this, 'toString', { value: undefined });
36
+ }
37
+ }
38
+ class AllProjects extends QueryFor {
39
+ route = '/projects';
40
+ requiredRequestParameters = [];
41
+ parameterDescriptors = [];
42
+ defaultValue = [];
43
+ constructor() { super(Object, true); this.setHttpMethod(QueryHttpMethod.Get); }
44
+ }
45
+ function response(data, overrides = {}) {
46
+ return { ok: true, status: 200, json: async () => ({
47
+ data, isSuccess: true, isAuthorized: true, isValid: true, hasExceptions: false,
48
+ validationResults: [], exceptionMessages: [], exceptionStackTrace: '',
49
+ paging: { page: 0, size: 0, totalItems: 0, totalPages: 0 }, ...overrides,
50
+ }) };
51
+ }
52
+ function deferred() {
53
+ let resolve;
54
+ const promise = new Promise(yes => { resolve = yes; });
55
+ return { promise, resolve };
56
+ }
57
+ const input = { parameter: 'projectId', type: 'string', label: 'Project identifier' };
58
+ const context = {
59
+ microservice: 'projects', origin: 'https://example.test', apiBasePath: '/backend',
60
+ httpHeadersCallback: () => ({ 'x-host': 'original' }),
61
+ };
62
+ function view(properties = {}, arc = context, isEnabled = true) {
63
+ const element = { ...externalComponent('Cratis.Components:queryInputForm', {
64
+ query: 'ProjectName', inputs: [input], resultField: 'name', ...properties,
65
+ }), isEnabled };
66
+ return _jsx(ArcContext.Provider, { value: arc, children: _jsx(SceneElementView, { element: element, registry: cratisComponents, resolveBinding: () => undefined }) });
67
+ }
68
+ function edit(value, label = 'Project identifier') {
69
+ fireEvent.change(screen.getByRole('textbox', { name: label }), { target: { value } });
70
+ }
71
+ async function submit() {
72
+ await act(async () => { fireEvent.click(screen.getByRole('button', { name: 'Search' })); });
73
+ }
74
+ describe('when submitting query inputs through SceneElementView and native Arc', () => {
75
+ const fetch = vi.fn();
76
+ beforeEach(() => {
77
+ clearBindings();
78
+ registerQueryIdentity('ProjectName', 'Queries/ProjectName', ProjectName);
79
+ registerQuery('AllProjects', AllProjects);
80
+ ArgumentsValidator.received = [];
81
+ fetch.mockReset();
82
+ fetch.mockResolvedValue(response({ name: 'Project result' }));
83
+ vi.stubGlobal('fetch', fetch);
84
+ });
85
+ afterEach(() => { cleanup(); clearBindings(); vi.unstubAllGlobals(); });
86
+ it('starts empty, never executes while editing, and commits exact named strings in an immutable snapshot', async () => {
87
+ render(view({ inputs: [input, { parameter: 'locale', type: 'string', label: 'Locale', required: false }] }));
88
+ expect(screen.getByRole('textbox', { name: input.label })).toHaveProperty('value', '');
89
+ edit(' exact-ID ');
90
+ edit(' nb & en ', 'Locale');
91
+ expect(fetch).not.toHaveBeenCalled();
92
+ expect(ArgumentsValidator.received).toHaveLength(0);
93
+ await submit();
94
+ expect(await screen.findByText('Project result')).not.toBeNull();
95
+ expect(fetch).toHaveBeenCalledTimes(1);
96
+ const [url, init] = fetch.mock.calls[0];
97
+ expect(String(url)).toBe('https://example.test/backend/projects/%20%20exact-ID%20%20/name?locale=+nb+%26+en+');
98
+ expect(new Headers(init?.headers).get('x-host')).toBe('original');
99
+ expect(new Headers(init?.headers).get('x-cratis-microservice')).toBe('projects');
100
+ const snapshot = ArgumentsValidator.received[0];
101
+ expect(snapshot).toEqual({ projectId: ' exact-ID ', locale: ' nb & en ' });
102
+ expect(Object.isFrozen(snapshot)).toBe(true);
103
+ edit('different');
104
+ expect(screen.queryByText('Project result')).toBeNull();
105
+ expect(snapshot).toEqual({ projectId: ' exact-ID ', locale: ' nb & en ' });
106
+ expect(fetch).toHaveBeenCalledTimes(1);
107
+ });
108
+ it('uses the native form submit event (also emitted by implicit Enter submission)', async () => {
109
+ render(view());
110
+ edit('entered-id');
111
+ await act(async () => { fireEvent.submit(screen.getByRole('form', { name: 'Query input' })); });
112
+ expect(await screen.findByText('Project result')).not.toBeNull();
113
+ expect(String(fetch.mock.calls[0][0])).toContain('/entered-id/name');
114
+ });
115
+ for (const blank of ['', ' ', '\t']) {
116
+ it(`shows required input feedback without performing for ${JSON.stringify(blank)}`, async () => {
117
+ render(view());
118
+ edit(blank);
119
+ await submit();
120
+ expect(screen.getByRole('alert').textContent).toBe('Project identifier is required');
121
+ const control = screen.getByRole('textbox', { name: input.label });
122
+ expect(control.getAttribute('aria-invalid')).toBe('true');
123
+ expect(control.getAttribute('aria-describedby')).toBe(screen.getByRole('alert').id);
124
+ expect(ArgumentsValidator.received).toHaveLength(0);
125
+ expect(fetch).not.toHaveBeenCalled();
126
+ });
127
+ }
128
+ it('validates an explicitly declared whole-string format without coercion and allows correction', async () => {
129
+ render(view({ inputs: [{ ...input, pattern: '[A-Z]{2}-[0-9]{2}' }] }));
130
+ edit(' xx-12 ');
131
+ await submit();
132
+ expect(screen.getByRole('alert').textContent).toBe('Project identifier has an invalid format');
133
+ expect(fetch).not.toHaveBeenCalled();
134
+ expect(ArgumentsValidator.received).toHaveLength(0);
135
+ expect(screen.getByRole('textbox')).toHaveProperty('value', ' xx-12 ');
136
+ edit('AB-12');
137
+ await submit();
138
+ expect(await screen.findByText('Project result')).not.toBeNull();
139
+ expect(ArgumentsValidator.received[0]).toEqual({ projectId: 'AB-12' });
140
+ });
141
+ for (const value of ['12\n', '12\r', '12\r\n', '12\u2028', '12\u2029']) {
142
+ it(`rejects a final line terminator in whole-string patterns: ${JSON.stringify(value)}`, async () => {
143
+ expect(/^(?:[0-9]+)$/u.test(value)).toBe(false);
144
+ render(view({ inputs: [{ ...input, pattern: '[0-9]+' }] }));
145
+ const control = screen.getByRole('textbox');
146
+ Object.defineProperty(control, 'value', { configurable: true, get: () => value });
147
+ fireEvent.change(control);
148
+ await submit();
149
+ expect(screen.getByRole('alert').textContent).toBe('Project identifier has an invalid format');
150
+ expect(control).toHaveProperty('value', value);
151
+ expect(ArgumentsValidator.received).toHaveLength(0);
152
+ expect(fetch).not.toHaveBeenCalled();
153
+ });
154
+ }
155
+ it('preserves an explicitly allowed newline through validation and native HTTP', async () => {
156
+ const value = '12\n';
157
+ render(view({ inputs: [{ ...input, pattern: '[0-9]+\\s' }] }));
158
+ const control = screen.getByRole('textbox');
159
+ Object.defineProperty(control, 'value', { configurable: true, get: () => value });
160
+ fireEvent.change(control);
161
+ await submit();
162
+ expect(await screen.findByText('Project result')).not.toBeNull();
163
+ expect(ArgumentsValidator.received[0]).toEqual({ projectId: value });
164
+ expect(String(fetch.mock.calls[0][0])).toContain('/12%0A/name');
165
+ });
166
+ it('lets native validation reject without HTTP, retains drafts, and allows retry after correction', async () => {
167
+ render(view());
168
+ edit('x');
169
+ await submit();
170
+ expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
171
+ expect(fetch).not.toHaveBeenCalled();
172
+ expect(ArgumentsValidator.received[0]).toEqual({ projectId: 'x' });
173
+ expect(screen.getByRole('textbox')).toHaveProperty('value', 'x');
174
+ edit('xx');
175
+ await submit();
176
+ expect(await screen.findByText('Project result')).not.toBeNull();
177
+ expect(fetch).toHaveBeenCalledTimes(1);
178
+ });
179
+ it('does not guess parameter names when a declaration mismatches the proxy', async () => {
180
+ render(view({ inputs: [{ ...input, parameter: 'ProjectID' }] }));
181
+ edit('explicit-id');
182
+ await submit();
183
+ expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
184
+ expect(fetch).not.toHaveBeenCalled();
185
+ });
186
+ for (const data of [null, undefined]) {
187
+ it(`shows not found for a successful ${String(data)} model and permits repeat submit`, async () => {
188
+ fetch.mockResolvedValueOnce(response(data));
189
+ render(view());
190
+ edit('missing-id');
191
+ await submit();
192
+ expect(await screen.findByText('Not found')).not.toBeNull();
193
+ await submit();
194
+ expect(await screen.findByText('Project result')).not.toBeNull();
195
+ expect(fetch).toHaveBeenCalledTimes(2);
196
+ expect(ArgumentsValidator.received[0]).toEqual(ArgumentsValidator.received[1]);
197
+ expect(ArgumentsValidator.received[0]).not.toBe(ArgumentsValidator.received[1]);
198
+ });
199
+ }
200
+ it('allows retry of unchanged input after transport failure', async () => {
201
+ fetch.mockRejectedValueOnce(new Error('private network details'));
202
+ render(view());
203
+ edit('retry-id');
204
+ await submit();
205
+ expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
206
+ expect(document.body.textContent).not.toContain('private network details');
207
+ await submit();
208
+ expect(await screen.findByText('Project result')).not.toBeNull();
209
+ expect(fetch).toHaveBeenCalledTimes(2);
210
+ });
211
+ for (const failure of [{ isValid: false }, { isAuthorized: false }, { isSuccess: false }, { hasExceptions: true }]) {
212
+ it(`preserves native failure precedence for ${JSON.stringify(failure)}`, async () => {
213
+ fetch.mockResolvedValue(response(null, { ...failure, exceptionMessages: ['secret'] }));
214
+ render(view());
215
+ edit('valid-id');
216
+ await submit();
217
+ expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
218
+ expect(screen.queryByText('Not found')).toBeNull();
219
+ expect(document.body.textContent).not.toContain('secret');
220
+ });
221
+ }
222
+ it('aborts on edit and ignores stale response after a newer submission even when HTTP ignores abort', async () => {
223
+ const a = deferred();
224
+ const b = deferred();
225
+ fetch.mockReturnValueOnce(a.promise).mockReturnValueOnce(b.promise);
226
+ render(view());
227
+ edit('first');
228
+ await submit();
229
+ const signal = fetch.mock.calls[0][1]?.signal;
230
+ edit('second');
231
+ expect(signal?.aborted).toBe(true);
232
+ expect(screen.getByText('Idle')).not.toBeNull();
233
+ expect(fetch).toHaveBeenCalledTimes(1);
234
+ await submit();
235
+ await act(async () => { b.resolve(response({ name: 'Second result' })); });
236
+ await act(async () => { a.resolve(response({ name: 'Obsolete result' })); });
237
+ expect(screen.getByText('Second result')).not.toBeNull();
238
+ expect(screen.queryByText('Obsolete result')).toBeNull();
239
+ });
240
+ it('never resurrects a result by editing back to the previously submitted value', async () => {
241
+ render(view());
242
+ edit('first');
243
+ await submit();
244
+ expect(await screen.findByText('Project result')).not.toBeNull();
245
+ edit('second');
246
+ edit('first');
247
+ expect(screen.queryByText('Project result')).toBeNull();
248
+ expect(screen.getByText('Idle')).not.toBeNull();
249
+ expect(fetch).toHaveBeenCalledTimes(1);
250
+ });
251
+ it('ignores a pending result after edit without a second submit', async () => {
252
+ const pending = deferred();
253
+ fetch.mockReturnValueOnce(pending.promise);
254
+ render(view());
255
+ edit('first');
256
+ await submit();
257
+ edit('second');
258
+ await act(async () => { pending.resolve(response({ name: 'Obsolete result' })); });
259
+ expect(screen.queryByText('Obsolete result')).toBeNull();
260
+ expect(screen.getByText('Idle')).not.toBeNull();
261
+ });
262
+ it('aborts on unmount and ignores successful late completion', async () => {
263
+ const pending = deferred();
264
+ fetch.mockReturnValueOnce(pending.promise);
265
+ const mounted = render(view());
266
+ edit('first');
267
+ await submit();
268
+ mounted.unmount();
269
+ expect(fetch.mock.calls[0][1]?.signal?.aborted).toBe(true);
270
+ await act(async () => { pending.resolve(response({ name: 'Disposed result' })); });
271
+ expect(screen.queryByText('Disposed result')).toBeNull();
272
+ });
273
+ it('reuses runtime invalidation when Arc context headers change', async () => {
274
+ const pending = deferred();
275
+ const mounted = render(view());
276
+ edit('first');
277
+ await submit();
278
+ expect(await screen.findByText('Project result')).not.toBeNull();
279
+ fetch.mockReturnValueOnce(pending.promise);
280
+ mounted.rerender(view({}, { ...context, httpHeadersCallback: () => ({ 'x-host': 'new' }) }));
281
+ expect(screen.queryByText('Project result')).toBeNull();
282
+ await waitFor(() => expect(fetch).toHaveBeenCalledTimes(2));
283
+ expect(new Headers(fetch.mock.calls[1][1]?.headers).get('x-host')).toBe('new');
284
+ await act(async () => { pending.resolve(response({ name: 'New context' })); });
285
+ expect(screen.getByText('New context')).not.toBeNull();
286
+ });
287
+ for (const query of [undefined, 'Missing', 'projectname']) {
288
+ it(`visibly fails exact missing binding ${String(query)} without choosing AllProjects`, () => {
289
+ render(view({ query }));
290
+ expect(screen.getByText(query ? `Unresolved query binding '${query}' on Cratis.Components:queryInputForm` : 'Missing query binding on Cratis.Components:queryInputForm')).not.toBeNull();
291
+ expect(screen.queryByRole('textbox')).toBeNull();
292
+ expect(fetch).not.toHaveBeenCalled();
293
+ });
294
+ }
295
+ it('shows ambiguous identity registrations and never chooses a candidate', () => {
296
+ registerQueryIdentity('ProjectName', 'Other/ProjectName', ProjectName);
297
+ render(view());
298
+ expect(screen.getByRole('alert').textContent).toContain("Ambiguous query binding 'ProjectName'");
299
+ expect(screen.queryByRole('textbox')).toBeNull();
300
+ expect(fetch).not.toHaveBeenCalled();
301
+ });
302
+ it('fails closed and cancels when a mounted binding becomes ambiguous, then starts fresh on resolution', async () => {
303
+ const pending = deferred();
304
+ fetch.mockReturnValueOnce(pending.promise);
305
+ render(view());
306
+ edit('first');
307
+ await submit();
308
+ act(() => { registerQueryIdentity('ProjectName', 'Other/ProjectName', ProjectName); });
309
+ expect(screen.getByRole('alert').textContent).toContain('Ambiguous query binding');
310
+ expect(fetch.mock.calls[0][1]?.signal?.aborted).toBe(true);
311
+ await act(async () => { pending.resolve(response({ name: 'Obsolete result' })); });
312
+ act(() => { unregisterQueryIdentity('ProjectName', 'Other/ProjectName'); });
313
+ expect(screen.getByRole('textbox')).toHaveProperty('value', '');
314
+ expect(screen.queryByText('Obsolete result')).toBeNull();
315
+ expect(fetch).toHaveBeenCalledTimes(1);
316
+ });
317
+ it('accepts legacy registration replacement without making it ambiguous', async () => {
318
+ clearBindings();
319
+ registerQuery('ProjectName', AllProjects);
320
+ registerQuery('ProjectName', ProjectName);
321
+ render(view());
322
+ edit('legacy-id');
323
+ await submit();
324
+ expect(await screen.findByText('Project result')).not.toBeNull();
325
+ expect(fetch).toHaveBeenCalledTimes(1);
326
+ });
327
+ it('replaces a mounted source identity on hot reload using the runtime cancellation contract', async () => {
328
+ const pending = deferred();
329
+ fetch.mockReturnValueOnce(pending.promise);
330
+ render(view());
331
+ edit('reload-id');
332
+ await submit();
333
+ class Replacement extends ProjectName {
334
+ }
335
+ await act(async () => { registerQueryIdentity('ProjectName', 'Queries/ProjectName', Replacement); });
336
+ expect(fetch.mock.calls[0][1]?.signal?.aborted).toBe(true);
337
+ expect(await screen.findByText('Project result')).not.toBeNull();
338
+ await act(async () => { pending.resolve(response({ name: 'Obsolete result' })); });
339
+ expect(screen.queryByText('Obsolete result')).toBeNull();
340
+ expect(fetch).toHaveBeenCalledTimes(2);
341
+ expect(ArgumentsValidator.received[0]).toBe(ArgumentsValidator.received[1]);
342
+ });
343
+ it('includes optional empty strings verbatim and supports exact own names without prototype lookup', async () => {
344
+ render(view({ inputs: [input, { parameter: 'toString', type: 'string', label: 'Optional input', required: false }] }));
345
+ edit('some-id');
346
+ await submit();
347
+ expect(await screen.findByText('Project result')).not.toBeNull();
348
+ expect(ArgumentsValidator.received[0]).toEqual({ projectId: 'some-id', toString: '' });
349
+ expect(new URL(String(fetch.mock.calls[0][0])).searchParams.get('toString')).toBe('');
350
+ });
351
+ it('still runs native required-argument validation when a declared optional string is empty', async () => {
352
+ render(view({ inputs: [{ ...input, required: false }] }));
353
+ await submit();
354
+ expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
355
+ expect(fetch).not.toHaveBeenCalled();
356
+ });
357
+ it('allows an unchanged pending submission to be superseded by an explicit retry', async () => {
358
+ const pending = deferred();
359
+ fetch.mockReturnValueOnce(pending.promise);
360
+ render(view());
361
+ edit('retry-id');
362
+ await submit();
363
+ await submit();
364
+ expect(fetch.mock.calls[0][1]?.signal?.aborted).toBe(true);
365
+ expect(await screen.findByText('Project result')).not.toBeNull();
366
+ await act(async () => { pending.resolve(response({ name: 'Old attempt' })); });
367
+ expect(screen.queryByText('Old attempt')).toBeNull();
368
+ expect(fetch).toHaveBeenCalledTimes(2);
369
+ });
370
+ it('rejects an enumerable proxy before native perform rather than falling back to a collection', async () => {
371
+ render(view({ query: 'AllProjects' }));
372
+ edit('not-used');
373
+ await submit();
374
+ expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
375
+ expect(fetch).not.toHaveBeenCalled();
376
+ });
377
+ for (const inputs of [undefined, [], {}, [null], [{ ...input, type: 'number' }], [input, input], [{ ...input, parameter: '' }], [{ ...input, label: 7 }], [{ ...input, required: 'true' }], [{ ...input, pattern: '[' }], [{ ...input, pattern: 7 }]]) {
378
+ it(`rejects malformed declarations ${JSON.stringify(inputs)} visibly without native execution`, () => {
379
+ render(view({ inputs }));
380
+ expect(screen.getByRole('alert').textContent).toBe('Invalid query input form configuration');
381
+ expect(screen.queryByRole('textbox')).toBeNull();
382
+ expect(fetch).not.toHaveBeenCalled();
383
+ expect(ArgumentsValidator.received).toHaveLength(0);
384
+ });
385
+ }
386
+ it('retains drafts across equivalent host rerenders but resets on a new declaration', async () => {
387
+ const mounted = render(view());
388
+ edit('draft');
389
+ mounted.rerender(view());
390
+ expect(screen.getByRole('textbox')).toHaveProperty('value', 'draft');
391
+ await submit();
392
+ expect(await screen.findByText('Project result')).not.toBeNull();
393
+ mounted.rerender(view({ inputs: [{ ...input, label: 'New identifier' }] }));
394
+ expect(screen.getByRole('textbox')).toHaveProperty('value', '');
395
+ expect(screen.queryByText('Project result')).toBeNull();
396
+ expect(fetch).toHaveBeenCalledTimes(1);
397
+ });
398
+ it('cancels and clears the session when the element is disabled', async () => {
399
+ const pending = deferred();
400
+ fetch.mockReturnValueOnce(pending.promise);
401
+ const mounted = render(view());
402
+ edit('first');
403
+ await submit();
404
+ mounted.rerender(view({}, context, false));
405
+ expect(fetch.mock.calls[0][1]?.signal?.aborted).toBe(true);
406
+ await act(async () => { pending.resolve(response({ name: 'Obsolete result' })); });
407
+ expect(screen.queryByText('Obsolete result')).toBeNull();
408
+ mounted.rerender(view());
409
+ expect(screen.getByRole('textbox')).toHaveProperty('value', '');
410
+ expect(fetch).toHaveBeenCalledTimes(1);
411
+ });
412
+ });
413
+ //# sourceMappingURL=when_submitting_native_queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"when_submitting_native_queries.js","sourceRoot":"","sources":["../../../../forms/for_SceneQueryInputForm/when_submitting_native_queries.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  export * from './SceneCommandForm';
2
+ export * from './SceneQueryInputForm';
3
+ export type { QueryInput } from './queryInputs';
2
4
  export * from './fields';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../forms/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../forms/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,cAAc,UAAU,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './SceneCommandForm';
2
+ export * from './SceneQueryInputForm';
2
3
  export * from './fields';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../forms/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../forms/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,UAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface QueryInput {
2
+ parameter: string;
3
+ type: 'string';
4
+ label: string;
5
+ required?: boolean;
6
+ pattern?: string;
7
+ }
8
+ export declare function queryInputs(properties: Record<string, unknown>): QueryInput[] | undefined;
9
+ export declare function queryInputError(input: QueryInput, value: string): string | undefined;
10
+ //# sourceMappingURL=queryInputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryInputs.d.ts","sourceRoot":"","sources":["../../../forms/queryInputs.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IAEvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAsBzF;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMpF"}
@@ -0,0 +1,47 @@
1
+ import { arrayProperty, objectProperty, stringProperty, booleanProperty } from '../properties.js';
2
+
3
+ // Copyright (c) Cratis. All rights reserved.
4
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
5
+ /** Reject the entire declaration rather than silently dropping malformed inputs. */ function queryInputs(properties) {
6
+ const values = arrayProperty(properties, 'inputs');
7
+ if (!values?.length) return undefined;
8
+ const inputs = [];
9
+ const parameters = new Set();
10
+ for (const value of values){
11
+ const input = objectProperty({
12
+ value
13
+ }, 'value');
14
+ if (!input) return undefined;
15
+ const parameter = stringProperty(input, 'parameter');
16
+ const label = stringProperty(input, 'label');
17
+ const required = booleanProperty(input, 'required');
18
+ const pattern = stringProperty(input, 'pattern');
19
+ if (!parameter || !label || input.type !== 'string' || parameters.has(parameter) || input.required !== undefined && required === undefined || input.pattern !== undefined && pattern === undefined) return undefined;
20
+ if (pattern !== undefined) {
21
+ try {
22
+ new RegExp(`^(?:${pattern})$`, 'u');
23
+ } catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ parameters.add(parameter);
28
+ inputs.push({
29
+ parameter,
30
+ type: 'string',
31
+ label,
32
+ required: required ?? true,
33
+ pattern
34
+ });
35
+ }
36
+ return inputs;
37
+ }
38
+ /** Validation never transforms the submitted string; proxy validators remain authoritative. */ function queryInputError(input, value) {
39
+ if (input.required && !/\S/u.test(value)) return `${input.label} is required`;
40
+ if (input.pattern !== undefined && !new RegExp(`^(?:${input.pattern})$`, 'u').test(value)) {
41
+ return `${input.label} has an invalid format`;
42
+ }
43
+ return undefined;
44
+ }
45
+
46
+ export { queryInputError, queryInputs };
47
+ //# sourceMappingURL=queryInputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryInputs.js","sources":["../../../forms/queryInputs.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { arrayProperty, booleanProperty, objectProperty, stringProperty } from '../properties';\n\n/** Package-local web input declaration, not a Scene.Model form or binding expression. */\nexport interface QueryInput {\n /** Exact generated query argument name. */\n parameter: string;\n type: 'string';\n label: string;\n /** Defaults to true. Required strings must contain a non-whitespace character. */\n required?: boolean;\n /** Optional whole-value JavaScript Unicode regular expression (without delimiters). */\n pattern?: string;\n}\n\n/** Reject the entire declaration rather than silently dropping malformed inputs. */\nexport function queryInputs(properties: Record<string, unknown>): QueryInput[] | undefined {\n const values = arrayProperty(properties, 'inputs');\n if (!values?.length) return undefined;\n const inputs: QueryInput[] = [];\n const parameters = new Set<string>();\n for (const value of values) {\n const input = objectProperty({ value }, 'value');\n if (!input) return undefined;\n const parameter = stringProperty(input, 'parameter');\n const label = stringProperty(input, 'label');\n const required = booleanProperty(input, 'required');\n const pattern = stringProperty(input, 'pattern');\n if (!parameter || !label || input.type !== 'string' || parameters.has(parameter)\n || (input.required !== undefined && required === undefined)\n || (input.pattern !== undefined && pattern === undefined)) return undefined;\n if (pattern !== undefined) {\n try { new RegExp(`^(?:${pattern})$`, 'u'); } catch { return undefined; }\n }\n parameters.add(parameter);\n inputs.push({ parameter, type: 'string', label, required: required ?? true, pattern });\n }\n return inputs;\n}\n\n/** Validation never transforms the submitted string; proxy validators remain authoritative. */\nexport function queryInputError(input: QueryInput, value: string): string | undefined {\n if (input.required && !/\\S/u.test(value)) return `${input.label} is required`;\n if (input.pattern !== undefined && !new RegExp(`^(?:${input.pattern})$`, 'u').test(value)) {\n return `${input.label} has an invalid format`;\n }\n return undefined;\n}\n"],"names":["queryInputs","properties","values","arrayProperty","length","undefined","inputs","parameters","Set","value","input","objectProperty","parameter","stringProperty","label","required","booleanProperty","pattern","type","has","RegExp","add","push","queryInputError","test"],"mappings":";;AAAA;AACA;AAgBA,qFACO,SAASA,WAAAA,CAAYC,UAAmC,EAAA;IAC3D,MAAMC,MAAAA,GAASC,cAAcF,UAAAA,EAAY,QAAA,CAAA;IACzC,IAAI,CAACC,MAAAA,EAAQE,MAAAA,EAAQ,OAAOC,SAAAA;AAC5B,IAAA,MAAMC,SAAuB,EAAE;AAC/B,IAAA,MAAMC,aAAa,IAAIC,GAAAA,EAAAA;IACvB,KAAK,MAAMC,SAASP,MAAAA,CAAQ;AACxB,QAAA,MAAMQ,QAAQC,cAAAA,CAAe;AAAEF,YAAAA;SAAM,EAAG,OAAA,CAAA;QACxC,IAAI,CAACC,OAAO,OAAOL,SAAAA;QACnB,MAAMO,SAAAA,GAAYC,eAAeH,KAAAA,EAAO,WAAA,CAAA;QACxC,MAAMI,KAAAA,GAAQD,eAAeH,KAAAA,EAAO,OAAA,CAAA;QACpC,MAAMK,QAAAA,GAAWC,gBAAgBN,KAAAA,EAAO,UAAA,CAAA;QACxC,MAAMO,OAAAA,GAAUJ,eAAeH,KAAAA,EAAO,SAAA,CAAA;QACtC,IAAI,CAACE,SAAAA,IAAa,CAACE,KAAAA,IAASJ,KAAAA,CAAMQ,IAAI,KAAK,QAAA,IAAYX,UAAAA,CAAWY,GAAG,CAACP,SAAAA,CAAAA,IAC9DF,MAAMK,QAAQ,KAAKV,SAAAA,IAAaU,QAAAA,KAAaV,SAAAA,IAC7CK,KAAAA,CAAMO,OAAO,KAAKZ,SAAAA,IAAaY,OAAAA,KAAYZ,SAAAA,EAAY,OAAOA,SAAAA;AACtE,QAAA,IAAIY,YAAYZ,SAAAA,EAAW;YACvB,IAAI;AAAE,gBAAA,IAAIe,OAAO,CAAC,IAAI,EAAEH,OAAAA,CAAQ,EAAE,CAAC,EAAE,GAAA,CAAA;AAAM,YAAA,CAAA,CAAE,OAAM;gBAAE,OAAOZ,SAAAA;AAAW,YAAA;AAC3E,QAAA;AACAE,QAAAA,UAAAA,CAAWc,GAAG,CAACT,SAAAA,CAAAA;AACfN,QAAAA,MAAAA,CAAOgB,IAAI,CAAC;AAAEV,YAAAA,SAAAA;YAAWM,IAAAA,EAAM,QAAA;AAAUJ,YAAAA,KAAAA;AAAOC,YAAAA,QAAAA,EAAUA,QAAAA,IAAY,IAAA;AAAME,YAAAA;AAAQ,SAAA,CAAA;AACxF,IAAA;IACA,OAAOX,MAAAA;AACX;AAEA,gGACO,SAASiB,eAAAA,CAAgBb,KAAiB,EAAED,KAAa,EAAA;AAC5D,IAAA,IAAIC,KAAAA,CAAMK,QAAQ,IAAI,CAAC,MAAMS,IAAI,CAACf,KAAAA,CAAAA,EAAQ,OAAO,CAAA,EAAGC,KAAAA,CAAMI,KAAK,CAAC,YAAY,CAAC;AAC7E,IAAA,IAAIJ,MAAMO,OAAO,KAAKZ,aAAa,CAAC,IAAIe,OAAO,CAAC,IAAI,EAAEV,KAAAA,CAAMO,OAAO,CAAC,EAAE,CAAC,EAAE,GAAA,CAAA,CAAKO,IAAI,CAACf,KAAAA,CAAAA,EAAQ;AACvF,QAAA,OAAO,CAAA,EAAGC,KAAAA,CAAMI,KAAK,CAAC,sBAAsB,CAAC;AACjD,IAAA;IACA,OAAOT,SAAAA;AACX;;"}
package/dist/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { arrayProperty, booleanProperty, numberProperty, objectArrayProperty, objectProperty, stringArrayProperty, stringProperty, unionProperty } from './properties.js';
2
2
  export { BindingKind } from './bindings/BindingKind.js';
3
- export { clearBindings, registerCommand, registerCommands, registerQueries, registerQuery, registeredCommandNames, registeredQueryNames, resolveCommand, resolveQuery } from './bindings/bindingRegistry.js';
3
+ export { clearBindings, registerCommand, registerCommands, registerQueries, registerQuery, registerQueryIdentity, registeredCommandNames, registeredQueryNames, resolveCommand, resolveExactQuery, resolveQuery, subscribeQueryBindings, unregisterQueryIdentity } from './bindings/bindingRegistry.js';
4
4
  export { resolveElementBinding } from './bindings/resolveElementBinding.js';
5
5
  export { Placeholder } from './bindings/Placeholder.js';
6
6
  export { MissingBinding } from './bindings/MissingBinding.js';
@@ -8,9 +8,11 @@ export { ArcRuntimeBoundary } from './bindings/ArcRuntimeBoundary.js';
8
8
  export { ScenePage } from './pages/ScenePage.js';
9
9
  export { SceneDataPage } from './pages/SceneDataPage.js';
10
10
  export { SceneFormElement } from './pages/SceneFormElement.js';
11
+ export { SceneSingleResult } from './data/SceneSingleResult.js';
11
12
  export { SceneDataTable } from './data/SceneDataTable.js';
12
13
  export { SceneObservableDataTable } from './data/SceneObservableDataTable.js';
13
14
  export { SceneCommandForm } from './forms/SceneCommandForm.js';
15
+ export { SceneQueryInputForm } from './forms/SceneQueryInputForm.js';
14
16
  export { resolveFieldBinding } from './forms/fields/resolveFieldBinding.js';
15
17
  export { CommandFormField } from './forms/fields/CommandFormField.js';
16
18
  export { SceneInputTextField } from './forms/fields/SceneInputTextField.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -7,7 +7,7 @@ import { ArcRuntimeBoundary } from '../bindings/ArcRuntimeBoundary.js';
7
7
  import { stringArrayProperty, stringProperty } from '../properties.js';
8
8
 
9
9
  const DataPage = /*#__PURE__*/ lazy(async ()=>({
10
- default: (await import('@cratis/components/DataPage')).DataPage
10
+ default: (await import('../bindings/ArcBoundComponents.js')).BoundDataPage
11
11
  }));
12
12
  /**
13
13
  * The `Cratis.Components:dataPage` component - `DataPage` from `@cratis/components/DataPage`.
@@ -1 +1 @@
1
- {"version":3,"file":"SceneDataPage.js","sources":["../../../pages/SceneDataPage.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { lazy } from 'react';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { ArcRuntimeBoundary, BindingKind, MissingBinding, resolveElementBinding } from '../bindings';\nimport { stringArrayProperty, stringProperty } from '../properties';\n\nconst DataPage = lazy(async () => ({ default: (await import('@cratis/components/DataPage')).DataPage }));\n\n/**\n * The `Cratis.Components:dataPage` component - `DataPage` from `@cratis/components/DataPage`.\n *\n * The library's whole list-screen composite in one name: title bar, action toolbar, filterable table and\n * optional details pane, all driven from a single query. It is the single highest-leverage thing this\n * package exposes, because reproducing it out of `table` and `toolbar` in a screen would be pages of\n * modeling for a worse result.\n *\n * The `query` property names an Arc query proxy; the columns and menu items come from the `content`\n * slot as `DataPage.Columns` / `DataPage.MenuItems` children.\n *\n * No `clientFiltering` property, for the same reason `dataTable` no longer exposes one: 3.0.0 keeps the\n * prop so call sites compile but never reads it, and a screen setting that cannot take effect is a worse\n * thing to offer than nothing.\n */\nexport function SceneDataPage({ element, slots }: RegisteredComponentProps) {\n const { name, target } = resolveElementBinding(element, BindingKind.Query);\n if (!target) return <MissingBinding element={element} kind={BindingKind.Query} name={name} />;\n\n return (\n <ArcRuntimeBoundary>\n <DataPage\n title={stringProperty(element.properties, 'title') ?? ''}\n query={target}\n emptyMessage={stringProperty(element.properties, 'emptyMessage') ?? ''}\n dataKey={stringProperty(element.properties, 'dataKey')}\n globalFilterFields={stringArrayProperty(element.properties, 'globalFilterFields')}\n >\n {slots.content}\n </DataPage>\n </ArcRuntimeBoundary>\n );\n}\n"],"names":["DataPage","lazy","default","SceneDataPage","element","slots","name","target","resolveElementBinding","BindingKind","Query","_jsx","MissingBinding","kind","ArcRuntimeBoundary","title","stringProperty","properties","query","emptyMessage","dataKey","globalFilterFields","stringArrayProperty","content"],"mappings":";;;;;;;;AAQA,MAAMA,QAAAA,iBAAWC,IAAAA,CAAK,WAAa;AAAEC,QAAAA,OAAAA,EAAS,CAAC,MAAM,OAAO,6BAAA,CAA6B,EAAGF;KAAS,CAAA,CAAA;AAErG;;;;;;;;;;;;;;AAcC,IACM,SAASG,aAAAA,CAAc,EAAEC,OAAO,EAAEC,KAAK,EAA4B,EAAA;IACtE,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAE,GAAGC,qBAAAA,CAAsBJ,OAAAA,EAASK,WAAAA,CAAYC,KAAK,CAAA;IACzE,IAAI,CAACH,MAAAA,EAAQ,qBAAOI,GAAA,CAACC,cAAAA,EAAAA;QAAeR,OAAAA,EAASA,OAAAA;AAASS,QAAAA,IAAAA,EAAMJ,YAAYC,KAAK;QAAEJ,IAAAA,EAAMA;;AAErF,IAAA,qBACIK,GAAA,CAACG,kBAAAA,EAAAA;AACG,QAAA,QAAA,gBAAAH,GAAA,CAACX,QAAAA,EAAAA;AACGe,YAAAA,KAAAA,EAAOC,cAAAA,CAAeZ,OAAAA,CAAQa,UAAU,EAAE,OAAA,CAAA,IAAY,EAAA;YACtDC,KAAAA,EAAOX,MAAAA;AACPY,YAAAA,YAAAA,EAAcH,cAAAA,CAAeZ,OAAAA,CAAQa,UAAU,EAAE,cAAA,CAAA,IAAmB,EAAA;YACpEG,OAAAA,EAASJ,cAAAA,CAAeZ,OAAAA,CAAQa,UAAU,EAAE,SAAA,CAAA;YAC5CI,kBAAAA,EAAoBC,mBAAAA,CAAoBlB,OAAAA,CAAQa,UAAU,EAAE,oBAAA,CAAA;AAE3DZ,YAAAA,QAAAA,EAAAA,KAAAA,CAAMkB;;;AAIvB;;"}
1
+ {"version":3,"file":"SceneDataPage.js","sources":["../../../pages/SceneDataPage.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { lazy } from 'react';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { ArcRuntimeBoundary, BindingKind, MissingBinding, resolveElementBinding } from '../bindings';\nimport { stringArrayProperty, stringProperty } from '../properties';\n\nconst DataPage = lazy(async () => ({ default: (await import('../bindings/ArcBoundComponents')).BoundDataPage }));\n\n/**\n * The `Cratis.Components:dataPage` component - `DataPage` from `@cratis/components/DataPage`.\n *\n * The library's whole list-screen composite in one name: title bar, action toolbar, filterable table and\n * optional details pane, all driven from a single query. It is the single highest-leverage thing this\n * package exposes, because reproducing it out of `table` and `toolbar` in a screen would be pages of\n * modeling for a worse result.\n *\n * The `query` property names an Arc query proxy; the columns and menu items come from the `content`\n * slot as `DataPage.Columns` / `DataPage.MenuItems` children.\n *\n * No `clientFiltering` property, for the same reason `dataTable` no longer exposes one: 3.0.0 keeps the\n * prop so call sites compile but never reads it, and a screen setting that cannot take effect is a worse\n * thing to offer than nothing.\n */\nexport function SceneDataPage({ element, slots }: RegisteredComponentProps) {\n const { name, target } = resolveElementBinding(element, BindingKind.Query);\n if (!target) return <MissingBinding element={element} kind={BindingKind.Query} name={name} />;\n\n return (\n <ArcRuntimeBoundary>\n <DataPage\n title={stringProperty(element.properties, 'title') ?? ''}\n query={target}\n emptyMessage={stringProperty(element.properties, 'emptyMessage') ?? ''}\n dataKey={stringProperty(element.properties, 'dataKey')}\n globalFilterFields={stringArrayProperty(element.properties, 'globalFilterFields')}\n >\n {slots.content}\n </DataPage>\n </ArcRuntimeBoundary>\n );\n}\n"],"names":["DataPage","lazy","default","BoundDataPage","SceneDataPage","element","slots","name","target","resolveElementBinding","BindingKind","Query","_jsx","MissingBinding","kind","ArcRuntimeBoundary","title","stringProperty","properties","query","emptyMessage","dataKey","globalFilterFields","stringArrayProperty","content"],"mappings":";;;;;;;;AAQA,MAAMA,QAAAA,iBAAWC,IAAAA,CAAK,WAAa;AAAEC,QAAAA,OAAAA,EAAS,CAAC,MAAM,OAAO,mCAAA,CAAgC,EAAGC;KAAc,CAAA,CAAA;AAE7G;;;;;;;;;;;;;;AAcC,IACM,SAASC,aAAAA,CAAc,EAAEC,OAAO,EAAEC,KAAK,EAA4B,EAAA;IACtE,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAE,GAAGC,qBAAAA,CAAsBJ,OAAAA,EAASK,WAAAA,CAAYC,KAAK,CAAA;IACzE,IAAI,CAACH,MAAAA,EAAQ,qBAAOI,GAAA,CAACC,cAAAA,EAAAA;QAAeR,OAAAA,EAASA,OAAAA;AAASS,QAAAA,IAAAA,EAAMJ,YAAYC,KAAK;QAAEJ,IAAAA,EAAMA;;AAErF,IAAA,qBACIK,GAAA,CAACG,kBAAAA,EAAAA;AACG,QAAA,QAAA,gBAAAH,GAAA,CAACZ,QAAAA,EAAAA;AACGgB,YAAAA,KAAAA,EAAOC,cAAAA,CAAeZ,OAAAA,CAAQa,UAAU,EAAE,OAAA,CAAA,IAAY,EAAA;YACtDC,KAAAA,EAAOX,MAAAA;AACPY,YAAAA,YAAAA,EAAcH,cAAAA,CAAeZ,OAAAA,CAAQa,UAAU,EAAE,cAAA,CAAA,IAAmB,EAAA;YACpEG,OAAAA,EAASJ,cAAAA,CAAeZ,OAAAA,CAAQa,UAAU,EAAE,SAAA,CAAA;YAC5CI,kBAAAA,EAAoBC,mBAAAA,CAAoBlB,OAAAA,CAAQa,UAAU,EAAE,oBAAA,CAAA;AAE3DZ,YAAAA,QAAAA,EAAAA,KAAAA,CAAMkB;;;AAIvB;;"}