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

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 (134) hide show
  1. package/a2ui/README.md +777 -100
  2. package/a2ui/dist/catalog/Button/{index.js → index.jsx} +12 -8
  3. package/a2ui/dist/catalog/Button/index.jsx.map +1 -0
  4. package/a2ui/dist/catalog/Card/{index.js → index.jsx} +5 -4
  5. package/a2ui/dist/catalog/Card/index.jsx.map +1 -0
  6. package/a2ui/dist/catalog/CheckBox/{index.js → index.jsx} +11 -6
  7. package/a2ui/dist/catalog/CheckBox/index.jsx.map +1 -0
  8. package/a2ui/dist/catalog/ChoicePicker/catalog.json +265 -0
  9. package/a2ui/dist/catalog/ChoicePicker/index.d.ts +56 -0
  10. package/a2ui/dist/catalog/ChoicePicker/index.jsx +98 -0
  11. package/a2ui/dist/catalog/ChoicePicker/index.jsx.map +1 -0
  12. package/a2ui/dist/catalog/ChoicePicker/utils.d.ts +13 -0
  13. package/a2ui/dist/catalog/ChoicePicker/utils.js +80 -0
  14. package/a2ui/dist/catalog/ChoicePicker/utils.js.map +1 -0
  15. package/a2ui/dist/catalog/Column/{index.js → index.jsx} +13 -14
  16. package/a2ui/dist/catalog/Column/index.jsx.map +1 -0
  17. package/a2ui/dist/catalog/DateTimeInput/catalog.json +165 -0
  18. package/a2ui/dist/catalog/DateTimeInput/index.d.ts +43 -0
  19. package/a2ui/dist/catalog/DateTimeInput/index.jsx +258 -0
  20. package/a2ui/dist/catalog/DateTimeInput/index.jsx.map +1 -0
  21. package/a2ui/dist/catalog/DateTimeInput/utils.d.ts +53 -0
  22. package/a2ui/dist/catalog/DateTimeInput/utils.js +248 -0
  23. package/a2ui/dist/catalog/DateTimeInput/utils.js.map +1 -0
  24. package/a2ui/dist/catalog/Divider/index.jsx +7 -0
  25. package/a2ui/dist/catalog/Divider/index.jsx.map +1 -0
  26. package/a2ui/dist/catalog/Icon/catalog.json +173 -2
  27. package/a2ui/dist/catalog/Icon/index.d.ts +2 -2
  28. package/a2ui/dist/catalog/Icon/{index.js → index.jsx} +4 -3
  29. package/a2ui/dist/catalog/Icon/index.jsx.map +1 -0
  30. package/a2ui/dist/catalog/Image/catalog.json +1 -17
  31. package/a2ui/dist/catalog/Image/index.d.ts +1 -3
  32. package/a2ui/dist/catalog/Image/index.jsx +21 -0
  33. package/a2ui/dist/catalog/Image/index.jsx.map +1 -0
  34. package/a2ui/dist/catalog/LineChart/{index.js → index.jsx} +53 -16
  35. package/a2ui/dist/catalog/LineChart/{index.js.map → index.jsx.map} +1 -1
  36. package/a2ui/dist/catalog/List/{index.js → index.jsx} +9 -6
  37. package/a2ui/dist/catalog/List/{index.js.map → index.jsx.map} +1 -1
  38. package/a2ui/dist/catalog/Modal/{index.js → index.jsx} +18 -9
  39. package/a2ui/dist/catalog/Modal/index.jsx.map +1 -0
  40. package/a2ui/dist/catalog/PieChart/{index.js → index.jsx} +41 -15
  41. package/a2ui/dist/catalog/PieChart/{index.js.map → index.jsx.map} +1 -1
  42. package/a2ui/dist/catalog/RadioGroup/{index.js → index.jsx} +18 -5
  43. package/a2ui/dist/catalog/RadioGroup/index.jsx.map +1 -0
  44. package/a2ui/dist/catalog/Row/{index.js → index.jsx} +10 -7
  45. package/a2ui/dist/catalog/Row/index.jsx.map +1 -0
  46. package/a2ui/dist/catalog/Slider/{index.js → index.jsx} +22 -7
  47. package/a2ui/dist/catalog/Slider/{index.js.map → index.jsx.map} +1 -1
  48. package/a2ui/dist/catalog/Tabs/index.jsx +40 -0
  49. package/a2ui/dist/catalog/Tabs/index.jsx.map +1 -0
  50. package/a2ui/dist/catalog/Text/catalog.json +6 -2
  51. package/a2ui/dist/catalog/Text/index.d.ts +1 -1
  52. package/a2ui/dist/catalog/Text/index.jsx +16 -0
  53. package/a2ui/dist/catalog/Text/index.jsx.map +1 -0
  54. package/a2ui/dist/catalog/TextField/{index.js → index.jsx} +8 -5
  55. package/a2ui/dist/catalog/TextField/{index.js.map → index.jsx.map} +1 -1
  56. package/a2ui/dist/catalog/index.d.ts +21 -17
  57. package/a2ui/dist/catalog/index.js +2067 -20
  58. package/a2ui/dist/catalog/index.js.map +1 -1
  59. package/a2ui/dist/index.d.ts +1 -1
  60. package/a2ui/dist/index.js +1 -1
  61. package/a2ui/dist/index.js.map +1 -1
  62. package/a2ui/dist/react/A2UI.d.ts +1 -1
  63. package/a2ui/dist/react/{A2UI.js → A2UI.jsx} +6 -5
  64. package/a2ui/dist/react/{A2UI.js.map → A2UI.jsx.map} +1 -1
  65. package/a2ui/dist/react/{A2UIProvider.js → A2UIProvider.jsx} +2 -3
  66. package/a2ui/dist/react/{A2UIProvider.js.map → A2UIProvider.jsx.map} +1 -1
  67. package/a2ui/dist/react/A2UIRenderer.d.ts +1 -0
  68. package/a2ui/dist/react/{A2UIRenderer.js → A2UIRenderer.jsx} +36 -24
  69. package/a2ui/dist/react/A2UIRenderer.jsx.map +1 -0
  70. package/a2ui/dist/react/index.d.ts +3 -3
  71. package/a2ui/dist/react/index.js +2 -2
  72. package/a2ui/dist/react/index.js.map +1 -1
  73. package/a2ui/dist/react/useA2UIContext.d.ts +1 -1
  74. package/a2ui/dist/react/useA2UIContext.js +1 -1
  75. package/a2ui/dist/react/useA2UIContext.js.map +1 -1
  76. package/a2ui/dist/react/useAction.js +2 -1
  77. package/a2ui/dist/react/useAction.js.map +1 -1
  78. package/a2ui/dist/react/useChecks.js +7 -2
  79. package/a2ui/dist/react/useChecks.js.map +1 -1
  80. package/a2ui/dist/react/useDataBinding.d.ts +1 -1
  81. package/a2ui/dist/react/useDataBinding.js +24 -48
  82. package/a2ui/dist/react/useDataBinding.js.map +1 -1
  83. package/a2ui/dist/store/MessageProcessor.js +7 -19
  84. package/a2ui/dist/store/MessageProcessor.js.map +1 -1
  85. package/a2ui/dist/store/SignalStore.d.ts +2 -0
  86. package/a2ui/dist/store/SignalStore.js +5 -0
  87. package/a2ui/dist/store/SignalStore.js.map +1 -1
  88. package/a2ui/dist/store/index.d.ts +3 -1
  89. package/a2ui/dist/store/index.js +3 -1
  90. package/a2ui/dist/store/index.js.map +1 -1
  91. package/a2ui/dist/store/resolveDynamic.d.ts +9 -0
  92. package/a2ui/dist/store/resolveDynamic.js +88 -0
  93. package/a2ui/dist/store/resolveDynamic.js.map +1 -0
  94. package/a2ui/dist/store/resolveFunctionCall.d.ts +2 -4
  95. package/a2ui/dist/store/resolveFunctionCall.js +24 -82
  96. package/a2ui/dist/store/resolveFunctionCall.js.map +1 -1
  97. package/a2ui/dist/store/signalResolution.d.ts +4 -0
  98. package/a2ui/dist/store/signalResolution.js +25 -0
  99. package/a2ui/dist/store/signalResolution.js.map +1 -0
  100. package/a2ui/dist/store/utils.d.ts +7 -0
  101. package/a2ui/dist/store/utils.js +24 -0
  102. package/a2ui/dist/store/utils.js.map +1 -0
  103. package/a2ui/dist/tsconfig.build.tsbuildinfo +1 -1
  104. package/a2ui/styles/catalog/ChoicePicker.css +157 -0
  105. package/a2ui/styles/catalog/DateTimeInput.css +375 -0
  106. package/a2ui/styles/catalog/Icon.css +1 -1
  107. package/a2ui/styles/catalog/Modal.css +1 -0
  108. package/a2ui/styles/catalog/Text.css +13 -17
  109. package/a2ui/styles/theme.css +2 -1
  110. package/a2ui-catalog-extractor/README.md +23 -15
  111. package/a2ui-catalog-extractor/bin/a2ui-catalog-extractor.js +0 -1
  112. package/a2ui-catalog-extractor/dist/tsconfig.build.tsbuildinfo +1 -1
  113. package/a2ui-prompt/README.md +1 -2
  114. package/a2ui-prompt/dist/index.js +138 -104
  115. package/cli/bin/cli.js +5 -2
  116. package/dist/tsconfig.build.tsbuildinfo +1 -1
  117. package/package.json +8 -1
  118. package/a2ui/dist/catalog/Button/index.js.map +0 -1
  119. package/a2ui/dist/catalog/Card/index.js.map +0 -1
  120. package/a2ui/dist/catalog/CheckBox/index.js.map +0 -1
  121. package/a2ui/dist/catalog/Column/index.js.map +0 -1
  122. package/a2ui/dist/catalog/Divider/index.js +0 -8
  123. package/a2ui/dist/catalog/Divider/index.js.map +0 -1
  124. package/a2ui/dist/catalog/Icon/index.js.map +0 -1
  125. package/a2ui/dist/catalog/Image/index.js +0 -30
  126. package/a2ui/dist/catalog/Image/index.js.map +0 -1
  127. package/a2ui/dist/catalog/Modal/index.js.map +0 -1
  128. package/a2ui/dist/catalog/RadioGroup/index.js.map +0 -1
  129. package/a2ui/dist/catalog/Row/index.js.map +0 -1
  130. package/a2ui/dist/catalog/Tabs/index.js +0 -32
  131. package/a2ui/dist/catalog/Tabs/index.js.map +0 -1
  132. package/a2ui/dist/catalog/Text/index.js +0 -27
  133. package/a2ui/dist/catalog/Text/index.js.map +0 -1
  134. package/a2ui/dist/react/A2UIRenderer.js.map +0 -1
@@ -1,9 +1,7 @@
1
- import { jsx as _jsx } from "@lynx-js/react/jsx-runtime";
2
1
  // Copyright 2026 The Lynx Authors. All rights reserved.
3
2
  // Licensed under the Apache License Version 2.0 that can be found in the
4
3
  // LICENSE file in the root directory of this source tree.
5
- import { useMemo } from '@lynx-js/react';
6
- import { NodeRenderer } from '../../react/A2UIRenderer.js';
4
+ import { NodeRenderer } from '../../react/A2UIRenderer.jsx';
7
5
  import { useDataBinding } from '../../react/useDataBinding.js';
8
6
  import '../../../styles/catalog/Column.css';
9
7
  const buildChild = (surface, childId, dataContextPath, childPath, key = childId) => {
@@ -30,26 +28,27 @@ export function Column(props) {
30
28
  ? children
31
29
  : undefined;
32
30
  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) => {
31
+ const childList = Array.isArray(children)
32
+ ? children.map((childId) => buildChild(surface, childId, dataContextPath))
33
+ : (Array.isArray(columnData) ? columnData : []).map((item, index) => {
38
34
  const key = item && typeof item === 'object' && 'key' in item
39
35
  ? String(item['key'])
40
36
  : `${index}`;
41
37
  const itemPath = `${fullPath}/${index}`;
42
38
  return buildChild(surface, template?.componentId ?? '', dataContextPath, itemPath, key);
43
39
  });
44
- }, [children, surface, dataContextPath, columnData, fullPath, template]);
45
- return (_jsx("view", { className: `column alignment-${align} distribution-${justify}`, children: childList.map((item) => {
40
+ return (<view className={`column alignment-${align} distribution-${justify}`}>
41
+ {childList.map((item) => {
46
42
  if (!item)
47
43
  return null;
48
44
  const weight = item.component.weight;
49
45
  if (typeof weight === 'number' && weight > 0) {
50
- return (_jsx("view", { className: `column-weighted-item column-weighted-item-${weight}`, style: { flex: `${weight} ${weight} 0`, minHeight: 0 }, children: _jsx(NodeRenderer, { component: item.component, surface: surface }) }, item.key));
46
+ return (<view key={item.key} className={`column-weighted-item column-weighted-item-${weight}`} style={{ flex: `${weight} ${weight} 0`, minHeight: 0 }}>
47
+ <NodeRenderer component={item.component} surface={surface}/>
48
+ </view>);
51
49
  }
52
- return (_jsx(NodeRenderer, { component: item.component, surface: surface }, item.key));
53
- }) }));
50
+ return (<NodeRenderer key={item.key} component={item.component} surface={surface}/>);
51
+ })}
52
+ </view>);
54
53
  }
55
- //# sourceMappingURL=index.js.map
54
+ //# sourceMappingURL=index.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../../src/catalog/Column/index.tsx"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,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,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CACjC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAC9C;QACD,CAAC,CAAC,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;YAClE,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;IAEL,OAAO,CACL,CAAC,IAAI,CACH,SAAS,CAAC,CAAC,oBAAoB,KAAK,iBAAiB,OAAO,EAAE,CAAC,CAE/D;MAAA,CAAC,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,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACd,SAAS,CAAC,CAAC,6CAA6C,MAAM,EAAE,CAAC,CACjE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,MAAM,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAEvD;cAAA,CAAC,YAAY,CACX,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,EAErB;YAAA,EAAE,IAAI,CAAC,CACR,CAAC;YACJ,CAAC;YACD,OAAO,CACL,CAAC,YAAY,CACX,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACd,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,EACjB,CACH,CAAC;QACJ,CAAC,CAAC,CACJ;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,165 @@
1
+ {
2
+ "DateTimeInput": {
3
+ "properties": {
4
+ "value": {
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 current date/time value. Typically bound to a data path."
23
+ },
24
+ "label": {
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
+ "type": "object",
43
+ "properties": {
44
+ "call": {
45
+ "type": "string"
46
+ },
47
+ "args": {
48
+ "type": "object",
49
+ "additionalProperties": true
50
+ },
51
+ "returnType": {
52
+ "type": "string",
53
+ "enum": [
54
+ "string",
55
+ "number",
56
+ "boolean",
57
+ "object",
58
+ "array",
59
+ "any",
60
+ "void"
61
+ ]
62
+ }
63
+ },
64
+ "required": [
65
+ "call",
66
+ "args"
67
+ ],
68
+ "additionalProperties": false
69
+ }
70
+ ],
71
+ "description": "The text label for the input field."
72
+ },
73
+ "enableDate": {
74
+ "type": "boolean",
75
+ "description": "Whether to show the date picker."
76
+ },
77
+ "enableTime": {
78
+ "type": "boolean",
79
+ "description": "Whether to show the time picker."
80
+ },
81
+ "outputFormat": {
82
+ "type": "string",
83
+ "description": "Format string for the output value. Supports YYYY, MM, DD, HH, and mm."
84
+ },
85
+ "min": {
86
+ "type": "string",
87
+ "description": "Minimum allowed date/time value."
88
+ },
89
+ "max": {
90
+ "type": "string",
91
+ "description": "Maximum allowed date/time value."
92
+ },
93
+ "checks": {
94
+ "type": "array",
95
+ "items": {
96
+ "type": "object",
97
+ "properties": {
98
+ "condition": {
99
+ "oneOf": [
100
+ {
101
+ "type": "boolean"
102
+ },
103
+ {
104
+ "type": "object",
105
+ "properties": {
106
+ "path": {
107
+ "type": "string"
108
+ }
109
+ },
110
+ "required": [
111
+ "path"
112
+ ],
113
+ "additionalProperties": false
114
+ },
115
+ {
116
+ "type": "object",
117
+ "properties": {
118
+ "call": {
119
+ "type": "string"
120
+ },
121
+ "args": {
122
+ "type": "object",
123
+ "additionalProperties": true
124
+ },
125
+ "returnType": {
126
+ "type": "string",
127
+ "enum": [
128
+ "string",
129
+ "number",
130
+ "boolean",
131
+ "object",
132
+ "array",
133
+ "any",
134
+ "void"
135
+ ]
136
+ }
137
+ },
138
+ "required": [
139
+ "call",
140
+ "args"
141
+ ],
142
+ "additionalProperties": false
143
+ }
144
+ ],
145
+ "description": "The condition that indicates whether the check passes."
146
+ },
147
+ "message": {
148
+ "type": "string",
149
+ "description": "The error message to display if the check fails."
150
+ }
151
+ },
152
+ "required": [
153
+ "condition",
154
+ "message"
155
+ ],
156
+ "additionalProperties": false
157
+ },
158
+ "description": "A list of checks to perform."
159
+ }
160
+ },
161
+ "required": [
162
+ "value"
163
+ ]
164
+ }
165
+ }
@@ -0,0 +1,43 @@
1
+ import type { GenericComponentProps } from '../../store/types.js';
2
+ import '../../../styles/catalog/DateTimeInput.css';
3
+ /**
4
+ * @a2uiCatalog DateTimeInput
5
+ */
6
+ export interface DateTimeInputProps extends GenericComponentProps {
7
+ /** The current date/time value. Typically bound to a data path. */
8
+ value: string | {
9
+ path: string;
10
+ };
11
+ /** The text label for the input field. */
12
+ label?: string | {
13
+ path: string;
14
+ } | {
15
+ call: string;
16
+ args: Record<string, unknown>;
17
+ returnType?: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'any' | 'void';
18
+ };
19
+ /** Whether to show the date picker. */
20
+ enableDate?: boolean;
21
+ /** Whether to show the time picker. */
22
+ enableTime?: boolean;
23
+ /** Format string for the output value. Supports YYYY, MM, DD, HH, and mm. */
24
+ outputFormat?: string;
25
+ /** Minimum allowed date/time value. */
26
+ min?: string;
27
+ /** Maximum allowed date/time value. */
28
+ max?: string;
29
+ /** A list of checks to perform. */
30
+ checks?: Array<{
31
+ /** The condition that indicates whether the check passes. */
32
+ condition: boolean | {
33
+ path: string;
34
+ } | {
35
+ call: string;
36
+ args: Record<string, unknown>;
37
+ returnType?: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'any' | 'void';
38
+ };
39
+ /** The error message to display if the check fails. */
40
+ message: string;
41
+ }>;
42
+ }
43
+ export declare function DateTimeInput(props: DateTimeInputProps): import('@lynx-js/react').ReactNode;
@@ -0,0 +1,258 @@
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
+ import { DialogBackdrop, DialogContent, DialogRoot, DialogView, } from '@lynx-js/lynx-ui';
5
+ import { useEffect, useState } from '@lynx-js/react';
6
+ import { addMonths, buildDateTimeMonthPage, dateTimePartsToDate, formatDateTimeInputValue, getDateTimeDialogTitle, getDateTimeInputPlaceholder, getDefaultDateTimeParts, getWeekdayLabels, incrementDateTimePart, isDateTimeAfterMax, isDateTimeBeforeMin, normalizeDateTimeInputLabel, normalizeDateTimeInputMode, normalizeDateTimeInputValue, startOfMonth, withDate, } from './utils.js';
7
+ import { useChecks } from '../../react/useChecks.js';
8
+ import '../../../styles/catalog/DateTimeInput.css';
9
+ const MONTH_LABELS = [
10
+ 'January',
11
+ 'February',
12
+ 'March',
13
+ 'April',
14
+ 'May',
15
+ 'June',
16
+ 'July',
17
+ 'August',
18
+ 'September',
19
+ 'October',
20
+ 'November',
21
+ 'December',
22
+ ];
23
+ function formatMonthCaption(month) {
24
+ return `${MONTH_LABELS[month.getMonth()]} ${month.getFullYear()}`;
25
+ }
26
+ function joinClassNames(values) {
27
+ return values.filter(Boolean).join(' ');
28
+ }
29
+ function getPartsKey(parts) {
30
+ return parts
31
+ ? formatDateTimeInputValue(parts, 'YYYY-MM-DD HH:mm', { enableDate: true, enableTime: true })
32
+ : '';
33
+ }
34
+ export function DateTimeInput(props) {
35
+ const { dataContextPath, id, label, max, min, outputFormat, setValue, surface, } = props;
36
+ const mode = normalizeDateTimeInputMode(props.enableDate, props.enableTime);
37
+ const valueParts = normalizeDateTimeInputValue(props.value);
38
+ const minParts = normalizeDateTimeInputValue(min);
39
+ const maxParts = normalizeDateTimeInputValue(max);
40
+ const valueKey = getPartsKey(valueParts);
41
+ const initialParts = valueParts ?? getDefaultDateTimeParts();
42
+ const [open, setOpen] = useState(false);
43
+ const [draftParts, setDraftParts] = useState(initialParts);
44
+ const [visibleMonth, setVisibleMonth] = useState(startOfMonth(dateTimePartsToDate(initialParts)));
45
+ const checks = props.checks;
46
+ const { ok, firstFailureMessage } = useChecks({
47
+ checks,
48
+ componentId: id ?? '',
49
+ surface,
50
+ dataContextPath,
51
+ });
52
+ useEffect(() => {
53
+ if (open)
54
+ return undefined;
55
+ const nextParts = valueParts ?? getDefaultDateTimeParts();
56
+ setDraftParts(nextParts);
57
+ setVisibleMonth(startOfMonth(dateTimePartsToDate(nextParts)));
58
+ return undefined;
59
+ }, [open, valueKey]);
60
+ const minDate = minParts ? dateTimePartsToDate(minParts) : null;
61
+ const maxDate = maxParts ? dateTimePartsToDate(maxParts) : null;
62
+ const draftDate = dateTimePartsToDate(draftParts);
63
+ const monthPage = buildDateTimeMonthPage({
64
+ month: visibleMonth,
65
+ selectedDate: draftDate,
66
+ today: new Date(),
67
+ minDate,
68
+ maxDate,
69
+ });
70
+ const weekdayLabels = getWeekdayLabels();
71
+ const draftOutOfRange = isDateTimeBeforeMin(draftParts, minParts)
72
+ || isDateTimeAfterMax(draftParts, maxParts);
73
+ const currentOutOfRange = valueParts
74
+ ? isDateTimeBeforeMin(valueParts, minParts)
75
+ || isDateTimeAfterMax(valueParts, maxParts)
76
+ : false;
77
+ const invalid = !ok || currentOutOfRange;
78
+ const labelText = normalizeDateTimeInputLabel(label);
79
+ const displayValue = valueParts
80
+ ? formatDateTimeInputValue(valueParts, outputFormat, mode)
81
+ : getDateTimeInputPlaceholder(mode);
82
+ const handleOpen = () => {
83
+ const nextParts = valueParts ?? draftParts ?? getDefaultDateTimeParts();
84
+ setDraftParts(nextParts);
85
+ setVisibleMonth(startOfMonth(dateTimePartsToDate(nextParts)));
86
+ setOpen(true);
87
+ };
88
+ const handleCancel = () => {
89
+ setOpen(false);
90
+ };
91
+ const handleConfirm = () => {
92
+ if (draftOutOfRange)
93
+ return;
94
+ setValue?.('value', formatDateTimeInputValue(draftParts, outputFormat, mode));
95
+ setOpen(false);
96
+ };
97
+ const handlePreviousMonth = () => {
98
+ setVisibleMonth(addMonths(visibleMonth, -1));
99
+ };
100
+ const handleNextMonth = () => {
101
+ setVisibleMonth(addMonths(visibleMonth, 1));
102
+ };
103
+ const handleTimeStep = (part, delta) => {
104
+ setDraftParts((current) => incrementDateTimePart(current, part, delta));
105
+ };
106
+ const rootClassName = joinClassNames([
107
+ 'datetime-input',
108
+ invalid && 'datetime-input-invalid',
109
+ ]);
110
+ return (<view key={id} className={rootClassName}>
111
+ {labelText
112
+ ? <text className='datetime-input-label'>{labelText}</text>
113
+ : null}
114
+ <view className={joinClassNames([
115
+ 'datetime-input-control',
116
+ !valueParts && 'datetime-input-control-placeholder',
117
+ ])} bindtap={handleOpen} event-through={false}>
118
+ <text className='datetime-input-value'>{displayValue}</text>
119
+ <text className='datetime-input-icon'>calendar_today</text>
120
+ </view>
121
+ {invalid && firstFailureMessage
122
+ ? <text className='datetime-input-error'>{firstFailureMessage}</text>
123
+ : null}
124
+ {currentOutOfRange
125
+ ? <text className='datetime-input-error'>Date is out of range</text>
126
+ : null}
127
+
128
+ <DialogRoot show={open} onShowChange={(nextOpen) => {
129
+ setOpen(nextOpen);
130
+ }}>
131
+ <DialogView className='datetime-dialog-view' overlayLevel={4}>
132
+ <DialogBackdrop className='datetime-dialog-backdrop' clickToClose={true} transition={true}/>
133
+ <DialogContent className='datetime-dialog-content' transition={true}>
134
+ <view className='datetime-dialog-header'>
135
+ <text className='datetime-dialog-title'>
136
+ {getDateTimeDialogTitle(labelText, mode)}
137
+ </text>
138
+ <view className='datetime-dialog-close' bindtap={handleCancel} event-through={false}>
139
+ <text className='datetime-dialog-close-icon'>close</text>
140
+ </view>
141
+ </view>
142
+
143
+ {mode.enableDate
144
+ ? (<view className='datetime-calendar'>
145
+ <view className='datetime-calendar-header'>
146
+ <view className='datetime-calendar-nav' bindtap={handlePreviousMonth} event-through={false}>
147
+ <text className='datetime-calendar-nav-icon'>
148
+ chevron_left
149
+ </text>
150
+ </view>
151
+ <text className='datetime-calendar-caption'>
152
+ {formatMonthCaption(visibleMonth)}
153
+ </text>
154
+ <view className='datetime-calendar-nav' bindtap={handleNextMonth} event-through={false}>
155
+ <text className='datetime-calendar-nav-icon'>
156
+ chevron_right
157
+ </text>
158
+ </view>
159
+ </view>
160
+
161
+ <view className='datetime-weekdays'>
162
+ {weekdayLabels.map((weekday, weekdayIndex) => (<view key={weekdayIndex} className='datetime-weekday'>
163
+ <text className='datetime-weekday-text'>
164
+ {weekday}
165
+ </text>
166
+ </view>))}
167
+ </view>
168
+
169
+ <view className='datetime-month'>
170
+ {monthPage.days.map((day, dayIndex) => (<view key={dayIndex} className={joinClassNames([
171
+ 'datetime-day',
172
+ day.outside && 'datetime-day-outside',
173
+ day.selected && 'datetime-day-selected',
174
+ day.today && 'datetime-day-today',
175
+ day.disabled && 'datetime-day-disabled',
176
+ ])} bindtap={() => {
177
+ if (day.disabled)
178
+ return;
179
+ setDraftParts((current) => withDate(current, day.date));
180
+ if (day.outside) {
181
+ setVisibleMonth(startOfMonth(day.date));
182
+ }
183
+ }} event-through={false}>
184
+ <text className='datetime-day-text'>
185
+ {String(day.day)}
186
+ </text>
187
+ </view>))}
188
+ </view>
189
+ </view>)
190
+ : null}
191
+
192
+ {mode.enableTime
193
+ ? (<view className='datetime-time'>
194
+ <text className='datetime-time-label'>Time</text>
195
+ <view className='datetime-time-fields'>
196
+ <view className='datetime-time-field'>
197
+ <view className='datetime-time-stepper' bindtap={() => handleTimeStep('hour', 1)} event-through={false}>
198
+ <text className='datetime-time-stepper-icon'>
199
+ expand_less
200
+ </text>
201
+ </view>
202
+ <text className='datetime-time-value'>
203
+ {String(draftParts.hour).padStart(2, '0')}
204
+ </text>
205
+ <view className='datetime-time-stepper' bindtap={() => handleTimeStep('hour', -1)} event-through={false}>
206
+ <text className='datetime-time-stepper-icon'>
207
+ expand_more
208
+ </text>
209
+ </view>
210
+ </view>
211
+ <text className='datetime-time-separator'>:</text>
212
+ <view className='datetime-time-field'>
213
+ <view className='datetime-time-stepper' bindtap={() => handleTimeStep('minute', 1)} event-through={false}>
214
+ <text className='datetime-time-stepper-icon'>
215
+ expand_less
216
+ </text>
217
+ </view>
218
+ <text className='datetime-time-value'>
219
+ {String(draftParts.minute).padStart(2, '0')}
220
+ </text>
221
+ <view className='datetime-time-stepper' bindtap={() => handleTimeStep('minute', -1)} event-through={false}>
222
+ <text className='datetime-time-stepper-icon'>
223
+ expand_more
224
+ </text>
225
+ </view>
226
+ </view>
227
+ </view>
228
+ </view>)
229
+ : null}
230
+
231
+ {draftOutOfRange
232
+ ? (<text className='datetime-dialog-error'>
233
+ Date is out of range
234
+ </text>)
235
+ : null}
236
+
237
+ <view className='datetime-dialog-actions'>
238
+ <view className='datetime-dialog-button datetime-dialog-button-secondary' bindtap={handleCancel} event-through={false}>
239
+ <text className='datetime-dialog-button-text-secondary'>
240
+ Cancel
241
+ </text>
242
+ </view>
243
+ <view className={joinClassNames([
244
+ 'datetime-dialog-button',
245
+ 'datetime-dialog-button-primary',
246
+ draftOutOfRange && 'datetime-dialog-button-disabled',
247
+ ])} bindtap={handleConfirm} event-through={false}>
248
+ <text className='datetime-dialog-button-text-primary'>
249
+ Done
250
+ </text>
251
+ </view>
252
+ </view>
253
+ </DialogContent>
254
+ </DialogView>
255
+ </DialogRoot>
256
+ </view>);
257
+ }
258
+ //# sourceMappingURL=index.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../../src/catalog/DateTimeInput/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ export interface DateTimeParts {
2
+ year: number;
3
+ month: number;
4
+ day: number;
5
+ hour: number;
6
+ minute: number;
7
+ }
8
+ export interface DateTimeInputMode {
9
+ enableDate: boolean;
10
+ enableTime: boolean;
11
+ }
12
+ export interface DateTimeDayInfo {
13
+ date: Date;
14
+ dateKey: string;
15
+ day: number;
16
+ outside: boolean;
17
+ selected: boolean;
18
+ today: boolean;
19
+ disabled: boolean;
20
+ }
21
+ export interface DateTimeMonthPage {
22
+ month: Date;
23
+ monthKey: string;
24
+ days: DateTimeDayInfo[];
25
+ }
26
+ export interface BuildDateTimeMonthPageOptions {
27
+ month: Date;
28
+ selectedDate: Date | null;
29
+ today: Date;
30
+ minDate: Date | null;
31
+ maxDate: Date | null;
32
+ weekStartsOn?: number;
33
+ }
34
+ export declare function normalizeDateTimeInputValue(value: unknown): DateTimeParts | null;
35
+ export declare function getDefaultDateTimeParts(now?: Date): DateTimeParts;
36
+ export declare function dateTimePartsToDate(parts: DateTimeParts): Date;
37
+ export declare function dateTimePartsToDateKey(parts: DateTimeParts): string;
38
+ export declare function formatDateKey(date: Date): string;
39
+ export declare function formatMonthKey(date: Date): string;
40
+ export declare function startOfMonth(date: Date): Date;
41
+ export declare function addMonths(date: Date, offset: number): Date;
42
+ export declare function getWeekdayLabels(weekStartsOn?: number, labels?: string[]): string[];
43
+ export declare function compareDateTimeParts(a: DateTimeParts, b: DateTimeParts): number;
44
+ export declare function isDateTimeBeforeMin(value: DateTimeParts, min: DateTimeParts | null): boolean;
45
+ export declare function isDateTimeAfterMax(value: DateTimeParts, max: DateTimeParts | null): boolean;
46
+ export declare function buildDateTimeMonthPage({ month, selectedDate, today, minDate, maxDate, weekStartsOn, }: BuildDateTimeMonthPageOptions): DateTimeMonthPage;
47
+ export declare function normalizeDateTimeInputMode(enableDate: unknown, enableTime: unknown): DateTimeInputMode;
48
+ export declare function normalizeDateTimeInputLabel(value: unknown): string;
49
+ export declare function formatDateTimeInputValue(parts: DateTimeParts, outputFormat: unknown, mode: DateTimeInputMode): string;
50
+ export declare function getDateTimeInputPlaceholder(mode: DateTimeInputMode): string;
51
+ export declare function getDateTimeDialogTitle(label: string, mode: DateTimeInputMode): string;
52
+ export declare function withDate(parts: DateTimeParts, date: Date): DateTimeParts;
53
+ export declare function incrementDateTimePart(parts: DateTimeParts, part: 'hour' | 'minute', delta: number): DateTimeParts;