@lynx-js/genui 0.0.1-rc.0 → 0.0.1

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/a2ui/README.md +777 -100
  2. package/a2ui/dist/catalog/ChoicePicker/catalog.json +265 -0
  3. package/a2ui/dist/catalog/ChoicePicker/index.d.ts +56 -0
  4. package/a2ui/dist/catalog/ChoicePicker/index.js +66 -0
  5. package/a2ui/dist/catalog/ChoicePicker/index.js.map +1 -0
  6. package/a2ui/dist/catalog/ChoicePicker/utils.d.ts +13 -0
  7. package/a2ui/dist/catalog/ChoicePicker/utils.js +80 -0
  8. package/a2ui/dist/catalog/ChoicePicker/utils.js.map +1 -0
  9. package/a2ui/dist/catalog/Column/index.js +3 -7
  10. package/a2ui/dist/catalog/Column/index.js.map +1 -1
  11. package/a2ui/dist/catalog/DateTimeInput/catalog.json +165 -0
  12. package/a2ui/dist/catalog/DateTimeInput/index.d.ts +43 -0
  13. package/a2ui/dist/catalog/DateTimeInput/index.js +147 -0
  14. package/a2ui/dist/catalog/DateTimeInput/index.js.map +1 -0
  15. package/a2ui/dist/catalog/DateTimeInput/utils.d.ts +53 -0
  16. package/a2ui/dist/catalog/DateTimeInput/utils.js +248 -0
  17. package/a2ui/dist/catalog/DateTimeInput/utils.js.map +1 -0
  18. package/a2ui/dist/catalog/Icon/catalog.json +173 -2
  19. package/a2ui/dist/catalog/Icon/index.d.ts +2 -2
  20. package/a2ui/dist/catalog/Icon/index.js.map +1 -1
  21. package/a2ui/dist/catalog/Image/catalog.json +1 -17
  22. package/a2ui/dist/catalog/Image/index.d.ts +1 -3
  23. package/a2ui/dist/catalog/Image/index.js +3 -11
  24. package/a2ui/dist/catalog/Image/index.js.map +1 -1
  25. package/a2ui/dist/catalog/LineChart/index.js +3 -3
  26. package/a2ui/dist/catalog/LineChart/index.js.map +1 -1
  27. package/a2ui/dist/catalog/Modal/index.js +1 -1
  28. package/a2ui/dist/catalog/Modal/index.js.map +1 -1
  29. package/a2ui/dist/catalog/index.d.ts +4 -0
  30. package/a2ui/dist/catalog/index.js +2046 -3
  31. package/a2ui/dist/catalog/index.js.map +1 -1
  32. package/a2ui/dist/index.d.ts +1 -1
  33. package/a2ui/dist/index.js +1 -1
  34. package/a2ui/dist/index.js.map +1 -1
  35. package/a2ui/dist/react/A2UIRenderer.d.ts +1 -0
  36. package/a2ui/dist/react/A2UIRenderer.js +8 -6
  37. package/a2ui/dist/react/A2UIRenderer.js.map +1 -1
  38. package/a2ui/dist/react/useAction.js +2 -1
  39. package/a2ui/dist/react/useAction.js.map +1 -1
  40. package/a2ui/dist/react/useChecks.js +7 -2
  41. package/a2ui/dist/react/useChecks.js.map +1 -1
  42. package/a2ui/dist/react/useDataBinding.d.ts +1 -1
  43. package/a2ui/dist/react/useDataBinding.js +24 -48
  44. package/a2ui/dist/react/useDataBinding.js.map +1 -1
  45. package/a2ui/dist/store/MessageProcessor.js +7 -19
  46. package/a2ui/dist/store/MessageProcessor.js.map +1 -1
  47. package/a2ui/dist/store/SignalStore.d.ts +2 -0
  48. package/a2ui/dist/store/SignalStore.js +5 -0
  49. package/a2ui/dist/store/SignalStore.js.map +1 -1
  50. package/a2ui/dist/store/index.d.ts +3 -1
  51. package/a2ui/dist/store/index.js +3 -1
  52. package/a2ui/dist/store/index.js.map +1 -1
  53. package/a2ui/dist/store/resolveDynamic.d.ts +9 -0
  54. package/a2ui/dist/store/resolveDynamic.js +88 -0
  55. package/a2ui/dist/store/resolveDynamic.js.map +1 -0
  56. package/a2ui/dist/store/resolveFunctionCall.d.ts +2 -4
  57. package/a2ui/dist/store/resolveFunctionCall.js +24 -82
  58. package/a2ui/dist/store/resolveFunctionCall.js.map +1 -1
  59. package/a2ui/dist/store/signalResolution.d.ts +4 -0
  60. package/a2ui/dist/store/signalResolution.js +25 -0
  61. package/a2ui/dist/store/signalResolution.js.map +1 -0
  62. package/a2ui/dist/store/utils.d.ts +7 -0
  63. package/a2ui/dist/store/utils.js +24 -0
  64. package/a2ui/dist/store/utils.js.map +1 -0
  65. package/a2ui/dist/tsconfig.build.tsbuildinfo +1 -1
  66. package/a2ui/styles/catalog/ChoicePicker.css +157 -0
  67. package/a2ui/styles/catalog/DateTimeInput.css +375 -0
  68. package/a2ui/styles/catalog/Icon.css +1 -1
  69. package/a2ui/styles/catalog/Text.css +11 -11
  70. package/a2ui/styles/theme.css +2 -1
  71. package/a2ui-catalog-extractor/README.md +23 -15
  72. package/a2ui-catalog-extractor/bin/a2ui-catalog-extractor.js +0 -1
  73. package/a2ui-catalog-extractor/dist/tsconfig.build.tsbuildinfo +1 -1
  74. package/a2ui-prompt/README.md +1 -2
  75. package/a2ui-prompt/dist/index.js +65 -31
  76. package/cli/bin/cli.js +5 -2
  77. package/dist/tsconfig.build.tsbuildinfo +1 -1
  78. package/package.json +8 -1
@@ -0,0 +1,265 @@
1
+ {
2
+ "ChoicePicker": {
3
+ "properties": {
4
+ "label": {
5
+ "oneOf": [
6
+ {
7
+ "type": "string"
8
+ },
9
+ {
10
+ "type": "object",
11
+ "properties": {
12
+ "path": {
13
+ "type": "string"
14
+ }
15
+ },
16
+ "required": [
17
+ "path"
18
+ ],
19
+ "additionalProperties": false
20
+ },
21
+ {
22
+ "type": "object",
23
+ "properties": {
24
+ "call": {
25
+ "type": "string"
26
+ },
27
+ "args": {
28
+ "type": "object",
29
+ "additionalProperties": true
30
+ },
31
+ "returnType": {
32
+ "type": "string",
33
+ "enum": [
34
+ "string",
35
+ "number",
36
+ "boolean",
37
+ "object",
38
+ "array",
39
+ "any",
40
+ "void"
41
+ ]
42
+ }
43
+ },
44
+ "required": [
45
+ "call",
46
+ "args"
47
+ ],
48
+ "additionalProperties": false
49
+ }
50
+ ],
51
+ "description": "The label for the group of options."
52
+ },
53
+ "variant": {
54
+ "type": "string",
55
+ "enum": [
56
+ "multipleSelection",
57
+ "mutuallyExclusive"
58
+ ],
59
+ "description": "A hint for how the choice picker should be displayed and behave."
60
+ },
61
+ "options": {
62
+ "type": "array",
63
+ "items": {
64
+ "type": "object",
65
+ "properties": {
66
+ "label": {
67
+ "oneOf": [
68
+ {
69
+ "type": "string"
70
+ },
71
+ {
72
+ "type": "object",
73
+ "properties": {
74
+ "path": {
75
+ "type": "string"
76
+ }
77
+ },
78
+ "required": [
79
+ "path"
80
+ ],
81
+ "additionalProperties": false
82
+ },
83
+ {
84
+ "type": "object",
85
+ "properties": {
86
+ "call": {
87
+ "type": "string"
88
+ },
89
+ "args": {
90
+ "type": "object",
91
+ "additionalProperties": true
92
+ },
93
+ "returnType": {
94
+ "type": "string",
95
+ "enum": [
96
+ "string",
97
+ "number",
98
+ "boolean",
99
+ "object",
100
+ "array",
101
+ "any",
102
+ "void"
103
+ ]
104
+ }
105
+ },
106
+ "required": [
107
+ "call",
108
+ "args"
109
+ ],
110
+ "additionalProperties": false
111
+ }
112
+ ],
113
+ "description": "The text to display for this option."
114
+ },
115
+ "value": {
116
+ "type": "string",
117
+ "description": "The stable value associated with this option."
118
+ }
119
+ },
120
+ "required": [
121
+ "label",
122
+ "value"
123
+ ],
124
+ "additionalProperties": false
125
+ },
126
+ "description": "The list of available options to choose from."
127
+ },
128
+ "value": {
129
+ "oneOf": [
130
+ {
131
+ "type": "array",
132
+ "items": {
133
+ "type": "string"
134
+ }
135
+ },
136
+ {
137
+ "type": "object",
138
+ "properties": {
139
+ "path": {
140
+ "type": "string"
141
+ }
142
+ },
143
+ "required": [
144
+ "path"
145
+ ],
146
+ "additionalProperties": false
147
+ },
148
+ {
149
+ "type": "object",
150
+ "properties": {
151
+ "call": {
152
+ "type": "string"
153
+ },
154
+ "args": {
155
+ "type": "object",
156
+ "additionalProperties": true
157
+ },
158
+ "returnType": {
159
+ "type": "string",
160
+ "enum": [
161
+ "string",
162
+ "number",
163
+ "boolean",
164
+ "object",
165
+ "array",
166
+ "any",
167
+ "void"
168
+ ]
169
+ }
170
+ },
171
+ "required": [
172
+ "call",
173
+ "args"
174
+ ],
175
+ "additionalProperties": false
176
+ }
177
+ ],
178
+ "description": "The list of currently selected values."
179
+ },
180
+ "displayStyle": {
181
+ "type": "string",
182
+ "enum": [
183
+ "checkbox",
184
+ "chips"
185
+ ],
186
+ "description": "The display style of the component."
187
+ },
188
+ "filterable": {
189
+ "type": "boolean",
190
+ "description": "If true, displays a search input to filter the options."
191
+ },
192
+ "checks": {
193
+ "type": "array",
194
+ "items": {
195
+ "type": "object",
196
+ "properties": {
197
+ "condition": {
198
+ "oneOf": [
199
+ {
200
+ "type": "boolean"
201
+ },
202
+ {
203
+ "type": "object",
204
+ "properties": {
205
+ "path": {
206
+ "type": "string"
207
+ }
208
+ },
209
+ "required": [
210
+ "path"
211
+ ],
212
+ "additionalProperties": false
213
+ },
214
+ {
215
+ "type": "object",
216
+ "properties": {
217
+ "call": {
218
+ "type": "string"
219
+ },
220
+ "args": {
221
+ "type": "object",
222
+ "additionalProperties": true
223
+ },
224
+ "returnType": {
225
+ "type": "string",
226
+ "enum": [
227
+ "string",
228
+ "number",
229
+ "boolean",
230
+ "object",
231
+ "array",
232
+ "any",
233
+ "void"
234
+ ]
235
+ }
236
+ },
237
+ "required": [
238
+ "call",
239
+ "args"
240
+ ],
241
+ "additionalProperties": false
242
+ }
243
+ ],
244
+ "description": "The condition that indicates whether the check passes."
245
+ },
246
+ "message": {
247
+ "type": "string",
248
+ "description": "The error message to display if the check fails."
249
+ }
250
+ },
251
+ "required": [
252
+ "condition",
253
+ "message"
254
+ ],
255
+ "additionalProperties": false
256
+ },
257
+ "description": "A list of checks to perform."
258
+ }
259
+ },
260
+ "required": [
261
+ "options",
262
+ "value"
263
+ ]
264
+ }
265
+ }
@@ -0,0 +1,56 @@
1
+ import type { GenericComponentProps } from '../../store/types.js';
2
+ import '../../../styles/catalog/ChoicePicker.css';
3
+ /**
4
+ * @a2uiCatalog ChoicePicker
5
+ */
6
+ export interface ChoicePickerProps extends GenericComponentProps {
7
+ /** The label for the group of options. */
8
+ label?: string | {
9
+ path: string;
10
+ } | {
11
+ call: string;
12
+ args: Record<string, unknown>;
13
+ returnType?: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'any' | 'void';
14
+ };
15
+ /** A hint for how the choice picker should be displayed and behave. */
16
+ variant?: 'multipleSelection' | 'mutuallyExclusive';
17
+ /** The list of available options to choose from. */
18
+ options: Array<{
19
+ /** The text to display for this option. */
20
+ label: string | {
21
+ path: string;
22
+ } | {
23
+ call: string;
24
+ args: Record<string, unknown>;
25
+ returnType?: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'any' | 'void';
26
+ };
27
+ /** The stable value associated with this option. */
28
+ value: string;
29
+ }>;
30
+ /** The list of currently selected values. */
31
+ value: string[] | {
32
+ path: string;
33
+ } | {
34
+ call: string;
35
+ args: Record<string, unknown>;
36
+ returnType?: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'any' | 'void';
37
+ };
38
+ /** The display style of the component. */
39
+ displayStyle?: 'checkbox' | 'chips';
40
+ /** If true, displays a search input to filter the options. */
41
+ filterable?: boolean;
42
+ /** A list of checks to perform. */
43
+ checks?: Array<{
44
+ /** The condition that indicates whether the check passes. */
45
+ condition: boolean | {
46
+ path: string;
47
+ } | {
48
+ call: string;
49
+ args: Record<string, unknown>;
50
+ returnType?: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'any' | 'void';
51
+ };
52
+ /** The error message to display if the check fails. */
53
+ message: string;
54
+ }>;
55
+ }
56
+ export declare function ChoicePicker(props: ChoicePickerProps): import('@lynx-js/react').ReactNode;
@@ -0,0 +1,66 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@lynx-js/react/jsx-runtime";
2
+ // Copyright 2026 The Lynx Authors. All rights reserved.
3
+ // Licensed under the Apache License Version 2.0 that can be found in the
4
+ // LICENSE file in the root directory of this source tree.
5
+ import { Checkbox, CheckboxIndicator, Input, Radio, RadioGroupRoot, RadioIndicator, } from '@lynx-js/lynx-ui';
6
+ import { useState } from '@lynx-js/react';
7
+ import { filterChoicePickerOptions, normalizeChoicePickerDisplayStyle, normalizeChoicePickerLabel, normalizeChoicePickerOptions, normalizeChoicePickerValue, normalizeChoicePickerVariant, toggleChoicePickerValue, } from './utils.js';
8
+ import { useChecks } from '../../react/useChecks.js';
9
+ import '../../../styles/catalog/ChoicePicker.css';
10
+ const HitSlop = {
11
+ 'hit-slop': {
12
+ top: '8px',
13
+ left: '8px',
14
+ right: '8px',
15
+ bottom: '8px',
16
+ },
17
+ };
18
+ export function ChoicePicker(props) {
19
+ const { dataContextPath, filterable = false, id, label, setValue, surface, } = props;
20
+ const [query, setQuery] = useState('');
21
+ const options = normalizeChoicePickerOptions(props.options);
22
+ const variant = normalizeChoicePickerVariant(props.variant);
23
+ const displayStyle = normalizeChoicePickerDisplayStyle(props.displayStyle);
24
+ const selectedValues = normalizeChoicePickerValue(props.value, options);
25
+ const selectedValue = selectedValues[0] ?? '';
26
+ const visibleOptions = filterChoicePickerOptions(options, query);
27
+ const checks = props.checks;
28
+ const { ok, firstFailureMessage } = useChecks({
29
+ checks,
30
+ componentId: id ?? '',
31
+ surface,
32
+ dataContextPath,
33
+ });
34
+ const handleExclusiveChange = (nextValue) => {
35
+ if (!nextValue || selectedValue === nextValue)
36
+ return;
37
+ setValue?.('value', [nextValue]);
38
+ };
39
+ const handleMultipleChange = (optionValue) => {
40
+ setValue?.('value', toggleChoicePickerValue(selectedValues, optionValue, variant));
41
+ };
42
+ const rootClassName = [
43
+ 'choice-picker',
44
+ `choice-picker-${displayStyle}`,
45
+ `choice-picker-${variant}`,
46
+ ok ? '' : 'choice-picker-invalid',
47
+ ].filter(Boolean).join(' ');
48
+ const labelText = normalizeChoicePickerLabel(label);
49
+ return (_jsxs("view", { className: rootClassName, children: [labelText
50
+ ? _jsx("text", { className: 'choice-picker-label', children: labelText })
51
+ : null, filterable
52
+ ? (_jsx(Input, { className: 'choice-picker-filter', value: query, type: 'text', confirmType: 'done', onInput: setQuery }))
53
+ : null, variant === 'mutuallyExclusive'
54
+ ? (_jsx(RadioGroupRoot, { value: selectedValue, onValueChange: handleExclusiveChange, children: _jsx("view", { className: 'choice-picker-options', children: visibleOptions.map((option) => displayStyle === 'chips'
55
+ ? (_jsx(Radio, { className: 'choice-picker-chip', value: option.value, radioProps: HitSlop, children: _jsx("text", { className: 'choice-picker-chip-text', children: option.label }) }, option.value))
56
+ : (_jsxs(Radio, { className: 'choice-picker-option', value: option.value, radioProps: HitSlop, children: [_jsx(RadioIndicator, { forceMount: true, className: 'choice-picker-radio-indicator', children: _jsx("view", { className: 'choice-picker-radio-dot' }) }), _jsx("text", { className: 'choice-picker-option-text', children: option.label })] }, option.value))) }) }))
57
+ : (_jsx("view", { className: 'choice-picker-options', children: visibleOptions.map((option) => {
58
+ const checked = selectedValues.includes(option.value);
59
+ return displayStyle === 'chips'
60
+ ? (_jsx(Checkbox, { className: 'choice-picker-chip', checked: checked, onChange: () => handleMultipleChange(option.value), checkboxProps: HitSlop, children: _jsx("text", { className: 'choice-picker-chip-text', children: option.label }) }, option.value))
61
+ : (_jsxs(Checkbox, { className: 'choice-picker-option', checked: checked, onChange: () => handleMultipleChange(option.value), checkboxProps: HitSlop, children: [_jsx(CheckboxIndicator, { forceMount: true, className: 'choice-picker-checkbox-indicator', children: _jsx("text", { className: 'choice-picker-checkmark', children: "\u2713" }) }), _jsx("text", { className: 'choice-picker-option-text', children: option.label })] }, option.value));
62
+ }) })), !ok && firstFailureMessage
63
+ ? _jsx("text", { className: 'choice-picker-error', children: firstFailureMessage })
64
+ : null] }, id));
65
+ }
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/catalog/ChoicePicker/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface ChoicePickerOption {
2
+ label: string;
3
+ value: string;
4
+ }
5
+ export type ChoicePickerVariant = 'multipleSelection' | 'mutuallyExclusive';
6
+ export type ChoicePickerDisplayStyle = 'checkbox' | 'chips';
7
+ export declare function normalizeChoicePickerLabel(value: unknown): string;
8
+ export declare function normalizeChoicePickerVariant(value: unknown): ChoicePickerVariant;
9
+ export declare function normalizeChoicePickerDisplayStyle(value: unknown): ChoicePickerDisplayStyle;
10
+ export declare function normalizeChoicePickerOptions(value: unknown): ChoicePickerOption[];
11
+ export declare function normalizeChoicePickerValue(value: unknown, options?: readonly ChoicePickerOption[]): string[];
12
+ export declare function toggleChoicePickerValue(currentValue: readonly string[], optionValue: string, variant: ChoicePickerVariant): string[];
13
+ export declare function filterChoicePickerOptions(options: readonly ChoicePickerOption[], query: string): ChoicePickerOption[];
@@ -0,0 +1,80 @@
1
+ // Copyright 2026 The Lynx Authors. All rights reserved.
2
+ // Licensed under the Apache License Version 2.0 that can be found in the
3
+ // LICENSE file in the root directory of this source tree.
4
+ export function normalizeChoicePickerLabel(value) {
5
+ if (typeof value === 'string'
6
+ || typeof value === 'number'
7
+ || typeof value === 'boolean') {
8
+ return String(value);
9
+ }
10
+ return '';
11
+ }
12
+ export function normalizeChoicePickerVariant(value) {
13
+ return value === 'multipleSelection' || value === 'multiSelect'
14
+ ? 'multipleSelection'
15
+ : 'mutuallyExclusive';
16
+ }
17
+ export function normalizeChoicePickerDisplayStyle(value) {
18
+ return value === 'chips' ? 'chips' : 'checkbox';
19
+ }
20
+ export function normalizeChoicePickerOptions(value) {
21
+ if (!Array.isArray(value))
22
+ return [];
23
+ const seen = new Set();
24
+ const options = [];
25
+ for (const item of value) {
26
+ if (item === null || typeof item !== 'object')
27
+ continue;
28
+ const record = item;
29
+ const optionValue = record['value'];
30
+ if (typeof optionValue !== 'string' || seen.has(optionValue))
31
+ continue;
32
+ seen.add(optionValue);
33
+ options.push({
34
+ label: normalizeChoicePickerLabel(record['label']) || optionValue,
35
+ value: optionValue,
36
+ });
37
+ }
38
+ return options;
39
+ }
40
+ export function normalizeChoicePickerValue(value, options) {
41
+ const allowed = options
42
+ ? new Set(options.map((option) => option.value))
43
+ : null;
44
+ let rawValues = [];
45
+ if (Array.isArray(value)) {
46
+ rawValues = value;
47
+ }
48
+ else if (typeof value === 'string') {
49
+ rawValues = [value];
50
+ }
51
+ const seen = new Set();
52
+ const selected = [];
53
+ for (const item of rawValues) {
54
+ if (typeof item !== 'string')
55
+ continue;
56
+ if (allowed && !allowed.has(item))
57
+ continue;
58
+ if (seen.has(item))
59
+ continue;
60
+ seen.add(item);
61
+ selected.push(item);
62
+ }
63
+ return selected;
64
+ }
65
+ export function toggleChoicePickerValue(currentValue, optionValue, variant) {
66
+ if (variant === 'mutuallyExclusive') {
67
+ return [optionValue];
68
+ }
69
+ return currentValue.includes(optionValue)
70
+ ? currentValue.filter((value) => value !== optionValue)
71
+ : [...currentValue, optionValue];
72
+ }
73
+ export function filterChoicePickerOptions(options, query) {
74
+ const normalizedQuery = query.trim().toLowerCase();
75
+ if (!normalizedQuery)
76
+ return [...options];
77
+ return options.filter((option) => option.label.toLowerCase().includes(normalizedQuery)
78
+ || option.value.toLowerCase().includes(normalizedQuery));
79
+ }
80
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/catalog/ChoicePicker/utils.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,6 @@ import { jsx as _jsx } from "@lynx-js/react/jsx-runtime";
2
2
  // Copyright 2026 The Lynx Authors. All rights reserved.
3
3
  // Licensed under the Apache License Version 2.0 that can be found in the
4
4
  // LICENSE file in the root directory of this source tree.
5
- import { useMemo } from '@lynx-js/react';
6
5
  import { NodeRenderer } from '../../react/A2UIRenderer.js';
7
6
  import { useDataBinding } from '../../react/useDataBinding.js';
8
7
  import '../../../styles/catalog/Column.css';
@@ -30,18 +29,15 @@ export function Column(props) {
30
29
  ? children
31
30
  : undefined;
32
31
  const [columnData, , fullPath] = useDataBinding(template ? { path: template.path } : undefined, surface, dataContextPath, []);
33
- const childList = useMemo(() => {
34
- if (Array.isArray(children)) {
35
- return children.map((childId) => buildChild(surface, childId, dataContextPath));
36
- }
37
- return (Array.isArray(columnData) ? columnData : []).map((item, index) => {
32
+ const childList = Array.isArray(children)
33
+ ? children.map((childId) => buildChild(surface, childId, dataContextPath))
34
+ : (Array.isArray(columnData) ? columnData : []).map((item, index) => {
38
35
  const key = item && typeof item === 'object' && 'key' in item
39
36
  ? String(item['key'])
40
37
  : `${index}`;
41
38
  const itemPath = `${fullPath}/${index}`;
42
39
  return buildChild(surface, template?.componentId ?? '', dataContextPath, itemPath, key);
43
40
  });
44
- }, [children, surface, dataContextPath, columnData, fullPath, template]);
45
41
  return (_jsx("view", { className: `column alignment-${align} distribution-${justify}`, children: childList.map((item) => {
46
42
  if (!item)
47
43
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/catalog/Column/index.tsx"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAO/D,OAAO,oCAAoC,CAAC;AAE5C,MAAM,UAAU,GAAG,CACjB,OAAgB,EAChB,OAAe,EACf,eAAmC,EACnC,SAAkB,EAClB,GAAG,GAAG,OAAO,EAIN,EAAE;IACT,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,SAAS,EAAE,CAAC;QACd,gBAAgB,GAAG,EAAE,GAAG,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;IAC9D,CAAC;SAAM,IAAI,eAAe,EAAE,CAAC;QAC3B,gBAAgB,GAAG,EAAE,GAAG,KAAK,EAAE,eAAe,EAAE,CAAC;IACnD,CAAC;IACD,OAAO;QACL,GAAG;QACH,SAAS,EAAE,gBAAgB;KAC5B,CAAC;AACJ,CAAC,CAAC;AAmBF,MAAM,UAAU,MAAM,CACpB,KAAkB;IAElB,MAAM,EACJ,QAAQ,EACR,OAAO,EACP,eAAe,EACf,OAAO,GAAG,OAAO,EACjB,KAAK,GAAG,SAAS,GAClB,GAAG,KAAK,CAAC;IAEV,MAAM,SAAS,GAAG,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;WACjD,OAAO,QAAQ,KAAK,QAAQ,CAAC;IAClC,MAAM,QAAQ,GAAG,SAAS;QACxB,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,CAAC,UAAU,EAAE,AAAD,EAAG,QAAQ,CAAC,GAAG,cAAc,CAC7C,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAC9C,OAAO,EACP,eAAe,EACf,EAAE,CACH,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CACtC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAC9C,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACvE,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI;gBAC3D,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC;YACxC,OAAO,UAAU,CACf,OAAO,EACP,QAAQ,EAAE,WAAW,IAAI,EAAE,EAC3B,eAAe,EACf,QAAQ,EACR,GAAG,CACJ,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEzE,OAAO,CACL,eACE,SAAS,EAAE,oBAAoB,KAAK,iBAAiB,OAAO,EAAE,YAE7D,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACrC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,OAAO,CACL,eAEE,SAAS,EAAE,6CAA6C,MAAM,EAAE,EAChE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,MAAM,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,YAEtD,KAAC,YAAY,IACX,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,OAAO,EAAE,OAAO,GAChB,IAPG,IAAI,CAAC,GAAG,CAQR,CACR,CAAC;YACJ,CAAC;YACD,OAAO,CACL,KAAC,YAAY,IAEX,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,OAAO,EAAE,OAAO,IAFX,IAAI,CAAC,GAAG,CAGb,CACH,CAAC;QACJ,CAAC,CAAC,GACG,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/catalog/Column/index.tsx"],"names":[],"mappings":"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"}