@assistant-ui/react-generative-ui 0.0.21 → 0.0.23

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 (212) hide show
  1. package/LICENSE +1 -1
  2. package/dist/JSONGenerativeUI.client.d.ts.map +1 -1
  3. package/dist/JSONGenerativeUI.client.js +30 -13
  4. package/dist/JSONGenerativeUI.client.js.map +1 -1
  5. package/dist/RadioGroupScope.d.ts +6 -0
  6. package/dist/RadioGroupScope.d.ts.map +1 -0
  7. package/dist/RadioGroupScope.js +25 -0
  8. package/dist/RadioGroupScope.js.map +1 -0
  9. package/dist/a2ui/BindingContext.d.ts +11 -0
  10. package/dist/a2ui/BindingContext.d.ts.map +1 -0
  11. package/dist/a2ui/BindingContext.js +12 -0
  12. package/dist/a2ui/BindingContext.js.map +1 -0
  13. package/dist/a2ui/PresentRenderer.d.ts +11 -0
  14. package/dist/a2ui/PresentRenderer.d.ts.map +1 -0
  15. package/dist/a2ui/PresentRenderer.js +39 -0
  16. package/dist/a2ui/PresentRenderer.js.map +1 -0
  17. package/dist/a2ui/convert.d.ts +6 -0
  18. package/dist/a2ui/convert.d.ts.map +1 -1
  19. package/dist/a2ui/convert.js +363 -85
  20. package/dist/a2ui/convert.js.map +1 -1
  21. package/dist/a2ui/dataModel.d.ts +9 -0
  22. package/dist/a2ui/dataModel.d.ts.map +1 -0
  23. package/dist/a2ui/dataModel.js +44 -0
  24. package/dist/a2ui/dataModel.js.map +1 -0
  25. package/dist/a2ui/reducer.d.ts +5 -0
  26. package/dist/a2ui/reducer.d.ts.map +1 -1
  27. package/dist/a2ui/reducer.js +3 -3
  28. package/dist/a2ui/reducer.js.map +1 -1
  29. package/dist/a2ui/types.d.ts +8 -2
  30. package/dist/a2ui/types.d.ts.map +1 -1
  31. package/dist/a2ui/types.js.map +1 -1
  32. package/dist/a2ui/valueFunctions.d.ts +16 -0
  33. package/dist/a2ui/valueFunctions.d.ts.map +1 -0
  34. package/dist/a2ui/valueFunctions.js +332 -0
  35. package/dist/a2ui/valueFunctions.js.map +1 -0
  36. package/dist/actionRegistry.d.ts +1 -1
  37. package/dist/actionRegistry.js.map +1 -1
  38. package/dist/answeredValues.d.ts +16 -0
  39. package/dist/answeredValues.d.ts.map +1 -0
  40. package/dist/answeredValues.js +37 -0
  41. package/dist/answeredValues.js.map +1 -0
  42. package/dist/constants.d.ts +3 -0
  43. package/dist/constants.d.ts.map +1 -1
  44. package/dist/constants.js +4 -1
  45. package/dist/constants.js.map +1 -1
  46. package/dist/fieldReferences.d.ts +9 -0
  47. package/dist/fieldReferences.d.ts.map +1 -0
  48. package/dist/fieldReferences.js +53 -0
  49. package/dist/fieldReferences.js.map +1 -0
  50. package/dist/generativeUIToJSX.js +3 -3
  51. package/dist/generativeUIToJSX.js.map +1 -1
  52. package/dist/index.js +2 -2
  53. package/dist/index.server.js +2 -2
  54. package/dist/index.shared.js +2 -2
  55. package/dist/ir.d.ts +1 -1
  56. package/dist/ir.js.map +1 -1
  57. package/dist/renderGenerativeUI.d.ts.map +1 -1
  58. package/dist/renderGenerativeUI.js +12 -1
  59. package/dist/renderGenerativeUI.js.map +1 -1
  60. package/dist/slack/constants.d.ts +2 -0
  61. package/dist/slack/constants.d.ts.map +1 -1
  62. package/dist/slack/constants.js +3 -1
  63. package/dist/slack/constants.js.map +1 -1
  64. package/dist/slack/decodeBlockAction.d.ts +3 -1
  65. package/dist/slack/decodeBlockAction.d.ts.map +1 -1
  66. package/dist/slack/decodeBlockAction.js +96 -7
  67. package/dist/slack/decodeBlockAction.js.map +1 -1
  68. package/dist/slack/fromSlackBlocks.d.ts.map +1 -1
  69. package/dist/slack/fromSlackBlocks.js +43 -3
  70. package/dist/slack/fromSlackBlocks.js.map +1 -1
  71. package/dist/slack/toSlackBlocks.d.ts.map +1 -1
  72. package/dist/slack/toSlackBlocks.js +244 -20
  73. package/dist/slack/toSlackBlocks.js.map +1 -1
  74. package/dist/slack/types.d.ts +24 -1
  75. package/dist/slack/types.d.ts.map +1 -1
  76. package/dist/slack.d.ts +1 -1
  77. package/dist/slack.d.ts.map +1 -1
  78. package/dist/teams/constants.d.ts +1 -1
  79. package/dist/teams/constants.d.ts.map +1 -1
  80. package/dist/teams/constants.js +1 -1
  81. package/dist/teams/constants.js.map +1 -1
  82. package/dist/teams/decodeSubmitData.d.ts +4 -0
  83. package/dist/teams/decodeSubmitData.d.ts.map +1 -1
  84. package/dist/teams/decodeSubmitData.js +29 -3
  85. package/dist/teams/decodeSubmitData.js.map +1 -1
  86. package/dist/teams/temporalId.d.ts +5 -0
  87. package/dist/teams/temporalId.d.ts.map +1 -0
  88. package/dist/teams/temporalId.js +28 -0
  89. package/dist/teams/temporalId.js.map +1 -0
  90. package/dist/teams/toAdaptiveCard.d.ts +5 -4
  91. package/dist/teams/toAdaptiveCard.d.ts.map +1 -1
  92. package/dist/teams/toAdaptiveCard.js +136 -18
  93. package/dist/teams/toAdaptiveCard.js.map +1 -1
  94. package/dist/teams/toTeamsAttachments.d.ts.map +1 -1
  95. package/dist/teams/toTeamsAttachments.js.map +1 -1
  96. package/dist/teams/types.d.ts +23 -2
  97. package/dist/teams/types.d.ts.map +1 -1
  98. package/dist/teams.d.ts +1 -1
  99. package/dist/teams.d.ts.map +1 -1
  100. package/dist/temporal.d.ts +33 -0
  101. package/dist/temporal.d.ts.map +1 -0
  102. package/dist/temporal.js +152 -0
  103. package/dist/temporal.js.map +1 -0
  104. package/dist/vocabulary/alert.d.ts +9 -2
  105. package/dist/vocabulary/alert.d.ts.map +1 -1
  106. package/dist/vocabulary/alert.js +116 -19
  107. package/dist/vocabulary/alert.js.map +1 -1
  108. package/dist/vocabulary/collectFormValues.d.ts +2 -1
  109. package/dist/vocabulary/collectFormValues.d.ts.map +1 -1
  110. package/dist/vocabulary/collectFormValues.js +15 -4
  111. package/dist/vocabulary/collectFormValues.js.map +1 -1
  112. package/dist/vocabulary/data.d.ts +22 -5
  113. package/dist/vocabulary/data.d.ts.map +1 -1
  114. package/dist/vocabulary/data.js +278 -83
  115. package/dist/vocabulary/data.js.map +1 -1
  116. package/dist/vocabulary/dispatch.d.ts +3 -2
  117. package/dist/vocabulary/dispatch.d.ts.map +1 -1
  118. package/dist/vocabulary/dispatch.js +33 -4
  119. package/dist/vocabulary/dispatch.js.map +1 -1
  120. package/dist/vocabulary/fact.d.ts +8 -1
  121. package/dist/vocabulary/fact.d.ts.map +1 -1
  122. package/dist/vocabulary/fact.js +37 -11
  123. package/dist/vocabulary/fact.js.map +1 -1
  124. package/dist/vocabulary/form.d.ts.map +1 -1
  125. package/dist/vocabulary/form.js +3 -3
  126. package/dist/vocabulary/form.js.map +1 -1
  127. package/dist/vocabulary/formatValue.d.ts +7 -0
  128. package/dist/vocabulary/formatValue.d.ts.map +1 -0
  129. package/dist/vocabulary/formatValue.js +76 -0
  130. package/dist/vocabulary/formatValue.js.map +1 -0
  131. package/dist/vocabulary/icon.d.ts +1 -1
  132. package/dist/vocabulary/interactive.d.ts +143 -8
  133. package/dist/vocabulary/interactive.d.ts.map +1 -1
  134. package/dist/vocabulary/interactive.js +458 -107
  135. package/dist/vocabulary/interactive.js.map +1 -1
  136. package/dist/vocabulary/layout.d.ts.map +1 -1
  137. package/dist/vocabulary/layout.js +4 -4
  138. package/dist/vocabulary/layout.js.map +1 -1
  139. package/dist/vocabulary/list.js +2 -2
  140. package/dist/vocabulary/list.js.map +1 -1
  141. package/dist/vocabulary/text.d.ts +1 -1
  142. package/package.json +8 -5
  143. package/src/JSONGenerativeUI.client.tsx +84 -40
  144. package/src/JSONGenerativeUI.test.tsx +964 -68
  145. package/src/RadioGroupScope.server.test.tsx +24 -0
  146. package/src/RadioGroupScope.tsx +34 -0
  147. package/src/a2ui/BindingContext.ts +26 -0
  148. package/src/a2ui/PresentRenderer.tsx +83 -0
  149. package/src/a2ui/convert.test.ts +2054 -229
  150. package/src/a2ui/convert.ts +665 -134
  151. package/src/a2ui/dataModel.ts +69 -0
  152. package/src/a2ui/reducer.test.ts +35 -0
  153. package/src/a2ui/reducer.ts +5 -4
  154. package/src/a2ui/types.ts +9 -2
  155. package/src/a2ui/valueFunctions.test.ts +271 -0
  156. package/src/a2ui/valueFunctions.ts +523 -0
  157. package/src/actionRegistry.ts +1 -1
  158. package/src/answeredValues.test.ts +33 -0
  159. package/src/answeredValues.tsx +70 -0
  160. package/src/constants.ts +5 -0
  161. package/src/fieldReferences.test.ts +66 -0
  162. package/src/fieldReferences.ts +83 -0
  163. package/src/generativeUIToJSX.test.ts +18 -0
  164. package/src/generativeUIToJSX.ts +4 -6
  165. package/src/index.server.test.ts +106 -0
  166. package/src/ir.ts +1 -1
  167. package/src/renderGenerativeUI.test.tsx +14 -5
  168. package/src/renderGenerativeUI.tsx +30 -1
  169. package/src/slack/a2uiSlack.test.ts +198 -0
  170. package/src/slack/constants.ts +3 -0
  171. package/src/slack/datePicker.test.ts +612 -0
  172. package/src/slack/decodeBlockAction.test.ts +98 -0
  173. package/src/slack/decodeBlockAction.ts +182 -16
  174. package/src/slack/fromSlackBlocks.test.ts +222 -3
  175. package/src/slack/fromSlackBlocks.ts +82 -2
  176. package/src/slack/toSlackBlocks.test.ts +682 -3
  177. package/src/slack/toSlackBlocks.ts +463 -25
  178. package/src/slack/types.ts +28 -0
  179. package/src/slack.ts +2 -0
  180. package/src/teams/constants.ts +1 -1
  181. package/src/teams/decodeSubmitData.test.ts +249 -0
  182. package/src/teams/decodeSubmitData.ts +57 -4
  183. package/src/teams/temporal.test.ts +766 -0
  184. package/src/teams/temporalId.ts +56 -0
  185. package/src/teams/toAdaptiveCard.test.ts +219 -0
  186. package/src/teams/toAdaptiveCard.ts +259 -21
  187. package/src/teams/toTeamsAttachments.ts +4 -1
  188. package/src/teams/types.ts +21 -1
  189. package/src/teams.ts +1 -0
  190. package/src/temporal.test.ts +319 -0
  191. package/src/temporal.ts +259 -0
  192. package/src/vocabulary/alert.test.tsx +288 -7
  193. package/src/vocabulary/alert.tsx +168 -26
  194. package/src/vocabulary/collectFormValues.test.ts +225 -1
  195. package/src/vocabulary/collectFormValues.ts +54 -5
  196. package/src/vocabulary/data.test.tsx +248 -6
  197. package/src/vocabulary/data.tsx +398 -100
  198. package/src/vocabulary/datepicker.dom.test.tsx +1148 -0
  199. package/src/vocabulary/dispatch.ts +63 -2
  200. package/src/vocabulary/fact.test.tsx +67 -0
  201. package/src/vocabulary/fact.tsx +40 -9
  202. package/src/vocabulary/form.tsx +7 -2
  203. package/src/vocabulary/formatValue.test.ts +72 -0
  204. package/src/vocabulary/formatValue.ts +127 -0
  205. package/src/vocabulary/index.test.ts +2 -0
  206. package/src/vocabulary/interactive.dispatch.test.tsx +167 -79
  207. package/src/vocabulary/interactive.dom.test.tsx +1747 -0
  208. package/src/vocabulary/interactive.test.tsx +60 -4
  209. package/src/vocabulary/interactive.tsx +910 -155
  210. package/src/vocabulary/layout.test.tsx +6 -4
  211. package/src/vocabulary/layout.tsx +13 -2
  212. package/src/vocabulary/list.tsx +2 -2
@@ -42,6 +42,14 @@ export interface TeamsSubmitData {
42
42
  readonly payload?: Record<string, unknown>;
43
43
  };
44
44
  }
45
+ export type TeamsTemporalField = {
46
+ readonly fieldId: string;
47
+ } & ({
48
+ readonly role: "date";
49
+ } | {
50
+ readonly role: "time";
51
+ readonly previousValue?: string;
52
+ });
45
53
  /**
46
54
  * A submit action. `data` carries the resume payload under an `aui` key so
47
55
  * {@link decodeSubmitData} can invert it out of the merged `activity.value`
@@ -89,11 +97,12 @@ export interface TeamsInputChoice {
89
97
  readonly title: string;
90
98
  readonly value: string;
91
99
  }
92
- /** A dropdown (`compact`) or radio group (`expanded`) input. */
100
+ /** A dropdown (`compact`), radio group (`expanded`), or checkbox group (`expanded` with `isMultiSelect`) input. */
93
101
  export interface TeamsInputChoiceSet {
94
102
  readonly type: "Input.ChoiceSet";
95
103
  readonly id: string;
96
104
  readonly style: "compact" | "expanded";
105
+ readonly isMultiSelect?: true;
97
106
  readonly choices: readonly TeamsInputChoice[];
98
107
  readonly placeholder?: string;
99
108
  readonly label?: string;
@@ -116,8 +125,10 @@ export interface TeamsInputToggle {
116
125
  export interface TeamsInputText {
117
126
  readonly type: "Input.Text";
118
127
  readonly id: string;
128
+ readonly style?: "password";
119
129
  readonly label?: string;
120
130
  readonly placeholder?: string;
131
+ readonly value?: string;
121
132
  readonly isMultiline?: true;
122
133
  readonly separator?: true;
123
134
  readonly spacing?: "large";
@@ -133,6 +144,16 @@ export interface TeamsInputDate {
133
144
  readonly separator?: true;
134
145
  readonly spacing?: "large";
135
146
  }
147
+ export interface TeamsInputTime {
148
+ readonly type: "Input.Time";
149
+ readonly id: string;
150
+ readonly label?: string;
151
+ readonly value?: string;
152
+ readonly min?: string;
153
+ readonly max?: string;
154
+ readonly separator?: true;
155
+ readonly spacing?: "large";
156
+ }
136
157
  /** One cell inside a {@link TeamsTableRow}. */
137
158
  export interface TeamsTableCell {
138
159
  readonly type: "TableCell";
@@ -157,7 +178,7 @@ export interface TeamsTable {
157
178
  readonly spacing?: "large";
158
179
  }
159
180
  /** A body element emitted by {@link toAdaptiveCard}. */
160
- export type TeamsCardElement = TeamsTextBlock | TeamsImage | TeamsFactSet | TeamsActionSet | TeamsContainer | TeamsColumnSet | TeamsInputChoiceSet | TeamsInputToggle | TeamsInputText | TeamsInputDate | TeamsTable;
181
+ export type TeamsCardElement = TeamsTextBlock | TeamsImage | TeamsFactSet | TeamsActionSet | TeamsContainer | TeamsColumnSet | TeamsInputChoiceSet | TeamsInputToggle | TeamsInputText | TeamsInputDate | TeamsInputTime | TeamsTable;
161
182
  /** A Microsoft Teams Adaptive Card, pinned to schema version 1.5 (the Teams desktop/web cap; mobile clients cap at 1.2). */
162
183
  export interface TeamsAdaptiveCard {
163
184
  readonly $schema: "http://adaptivecards.io/schemas/adaptive-card.json";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/teams/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/teams/types.ts"],"names":[],"mappings":"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"}
package/dist/teams.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { decodeSubmitData } from "./teams/decodeSubmitData.js";
2
2
  export { toAdaptiveCard } from "./teams/toAdaptiveCard.js";
3
3
  export { toTeamsAttachments } from "./teams/toTeamsAttachments.js";
4
- export type { AdaptiveCardResult, TeamsAdaptiveCard, TeamsActionSet, TeamsAttachmentsResult, TeamsCardAction, TeamsCardAttachment, TeamsCardElement, TeamsColumn, TeamsColumnSet, TeamsContainer, TeamsContainerStyle, TeamsConversionWarning, TeamsFact, TeamsFactSet, TeamsImage, TeamsInputChoice, TeamsInputChoiceSet, TeamsInputDate, TeamsInputText, TeamsInputToggle, TeamsSubmitAction, TeamsSubmitData, TeamsTable, TeamsTableCell, TeamsTableColumnDefinition, TeamsTableRow, TeamsTextBlock, TeamsTextSize, ToAdaptiveCardOptions, } from "./teams/types.js";
4
+ export type { AdaptiveCardResult, TeamsAdaptiveCard, TeamsActionSet, TeamsAttachmentsResult, TeamsCardAction, TeamsCardAttachment, TeamsCardElement, TeamsColumn, TeamsColumnSet, TeamsContainer, TeamsContainerStyle, TeamsConversionWarning, TeamsFact, TeamsFactSet, TeamsImage, TeamsInputChoice, TeamsInputChoiceSet, TeamsInputDate, TeamsInputText, TeamsInputTime, TeamsInputToggle, TeamsSubmitAction, TeamsSubmitData, TeamsTable, TeamsTableCell, TeamsTableColumnDefinition, TeamsTableRow, TeamsTextBlock, TeamsTextSize, ToAdaptiveCardOptions, } from "./teams/types.js";
5
5
  //# sourceMappingURL=teams.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../src/teams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oCAAiC;AAC5D,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,kBAAkB,EAAE,sCAAmC;AAChE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,cAAc,EACd,0BAA0B,EAC1B,aAAa,EACb,cAAc,EACd,aAAa,EACb,qBAAqB,GACtB,yBAAsB"}
1
+ {"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../src/teams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oCAAiC;AAC5D,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,kBAAkB,EAAE,sCAAmC;AAChE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,cAAc,EACd,0BAA0B,EAC1B,aAAa,EACb,cAAc,EACd,aAAa,EACb,qBAAqB,GACtB,yBAAsB"}
@@ -0,0 +1,33 @@
1
+ export type TemporalPrecision = "minutes" | "seconds" | number;
2
+ export type TemporalInstant = {
3
+ kind: "instant";
4
+ epochMs: number;
5
+ offset: string;
6
+ precision: TemporalPrecision;
7
+ subMillisecondDigits?: string;
8
+ };
9
+ export type TemporalValue = {
10
+ kind: "date" | "unparseable";
11
+ value: string;
12
+ } | {
13
+ kind: "time" | "floating";
14
+ value: string;
15
+ precision: TemporalPrecision;
16
+ } | TemporalInstant;
17
+ export declare const normalizeTemporalInputValue: (value: string) => string;
18
+ export declare const classifyTemporal: (value: string) => TemporalValue;
19
+ export declare const getTemporalInputStep: (...values: (string | undefined)[]) => "any" | 1 | undefined;
20
+ export declare const splitTemporalMinutes: (value: string, offset?: string) => {
21
+ date?: string;
22
+ time: string;
23
+ droppedPrecision: boolean;
24
+ } | undefined;
25
+ export declare const mergeTemporalMinutes: (date: string, time: string) => string;
26
+ export declare const formatTemporalInstant: (instant: TemporalInstant, offset?: string, precision?: TemporalPrecision) => string;
27
+ export declare const formatTemporalUnixSeconds: (seconds: number, offset?: string) => string | undefined;
28
+ export declare const temporalOffsetLabel: (value: string) => string | undefined;
29
+ export declare const fromOffsetDateTime: (value: string, previousValue?: string) => string;
30
+ export declare const toLocalDateTime: (value: string, precision?: TemporalPrecision) => string;
31
+ export declare const toPickerLocalDateTime: (value: string) => string;
32
+ export declare const fromLocalDateTime: (value: string, previousValue?: string) => string;
33
+ //# sourceMappingURL=temporal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal.d.ts","sourceRoot":"","sources":["../src/temporal.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,iBAAiB,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/C;IACE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,iBAAiB,CAAC;CAC9B,GACD,eAAe,CAAC;AAUpB,eAAO,MAAM,2BAA2B,GAAI,OAAO,MAAM,KAAG,MAS3D,CAAC;AASF,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,KAAG,aA8BhD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,GAAG,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,KAChC,KAAK,GAAG,CAAC,GAAG,SAYd,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,SAAS,MAAM,KACd;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,GAAG,SAiB/D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,MAOjE,CAAC;AAWF,eAAO,MAAM,qBAAqB,GAChC,SAAS,eAAe,EACxB,eAAuB,EACvB,6BAA6B,KAC5B,MAUF,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,eAAY,KACX,MAAM,GAAG,SAaX,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,SAI5D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,MAAM,EACb,gBAAgB,MAAM,KACrB,MAcF,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,OAAO,MAAM,EACb,YAAY,iBAAiB,KAC5B,MAQF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,KAAG,MAUrD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,MAAM,EACb,gBAAgB,MAAM,KACrB,MAsCF,CAAC"}
@@ -0,0 +1,152 @@
1
+ //#region src/temporal.ts
2
+ const DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
3
+ const TIME_PATTERN = /^([01]\d|2[0-3]):([0-5]\d)(?::([0-5]\d)(?:\.(\d{1,9}))?)?$/;
4
+ const DATETIME_PATTERN = /^(\d{4}-\d{2}-\d{2})T([01]\d|2[0-3]):([0-5]\d)(?::([0-5]\d)(?:\.(\d+))?)?(Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)?$/;
5
+ const INPUT_PATTERN = /^((?:\d{4}-\d{2}-\d{2}T)?(?:[01]\d|2[0-3]):[0-5]\d)(?::([0-5]\d)(?:\.(\d{1,9}))?)?$/;
6
+ const normalizeTemporalInputValue = (value) => {
7
+ const match = INPUT_PATTERN.exec(value);
8
+ if (!match || match[2] === void 0) return value;
9
+ const digits = match[3]?.slice(0, 3) ?? "";
10
+ let end = digits.length;
11
+ while (end > 0 && digits[end - 1] === "0") end--;
12
+ const fraction = digits.slice(0, end);
13
+ if (match[2] === "00" && !fraction) return match[1];
14
+ return `${match[1]}:${match[2]}${fraction ? `.${fraction}` : ""}`;
15
+ };
16
+ const isCalendarDate = (value) => {
17
+ const date = /* @__PURE__ */ new Date(`${value}T00:00:00Z`);
18
+ return Number.isFinite(date.getTime()) && date.toISOString().slice(0, 10) === value;
19
+ };
20
+ const classifyTemporal = (value) => {
21
+ if (DATE_PATTERN.test(value) && isCalendarDate(value)) return {
22
+ kind: "date",
23
+ value
24
+ };
25
+ const time = TIME_PATTERN.exec(value);
26
+ if (time) return {
27
+ kind: "time",
28
+ value,
29
+ precision: time[4]?.length ?? (time[3] === void 0 ? "minutes" : "seconds")
30
+ };
31
+ const datetime = DATETIME_PATTERN.exec(value);
32
+ if (!datetime || !isCalendarDate(datetime[1])) return {
33
+ kind: "unparseable",
34
+ value
35
+ };
36
+ const precision = datetime[5]?.length ?? (datetime[4] === void 0 ? "minutes" : "seconds");
37
+ const offset = datetime[6];
38
+ if (offset === void 0) return {
39
+ kind: "floating",
40
+ value,
41
+ precision
42
+ };
43
+ return {
44
+ kind: "instant",
45
+ epochMs: Date.parse(value),
46
+ offset,
47
+ precision,
48
+ ...datetime[5] && datetime[5].length > 3 ? { subMillisecondDigits: datetime[5].slice(3) } : {}
49
+ };
50
+ };
51
+ const getTemporalInputStep = (...values) => {
52
+ let step;
53
+ for (const value of values) {
54
+ const temporal = classifyTemporal(value ?? "");
55
+ const precision = "precision" in temporal ? temporal.precision : INPUT_PATTERN.exec(value ?? "")?.[3]?.length;
56
+ if (typeof precision === "number") return "any";
57
+ if (precision === "seconds") step = 1;
58
+ }
59
+ return step;
60
+ };
61
+ const splitTemporalMinutes = (value, offset) => {
62
+ const temporal = classifyTemporal(value);
63
+ if (temporal.kind === "date" || temporal.kind === "unparseable") return void 0;
64
+ const wallTime = temporal.kind === "instant" ? formatTemporalInstant(temporal, offset).slice(0, -(offset ?? temporal.offset).length) : temporal.value;
65
+ const end = temporal.kind === "time" ? 5 : 16;
66
+ return {
67
+ ...temporal.kind === "time" ? {} : { date: wallTime.slice(0, 10) },
68
+ time: wallTime.slice(end - 5, end),
69
+ droppedPrecision: /[1-9]/.test(wallTime.slice(end))
70
+ };
71
+ };
72
+ const mergeTemporalMinutes = (date, time) => {
73
+ if (classifyTemporal(date).kind !== "date" || classifyTemporal(time).kind !== "time") return "";
74
+ return `${date}T${time.slice(0, 5)}`;
75
+ };
76
+ const pad = (value, digits = 2) => String(value).padStart(digits, "0");
77
+ const offsetMinutes = (offset) => offset === "Z" ? 0 : (offset.startsWith("-") ? -1 : 1) * (Number(offset.slice(1, 3)) * 60 + Number(offset.slice(4, 6)));
78
+ const formatTemporalInstant = (instant, offset = instant.offset, precision = instant.precision) => {
79
+ const date = new Date(instant.epochMs + offsetMinutes(offset) * 6e4);
80
+ const iso = date.toISOString();
81
+ return `${precision === "minutes" ? iso.slice(0, 16) : precision === "seconds" ? iso.slice(0, 19) : `${iso.slice(0, 19)}.${(pad(date.getUTCMilliseconds(), 3) + (instant.subMillisecondDigits ?? "")).padEnd(precision, "0").slice(0, precision)}`}${offset}`;
82
+ };
83
+ const formatTemporalUnixSeconds = (seconds, offset = "Z") => {
84
+ if (!Number.isInteger(seconds)) return void 0;
85
+ try {
86
+ const value = formatTemporalInstant({
87
+ kind: "instant",
88
+ epochMs: seconds * 1e3,
89
+ offset,
90
+ precision: "seconds"
91
+ });
92
+ return classifyTemporal(value).kind === "instant" ? value : void 0;
93
+ } catch {
94
+ return;
95
+ }
96
+ };
97
+ const temporalOffsetLabel = (value) => {
98
+ const temporal = classifyTemporal(value);
99
+ if (temporal.kind !== "instant") return void 0;
100
+ return temporal.offset === "Z" ? "UTC" : `UTC${temporal.offset}`;
101
+ };
102
+ const fromOffsetDateTime = (value, previousValue) => {
103
+ if (value === "") return "";
104
+ if (classifyTemporal(value).kind !== "floating") return value;
105
+ const previous = classifyTemporal(previousValue ?? "");
106
+ if (previous.kind !== "instant") return value;
107
+ const epochMs = Date.parse(`${value}${previous.offset}`);
108
+ const minuteRemainder = previous.precision === "minutes" ? 0 : (previous.epochMs % 6e4 + 6e4) % 6e4;
109
+ return formatTemporalInstant({
110
+ ...previous,
111
+ epochMs: epochMs + minuteRemainder
112
+ });
113
+ };
114
+ const toLocalDateTime = (value, precision) => {
115
+ const temporal = classifyTemporal(value);
116
+ if (temporal.kind !== "instant") return value;
117
+ const date = new Date(temporal.epochMs);
118
+ const wallTime = `${pad(date.getFullYear(), 4)}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`;
119
+ return (precision ?? temporal.precision) === "minutes" ? wallTime : `${wallTime}:${pad(date.getSeconds())}${typeof precision === "number" ? formatTemporalInstant(temporal, "Z", precision).slice(19, -1) : ""}`;
120
+ };
121
+ const toPickerLocalDateTime = (value) => {
122
+ const temporal = classifyTemporal(value);
123
+ if (temporal.kind !== "instant") return normalizeTemporalInputValue(value);
124
+ const local = toLocalDateTime(value, typeof temporal.precision === "number" ? 3 : temporal.precision);
125
+ return typeof temporal.precision !== "number" || local.endsWith(".000") ? normalizeTemporalInputValue(local) : local;
126
+ };
127
+ const fromLocalDateTime = (value, previousValue) => {
128
+ const temporal = classifyTemporal(value);
129
+ const previous = classifyTemporal(previousValue ?? "");
130
+ if (temporal.kind !== "floating" || previous.kind === "floating") return value;
131
+ const date = new Date(value.replace(/\.(\d{1,2})$/, (_, digits) => `.${digits.padEnd(3, "0")}`));
132
+ const minutes = -date.getTimezoneOffset();
133
+ const offset = `${minutes < 0 ? "-" : "+"}${pad(Math.floor(Math.abs(minutes) / 60))}:${pad(Math.abs(minutes) % 60)}`;
134
+ if (previous.kind !== "instant") return formatTemporalInstant({
135
+ kind: "instant",
136
+ epochMs: date.getTime(),
137
+ offset,
138
+ precision: "seconds"
139
+ });
140
+ return formatTemporalInstant({
141
+ ...previous,
142
+ epochMs: date.getTime(),
143
+ ...date.getMilliseconds() === new Date(previous.epochMs).getUTCMilliseconds() ? {} : typeof temporal.precision === "number" ? {
144
+ precision: Math.max(temporal.precision, typeof previous.precision === "number" ? previous.precision : 0),
145
+ subMillisecondDigits: value.slice(value.indexOf(".") + 4)
146
+ } : { subMillisecondDigits: "" }
147
+ });
148
+ };
149
+ //#endregion
150
+ export { classifyTemporal, formatTemporalInstant, formatTemporalUnixSeconds, fromLocalDateTime, fromOffsetDateTime, getTemporalInputStep, mergeTemporalMinutes, normalizeTemporalInputValue, splitTemporalMinutes, temporalOffsetLabel, toLocalDateTime, toPickerLocalDateTime };
151
+
152
+ //# sourceMappingURL=temporal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal.js","names":[],"sources":["../src/temporal.ts"],"sourcesContent":["export type TemporalPrecision = \"minutes\" | \"seconds\" | number;\n\nexport type TemporalInstant = {\n kind: \"instant\";\n epochMs: number;\n offset: string;\n precision: TemporalPrecision;\n subMillisecondDigits?: string;\n};\n\nexport type TemporalValue =\n | { kind: \"date\" | \"unparseable\"; value: string }\n | {\n kind: \"time\" | \"floating\";\n value: string;\n precision: TemporalPrecision;\n }\n | TemporalInstant;\n\nconst DATE_PATTERN = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst TIME_PATTERN =\n /^([01]\\d|2[0-3]):([0-5]\\d)(?::([0-5]\\d)(?:\\.(\\d{1,9}))?)?$/;\nconst DATETIME_PATTERN =\n /^(\\d{4}-\\d{2}-\\d{2})T([01]\\d|2[0-3]):([0-5]\\d)(?::([0-5]\\d)(?:\\.(\\d+))?)?(Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)?$/;\nconst INPUT_PATTERN =\n /^((?:\\d{4}-\\d{2}-\\d{2}T)?(?:[01]\\d|2[0-3]):[0-5]\\d)(?::([0-5]\\d)(?:\\.(\\d{1,9}))?)?$/;\n\nexport const normalizeTemporalInputValue = (value: string): string => {\n const match = INPUT_PATTERN.exec(value);\n if (!match || match[2] === undefined) return value;\n const digits = match[3]?.slice(0, 3) ?? \"\";\n let end = digits.length;\n while (end > 0 && digits[end - 1] === \"0\") end--;\n const fraction = digits.slice(0, end);\n if (match[2] === \"00\" && !fraction) return match[1]!;\n return `${match[1]}:${match[2]}${fraction ? `.${fraction}` : \"\"}`;\n};\n\nconst isCalendarDate = (value: string): boolean => {\n const date = new Date(`${value}T00:00:00Z`);\n return (\n Number.isFinite(date.getTime()) && date.toISOString().slice(0, 10) === value\n );\n};\n\nexport const classifyTemporal = (value: string): TemporalValue => {\n if (DATE_PATTERN.test(value) && isCalendarDate(value)) {\n return { kind: \"date\", value };\n }\n const time = TIME_PATTERN.exec(value);\n if (time) {\n return {\n kind: \"time\",\n value,\n precision:\n time[4]?.length ?? (time[3] === undefined ? \"minutes\" : \"seconds\"),\n };\n }\n const datetime = DATETIME_PATTERN.exec(value);\n if (!datetime || !isCalendarDate(datetime[1]!)) {\n return { kind: \"unparseable\", value };\n }\n const precision =\n datetime[5]?.length ?? (datetime[4] === undefined ? \"minutes\" : \"seconds\");\n const offset = datetime[6];\n if (offset === undefined) return { kind: \"floating\", value, precision };\n return {\n kind: \"instant\",\n epochMs: Date.parse(value),\n offset,\n precision,\n ...(datetime[5] && datetime[5].length > 3\n ? { subMillisecondDigits: datetime[5].slice(3) }\n : {}),\n };\n};\n\nexport const getTemporalInputStep = (\n ...values: (string | undefined)[]\n): \"any\" | 1 | undefined => {\n let step: 1 | undefined;\n for (const value of values) {\n const temporal = classifyTemporal(value ?? \"\");\n const precision =\n \"precision\" in temporal\n ? temporal.precision\n : INPUT_PATTERN.exec(value ?? \"\")?.[3]?.length;\n if (typeof precision === \"number\") return \"any\";\n if (precision === \"seconds\") step = 1;\n }\n return step;\n};\n\nexport const splitTemporalMinutes = (\n value: string,\n offset?: string,\n): { date?: string; time: string; droppedPrecision: boolean } | undefined => {\n const temporal = classifyTemporal(value);\n if (temporal.kind === \"date\" || temporal.kind === \"unparseable\")\n return undefined;\n const wallTime =\n temporal.kind === \"instant\"\n ? formatTemporalInstant(temporal, offset).slice(\n 0,\n -(offset ?? temporal.offset).length,\n )\n : temporal.value;\n const end = temporal.kind === \"time\" ? 5 : 16;\n return {\n ...(temporal.kind === \"time\" ? {} : { date: wallTime.slice(0, 10) }),\n time: wallTime.slice(end - 5, end),\n droppedPrecision: /[1-9]/.test(wallTime.slice(end)),\n };\n};\n\nexport const mergeTemporalMinutes = (date: string, time: string): string => {\n if (\n classifyTemporal(date).kind !== \"date\" ||\n classifyTemporal(time).kind !== \"time\"\n )\n return \"\";\n return `${date}T${time.slice(0, 5)}`;\n};\n\nconst pad = (value: number, digits = 2): string =>\n String(value).padStart(digits, \"0\");\n\nconst offsetMinutes = (offset: string): number =>\n offset === \"Z\"\n ? 0\n : (offset.startsWith(\"-\") ? -1 : 1) *\n (Number(offset.slice(1, 3)) * 60 + Number(offset.slice(4, 6)));\n\nexport const formatTemporalInstant = (\n instant: TemporalInstant,\n offset = instant.offset,\n precision = instant.precision,\n): string => {\n const date = new Date(instant.epochMs + offsetMinutes(offset) * 60_000);\n const iso = date.toISOString();\n const wallTime =\n precision === \"minutes\"\n ? iso.slice(0, 16)\n : precision === \"seconds\"\n ? iso.slice(0, 19)\n : `${iso.slice(0, 19)}.${(pad(date.getUTCMilliseconds(), 3) + (instant.subMillisecondDigits ?? \"\")).padEnd(precision, \"0\").slice(0, precision)}`;\n return `${wallTime}${offset}`;\n};\n\nexport const formatTemporalUnixSeconds = (\n seconds: number,\n offset = \"Z\",\n): string | undefined => {\n if (!Number.isInteger(seconds)) return undefined;\n try {\n const value = formatTemporalInstant({\n kind: \"instant\",\n epochMs: seconds * 1000,\n offset,\n precision: \"seconds\",\n });\n return classifyTemporal(value).kind === \"instant\" ? value : undefined;\n } catch {\n return undefined;\n }\n};\n\nexport const temporalOffsetLabel = (value: string): string | undefined => {\n const temporal = classifyTemporal(value);\n if (temporal.kind !== \"instant\") return undefined;\n return temporal.offset === \"Z\" ? \"UTC\" : `UTC${temporal.offset}`;\n};\n\nexport const fromOffsetDateTime = (\n value: string,\n previousValue?: string,\n): string => {\n if (value === \"\") return \"\";\n if (classifyTemporal(value).kind !== \"floating\") return value;\n const previous = classifyTemporal(previousValue ?? \"\");\n if (previous.kind !== \"instant\") return value;\n const epochMs = Date.parse(`${value}${previous.offset}`);\n const minuteRemainder =\n previous.precision === \"minutes\"\n ? 0\n : ((previous.epochMs % 60_000) + 60_000) % 60_000;\n return formatTemporalInstant({\n ...previous,\n epochMs: epochMs + minuteRemainder,\n });\n};\n\nexport const toLocalDateTime = (\n value: string,\n precision?: TemporalPrecision,\n): string => {\n const temporal = classifyTemporal(value);\n if (temporal.kind !== \"instant\") return value;\n const date = new Date(temporal.epochMs);\n const wallTime = `${pad(date.getFullYear(), 4)}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`;\n return (precision ?? temporal.precision) === \"minutes\"\n ? wallTime\n : `${wallTime}:${pad(date.getSeconds())}${typeof precision === \"number\" ? formatTemporalInstant(temporal, \"Z\", precision).slice(19, -1) : \"\"}`;\n};\n\nexport const toPickerLocalDateTime = (value: string): string => {\n const temporal = classifyTemporal(value);\n if (temporal.kind !== \"instant\") return normalizeTemporalInputValue(value);\n const local = toLocalDateTime(\n value,\n typeof temporal.precision === \"number\" ? 3 : temporal.precision,\n );\n return typeof temporal.precision !== \"number\" || local.endsWith(\".000\")\n ? normalizeTemporalInputValue(local)\n : local;\n};\n\nexport const fromLocalDateTime = (\n value: string,\n previousValue?: string,\n): string => {\n const temporal = classifyTemporal(value);\n const previous = classifyTemporal(previousValue ?? \"\");\n if (temporal.kind !== \"floating\" || previous.kind === \"floating\") {\n return value;\n }\n const date = new Date(\n value.replace(\n /\\.(\\d{1,2})$/,\n (_, digits: string) => `.${digits.padEnd(3, \"0\")}`,\n ),\n );\n const minutes = -date.getTimezoneOffset();\n const offset = `${minutes < 0 ? \"-\" : \"+\"}${pad(Math.floor(Math.abs(minutes) / 60))}:${pad(Math.abs(minutes) % 60)}`;\n if (previous.kind !== \"instant\") {\n return formatTemporalInstant({\n kind: \"instant\",\n epochMs: date.getTime(),\n offset,\n precision: \"seconds\",\n });\n }\n return formatTemporalInstant({\n ...previous,\n epochMs: date.getTime(),\n ...(date.getMilliseconds() ===\n new Date(previous.epochMs).getUTCMilliseconds()\n ? {}\n : typeof temporal.precision === \"number\"\n ? {\n precision: Math.max(\n temporal.precision,\n typeof previous.precision === \"number\" ? previous.precision : 0,\n ),\n subMillisecondDigits: value.slice(value.indexOf(\".\") + 4),\n }\n : { subMillisecondDigits: \"\" }),\n });\n};\n"],"mappings":"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"}
@@ -1,4 +1,10 @@
1
+ import * as React from "react";
1
2
  import { z } from "zod";
3
+ type CarouselRenderProps = {
4
+ label?: string;
5
+ children?: React.ReactNode;
6
+ };
7
+ declare function CarouselRender({ label, children }: CarouselRenderProps): React.JSX.Element;
2
8
  export declare const alertVocabulary: {
3
9
  Alert: {
4
10
  description: string;
@@ -12,14 +18,15 @@ export declare const alertVocabulary: {
12
18
  warning: "warning";
13
19
  }>>;
14
20
  }, z.core.$strip>;
15
- render: ({ title, description, tone, children }: any) => import("react").JSX.Element;
21
+ render: ({ title, description, tone, children }: any) => React.JSX.Element;
16
22
  };
17
23
  Carousel: {
18
24
  description: string;
19
25
  properties: z.ZodObject<{
20
26
  label: z.ZodOptional<z.ZodString>;
21
27
  }, z.core.$strip>;
22
- render: ({ label, children }: any) => import("react").JSX.Element;
28
+ render: typeof CarouselRender;
23
29
  };
24
30
  };
31
+ export {};
25
32
  //# sourceMappingURL=alert.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/vocabulary/alert.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;CAkEG,CAAC"}
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/vocabulary/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,KAAK,mBAAmB,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAQF,iBAAS,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,mBAAmB,qBAyJ/D;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;CA0CG,CAAC"}
@@ -1,10 +1,124 @@
1
1
  import { ALERT_TONES } from "../ir.js";
2
2
  import { toTextContent } from "./toTextContent.js";
3
- import { Children } from "react";
3
+ import * as React from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { z } from "zod";
6
6
  //#region src/vocabulary/alert.tsx
7
7
  const MAX_CARDS = 10;
8
+ function CarouselRender({ label, children }) {
9
+ const carouselId = React.useId();
10
+ const carouselRef = React.useRef(null);
11
+ const [measurement, setMeasurement] = React.useState(void 0);
12
+ const cards = React.Children.toArray(children).slice(0, MAX_CARDS);
13
+ const n = cards.length;
14
+ React.useEffect(() => {
15
+ const carousel = carouselRef.current;
16
+ if (!carousel) return;
17
+ const measure = () => {
18
+ const maxScrollLeft = Math.max(carousel.scrollWidth - carousel.clientWidth, 0);
19
+ const position = Math.abs(carousel.scrollLeft);
20
+ const next = {
21
+ overflows: maxScrollLeft > 0,
22
+ atStart: position <= 1,
23
+ atEnd: position >= maxScrollLeft - 1
24
+ };
25
+ setMeasurement((current) => current?.overflows === next.overflows && current.atStart === next.atStart && current.atEnd === next.atEnd ? current : next);
26
+ };
27
+ measure();
28
+ carousel.addEventListener("scroll", measure, { passive: true });
29
+ window.addEventListener("resize", measure);
30
+ const resizeObserver = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(measure);
31
+ resizeObserver?.observe(carousel);
32
+ carousel.querySelectorAll(":scope > [data-aui=\"carousel-slide\"]").forEach((slide) => resizeObserver?.observe(slide));
33
+ return () => {
34
+ carousel.removeEventListener("scroll", measure);
35
+ window.removeEventListener("resize", measure);
36
+ resizeObserver?.disconnect();
37
+ };
38
+ }, [n]);
39
+ const move = (direction) => {
40
+ const carousel = carouselRef.current;
41
+ if (!carousel) return;
42
+ const rtl = getComputedStyle(carousel).direction === "rtl";
43
+ const startOf = (element) => {
44
+ const rect = element.getBoundingClientRect();
45
+ return rtl ? -rect.right : rect.left;
46
+ };
47
+ const edge = startOf(carousel);
48
+ const starts = Array.from(carousel.querySelectorAll(":scope > [data-aui=\"carousel-slide\"]"), startOf);
49
+ let current = 0;
50
+ starts.forEach((start, index) => {
51
+ if (Math.abs(start - edge) < Math.abs((starts[current] ?? start) - edge)) current = index;
52
+ });
53
+ const origin = starts[current];
54
+ const target = starts[current + (direction === "next" ? 1 : -1)];
55
+ if (origin === void 0 || target === void 0) return;
56
+ carousel.scrollBy({ left: rtl ? origin - target : target - origin });
57
+ };
58
+ return /* @__PURE__ */ jsxs("div", {
59
+ "data-aui": "carousel-frame",
60
+ children: [/* @__PURE__ */ jsx("div", {
61
+ ref: carouselRef,
62
+ id: carouselId,
63
+ "data-aui": "carousel",
64
+ role: label ? "region" : "group",
65
+ "aria-roledescription": "carousel",
66
+ "aria-label": label,
67
+ tabIndex: 0,
68
+ children: cards.map((card, i) => /* @__PURE__ */ jsx("div", {
69
+ "data-aui": "carousel-slide",
70
+ role: "group",
71
+ "aria-roledescription": "slide",
72
+ "aria-label": `${i + 1} of ${n}`,
73
+ children: card
74
+ }, i))
75
+ }), measurement?.overflows ? /* @__PURE__ */ jsxs("div", {
76
+ "data-aui": "carousel-controls",
77
+ children: [/* @__PURE__ */ jsx("button", {
78
+ type: "button",
79
+ "data-aui": "carousel-prev",
80
+ "aria-label": "Previous slide",
81
+ "aria-controls": carouselId,
82
+ disabled: measurement.atStart,
83
+ onClick: () => move("previous"),
84
+ children: /* @__PURE__ */ jsx("svg", {
85
+ "aria-hidden": "true",
86
+ viewBox: "0 0 24 24",
87
+ width: "16",
88
+ height: "16",
89
+ fill: "none",
90
+ stroke: "currentColor",
91
+ strokeWidth: "2",
92
+ strokeLinecap: "round",
93
+ strokeLinejoin: "round",
94
+ children: /* @__PURE__ */ jsx("path", {
95
+ d: "M9 5l7 7-7 7",
96
+ transform: "translate(24 0) scale(-1 1)"
97
+ })
98
+ })
99
+ }), /* @__PURE__ */ jsx("button", {
100
+ type: "button",
101
+ "data-aui": "carousel-next",
102
+ "aria-label": "Next slide",
103
+ "aria-controls": carouselId,
104
+ disabled: measurement.atEnd,
105
+ onClick: () => move("next"),
106
+ children: /* @__PURE__ */ jsx("svg", {
107
+ "aria-hidden": "true",
108
+ viewBox: "0 0 24 24",
109
+ width: "16",
110
+ height: "16",
111
+ fill: "none",
112
+ stroke: "currentColor",
113
+ strokeWidth: "2",
114
+ strokeLinecap: "round",
115
+ strokeLinejoin: "round",
116
+ children: /* @__PURE__ */ jsx("path", { d: "M9 5l7 7-7 7" })
117
+ })
118
+ })]
119
+ }) : null]
120
+ });
121
+ }
8
122
  const alertVocabulary = {
9
123
  Alert: {
10
124
  description: "A highlighted message conveying urgency. `tone` drives the severity.",
@@ -37,24 +151,7 @@ const alertVocabulary = {
37
151
  Carousel: {
38
152
  description: "A horizontally scrollable group of `Card` children (max 10). Set `label` for an accessible name.",
39
153
  properties: z.object({ label: z.string().optional().describe("Accessible label for the carousel.") }),
40
- render: ({ label, children }) => {
41
- const cards = Children.toArray(children).slice(0, MAX_CARDS);
42
- const n = cards.length;
43
- return /* @__PURE__ */ jsx("div", {
44
- "data-aui": "carousel",
45
- role: label ? "region" : "group",
46
- "aria-roledescription": "carousel",
47
- "aria-label": label,
48
- tabIndex: 0,
49
- children: cards.map((card, i) => /* @__PURE__ */ jsx("div", {
50
- "data-aui": "carousel-slide",
51
- role: "group",
52
- "aria-roledescription": "slide",
53
- "aria-label": `${i + 1} of ${n}`,
54
- children: card
55
- }, i))
56
- });
57
- }
154
+ render: CarouselRender
58
155
  }
59
156
  };
60
157
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"alert.js","names":[],"sources":["../../src/vocabulary/alert.tsx"],"sourcesContent":["import { Children } from \"react\";\nimport { z } from \"zod\";\nimport type { GenerativeUILibrary } from \"../types\";\nimport { ALERT_TONES } from \"../ir\";\nimport { toTextContent } from \"./toTextContent\";\n\nconst MAX_CARDS = 10;\n\nexport const alertVocabulary = {\n Alert: {\n description:\n \"A highlighted message conveying urgency. `tone` drives the severity.\",\n properties: z.object({\n title: z.string().optional().describe(\"Alert title.\"),\n description: z\n .string()\n .optional()\n .describe(\"Supporting description text.\"),\n tone: z\n .enum(ALERT_TONES)\n .optional()\n .describe(\"Severity tone; defaults to `info`.\"),\n }),\n render: ({ title, description, tone, children }) => {\n const alertTitle = toTextContent(title);\n const alertDescription = toTextContent(description);\n return (\n <div data-aui=\"alert\" data-aui-tone={tone ?? \"info\"} role=\"alert\">\n {alertTitle ? (\n <header data-aui=\"alert-title\">{alertTitle}</header>\n ) : null}\n {alertDescription ? (\n <p data-aui=\"alert-desc\">{alertDescription}</p>\n ) : null}\n {children}\n </div>\n );\n },\n },\n Carousel: {\n description:\n \"A horizontally scrollable group of `Card` children (max 10). Set `label` for an accessible name.\",\n properties: z.object({\n label: z\n .string()\n .optional()\n .describe(\"Accessible label for the carousel.\"),\n }),\n render: ({ label, children }) => {\n const cards = Children.toArray(children).slice(0, MAX_CARDS);\n const n = cards.length;\n return (\n <div\n data-aui=\"carousel\"\n role={label ? \"region\" : \"group\"}\n aria-roledescription=\"carousel\"\n aria-label={label}\n tabIndex={0}\n >\n {cards.map((card, i) => (\n <div\n key={i}\n data-aui=\"carousel-slide\"\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${i + 1} of ${n}`}\n >\n {card}\n </div>\n ))}\n </div>\n );\n },\n },\n} satisfies GenerativeUILibrary;\n"],"mappings":";;;;;;AAMA,MAAM,YAAY;AAElB,MAAa,kBAAkB;CAC7B,OAAO;EACL,aACE;EACF,YAAY,EAAE,OAAO;GACnB,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,cAAc;GACpD,aAAa,EACV,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,8BAA8B;GAC1C,MAAM,EACH,KAAK,WAAW,CAAC,CACjB,SAAS,CAAC,CACV,SAAS,oCAAoC;EAClD,CAAC;EACD,SAAS,EAAE,OAAO,aAAa,MAAM,eAAe;GAClD,MAAM,aAAa,cAAc,KAAK;GACtC,MAAM,mBAAmB,cAAc,WAAW;GAClD,OACE,qBAAC,OAAD;IAAK,YAAS;IAAQ,iBAAe,QAAQ;IAAQ,MAAK;IAA1D,UAAA;KACG,aACC,oBAAC,UAAD;MAAQ,YAAS;MAAe,UAAA;KAAmB,CAAA,IACjD;KACH,mBACC,oBAAC,KAAD;MAAG,YAAS;MAAc,UAAA;KAAoB,CAAA,IAC5C;KACH;IACE;;EAET;CACF;CACA,UAAU;EACR,aACE;EACF,YAAY,EAAE,OAAO,EACnB,OAAO,EACJ,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,oCAAoC,EAClD,CAAC;EACD,SAAS,EAAE,OAAO,eAAe;GAC/B,MAAM,QAAQ,SAAS,QAAQ,QAAQ,CAAC,CAAC,MAAM,GAAG,SAAS;GAC3D,MAAM,IAAI,MAAM;GAChB,OACE,oBAAC,OAAD;IACE,YAAS;IACT,MAAM,QAAQ,WAAW;IACzB,wBAAqB;IACrB,cAAY;IACZ,UAAU;IAET,UAAA,MAAM,KAAK,MAAM,MAChB,oBAAC,OAAD;KAEE,YAAS;KACT,MAAK;KACL,wBAAqB;KACrB,cAAY,GAAG,IAAI,EAAE,MAAM;KAE1B,UAAA;IACE,GAPE,CAOF,CACN;GACE,CAAA;EAET;CACF;AACF"}
1
+ {"version":3,"file":"alert.js","names":[],"sources":["../../src/vocabulary/alert.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { z } from \"zod\";\nimport type { GenerativeUILibrary } from \"../types\";\nimport { ALERT_TONES } from \"../ir\";\nimport { toTextContent } from \"./toTextContent\";\n\nconst MAX_CARDS = 10;\n\ntype CarouselRenderProps = {\n label?: string;\n children?: React.ReactNode;\n};\n\ntype CarouselMeasurement = {\n overflows: boolean;\n atStart: boolean;\n atEnd: boolean;\n};\n\nfunction CarouselRender({ label, children }: CarouselRenderProps) {\n const carouselId = React.useId();\n const carouselRef = React.useRef<HTMLDivElement>(null);\n const [measurement, setMeasurement] = React.useState<\n CarouselMeasurement | undefined\n >(undefined);\n const cards = React.Children.toArray(children).slice(0, MAX_CARDS);\n const n = cards.length;\n\n React.useEffect(() => {\n const carousel = carouselRef.current;\n if (!carousel) return;\n\n const measure = () => {\n const maxScrollLeft = Math.max(\n carousel.scrollWidth - carousel.clientWidth,\n 0,\n );\n const position = Math.abs(carousel.scrollLeft);\n const next = {\n overflows: maxScrollLeft > 0,\n atStart: position <= 1,\n atEnd: position >= maxScrollLeft - 1,\n };\n setMeasurement((current) =>\n current?.overflows === next.overflows &&\n current.atStart === next.atStart &&\n current.atEnd === next.atEnd\n ? current\n : next,\n );\n };\n\n measure();\n carousel.addEventListener(\"scroll\", measure, { passive: true });\n window.addEventListener(\"resize\", measure);\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? undefined\n : new ResizeObserver(measure);\n resizeObserver?.observe(carousel);\n carousel\n .querySelectorAll(':scope > [data-aui=\"carousel-slide\"]')\n .forEach((slide) => resizeObserver?.observe(slide));\n\n return () => {\n carousel.removeEventListener(\"scroll\", measure);\n window.removeEventListener(\"resize\", measure);\n resizeObserver?.disconnect();\n };\n }, [n]);\n\n const move = (direction: \"previous\" | \"next\") => {\n const carousel = carouselRef.current;\n if (!carousel) return;\n\n const rtl = getComputedStyle(carousel).direction === \"rtl\";\n const startOf = (element: Element) => {\n const rect = element.getBoundingClientRect();\n return rtl ? -rect.right : rect.left;\n };\n const edge = startOf(carousel);\n const starts = Array.from(\n carousel.querySelectorAll(':scope > [data-aui=\"carousel-slide\"]'),\n startOf,\n );\n let current = 0;\n starts.forEach((start, index) => {\n if (\n Math.abs(start - edge) < Math.abs((starts[current] ?? start) - edge)\n ) {\n current = index;\n }\n });\n const origin = starts[current];\n const target = starts[current + (direction === \"next\" ? 1 : -1)];\n if (origin === undefined || target === undefined) return;\n carousel.scrollBy({ left: rtl ? origin - target : target - origin });\n };\n\n return (\n <div data-aui=\"carousel-frame\">\n <div\n ref={carouselRef}\n id={carouselId}\n data-aui=\"carousel\"\n role={label ? \"region\" : \"group\"}\n aria-roledescription=\"carousel\"\n aria-label={label}\n tabIndex={0}\n >\n {cards.map((card, i) => (\n <div\n key={i}\n data-aui=\"carousel-slide\"\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${i + 1} of ${n}`}\n >\n {card}\n </div>\n ))}\n </div>\n {measurement?.overflows ? (\n <div data-aui=\"carousel-controls\">\n <button\n type=\"button\"\n data-aui=\"carousel-prev\"\n aria-label=\"Previous slide\"\n aria-controls={carouselId}\n disabled={measurement.atStart}\n onClick={() => move(\"previous\")}\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 5l7 7-7 7\" transform=\"translate(24 0) scale(-1 1)\" />\n </svg>\n </button>\n <button\n type=\"button\"\n data-aui=\"carousel-next\"\n aria-label=\"Next slide\"\n aria-controls={carouselId}\n disabled={measurement.atEnd}\n onClick={() => move(\"next\")}\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n ) : null}\n </div>\n );\n}\n\nexport const alertVocabulary = {\n Alert: {\n description:\n \"A highlighted message conveying urgency. `tone` drives the severity.\",\n properties: z.object({\n title: z.string().optional().describe(\"Alert title.\"),\n description: z\n .string()\n .optional()\n .describe(\"Supporting description text.\"),\n tone: z\n .enum(ALERT_TONES)\n .optional()\n .describe(\"Severity tone; defaults to `info`.\"),\n }),\n render: ({ title, description, tone, children }) => {\n const alertTitle = toTextContent(title);\n const alertDescription = toTextContent(description);\n return (\n <div data-aui=\"alert\" data-aui-tone={tone ?? \"info\"} role=\"alert\">\n {alertTitle ? (\n <header data-aui=\"alert-title\">{alertTitle}</header>\n ) : null}\n {alertDescription ? (\n <p data-aui=\"alert-desc\">{alertDescription}</p>\n ) : null}\n {children}\n </div>\n );\n },\n },\n Carousel: {\n description:\n \"A horizontally scrollable group of `Card` children (max 10). Set `label` for an accessible name.\",\n properties: z.object({\n label: z\n .string()\n .optional()\n .describe(\"Accessible label for the carousel.\"),\n }),\n render: CarouselRender,\n },\n} satisfies GenerativeUILibrary;\n"],"mappings":"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"}
@@ -9,10 +9,11 @@ export type FormControlElementLike = {
9
9
  readonly checked?: boolean;
10
10
  readonly disabled: boolean;
11
11
  readonly hasAttribute: (name: string) => boolean;
12
+ readonly getAttribute?: ((name: string) => string | null) | undefined;
12
13
  readonly matches?: ((selector: string) => boolean) | undefined;
13
14
  };
14
15
  /**
15
- * Collects a submitted form's named control values into a plain object, keyed by `name`, in document order. Reads each control's live DOM state rather than `FormData`, so a checkbox resolves to its `checked` boolean instead of an on/off string. A radio group resolves to its checked option's `value`, or `undefined` if none is checked. Any other repeated `name` resolves to an array of its controls' values, in document order. Controls without a `name`, that carry `data-aui-generated-name`, or that are effectively disabled, including through an ancestor disabled fieldset outside its first legend, are skipped entirely.
16
+ * Collects a submitted form's named control values into a plain object, keyed by `name`, in document order. Reads each control's live DOM state rather than `FormData`, so a checkbox resolves to its `checked` boolean instead of an on/off string. A radio group resolves to its checked option's `value`, or `undefined` if none is checked. A checkbox group resolves to its checked options' values in document order, or an empty array if none is checked. Any other repeated `name` resolves to an array of its controls' values, in document order. A time or datetime-local control's `data-aui-field-value` preserves the canonical string when its local projection is unchanged; an edited instant retains its original offset and precision. Controls without a `name`, that carry `data-aui-generated-name`, or that are effectively disabled, including through an ancestor disabled fieldset outside its first legend, are skipped entirely.
16
17
  */
17
18
  export declare function collectFormValues(elements: ArrayLike<FormControlElementLike>): Record<string, unknown>;
18
19
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"collectFormValues.d.ts","sourceRoot":"","sources":["../../src/vocabulary/collectFormValues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAChE,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,SAAS,CAAC,sBAAsB,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiCzB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB"}
1
+ {"version":3,"file":"collectFormValues.d.ts","sourceRoot":"","sources":["../../src/vocabulary/collectFormValues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAavC;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAChE,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,SAAS,CAAC,sBAAsB,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuEzB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB"}
@@ -1,19 +1,30 @@
1
- import "../constants.js";
1
+ import { FIELD_VALUE_ATTR } from "../constants.js";
2
+ import { fromLocalDateTime, normalizeTemporalInputValue, toPickerLocalDateTime } from "../temporal.js";
2
3
  //#region src/vocabulary/collectFormValues.ts
3
4
  /**
4
- * Collects a submitted form's named control values into a plain object, keyed by `name`, in document order. Reads each control's live DOM state rather than `FormData`, so a checkbox resolves to its `checked` boolean instead of an on/off string. A radio group resolves to its checked option's `value`, or `undefined` if none is checked. Any other repeated `name` resolves to an array of its controls' values, in document order. Controls without a `name`, that carry `data-aui-generated-name`, or that are effectively disabled, including through an ancestor disabled fieldset outside its first legend, are skipped entirely.
5
+ * Collects a submitted form's named control values into a plain object, keyed by `name`, in document order. Reads each control's live DOM state rather than `FormData`, so a checkbox resolves to its `checked` boolean instead of an on/off string. A radio group resolves to its checked option's `value`, or `undefined` if none is checked. A checkbox group resolves to its checked options' values in document order, or an empty array if none is checked. Any other repeated `name` resolves to an array of its controls' values, in document order. A time or datetime-local control's `data-aui-field-value` preserves the canonical string when its local projection is unchanged; an edited instant retains its original offset and precision. Controls without a `name`, that carry `data-aui-generated-name`, or that are effectively disabled, including through an ancestor disabled fieldset outside its first legend, are skipped entirely.
5
6
  */
6
7
  function collectFormValues(elements) {
7
8
  const values = Object.create(null);
8
9
  for (const element of Array.from(elements)) {
9
- const { name, disabled } = element;
10
+ const { disabled } = element;
11
+ const name = element.getAttribute?.("data-aui-field-name") ?? element.name;
10
12
  if (!name || disabled || element.hasAttribute("data-aui-generated-name") || element.matches?.(":disabled")) continue;
11
13
  if (element.type === "radio") {
12
14
  if (element.checked) values[name] = element.value;
13
15
  else if (!Object.hasOwn(values, name)) values[name] = void 0;
14
16
  continue;
15
17
  }
16
- const value = element.type === "checkbox" ? element.checked ?? false : element.value;
18
+ if (element.type === "checkbox" && element.hasAttribute("data-aui-checkbox-group")) {
19
+ const existing = values[name];
20
+ const checked = Array.isArray(existing) ? existing : [];
21
+ values[name] = element.checked ? [...checked, element.value] : checked;
22
+ continue;
23
+ }
24
+ const temporalType = element.type === "datetime-local" || element.type === "time" ? element.type : element.getAttribute?.("type");
25
+ const inputValue = temporalType === "datetime-local" || temporalType === "time" ? normalizeTemporalInputValue(element.value) : element.value;
26
+ const fieldValue = temporalType === "datetime-local" || temporalType === "time" ? element.getAttribute?.(FIELD_VALUE_ATTR) : void 0;
27
+ const value = element.type === "checkbox" ? element.checked ?? false : element.type === "range" ? Number(element.value) : fieldValue && inputValue !== "" ? normalizeTemporalInputValue(inputValue) === normalizeTemporalInputValue(temporalType === "time" ? fieldValue : toPickerLocalDateTime(fieldValue)) ? fieldValue : temporalType === "datetime-local" ? fromLocalDateTime(inputValue, fieldValue) : inputValue : inputValue;
17
28
  if (Object.hasOwn(values, name)) {
18
29
  const existing = values[name];
19
30
  values[name] = Array.isArray(existing) ? [...existing, value] : [existing, value];