@lynx-js/genui 0.0.1-rc.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 (254) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +170 -0
  3. package/a2ui/README.md +140 -0
  4. package/a2ui/dist/catalog/Button/catalog.json +156 -0
  5. package/a2ui/dist/catalog/Button/index.d.ts +35 -0
  6. package/a2ui/dist/catalog/Button/index.js +35 -0
  7. package/a2ui/dist/catalog/Button/index.js.map +1 -0
  8. package/a2ui/dist/catalog/Card/catalog.json +24 -0
  9. package/a2ui/dist/catalog/Card/index.d.ts +11 -0
  10. package/a2ui/dist/catalog/Card/index.js +19 -0
  11. package/a2ui/dist/catalog/Card/index.js.map +1 -0
  12. package/a2ui/dist/catalog/CheckBox/catalog.json +170 -0
  13. package/a2ui/dist/catalog/CheckBox/index.d.ts +32 -0
  14. package/a2ui/dist/catalog/CheckBox/index.js +24 -0
  15. package/a2ui/dist/catalog/CheckBox/index.js.map +1 -0
  16. package/a2ui/dist/catalog/Column/catalog.json +57 -0
  17. package/a2ui/dist/catalog/Column/index.d.ts +15 -0
  18. package/a2ui/dist/catalog/Column/index.js +55 -0
  19. package/a2ui/dist/catalog/Column/index.js.map +1 -0
  20. package/a2ui/dist/catalog/Divider/catalog.json +14 -0
  21. package/a2ui/dist/catalog/Divider/index.d.ts +9 -0
  22. package/a2ui/dist/catalog/Divider/index.js +8 -0
  23. package/a2ui/dist/catalog/Divider/index.js.map +1 -0
  24. package/a2ui/dist/catalog/Icon/catalog.json +45 -0
  25. package/a2ui/dist/catalog/Icon/index.d.ts +14 -0
  26. package/a2ui/dist/catalog/Icon/index.js +11 -0
  27. package/a2ui/dist/catalog/Icon/index.js.map +1 -0
  28. package/a2ui/dist/catalog/Image/catalog.json +62 -0
  29. package/a2ui/dist/catalog/Image/index.d.ts +16 -0
  30. package/a2ui/dist/catalog/Image/index.js +30 -0
  31. package/a2ui/dist/catalog/Image/index.js.map +1 -0
  32. package/a2ui/dist/catalog/LineChart/catalog.json +98 -0
  33. package/a2ui/dist/catalog/LineChart/index.d.ts +31 -0
  34. package/a2ui/dist/catalog/LineChart/index.js +195 -0
  35. package/a2ui/dist/catalog/LineChart/index.js.map +1 -0
  36. package/a2ui/dist/catalog/List/catalog.json +52 -0
  37. package/a2ui/dist/catalog/List/index.d.ts +15 -0
  38. package/a2ui/dist/catalog/List/index.js +53 -0
  39. package/a2ui/dist/catalog/List/index.js.map +1 -0
  40. package/a2ui/dist/catalog/Modal/catalog.json +18 -0
  41. package/a2ui/dist/catalog/Modal/index.d.ts +12 -0
  42. package/a2ui/dist/catalog/Modal/index.js +33 -0
  43. package/a2ui/dist/catalog/Modal/index.js.map +1 -0
  44. package/a2ui/dist/catalog/PieChart/catalog.json +87 -0
  45. package/a2ui/dist/catalog/PieChart/index.d.ts +37 -0
  46. package/a2ui/dist/catalog/PieChart/index.js +131 -0
  47. package/a2ui/dist/catalog/PieChart/index.js.map +1 -0
  48. package/a2ui/dist/catalog/RadioGroup/catalog.json +184 -0
  49. package/a2ui/dist/catalog/RadioGroup/index.d.ts +36 -0
  50. package/a2ui/dist/catalog/RadioGroup/index.js +36 -0
  51. package/a2ui/dist/catalog/RadioGroup/index.js.map +1 -0
  52. package/a2ui/dist/catalog/Row/catalog.json +57 -0
  53. package/a2ui/dist/catalog/Row/index.d.ts +15 -0
  54. package/a2ui/dist/catalog/Row/index.js +28 -0
  55. package/a2ui/dist/catalog/Row/index.js.map +1 -0
  56. package/a2ui/dist/catalog/Slider/catalog.json +183 -0
  57. package/a2ui/dist/catalog/Slider/index.d.ts +41 -0
  58. package/a2ui/dist/catalog/Slider/index.js +39 -0
  59. package/a2ui/dist/catalog/Slider/index.js.map +1 -0
  60. package/a2ui/dist/catalog/Slider/utils.d.ts +11 -0
  61. package/a2ui/dist/catalog/Slider/utils.js +58 -0
  62. package/a2ui/dist/catalog/Slider/utils.js.map +1 -0
  63. package/a2ui/dist/catalog/Tabs/catalog.json +28 -0
  64. package/a2ui/dist/catalog/Tabs/index.d.ts +12 -0
  65. package/a2ui/dist/catalog/Tabs/index.js +32 -0
  66. package/a2ui/dist/catalog/Tabs/index.js.map +1 -0
  67. package/a2ui/dist/catalog/Text/catalog.json +74 -0
  68. package/a2ui/dist/catalog/Text/index.d.ts +18 -0
  69. package/a2ui/dist/catalog/Text/index.js +27 -0
  70. package/a2ui/dist/catalog/Text/index.js.map +1 -0
  71. package/a2ui/dist/catalog/TextField/catalog.json +147 -0
  72. package/a2ui/dist/catalog/TextField/index.d.ts +35 -0
  73. package/a2ui/dist/catalog/TextField/index.js +43 -0
  74. package/a2ui/dist/catalog/TextField/index.js.map +1 -0
  75. package/a2ui/dist/catalog/TextField/utils.d.ts +7 -0
  76. package/a2ui/dist/catalog/TextField/utils.js +51 -0
  77. package/a2ui/dist/catalog/TextField/utils.js.map +1 -0
  78. package/a2ui/dist/catalog/defineCatalog.d.ts +119 -0
  79. package/a2ui/dist/catalog/defineCatalog.js +196 -0
  80. package/a2ui/dist/catalog/defineCatalog.js.map +1 -0
  81. package/a2ui/dist/catalog/index.d.ts +20 -0
  82. package/a2ui/dist/catalog/index.js +26 -0
  83. package/a2ui/dist/catalog/index.js.map +1 -0
  84. package/a2ui/dist/catalog/utils/chart.d.ts +3 -0
  85. package/a2ui/dist/catalog/utils/chart.js +28 -0
  86. package/a2ui/dist/catalog/utils/chart.js.map +1 -0
  87. package/a2ui/dist/functions/index.d.ts +19 -0
  88. package/a2ui/dist/functions/index.js +87 -0
  89. package/a2ui/dist/functions/index.js.map +1 -0
  90. package/a2ui/dist/index.d.ts +11 -0
  91. package/a2ui/dist/index.js +35 -0
  92. package/a2ui/dist/index.js.map +1 -0
  93. package/a2ui/dist/react/A2UI.d.ts +77 -0
  94. package/a2ui/dist/react/A2UI.js +159 -0
  95. package/a2ui/dist/react/A2UI.js.map +1 -0
  96. package/a2ui/dist/react/A2UIProvider.d.ts +25 -0
  97. package/a2ui/dist/react/A2UIProvider.js +20 -0
  98. package/a2ui/dist/react/A2UIProvider.js.map +1 -0
  99. package/a2ui/dist/react/A2UIRenderer.d.ts +34 -0
  100. package/a2ui/dist/react/A2UIRenderer.js +161 -0
  101. package/a2ui/dist/react/A2UIRenderer.js.map +1 -0
  102. package/a2ui/dist/react/FormContext.d.ts +10 -0
  103. package/a2ui/dist/react/FormContext.js +12 -0
  104. package/a2ui/dist/react/FormContext.js.map +1 -0
  105. package/a2ui/dist/react/index.d.ts +8 -0
  106. package/a2ui/dist/react/index.js +23 -0
  107. package/a2ui/dist/react/index.js.map +1 -0
  108. package/a2ui/dist/react/useA2UIContext.d.ts +7 -0
  109. package/a2ui/dist/react/useA2UIContext.js +19 -0
  110. package/a2ui/dist/react/useA2UIContext.js.map +1 -0
  111. package/a2ui/dist/react/useAction.d.ts +9 -0
  112. package/a2ui/dist/react/useAction.js +38 -0
  113. package/a2ui/dist/react/useAction.js.map +1 -0
  114. package/a2ui/dist/react/useCatalog.d.ts +7 -0
  115. package/a2ui/dist/react/useCatalog.js +13 -0
  116. package/a2ui/dist/react/useCatalog.js.map +1 -0
  117. package/a2ui/dist/react/useChecks.d.ts +27 -0
  118. package/a2ui/dist/react/useChecks.js +76 -0
  119. package/a2ui/dist/react/useChecks.js.map +1 -0
  120. package/a2ui/dist/react/useDataBinding.d.ts +10 -0
  121. package/a2ui/dist/react/useDataBinding.js +175 -0
  122. package/a2ui/dist/react/useDataBinding.js.map +1 -0
  123. package/a2ui/dist/store/FormController.d.ts +23 -0
  124. package/a2ui/dist/store/FormController.js +40 -0
  125. package/a2ui/dist/store/FormController.js.map +1 -0
  126. package/a2ui/dist/store/FunctionRegistry.d.ts +47 -0
  127. package/a2ui/dist/store/FunctionRegistry.js +23 -0
  128. package/a2ui/dist/store/FunctionRegistry.js.map +1 -0
  129. package/a2ui/dist/store/MessageProcessor.d.ts +28 -0
  130. package/a2ui/dist/store/MessageProcessor.js +408 -0
  131. package/a2ui/dist/store/MessageProcessor.js.map +1 -0
  132. package/a2ui/dist/store/MessageStore.d.ts +38 -0
  133. package/a2ui/dist/store/MessageStore.js +37 -0
  134. package/a2ui/dist/store/MessageStore.js.map +1 -0
  135. package/a2ui/dist/store/Resource.d.ts +45 -0
  136. package/a2ui/dist/store/Resource.js +80 -0
  137. package/a2ui/dist/store/Resource.js.map +1 -0
  138. package/a2ui/dist/store/SignalStore.d.ts +10 -0
  139. package/a2ui/dist/store/SignalStore.js +29 -0
  140. package/a2ui/dist/store/SignalStore.js.map +1 -0
  141. package/a2ui/dist/store/index.d.ts +14 -0
  142. package/a2ui/dist/store/index.js +15 -0
  143. package/a2ui/dist/store/index.js.map +1 -0
  144. package/a2ui/dist/store/payloadNormalizer.d.ts +27 -0
  145. package/a2ui/dist/store/payloadNormalizer.js +179 -0
  146. package/a2ui/dist/store/payloadNormalizer.js.map +1 -0
  147. package/a2ui/dist/store/resolveFunctionCall.d.ts +18 -0
  148. package/a2ui/dist/store/resolveFunctionCall.js +131 -0
  149. package/a2ui/dist/store/resolveFunctionCall.js.map +1 -0
  150. package/a2ui/dist/store/types.d.ts +68 -0
  151. package/a2ui/dist/store/types.js +2 -0
  152. package/a2ui/dist/store/types.js.map +1 -0
  153. package/a2ui/dist/tsconfig.build.tsbuildinfo +1 -0
  154. package/a2ui/styles/catalog/Button.css +83 -0
  155. package/a2ui/styles/catalog/Card.css +49 -0
  156. package/a2ui/styles/catalog/CheckBox.css +46 -0
  157. package/a2ui/styles/catalog/Column.css +89 -0
  158. package/a2ui/styles/catalog/Divider.css +20 -0
  159. package/a2ui/styles/catalog/Icon.css +39 -0
  160. package/a2ui/styles/catalog/Image.css +54 -0
  161. package/a2ui/styles/catalog/LineChart.css +116 -0
  162. package/a2ui/styles/catalog/List.css +38 -0
  163. package/a2ui/styles/catalog/Modal.css +60 -0
  164. package/a2ui/styles/catalog/PieChart.css +109 -0
  165. package/a2ui/styles/catalog/RadioGroup.css +123 -0
  166. package/a2ui/styles/catalog/Row.css +83 -0
  167. package/a2ui/styles/catalog/Slider.css +96 -0
  168. package/a2ui/styles/catalog/Tabs.css +46 -0
  169. package/a2ui/styles/catalog/Text.css +121 -0
  170. package/a2ui/styles/catalog/TextField.css +48 -0
  171. package/a2ui/styles/theme.css +62 -0
  172. package/a2ui-catalog-extractor/README.md +605 -0
  173. package/a2ui-catalog-extractor/bin/a2ui-catalog-extractor.js +6 -0
  174. package/a2ui-catalog-extractor/dist/cli.d.ts +12 -0
  175. package/a2ui-catalog-extractor/dist/cli.js +171 -0
  176. package/a2ui-catalog-extractor/dist/cli.js.map +1 -0
  177. package/a2ui-catalog-extractor/dist/index.d.ts +140 -0
  178. package/a2ui-catalog-extractor/dist/index.js +755 -0
  179. package/a2ui-catalog-extractor/dist/index.js.map +1 -0
  180. package/a2ui-catalog-extractor/dist/tsconfig.build.tsbuildinfo +1 -0
  181. package/a2ui-catalog-extractor/skills/a2ui-catalog-extractor/SKILL.md +30 -0
  182. package/a2ui-prompt/README.md +65 -0
  183. package/a2ui-prompt/dist/index.d.ts +91 -0
  184. package/a2ui-prompt/dist/index.js +767 -0
  185. package/cli/README.md +88 -0
  186. package/cli/bin/cli.js +271 -0
  187. package/dist/index.d.ts +10 -0
  188. package/dist/index.js +10 -0
  189. package/dist/index.js.map +1 -0
  190. package/dist/tsconfig.build.tsbuildinfo +1 -0
  191. package/index.ts +114 -0
  192. package/openui/README.md +211 -0
  193. package/openui/dist/catalog/Action/index.d.ts +20 -0
  194. package/openui/dist/catalog/Action/index.js +23 -0
  195. package/openui/dist/catalog/Action/index.js.map +1 -0
  196. package/openui/dist/catalog/Button/index.d.ts +64 -0
  197. package/openui/dist/catalog/Button/index.js +75 -0
  198. package/openui/dist/catalog/Button/index.js.map +1 -0
  199. package/openui/dist/catalog/Card/index.d.ts +34 -0
  200. package/openui/dist/catalog/Card/index.js +69 -0
  201. package/openui/dist/catalog/Card/index.js.map +1 -0
  202. package/openui/dist/catalog/CardHeader/index.d.ts +5 -0
  203. package/openui/dist/catalog/CardHeader/index.js +18 -0
  204. package/openui/dist/catalog/CardHeader/index.js.map +1 -0
  205. package/openui/dist/catalog/Separator/index.d.ts +2 -0
  206. package/openui/dist/catalog/Separator/index.js +13 -0
  207. package/openui/dist/catalog/Separator/index.js.map +1 -0
  208. package/openui/dist/catalog/Stack/index.d.ts +29 -0
  209. package/openui/dist/catalog/Stack/index.js +61 -0
  210. package/openui/dist/catalog/Stack/index.js.map +1 -0
  211. package/openui/dist/catalog/Tag/index.d.ts +4 -0
  212. package/openui/dist/catalog/Tag/index.js +15 -0
  213. package/openui/dist/catalog/Tag/index.js.map +1 -0
  214. package/openui/dist/catalog/TextContent/index.d.ts +11 -0
  215. package/openui/dist/catalog/TextContent/index.js +33 -0
  216. package/openui/dist/catalog/TextContent/index.js.map +1 -0
  217. package/openui/dist/catalog/index.d.ts +7 -0
  218. package/openui/dist/catalog/index.js +11 -0
  219. package/openui/dist/catalog/index.js.map +1 -0
  220. package/openui/dist/catalog/utils.d.ts +2 -0
  221. package/openui/dist/catalog/utils.js +17 -0
  222. package/openui/dist/catalog/utils.js.map +1 -0
  223. package/openui/dist/core/context.d.ts +112 -0
  224. package/openui/dist/core/context.js +99 -0
  225. package/openui/dist/core/context.js.map +1 -0
  226. package/openui/dist/core/createLibrary.d.ts +10 -0
  227. package/openui/dist/core/createLibrary.js +36 -0
  228. package/openui/dist/core/createLibrary.js.map +1 -0
  229. package/openui/dist/core/hooks/index.d.ts +4 -0
  230. package/openui/dist/core/hooks/index.js +6 -0
  231. package/openui/dist/core/hooks/index.js.map +1 -0
  232. package/openui/dist/core/hooks/useFormValidation.d.ts +13 -0
  233. package/openui/dist/core/hooks/useFormValidation.js +76 -0
  234. package/openui/dist/core/hooks/useFormValidation.js.map +1 -0
  235. package/openui/dist/core/hooks/useOpenUIState.d.ts +33 -0
  236. package/openui/dist/core/hooks/useOpenUIState.js +413 -0
  237. package/openui/dist/core/hooks/useOpenUIState.js.map +1 -0
  238. package/openui/dist/core/hooks/useStateField.d.ts +2 -0
  239. package/openui/dist/core/hooks/useStateField.js +11 -0
  240. package/openui/dist/core/hooks/useStateField.js.map +1 -0
  241. package/openui/dist/core/index.d.ts +7 -0
  242. package/openui/dist/core/index.js +8 -0
  243. package/openui/dist/core/index.js.map +1 -0
  244. package/openui/dist/core/library.d.ts +20 -0
  245. package/openui/dist/core/library.js +13 -0
  246. package/openui/dist/core/library.js.map +1 -0
  247. package/openui/dist/core/renderer.css +271 -0
  248. package/openui/dist/core/renderer.d.ts +9 -0
  249. package/openui/dist/core/renderer.js +139 -0
  250. package/openui/dist/core/renderer.js.map +1 -0
  251. package/openui/dist/core/utils.d.ts +1 -0
  252. package/openui/dist/core/utils.js +76 -0
  253. package/openui/dist/core/utils.js.map +1 -0
  254. package/package.json +120 -0
@@ -0,0 +1,147 @@
1
+ {
2
+ "TextField": {
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
+ "description": "The text label for the input field."
23
+ },
24
+ "value": {
25
+ "oneOf": [
26
+ {
27
+ "type": "string"
28
+ },
29
+ {
30
+ "type": "object",
31
+ "properties": {
32
+ "path": {
33
+ "type": "string"
34
+ }
35
+ },
36
+ "required": [
37
+ "path"
38
+ ],
39
+ "additionalProperties": false
40
+ }
41
+ ],
42
+ "description": "The value of the text field."
43
+ },
44
+ "variant": {
45
+ "type": "string",
46
+ "enum": [
47
+ "number",
48
+ "longText",
49
+ "shortText",
50
+ "obscured"
51
+ ],
52
+ "description": "The type of input field to display."
53
+ },
54
+ "validationRegexp": {
55
+ "type": "string",
56
+ "description": "A regular expression used for client-side validation of the input."
57
+ },
58
+ "checks": {
59
+ "type": "array",
60
+ "items": {
61
+ "type": "object",
62
+ "properties": {
63
+ "condition": {
64
+ "oneOf": [
65
+ {
66
+ "type": "boolean"
67
+ },
68
+ {
69
+ "type": "object",
70
+ "properties": {
71
+ "path": {
72
+ "type": "string"
73
+ }
74
+ },
75
+ "required": [
76
+ "path"
77
+ ],
78
+ "additionalProperties": false
79
+ },
80
+ {
81
+ "type": "object",
82
+ "properties": {
83
+ "call": {
84
+ "type": "string"
85
+ },
86
+ "args": {
87
+ "type": "object",
88
+ "additionalProperties": {
89
+ "oneOf": [
90
+ {
91
+ "type": "string"
92
+ },
93
+ {
94
+ "type": "number"
95
+ },
96
+ {
97
+ "type": "boolean"
98
+ },
99
+ {
100
+ "type": "object",
101
+ "properties": {
102
+ "path": {
103
+ "type": "string"
104
+ }
105
+ },
106
+ "required": [
107
+ "path"
108
+ ],
109
+ "additionalProperties": false
110
+ }
111
+ ]
112
+ }
113
+ },
114
+ "returnType": {
115
+ "type": "string",
116
+ "enum": [
117
+ "boolean"
118
+ ]
119
+ }
120
+ },
121
+ "required": [
122
+ "call"
123
+ ],
124
+ "additionalProperties": false
125
+ }
126
+ ],
127
+ "description": "The condition that indicates whether the check passes."
128
+ },
129
+ "message": {
130
+ "type": "string",
131
+ "description": "The error message to display if the check fails."
132
+ }
133
+ },
134
+ "required": [
135
+ "condition",
136
+ "message"
137
+ ],
138
+ "additionalProperties": false
139
+ },
140
+ "description": "A list of checks to perform."
141
+ }
142
+ },
143
+ "required": [
144
+ "label"
145
+ ]
146
+ }
147
+ }
@@ -0,0 +1,35 @@
1
+ import type { GenericComponentProps } from '../../store/types.js';
2
+ import '../../../styles/catalog/TextField.css';
3
+ /**
4
+ * @a2uiCatalog TextField
5
+ */
6
+ export interface TextFieldProps extends GenericComponentProps {
7
+ /** The text label for the input field. */
8
+ label: string | {
9
+ path: string;
10
+ };
11
+ /** The value of the text field. */
12
+ value?: string | {
13
+ path: string;
14
+ };
15
+ /** The type of input field to display. */
16
+ variant?: 'longText' | 'number' | 'shortText' | 'obscured';
17
+ /** A regular expression used for client-side validation of the input. */
18
+ validationRegexp?: string;
19
+ /** A list of checks to perform. */
20
+ checks?: Array<{
21
+ /** The condition that indicates whether the check passes. */
22
+ condition: boolean | {
23
+ path: string;
24
+ } | {
25
+ call: string;
26
+ args?: Record<string, string | number | boolean | {
27
+ path: string;
28
+ }>;
29
+ returnType?: 'boolean';
30
+ };
31
+ /** The error message to display if the check fails. */
32
+ message: string;
33
+ }>;
34
+ }
35
+ export declare function TextField(props: TextFieldProps): import('@lynx-js/react').ReactNode;
@@ -0,0 +1,43 @@
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 { Input, TextArea } from '@lynx-js/lynx-ui';
6
+ import { useEffect, useState } from '@lynx-js/react';
7
+ import { getTextFieldInputType, isTextFieldValueValid, normalizeTextFieldValue, normalizeTextFieldVariant, } from './utils.js';
8
+ import '../../../styles/catalog/TextField.css';
9
+ export function TextField(props) {
10
+ const { id, label, setValue, validationRegexp } = props;
11
+ const textFieldType = props['textFieldType'];
12
+ const variant = normalizeTextFieldVariant(props.variant, textFieldType);
13
+ const resolvedValue = normalizeTextFieldValue(props.value);
14
+ const labelText = normalizeTextFieldValue(label);
15
+ const [draftValue, setDraftValue] = useState(resolvedValue);
16
+ const [touched, setTouched] = useState(false);
17
+ useEffect(() => {
18
+ setDraftValue(resolvedValue);
19
+ return undefined;
20
+ }, [resolvedValue]);
21
+ const handleInput = (nextValue) => {
22
+ setTouched(true);
23
+ setDraftValue(nextValue);
24
+ setValue?.('value', nextValue);
25
+ };
26
+ const handleBlur = () => {
27
+ setTouched(true);
28
+ };
29
+ const invalid = !isTextFieldValueValid(draftValue, validationRegexp);
30
+ const showInvalid = touched && invalid;
31
+ const rootClassName = showInvalid
32
+ ? `textfield textfield-${variant} textfield-invalid`
33
+ : `textfield textfield-${variant}`;
34
+ const controlClassName = variant === 'longText'
35
+ ? 'textfield-control textfield-textarea'
36
+ : 'textfield-control';
37
+ const controlId = id ? `${id}-control` : undefined;
38
+ const controlIdProps = controlId ? { id: controlId } : {};
39
+ return (_jsxs("view", { className: rootClassName, children: [_jsx("text", { className: 'textfield-label', children: labelText }), variant === 'longText'
40
+ ? (_jsx(TextArea, { ...controlIdProps, className: controlClassName, value: draftValue, maxLines: 6, confirmType: 'done', onInput: handleInput, onBlur: handleBlur }))
41
+ : (_jsx(Input, { ...controlIdProps, className: controlClassName, value: draftValue, type: getTextFieldInputType(variant), confirmType: 'done', onInput: handleInput, onBlur: handleBlur })), showInvalid && _jsx("text", { className: 'textfield-error', children: "Invalid value" })] }, id));
42
+ }
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/catalog/TextField/index.tsx"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAGpB,OAAO,uCAAuC,CAAC;AA8B/C,MAAM,UAAU,SAAS,CACvB,KAAqB;IAErB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IACxD,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,aAAa,CAAC,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,EAAE;QACxC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,qBAAqB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,OAAO,IAAI,OAAO,CAAC;IACvC,MAAM,aAAa,GAAG,WAAW;QAC/B,CAAC,CAAC,uBAAuB,OAAO,oBAAoB;QACpD,CAAC,CAAC,uBAAuB,OAAO,EAAE,CAAC;IAErC,MAAM,gBAAgB,GAAG,OAAO,KAAK,UAAU;QAC7C,CAAC,CAAC,sCAAsC;QACxC,CAAC,CAAC,mBAAmB,CAAC;IACxB,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1D,OAAO,CACL,gBAAe,SAAS,EAAE,aAAa,aACrC,eAAM,SAAS,EAAC,iBAAiB,YAAE,SAAS,GAAQ,EACnD,OAAO,KAAK,UAAU;gBACrB,CAAC,CAAC,CACA,KAAC,QAAQ,OACH,cAAc,EAClB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,EACX,WAAW,EAAC,MAAM,EAClB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,GAClB,CACH;gBACD,CAAC,CAAC,CACA,KAAC,KAAK,OACA,cAAc,EAClB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,qBAAqB,CAAC,OAAO,CAAC,EACpC,WAAW,EAAC,MAAM,EAClB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,GAClB,CACH,EACF,WAAW,IAAI,eAAM,SAAS,EAAC,iBAAiB,8BAAqB,KAzB7D,EAAE,CA0BN,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type TextFieldVariant = 'longText' | 'number' | 'obscured' | 'shortText';
2
+ export declare const TEXT_FIELD_VARIANTS: readonly TextFieldVariant[];
3
+ export type TextFieldInputType = 'number' | 'password' | 'text';
4
+ export declare function normalizeTextFieldVariant(variant: unknown, textFieldType?: unknown): TextFieldVariant;
5
+ export declare function getTextFieldInputType(variant: TextFieldVariant): TextFieldInputType;
6
+ export declare function normalizeTextFieldValue(value: unknown): string;
7
+ export declare function isTextFieldValueValid(value: string, validationRegexp: unknown): boolean;
@@ -0,0 +1,51 @@
1
+ export const TEXT_FIELD_VARIANTS = [
2
+ 'longText',
3
+ 'number',
4
+ 'shortText',
5
+ 'obscured',
6
+ ];
7
+ export function normalizeTextFieldVariant(variant, textFieldType) {
8
+ const preferred = typeof variant === 'string' ? variant : undefined;
9
+ const fallback = typeof textFieldType === 'string'
10
+ ? textFieldType
11
+ : undefined;
12
+ if (isTextFieldVariant(preferred))
13
+ return preferred;
14
+ if (isTextFieldVariant(fallback))
15
+ return fallback;
16
+ return 'shortText';
17
+ }
18
+ export function getTextFieldInputType(variant) {
19
+ if (variant === 'number')
20
+ return 'number';
21
+ if (variant === 'obscured')
22
+ return 'password';
23
+ return 'text';
24
+ }
25
+ export function normalizeTextFieldValue(value) {
26
+ if (value === null || value === undefined)
27
+ return '';
28
+ if (typeof value === 'string')
29
+ return value;
30
+ if (typeof value === 'number'
31
+ || typeof value === 'boolean'
32
+ || typeof value === 'bigint') {
33
+ return String(value);
34
+ }
35
+ return '';
36
+ }
37
+ export function isTextFieldValueValid(value, validationRegexp) {
38
+ if (typeof validationRegexp !== 'string' || validationRegexp.length === 0) {
39
+ return true;
40
+ }
41
+ try {
42
+ return new RegExp(validationRegexp).test(value);
43
+ }
44
+ catch {
45
+ return true;
46
+ }
47
+ }
48
+ function isTextFieldVariant(value) {
49
+ return TEXT_FIELD_VARIANTS.includes(value);
50
+ }
51
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/catalog/TextField/utils.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D,UAAU;IACV,QAAQ;IACR,WAAW;IACX,UAAU;CACX,CAAC;AAIF,MAAM,UAAU,yBAAyB,CACvC,OAAgB,EAChB,aAAuB;IAEvB,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,MAAM,QAAQ,GAAG,OAAO,aAAa,KAAK,QAAQ;QAChD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,kBAAkB,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,kBAAkB,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAyB;IAEzB,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC1C,IAAI,OAAO,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IACE,OAAO,KAAK,KAAK,QAAQ;WACtB,OAAO,KAAK,KAAK,SAAS;WAC1B,OAAO,KAAK,KAAK,QAAQ,EAC5B,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,gBAAyB;IAEzB,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAyB;IAEzB,OAAO,mBAAmB,CAAC,QAAQ,CAAC,KAAyB,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,119 @@
1
+ import type { ComponentType } from '@lynx-js/react';
2
+ import type { FunctionDefinition, FunctionImpl } from '../store/FunctionRegistry.js';
3
+ import type { GenericComponentProps } from '../store/types.js';
4
+ /**
5
+ * JSON Schema fragment describing a component's props. Produced at build time
6
+ * by `@lynx-js/genui/a2ui-catalog-extractor` from the component's TypeScript
7
+ * interface marked with `@a2uiCatalog <Name>`. Optional at runtime — entries
8
+ * that ship without a schema serialize to just `{ name }`.
9
+ */
10
+ export type CatalogSchema = Record<string, unknown>;
11
+ /**
12
+ * The shape produced by the extractor as `dist/catalog/<Name>/catalog.json`.
13
+ * The single top-level key is the component's protocol name; the value is
14
+ * its schema. Importing the JSON gives you both, in one declaration.
15
+ */
16
+ export type CatalogManifest = Record<string, CatalogSchema>;
17
+ /**
18
+ * Loose component type — entries receive runtime-shaped props from the
19
+ * protocol stream, so we don't enforce per-component prop typing here.
20
+ */
21
+ export type CatalogComponent = ComponentType<GenericComponentProps>;
22
+ /**
23
+ * A function-definition manifest as emitted by the extractor under
24
+ * `dist/catalog/functions/<name>.json`.
25
+ */
26
+ /**
27
+ * The structured function definition that flows from the extractor (or the
28
+ * upstream basic-catalog manifests) into the catalog and out to the agent
29
+ * during the handshake. Aliased onto the store's `FunctionDefinition` so
30
+ * `functionRegistry.register({ definition })` accepts catalog entries
31
+ * directly without re-shaping.
32
+ */
33
+ export type CatalogFunctionDefinition = FunctionDefinition;
34
+ export type FunctionManifest = Record<string, CatalogFunctionDefinition>;
35
+ /**
36
+ * A function entry — pair an impl with its name, plus an optional manifest
37
+ * so the handshake can announce the schema to the agent.
38
+ */
39
+ export interface CatalogFunctionEntry {
40
+ kind: 'function';
41
+ name: string;
42
+ impl: FunctionImpl;
43
+ definition?: CatalogFunctionDefinition;
44
+ }
45
+ /**
46
+ * Build a function entry for `defineCatalog`. Either pair the impl with the
47
+ * extracted manifest, or pass just the impl (the registry still routes
48
+ * calls; the agent just won't see the parameter schema).
49
+ *
50
+ * @example
51
+ * const requiredEntry = defineFunction(required, requiredManifest);
52
+ * const catalog = defineCatalog([Text, Button, requiredEntry]);
53
+ */
54
+ export declare function defineFunction(impl: FunctionImpl, manifest?: FunctionManifest): CatalogFunctionEntry;
55
+ /**
56
+ * What the developer passes into `defineCatalog`. Components and function
57
+ * entries can be intermixed.
58
+ */
59
+ export type CatalogInput = CatalogComponent | readonly [CatalogComponent, CatalogManifest] | ResolvedCatalogEntry | CatalogFunctionEntry;
60
+ /**
61
+ * A resolved catalog entry. Internal representation; consumers don't usually
62
+ * construct these directly — they pass `CatalogInput`s to `defineCatalog`.
63
+ */
64
+ export interface ResolvedCatalogEntry {
65
+ name: string;
66
+ component: CatalogComponent;
67
+ schema?: CatalogSchema;
68
+ }
69
+ export interface Catalog {
70
+ readonly components: readonly ResolvedCatalogEntry[];
71
+ readonly functions: readonly CatalogFunctionEntry[];
72
+ }
73
+ /** The serialized payload sent to the agent during channel handshake. */
74
+ export interface SerializedCatalog {
75
+ version: '0.9';
76
+ components: Array<{
77
+ name: string;
78
+ schema?: CatalogSchema;
79
+ }>;
80
+ functions?: CatalogFunctionDefinition[];
81
+ }
82
+ /**
83
+ * Build a catalog from a list of components, `[component, manifest]` pairs,
84
+ * and/or function entries. Duplicate names within the same kind are rejected.
85
+ * Function entries register their impls into `functionRegistry` immediately,
86
+ * so any `executeFunctionCall` after `defineCatalog` can route to them.
87
+ *
88
+ * @example
89
+ * import { Text, Button } from '@lynx-js/genui/a2ui';
90
+ * import { defineCatalog, defineFunction } from '@lynx-js/genui/a2ui';
91
+ * import { required } from '@lynx-js/genui/a2ui/functions';
92
+ * import textManifest from '@lynx-js/genui/a2ui/catalog/Text/catalog.json'
93
+ * with { type: 'json' };
94
+ *
95
+ * const catalog = defineCatalog([
96
+ * [Text, textManifest],
97
+ * Button,
98
+ * defineFunction(required),
99
+ * ]);
100
+ */
101
+ export declare function defineCatalog(inputs: readonly CatalogInput[]): Catalog;
102
+ /**
103
+ * Merge multiple catalogs. Last write wins on duplicate names — useful when
104
+ * a page-level catalog overrides a brand-level one which overrides built-ins.
105
+ */
106
+ export declare function mergeCatalogs(...catalogs: Catalog[]): Catalog;
107
+ /**
108
+ * Build a name → component lookup map from a catalog. The renderer uses
109
+ * this to resolve `{ component: 'Text', ... }` from the protocol stream.
110
+ */
111
+ export declare function resolveCatalog(catalog: Catalog): ReadonlyMap<string, CatalogComponent>;
112
+ /**
113
+ * Produce the JSON manifest the client should announce to the agent during
114
+ * channel handshake. Component entries without an attached schema serialize
115
+ * to `{ name }` only — useful for letting the agent at least know what's
116
+ * renderable. Function entries serialize with their parameter schema when
117
+ * available.
118
+ */
119
+ export declare function serializeCatalog(catalog: Catalog): SerializedCatalog;
@@ -0,0 +1,196 @@
1
+ import { functionRegistry } from '../store/FunctionRegistry.js';
2
+ /**
3
+ * Build a function entry for `defineCatalog`. Either pair the impl with the
4
+ * extracted manifest, or pass just the impl (the registry still routes
5
+ * calls; the agent just won't see the parameter schema).
6
+ *
7
+ * @example
8
+ * const requiredEntry = defineFunction(required, requiredManifest);
9
+ * const catalog = defineCatalog([Text, Button, requiredEntry]);
10
+ */
11
+ export function defineFunction(impl, manifest) {
12
+ if (manifest) {
13
+ const keys = Object.keys(manifest);
14
+ if (keys.length === 0) {
15
+ throw new Error('[a2ui] Empty manifest passed to defineFunction; expected '
16
+ + '`{ <functionName>: definition }`.');
17
+ }
18
+ const name = keys[0];
19
+ const definition = manifest[name];
20
+ return {
21
+ kind: 'function',
22
+ name,
23
+ impl,
24
+ definition,
25
+ };
26
+ }
27
+ const name = impl.displayName
28
+ ?? impl.name;
29
+ if (!name) {
30
+ throw new Error('[a2ui] Cannot add a function to the catalog: no name available. '
31
+ + 'Pair it with its manifest as `defineFunction(impl, manifest)`, '
32
+ + 'or set `impl.displayName = "..."`.');
33
+ }
34
+ return { kind: 'function', name, impl };
35
+ }
36
+ function isFunctionEntry(input) {
37
+ return typeof input === 'object'
38
+ && input !== null
39
+ && !Array.isArray(input)
40
+ && input.kind === 'function';
41
+ }
42
+ function isResolvedEntry(input) {
43
+ return typeof input === 'object'
44
+ && input !== null
45
+ && !Array.isArray(input)
46
+ && 'component' in input
47
+ && 'name' in input
48
+ && !isFunctionEntry(input);
49
+ }
50
+ function isTuple(input) {
51
+ return Array.isArray(input);
52
+ }
53
+ function deriveBareName(component) {
54
+ const name = component.displayName
55
+ ?? component.name;
56
+ if (!name) {
57
+ throw new Error('[a2ui] Cannot add a component to the catalog: no displayName or '
58
+ + 'function name. This typically happens when the bundler '
59
+ + 'minifies function names. Set `Foo.displayName = "Foo"` after '
60
+ + 'the component declaration (the string literal survives '
61
+ + 'minification), or pair it with its `catalog.json` manifest as '
62
+ + '`[Foo, fooManifest]`.');
63
+ }
64
+ return name;
65
+ }
66
+ function resolveComponentInput(input) {
67
+ if (isResolvedEntry(input))
68
+ return input;
69
+ if (isTuple(input)) {
70
+ const [component, manifest] = input;
71
+ const keys = Object.keys(manifest);
72
+ if (keys.length === 0) {
73
+ throw new Error('[a2ui] Empty manifest passed to defineCatalog; expected '
74
+ + '`{ <ComponentName>: schema }`.');
75
+ }
76
+ const name = keys[0];
77
+ const entry = { name, component: component };
78
+ const schema = manifest[name];
79
+ if (schema !== undefined)
80
+ entry.schema = schema;
81
+ return entry;
82
+ }
83
+ return {
84
+ name: deriveBareName(input),
85
+ component: input,
86
+ };
87
+ }
88
+ /**
89
+ * Build a catalog from a list of components, `[component, manifest]` pairs,
90
+ * and/or function entries. Duplicate names within the same kind are rejected.
91
+ * Function entries register their impls into `functionRegistry` immediately,
92
+ * so any `executeFunctionCall` after `defineCatalog` can route to them.
93
+ *
94
+ * @example
95
+ * import { Text, Button } from '@lynx-js/genui/a2ui';
96
+ * import { defineCatalog, defineFunction } from '@lynx-js/genui/a2ui';
97
+ * import { required } from '@lynx-js/genui/a2ui/functions';
98
+ * import textManifest from '@lynx-js/genui/a2ui/catalog/Text/catalog.json'
99
+ * with { type: 'json' };
100
+ *
101
+ * const catalog = defineCatalog([
102
+ * [Text, textManifest],
103
+ * Button,
104
+ * defineFunction(required),
105
+ * ]);
106
+ */
107
+ export function defineCatalog(inputs) {
108
+ const components = [];
109
+ const functions = [];
110
+ const seenComponents = new Set();
111
+ const seenFunctions = new Set();
112
+ for (const input of inputs) {
113
+ if (isFunctionEntry(input)) {
114
+ if (seenFunctions.has(input.name)) {
115
+ throw new Error(`[a2ui] Duplicate function name in catalog: "${input.name}". `
116
+ + `Use mergeCatalogs() if you intend to override.`);
117
+ }
118
+ seenFunctions.add(input.name);
119
+ functions.push(input);
120
+ functionRegistry.register({
121
+ name: input.name,
122
+ impl: input.impl,
123
+ ...(input.definition ? { definition: input.definition } : {}),
124
+ });
125
+ continue;
126
+ }
127
+ const entry = resolveComponentInput(input);
128
+ if (seenComponents.has(entry.name)) {
129
+ throw new Error(`[a2ui] Duplicate component name in catalog: "${entry.name}". `
130
+ + `Use mergeCatalogs() if you intend to override.`);
131
+ }
132
+ seenComponents.add(entry.name);
133
+ components.push(entry);
134
+ }
135
+ return { components, functions };
136
+ }
137
+ /**
138
+ * Merge multiple catalogs. Last write wins on duplicate names — useful when
139
+ * a page-level catalog overrides a brand-level one which overrides built-ins.
140
+ */
141
+ export function mergeCatalogs(...catalogs) {
142
+ const componentMap = new Map();
143
+ const functionMap = new Map();
144
+ for (const cat of catalogs) {
145
+ for (const entry of cat.components)
146
+ componentMap.set(entry.name, entry);
147
+ for (const fn of cat.functions)
148
+ functionMap.set(fn.name, fn);
149
+ }
150
+ // Re-register so the registry tracks the merged set.
151
+ for (const fn of functionMap.values()) {
152
+ functionRegistry.register({
153
+ name: fn.name,
154
+ impl: fn.impl,
155
+ ...(fn.definition ? { definition: fn.definition } : {}),
156
+ });
157
+ }
158
+ return {
159
+ components: Array.from(componentMap.values()),
160
+ functions: Array.from(functionMap.values()),
161
+ };
162
+ }
163
+ /**
164
+ * Build a name → component lookup map from a catalog. The renderer uses
165
+ * this to resolve `{ component: 'Text', ... }` from the protocol stream.
166
+ */
167
+ export function resolveCatalog(catalog) {
168
+ const map = new Map();
169
+ for (const entry of catalog.components)
170
+ map.set(entry.name, entry.component);
171
+ return map;
172
+ }
173
+ /**
174
+ * Produce the JSON manifest the client should announce to the agent during
175
+ * channel handshake. Component entries without an attached schema serialize
176
+ * to `{ name }` only — useful for letting the agent at least know what's
177
+ * renderable. Function entries serialize with their parameter schema when
178
+ * available.
179
+ */
180
+ export function serializeCatalog(catalog) {
181
+ const components = [];
182
+ for (const entry of catalog.components) {
183
+ const out = { name: entry.name };
184
+ if (entry.schema !== undefined)
185
+ out.schema = entry.schema;
186
+ components.push(out);
187
+ }
188
+ const serialized = { version: '0.9', components };
189
+ const functions = catalog.functions
190
+ .filter(fn => fn.definition !== undefined)
191
+ .map(fn => fn.definition);
192
+ if (functions.length > 0)
193
+ serialized.functions = functions;
194
+ return serialized;
195
+ }
196
+ //# sourceMappingURL=defineCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineCatalog.js","sourceRoot":"","sources":["../../src/catalog/defineCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export { defineCatalog, defineFunction, mergeCatalogs, resolveCatalog, serializeCatalog, } from './defineCatalog.js';
2
+ export type { Catalog, CatalogComponent, CatalogFunctionDefinition, CatalogFunctionEntry, CatalogInput, CatalogManifest, CatalogSchema, FunctionManifest, ResolvedCatalogEntry, SerializedCatalog, } from './defineCatalog.js';
3
+ export { Button } from './Button/index.js';
4
+ export { Card } from './Card/index.js';
5
+ export { CheckBox } from './CheckBox/index.js';
6
+ export { LineChart } from './LineChart/index.js';
7
+ export { PieChart } from './PieChart/index.js';
8
+ export { Column } from './Column/index.js';
9
+ export { Divider } from './Divider/index.js';
10
+ export { Icon } from './Icon/index.js';
11
+ export { Image } from './Image/index.js';
12
+ export { List } from './List/index.js';
13
+ export { Modal } from './Modal/index.js';
14
+ export { RadioGroup } from './RadioGroup/index.js';
15
+ export { Row } from './Row/index.js';
16
+ export { Slider } from './Slider/index.js';
17
+ export { Tabs } from './Tabs/index.js';
18
+ export { Text } from './Text/index.js';
19
+ export { TextField } from './TextField/index.js';
20
+ export { DEFAULT_CHART_COLORS, escapeXml, formatValue } from './utils/chart.js';