@osdk/react-components 0.12.0 → 0.13.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 (328) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +11 -0
  3. package/build/browser/action-form/ActionForm.js +19 -11
  4. package/build/browser/action-form/ActionForm.js.map +1 -1
  5. package/build/browser/action-form/ActionFormApi.js.map +1 -1
  6. package/build/browser/action-form/BaseForm.js +19 -13
  7. package/build/browser/action-form/BaseForm.js.map +1 -1
  8. package/build/browser/action-form/BaseForm.module.css +7 -7
  9. package/build/browser/action-form/FormField.js +5 -2
  10. package/build/browser/action-form/FormField.js.map +1 -1
  11. package/build/browser/action-form/FormField.module.css +6 -1
  12. package/build/browser/action-form/FormField.module.css.js +1 -0
  13. package/build/browser/action-form/FormFieldApi.js +7 -1
  14. package/build/browser/action-form/FormFieldApi.js.map +1 -1
  15. package/build/browser/action-form/FormHeader.module.css +2 -2
  16. package/build/browser/action-form/fields/DateCalendar.js +41 -3
  17. package/build/browser/action-form/fields/DateCalendar.js.map +1 -1
  18. package/build/browser/action-form/fields/DateCalendar.module.css +59 -10
  19. package/build/browser/action-form/fields/DateCalendar.module.css.js +5 -1
  20. package/build/browser/action-form/fields/DateRangeCalendar.js +8 -5
  21. package/build/browser/action-form/fields/DateRangeCalendar.js.map +1 -1
  22. package/build/browser/action-form/fields/DateRangeInputField.js +76 -61
  23. package/build/browser/action-form/fields/DateRangeInputField.js.map +1 -1
  24. package/build/browser/action-form/fields/DateRangeInputField.module.css +0 -15
  25. package/build/browser/action-form/fields/DateRangeInputField.module.css.js +1 -2
  26. package/build/browser/action-form/fields/DatetimePickerField.js +74 -40
  27. package/build/browser/action-form/fields/DatetimePickerField.js.map +1 -1
  28. package/build/browser/action-form/fields/DatetimePickerField.module.css +2 -9
  29. package/build/browser/action-form/fields/FieldBridge.js +1 -1
  30. package/build/browser/action-form/fields/FieldBridge.js.map +1 -1
  31. package/build/browser/action-form/fields/FilePickerField.js +47 -39
  32. package/build/browser/action-form/fields/FilePickerField.js.map +1 -1
  33. package/build/browser/action-form/fields/FilePickerField.module.css +43 -31
  34. package/build/browser/action-form/fields/FilePickerField.module.css.js +2 -2
  35. package/build/browser/action-form/fields/FormFieldRenderer.js +9 -0
  36. package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
  37. package/build/browser/action-form/fields/RadioButtonsField.module.css +3 -3
  38. package/build/browser/action-form/fields/SwitchField.js +34 -0
  39. package/build/browser/action-form/fields/SwitchField.js.map +1 -0
  40. package/build/browser/action-form/fields/TimePicker.js +165 -26
  41. package/build/browser/action-form/fields/TimePicker.js.map +1 -1
  42. package/build/browser/action-form/fields/TimePicker.module.css +27 -2
  43. package/build/browser/action-form/fields/TimePicker.module.css.js +3 -1
  44. package/build/browser/action-form/fields/calendarShared.js +5 -0
  45. package/build/browser/action-form/fields/calendarShared.js.map +1 -1
  46. package/build/browser/action-form/fields/useDateEditState.js +3 -4
  47. package/build/browser/action-form/fields/useDateEditState.js.map +1 -1
  48. package/build/browser/base-components/action-button/ActionButton.js +2 -1
  49. package/build/browser/base-components/action-button/ActionButton.js.map +1 -1
  50. package/build/browser/base-components/action-button/ActionButton.module.css +19 -0
  51. package/build/browser/base-components/action-button/ActionButton.module.css.js +2 -1
  52. package/build/browser/base-components/combobox/Combobox.module.css +31 -3
  53. package/build/browser/base-components/select/Select.module.css +18 -0
  54. package/build/browser/base-components/switch/Switch.module.css +18 -6
  55. package/build/browser/filter-list/base/inputs/ListogramInput.js +34 -6
  56. package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
  57. package/build/browser/filter-list/base/inputs/ListogramInput.module.css +11 -5
  58. package/build/browser/filter-list/base/inputs/ListogramInput.module.css.js +1 -1
  59. package/build/browser/filter-list/base/inputs/MultiSelectInput.js +20 -12
  60. package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  61. package/build/browser/filter-list/base/inputs/NoValueLabel.js +36 -0
  62. package/build/browser/filter-list/base/inputs/NoValueLabel.js.map +1 -0
  63. package/build/browser/filter-list/base/inputs/NoValueLabel.module.css +20 -0
  64. package/build/browser/filter-list/base/inputs/NoValueLabel.module.css.js +6 -0
  65. package/build/browser/filter-list/base/inputs/NullValueWrapper.js +4 -3
  66. package/build/browser/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
  67. package/build/browser/filter-list/base/inputs/NullValueWrapper.module.css +10 -7
  68. package/build/browser/filter-list/base/inputs/NullValueWrapper.module.css.js +1 -1
  69. package/build/browser/filter-list/base/inputs/SingleSelectInput.js +13 -8
  70. package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  71. package/build/browser/filter-list/base/inputs/TextTagsInput.js +6 -2
  72. package/build/browser/filter-list/base/inputs/TextTagsInput.js.map +1 -1
  73. package/build/browser/filter-list/hooks/useFilterListState.js +7 -6
  74. package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
  75. package/build/browser/filter-list/hooks/useStableMapEntries.js +35 -0
  76. package/build/browser/filter-list/hooks/useStableMapEntries.js.map +1 -0
  77. package/build/browser/filter-list/utils/filterValues.js +13 -0
  78. package/build/browser/filter-list/utils/filterValues.js.map +1 -1
  79. package/build/browser/object-table/DefaultCellRenderer.js +12 -2
  80. package/build/browser/object-table/DefaultCellRenderer.js.map +1 -1
  81. package/build/browser/object-table/EditableCell.js +14 -4
  82. package/build/browser/object-table/EditableCell.js.map +1 -1
  83. package/build/browser/object-table/EditableCell.module.css +4 -0
  84. package/build/browser/object-table/EditableCell.module.css.js +1 -0
  85. package/build/browser/object-table/ObjectTable.js +3 -1
  86. package/build/browser/object-table/ObjectTable.js.map +1 -1
  87. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  88. package/build/browser/object-table/Table.js +8 -4
  89. package/build/browser/object-table/Table.js.map +1 -1
  90. package/build/browser/object-table/TableBody.js +4 -2
  91. package/build/browser/object-table/TableBody.js.map +1 -1
  92. package/build/browser/object-table/TableRow.js +12 -4
  93. package/build/browser/object-table/TableRow.js.map +1 -1
  94. package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
  95. package/build/browser/object-table/utils/editableUtils.js +39 -0
  96. package/build/browser/object-table/utils/editableUtils.js.map +1 -0
  97. package/build/browser/object-table/utils/shouldShowEditableCell.js +1 -1
  98. package/build/browser/object-table/utils/shouldShowEditableCell.js.map +1 -1
  99. package/build/browser/object-table/utils/types.js.map +1 -1
  100. package/build/browser/styles.css +331 -130
  101. package/build/browser/tokens/component-tokens/button.css +15 -0
  102. package/build/browser/tokens/component-tokens/combobox.css +9 -0
  103. package/build/browser/tokens/component-tokens/datetime-picker.css +2 -2
  104. package/build/browser/tokens/component-tokens/file-picker.css +0 -10
  105. package/build/browser/tokens/component-tokens/filter-list.css +9 -6
  106. package/build/browser/tokens/component-tokens/form-section.css +1 -1
  107. package/build/browser/tokens/component-tokens/form.css +9 -5
  108. package/build/browser/tokens/component-tokens/table.css +3 -5
  109. package/build/browser/tokens.css +1 -0
  110. package/build/browser/util/UserAgent.js +1 -1
  111. package/build/cjs/{DateCalendar-2W4QHEEI.css → DateCalendar-G7RC2FCG.css} +105 -8
  112. package/build/cjs/DateCalendar-G7RC2FCG.css.map +1 -0
  113. package/build/cjs/DateCalendar-RX7HP2XP.cjs +26 -0
  114. package/build/cjs/{DateCalendar-QGSYBWJB.cjs.map → DateCalendar-RX7HP2XP.cjs.map} +1 -1
  115. package/build/cjs/{DateRangeCalendar-M63S2LLG.css → DateRangeCalendar-JBVYJDBJ.css} +105 -8
  116. package/build/cjs/DateRangeCalendar-JBVYJDBJ.css.map +1 -0
  117. package/build/cjs/DateRangeCalendar-OHT4IUWQ.cjs +54 -0
  118. package/build/cjs/DateRangeCalendar-OHT4IUWQ.cjs.map +1 -0
  119. package/build/cjs/{chunk-T7I6O43T.cjs → chunk-6SPXSFPI.cjs} +237 -85
  120. package/build/cjs/chunk-6SPXSFPI.cjs.map +1 -0
  121. package/build/cjs/{chunk-SZXVBDSA.cjs → chunk-6UDBHYSO.cjs} +3 -3
  122. package/build/cjs/{chunk-SZXVBDSA.cjs.map → chunk-6UDBHYSO.cjs.map} +1 -1
  123. package/build/cjs/{chunk-YBDS5WQP.cjs → chunk-7H6WXQ35.cjs} +4 -4
  124. package/build/cjs/{chunk-YBDS5WQP.cjs.map → chunk-7H6WXQ35.cjs.map} +1 -1
  125. package/build/cjs/{chunk-VVJFMOZI.cjs → chunk-I3OSD6CF.cjs} +19 -45
  126. package/build/cjs/chunk-I3OSD6CF.cjs.map +1 -0
  127. package/build/cjs/chunk-MD4KDE44.cjs +41 -0
  128. package/build/cjs/chunk-MD4KDE44.cjs.map +1 -0
  129. package/build/cjs/{chunk-YPXTSEE7.cjs → chunk-MLFMSZJQ.cjs} +85 -38
  130. package/build/cjs/chunk-MLFMSZJQ.cjs.map +1 -0
  131. package/build/cjs/chunk-MQYOHGPY.cjs +52 -0
  132. package/build/cjs/chunk-MQYOHGPY.cjs.map +1 -0
  133. package/build/cjs/{chunk-BJDCC446.cjs → chunk-PTTCWNZZ.cjs} +417 -364
  134. package/build/cjs/chunk-PTTCWNZZ.cjs.map +1 -0
  135. package/build/cjs/{chunk-B2GRQRWU.cjs → chunk-TOJSJN3L.cjs} +44 -8
  136. package/build/cjs/chunk-TOJSJN3L.cjs.map +1 -0
  137. package/build/cjs/{chunk-JLESWL47.cjs → chunk-V7XWTJV7.cjs} +4 -2
  138. package/build/cjs/chunk-V7XWTJV7.cjs.map +1 -0
  139. package/build/cjs/{chunk-L5LPFCXT.cjs → chunk-W2IASYE4.cjs} +163 -125
  140. package/build/cjs/chunk-W2IASYE4.cjs.map +1 -0
  141. package/build/cjs/chunk-X337DNCW.cjs +45 -0
  142. package/build/cjs/chunk-X337DNCW.cjs.map +1 -0
  143. package/build/cjs/{chunk-SB2VTP67.cjs → chunk-Z7VHLTKD.cjs} +2 -64
  144. package/build/cjs/chunk-Z7VHLTKD.cjs.map +1 -0
  145. package/build/cjs/public/experimental/action-form.cjs +11 -9
  146. package/build/cjs/public/experimental/action-form.css +223 -68
  147. package/build/cjs/public/experimental/action-form.css.map +1 -1
  148. package/build/cjs/public/experimental/action-form.d.cts +83 -74
  149. package/build/cjs/public/experimental/filter-list.cjs +9 -8
  150. package/build/cjs/public/experimental/filter-list.css +38 -19
  151. package/build/cjs/public/experimental/filter-list.css.map +1 -1
  152. package/build/cjs/public/experimental/object-table.cjs +14 -12
  153. package/build/cjs/public/experimental/object-table.css +152 -59
  154. package/build/cjs/public/experimental/object-table.css.map +1 -1
  155. package/build/cjs/public/experimental/object-table.d.cts +39 -20
  156. package/build/cjs/public/experimental/pdf-viewer.cjs +24 -24
  157. package/build/cjs/public/experimental.cjs +46 -44
  158. package/build/cjs/public/experimental.css +242 -139
  159. package/build/cjs/public/experimental.css.map +1 -1
  160. package/build/cjs/public/primitives.cjs +8 -7
  161. package/build/cjs/public/primitives.css +15 -0
  162. package/build/cjs/public/primitives.css.map +1 -1
  163. package/build/cjs/public/primitives.d.cts +1 -0
  164. package/build/esm/action-form/ActionForm.js +19 -11
  165. package/build/esm/action-form/ActionForm.js.map +1 -1
  166. package/build/esm/action-form/ActionFormApi.js.map +1 -1
  167. package/build/esm/action-form/BaseForm.js +19 -13
  168. package/build/esm/action-form/BaseForm.js.map +1 -1
  169. package/build/esm/action-form/BaseForm.module.css +7 -7
  170. package/build/esm/action-form/FormField.js +5 -2
  171. package/build/esm/action-form/FormField.js.map +1 -1
  172. package/build/esm/action-form/FormField.module.css +6 -1
  173. package/build/esm/action-form/FormFieldApi.js +7 -1
  174. package/build/esm/action-form/FormFieldApi.js.map +1 -1
  175. package/build/esm/action-form/FormHeader.module.css +2 -2
  176. package/build/esm/action-form/fields/DateCalendar.js +41 -3
  177. package/build/esm/action-form/fields/DateCalendar.js.map +1 -1
  178. package/build/esm/action-form/fields/DateCalendar.module.css +59 -10
  179. package/build/esm/action-form/fields/DateRangeCalendar.js +8 -5
  180. package/build/esm/action-form/fields/DateRangeCalendar.js.map +1 -1
  181. package/build/esm/action-form/fields/DateRangeInputField.js +76 -61
  182. package/build/esm/action-form/fields/DateRangeInputField.js.map +1 -1
  183. package/build/esm/action-form/fields/DateRangeInputField.module.css +0 -15
  184. package/build/esm/action-form/fields/DatetimePickerField.js +74 -40
  185. package/build/esm/action-form/fields/DatetimePickerField.js.map +1 -1
  186. package/build/esm/action-form/fields/DatetimePickerField.module.css +2 -9
  187. package/build/esm/action-form/fields/FieldBridge.js +1 -1
  188. package/build/esm/action-form/fields/FieldBridge.js.map +1 -1
  189. package/build/esm/action-form/fields/FilePickerField.js +47 -39
  190. package/build/esm/action-form/fields/FilePickerField.js.map +1 -1
  191. package/build/esm/action-form/fields/FilePickerField.module.css +43 -31
  192. package/build/esm/action-form/fields/FormFieldRenderer.js +9 -0
  193. package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
  194. package/build/esm/action-form/fields/RadioButtonsField.module.css +3 -3
  195. package/build/esm/action-form/fields/SwitchField.js +34 -0
  196. package/build/esm/action-form/fields/SwitchField.js.map +1 -0
  197. package/build/esm/action-form/fields/TimePicker.js +165 -26
  198. package/build/esm/action-form/fields/TimePicker.js.map +1 -1
  199. package/build/esm/action-form/fields/TimePicker.module.css +27 -2
  200. package/build/esm/action-form/fields/calendarShared.js +5 -0
  201. package/build/esm/action-form/fields/calendarShared.js.map +1 -1
  202. package/build/esm/action-form/fields/useDateEditState.js +3 -4
  203. package/build/esm/action-form/fields/useDateEditState.js.map +1 -1
  204. package/build/esm/base-components/action-button/ActionButton.js +2 -1
  205. package/build/esm/base-components/action-button/ActionButton.js.map +1 -1
  206. package/build/esm/base-components/action-button/ActionButton.module.css +19 -0
  207. package/build/esm/base-components/combobox/Combobox.module.css +31 -3
  208. package/build/esm/base-components/select/Select.module.css +18 -0
  209. package/build/esm/base-components/switch/Switch.module.css +18 -6
  210. package/build/esm/filter-list/base/inputs/ListogramInput.js +34 -6
  211. package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
  212. package/build/esm/filter-list/base/inputs/ListogramInput.module.css +11 -5
  213. package/build/esm/filter-list/base/inputs/MultiSelectInput.js +20 -12
  214. package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  215. package/build/esm/filter-list/base/inputs/NoValueLabel.js +36 -0
  216. package/build/esm/filter-list/base/inputs/NoValueLabel.js.map +1 -0
  217. package/build/esm/filter-list/base/inputs/NoValueLabel.module.css +20 -0
  218. package/build/esm/filter-list/base/inputs/NullValueWrapper.js +4 -3
  219. package/build/esm/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
  220. package/build/esm/filter-list/base/inputs/NullValueWrapper.module.css +10 -7
  221. package/build/esm/filter-list/base/inputs/SingleSelectInput.js +13 -8
  222. package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  223. package/build/esm/filter-list/base/inputs/TextTagsInput.js +6 -2
  224. package/build/esm/filter-list/base/inputs/TextTagsInput.js.map +1 -1
  225. package/build/esm/filter-list/hooks/useFilterListState.js +7 -6
  226. package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
  227. package/build/esm/filter-list/hooks/useStableMapEntries.js +35 -0
  228. package/build/esm/filter-list/hooks/useStableMapEntries.js.map +1 -0
  229. package/build/esm/filter-list/utils/filterValues.js +13 -0
  230. package/build/esm/filter-list/utils/filterValues.js.map +1 -1
  231. package/build/esm/object-table/DefaultCellRenderer.js +12 -2
  232. package/build/esm/object-table/DefaultCellRenderer.js.map +1 -1
  233. package/build/esm/object-table/EditableCell.js +14 -4
  234. package/build/esm/object-table/EditableCell.js.map +1 -1
  235. package/build/esm/object-table/EditableCell.module.css +4 -0
  236. package/build/esm/object-table/ObjectTable.js +3 -1
  237. package/build/esm/object-table/ObjectTable.js.map +1 -1
  238. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  239. package/build/esm/object-table/Table.js +8 -4
  240. package/build/esm/object-table/Table.js.map +1 -1
  241. package/build/esm/object-table/TableBody.js +4 -2
  242. package/build/esm/object-table/TableBody.js.map +1 -1
  243. package/build/esm/object-table/TableRow.js +12 -4
  244. package/build/esm/object-table/TableRow.js.map +1 -1
  245. package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
  246. package/build/esm/object-table/utils/editableUtils.js +39 -0
  247. package/build/esm/object-table/utils/editableUtils.js.map +1 -0
  248. package/build/esm/object-table/utils/shouldShowEditableCell.js +1 -1
  249. package/build/esm/object-table/utils/shouldShowEditableCell.js.map +1 -1
  250. package/build/esm/object-table/utils/types.js.map +1 -1
  251. package/build/esm/tokens/component-tokens/button.css +15 -0
  252. package/build/esm/tokens/component-tokens/combobox.css +9 -0
  253. package/build/esm/tokens/component-tokens/datetime-picker.css +2 -2
  254. package/build/esm/tokens/component-tokens/file-picker.css +0 -10
  255. package/build/esm/tokens/component-tokens/filter-list.css +9 -6
  256. package/build/esm/tokens/component-tokens/form-section.css +1 -1
  257. package/build/esm/tokens/component-tokens/form.css +9 -5
  258. package/build/esm/tokens/component-tokens/table.css +3 -5
  259. package/build/esm/tokens.css +1 -0
  260. package/build/esm/util/UserAgent.js +1 -1
  261. package/build/types/action-form/ActionFormApi.d.ts +8 -8
  262. package/build/types/action-form/ActionFormApi.d.ts.map +1 -1
  263. package/build/types/action-form/BaseForm.d.ts.map +1 -1
  264. package/build/types/action-form/FormFieldApi.d.ts +29 -22
  265. package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
  266. package/build/types/action-form/fields/DateCalendar.d.ts +6 -1
  267. package/build/types/action-form/fields/DateCalendar.d.ts.map +1 -1
  268. package/build/types/action-form/fields/DateRangeCalendar.d.ts.map +1 -1
  269. package/build/types/action-form/fields/DateRangeInputField.d.ts.map +1 -1
  270. package/build/types/action-form/fields/DatetimePickerField.d.ts.map +1 -1
  271. package/build/types/action-form/fields/FieldBridge.d.ts.map +1 -1
  272. package/build/types/action-form/fields/FilePickerField.d.ts.map +1 -1
  273. package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
  274. package/build/types/action-form/fields/SwitchField.d.ts +7 -0
  275. package/build/types/action-form/fields/SwitchField.d.ts.map +1 -0
  276. package/build/types/action-form/fields/TimePicker.d.ts +4 -5
  277. package/build/types/action-form/fields/TimePicker.d.ts.map +1 -1
  278. package/build/types/action-form/fields/useDateEditState.d.ts +2 -2
  279. package/build/types/base-components/action-button/ActionButton.d.ts +1 -0
  280. package/build/types/base-components/action-button/ActionButton.d.ts.map +1 -1
  281. package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -1
  282. package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -1
  283. package/build/types/filter-list/base/inputs/NoValueLabel.d.ts +15 -0
  284. package/build/types/filter-list/base/inputs/NoValueLabel.d.ts.map +1 -0
  285. package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts.map +1 -1
  286. package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts.map +1 -1
  287. package/build/types/filter-list/base/inputs/TextTagsInput.d.ts.map +1 -1
  288. package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
  289. package/build/types/filter-list/hooks/useStableMapEntries.d.ts +9 -0
  290. package/build/types/filter-list/hooks/useStableMapEntries.d.ts.map +1 -0
  291. package/build/types/filter-list/utils/filterValues.d.ts +7 -0
  292. package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
  293. package/build/types/object-table/DefaultCellRenderer.d.ts.map +1 -1
  294. package/build/types/object-table/EditableCell.d.ts +1 -1
  295. package/build/types/object-table/EditableCell.d.ts.map +1 -1
  296. package/build/types/object-table/ObjectTableApi.d.ts +26 -7
  297. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  298. package/build/types/object-table/Table.d.ts +9 -2
  299. package/build/types/object-table/Table.d.ts.map +1 -1
  300. package/build/types/object-table/TableBody.d.ts +2 -1
  301. package/build/types/object-table/TableBody.d.ts.map +1 -1
  302. package/build/types/object-table/TableRow.d.ts +2 -1
  303. package/build/types/object-table/TableRow.d.ts.map +1 -1
  304. package/build/types/object-table/utils/editableUtils.d.ts +16 -0
  305. package/build/types/object-table/utils/editableUtils.d.ts.map +1 -0
  306. package/build/types/object-table/utils/shouldShowEditableCell.d.ts +2 -1
  307. package/build/types/object-table/utils/shouldShowEditableCell.d.ts.map +1 -1
  308. package/build/types/object-table/utils/types.d.ts +4 -11
  309. package/build/types/object-table/utils/types.d.ts.map +1 -1
  310. package/docs/ActionForm.md +176 -0
  311. package/docs/CSSVariables.md +31 -30
  312. package/docs/ObjectTable.md +141 -16
  313. package/package.json +6 -5
  314. package/build/cjs/DateCalendar-2W4QHEEI.css.map +0 -1
  315. package/build/cjs/DateCalendar-QGSYBWJB.cjs +0 -24
  316. package/build/cjs/DateRangeCalendar-JHO2BF3Z.cjs +0 -48
  317. package/build/cjs/DateRangeCalendar-JHO2BF3Z.cjs.map +0 -1
  318. package/build/cjs/DateRangeCalendar-M63S2LLG.css.map +0 -1
  319. package/build/cjs/chunk-B2GRQRWU.cjs.map +0 -1
  320. package/build/cjs/chunk-BJDCC446.cjs.map +0 -1
  321. package/build/cjs/chunk-JLESWL47.cjs.map +0 -1
  322. package/build/cjs/chunk-L5LPFCXT.cjs.map +0 -1
  323. package/build/cjs/chunk-SB2VTP67.cjs.map +0 -1
  324. package/build/cjs/chunk-T7I6O43T.cjs.map +0 -1
  325. package/build/cjs/chunk-UCTQICPR.cjs +0 -10
  326. package/build/cjs/chunk-UCTQICPR.cjs.map +0 -1
  327. package/build/cjs/chunk-VVJFMOZI.cjs.map +0 -1
  328. package/build/cjs/chunk-YPXTSEE7.cjs.map +0 -1
@@ -1,14 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var chunkUCTQICPR_cjs = require('./chunk-UCTQICPR.cjs');
4
- var chunkT7I6O43T_cjs = require('./chunk-T7I6O43T.cjs');
5
- var chunkJLESWL47_cjs = require('./chunk-JLESWL47.cjs');
6
- var chunkVVJFMOZI_cjs = require('./chunk-VVJFMOZI.cjs');
7
- var chunkSB2VTP67_cjs = require('./chunk-SB2VTP67.cjs');
3
+ var chunkX337DNCW_cjs = require('./chunk-X337DNCW.cjs');
4
+ var chunk6SPXSFPI_cjs = require('./chunk-6SPXSFPI.cjs');
5
+ var chunkV7XWTJV7_cjs = require('./chunk-V7XWTJV7.cjs');
6
+ var chunkI3OSD6CF_cjs = require('./chunk-I3OSD6CF.cjs');
7
+ var chunkMD4KDE44_cjs = require('./chunk-MD4KDE44.cjs');
8
+ var chunkMQYOHGPY_cjs = require('./chunk-MQYOHGPY.cjs');
8
9
  var chunk7LXS66DW_cjs = require('./chunk-7LXS66DW.cjs');
9
- var chunkSZXVBDSA_cjs = require('./chunk-SZXVBDSA.cjs');
10
+ var chunk6UDBHYSO_cjs = require('./chunk-6UDBHYSO.cjs');
10
11
  var react = require('@osdk/react');
11
- var React19 = require('react');
12
+ var React20 = require('react');
12
13
  var icons = require('@blueprintjs/icons');
13
14
  var classnames = require('classnames');
14
15
  var reactHookForm = require('react-hook-form');
@@ -40,12 +41,12 @@ function _interopNamespace(e) {
40
41
  return Object.freeze(n);
41
42
  }
42
43
 
43
- var React19__namespace = /*#__PURE__*/_interopNamespace(React19);
44
+ var React20__namespace = /*#__PURE__*/_interopNamespace(React20);
44
45
  var classnames__default = /*#__PURE__*/_interopDefault(classnames);
45
46
 
46
47
  function useIsMounted() {
47
- const isMountedRef = React19.useRef(true);
48
- React19.useEffect(function trackMountedState() {
48
+ const isMountedRef = React20.useRef(true);
49
+ React20.useEffect(function trackMountedState() {
49
50
  return () => {
50
51
  isMountedRef.current = false;
51
52
  };
@@ -55,10 +56,10 @@ function useIsMounted() {
55
56
 
56
57
  // src/shared/hooks/useAsyncAction.ts
57
58
  function useAsyncAction(action) {
58
- const [isPending, setIsPending] = React19.useState(false);
59
- const [error, setError] = React19.useState(void 0);
59
+ const [isPending, setIsPending] = React20.useState(false);
60
+ const [error, setError] = React20.useState(void 0);
60
61
  const isMountedRef = useIsMounted();
61
- const execute = React19.useCallback(async (...args) => {
62
+ const execute = React20.useCallback(async (...args) => {
62
63
  setError(void 0);
63
64
  setIsPending(true);
64
65
  try {
@@ -73,7 +74,7 @@ function useAsyncAction(action) {
73
74
  }
74
75
  }
75
76
  }, [action, isMountedRef]);
76
- const clearError = React19.useCallback(() => {
77
+ const clearError = React20.useCallback(() => {
77
78
  setError(void 0);
78
79
  }, []);
79
80
  return {
@@ -247,7 +248,7 @@ function formatBytes(bytes) {
247
248
  var FormField_default = {};
248
249
 
249
250
  // src/action-form/FormField.tsx
250
- var FormField = /* @__PURE__ */ React19.memo(function FormFieldFn({
251
+ var FormField = /* @__PURE__ */ React20.memo(function FormFieldFn({
251
252
  fieldKey,
252
253
  label,
253
254
  isRequired,
@@ -260,65 +261,68 @@ var FormField = /* @__PURE__ */ React19.memo(function FormFieldFn({
260
261
  const hasHelperText = helperText != null && helperText !== "";
261
262
  const showTooltip = hasHelperText && helperTextPlacement === "tooltip";
262
263
  const showBottomText = hasHelperText && helperTextPlacement === "bottom";
263
- const labelElement = label != null ? /* @__PURE__ */ React19__namespace.default.createElement("label", {
264
+ const labelElement = label != null ? /* @__PURE__ */ React20__namespace.default.createElement("label", {
264
265
  className: FormField_default.osdkFormFieldLabel,
265
266
  htmlFor: fieldKey
266
- }, label, isRequired === true && /* @__PURE__ */ React19__namespace.default.createElement("span", {
267
+ }, label, isRequired === true && /* @__PURE__ */ React20__namespace.default.createElement("span", {
267
268
  className: FormField_default.osdkFormFieldRequired,
268
269
  "aria-label": "required"
269
270
  }, " ", "*")) : null;
270
- return /* @__PURE__ */ React19__namespace.default.createElement("div", {
271
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", {
271
272
  className: FormField_default.osdkFormField,
272
273
  onBlur
273
- }, showTooltip ? /* @__PURE__ */ React19__namespace.default.createElement("div", {
274
+ }, showTooltip ? /* @__PURE__ */ React20__namespace.default.createElement("div", {
274
275
  className: FormField_default.osdkFormFieldLabelRow
275
- }, labelElement, /* @__PURE__ */ React19__namespace.default.createElement(InfoTip, {
276
+ }, labelElement, /* @__PURE__ */ React20__namespace.default.createElement(InfoTip, {
276
277
  label
277
- }, helperText)) : labelElement, showBottomText && /* @__PURE__ */ React19__namespace.default.createElement("div", {
278
+ }, helperText)) : labelElement, showBottomText && /* @__PURE__ */ React20__namespace.default.createElement("div", {
278
279
  className: FormField_default.osdkFormFieldHelperText
279
- }, helperText), children, error != null && /* @__PURE__ */ React19__namespace.default.createElement("div", {
280
+ }, helperText), children, /* @__PURE__ */ React20__namespace.default.createElement("div", {
281
+ className: FormField_default.osdkFormFieldErrorSlot,
282
+ "data-osdk-form-field-error-slot": ""
283
+ }, error != null && /* @__PURE__ */ React20__namespace.default.createElement("div", {
280
284
  className: FormField_default.osdkFormFieldError,
281
285
  role: "alert"
282
- }, error));
286
+ }, error)));
283
287
  });
284
288
  function InfoTip({
285
289
  label,
286
290
  children
287
291
  }) {
288
- return /* @__PURE__ */ React19__namespace.default.createElement(popover.Popover.Root, null, /* @__PURE__ */ React19__namespace.default.createElement(popover.Popover.Trigger, {
289
- render: /* @__PURE__ */ React19__namespace.default.createElement("span", {
292
+ return /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Root, null, /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Trigger, {
293
+ render: /* @__PURE__ */ React20__namespace.default.createElement("span", {
290
294
  className: FormField_default.osdkFormFieldInfoIcon
291
295
  }),
292
296
  nativeButton: false,
293
297
  openOnHover: true,
294
298
  "aria-label": label != null ? `Info about ${label}` : "More information"
295
- }, /* @__PURE__ */ React19__namespace.default.createElement(icons.InfoSign, {
299
+ }, /* @__PURE__ */ React20__namespace.default.createElement(icons.InfoSign, {
296
300
  size: 12
297
- })), /* @__PURE__ */ React19__namespace.default.createElement(popover.Popover.Portal, null, /* @__PURE__ */ React19__namespace.default.createElement(popover.Popover.Positioner, {
301
+ })), /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Portal, null, /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Positioner, {
298
302
  sideOffset: 4
299
- }, /* @__PURE__ */ React19__namespace.default.createElement(popover.Popover.Popup, {
303
+ }, /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Popup, {
300
304
  className: FormField_default.osdkFormFieldInfoPopup
301
305
  }, children))));
302
306
  }
303
307
 
304
308
  // src/action-form/FormFieldApi.ts
305
309
  var EMPTY_RANGE = [null, null];
306
- var CustomField = /* @__PURE__ */ React19.memo(function CustomFieldFn({
310
+ var CustomField = /* @__PURE__ */ React20.memo(function CustomFieldFn({
307
311
  customRenderer: CustomRenderer,
308
312
  ...baseProps
309
313
  }) {
310
- return /* @__PURE__ */ React19__namespace.default.createElement(CustomRenderer, baseProps);
314
+ return /* @__PURE__ */ React20__namespace.default.createElement(CustomRenderer, baseProps);
311
315
  });
312
316
 
313
317
  // src/action-form/fields/DateRangeInputField.module.css
314
318
  var DateRangeInputField_default = {};
315
- var DateRangeCalendarLazy = /* @__PURE__ */ React19__namespace.default.lazy(() => import('./DateRangeCalendar-JHO2BF3Z.cjs'));
319
+ var DateRangeCalendarLazy = /* @__PURE__ */ React20__namespace.default.lazy(() => import('./DateRangeCalendar-OHT4IUWQ.cjs'));
316
320
  function LazyDateRangeCalendar(props) {
317
- return /* @__PURE__ */ React19__namespace.default.createElement(React19.Suspense, {
318
- fallback: /* @__PURE__ */ React19__namespace.default.createElement("div", {
319
- className: chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerFallback
321
+ return /* @__PURE__ */ React20__namespace.default.createElement(React20.Suspense, {
322
+ fallback: /* @__PURE__ */ React20__namespace.default.createElement("div", {
323
+ className: chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerFallback
320
324
  })
321
- }, /* @__PURE__ */ React19__namespace.default.createElement(DateRangeCalendarLazy, props));
325
+ }, /* @__PURE__ */ React20__namespace.default.createElement(DateRangeCalendarLazy, props));
322
326
  }
323
327
 
324
328
  // src/action-form/fields/DateRangeInputField.tsx
@@ -332,14 +336,14 @@ function _extends() {
332
336
  }, _extends.apply(null, arguments);
333
337
  }
334
338
  var SHARED_INPUT_PROPS = {
335
- className: chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerInput,
339
+ className: chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerInput,
336
340
  type: "text",
337
- onClick: chunkJLESWL47_cjs.stopPropagation,
341
+ onClick: chunkV7XWTJV7_cjs.stopPropagation,
338
342
  autoComplete: "off",
339
343
  role: "combobox",
340
344
  "aria-haspopup": "dialog"
341
345
  };
342
- var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(function DateRangeInputField2({
346
+ var DateRangeInputField = /* @__PURE__ */ React20__namespace.default.memo(function DateRangeInputField2({
343
347
  id,
344
348
  value,
345
349
  onChange,
@@ -354,24 +358,25 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
354
358
  portalContainer
355
359
  }) {
356
360
  const shouldCloseOnSelection = !showTime;
357
- const popoverId = React19.useId();
358
- const startInputRef = React19.useRef(null);
359
- const endInputRef = React19.useRef(null);
360
- const popoverRef = React19.useRef(null);
361
- const [isOpen, setIsOpen] = React19.useState(false);
362
- const skipReopenRef = React19.useRef(false);
363
- const [activeBoundary, setActiveBoundary] = React19.useState("start");
361
+ const popoverId = React20.useId();
362
+ const triggerRef = React20.useRef(null);
363
+ const startInputRef = React20.useRef(null);
364
+ const endInputRef = React20.useRef(null);
365
+ const popoverRef = React20.useRef(null);
366
+ const [isOpen, setIsOpen] = React20.useState(false);
367
+ const skipReopenRef = React20.useRef(false);
368
+ const [activeBoundary, setActiveBoundary] = React20.useState("start");
364
369
  const [startDate, endDate] = value ?? EMPTY_RANGE;
365
- const editFormatFn = showTime ? chunkSB2VTP67_cjs.formatDatetimeForInput : chunkSB2VTP67_cjs.formatDateForInput;
366
- const displayFormatFn = formatDate ?? (showTime ? chunkSB2VTP67_cjs.formatDatetimeForInput : chunkSB2VTP67_cjs.formatDateForDisplay);
367
- const parseFn = parseDate ?? (showTime ? chunkSB2VTP67_cjs.parseDatetimeFromInput : chunkSB2VTP67_cjs.parseDateFromInput);
368
- const startOnChange = React19.useCallback((date) => {
370
+ const editFormatFn = showTime ? chunkMQYOHGPY_cjs.formatDatetimeForInput : chunkMQYOHGPY_cjs.formatDateForInput;
371
+ const displayFormatFn = formatDate ?? (showTime ? chunkMQYOHGPY_cjs.formatDatetimeForInput : chunkMQYOHGPY_cjs.formatDateForInput);
372
+ const parseFn = parseDate ?? (showTime ? chunkMQYOHGPY_cjs.parseDatetimeFromInput : chunkMQYOHGPY_cjs.parseDateFromInput);
373
+ const startOnChange = React20.useCallback((date) => {
369
374
  if (date != null && isOverlapping(date, endDate, allowSingleDayRange)) {
370
375
  return;
371
376
  }
372
377
  onChange?.([date, endDate ?? null]);
373
378
  }, [endDate, onChange, allowSingleDayRange]);
374
- const endOnChange = React19.useCallback((date) => {
379
+ const endOnChange = React20.useCallback((date) => {
375
380
  if (date != null && isOverlapping(startDate, date, allowSingleDayRange)) {
376
381
  return;
377
382
  }
@@ -387,7 +392,7 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
387
392
  commitAndStopEditing: commitStartAndStopEditing,
388
393
  setInputValue: setStartInputValue,
389
394
  setDateValue: setStartDateValue
390
- } = chunkT7I6O43T_cjs.useDateEditState({
395
+ } = chunk6SPXSFPI_cjs.useDateEditState({
391
396
  value: startDate,
392
397
  displayFormatFn,
393
398
  editFormatFn,
@@ -406,7 +411,7 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
406
411
  commitAndStopEditing: commitEndAndStopEditing,
407
412
  setInputValue: setEndInputValue,
408
413
  setDateValue: setEndDateValue
409
- } = chunkT7I6O43T_cjs.useDateEditState({
414
+ } = chunk6SPXSFPI_cjs.useDateEditState({
410
415
  value: endDate,
411
416
  displayFormatFn,
412
417
  editFormatFn,
@@ -423,8 +428,8 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
423
428
  })();
424
429
  const startInvalid = startInputError != null || hasOverlapError;
425
430
  const endInvalid = endInputError != null || hasOverlapError;
426
- const getActiveInputRef = React19.useCallback(() => activeBoundary === "start" ? startInputRef : endInputRef, [activeBoundary]);
427
- const beginEditing = React19.useCallback((boundary) => {
431
+ const getActiveInputRef = React20.useCallback(() => activeBoundary === "start" ? startInputRef : endInputRef, [activeBoundary]);
432
+ const beginEditing = React20.useCallback((boundary) => {
428
433
  if (boundary === "start") {
429
434
  beginStartEditing();
430
435
  } else {
@@ -432,7 +437,7 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
432
437
  }
433
438
  setActiveBoundary(boundary);
434
439
  }, [beginStartEditing, beginEndEditing]);
435
- const handleInputFocus = React19.useCallback((boundary) => {
440
+ const handleInputFocus = React20.useCallback((boundary) => {
436
441
  beginEditing(boundary);
437
442
  if (skipReopenRef.current) {
438
443
  skipReopenRef.current = false;
@@ -440,20 +445,28 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
440
445
  }
441
446
  setIsOpen(true);
442
447
  }, [beginEditing]);
443
- const handleStartFocus = React19.useCallback(() => {
448
+ const handleStartFocus = React20.useCallback(() => {
444
449
  handleInputFocus("start");
445
450
  }, [handleInputFocus]);
446
- const handleEndFocus = React19.useCallback(() => {
451
+ const handleEndFocus = React20.useCallback(() => {
447
452
  handleInputFocus("end");
448
453
  }, [handleInputFocus]);
449
- const closePopoverForBoundaryExit = React19.useCallback(() => {
454
+ const closePopoverForBoundaryExit = React20.useCallback(() => {
450
455
  skipReopenRef.current = true;
451
456
  setIsOpen(false);
452
457
  stopStartEditing();
453
458
  stopEndEditing();
454
459
  getActiveInputRef().current?.focus();
455
460
  }, [getActiveInputRef, stopStartEditing, stopEndEditing]);
456
- const handleStartBlur = React19.useCallback((e) => {
461
+ const handleStartPointerDown = React20.useCallback(() => {
462
+ startInputRef.current?.focus();
463
+ handleStartFocus();
464
+ }, [handleStartFocus]);
465
+ const handleEndPointerDown = React20.useCallback(() => {
466
+ endInputRef.current?.focus();
467
+ handleEndFocus();
468
+ }, [handleEndFocus]);
469
+ const handleStartBlur = React20.useCallback((e) => {
457
470
  const related = e.relatedTarget ?? document.activeElement;
458
471
  if (popoverRef.current?.contains(related)) {
459
472
  e.stopPropagation();
@@ -464,7 +477,7 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
464
477
  }
465
478
  commitStartAndStopEditing();
466
479
  }, [commitStartAndStopEditing]);
467
- const handleEndBlur = React19.useCallback((e) => {
480
+ const handleEndBlur = React20.useCallback((e) => {
468
481
  const related = e.relatedTarget ?? document.activeElement;
469
482
  if (popoverRef.current?.contains(related)) {
470
483
  e.stopPropagation();
@@ -475,14 +488,14 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
475
488
  }
476
489
  commitEndAndStopEditing();
477
490
  }, [commitEndAndStopEditing]);
478
- const closePopover = React19.useCallback(() => {
491
+ const closePopover = React20.useCallback(() => {
479
492
  setIsOpen(false);
480
493
  stopStartEditing();
481
494
  stopEndEditing();
482
495
  startInputRef.current?.blur();
483
496
  endInputRef.current?.blur();
484
497
  }, [stopStartEditing, stopEndEditing]);
485
- const handleStartKeyDown = React19.useCallback((e) => {
498
+ const handleStartKeyDown = React20.useCallback((e) => {
486
499
  if (e.key === "Enter") {
487
500
  e.preventDefault();
488
501
  commitStartAndStopEditing();
@@ -494,7 +507,7 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
494
507
  setIsOpen(false);
495
508
  }
496
509
  }, [commitStartAndStopEditing, closePopover]);
497
- const handleEndKeyDown = React19.useCallback((e) => {
510
+ const handleEndKeyDown = React20.useCallback((e) => {
498
511
  if (e.key === "Enter") {
499
512
  e.preventDefault();
500
513
  commitEndAndStopEditing();
@@ -510,14 +523,14 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
510
523
  }
511
524
  }
512
525
  }, [commitEndAndStopEditing, closePopover, isOpen]);
513
- const handleOpenChange = React19.useCallback((nextOpen) => {
526
+ const handleOpenChange = React20.useCallback((nextOpen) => {
514
527
  if (nextOpen) {
515
528
  setIsOpen(true);
516
529
  } else {
517
530
  closePopover();
518
531
  }
519
532
  }, [closePopover]);
520
- const handleRangeSelect = React19.useCallback((range) => {
533
+ const handleRangeSelect = React20.useCallback((range) => {
521
534
  const newStart = range?.from ?? null;
522
535
  const newEnd = range?.to ?? null;
523
536
  onChange?.([newStart, newEnd]);
@@ -532,30 +545,18 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
532
545
  setEndDateValue(newEnd);
533
546
  }
534
547
  }, [onChange, shouldCloseOnSelection, closePopover, stopStartEditing, setStartDateValue, setEndDateValue]);
535
- const handleStartTimeChange = React19.useCallback((timeString) => {
536
- const {
537
- hours,
538
- minutes
539
- } = chunkSB2VTP67_cjs.parseTimeString(timeString);
540
- const base = startDate != null ? new Date(startDate.getTime()) : /* @__PURE__ */ new Date();
541
- base.setHours(hours, minutes, 0, 0);
542
- onChange?.([base, endDate ?? null]);
543
- setStartDateValue(base);
544
- }, [startDate, endDate, onChange, setStartDateValue]);
545
- const handleEndTimeChange = React19.useCallback((timeString) => {
546
- const {
547
- hours,
548
- minutes
549
- } = chunkSB2VTP67_cjs.parseTimeString(timeString);
550
- const base = endDate != null ? new Date(endDate.getTime()) : /* @__PURE__ */ new Date();
551
- base.setHours(hours, minutes, 0, 0);
552
- onChange?.([startDate ?? null, base]);
553
- setEndDateValue(base);
554
- }, [startDate, endDate, onChange, setEndDateValue]);
555
- const handleStartFocusBoundary = React19.useCallback(() => {
548
+ const handleStartTimeChange = React20.useCallback((time) => {
549
+ onChange?.([time, endDate ?? null]);
550
+ setStartDateValue(time);
551
+ }, [endDate, onChange, setStartDateValue]);
552
+ const handleEndTimeChange = React20.useCallback((time) => {
553
+ onChange?.([startDate ?? null, time]);
554
+ setEndDateValue(time);
555
+ }, [startDate, onChange, setEndDateValue]);
556
+ const handleStartFocusBoundary = React20.useCallback(() => {
556
557
  getActiveInputRef().current?.focus();
557
558
  }, [getActiveInputRef]);
558
- const handleEndFocusBoundary = React19.useCallback((e) => {
559
+ const handleEndFocusBoundary = React20.useCallback((e) => {
559
560
  const related = e.relatedTarget ?? document.activeElement;
560
561
  if (popoverRef.current?.contains(related)) {
561
562
  closePopoverForBoundaryExit();
@@ -569,14 +570,12 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
569
570
  from: startDate ?? void 0,
570
571
  to: endDate ?? void 0
571
572
  } : void 0;
572
- const timeFooter = showTime ? /* @__PURE__ */ React19__namespace.default.createElement("div", {
573
- className: DateRangeInputField_default.osdkDateRangeTimeRow
574
- }, /* @__PURE__ */ React19__namespace.default.createElement(chunkT7I6O43T_cjs.TimePicker, {
575
- value: chunkSB2VTP67_cjs.getTimeValue(startDate),
573
+ const timeFooter = showTime ? /* @__PURE__ */ React20__namespace.default.createElement(React20__namespace.default.Fragment, null, /* @__PURE__ */ React20__namespace.default.createElement(chunk6SPXSFPI_cjs.TimePicker, {
574
+ value: startDate,
576
575
  onChange: handleStartTimeChange,
577
576
  label: "Start time"
578
- }), /* @__PURE__ */ React19__namespace.default.createElement(chunkT7I6O43T_cjs.TimePicker, {
579
- value: chunkSB2VTP67_cjs.getTimeValue(endDate),
577
+ }), /* @__PURE__ */ React20__namespace.default.createElement(chunk6SPXSFPI_cjs.TimePicker, {
578
+ value: endDate,
580
579
  onChange: handleEndTimeChange,
581
580
  label: "End time"
582
581
  })) : void 0;
@@ -584,73 +583,81 @@ var DateRangeInputField = /* @__PURE__ */ React19__namespace.default.memo(functi
584
583
  ...SHARED_INPUT_PROPS,
585
584
  "aria-controls": popoverId
586
585
  };
587
- return /* @__PURE__ */ React19__namespace.default.createElement(popover.Popover.Root, {
586
+ return /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Root, {
588
587
  open: isOpen,
589
588
  onOpenChange: handleOpenChange,
590
589
  modal: "trap-focus"
591
- }, /* @__PURE__ */ React19__namespace.default.createElement(popover.Popover.Trigger, {
590
+ }, /* @__PURE__ */ React20__namespace.default.createElement("div", {
591
+ ref: triggerRef,
592
+ className: DateRangeInputField_default.osdkDateRangeContainer
593
+ }, /* @__PURE__ */ React20__namespace.default.createElement("div", {
594
+ className: classnames__default.default(chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerInputWrapper, DateRangeInputField_default.osdkDateRangeInputWrapper, startInvalid && chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerInputWrapperError)
595
+ }, /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Trigger, {
592
596
  nativeButton: false,
593
- render: /* @__PURE__ */ React19__namespace.default.createElement("div", {
594
- className: DateRangeInputField_default.osdkDateRangeContainer
595
- })
596
- }, /* @__PURE__ */ React19__namespace.default.createElement("div", {
597
- className: classnames__default.default(chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerInputWrapper, DateRangeInputField_default.osdkDateRangeInputWrapper, startInvalid && chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerInputWrapperError)
598
- }, /* @__PURE__ */ React19__namespace.default.createElement(input.Input, _extends({
599
- ref: startInputRef,
600
- id: id != null ? `${id}-start` : void 0,
601
- value: displayedStart,
602
- onValueChange: setStartInputValue,
603
- onFocus: handleStartFocus,
604
- onBlur: handleStartBlur,
605
- onKeyDown: handleStartKeyDown,
606
- placeholder: placeholderStart,
607
- "aria-expanded": isOpen && activeBoundary === "start",
608
- "aria-label": "Start date",
609
- "aria-invalid": startInvalid || void 0
610
- }, sharedInputProps))), /* @__PURE__ */ React19__namespace.default.createElement("div", {
611
- className: classnames__default.default(chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerInputWrapper, DateRangeInputField_default.osdkDateRangeInputWrapper, endInvalid && chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerInputWrapperError)
612
- }, /* @__PURE__ */ React19__namespace.default.createElement(input.Input, _extends({
613
- ref: endInputRef,
614
- id: id != null ? `${id}-end` : void 0,
615
- value: displayedEnd,
616
- onValueChange: setEndInputValue,
617
- onFocus: handleEndFocus,
618
- onBlur: handleEndBlur,
619
- onKeyDown: handleEndKeyDown,
620
- placeholder: placeholderEnd,
621
- "aria-expanded": isOpen && activeBoundary === "end",
622
- "aria-label": "End date",
623
- "aria-invalid": endInvalid || void 0
624
- }, sharedInputProps)))), /* @__PURE__ */ React19__namespace.default.createElement(popover.Popover.Portal, {
597
+ render: /* @__PURE__ */ React20__namespace.default.createElement(input.Input, _extends({
598
+ ref: startInputRef,
599
+ id: id != null ? `${id}-start` : void 0,
600
+ value: displayedStart,
601
+ onValueChange: setStartInputValue,
602
+ onFocus: handleStartFocus,
603
+ onPointerDown: handleStartPointerDown,
604
+ onBlur: handleStartBlur,
605
+ onKeyDown: handleStartKeyDown,
606
+ placeholder: placeholderStart,
607
+ "aria-expanded": isOpen && activeBoundary === "start",
608
+ "aria-label": "Start date",
609
+ "aria-invalid": startInvalid || void 0
610
+ }, sharedInputProps))
611
+ })), /* @__PURE__ */ React20__namespace.default.createElement("div", {
612
+ className: classnames__default.default(chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerInputWrapper, DateRangeInputField_default.osdkDateRangeInputWrapper, endInvalid && chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerInputWrapperError)
613
+ }, /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Trigger, {
614
+ nativeButton: false,
615
+ render: /* @__PURE__ */ React20__namespace.default.createElement(input.Input, _extends({
616
+ ref: endInputRef,
617
+ id: id != null ? `${id}-end` : void 0,
618
+ value: displayedEnd,
619
+ onValueChange: setEndInputValue,
620
+ onBlur: handleEndBlur,
621
+ onKeyDown: handleEndKeyDown,
622
+ onFocus: handleEndFocus,
623
+ onPointerDown: handleEndPointerDown,
624
+ placeholder: placeholderEnd,
625
+ "aria-expanded": isOpen && activeBoundary === "end",
626
+ "aria-label": "End date",
627
+ "aria-invalid": endInvalid || void 0
628
+ }, sharedInputProps))
629
+ }))), /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Portal, {
625
630
  container: portalContainer
626
- }, /* @__PURE__ */ React19__namespace.default.createElement(chunkT7I6O43T_cjs.PortalDismissLayer, {
627
- className: chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerDismissLayer,
631
+ }, /* @__PURE__ */ React20__namespace.default.createElement(chunk6SPXSFPI_cjs.PortalDismissLayer, {
632
+ className: chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerDismissLayer,
628
633
  onDismiss: closePopover
629
- }), /* @__PURE__ */ React19__namespace.default.createElement(popover.Popover.Positioner, {
630
- className: chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerPositioner,
634
+ }), /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Positioner, {
635
+ anchor: triggerRef,
636
+ className: chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerPositioner,
631
637
  sideOffset: 4
632
- }, /* @__PURE__ */ React19__namespace.default.createElement(popover.Popover.Popup, {
638
+ }, /* @__PURE__ */ React20__namespace.default.createElement(popover.Popover.Popup, {
633
639
  ref: popoverRef,
634
- className: chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerPopover,
640
+ className: chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerPopover,
635
641
  id: popoverId,
636
642
  role: "dialog",
637
643
  "aria-label": "date range picker",
638
644
  finalFocus: false
639
- }, /* @__PURE__ */ React19__namespace.default.createElement("div", {
645
+ }, /* @__PURE__ */ React20__namespace.default.createElement("div", {
640
646
  onFocus: handleStartFocusBoundary,
641
647
  tabIndex: 0,
642
648
  "aria-label": "Start of date range picker dialog",
643
- className: chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerFocusBoundary
644
- }), /* @__PURE__ */ React19__namespace.default.createElement(LazyDateRangeCalendar, {
649
+ className: chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerFocusBoundary
650
+ }), /* @__PURE__ */ React20__namespace.default.createElement(LazyDateRangeCalendar, {
645
651
  selected: calendarSelected,
646
652
  onSelect: handleRangeSelect,
647
653
  min,
648
- max
649
- }), timeFooter, /* @__PURE__ */ React19__namespace.default.createElement("div", {
654
+ max,
655
+ footer: timeFooter
656
+ }), /* @__PURE__ */ React20__namespace.default.createElement("div", {
650
657
  onFocus: handleEndFocusBoundary,
651
658
  tabIndex: 0,
652
659
  "aria-label": "End of date range picker dialog",
653
- className: chunkT7I6O43T_cjs.DatePickerCommon_default.osdkDatePickerFocusBoundary
660
+ className: chunk6SPXSFPI_cjs.DatePickerCommon_default.osdkDatePickerFocusBoundary
654
661
  })))));
655
662
  });
656
663
  function isOverlapping(start, end, allowSingleDayRange) {
@@ -663,7 +670,7 @@ function isOverlapping(start, end, allowSingleDayRange) {
663
670
  var FilePickerField_default = {};
664
671
 
665
672
  // src/action-form/fields/FilePickerField.tsx
666
- var FilePickerField = /* @__PURE__ */ React19.memo(function FilePickerFieldFn({
673
+ var FilePickerField = /* @__PURE__ */ React20.memo(function FilePickerFieldFn({
667
674
  id,
668
675
  value,
669
676
  onChange,
@@ -677,11 +684,23 @@ var FilePickerField = /* @__PURE__ */ React19.memo(function FilePickerFieldFn({
677
684
  text = "No file chosen",
678
685
  buttonText = "Browse"
679
686
  }) {
680
- const inputRef = React19.useRef(null);
681
- const openFileDialog = React19.useCallback(() => {
687
+ const inputRef = React20.useRef(null);
688
+ const fileTriggerRef = React20.useRef(null);
689
+ const openFileDialog = React20.useCallback(() => {
682
690
  inputRef.current?.click();
683
691
  }, []);
684
- const handleInputChange = React19.useCallback((event) => {
692
+ const focusFileTrigger = React20.useCallback(() => {
693
+ fileTriggerRef.current?.focus();
694
+ }, []);
695
+ const handleBrowsePointerDown = React20.useCallback((event) => {
696
+ event.preventDefault();
697
+ focusFileTrigger();
698
+ }, [focusFileTrigger]);
699
+ const handleBrowseClick = React20.useCallback(() => {
700
+ focusFileTrigger();
701
+ openFileDialog();
702
+ }, [focusFileTrigger, openFileDialog]);
703
+ const handleInputChange = React20.useCallback((event) => {
685
704
  const files = event.target.files;
686
705
  if (files == null || files.length === 0) {
687
706
  onChange?.(null);
@@ -693,58 +712,54 @@ var FilePickerField = /* @__PURE__ */ React19.memo(function FilePickerFieldFn({
693
712
  onChange?.(files[0] ?? null);
694
713
  }
695
714
  }, [onChange, isMulti]);
696
- const handleClear = React19.useCallback((event) => {
697
- event.stopPropagation();
715
+ const handleClear = React20.useCallback((event) => {
698
716
  event.preventDefault();
699
717
  onChange?.(null);
700
718
  if (inputRef.current != null) {
701
719
  inputRef.current.value = "";
702
720
  }
703
721
  }, [onChange]);
704
- const handleKeyDown = React19.useCallback((event) => {
722
+ const handleKeyDown = React20.useCallback((event) => {
705
723
  if (event.key === "Enter" || event.key === " ") {
706
724
  event.preventDefault();
707
725
  openFileDialog();
708
726
  }
709
727
  }, [openFileDialog]);
710
- const displayText = React19.useMemo(() => getDisplayText(value), [value]);
728
+ const displayText = React20.useMemo(() => getDisplayText(value), [value]);
711
729
  const hasValue = displayText != null;
712
- const acceptString = React19.useMemo(() => normalizeAccept(accept), [accept]);
713
- return (
714
- // The entire component is a single tab stop (tabIndex={0}).
715
- // Text and Browse are <span>s (not buttons) so they don't create
716
- // extra tab stops clicks on them bubble up to the container's onClick.
717
- // The clear button is the only inner interactive element and gets its
718
- // own tab stop so keyboard users can clear the selection.
719
- /* @__PURE__ */ React19__namespace.default.createElement("div", {
720
- id,
721
- className: FilePickerField_default.osdkFilePickerTrigger,
722
- tabIndex: 0,
723
- role: "button",
724
- "aria-label": "Choose file",
725
- onClick: openFileDialog,
726
- onKeyDown: handleKeyDown,
727
- "aria-invalid": error != null || void 0
728
- }, /* @__PURE__ */ React19__namespace.default.createElement("input", {
729
- ref: inputRef,
730
- type: "file",
731
- className: FilePickerField_default.osdkFilePickerHiddenInput,
732
- multiple: isMulti,
733
- accept: acceptString,
734
- onChange: handleInputChange,
735
- tabIndex: -1
736
- }), /* @__PURE__ */ React19__namespace.default.createElement("span", {
737
- className: classnames__default.default(FilePickerField_default.osdkFilePickerText, !hasValue && FilePickerField_default.osdkFilePickerPlaceholder)
738
- }, displayText ?? text), hasValue && // stopPropagation + preventDefault prevent the click from
739
- // bubbling to the container's onClick which opens the file dialog.
740
- /* @__PURE__ */ React19__namespace.default.createElement(button.Button, {
741
- className: FilePickerField_default.osdkFilePickerClear,
742
- onClick: handleClear,
743
- "aria-label": "Clear selection"
744
- }, /* @__PURE__ */ React19__namespace.default.createElement(icons.Cross, null)), /* @__PURE__ */ React19__namespace.default.createElement("span", {
745
- className: FilePickerField_default.osdkFilePickerBrowse
746
- }, buttonText))
747
- );
730
+ const acceptString = React20.useMemo(() => normalizeAccept(accept), [accept]);
731
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", {
732
+ className: FilePickerField_default.osdkFilePickerTrigger,
733
+ "aria-invalid": error != null || void 0
734
+ }, /* @__PURE__ */ React20__namespace.default.createElement("input", {
735
+ ref: inputRef,
736
+ type: "file",
737
+ className: FilePickerField_default.osdkFilePickerHiddenInput,
738
+ multiple: isMulti,
739
+ accept: acceptString,
740
+ onChange: handleInputChange,
741
+ tabIndex: -1
742
+ }), /* @__PURE__ */ React20__namespace.default.createElement(button.Button, {
743
+ ref: fileTriggerRef,
744
+ id,
745
+ type: "button",
746
+ className: classnames__default.default(FilePickerField_default.osdkFilePickerText, !hasValue && FilePickerField_default.osdkFilePickerPlaceholder),
747
+ onClick: openFileDialog,
748
+ onKeyDown: handleKeyDown,
749
+ "aria-label": "Choose file",
750
+ "aria-invalid": error != null || void 0
751
+ }, displayText ?? text), hasValue && /* @__PURE__ */ React20__namespace.default.createElement(button.Button, {
752
+ type: "button",
753
+ className: FilePickerField_default.osdkFilePickerClear,
754
+ onClick: handleClear,
755
+ "aria-label": "Clear selection"
756
+ }, /* @__PURE__ */ React20__namespace.default.createElement(icons.Cross, null)), /* @__PURE__ */ React20__namespace.default.createElement(chunkMD4KDE44_cjs.ActionButton, {
757
+ type: "button",
758
+ tabIndex: -1,
759
+ className: FilePickerField_default.osdkFilePickerBrowse,
760
+ onPointerDown: handleBrowsePointerDown,
761
+ onClick: handleBrowseClick
762
+ }, buttonText));
748
763
  });
749
764
  function normalizeAccept(accept) {
750
765
  if (accept == null) {
@@ -779,8 +794,8 @@ function NumberInputField({
779
794
  max,
780
795
  step
781
796
  }) {
782
- const [displayValue, setDisplayValue] = React19.useState(() => formatNumberForDisplay(value));
783
- const prevValueRef = React19.useRef(value);
797
+ const [displayValue, setDisplayValue] = React20.useState(() => formatNumberForDisplay(value));
798
+ const prevValueRef = React20.useRef(value);
784
799
  if (prevValueRef.current !== value) {
785
800
  prevValueRef.current = value;
786
801
  const currentParsed = parseNumericValue(displayValue);
@@ -788,14 +803,14 @@ function NumberInputField({
788
803
  setDisplayValue(formatNumberForDisplay(value));
789
804
  }
790
805
  }
791
- const handleValueChange = React19.useCallback((newValue) => {
806
+ const handleValueChange = React20.useCallback((newValue) => {
792
807
  if (!isValidInput(newValue)) {
793
808
  return;
794
809
  }
795
810
  setDisplayValue(newValue);
796
811
  onChange?.(parseNumericValue(newValue));
797
812
  }, [onChange]);
798
- const applyStep = React19.useCallback((direction) => {
813
+ const applyStep = React20.useCallback((direction) => {
799
814
  const current = parseNumericValue(displayValue) ?? 0;
800
815
  const delta = direction * (step ?? DEFAULT_STEP);
801
816
  const next = clamp(current + delta, min, max);
@@ -803,23 +818,23 @@ function NumberInputField({
803
818
  setDisplayValue(formatted);
804
819
  onChange?.(next);
805
820
  }, [displayValue, onChange, step, min, max]);
806
- const handleKeyDown = React19.useCallback((e) => {
821
+ const handleKeyDown = React20.useCallback((e) => {
807
822
  if (e.key !== "ArrowUp" && e.key !== "ArrowDown") {
808
823
  return;
809
824
  }
810
825
  e.preventDefault();
811
826
  applyStep(e.key === "ArrowUp" ? 1 : -1);
812
827
  }, [applyStep]);
813
- const handleStepUp = React19.useCallback(() => {
828
+ const handleStepUp = React20.useCallback(() => {
814
829
  applyStep(1);
815
830
  }, [applyStep]);
816
- const handleStepDown = React19.useCallback(() => {
831
+ const handleStepDown = React20.useCallback(() => {
817
832
  applyStep(-1);
818
833
  }, [applyStep]);
819
- return /* @__PURE__ */ React19__namespace.default.createElement("div", {
834
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", {
820
835
  className: NumberInputField_default.osdkNumberInputWrapper,
821
836
  "aria-invalid": error != null || void 0
822
- }, /* @__PURE__ */ React19__namespace.default.createElement(input.Input, {
837
+ }, /* @__PURE__ */ React20__namespace.default.createElement(input.Input, {
823
838
  id,
824
839
  className: NumberInputField_default.osdkNumberInputField,
825
840
  type: "text",
@@ -828,21 +843,21 @@ function NumberInputField({
828
843
  onValueChange: handleValueChange,
829
844
  onKeyDown: handleKeyDown,
830
845
  placeholder
831
- }), /* @__PURE__ */ React19__namespace.default.createElement("div", {
846
+ }), /* @__PURE__ */ React20__namespace.default.createElement("div", {
832
847
  className: NumberInputField_default.osdkNumberInputStepper
833
- }, /* @__PURE__ */ React19__namespace.default.createElement(button.Button, {
848
+ }, /* @__PURE__ */ React20__namespace.default.createElement(button.Button, {
834
849
  className: NumberInputField_default.osdkNumberInputStepButton,
835
850
  "aria-label": "Increment",
836
851
  tabIndex: -1,
837
852
  onClick: handleStepUp
838
- }, /* @__PURE__ */ React19__namespace.default.createElement(icons.ChevronUp, {
853
+ }, /* @__PURE__ */ React20__namespace.default.createElement(icons.ChevronUp, {
839
854
  size: CHEVRON_SIZE
840
- })), /* @__PURE__ */ React19__namespace.default.createElement(button.Button, {
855
+ })), /* @__PURE__ */ React20__namespace.default.createElement(button.Button, {
841
856
  className: NumberInputField_default.osdkNumberInputStepButton,
842
857
  "aria-label": "Decrement",
843
858
  tabIndex: -1,
844
859
  onClick: handleStepDown
845
- }, /* @__PURE__ */ React19__namespace.default.createElement(icons.ChevronDown, {
860
+ }, /* @__PURE__ */ React20__namespace.default.createElement(icons.ChevronDown, {
846
861
  size: CHEVRON_SIZE
847
862
  }))));
848
863
  }
@@ -865,8 +880,8 @@ function clamp(value, min, max) {
865
880
  return value;
866
881
  }
867
882
  function useDebouncedValue(value, debounceMs) {
868
- const [debouncedValue, setDebouncedValue] = React19.useState(value);
869
- React19.useEffect(function debounceValue() {
883
+ const [debouncedValue, setDebouncedValue] = React20.useState(value);
884
+ React20.useEffect(function debounceValue() {
870
885
  const timer = setTimeout(() => {
871
886
  setDebouncedValue(value);
872
887
  }, debounceMs);
@@ -877,16 +892,16 @@ function useDebouncedValue(value, debounceMs) {
877
892
  return debouncedValue;
878
893
  }
879
894
  function useEventCallback(callback) {
880
- const latestCallbackValueWrapper = React19__namespace.useRef((...args) => {
895
+ const latestCallbackValueWrapper = React20__namespace.useRef((...args) => {
881
896
  if (typeof globalThis.console !== "undefined") {
882
897
  globalThis.console.error("A callback created with `useEventCallback` was called during the initial render of a component. This will throw an error in the future.");
883
898
  }
884
899
  return callback(...args);
885
900
  });
886
- React19__namespace.useEffect(() => {
901
+ React20__namespace.useEffect(() => {
887
902
  latestCallbackValueWrapper.current = callback;
888
903
  }, [callback]);
889
- return React19__namespace.useCallback((...args) => latestCallbackValueWrapper.current(...args), []);
904
+ return React20__namespace.useCallback((...args) => latestCallbackValueWrapper.current(...args), []);
890
905
  }
891
906
 
892
907
  // src/shared/hooks/useInfiniteScroll.ts
@@ -898,11 +913,11 @@ function useInfiniteScroll({
898
913
  callback,
899
914
  loadedCount
900
915
  }) {
901
- const observer = React19.useRef();
902
- const targetRef = React19.useRef();
916
+ const observer = React20.useRef();
917
+ const targetRef = React20.useRef();
903
918
  const eventCallback = useEventCallback(callback);
904
- const throttledCallback = React19.useCallback(lodashEs.throttle(eventCallback), []);
905
- const handleObserverUpdate = React19.useCallback(
919
+ const throttledCallback = React20.useCallback(lodashEs.throttle(eventCallback), []);
920
+ const handleObserverUpdate = React20.useCallback(
906
921
  (entries) => {
907
922
  const ent = entries[0];
908
923
  if (ent && ent.isIntersecting) {
@@ -912,7 +927,7 @@ function useInfiniteScroll({
912
927
  // eslint-disable-next-line react-hooks/exhaustive-deps
913
928
  []
914
929
  );
915
- React19.useEffect(() => {
930
+ React20.useEffect(() => {
916
931
  const {
917
932
  current: targetElement
918
933
  } = targetRef;
@@ -951,7 +966,7 @@ function _extends2() {
951
966
  return n;
952
967
  }, _extends2.apply(null, arguments);
953
968
  }
954
- var AsyncDropdownField = chunkT7I6O43T_cjs.typedReactMemo(function AsyncDropdownFieldFn({
969
+ var AsyncDropdownField = chunk6SPXSFPI_cjs.typedReactMemo(function AsyncDropdownFieldFn({
955
970
  isLoading,
956
971
  hasMore,
957
972
  isSearching,
@@ -960,20 +975,20 @@ var AsyncDropdownField = chunkT7I6O43T_cjs.typedReactMemo(function AsyncDropdown
960
975
  ...dropdownProps
961
976
  }) {
962
977
  const itemCount = dropdownProps.items.length;
963
- const popupStatus = React19.useMemo(() => {
978
+ const popupStatus = React20.useMemo(() => {
964
979
  if (fetchError != null) {
965
- return /* @__PURE__ */ React19__namespace.default.createElement("div", {
980
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", {
966
981
  className: AsyncDropdownField_default.osdkAsyncDropdownError,
967
982
  role: "alert"
968
983
  }, fetchError.message);
969
984
  }
970
985
  if (isSearching) {
971
- return /* @__PURE__ */ React19__namespace.default.createElement("div", {
986
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", {
972
987
  className: AsyncDropdownField_default.osdkAsyncDropdownStatus
973
988
  }, "Searching\u2026");
974
989
  }
975
990
  if (isLoading && itemCount === 0) {
976
- return /* @__PURE__ */ React19__namespace.default.createElement("div", {
991
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", {
977
992
  className: AsyncDropdownField_default.osdkAsyncDropdownStatus
978
993
  }, "Loading\u2026");
979
994
  }
@@ -983,10 +998,10 @@ var AsyncDropdownField = chunkT7I6O43T_cjs.typedReactMemo(function AsyncDropdown
983
998
  callback: onFetchMore,
984
999
  loadedCount: itemCount
985
1000
  });
986
- return /* @__PURE__ */ React19__namespace.default.createElement(chunkT7I6O43T_cjs.DropdownField, _extends2({}, dropdownProps, {
1001
+ return /* @__PURE__ */ React20__namespace.default.createElement(chunk6SPXSFPI_cjs.DropdownField, _extends2({}, dropdownProps, {
987
1002
  isSearchable: true,
988
1003
  popupStatus,
989
- trailingItem: hasMore ? /* @__PURE__ */ React19__namespace.default.createElement(InfiniteScrollSentinel, {
1004
+ trailingItem: hasMore ? /* @__PURE__ */ React20__namespace.default.createElement(InfiniteScrollSentinel, {
990
1005
  key: "sentinel",
991
1006
  infiniteScrollRef
992
1007
  }) : null,
@@ -996,10 +1011,10 @@ var AsyncDropdownField = chunkT7I6O43T_cjs.typedReactMemo(function AsyncDropdown
996
1011
  function InfiniteScrollSentinel({
997
1012
  infiniteScrollRef
998
1013
  }) {
999
- return /* @__PURE__ */ React19__namespace.default.createElement("div", {
1014
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", {
1000
1015
  ref: infiniteScrollRef,
1001
1016
  role: "presentation"
1002
- }, /* @__PURE__ */ React19__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
1017
+ }, /* @__PURE__ */ React20__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
1003
1018
  className: AsyncDropdownField_default.osdkAsyncDropdownSkeleton
1004
1019
  }));
1005
1020
  }
@@ -1008,7 +1023,7 @@ function InfiniteScrollSentinel({
1008
1023
  var SEARCH_DEBOUNCE_MS = 300;
1009
1024
  var PAGE_SIZE = 50;
1010
1025
  var EMPTY_ITEMS = [];
1011
- var ObjectSelectField = /* @__PURE__ */ React19.memo(function ObjectSelectFieldFn({
1026
+ var ObjectSelectField = /* @__PURE__ */ React20.memo(function ObjectSelectFieldFn({
1012
1027
  objectType,
1013
1028
  value,
1014
1029
  onChange,
@@ -1019,9 +1034,9 @@ var ObjectSelectField = /* @__PURE__ */ React19.memo(function ObjectSelectFieldF
1019
1034
  portalRef,
1020
1035
  portalContainer
1021
1036
  }) {
1022
- const [query, setQuery] = React19.useState("");
1037
+ const [query, setQuery] = React20.useState("");
1023
1038
  const debouncedQuery = useDebouncedValue(query, SEARCH_DEBOUNCE_MS);
1024
- const handleChange = React19.useCallback((newValue) => {
1039
+ const handleChange = React20.useCallback((newValue) => {
1025
1040
  onChange?.(newValue);
1026
1041
  setQuery("");
1027
1042
  }, [onChange]);
@@ -1029,7 +1044,7 @@ var ObjectSelectField = /* @__PURE__ */ React19.memo(function ObjectSelectFieldF
1029
1044
  metadata
1030
1045
  } = react.useOsdkMetadata(objectType);
1031
1046
  const titleProperty = typeof metadata?.titleProperty === "string" ? metadata.titleProperty : void 0;
1032
- const where = React19.useMemo(() => {
1047
+ const where = React20.useMemo(() => {
1033
1048
  const trimmed = debouncedQuery.trim();
1034
1049
  if (trimmed === "" || titleProperty == null) {
1035
1050
  return void 0;
@@ -1051,10 +1066,10 @@ var ObjectSelectField = /* @__PURE__ */ React19.memo(function ObjectSelectFieldF
1051
1066
  pageSize: PAGE_SIZE
1052
1067
  });
1053
1068
  const items = data ?? EMPTY_ITEMS;
1054
- const handleFetchMore = React19.useCallback(() => {
1069
+ const handleFetchMore = React20.useCallback(() => {
1055
1070
  void fetchMore?.();
1056
1071
  }, [fetchMore]);
1057
- return /* @__PURE__ */ React19__namespace.default.createElement(AsyncDropdownField, {
1072
+ return /* @__PURE__ */ React20__namespace.default.createElement(AsyncDropdownField, {
1058
1073
  id,
1059
1074
  value,
1060
1075
  onChange: handleChange,
@@ -1084,23 +1099,23 @@ function itemToKey(obj) {
1084
1099
  function isItemEqual(a, b) {
1085
1100
  return a.$primaryKey === b.$primaryKey;
1086
1101
  }
1087
- var BlueprintIcon = /* @__PURE__ */ React19__namespace.default.memo(function BlueprintIconFn({
1102
+ var BlueprintIcon = /* @__PURE__ */ React20__namespace.default.memo(function BlueprintIconFn({
1088
1103
  icon,
1089
1104
  size
1090
1105
  }) {
1091
1106
  const paths = useIcon(icon.name, size);
1092
- return /* @__PURE__ */ React19__namespace.default.createElement(icons.SVGIconContainer, {
1107
+ return /* @__PURE__ */ React20__namespace.default.createElement(icons.SVGIconContainer, {
1093
1108
  iconName: icon.name,
1094
1109
  color: icon.color
1095
- }, paths != null ? paths.map((d, i) => /* @__PURE__ */ React19__namespace.default.createElement("path", {
1110
+ }, paths != null ? paths.map((d, i) => /* @__PURE__ */ React20__namespace.default.createElement("path", {
1096
1111
  key: i,
1097
1112
  d,
1098
1113
  fillRule: "evenodd"
1099
1114
  })) : []);
1100
1115
  });
1101
1116
  function useIcon(icon, size) {
1102
- const [iconPaths, setIconPaths] = React19__namespace.default.useState(() => icons.Icons.getPaths(icon, size));
1103
- React19__namespace.default.useEffect(function loadIconPaths() {
1117
+ const [iconPaths, setIconPaths] = React20__namespace.default.useState(() => icons.Icons.getPaths(icon, size));
1118
+ React20__namespace.default.useEffect(function loadIconPaths() {
1104
1119
  let isMounted = true;
1105
1120
  const loadedIconPaths = icons.Icons.getPaths(icon, size);
1106
1121
  if (loadedIconPaths != null) {
@@ -1129,20 +1144,20 @@ var DEFAULT_OBJECT_ICON = {
1129
1144
  };
1130
1145
  var ICON_SIZE = icons.IconSize.STANDARD;
1131
1146
  var DEFAULT_EMPTY_MESSAGE = "Object set is not defined";
1132
- var ObjectSetField = chunkT7I6O43T_cjs.typedReactMemo(function ObjectSetFieldFn({
1147
+ var ObjectSetField = chunk6SPXSFPI_cjs.typedReactMemo(function ObjectSetFieldFn({
1133
1148
  value,
1134
1149
  emptyMessage = DEFAULT_EMPTY_MESSAGE
1135
1150
  }) {
1136
1151
  if (value == null) {
1137
- return /* @__PURE__ */ React19__namespace.default.createElement("div", {
1152
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", {
1138
1153
  className: classnames__default.default(ObjectSetField_default.osdkObjectSetField, ObjectSetField_default.osdkObjectSetFieldEmpty)
1139
1154
  }, emptyMessage);
1140
1155
  }
1141
- return /* @__PURE__ */ React19__namespace.default.createElement(ObjectSetFieldContent, {
1156
+ return /* @__PURE__ */ React20__namespace.default.createElement(ObjectSetFieldContent, {
1142
1157
  objectSet: value
1143
1158
  });
1144
1159
  });
1145
- var ObjectSetFieldContent = /* @__PURE__ */ React19__namespace.default.memo(function ObjectSetFieldContentFn({
1160
+ var ObjectSetFieldContent = /* @__PURE__ */ React20__namespace.default.memo(function ObjectSetFieldContentFn({
1146
1161
  objectSet
1147
1162
  }) {
1148
1163
  const objectTypeDef = objectSet.$objectSetInternals.def;
@@ -1160,22 +1175,22 @@ var ObjectSetFieldContent = /* @__PURE__ */ React19__namespace.default.memo(func
1160
1175
  pageSize: 1
1161
1176
  });
1162
1177
  const hasMetadata = metadata != null;
1163
- const icon = React19__namespace.default.useMemo(() => metadata != null && "icon" in metadata && metadata.icon != null ? toComponentIcon(metadata.icon) : DEFAULT_OBJECT_ICON, [metadata]);
1178
+ const icon = React20__namespace.default.useMemo(() => metadata != null && "icon" in metadata && metadata.icon != null ? toComponentIcon(metadata.icon) : DEFAULT_OBJECT_ICON, [metadata]);
1164
1179
  const displayName = totalCount === "1" || !hasMetadata || !("pluralDisplayName" in metadata) ? metadata?.displayName : metadata.pluralDisplayName;
1165
1180
  const showLoadingState = metadataLoading && !hasMetadata;
1166
- return /* @__PURE__ */ React19__namespace.default.createElement("div", {
1181
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", {
1167
1182
  className: ObjectSetField_default.osdkObjectSetField
1168
- }, showLoadingState ? /* @__PURE__ */ React19__namespace.default.createElement(React19__namespace.default.Fragment, null, OBJECT_SET_ICON_SKELETON, OBJECT_SET_LABEL_SKELETON) : /* @__PURE__ */ React19__namespace.default.createElement(React19__namespace.default.Fragment, null, /* @__PURE__ */ React19__namespace.default.createElement(BlueprintIcon, {
1183
+ }, showLoadingState ? /* @__PURE__ */ React20__namespace.default.createElement(React20__namespace.default.Fragment, null, OBJECT_SET_ICON_SKELETON, OBJECT_SET_LABEL_SKELETON) : /* @__PURE__ */ React20__namespace.default.createElement(React20__namespace.default.Fragment, null, /* @__PURE__ */ React20__namespace.default.createElement(BlueprintIcon, {
1169
1184
  icon,
1170
1185
  size: ICON_SIZE
1171
- }), /* @__PURE__ */ React19__namespace.default.createElement(ObjectSetLabel, {
1186
+ }), /* @__PURE__ */ React20__namespace.default.createElement(ObjectSetLabel, {
1172
1187
  displayName,
1173
1188
  totalCount,
1174
1189
  error: objectSetError,
1175
1190
  isLoading: objectSetLoading
1176
1191
  })));
1177
1192
  });
1178
- var ObjectSetLabel = /* @__PURE__ */ React19__namespace.default.memo(function ObjectSetLabelFn({
1193
+ var ObjectSetLabel = /* @__PURE__ */ React20__namespace.default.memo(function ObjectSetLabelFn({
1179
1194
  displayName,
1180
1195
  totalCount,
1181
1196
  isLoading,
@@ -1185,15 +1200,15 @@ var ObjectSetLabel = /* @__PURE__ */ React19__namespace.default.memo(function Ob
1185
1200
  const label = displayName ?? (totalCount === "1" ? "object" : "objects");
1186
1201
  const showSkeleton = isLoading && !hasData;
1187
1202
  const showError = error != null && !hasData && !isLoading;
1188
- return /* @__PURE__ */ React19__namespace.default.createElement(React19__namespace.default.Fragment, null, showSkeleton && OBJECT_SET_LABEL_SKELETON, showError && /* @__PURE__ */ React19__namespace.default.createElement("span", {
1203
+ return /* @__PURE__ */ React20__namespace.default.createElement(React20__namespace.default.Fragment, null, showSkeleton && OBJECT_SET_LABEL_SKELETON, showError && /* @__PURE__ */ React20__namespace.default.createElement("span", {
1189
1204
  className: ObjectSetField_default.osdkObjectSetFieldError,
1190
1205
  role: "alert"
1191
- }, `Failed to load: ${error.message}`), !showSkeleton && !showError && /* @__PURE__ */ React19__namespace.default.createElement("span", null, `${formatCount(totalCount)} ${label}`));
1206
+ }, `Failed to load: ${error.message}`), !showSkeleton && !showError && /* @__PURE__ */ React20__namespace.default.createElement("span", null, `${formatCount(totalCount)} ${label}`));
1192
1207
  });
1193
- var OBJECT_SET_ICON_SKELETON = /* @__PURE__ */ React19__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
1208
+ var OBJECT_SET_ICON_SKELETON = /* @__PURE__ */ React20__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
1194
1209
  className: ObjectSetField_default.osdkObjectSetIconSkeleton
1195
1210
  });
1196
- var OBJECT_SET_LABEL_SKELETON = /* @__PURE__ */ React19__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
1211
+ var OBJECT_SET_LABEL_SKELETON = /* @__PURE__ */ React20__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
1197
1212
  className: ObjectSetField_default.osdkObjectSetLabelSkeleton
1198
1213
  });
1199
1214
  function formatCount(count) {
@@ -1214,43 +1229,58 @@ function toComponentIcon(apiIcon) {
1214
1229
  var RadioButtonsField_default = {};
1215
1230
 
1216
1231
  // src/action-form/fields/RadioButtonsField.tsx
1217
- var RadioButtonsField = chunkT7I6O43T_cjs.typedReactMemo(function RadioButtonsFieldFn({
1232
+ var RadioButtonsField = chunk6SPXSFPI_cjs.typedReactMemo(function RadioButtonsFieldFn({
1218
1233
  id,
1219
1234
  value,
1220
1235
  onChange,
1221
1236
  options,
1222
1237
  orientation
1223
1238
  }) {
1224
- const selectedLabel = React19.useMemo(() => value != null ? options.find((opt) => opt.value === value)?.label : void 0, [options, value]);
1225
- const handleValueChange = React19.useCallback((nextLabel) => {
1239
+ const selectedLabel = React20.useMemo(() => value != null ? options.find((opt) => opt.value === value)?.label : void 0, [options, value]);
1240
+ const handleValueChange = React20.useCallback((nextLabel) => {
1226
1241
  const match = options.find((opt) => opt.label === nextLabel);
1227
1242
  onChange?.(match?.value ?? null);
1228
1243
  }, [options, onChange]);
1229
- return /* @__PURE__ */ React19__namespace.default.createElement(radioGroup.RadioGroup, {
1244
+ return /* @__PURE__ */ React20__namespace.default.createElement(radioGroup.RadioGroup, {
1230
1245
  id,
1231
1246
  className: RadioButtonsField_default.osdkRadioGroup,
1232
1247
  "data-orientation": orientation ?? "vertical",
1233
1248
  value: selectedLabel,
1234
1249
  onValueChange: handleValueChange
1235
- }, options.map((option) => /* @__PURE__ */ React19__namespace.default.createElement(RadioItem, {
1250
+ }, options.map((option) => /* @__PURE__ */ React20__namespace.default.createElement(RadioItem, {
1236
1251
  key: option.label,
1237
1252
  option
1238
1253
  })));
1239
1254
  });
1240
- var RadioItem = /* @__PURE__ */ React19.memo(function RadioItemFn({
1255
+ var RadioItem = /* @__PURE__ */ React20.memo(function RadioItemFn({
1241
1256
  option
1242
1257
  }) {
1243
- return /* @__PURE__ */ React19__namespace.default.createElement("label", {
1258
+ return /* @__PURE__ */ React20__namespace.default.createElement("label", {
1244
1259
  className: RadioButtonsField_default.osdkRadioItem
1245
- }, /* @__PURE__ */ React19__namespace.default.createElement(radio.Radio.Root, {
1260
+ }, /* @__PURE__ */ React20__namespace.default.createElement(radio.Radio.Root, {
1246
1261
  value: option.label,
1247
1262
  className: RadioButtonsField_default.osdkRadioRoot
1248
- }, /* @__PURE__ */ React19__namespace.default.createElement(radio.Radio.Indicator, {
1263
+ }, /* @__PURE__ */ React20__namespace.default.createElement(radio.Radio.Indicator, {
1249
1264
  className: RadioButtonsField_default.osdkRadioIndicator
1250
- })), /* @__PURE__ */ React19__namespace.default.createElement("span", {
1265
+ })), /* @__PURE__ */ React20__namespace.default.createElement("span", {
1251
1266
  className: RadioButtonsField_default.osdkRadioLabel
1252
1267
  }, option.label));
1253
1268
  });
1269
+ var SwitchField = /* @__PURE__ */ React20__namespace.default.memo(function SwitchFieldFn({
1270
+ id,
1271
+ label,
1272
+ value,
1273
+ onChange,
1274
+ error
1275
+ }) {
1276
+ return /* @__PURE__ */ React20__namespace.default.createElement(chunkX337DNCW_cjs.Switch, {
1277
+ id,
1278
+ checked: value ?? false,
1279
+ onCheckedChange: onChange,
1280
+ "aria-invalid": error != null || void 0,
1281
+ "aria-label": label
1282
+ });
1283
+ });
1254
1284
 
1255
1285
  // src/action-form/fields/BaseInput.module.css
1256
1286
  var BaseInput_default = {};
@@ -1279,12 +1309,12 @@ function TextAreaField({
1279
1309
  minLength,
1280
1310
  maxLength
1281
1311
  }) {
1282
- const renderTextarea = React19.useCallback((props) => /* @__PURE__ */ React19__namespace.default.createElement("textarea", _extends3({}, props, {
1312
+ const renderTextarea = React20.useCallback((props) => /* @__PURE__ */ React20__namespace.default.createElement("textarea", _extends3({}, props, {
1283
1313
  rows,
1284
1314
  wrap,
1285
1315
  style: TEXTAREA_STYLE
1286
1316
  })), [rows, wrap]);
1287
- return /* @__PURE__ */ React19__namespace.default.createElement(input.Input, {
1317
+ return /* @__PURE__ */ React20__namespace.default.createElement(input.Input, {
1288
1318
  id,
1289
1319
  className: BaseInput_default.osdkBaseInput,
1290
1320
  value: value ?? "",
@@ -1305,7 +1335,7 @@ function TextInputField({
1305
1335
  minLength,
1306
1336
  maxLength
1307
1337
  }) {
1308
- return /* @__PURE__ */ React19__namespace.default.createElement(input.Input, {
1338
+ return /* @__PURE__ */ React20__namespace.default.createElement(input.Input, {
1309
1339
  id,
1310
1340
  className: BaseInput_default.osdkBaseInput,
1311
1341
  type: "text",
@@ -1328,7 +1358,7 @@ function _extends4() {
1328
1358
  return n;
1329
1359
  }, _extends4.apply(null, arguments);
1330
1360
  }
1331
- var FormFieldRenderer = /* @__PURE__ */ React19.memo(function FormFieldRendererFn({
1361
+ var FormFieldRenderer = /* @__PURE__ */ React20.memo(function FormFieldRendererFn({
1332
1362
  fieldDefinition,
1333
1363
  value,
1334
1364
  onFieldValueChange,
@@ -1342,7 +1372,7 @@ var FormFieldRenderer = /* @__PURE__ */ React19.memo(function FormFieldRendererF
1342
1372
  helperText,
1343
1373
  helperTextPlacement
1344
1374
  } = fieldDefinition;
1345
- return /* @__PURE__ */ React19__namespace.default.createElement(FormField, {
1375
+ return /* @__PURE__ */ React20__namespace.default.createElement(FormField, {
1346
1376
  label,
1347
1377
  isRequired,
1348
1378
  fieldKey: fieldDefinition.fieldKey,
@@ -1355,7 +1385,7 @@ var FormFieldRenderer = /* @__PURE__ */ React19.memo(function FormFieldRendererF
1355
1385
  function renderFieldComponent(fieldDefinition, value, onChange, error, portalContainer) {
1356
1386
  switch (fieldDefinition.fieldComponent) {
1357
1387
  case "DATE_RANGE_INPUT":
1358
- return /* @__PURE__ */ React19__namespace.default.createElement(DateRangeInputField, _extends4({
1388
+ return /* @__PURE__ */ React20__namespace.default.createElement(DateRangeInputField, _extends4({
1359
1389
  id: fieldDefinition.fieldKey,
1360
1390
  value: coerceToDateRange(value),
1361
1391
  onChange,
@@ -1364,7 +1394,7 @@ function renderFieldComponent(fieldDefinition, value, onChange, error, portalCon
1364
1394
  portalContainer: resolvePortalContainer(fieldDefinition.fieldComponentProps, portalContainer)
1365
1395
  }));
1366
1396
  case "TEXT_INPUT":
1367
- return /* @__PURE__ */ React19__namespace.default.createElement(TextInputField, _extends4({
1397
+ return /* @__PURE__ */ React20__namespace.default.createElement(TextInputField, _extends4({
1368
1398
  id: fieldDefinition.fieldKey,
1369
1399
  value: value != null ? String(value) : "",
1370
1400
  onChange,
@@ -1372,7 +1402,7 @@ function renderFieldComponent(fieldDefinition, value, onChange, error, portalCon
1372
1402
  error
1373
1403
  }, fieldDefinition.fieldComponentProps));
1374
1404
  case "TEXT_AREA":
1375
- return /* @__PURE__ */ React19__namespace.default.createElement(TextAreaField, _extends4({
1405
+ return /* @__PURE__ */ React20__namespace.default.createElement(TextAreaField, _extends4({
1376
1406
  id: fieldDefinition.fieldKey,
1377
1407
  value: value != null ? String(value) : "",
1378
1408
  onChange,
@@ -1380,7 +1410,7 @@ function renderFieldComponent(fieldDefinition, value, onChange, error, portalCon
1380
1410
  error
1381
1411
  }, fieldDefinition.fieldComponentProps));
1382
1412
  case "DROPDOWN": {
1383
- return /* @__PURE__ */ React19__namespace.default.createElement(chunkT7I6O43T_cjs.DropdownField, _extends4({
1413
+ return /* @__PURE__ */ React20__namespace.default.createElement(chunk6SPXSFPI_cjs.DropdownField, _extends4({
1384
1414
  id: fieldDefinition.fieldKey,
1385
1415
  value,
1386
1416
  onChange,
@@ -1391,7 +1421,7 @@ function renderFieldComponent(fieldDefinition, value, onChange, error, portalCon
1391
1421
  }));
1392
1422
  }
1393
1423
  case "DATETIME_PICKER":
1394
- return /* @__PURE__ */ React19__namespace.default.createElement(chunkT7I6O43T_cjs.DatetimePickerField, _extends4({
1424
+ return /* @__PURE__ */ React20__namespace.default.createElement(chunk6SPXSFPI_cjs.DatetimePickerField, _extends4({
1395
1425
  id: fieldDefinition.fieldKey,
1396
1426
  placeholder: fieldDefinition.placeholder,
1397
1427
  value: value instanceof Date ? value : null,
@@ -1401,21 +1431,29 @@ function renderFieldComponent(fieldDefinition, value, onChange, error, portalCon
1401
1431
  portalContainer: resolvePortalContainer(fieldDefinition.fieldComponentProps, portalContainer)
1402
1432
  }));
1403
1433
  case "RADIO_BUTTONS":
1404
- return /* @__PURE__ */ React19__namespace.default.createElement(RadioButtonsField, _extends4({
1434
+ return /* @__PURE__ */ React20__namespace.default.createElement(RadioButtonsField, _extends4({
1405
1435
  id: fieldDefinition.fieldKey,
1406
1436
  value,
1407
1437
  onChange,
1408
1438
  error
1409
1439
  }, fieldDefinition.fieldComponentProps));
1440
+ case "SWITCH":
1441
+ return /* @__PURE__ */ React20__namespace.default.createElement(SwitchField, _extends4({
1442
+ id: fieldDefinition.fieldKey,
1443
+ label: fieldDefinition.label,
1444
+ value: !!value,
1445
+ onChange,
1446
+ error
1447
+ }, fieldDefinition.fieldComponentProps));
1410
1448
  case "CUSTOM":
1411
- return /* @__PURE__ */ React19__namespace.default.createElement(CustomField, _extends4({
1449
+ return /* @__PURE__ */ React20__namespace.default.createElement(CustomField, _extends4({
1412
1450
  id: fieldDefinition.fieldKey,
1413
1451
  value,
1414
1452
  onChange,
1415
1453
  error
1416
1454
  }, fieldDefinition.fieldComponentProps));
1417
1455
  case "NUMBER_INPUT":
1418
- return /* @__PURE__ */ React19__namespace.default.createElement(NumberInputField, _extends4({
1456
+ return /* @__PURE__ */ React20__namespace.default.createElement(NumberInputField, _extends4({
1419
1457
  id: fieldDefinition.fieldKey,
1420
1458
  value: typeof value === "number" ? value : null,
1421
1459
  onChange,
@@ -1423,14 +1461,14 @@ function renderFieldComponent(fieldDefinition, value, onChange, error, portalCon
1423
1461
  error
1424
1462
  }, fieldDefinition.fieldComponentProps));
1425
1463
  case "FILE_PICKER":
1426
- return /* @__PURE__ */ React19__namespace.default.createElement(FilePickerField, _extends4({
1464
+ return /* @__PURE__ */ React20__namespace.default.createElement(FilePickerField, _extends4({
1427
1465
  id: fieldDefinition.fieldKey,
1428
1466
  value: coerceToFileValue(value),
1429
1467
  onChange,
1430
1468
  error
1431
1469
  }, fieldDefinition.fieldComponentProps));
1432
1470
  case "OBJECT_SELECT":
1433
- return /* @__PURE__ */ React19__namespace.default.createElement(ObjectSelectField, _extends4({
1471
+ return /* @__PURE__ */ React20__namespace.default.createElement(ObjectSelectField, _extends4({
1434
1472
  id: fieldDefinition.fieldKey,
1435
1473
  value: narrowToOsdkObject(value),
1436
1474
  onChange,
@@ -1440,7 +1478,7 @@ function renderFieldComponent(fieldDefinition, value, onChange, error, portalCon
1440
1478
  portalContainer: resolvePortalContainer(fieldDefinition.fieldComponentProps, portalContainer)
1441
1479
  }));
1442
1480
  case "OBJECT_SET":
1443
- return /* @__PURE__ */ React19__namespace.default.createElement(ObjectSetField, _extends4({
1481
+ return /* @__PURE__ */ React20__namespace.default.createElement(ObjectSetField, _extends4({
1444
1482
  id: fieldDefinition.fieldKey
1445
1483
  }, fieldDefinition.fieldComponentProps));
1446
1484
  default:
@@ -1480,14 +1518,14 @@ function assertUnreachableFieldComponent(value) {
1480
1518
  }
1481
1519
 
1482
1520
  // src/action-form/fields/FieldBridge.tsx
1483
- var SELECT_LIKE_FIELDS = /* @__PURE__ */ new Set(["RADIO_BUTTONS", "DROPDOWN"]);
1484
- var FieldBridge = /* @__PURE__ */ React19.memo(function FieldBridgeFn({
1521
+ var SELECT_LIKE_FIELDS = /* @__PURE__ */ new Set(["RADIO_BUTTONS", "DROPDOWN", "SWITCH"]);
1522
+ var FieldBridge = /* @__PURE__ */ React20.memo(function FieldBridgeFn({
1485
1523
  fieldDef,
1486
1524
  control,
1487
1525
  onExternalChange,
1488
1526
  portalContainer
1489
1527
  }) {
1490
- const rules = React19.useMemo(() => extractValidationRules(fieldDef), [fieldDef]);
1528
+ const rules = React20.useMemo(() => extractValidationRules(fieldDef), [fieldDef]);
1491
1529
  const {
1492
1530
  field: {
1493
1531
  onChange,
@@ -1503,20 +1541,20 @@ var FieldBridge = /* @__PURE__ */ React19.memo(function FieldBridgeFn({
1503
1541
  rules
1504
1542
  });
1505
1543
  const isSelectLike = SELECT_LIKE_FIELDS.has(fieldDef.fieldComponent);
1506
- const handleChange = React19.useCallback((newValue) => {
1544
+ const handleChange = React20.useCallback((newValue) => {
1507
1545
  onChange(newValue);
1508
1546
  onExternalChange?.(fieldDef.fieldKey, newValue);
1509
1547
  if (isSelectLike) {
1510
1548
  onBlur();
1511
1549
  }
1512
1550
  }, [onChange, onBlur, onExternalChange, fieldDef.fieldKey, isSelectLike]);
1513
- const handleBlur = React19.useCallback((e) => {
1551
+ const handleBlur = React20.useCallback((e) => {
1514
1552
  if (e.currentTarget.contains(e.relatedTarget)) {
1515
1553
  return;
1516
1554
  }
1517
1555
  onBlur();
1518
1556
  }, [onBlur]);
1519
- return /* @__PURE__ */ React19__namespace.default.createElement(FormFieldRenderer, {
1557
+ return /* @__PURE__ */ React20__namespace.default.createElement(FormFieldRenderer, {
1520
1558
  value,
1521
1559
  fieldDefinition: fieldDef,
1522
1560
  onFieldValueChange: handleChange,
@@ -1530,10 +1568,10 @@ var FieldBridge = /* @__PURE__ */ React19.memo(function FieldBridgeFn({
1530
1568
  var FormHeader_default = {};
1531
1569
 
1532
1570
  // src/action-form/FormHeader.tsx
1533
- var FormHeader = /* @__PURE__ */ React19.memo(function FormHeaderFn({
1571
+ var FormHeader = /* @__PURE__ */ React20.memo(function FormHeaderFn({
1534
1572
  title
1535
1573
  }) {
1536
- return /* @__PURE__ */ React19__namespace.default.createElement("h2", {
1574
+ return /* @__PURE__ */ React20__namespace.default.createElement("h2", {
1537
1575
  className: FormHeader_default.osdkFormHeader
1538
1576
  }, title);
1539
1577
  });
@@ -1542,7 +1580,7 @@ var FormHeader = /* @__PURE__ */ React19.memo(function FormHeaderFn({
1542
1580
  var FormSection_default = {};
1543
1581
 
1544
1582
  // src/action-form/FormSection.tsx
1545
- var FormSection = /* @__PURE__ */ React19.memo(function FormSectionFn({
1583
+ var FormSection = /* @__PURE__ */ React20.memo(function FormSectionFn({
1546
1584
  definition,
1547
1585
  errorCount,
1548
1586
  children
@@ -1557,65 +1595,65 @@ var FormSection = /* @__PURE__ */ React19.memo(function FormSectionFn({
1557
1595
  } = definition;
1558
1596
  const isMinimal = style === "minimal";
1559
1597
  if (isMinimal) {
1560
- return /* @__PURE__ */ React19__namespace.default.createElement(MinimalSection, {
1598
+ return /* @__PURE__ */ React20__namespace.default.createElement(MinimalSection, {
1561
1599
  title,
1562
1600
  description
1563
1601
  }, children);
1564
1602
  }
1565
1603
  const contentClassName = classnames__default.default(columnCount === 2 ? FormSection_default.osdkFormSectionGrid : FormSection_default.osdkFormSectionContent, FormSection_default.osdkFormSectionDivider);
1566
1604
  if (!showTitleBar) {
1567
- return /* @__PURE__ */ React19__namespace.default.createElement("div", {
1605
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", {
1568
1606
  className: FormSection_default.osdkFormSectionBox
1569
- }, /* @__PURE__ */ React19__namespace.default.createElement("div", {
1607
+ }, /* @__PURE__ */ React20__namespace.default.createElement("div", {
1570
1608
  className: contentClassName
1571
1609
  }, children));
1572
1610
  }
1573
- return /* @__PURE__ */ React19__namespace.default.createElement(collapsible.Collapsible.Root, {
1611
+ return /* @__PURE__ */ React20__namespace.default.createElement(collapsible.Collapsible.Root, {
1574
1612
  // Inverted: Base UI uses "open" semantics, our API uses "collapsed" semantics
1575
1613
  defaultOpen: !collapsedByDefault,
1576
1614
  className: FormSection_default.osdkFormSectionBox
1577
- }, /* @__PURE__ */ React19__namespace.default.createElement("div", {
1615
+ }, /* @__PURE__ */ React20__namespace.default.createElement("div", {
1578
1616
  className: FormSection_default.osdkFormSectionHeader
1579
- }, /* @__PURE__ */ React19__namespace.default.createElement("div", {
1617
+ }, /* @__PURE__ */ React20__namespace.default.createElement("div", {
1580
1618
  className: FormSection_default.osdkFormSectionTitleArea
1581
- }, /* @__PURE__ */ React19__namespace.default.createElement("span", {
1619
+ }, /* @__PURE__ */ React20__namespace.default.createElement("span", {
1582
1620
  className: FormSection_default.osdkFormSectionTitle
1583
- }, title), description != null && /* @__PURE__ */ React19__namespace.default.createElement("span", {
1621
+ }, title), description != null && /* @__PURE__ */ React20__namespace.default.createElement("span", {
1584
1622
  className: FormSection_default.osdkFormSectionDescription
1585
- }, description)), /* @__PURE__ */ React19__namespace.default.createElement(collapsible.Collapsible.Trigger, {
1623
+ }, description)), /* @__PURE__ */ React20__namespace.default.createElement(collapsible.Collapsible.Trigger, {
1586
1624
  className: FormSection_default.osdkFormSectionTrigger,
1587
1625
  "aria-label": title
1588
- }, errorCount > 0 && /* @__PURE__ */ React19__namespace.default.createElement("span", {
1626
+ }, errorCount > 0 && /* @__PURE__ */ React20__namespace.default.createElement("span", {
1589
1627
  className: FormSection_default.osdkFormSectionErrorBadge,
1590
1628
  role: "status"
1591
- }, errorCount === 1 ? "1 error" : `${errorCount} errors`), /* @__PURE__ */ React19__namespace.default.createElement("span", {
1629
+ }, errorCount === 1 ? "1 error" : `${errorCount} errors`), /* @__PURE__ */ React20__namespace.default.createElement("span", {
1592
1630
  className: FormSection_default.osdkFormSectionChevron
1593
- }, /* @__PURE__ */ React19__namespace.default.createElement(icons.CaretDown, {
1631
+ }, /* @__PURE__ */ React20__namespace.default.createElement(icons.CaretDown, {
1594
1632
  size: 16
1595
- })))), /* @__PURE__ */ React19__namespace.default.createElement(collapsible.Collapsible.Panel, {
1633
+ })))), /* @__PURE__ */ React20__namespace.default.createElement(collapsible.Collapsible.Panel, {
1596
1634
  keepMounted: true
1597
- }, /* @__PURE__ */ React19__namespace.default.createElement("div", {
1635
+ }, /* @__PURE__ */ React20__namespace.default.createElement("div", {
1598
1636
  className: contentClassName
1599
1637
  }, children)));
1600
1638
  });
1601
- var MinimalSection = /* @__PURE__ */ React19.memo(function MinimalSectionFn({
1639
+ var MinimalSection = /* @__PURE__ */ React20.memo(function MinimalSectionFn({
1602
1640
  title,
1603
1641
  description,
1604
1642
  children
1605
1643
  }) {
1606
- return /* @__PURE__ */ React19__namespace.default.createElement("div", null, /* @__PURE__ */ React19__namespace.default.createElement("div", {
1644
+ return /* @__PURE__ */ React20__namespace.default.createElement("div", null, /* @__PURE__ */ React20__namespace.default.createElement("div", {
1607
1645
  className: FormSection_default.osdkFormSectionMinimalHeader
1608
- }, /* @__PURE__ */ React19__namespace.default.createElement("div", {
1646
+ }, /* @__PURE__ */ React20__namespace.default.createElement("div", {
1609
1647
  className: FormSection_default.osdkFormSectionMinimalTitle
1610
- }, title), description != null && /* @__PURE__ */ React19__namespace.default.createElement("div", {
1648
+ }, title), description != null && /* @__PURE__ */ React20__namespace.default.createElement("div", {
1611
1649
  className: FormSection_default.osdkFormSectionMinimalDescription
1612
- }, description)), /* @__PURE__ */ React19__namespace.default.createElement("div", {
1650
+ }, description)), /* @__PURE__ */ React20__namespace.default.createElement("div", {
1613
1651
  className: FormSection_default.osdkFormSectionMinimalContent
1614
1652
  }, children));
1615
1653
  });
1616
1654
 
1617
1655
  // src/action-form/BaseForm.tsx
1618
- var BaseForm = /* @__PURE__ */ React19.memo(function BaseFormFn({
1656
+ var BaseForm = /* @__PURE__ */ React20.memo(function BaseFormFn({
1619
1657
  formTitle,
1620
1658
  formContent,
1621
1659
  formState: controlledFormState,
@@ -1626,12 +1664,12 @@ var BaseForm = /* @__PURE__ */ React19.memo(function BaseFormFn({
1626
1664
  isLoading = false,
1627
1665
  className,
1628
1666
  submitButtonText = "Submit",
1629
- submitButtonVariant = "primary",
1630
- portalContainer
1667
+ submitButtonVariant = "primary"
1631
1668
  }) {
1669
+ const portalContainerRef = React20.useRef(null);
1632
1670
  const isControlled = controlledFormState != null;
1633
- const allFieldDefinitions = React19.useMemo(() => flattenFieldDefinitions(formContent), [formContent]);
1634
- const defaultValues = React19.useMemo(() => buildDefaultValues(allFieldDefinitions), [allFieldDefinitions]);
1671
+ const allFieldDefinitions = React20.useMemo(() => flattenFieldDefinitions(formContent), [formContent]);
1672
+ const defaultValues = React20.useMemo(() => buildDefaultValues(allFieldDefinitions), [allFieldDefinitions]);
1635
1673
  const {
1636
1674
  control,
1637
1675
  trigger,
@@ -1650,7 +1688,7 @@ var BaseForm = /* @__PURE__ */ React19.memo(function BaseFormFn({
1650
1688
  defaultValues
1651
1689
  }
1652
1690
  });
1653
- const [hasAttemptedSubmit, setHasAttemptedSubmit] = React19.useState(false);
1691
+ const [hasAttemptedSubmit, setHasAttemptedSubmit] = React20.useState(false);
1654
1692
  const {
1655
1693
  isPending: isSubmitting,
1656
1694
  error: submissionError,
@@ -1658,8 +1696,7 @@ var BaseForm = /* @__PURE__ */ React19.memo(function BaseFormFn({
1658
1696
  clearError
1659
1697
  } = useAsyncAction(onSubmit);
1660
1698
  const submissionErrorMessage = submissionError != null ? submissionError instanceof Error ? submissionError.message : "Submission failed" : void 0;
1661
- const handleFormSubmit = React19.useCallback(async (e) => {
1662
- e.preventDefault();
1699
+ const submitForm = React20.useCallback(async () => {
1663
1700
  setHasAttemptedSubmit(true);
1664
1701
  const isValid = await trigger();
1665
1702
  if (!isValid) {
@@ -1667,63 +1704,69 @@ var BaseForm = /* @__PURE__ */ React19.memo(function BaseFormFn({
1667
1704
  }
1668
1705
  await executeSubmit(controlledFormState ?? getValues());
1669
1706
  }, [trigger, executeSubmit, controlledFormState, getValues]);
1670
- const handleFieldChange = React19.useCallback((fieldKey, value) => {
1707
+ const handleFieldChange = React20.useCallback((fieldKey, value) => {
1671
1708
  clearError();
1672
1709
  onFieldValueChange?.(fieldKey, value);
1673
1710
  }, [clearError, onFieldValueChange]);
1674
- const isFormPending = isPending || isSubmitting;
1675
- const labelByFieldKey = React19.useMemo(() => new Map(allFieldDefinitions.map((d) => [d.fieldKey, d.label])), [allFieldDefinitions]);
1711
+ const labelByFieldKey = React20.useMemo(() => new Map(allFieldDefinitions.map((d) => [d.fieldKey, d.label])), [allFieldDefinitions]);
1676
1712
  const errorEntries = Object.entries(errors).map(([key, entry]) => ({
1677
1713
  label: labelByFieldKey.get(key) ?? key,
1678
1714
  message: entry?.message ?? "Invalid"
1679
1715
  }));
1680
1716
  const areErrorsPresent = errorEntries.length > 0;
1681
1717
  const buttonErrorMessage = areErrorsPresent ? "Some fields are invalid" : submissionErrorMessage;
1682
- return /* @__PURE__ */ React19__namespace.default.createElement("form", {
1683
- className: classnames__default.default(BaseForm_default.osdkForm, className),
1684
- onSubmit: handleFormSubmit
1685
- }, formTitle != null && /* @__PURE__ */ React19__namespace.default.createElement(FormHeader, {
1718
+ const isFormPending = isPending || isSubmitting;
1719
+ const isSubmitButtonDisabled = isSubmitDisabled || hasAttemptedSubmit && areErrorsPresent;
1720
+ return /* @__PURE__ */ React20__namespace.default.createElement("form", {
1721
+ ref: portalContainerRef,
1722
+ className: classnames__default.default(BaseForm_default.osdkForm, className)
1723
+ // Workshop widgets can run in iframes without `allow-forms`, where
1724
+ // native form submission is blocked. Keep the form landmark, but do not
1725
+ // wire any form-level submit handlers; the submit button invokes our
1726
+ // JavaScript submit path directly.
1727
+ }, formTitle != null && /* @__PURE__ */ React20__namespace.default.createElement(FormHeader, {
1686
1728
  title: formTitle
1687
- }), isLoading && allFieldDefinitions.length === 0 && /* @__PURE__ */ React19__namespace.default.createElement("div", {
1729
+ }), isLoading && allFieldDefinitions.length === 0 && /* @__PURE__ */ React20__namespace.default.createElement("div", {
1688
1730
  role: "status",
1689
1731
  "aria-label": "Loading form fields",
1690
1732
  className: BaseForm_default.osdkFormFields
1691
- }, FORM_SKELETON), /* @__PURE__ */ React19__namespace.default.createElement("div", {
1733
+ }, FORM_SKELETON), /* @__PURE__ */ React20__namespace.default.createElement("div", {
1692
1734
  className: BaseForm_default.osdkFormFields
1693
1735
  }, formContent.map((item) => {
1694
1736
  if (item.type === "field") {
1695
- return /* @__PURE__ */ React19__namespace.default.createElement(FieldBridge, {
1737
+ return /* @__PURE__ */ React20__namespace.default.createElement(FieldBridge, {
1696
1738
  key: item.definition.fieldKey,
1697
1739
  fieldDef: item.definition,
1698
1740
  control,
1699
1741
  onExternalChange: handleFieldChange,
1700
- portalContainer
1742
+ portalContainer: portalContainerRef
1701
1743
  });
1702
1744
  }
1703
1745
  const sectionErrorCount = item.definition.fields.reduce((count, field) => count + (errors[field.fieldKey] != null ? 1 : 0), 0);
1704
- return /* @__PURE__ */ React19__namespace.default.createElement(FormSection, {
1746
+ return /* @__PURE__ */ React20__namespace.default.createElement(FormSection, {
1705
1747
  key: item.key,
1706
1748
  definition: item.definition,
1707
1749
  errorCount: sectionErrorCount
1708
- }, item.definition.fields.map((fieldDef) => /* @__PURE__ */ React19__namespace.default.createElement(FieldBridge, {
1750
+ }, item.definition.fields.map((fieldDef) => /* @__PURE__ */ React20__namespace.default.createElement(FieldBridge, {
1709
1751
  key: fieldDef.fieldKey,
1710
1752
  fieldDef,
1711
1753
  control,
1712
1754
  onExternalChange: handleFieldChange,
1713
- portalContainer
1755
+ portalContainer: portalContainerRef
1714
1756
  })));
1715
- })), /* @__PURE__ */ React19__namespace.default.createElement("div", {
1757
+ })), /* @__PURE__ */ React20__namespace.default.createElement("div", {
1716
1758
  className: BaseForm_default.osdkFormFooter
1717
- }, /* @__PURE__ */ React19__namespace.default.createElement(ErrorIndicator, {
1759
+ }, /* @__PURE__ */ React20__namespace.default.createElement(ErrorIndicator, {
1718
1760
  errorEntries
1719
- }), /* @__PURE__ */ React19__namespace.default.createElement("div", {
1761
+ }), /* @__PURE__ */ React20__namespace.default.createElement("div", {
1720
1762
  className: BaseForm_default.osdkFormSubmitButton
1721
- }, /* @__PURE__ */ React19__namespace.default.createElement(SubmitButton, {
1763
+ }, /* @__PURE__ */ React20__namespace.default.createElement(SubmitButton, {
1722
1764
  isPending: isFormPending,
1723
- isSubmitDisabled: isSubmitDisabled || hasAttemptedSubmit && areErrorsPresent,
1765
+ isSubmitDisabled: isSubmitButtonDisabled,
1724
1766
  errorMessage: buttonErrorMessage,
1725
1767
  buttonText: submitButtonText,
1726
- buttonVariant: submitButtonVariant
1768
+ buttonVariant: submitButtonVariant,
1769
+ onClick: submitForm
1727
1770
  }))));
1728
1771
  });
1729
1772
  function flattenFieldDefinitions(formContent) {
@@ -1742,12 +1785,12 @@ function flattenFieldDefinitions(formContent) {
1742
1785
  var SKELETON_FIELD_COUNT = 3;
1743
1786
  var FORM_SKELETON = Array.from({
1744
1787
  length: SKELETON_FIELD_COUNT
1745
- }, (_, i) => /* @__PURE__ */ React19__namespace.default.createElement("div", {
1788
+ }, (_, i) => /* @__PURE__ */ React20__namespace.default.createElement("div", {
1746
1789
  key: i,
1747
1790
  className: BaseForm_default.osdkFormSkeletonField
1748
- }, /* @__PURE__ */ React19__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
1791
+ }, /* @__PURE__ */ React20__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
1749
1792
  className: BaseForm_default.osdkFormSkeletonLabel
1750
- }), /* @__PURE__ */ React19__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
1793
+ }), /* @__PURE__ */ React20__namespace.default.createElement(chunk7LXS66DW_cjs.SkeletonBar, {
1751
1794
  className: BaseForm_default.osdkFormSkeletonInput
1752
1795
  })));
1753
1796
  function buildDefaultValues(fieldDefinitions) {
@@ -1760,29 +1803,31 @@ function buildDefaultValues(fieldDefinitions) {
1760
1803
  }
1761
1804
  return values;
1762
1805
  }
1763
- var SubmitButton = /* @__PURE__ */ React19.memo(function SubmitButtonFn({
1806
+ var SubmitButton = /* @__PURE__ */ React20.memo(function SubmitButtonFn({
1764
1807
  isPending,
1765
1808
  isSubmitDisabled,
1766
1809
  errorMessage,
1767
1810
  buttonText,
1768
- buttonVariant
1811
+ buttonVariant,
1812
+ onClick
1769
1813
  }) {
1770
1814
  const buttonLabel = isPending ? "Submitting\u2026" : buttonText;
1771
- const button = /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.ActionButton, {
1772
- type: "submit",
1815
+ const button = /* @__PURE__ */ React20__namespace.default.createElement(chunkMD4KDE44_cjs.ActionButton, {
1816
+ type: "button",
1773
1817
  variant: buttonVariant,
1774
- disabled: isSubmitDisabled || isPending
1818
+ disabled: isSubmitDisabled || isPending,
1819
+ onClick
1775
1820
  }, buttonLabel);
1776
1821
  if (errorMessage == null) {
1777
1822
  return button;
1778
1823
  }
1779
- return /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Root, {
1824
+ return /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Root, {
1780
1825
  defaultOpen: true
1781
- }, /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Trigger, {
1782
- render: /* @__PURE__ */ React19__namespace.default.createElement("span", {
1826
+ }, /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Trigger, {
1827
+ render: /* @__PURE__ */ React20__namespace.default.createElement("span", {
1783
1828
  className: BaseForm_default.osdkTooltipTriggerWrapper
1784
1829
  })
1785
- }, button), /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Portal, null, /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Positioner, null, /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Popup, null, /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Arrow, null), errorMessage))));
1830
+ }, button), /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Portal, null, /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Positioner, null, /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Popup, null, /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Arrow, null), errorMessage))));
1786
1831
  });
1787
1832
  function ErrorIndicator({
1788
1833
  errorEntries
@@ -1791,15 +1836,15 @@ function ErrorIndicator({
1791
1836
  return null;
1792
1837
  }
1793
1838
  const count = errorEntries.length;
1794
- return /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Root, null, /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Trigger, null, /* @__PURE__ */ React19__namespace.default.createElement("span", {
1839
+ return /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Root, null, /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Trigger, null, /* @__PURE__ */ React20__namespace.default.createElement("span", {
1795
1840
  className: BaseForm_default.osdkFormErrorIndicator
1796
- }, /* @__PURE__ */ React19__namespace.default.createElement(icons.Error, {
1841
+ }, /* @__PURE__ */ React20__namespace.default.createElement(icons.Error, {
1797
1842
  size: 14
1798
- }), count === 1 ? "1 issue" : `${count} issues`)), /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Portal, null, /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Positioner, null, /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Popup, null, /* @__PURE__ */ React19__namespace.default.createElement(chunkVVJFMOZI_cjs.Tooltip.Arrow, null), /* @__PURE__ */ React19__namespace.default.createElement("ul", {
1843
+ }), count === 1 ? "1 issue" : `${count} issues`)), /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Portal, null, /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Positioner, null, /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Popup, null, /* @__PURE__ */ React20__namespace.default.createElement(chunkI3OSD6CF_cjs.Tooltip.Arrow, null), /* @__PURE__ */ React20__namespace.default.createElement("ul", {
1799
1844
  className: BaseForm_default.osdkFormErrorList
1800
- }, errorEntries.map((entry) => /* @__PURE__ */ React19__namespace.default.createElement("li", {
1845
+ }, errorEntries.map((entry) => /* @__PURE__ */ React20__namespace.default.createElement("li", {
1801
1846
  key: entry.label
1802
- }, /* @__PURE__ */ React19__namespace.default.createElement("strong", null, entry.label, ":"), " ", entry.message)))))));
1847
+ }, /* @__PURE__ */ React20__namespace.default.createElement("strong", null, entry.label, ":"), " ", entry.message)))))));
1803
1848
  }
1804
1849
 
1805
1850
  // src/action-form/utils/coerceFieldValue.ts
@@ -1964,7 +2009,7 @@ function buildFieldDefinition(key, param) {
1964
2009
  fieldComponentProps: {}
1965
2010
  };
1966
2011
  default:
1967
- return chunkUCTQICPR_cjs.assertUnreachable(paramType);
2012
+ return chunkX337DNCW_cjs.assertUnreachable(paramType);
1968
2013
  }
1969
2014
  }
1970
2015
 
@@ -1980,9 +2025,10 @@ function _extends5() {
1980
2025
  }
1981
2026
  var EMPTY_FIELD_DEFINITIONS = [];
1982
2027
  var EMPTY_FORM_CONTENT = [];
1983
- var ActionForm = chunkT7I6O43T_cjs.typedReactMemo(function ActionFormFn({
2028
+ var ActionForm = chunk6SPXSFPI_cjs.typedReactMemo(function ActionFormFn({
1984
2029
  actionDefinition,
1985
2030
  formTitle,
2031
+ showFormTitle = false,
1986
2032
  formFieldDefinitions,
1987
2033
  formState: controlledFormState,
1988
2034
  onFormStateChange,
@@ -1990,8 +2036,7 @@ var ActionForm = chunkT7I6O43T_cjs.typedReactMemo(function ActionFormFn({
1990
2036
  onSubmit,
1991
2037
  onValidationResponse: _onValidationResponse,
1992
2038
  onSuccess,
1993
- onError,
1994
- portalContainer
2039
+ onError
1995
2040
  }) {
1996
2041
  const {
1997
2042
  applyAction: osdkApplyAction,
@@ -2002,7 +2047,7 @@ var ActionForm = chunkT7I6O43T_cjs.typedReactMemo(function ActionFormFn({
2002
2047
  loading: metadataLoading,
2003
2048
  error: metadataError
2004
2049
  } = react.useOsdkMetadata(actionDefinition);
2005
- React19.useEffect(function saveMetadataError() {
2050
+ React20.useEffect(function saveMetadataError() {
2006
2051
  if (metadataError != null) {
2007
2052
  onError?.({
2008
2053
  type: "unknown",
@@ -2011,30 +2056,39 @@ var ActionForm = chunkT7I6O43T_cjs.typedReactMemo(function ActionFormFn({
2011
2056
  }
2012
2057
  }, [metadataError, onError]);
2013
2058
  const parameters = metadata?.parameters;
2014
- const customFieldDefinitions = React19.useMemo(() => {
2059
+ const customFieldDefinitions = React20.useMemo(() => {
2015
2060
  if (formFieldDefinitions == null) {
2016
2061
  return null;
2017
2062
  }
2018
- return formFieldDefinitions.map((def) => ({
2019
- ...def,
2020
- fieldKey: String(def.fieldKey),
2021
- fieldType: parameters?.[String(def.fieldKey)]?.type,
2022
- defaultValue: def.defaultValue
2023
- }));
2063
+ return formFieldDefinitions.map((def) => {
2064
+ const {
2065
+ defaultValue,
2066
+ ...fieldDefinition
2067
+ } = def;
2068
+ return {
2069
+ ...fieldDefinition,
2070
+ fieldKey: String(def.fieldKey),
2071
+ fieldType: parameters?.[String(def.fieldKey)]?.type,
2072
+ fieldComponentProps: defaultValue === void 0 ? def.fieldComponentProps : {
2073
+ ...def.fieldComponentProps,
2074
+ defaultValue
2075
+ }
2076
+ };
2077
+ });
2024
2078
  }, [formFieldDefinitions, parameters]);
2025
- const rendererFieldDefinitions = React19.useMemo(() => customFieldDefinitions ?? (metadata != null ? getDefaultFieldDefinitions(metadata) : EMPTY_FIELD_DEFINITIONS), [customFieldDefinitions, metadata]);
2026
- const formContent = React19.useMemo(() => rendererFieldDefinitions.length === 0 ? EMPTY_FORM_CONTENT : rendererFieldDefinitions.map((def) => ({
2079
+ const rendererFieldDefinitions = React20.useMemo(() => customFieldDefinitions ?? (metadata != null ? getDefaultFieldDefinitions(metadata) : EMPTY_FIELD_DEFINITIONS), [customFieldDefinitions, metadata]);
2080
+ const formContent = React20.useMemo(() => rendererFieldDefinitions.length === 0 ? EMPTY_FORM_CONTENT : rendererFieldDefinitions.map((def) => ({
2027
2081
  type: "field",
2028
2082
  definition: def
2029
2083
  })), [rendererFieldDefinitions]);
2030
- const coerceFormState = React19.useCallback((rawState) => {
2084
+ const coerceFormState = React20.useCallback((rawState) => {
2031
2085
  const coerced = {};
2032
2086
  for (const [key, value] of Object.entries(rawState)) {
2033
2087
  coerced[key] = coerceFieldValue(parameters?.[key]?.type, value);
2034
2088
  }
2035
2089
  return coerced;
2036
2090
  }, [parameters]);
2037
- const handleSubmit = React19.useCallback(async (rawFormState) => {
2091
+ const handleSubmit = React20.useCallback(async (rawFormState) => {
2038
2092
  const formState = coerceFormState(rawFormState);
2039
2093
  try {
2040
2094
  if (onSubmit != null) {
@@ -2050,13 +2104,13 @@ var ActionForm = chunkT7I6O43T_cjs.typedReactMemo(function ActionFormFn({
2050
2104
  });
2051
2105
  }
2052
2106
  }, [coerceFormState, onSubmit, osdkApplyAction, onSuccess, onError]);
2053
- const handleFieldValueChange = React19.useCallback((fieldKey, value) => {
2107
+ const handleFieldValueChange = React20.useCallback((fieldKey, value) => {
2054
2108
  onFormStateChange?.((prev) => ({
2055
2109
  ...prev,
2056
2110
  [fieldKey]: value
2057
2111
  }));
2058
2112
  }, [onFormStateChange]);
2059
- const resolvedTitle = formTitle ?? metadata?.displayName ?? actionDefinition.apiName;
2113
+ const resolvedTitle = showFormTitle ? formTitle ?? metadata?.displayName ?? actionDefinition.apiName : void 0;
2060
2114
  const isControlled = controlledFormState != null;
2061
2115
  const commonProps = {
2062
2116
  formTitle: resolvedTitle,
@@ -2065,21 +2119,20 @@ var ActionForm = chunkT7I6O43T_cjs.typedReactMemo(function ActionFormFn({
2065
2119
  isSubmitDisabled,
2066
2120
  isPending,
2067
2121
  isLoading: metadataLoading,
2068
- onFieldValueChange: handleFieldValueChange,
2069
- portalContainer
2122
+ onFieldValueChange: handleFieldValueChange
2070
2123
  };
2071
2124
  if (!isControlled) {
2072
- return /* @__PURE__ */ React19__namespace.default.createElement(BaseForm, commonProps);
2125
+ return /* @__PURE__ */ React20__namespace.default.createElement(BaseForm, commonProps);
2073
2126
  }
2074
- return /* @__PURE__ */ React19__namespace.default.createElement(BaseForm, _extends5({}, commonProps, {
2127
+ return /* @__PURE__ */ React20__namespace.default.createElement(BaseForm, _extends5({}, commonProps, {
2075
2128
  formState: controlledFormState
2076
2129
  }));
2077
2130
  });
2078
2131
 
2079
2132
  // src/public/experimental/action-form.ts
2080
- var ActionForm2 = chunkSZXVBDSA_cjs.withOsdkMetrics(ActionForm, "ActionForm");
2133
+ var ActionForm2 = chunk6UDBHYSO_cjs.withOsdkMetrics(ActionForm, "ActionForm");
2081
2134
 
2082
2135
  exports.ActionForm = ActionForm2;
2083
2136
  exports.BaseForm = BaseForm;
2084
- //# sourceMappingURL=chunk-BJDCC446.cjs.map
2085
- //# sourceMappingURL=chunk-BJDCC446.cjs.map
2137
+ //# sourceMappingURL=chunk-PTTCWNZZ.cjs.map
2138
+ //# sourceMappingURL=chunk-PTTCWNZZ.cjs.map