@persona/design-system 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (577) hide show
  1. package/CHANGELOG.md +281 -0
  2. package/dist/Accordion.d.mts +1 -1
  3. package/dist/AccordionItem.d.mts +1 -1
  4. package/dist/{Action-B-AiHknZ.d.mts → Action-C6yvIekn.d.mts} +3 -3
  5. package/dist/Action.d.mts +1 -1
  6. package/dist/AdvancedFilterRuleRow.d.mts +4 -2
  7. package/dist/AdvancedFilterRulesPopover.d.mts +5 -3
  8. package/dist/ArrayValueControl.d.mts +1 -1
  9. package/dist/Attribute.d.mts +3 -3
  10. package/dist/{Badge-COqUjFQu.mjs → Badge-uY8l1p1R.mjs} +2 -2
  11. package/dist/{Badge-COqUjFQu.mjs.map → Badge-uY8l1p1R.mjs.map} +1 -1
  12. package/dist/BooleanValueControl.d.mts +1 -1
  13. package/dist/{Breadcrumb-DRFY46ZW.d.mts → Breadcrumb-Tjk9FyiF.d.mts} +1 -1
  14. package/dist/Breadcrumb.d.mts +1 -1
  15. package/dist/{Breadcrumbs-DUSbT1I7.d.mts → Breadcrumbs-DSCbZmAx.d.mts} +2 -2
  16. package/dist/{Breadcrumbs-DXS7rU7_.mjs → Breadcrumbs-EQm5iiRA.mjs} +8 -8
  17. package/dist/{Breadcrumbs-DXS7rU7_.mjs.map → Breadcrumbs-EQm5iiRA.mjs.map} +1 -1
  18. package/dist/Breadcrumbs.d.mts +1 -1
  19. package/dist/{Button-xZ6DC5XC.d.mts → Button-22DkIpYp.d.mts} +4 -4
  20. package/dist/Button.d.mts +1 -1
  21. package/dist/{Calendar-dPmo2dkj.d.mts → Calendar-DANGQNlH.d.mts} +1 -1
  22. package/dist/Calendar.d.mts +1 -1
  23. package/dist/CalendarBase.d.mts +1 -1
  24. package/dist/{Card-Dz6jqJuJ.mjs → Card-BXNxWX5C.mjs} +4 -4
  25. package/dist/{Card-Dz6jqJuJ.mjs.map → Card-BXNxWX5C.mjs.map} +1 -1
  26. package/dist/{Card-CUeM8Lh8.d.mts → Card-DQE1J3gk.d.mts} +3 -3
  27. package/dist/Card.d.mts +1 -1
  28. package/dist/{CardV2-D9p7D7jX.mjs → CardV2-Ds6e577k.mjs} +9 -9
  29. package/dist/{CardV2-D9p7D7jX.mjs.map → CardV2-Ds6e577k.mjs.map} +1 -1
  30. package/dist/{Checkbox-DQynkc_I.mjs → Checkbox-BQC_SmBt.mjs} +4 -4
  31. package/dist/{Checkbox-DQynkc_I.mjs.map → Checkbox-BQC_SmBt.mjs.map} +1 -1
  32. package/dist/{Checkbox-DoJpxPEz.d.mts → Checkbox-CsJlWz-r.d.mts} +1 -1
  33. package/dist/Checkbox.d.mts +1 -1
  34. package/dist/CheckboxGroupField-DjKp63Dr.d.mts +25 -0
  35. package/dist/CheckboxGroupField.d.mts +2 -25
  36. package/dist/ChoicesValueControl.d.mts +1 -1
  37. package/dist/{Combobox-D7hyf-jA.d.mts → Combobox-D1iXiYGV.d.mts} +3 -3
  38. package/dist/{Combobox-C_kCY3P3.mjs → Combobox-MCaDc7h6.mjs} +10 -10
  39. package/dist/{Combobox-C_kCY3P3.mjs.map → Combobox-MCaDc7h6.mjs.map} +1 -1
  40. package/dist/Combobox.d.mts +2 -2
  41. package/dist/{ComboboxBase-BMCY6O7Y.d.mts → ComboboxBase-DXhu2YSh.d.mts} +6 -6
  42. package/dist/ComboboxBase.d.mts +1 -1
  43. package/dist/{ComboboxMultiSelect-L0KYMkmm.d.mts → ComboboxMultiSelect-BSyJc46m.d.mts} +2 -2
  44. package/dist/ComboboxMultiSelect.d.mts +1 -1
  45. package/dist/{ComboboxSingleSelect-v5oNrJ7M.d.mts → ComboboxSingleSelect-Dg_6h4iB.d.mts} +4 -4
  46. package/dist/ComboboxSingleSelect.d.mts +1 -1
  47. package/dist/{CompactBar-DjFaUAsN.d.mts → CompactBar-CVGNq7Zu.d.mts} +3 -3
  48. package/dist/CompactBar.d.mts +1 -1
  49. package/dist/{ConfigFormGroup-DLOZOuLf.mjs → ConfigFormGroup-CidT_cE9.mjs} +2 -2
  50. package/dist/{ConfigFormGroup-DLOZOuLf.mjs.map → ConfigFormGroup-CidT_cE9.mjs.map} +1 -1
  51. package/dist/{ControlBar-Cegjxa6-.d.mts → ControlBar-K43YI-LU.d.mts} +17 -2
  52. package/dist/ControlBar.d.mts +1 -1
  53. package/dist/DataTable.d.mts +6 -3
  54. package/dist/{DateField-Dk5ykLdr.d.mts → DateField-DY3xCygL.d.mts} +2 -2
  55. package/dist/DateField.d.mts +1 -1
  56. package/dist/{DatePicker-Dtvv0V45.d.mts → DatePicker-C56kJLiX.d.mts} +2 -2
  57. package/dist/{DatePicker-C7z1yodK.mjs → DatePicker-CKk6Hnj2.mjs} +40 -8
  58. package/dist/DatePicker-CKk6Hnj2.mjs.map +1 -0
  59. package/dist/DatePicker.d.mts +1 -1
  60. package/dist/{DateRangePicker-HPYsa4wC.d.mts → DateRangePicker-C96NKOon.d.mts} +3 -3
  61. package/dist/DateRangePicker.d.mts +1 -1
  62. package/dist/DateRangeValueControl.d.mts +2 -2
  63. package/dist/DateValueControl.d.mts +1 -1
  64. package/dist/{DropdownButton-CQrFHOIW.mjs → DropdownButton-B-cYK2oi.mjs} +3 -3
  65. package/dist/{DropdownButton-CQrFHOIW.mjs.map → DropdownButton-B-cYK2oi.mjs.map} +1 -1
  66. package/dist/DropdownButton.d.mts +2 -2
  67. package/dist/{DropdownMenu-D1qvgGTZ.d.mts → DropdownMenu-BwPtzVWg.d.mts} +2 -2
  68. package/dist/{DropdownMenu-rm9Nnxn7.mjs → DropdownMenu-CedsmO5h.mjs} +2 -2
  69. package/dist/{DropdownMenu-rm9Nnxn7.mjs.map → DropdownMenu-CedsmO5h.mjs.map} +1 -1
  70. package/dist/DropdownMenu.d.mts +1 -1
  71. package/dist/{ErrorProps-B8-Mqf1W.d.mts → ErrorProps-C-sfKFxK.d.mts} +1 -1
  72. package/dist/ErrorProps.d.mts +1 -1
  73. package/dist/{FieldRegistry-0LmSQ-jc.d.mts → FieldRegistry-C2eIbP1X.d.mts} +2 -2
  74. package/dist/FieldRegistry.d.mts +1 -1
  75. package/dist/{FilterBar-BMM4Swbt.d.mts → FilterBar-BNbMjWDC.d.mts} +4 -4
  76. package/dist/FilterBar.d.mts +1 -1
  77. package/dist/FilterPickerMenu.d.mts +3 -3
  78. package/dist/FilterPill.d.mts +1 -1
  79. package/dist/FilterPopover.d.mts +8 -2
  80. package/dist/FloatValueControl.d.mts +1 -1
  81. package/dist/{FormControl-DXrxoJLl.mjs → FormControl-C4CiA0H-.mjs} +4 -4
  82. package/dist/{FormControl-DXrxoJLl.mjs.map → FormControl-C4CiA0H-.mjs.map} +1 -1
  83. package/dist/{FormControl-Dg8doZq2.d.mts → FormControl-DICrNHcc.d.mts} +2 -2
  84. package/dist/FormControl.d.mts +1 -1
  85. package/dist/FormControlLabel.d.mts +1 -1
  86. package/dist/{FormField-Crp3F-hv.mjs → FormField-CB0yCMro.mjs} +16 -16
  87. package/dist/{FormField-Crp3F-hv.mjs.map → FormField-CB0yCMro.mjs.map} +1 -1
  88. package/dist/{FormField-BeLigf9j.d.mts → FormField-D97xQCxF.d.mts} +2 -2
  89. package/dist/FormField.d.mts +1 -1
  90. package/dist/{Grid-eMLuyRzV.mjs → Grid-D0mlxk8_.mjs} +1 -1
  91. package/dist/{Grid-eMLuyRzV.mjs.map → Grid-D0mlxk8_.mjs.map} +1 -1
  92. package/dist/{Header-DxJ6TfPw.d.mts → Header-Ca554S1F.d.mts} +1 -1
  93. package/dist/Header.d.mts +1 -1
  94. package/dist/{HelperTooltip-DcyrpEZI.d.mts → HelperTooltip-Dk2eqeC_.d.mts} +2 -2
  95. package/dist/HelperTooltip.d.mts +1 -1
  96. package/dist/HighlightedText.d.mts +61 -0
  97. package/dist/{HoverCopyableField-12bBuG-d.mjs → HoverCopyableField-CewUtxZl.mjs} +6 -6
  98. package/dist/{HoverCopyableField-12bBuG-d.mjs.map → HoverCopyableField-CewUtxZl.mjs.map} +1 -1
  99. package/dist/I18nContext-DXcImEuM.d.mts +22 -0
  100. package/dist/I18nContext.d.mts +2 -0
  101. package/dist/{IconButton-CCLMYWVN.mjs → IconButton-H5vDZOdo.mjs} +3 -3
  102. package/dist/{IconButton-CCLMYWVN.mjs.map → IconButton-H5vDZOdo.mjs.map} +1 -1
  103. package/dist/{IconButton-BUMMN-gH.d.mts → IconButton-Vq0MUaNj.d.mts} +2 -2
  104. package/dist/IconButton.d.mts +1 -1
  105. package/dist/ImageTile.d.mts +1 -1
  106. package/dist/InlineCombobox.d.mts +1 -1
  107. package/dist/InlineInput.d.mts +1 -1
  108. package/dist/{Input-2N2e5JCf.d.mts → Input-BRe0qyUe.d.mts} +3 -3
  109. package/dist/{Input-Cl4o41k4.mjs → Input-CY14-YeD.mjs} +4 -4
  110. package/dist/{Input-Cl4o41k4.mjs.map → Input-CY14-YeD.mjs.map} +1 -1
  111. package/dist/Input.d.mts +1 -1
  112. package/dist/{InputProps-TWzig3QO.d.mts → InputProps-B2ngFfvF.d.mts} +2 -2
  113. package/dist/InputProps.d.mts +1 -1
  114. package/dist/IntegerValueControl.d.mts +1 -1
  115. package/dist/{Link-I9Bklen-.mjs → Link-BSuXrvTu.mjs} +2 -2
  116. package/dist/{Link-I9Bklen-.mjs.map → Link-BSuXrvTu.mjs.map} +1 -1
  117. package/dist/Link.d.mts +1 -1
  118. package/dist/{ListBox-sqeLBiKS.mjs → ListBox-2aYWNlO_.mjs} +13 -10
  119. package/dist/{ListBox-sqeLBiKS.mjs.map → ListBox-2aYWNlO_.mjs.map} +1 -1
  120. package/dist/{ListBox-BcoXOt73.d.mts → ListBox-DzZY7IFz.d.mts} +7 -7
  121. package/dist/ListBox.d.mts +1 -1
  122. package/dist/ListBoxField-DT_-4_Ct.d.mts +51 -0
  123. package/dist/ListBoxField.d.mts +2 -51
  124. package/dist/{LoadingShimmer-dRSkdlqD.mjs → LoadingShimmer-Bqjdut7i.mjs} +1 -1
  125. package/dist/{LoadingShimmer-dRSkdlqD.mjs.map → LoadingShimmer-Bqjdut7i.mjs.map} +1 -1
  126. package/dist/LoadingShimmer.d.mts +1 -1
  127. package/dist/{LogicRow-DXywXdYt.d.mts → LogicRow-l66qss7_.d.mts} +3 -3
  128. package/dist/LogicRow.d.mts +1 -1
  129. package/dist/MaskedInput.d.mts +2 -2
  130. package/dist/{Menu-BekLwm8w.d.mts → Menu-DQXbnpDB.d.mts} +3 -3
  131. package/dist/{Menu-CwlI7BMN.mjs → Menu-Dw6Rcpk6.mjs} +2 -2
  132. package/dist/{Menu-CwlI7BMN.mjs.map → Menu-Dw6Rcpk6.mjs.map} +1 -1
  133. package/dist/Menu.d.mts +1 -1
  134. package/dist/{MiddleTruncatedText-CO58jrNF.mjs → MiddleTruncatedText-DoTyfMem.mjs} +2 -2
  135. package/dist/{MiddleTruncatedText-CO58jrNF.mjs.map → MiddleTruncatedText-DoTyfMem.mjs.map} +1 -1
  136. package/dist/{Modal-ymxlGYKt.d.mts → Modal-Bz5Rer1b.d.mts} +2 -2
  137. package/dist/{Modal-CMiFcXC9.mjs → Modal-dpBu2MKp.mjs} +6 -6
  138. package/dist/{Modal-CMiFcXC9.mjs.map → Modal-dpBu2MKp.mjs.map} +1 -1
  139. package/dist/Modal.d.mts +1 -1
  140. package/dist/{PageHeader-D_0p7UK_.mjs → PageHeader-CLO8SMXV.mjs} +3 -3
  141. package/dist/{PageHeader-D_0p7UK_.mjs.map → PageHeader-CLO8SMXV.mjs.map} +1 -1
  142. package/dist/PageHeader.d.mts +1 -1
  143. package/dist/{PageSelector-Bxulu6vU.d.mts → PageSelector--kFA7Xt6.d.mts} +3 -3
  144. package/dist/PageSelector.d.mts +1 -1
  145. package/dist/{Pagination-Co9CfyFQ.mjs → Pagination-BEddsarh.mjs} +40 -49
  146. package/dist/Pagination-BEddsarh.mjs.map +1 -0
  147. package/dist/{Pagination-Dg-4O7F7.d.mts → Pagination-CglxJr3f.d.mts} +2 -2
  148. package/dist/Pagination.d.mts +1 -1
  149. package/dist/{Pii-JGV9gP95.mjs → Pii-Ct7yDY7d.mjs} +2 -2
  150. package/dist/{Pii-JGV9gP95.mjs.map → Pii-Ct7yDY7d.mjs.map} +1 -1
  151. package/dist/{PillShell-BA7KK1zS.d.mts → PillShell-CvJzkRFh.d.mts} +2 -2
  152. package/dist/PillShell.d.mts +1 -1
  153. package/dist/{Popover-ZAj03lws.mjs → Popover-532iYFek.mjs} +3 -3
  154. package/dist/{Popover-ZAj03lws.mjs.map → Popover-532iYFek.mjs.map} +1 -1
  155. package/dist/{ProgressIndicator-D85HQGSx.d.mts → ProgressIndicator-Cleq0Tfb.d.mts} +1 -1
  156. package/dist/{ProgressIndicator-CQg08vuA.mjs → ProgressIndicator-STyTM0Hq.mjs} +1 -1
  157. package/dist/{ProgressIndicator-CQg08vuA.mjs.map → ProgressIndicator-STyTM0Hq.mjs.map} +1 -1
  158. package/dist/ProgressIndicator.d.mts +1 -1
  159. package/dist/{PseudoClassProps-BHs8TX_3.d.mts → PseudoClassProps-B2R2dyr3.d.mts} +1 -1
  160. package/dist/PseudoClassProps.d.mts +1 -1
  161. package/dist/{Radio-CYV290JI.mjs → Radio-BtomkCkL.mjs} +2 -2
  162. package/dist/{Radio-CYV290JI.mjs.map → Radio-BtomkCkL.mjs.map} +1 -1
  163. package/dist/{RadioGroup-Cq3KV1TN.d.mts → RadioGroup-B3B4PCz6.d.mts} +1 -1
  164. package/dist/{RadioGroup-lWMMtu9V.mjs → RadioGroup-B6UaoJRd.mjs} +2 -2
  165. package/dist/{RadioGroup-lWMMtu9V.mjs.map → RadioGroup-B6UaoJRd.mjs.map} +1 -1
  166. package/dist/RadioGroup.d.mts +1 -1
  167. package/dist/{RangeCalendar-Mh7h74Tp.d.mts → RangeCalendar-C24q-nvR.d.mts} +2 -2
  168. package/dist/RangeCalendar.d.mts +1 -1
  169. package/dist/RangeCalendarPresets.d.mts +1 -1
  170. package/dist/{RouterContext-B3IU1jb0.d.mts → RouterContext-BhPPG7d3.d.mts} +2 -2
  171. package/dist/{RouterContext-CsPnkNdI.mjs → RouterContext-nPSb55p9.mjs} +1 -1
  172. package/dist/{RouterContext-CsPnkNdI.mjs.map → RouterContext-nPSb55p9.mjs.map} +1 -1
  173. package/dist/RouterContext.d.mts +1 -1
  174. package/dist/{RouterLink-CwAqTLC2.d.mts → RouterLink-IDO10cDE.d.mts} +2 -2
  175. package/dist/RouterLink.d.mts +1 -1
  176. package/dist/RuleEditorFields.d.mts +4 -2
  177. package/dist/RulesPill.d.mts +1 -1
  178. package/dist/{SearchInput-BGyUUcoz.d.mts → SearchInput-7pBMxhuN.d.mts} +2 -2
  179. package/dist/SearchInput.d.mts +1 -1
  180. package/dist/SectionHeading.d.mts +1 -1
  181. package/dist/{SegmentedControl-DgDabSgr.d.mts → SegmentedControl-B9yo9yMy.d.mts} +1 -1
  182. package/dist/{SegmentedControl-BEbIcV3g.mjs → SegmentedControl-BNVwf7nL.mjs} +2 -2
  183. package/dist/{SegmentedControl-BEbIcV3g.mjs.map → SegmentedControl-BNVwf7nL.mjs.map} +1 -1
  184. package/dist/SegmentedControl.d.mts +1 -1
  185. package/dist/{Select-wqTtGyga.d.mts → Select-D7_npfZr.d.mts} +3 -3
  186. package/dist/{Select-yC2t_gZb.mjs → Select-DD7mFvR8.mjs} +7 -7
  187. package/dist/{Select-yC2t_gZb.mjs.map → Select-DD7mFvR8.mjs.map} +1 -1
  188. package/dist/Select.d.mts +1 -1
  189. package/dist/SmartTextInput.d.mts +107 -0
  190. package/dist/SmartTextInputCodeDialog.d.mts +18 -0
  191. package/dist/SmartTextInputField.d.mts +25 -0
  192. package/dist/SmartTextInputFunctionDialog.d.mts +37 -0
  193. package/dist/SmartTextInputListbox.d.mts +26 -0
  194. package/dist/SmartTextInputPopover.d.mts +45 -0
  195. package/dist/{Spacer-BFOuo0sZ.mjs → Spacer-J_HuhxX2.mjs} +1 -1
  196. package/dist/{Spacer-BFOuo0sZ.mjs.map → Spacer-J_HuhxX2.mjs.map} +1 -1
  197. package/dist/{Spinner-BlAg8_OX.mjs → Spinner-uVZyOh1T.mjs} +1 -1
  198. package/dist/{Spinner-BlAg8_OX.mjs.map → Spinner-uVZyOh1T.mjs.map} +1 -1
  199. package/dist/{Stack-Bkn0TUDe.mjs → Stack-BkC7FCdF.mjs} +1 -1
  200. package/dist/{Stack-Bkn0TUDe.mjs.map → Stack-BkC7FCdF.mjs.map} +1 -1
  201. package/dist/{Stack-CYqjBXe8.d.mts → Stack-opuYfQvc.d.mts} +1 -1
  202. package/dist/Stack.d.mts +1 -1
  203. package/dist/{StatusIndicator-DT2zNbkp.mjs → StatusIndicator-akDwBiBW.mjs} +1 -1
  204. package/dist/{StatusIndicator-DT2zNbkp.mjs.map → StatusIndicator-akDwBiBW.mjs.map} +1 -1
  205. package/dist/{Sticker-BLbgJxcH.mjs → Sticker-DdhSpTcV.mjs} +3 -3
  206. package/dist/{Sticker-BLbgJxcH.mjs.map → Sticker-DdhSpTcV.mjs.map} +1 -1
  207. package/dist/{Sticker-BmyKaxwx.d.mts → Sticker-rxBNVYlX.d.mts} +4 -4
  208. package/dist/Sticker.d.mts +1 -1
  209. package/dist/StringValueControl.d.mts +1 -1
  210. package/dist/Tab.d.mts +1 -1
  211. package/dist/{TabBar-Bj84q1Mr.mjs → TabBar-DBOPWUUa.mjs} +6 -9
  212. package/dist/TabBar-DBOPWUUa.mjs.map +1 -0
  213. package/dist/{Table-WqNfjasd.mjs → Table--o4ZLRbb.mjs} +4 -4
  214. package/dist/{Table-WqNfjasd.mjs.map → Table--o4ZLRbb.mjs.map} +1 -1
  215. package/dist/{Table-DhdHUQ8V.d.mts → Table-Bt7zAlgQ.d.mts} +1 -1
  216. package/dist/Table.d.mts +1 -1
  217. package/dist/{TableBody-qoSvQDds.d.mts → TableBody-9AYpXi2y.d.mts} +1 -1
  218. package/dist/TableBody.d.mts +1 -1
  219. package/dist/{TableBox-obl64W5Y.mjs → TableBox-BGabyY7E.mjs} +10 -10
  220. package/dist/{TableBox-obl64W5Y.mjs.map → TableBox-BGabyY7E.mjs.map} +1 -1
  221. package/dist/TableBox.d.mts +2 -2
  222. package/dist/{TableBoxCell-DzYMx4Ju.d.mts → TableBoxCell-6ovTrboM.d.mts} +6 -6
  223. package/dist/TableBoxCell.d.mts +1 -1
  224. package/dist/TableBoxField-mGTYb-Bz.d.mts +103 -0
  225. package/dist/TableBoxField.d.mts +2 -103
  226. package/dist/{TableBoxRow-B4rFCvWK.d.mts → TableBoxRow-56QatuNm.d.mts} +3 -3
  227. package/dist/TableBoxRow.d.mts +1 -1
  228. package/dist/{TableBoxRowActions-qMKcVuTL.d.mts → TableBoxRowActions-9rR-k_4H.d.mts} +2 -2
  229. package/dist/TableBoxRowActions.d.mts +1 -1
  230. package/dist/{TableCell-CGPQRc5g.d.mts → TableCell-WD0ultKh.d.mts} +2 -2
  231. package/dist/TableCell.d.mts +1 -1
  232. package/dist/{TableControls-RS_ozBsI.mjs → TableControls-B5UGCoO-.mjs} +629 -306
  233. package/dist/TableControls-B5UGCoO-.mjs.map +1 -0
  234. package/dist/{TableControls-WP78qtET.d.mts → TableControls-DVO-obFo.d.mts} +6 -3
  235. package/dist/TableControls.d.mts +1 -1
  236. package/dist/{TableControlsContext-DZIZSyfX.d.mts → TableControlsContext-BDl9k4o4.d.mts} +2 -2
  237. package/dist/TableControlsContext.d.mts +1 -1
  238. package/dist/{TableHead-36j-_oyn.d.mts → TableHead-DqcFsWpz.d.mts} +1 -1
  239. package/dist/TableHead.d.mts +1 -1
  240. package/dist/{TableHeaderCell-C7gp9j1X.d.mts → TableHeaderCell-C1PJHhXZ.d.mts} +1 -1
  241. package/dist/TableHeaderCell.d.mts +1 -1
  242. package/dist/{TableLayout-CQqIV0vj.d.mts → TableLayout-B4qzMWXH.d.mts} +1 -1
  243. package/dist/TableLayout.d.mts +1 -1
  244. package/dist/{TableRow-BJZM8I8i.d.mts → TableRow-B1yeAiVf.d.mts} +2 -2
  245. package/dist/TableRow.d.mts +1 -1
  246. package/dist/TableTH.d.mts +1 -1
  247. package/dist/{TableViewConfigurationDropdown-Dwy_9FBz.d.mts → TableViewConfigurationDropdown-DBdUHK__.d.mts} +2 -2
  248. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  249. package/dist/{TechnicalSticker-CL0zkOAj.mjs → TechnicalSticker-CALVwnrT.mjs} +4 -4
  250. package/dist/{TechnicalSticker-CL0zkOAj.mjs.map → TechnicalSticker-CALVwnrT.mjs.map} +1 -1
  251. package/dist/{Text-BdluS7Fy.mjs → Text-CSwFifQF.mjs} +1 -1
  252. package/dist/{Text-BdluS7Fy.mjs.map → Text-CSwFifQF.mjs.map} +1 -1
  253. package/dist/{Text-DbtTa83E.d.mts → Text-D4GzsXFA.d.mts} +3 -3
  254. package/dist/Text.d.mts +1 -1
  255. package/dist/{TextArea-CbxF6u7z.d.mts → TextArea-BL8BTgwk.d.mts} +2 -2
  256. package/dist/{TextArea-CfZr5Sk4.mjs → TextArea-kOkhZxNR.mjs} +2 -2
  257. package/dist/{TextArea-CfZr5Sk4.mjs.map → TextArea-kOkhZxNR.mjs.map} +1 -1
  258. package/dist/TextArea.d.mts +1 -1
  259. package/dist/{TextUnderlineTooltip-BgLQuK38.d.mts → TextUnderlineTooltip-Sdxqsr6y.d.mts} +2 -2
  260. package/dist/TextUnderlineTooltip.d.mts +1 -1
  261. package/dist/Tile.d.mts +1 -1
  262. package/dist/Toast.d.mts +1 -1
  263. package/dist/{Toggle-D4ZaUcVt.mjs → Toggle-CZF6iBql.mjs} +4 -4
  264. package/dist/{Toggle-D4ZaUcVt.mjs.map → Toggle-CZF6iBql.mjs.map} +1 -1
  265. package/dist/{Toggle-BYMLrPXk.d.mts → Toggle-cUtrUIIO.d.mts} +1 -1
  266. package/dist/Toggle.d.mts +1 -1
  267. package/dist/{Tooltip-C0FuZS1C.mjs → Tooltip-B-0VRuKT.mjs} +2 -2
  268. package/dist/{Tooltip-C0FuZS1C.mjs.map → Tooltip-B-0VRuKT.mjs.map} +1 -1
  269. package/dist/{Tooltip-4pshzB_i.d.mts → Tooltip-CSM977L6.d.mts} +2 -2
  270. package/dist/Tooltip.d.mts +1 -1
  271. package/dist/{TruncatedText-O7hE3w0O.d.mts → TruncatedText-CCUrvW2a.d.mts} +1 -1
  272. package/dist/VersionHistory.d.mts +1 -1
  273. package/dist/{VersionHistoryItem-CIcEgl0K.d.mts → VersionHistoryItem-DBjL9S5_.d.mts} +1 -1
  274. package/dist/VersionHistoryItem.d.mts +1 -1
  275. package/dist/WizardModal.d.mts +3 -3
  276. package/dist/{accordionTitleTypography-CNB1w3kn.d.mts → accordionTitleTypography--GAczLo7.d.mts} +2 -2
  277. package/dist/accordionTitleTypography.d.mts +1 -1
  278. package/dist/chainTypes-dY6jc22J.d.mts +17 -0
  279. package/dist/{codec-BXVBsB8Y.d.mts → codec-D2uE0_oJ.d.mts} +2 -2
  280. package/dist/codec.d.mts +1 -1
  281. package/dist/{color-3UO63ocQ.d.mts → color-DuKiTH5t.d.mts} +2 -2
  282. package/dist/components/Accordion/index.d.mts +1 -1
  283. package/dist/components/Accordion/index.mjs +2 -2
  284. package/dist/components/Attribute/index.mjs +4 -4
  285. package/dist/components/Badge/index.mjs +1 -1
  286. package/dist/components/Banner/index.mjs +1 -1
  287. package/dist/components/BottomPanel/index.mjs +3 -3
  288. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  289. package/dist/components/Breadcrumbs/index.mjs +1 -1
  290. package/dist/components/Button/index.d.mts +2 -2
  291. package/dist/components/Button/index.mjs +1 -1
  292. package/dist/components/ButtonGroup/index.mjs +2 -2
  293. package/dist/components/Card/index.d.mts +2 -2
  294. package/dist/components/Card/index.mjs +1 -1
  295. package/dist/components/CardV2/index.d.mts +1 -1
  296. package/dist/components/CardV2/index.mjs +1 -1
  297. package/dist/components/Checkbox/index.d.mts +1 -1
  298. package/dist/components/Checkbox/index.mjs +1 -1
  299. package/dist/components/CodeHighlight/index.mjs +2 -2
  300. package/dist/components/Combobox/index.d.mts +2 -2
  301. package/dist/components/Combobox/index.mjs +1 -1
  302. package/dist/components/ConfigFormGroup/index.mjs +2 -2
  303. package/dist/components/DataTable/TableControls/index.d.mts +19 -19
  304. package/dist/components/DataTable/TableControls/index.mjs +1 -1
  305. package/dist/components/DataTable/index.d.mts +2 -2
  306. package/dist/components/DataTable/index.mjs +83 -60
  307. package/dist/components/DataTable/index.mjs.map +1 -1
  308. package/dist/components/DataTable/types.d.mts +9 -2
  309. package/dist/components/DatePicker/index.d.mts +5 -5
  310. package/dist/components/DatePicker/index.mjs +1 -1
  311. package/dist/components/DropdownButton/index.mjs +1 -1
  312. package/dist/components/DropdownMenu/index.d.mts +1 -1
  313. package/dist/components/DropdownMenu/index.mjs +1 -1
  314. package/dist/components/FloatingPanel/index.mjs +3 -3
  315. package/dist/components/FormControl/index.d.mts +2 -2
  316. package/dist/components/FormControl/index.mjs +2 -2
  317. package/dist/components/FormField/index.d.mts +6 -6
  318. package/dist/components/FormField/index.mjs +1 -1
  319. package/dist/components/Grid/index.mjs +1 -1
  320. package/dist/components/HoverCopyableField/index.mjs +1 -1
  321. package/dist/components/ImageTile/index.mjs +7 -7
  322. package/dist/components/Input/index.d.mts +1 -1
  323. package/dist/components/Input/index.mjs +1 -1
  324. package/dist/components/Link/index.mjs +1 -1
  325. package/dist/components/ListBox/index.d.mts +3 -3
  326. package/dist/components/ListBox/index.mjs +1 -1
  327. package/dist/components/LoadingShimmer/index.mjs +1 -1
  328. package/dist/components/MaskedInput/index.mjs +1 -1
  329. package/dist/components/Menu/index.d.mts +1 -1
  330. package/dist/components/Menu/index.mjs +1 -1
  331. package/dist/components/Modal/index.d.mts +1 -1
  332. package/dist/components/Modal/index.mjs +1 -1
  333. package/dist/components/PageHeader/index.mjs +1 -1
  334. package/dist/components/Pagination/index.d.mts +3 -3
  335. package/dist/components/Pagination/index.mjs +1 -1
  336. package/dist/components/Pii/index.mjs +1 -1
  337. package/dist/components/Popover/index.mjs +1 -1
  338. package/dist/components/ProgressBar/index.mjs +1 -1
  339. package/dist/components/ProgressIndicator/index.d.mts +1 -1
  340. package/dist/components/ProgressIndicator/index.mjs +1 -1
  341. package/dist/components/Radio/index.mjs +1 -1
  342. package/dist/components/RadioGroup/index.d.mts +1 -1
  343. package/dist/components/RadioGroup/index.mjs +1 -1
  344. package/dist/components/RightPanel/index.mjs +4 -4
  345. package/dist/components/SegmentedControl/index.d.mts +1 -1
  346. package/dist/components/SegmentedControl/index.mjs +1 -1
  347. package/dist/components/Select/index.d.mts +1 -1
  348. package/dist/components/Select/index.mjs +1 -1
  349. package/dist/components/Slider/index.mjs +1 -1
  350. package/dist/components/SmartTextInput/index.d.mts +5 -0
  351. package/dist/components/SmartTextInput/index.mjs +2035 -0
  352. package/dist/components/SmartTextInput/index.mjs.map +1 -0
  353. package/dist/components/SmartTextInput/parser/method-chain/parser.mjs +1 -1
  354. package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +1 -1
  355. package/dist/components/SmartTextInput/parser/smart-text/parser.mjs +1 -1
  356. package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +3 -72
  357. package/dist/components/Spacer/index.mjs +1 -1
  358. package/dist/components/Spinner/index.mjs +1 -1
  359. package/dist/components/Stack/index.d.mts +1 -1
  360. package/dist/components/Stack/index.mjs +1 -1
  361. package/dist/components/StatusIndicator/index.mjs +1 -1
  362. package/dist/components/Sticker/index.d.mts +1 -1
  363. package/dist/components/Sticker/index.mjs +1 -1
  364. package/dist/components/TabBar/index.mjs +1 -1
  365. package/dist/components/Table/index.d.mts +8 -8
  366. package/dist/components/Table/index.mjs +1 -1
  367. package/dist/components/TableBox/index.d.mts +2 -2
  368. package/dist/components/TableBox/index.mjs +1 -1
  369. package/dist/components/TechnicalSticker/index.mjs +1 -1
  370. package/dist/components/Text/index.d.mts +1 -1
  371. package/dist/components/Text/index.mjs +1 -1
  372. package/dist/components/TextArea/index.d.mts +1 -1
  373. package/dist/components/TextArea/index.mjs +1 -1
  374. package/dist/components/Tile/index.mjs +4 -4
  375. package/dist/components/Toast/index.mjs +1 -1
  376. package/dist/components/Toggle/index.d.mts +1 -1
  377. package/dist/components/Toggle/index.mjs +1 -1
  378. package/dist/components/Tooltip/index.d.mts +3 -3
  379. package/dist/components/Tooltip/index.mjs +1 -1
  380. package/dist/components/VersionHistory/index.d.mts +1 -1
  381. package/dist/components/VersionHistory/index.mjs +8 -8
  382. package/dist/compound-expression.d.mts +1 -1
  383. package/dist/{constants-BOxzLX-O.d.mts → constants-BiOvZGO5.d.mts} +1 -1
  384. package/dist/constants.d.mts +1 -1
  385. package/dist/{createPath-OeTC9kvS.d.mts → createPath-B8EZDtSz.d.mts} +2 -2
  386. package/dist/createPath.d.mts +1 -1
  387. package/dist/{date-filter-BnzR6NxT.mjs → date-filter-CWgCXz85.mjs} +1 -1
  388. package/dist/{date-filter-BnzR6NxT.mjs.map → date-filter-CWgCXz85.mjs.map} +1 -1
  389. package/dist/{date-range-rule-value-BRp5Bi7R.d.mts → date-range-rule-value-DObVM8xO.d.mts} +2 -2
  390. package/dist/date-range-rule-value.d.mts +1 -1
  391. package/dist/{date-rule-intent-CDBtV0ET.d.mts → date-rule-intent-DhMMe_wq.d.mts} +3 -3
  392. package/dist/date-rule-intent.d.mts +1 -1
  393. package/dist/display.d.mts +12 -4
  394. package/dist/fieldPickerOptions.d.mts +5 -3
  395. package/dist/{filter-size-context-CqvQ190x.d.mts → filter-size-context-DaBdvJHf.d.mts} +2 -2
  396. package/dist/filter-size-context.d.mts +1 -1
  397. package/dist/format-date-value.d.mts +6 -1
  398. package/dist/formatDateTime-mPH4DsDC.d.mts +30 -0
  399. package/dist/formatDateTime.d.mts +2 -0
  400. package/dist/helpers.d.mts +24 -10
  401. package/dist/i18n-UiE7OC4k.mjs +203 -0
  402. package/dist/i18n-UiE7OC4k.mjs.map +1 -0
  403. package/dist/{index-BXSe73Xn.d.mts → index-Blo6W_k0.d.mts} +2 -2
  404. package/dist/{index-wKK9f9La.d.mts → index-CTcM_LlP.d.mts} +4 -4
  405. package/dist/{index-CyAok7As.d.mts → index-CeUb5INA.d.mts} +2 -2
  406. package/dist/index-bHnO4ZKt.d.mts +1 -0
  407. package/dist/index-kxcPLmUx2.d.mts +1 -0
  408. package/dist/index.d.mts +1 -1
  409. package/dist/index2.d.mts +1 -1
  410. package/dist/index3.d.mts +3 -3
  411. package/dist/index4.d.mts +1 -1
  412. package/dist/index5.d.mts +14 -14
  413. package/dist/{input-C6cyiqm2.d.mts → input-D9rsMlzl.d.mts} +3 -3
  414. package/dist/inputFields-CXelxYhd.d.mts +71 -0
  415. package/dist/inputFields.d.mts +2 -71
  416. package/dist/{intersperse-Df9zw7Bk.mjs → intersperse-ObkRVOag.mjs} +1 -1
  417. package/dist/{intersperse-Df9zw7Bk.mjs.map → intersperse-ObkRVOag.mjs.map} +1 -1
  418. package/dist/{jsonSchema-CfGi1bzI.d.mts → jsonSchema-BMPLdT4p.d.mts} +1 -1
  419. package/dist/lib/MiddleTruncatedText.mjs +1 -1
  420. package/dist/lib/PDSProvider.d.mts +14 -2
  421. package/dist/lib/PDSProvider.mjs +15 -8
  422. package/dist/lib/PDSProvider.mjs.map +1 -1
  423. package/dist/lib/TruncatedText.d.mts +1 -1
  424. package/dist/lib/TruncatedText.mjs +1 -1
  425. package/dist/lib/TruncatedText.mjs.map +1 -1
  426. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  427. package/dist/lib/TruncatedTextWithTooltip.mjs +2 -2
  428. package/dist/lib/TruncatedTextWithTooltip.mjs.map +1 -1
  429. package/dist/lib/chainTypes.d.mts +2 -17
  430. package/dist/lib/color.d.mts +1 -1
  431. package/dist/lib/customFunctionSchema.d.mts +1 -1
  432. package/dist/lib/date-filter/index.d.mts +2 -2
  433. package/dist/lib/date-filter/index.mjs +1 -1
  434. package/dist/lib/i18n/index.d.mts +4 -0
  435. package/dist/lib/i18n/index.mjs +2 -0
  436. package/dist/lib/jsonSchema.d.mts +1 -1
  437. package/dist/lib/jsonSchemaType.d.mts +1 -1
  438. package/dist/lib/message.d.mts +1 -1
  439. package/dist/lib/methodChain.d.mts +2 -2
  440. package/dist/lib/methodChain.mjs +1 -2
  441. package/dist/lib/methodChainNormalize.d.mts +2 -2
  442. package/dist/lib/methodChainTypes.d.mts +1 -1
  443. package/dist/lib/objectSchemaTypes.d.mts +1 -1
  444. package/dist/lib/platformObject.d.mts +1 -1
  445. package/dist/lib/pseudoClass.d.mts +1 -1
  446. package/dist/lib/router/adapters/reactRouter.d.mts +1 -1
  447. package/dist/lib/router/adapters/reactRouter.mjs +1 -1
  448. package/dist/lib/router/adapters/tanstack.d.mts +1 -1
  449. package/dist/lib/router/adapters/tanstack.mjs +1 -1
  450. package/dist/lib/router/index.d.mts +5 -5
  451. package/dist/lib/router/index.mjs +2 -2
  452. package/dist/lib/schemaOptions.d.mts +2 -173
  453. package/dist/lib/schemaOptions.mjs +1 -1
  454. package/dist/lib/semanticColor.d.mts +1 -1
  455. package/dist/lib/useChain.d.mts +2 -0
  456. package/dist/lib/useChain.mjs +2 -0
  457. package/dist/listbox-options-BFaMbK-g.d.mts +38 -0
  458. package/dist/listbox-options.d.mts +2 -0
  459. package/dist/{message-CblP0EjG.d.mts → message-BOzjC5yA.d.mts} +1 -1
  460. package/dist/{methodChain-Pk1C3i_E.d.mts → methodChain-CGTIWafl.d.mts} +4 -4
  461. package/dist/{methodChain-DAQxLgxt.mjs → methodChain-xZ1_vhbz.mjs} +2 -2
  462. package/dist/{methodChain-DAQxLgxt.mjs.map → methodChain-xZ1_vhbz.mjs.map} +1 -1
  463. package/dist/{methodChainTypes-CqWzfx0M.d.mts → methodChainTypes-BtSMV5OZ.d.mts} +2 -2
  464. package/dist/mixins/focus.d.mts +1 -1
  465. package/dist/mixins/hoverable.d.mts +2 -2
  466. package/dist/mixins/input.d.mts +1 -1
  467. package/dist/mixins/menuItem.d.mts +2 -2
  468. package/dist/mixins/scrollbar.d.mts +1 -1
  469. package/dist/mixins/text.d.mts +1 -1
  470. package/dist/{operators-CoXL5Hv6.d.mts → operators-DfvW8Kmr.d.mts} +16 -5
  471. package/dist/operators.d.mts +2 -2
  472. package/dist/{palette-CxXUs1Fu.d.mts → palette-CBOBcVu3.d.mts} +3 -3
  473. package/dist/palette.d.mts +1 -1
  474. package/dist/{parser-Kxos6siN.mjs → parser-BeTiVjRs.mjs} +3 -2
  475. package/dist/{parser-Kxos6siN.mjs.map → parser-BeTiVjRs.mjs.map} +1 -1
  476. package/dist/patterns/LayoutLoadingShimmer/index.mjs +5 -5
  477. package/dist/patterns/PageLayout/index.mjs +2 -2
  478. package/dist/{components → patterns}/WizardModal/index.mjs +5 -5
  479. package/dist/patterns/WizardModal/index.mjs.map +1 -0
  480. package/dist/reactRouterFallback.d.mts +1 -1
  481. package/dist/relative-date-label.d.mts +1 -1
  482. package/dist/{router-7FYDW80v.mjs → router-COrZcVkf.mjs} +2 -2
  483. package/dist/{router-7FYDW80v.mjs.map → router-COrZcVkf.mjs.map} +1 -1
  484. package/dist/safe-parse.d.mts +23 -0
  485. package/dist/schemaOptions-DTeNBwir.d.mts +173 -0
  486. package/dist/{semantic-CFMBsuiJ.d.mts → semantic-CfiNA4Yy.d.mts} +1 -1
  487. package/dist/{semanticColor-DuJCmDrH.d.mts → semanticColor-BCPOKF9L.d.mts} +3 -3
  488. package/dist/strings-BaQZhOjo.d.mts +143 -0
  489. package/dist/strings.d.mts +2 -0
  490. package/dist/{text-D8HPjiEX.d.mts → text-ucZmPNyH.d.mts} +1 -1
  491. package/dist/{theme-BcaR-Au5.d.mts → theme-CAPmp1it.d.mts} +3 -3
  492. package/dist/theme.d.mts +1 -1
  493. package/dist/tone.d.mts +3 -3
  494. package/dist/tree.d.mts +9 -0
  495. package/dist/{types-DgyGecdM.d.mts → types-B1KzKgBp.d.mts} +1 -1
  496. package/dist/types-BB5WwerD.d.mts +72 -0
  497. package/dist/{types-CoVZwrMW.d.mts → types-BfrEduGv.d.mts} +2 -2
  498. package/dist/{types-BCiq4hGv.d.mts → types-CBfgdnuB.d.mts} +1 -1
  499. package/dist/{types-CkpixGWr.d.mts → types-ClbV4wNp.d.mts} +1 -1
  500. package/dist/{types-Cl-w8tYc.d.mts → types-CoTzVfFl.d.mts} +1 -1
  501. package/dist/types-CptsgFbu.d.mts +83 -0
  502. package/dist/{types-C4WUSW3e.d.mts → types-Rj-C3LGL.d.mts} +2 -2
  503. package/dist/{types-BGMmkUpy.d.mts → types-l-arEBLb.d.mts} +1 -1
  504. package/dist/types.d.mts +1 -1
  505. package/dist/types2.d.mts +1 -1
  506. package/dist/types3.d.mts +1 -1
  507. package/dist/types4.d.mts +1 -1
  508. package/dist/types5.d.mts +1 -1
  509. package/dist/types6.d.mts +1 -1
  510. package/dist/types7.d.mts +2 -0
  511. package/dist/{url-state-8j_ef8Uf.d.mts → url-state-CrnZ3Ocy.d.mts} +2 -2
  512. package/dist/url-state.d.mts +1 -1
  513. package/dist/useChain-Cu4KDfFk.mjs +4589 -0
  514. package/dist/useChain-Cu4KDfFk.mjs.map +1 -0
  515. package/dist/useChain-DQq1UsGZ.d.mts +77 -0
  516. package/dist/useChainAtCursor.d.mts +87 -0
  517. package/dist/useCodeChainFunctionPanel.d.mts +26 -0
  518. package/dist/useComboboxFooterAction.d.mts +1 -1
  519. package/dist/{useFilterStateV2-CW6eght1.d.mts → useFilterStateV2-CGGABOcq.d.mts} +3 -3
  520. package/dist/useFilterStateV2.d.mts +1 -1
  521. package/dist/{useFormField-CLRZkUZt.d.mts → useFormField-4w9TNFgD.d.mts} +2 -2
  522. package/dist/{useFormField-XezSxho_.mjs → useFormField-CbNYbDdp.mjs} +2 -2
  523. package/dist/{useFormField-XezSxho_.mjs.map → useFormField-CbNYbDdp.mjs.map} +1 -1
  524. package/dist/useFormField.d.mts +1 -1
  525. package/dist/{useFormGroup-C7Cax8zO.mjs → useFormGroup-CsKC93Pt.mjs} +1 -1
  526. package/dist/{useFormGroup-C7Cax8zO.mjs.map → useFormGroup-CsKC93Pt.mjs.map} +1 -1
  527. package/dist/{useLocationPathname-DH5Tdq5X.d.mts → useLocationPathname-CZwH8h5n.d.mts} +1 -1
  528. package/dist/useLocationPathname.d.mts +1 -1
  529. package/dist/{useTableBoxDragAndDrop-Da4TiYBT.d.mts → useTableBoxDragAndDrop-Bw93rNFH.d.mts} +1 -1
  530. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  531. package/dist/{useToggle-DUHQjohK.mjs → useToggle-DRzCDqrc.mjs} +1 -1
  532. package/dist/{useToggle-DUHQjohK.mjs.map → useToggle-DRzCDqrc.mjs.map} +1 -1
  533. package/dist/useTruncation.d.mts +1 -1
  534. package/dist/{utilities-DcsbI71T.d.mts → utilities-B8PzMOza.d.mts} +1 -1
  535. package/dist/utilities.d.mts +1 -1
  536. package/dist/utils/storybook.mjs +1 -1
  537. package/dist/utils/testing.d.mts +1 -1
  538. package/dist/utils.d.mts +1 -1
  539. package/dist/utils4.d.mts +111 -0
  540. package/dist/{validation-BgwNghi2.d.mts → validation-DP8f6tgh.d.mts} +3 -3
  541. package/dist/validation.d.mts +1 -1
  542. package/dist/validation2.d.mts +64 -0
  543. package/dist/{value-control-resolver-B0HDRxRN.d.mts → value-control-resolver-CwjOaVAn.d.mts} +2 -2
  544. package/dist/value-control-resolver.d.mts +1 -1
  545. package/dist/variables/effect.d.mts +1 -1
  546. package/dist/variables/semantic.d.mts +1 -1
  547. package/llms.txt +2 -2
  548. package/package.json +12 -3
  549. package/skills/ui-authoring/COMPONENTS.md +1 -1
  550. package/skills/ui-authoring/PATTERNS.md +1 -0
  551. package/skills/ui-authoring/SKILL.md +23 -0
  552. package/dist/DatePicker-C7z1yodK.mjs.map +0 -1
  553. package/dist/Pagination-Co9CfyFQ.mjs.map +0 -1
  554. package/dist/TabBar-Bj84q1Mr.mjs.map +0 -1
  555. package/dist/TableControls-RS_ozBsI.mjs.map +0 -1
  556. package/dist/components/WizardModal/index.mjs.map +0 -1
  557. /package/dist/{index-B24gUwOx.d.mts → index-1-AkepUA.d.mts} +0 -0
  558. /package/dist/{index-BFnNtGdX.d.mts → index-B-Y-ZG2x.d.mts} +0 -0
  559. /package/dist/{index-BNRXMhlr.d.mts → index-BO_854F2.d.mts} +0 -0
  560. /package/dist/{index-BPiqSRRl.d.mts → index-BSVhZrWN.d.mts} +0 -0
  561. /package/dist/{index-BYd3Btr1.d.mts → index-BYARwRq7.d.mts} +0 -0
  562. /package/dist/{index-C6HcjJiY.d.mts → index-BbPybiOV.d.mts} +0 -0
  563. /package/dist/{index-CEqOS-7M.d.mts → index-BcsXXrHq.d.mts} +0 -0
  564. /package/dist/{index-CjDodOH2.d.mts → index-C9achTF6.d.mts} +0 -0
  565. /package/dist/{index-CoUVmp_Q.d.mts → index-CCt0lwyI.d.mts} +0 -0
  566. /package/dist/{index-DB7t8whN.d.mts → index-CFuHCx9T.d.mts} +0 -0
  567. /package/dist/{index-DBGd4WeR.d.mts → index-CliqZ9rj.d.mts} +0 -0
  568. /package/dist/{index-DWfPppPU.d.mts → index-CryTAIZM.d.mts} +0 -0
  569. /package/dist/{index-DeVKzGce.d.mts → index-CzItj62a.d.mts} +0 -0
  570. /package/dist/{index-DedbSZMv.d.mts → index-CzUpNo0e.d.mts} +0 -0
  571. /package/dist/{index-Deol7ZWO.d.mts → index-D-giXKyu.d.mts} +0 -0
  572. /package/dist/{index-Jh0C5PIG.d.mts → index-DMRtRo7y.d.mts} +0 -0
  573. /package/dist/{index-VWno75SQ.d.mts → index-DUF59i3Q2.d.mts} +0 -0
  574. /package/dist/{index-fxXoW-qc.d.mts → index-DgJfEygr.d.mts} +0 -0
  575. /package/dist/{index-gVcIuWLd.d.mts → index-Es5nKSSL.d.mts} +0 -0
  576. /package/dist/{index-zeAhjge4.d.mts → index-T2S0_qsg.d.mts} +0 -0
  577. /package/dist/{components → patterns}/WizardModal/index.d.mts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["parse","DialogContent","ArrowLeftIcon","Input"],"sources":["../../../components/SmartTextInput/parser/tree.ts","../../../components/SmartTextInput/HighlightedText.tsx","../../../components/SmartTextInput/types.ts","../../../components/SmartTextInput/parser/safe-parse.ts","../../../components/SmartTextInput/utils.ts","../../../components/SmartTextInput/listbox-options.ts","../../../components/SmartTextInput/SmartTextInputFunctionDialog.tsx","../../../components/SmartTextInput/SmartTextInputCodeDialog.tsx","../../../components/SmartTextInput/SmartTextInputPopover.tsx","../../../components/SmartTextInput/SmartTextInputListbox.tsx","../../../components/SmartTextInput/useChainAtCursor.ts","../../../components/SmartTextInput/useCodeChainFunctionPanel.tsx","../../../components/SmartTextInput/validation.tsx","../../../components/SmartTextInput/SmartTextInput.tsx","../../../components/SmartTextInput/SmartTextInputField.tsx"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Pure AST traversal helpers\n// ---------------------------------------------------------------------------\n\nimport { NodeType, type ASTNode } from './smart-text/types';\n\nfunction getChildren(node: ASTNode): ASTNode[] {\n return (node.children as ASTNode[]) ?? [];\n}\n\nexport function findAll(node: ASTNode, type: string, acc: ASTNode[] = []): ASTNode[] {\n if (node.type === type) {\n acc.push(node);\n }\n getChildren(node).forEach((c) => findAll(c, type, acc));\n return acc;\n}\n\nexport function resolve(node: ASTNode, charIdx: number): ASTNode | null {\n if (charIdx < node.start || charIdx >= Math.max(node.end, node.start + 1)) {\n return null;\n }\n const children = getChildren(node);\n\n for (let i = 0; i < children.length; i++) {\n const hit = resolve(children[i], charIdx);\n if (hit) {\n return hit;\n }\n }\n return node;\n}\n\nfunction findAncestor(\n root: ASTNode,\n target: ASTNode,\n pred: (n: ASTNode) => boolean,\n): ASTNode | null {\n // Returns [found, result]: found=true means target was encountered in subtree\n function walk(n: ASTNode, ancestors: ASTNode[]): [boolean, ASTNode | null] {\n if (n === target) {\n for (let i = ancestors.length - 1; i >= 0; i--) {\n if (pred(ancestors[i])) {\n return [true, ancestors[i]];\n }\n }\n return [true, null];\n }\n const children = getChildren(n);\n for (let j = 0; j < children.length; j++) {\n const [found, result] = walk(children[j], ancestors.concat([n]));\n if (found) {\n return [true, result];\n }\n }\n return [false, null];\n }\n const [, result] = walk(root, []);\n return result;\n}\n\nexport function enclosingExpr(root: ASTNode, node: ASTNode): ASTNode | null {\n return findAncestor(\n root,\n node,\n (a) => a.type === NodeType.Handlebars || a.type === NodeType.Code,\n );\n}\n","// oxlint-disable persona-web/no-core-color-tokens\n\nimport { forwardRef, type FC, type ReactNode } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { BorderRadius, Color, Spacing, Typography } from '@persona/design-tokens';\nimport { LoaderIcon } from '@persona/icons';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport { rotate } from 'design-system/variables/keyframes';\n\nimport { type ASTNode, type ErrorNode, isASTChainNode, NodeType } from './parser/smart-text/types';\nimport { enclosingExpr, findAll } from './parser/tree';\nimport type { Mode, TextStyle, ValueType } from './types';\nimport type { SchemaValidator } from './validation';\n\nconst LoadingIndicator = styled(LoaderIcon)`\n color: ${Color.BorderIconSecondary};\n animation: ${rotate} linear 1s infinite;\n`;\n\nconst LoadingContainer = styled.div`\n z-index: 4;\n position: absolute;\n right: 1px;\n top: 1px;\n bottom: 1px;\n padding: ${Spacing[2]} ${Spacing[3]};\n background: linear-gradient(to right, ${Color.BackgroundPrimary}00, ${Color.BackgroundSecondary}FF);\n`;\n\ntype OverlayContainerProps = {\n $variant: 'default' | 'table-cell';\n};\nexport const OverlayContainer = styled.div<OverlayContainerProps>`\n position: relative;\n background: ${Color.BackgroundPrimary};\n overflow: hidden;\n width: 100%;\n\n border-radius: ${BorderRadius.Md};\n\n &:focus-within,\n &[data-input-is-focused='true'] {\n ${focusStyle}\n }\n\n ${({ $variant }) =>\n $variant === 'table-cell' &&\n css`\n background: transparent;\n outline: none !important;\n border-radius: 0;\n `};\n`;\n\ntype OverlayProps = {\n $size: 'sm' | 'md';\n $variant: 'default' | 'table-cell';\n};\nconst Overlay = styled.div<OverlayProps>`\n ${Typography.TextMono}\n\n line-height: 1;\n\n position: absolute;\n inset: 0;\n /* 8px + 12px with 1px buffer to account for underlying input border. Needs to be margin in X\n seemingly for overflow to work correctly. */\n margin: 0 13px;\n padding: 9px 0;\n pointer-events: none;\n white-space: pre;\n display: flex;\n align-items: center;\n box-sizing: border-box;\n overflow: hidden;\n\n ${({ $size }) =>\n $size === 'sm' &&\n css`\n font-size: 12px;\n margin: 0 9px;\n `};\n ${({ $variant }) =>\n $variant === 'table-cell' &&\n css`\n margin: 0;\n padding: 0;\n `};\n`;\n\ntype MonoSpanProps = {\n $style: TextStyle;\n $interactive: boolean;\n};\nexport const MonoSpan = styled.span<MonoSpanProps>`\n color: ${({ $style }) => {\n switch ($style) {\n case 'schemaError':\n case 'syntaxError':\n return Color.TextDanger;\n case 'token':\n case 'hoverableToken':\n return Color.TextActive;\n }\n }};\n\n border-radius: 0;\n text-decoration: ${({ $style }) => ($style === 'syntaxError' ? `underline wavy ${Color.TextDanger}` : 'none')};\n text-decoration-skip-ink: none;\n\n ${({ $style, $interactive }) => {\n if (!$interactive) {\n return;\n }\n\n switch ($style) {\n case 'schemaError':\n return css`\n position: relative;\n pointer-events: auto;\n cursor: pointer;\n\n &::after {\n content: '';\n position: absolute;\n inset: -2px;\n background-color: ${Color.CoreRed600};\n opacity: 0.1;\n pointer-events: none;\n }\n &:hover::after {\n opacity: 0.2;\n }\n `;\n case 'hoverable':\n case 'hoverableToken':\n return css`\n position: relative;\n pointer-events: auto;\n cursor: pointer;\n\n &:hover::after {\n content: '';\n position: absolute;\n inset: -2px;\n background-color: ${Color.CoreBlue600};\n opacity: 0.1;\n pointer-events: none;\n }\n `;\n }\n }};\n`;\n\n/**\n * Returns {str, style} segments covering the entire value, based on AST node boundaries.\n * - 'token': delimiter nodes ({{, }}, ${, }), dot nodes\n * - 'hoverableToken': first link of any chain (single-link or multi-segment)\n * - 'hoverable': non-first links of multi-segment chains\n * - 'schemaError': first invalid link in each chain, shown when unfocused\n * - 'syntaxError': error nodes with actual content\n * - 'none': everything else\n */\nexport function buildHighlights(\n tree: ASTNode,\n value: string,\n focused: boolean,\n schemaValidator: SchemaValidator,\n): { str: string; style: TextStyle }[] {\n const len = value.length;\n // Keyed by start position — last writer wins (used for highlightedToken override).\n const spanMap = new Map<number, { start: number; end: number; style: TextStyle }>();\n\n function setSpan(start: number, end: number, style: TextStyle) {\n if (start < end) {\n spanMap.set(start, { start, end, style });\n }\n }\n\n // Always: delimiter tokens ({{, }}, ${, }) and dot nodes.\n for (const type of [\n NodeType.HBOpen,\n NodeType.HBClose,\n NodeType.CodeOpen,\n NodeType.CodeClose,\n 'dot',\n ]) {\n findAll(tree, type).forEach((n) => setSpan(n.start, n.end, 'token'));\n }\n\n // Classify Error nodes:\n // WIP (work-in-progress): Errors marked with wip:true — trailing dot sentinels and\n // incomplete function calls. When focused: suppress. When not focused: show only\n // the last char (trailing comma for function WIP, the dot itself for trailing dot).\n // Immediate: non-WIP non-zero Errors (e.g. \"func(,\" comma with no valid params).\n // Always shown as syntaxError.\n // Non-WIP zero-length sentinels: skipped here; only used for hasIncomplete detection.\n findAll(tree, NodeType.Error).forEach((e) => {\n const node = e as ErrorNode;\n // Skip non-WIP zero-length sentinels — they only drive hasIncomplete, not styling.\n if (e.start >= e.end && !node.wip) {\n return;\n }\n if (node.wip) {\n // WIP chain error: suppress when focused; show only the trailing char when not.\n if (!focused) {\n setSpan(e.end - 1, e.end, 'syntaxError');\n }\n } else {\n // Immediately-invalid error: always show.\n setSpan(e.start, e.end, 'syntaxError');\n }\n });\n\n // Pre-pass: collect start positions of chains that appear as function/custom-function\n // parameters. These are rendered as a single hoverable span by the param-processing below,\n // so they must not be independently processed as multi-segment chains (which would override).\n const paramChainStarts = new Set<number>();\n findAll(tree, NodeType.Chain).forEach((chain) => {\n if (!isASTChainNode(chain)) {\n return;\n }\n for (const link of chain.children) {\n if (link.type === NodeType.Function || link.type === NodeType.CustomFunction) {\n for (const child of link.children) {\n if (child.type === NodeType.Chain) {\n paramChainStarts.add(child.start);\n }\n }\n }\n }\n });\n\n // Always: first identifier link of a chain gets 'hoverableToken'; subsequent links get\n // 'hoverable'. This applies to single-link chains (the root alone, no dot) as well as\n // multi-segment chains, provided the chain has no immediate non-wip errors (which would\n // indicate the expression is malformed, e.g. \"im in method chains but forgot\").\n // Function/CustomFunction nodes are split: the name gets a span, each param gets a span,\n // and parens fall through as 'none' gaps (no explicit span).\n findAll(tree, NodeType.Chain).forEach((chain) => {\n if (!isASTChainNode(chain)) {\n return;\n }\n if (paramChainStarts.has(chain.start)) {\n return;\n }\n const hasDot = chain.children.some((l) => l.type === NodeType.Dot);\n if (!hasDot) {\n // Single-link chain: skip if there's a non-wip error sibling (malformed expression).\n const hasImmediateError = chain.children.some(\n (l) => l.type === NodeType.Error && !(l as ErrorNode).wip,\n );\n if (hasImmediateError) {\n return;\n }\n }\n chain.children.forEach((link, idx) => {\n if (\n link.type === NodeType.Identifier ||\n link.type === NodeType.Function ||\n link.type === NodeType.CustomFunction\n ) {\n const style = idx === 0 ? 'hoverableToken' : 'hoverable';\n\n if (link.type === NodeType.Function || link.type === NodeType.CustomFunction) {\n // Function name always gets its own span.\n // Params only get individual spans when the call is complete (has a ParenClose).\n // WIP calls (e.g. `func(#1,`) have no ParenClose — their remainder stays a 'none' gap.\n // CustomFunction includes a leading '@' in link.start but not in link.name,\n // so add 1 to account for the '@' character.\n const nameEnd =\n link.type === NodeType.CustomFunction\n ? link.start + 1 + link.name.length\n : link.start + link.name.length;\n setSpan(link.start, nameEnd, style);\n const hasParenClose = link.children.some((child) => child.type === NodeType.ParenClose);\n if (hasParenClose) {\n for (const child of link.children) {\n if (\n child.type !== NodeType.Error &&\n child.type !== NodeType.ParenOpen &&\n child.type !== NodeType.ParenClose\n ) {\n setSpan(child.start, child.end, style);\n }\n }\n }\n } else {\n setSpan(link.start, link.end, style);\n }\n }\n });\n });\n\n // When not focused: empty Handlebars expressions ({{}}) have an HBClose but no chain.\n // The zero-length error sentinel signals incompleteness; mark the HBClose as syntaxError\n // so the closing }} is styled as an error rather than a token.\n if (!focused) {\n findAll(tree, NodeType.Handlebars).forEach((node) => {\n const children = (node as { children?: ASTNode[] }).children ?? [];\n const closeNode = children.find((c) => c.type === NodeType.HBClose);\n const hasChain = children.some((c) => c.type === NodeType.Chain);\n if (closeNode && !hasChain) {\n setSpan(closeNode.start, closeNode.end, 'syntaxError');\n }\n });\n }\n\n // Schema errors — applied last so they override token/highlighted styles.\n // Only shown when not focused (matches the unfocused-only display intent).\n // Each top-level chain is validated independently so that multiple chains in the same\n // value (e.g. \"{{a.bad}} {{b.bad}}\") each get their own schema error highlight.\n if (!focused) {\n const topLevelChains = findAll(tree, NodeType.Chain)\n .filter(isASTChainNode)\n .filter((c) => !paramChainStarts.has(c.start));\n for (const chain of topLevelChains) {\n // When the chain is inside a closed {{...}} Handlebars, wrap it in a synthetic\n // Handlebars node so that findSchemaErrors can detect the context and enforce the\n // stringable-type constraint. Without the wrapper the chain has no ancestors and\n // enclosingExpr would return null, silently skipping the check.\n // Unclosed Handlebars (missing }}) are excluded — the user is still typing.\n const enclosingNode = enclosingExpr(tree, chain);\n const isInClosedHandlebars =\n enclosingNode?.type === NodeType.Handlebars &&\n !enclosingNode.children?.some(\n (c) =>\n c.type === NodeType.Error && (c as { kind?: string }).kind === 'unclosedHandlebars',\n );\n const validationTree: ASTNode = isInClosedHandlebars\n ? { type: NodeType.Handlebars, start: chain.start, end: chain.end, children: [chain] }\n : chain;\n const chainError = schemaValidator(validationTree);\n if (chainError != null) {\n setSpan(chainError.start, chainError.end, 'schemaError');\n }\n }\n }\n\n // Build result: sorted spans with 'none' gaps filled in.\n // The overlap guard handles cases where a wider span (e.g. a schema error covering an entire\n // function) has already advanced pos past inner sub-spans (e.g. param spans).\n const sorted = Array.from(spanMap.values()).sort((a, b) => a.start - b.start);\n const result: { str: string; style: TextStyle }[] = [];\n let pos = 0;\n for (const span of sorted) {\n if (span.start < pos) {\n continue;\n }\n if (pos < span.start) {\n result.push({ str: value.slice(pos, span.start), style: 'none' });\n }\n result.push({ str: value.slice(span.start, span.end), style: span.style });\n pos = span.end;\n }\n if (pos < len) {\n result.push({ str: value.slice(pos, len), style: 'none' });\n }\n return result.filter((r) => r.str.length > 0);\n}\n\ninterface HighlightedTextOverlayProps {\n children: React.ReactNode;\n onWheel: (e: React.WheelEvent) => void;\n onMouseMove?: (e: React.MouseEvent) => void;\n highlightedText: ReactNode;\n overlayRef: React.RefObject<HTMLDivElement>;\n /** When false the overlay is pointer-events:auto so identifier spans are directly clickable. */\n inputIsFocused?: boolean;\n mode: Mode;\n size: 'sm' | 'md';\n variant: 'default' | 'table-cell';\n valueType: ValueType;\n isLoading: boolean;\n}\n\nexport const HighlightedTextOverlay = forwardRef<HTMLDivElement, HighlightedTextOverlayProps>(\n function HighlightedTextOverlay(\n {\n children,\n onWheel,\n onMouseMove,\n highlightedText,\n overlayRef,\n inputIsFocused,\n mode,\n size,\n variant,\n valueType,\n isLoading,\n },\n ref,\n ) {\n return (\n <OverlayContainer\n ref={ref}\n onWheel={onWheel}\n onMouseMove={onMouseMove}\n $variant={variant}\n data-input-is-focused={inputIsFocused}\n data-test='smart-text-input'\n data-mode={mode}\n data-value-type={valueType}\n >\n <Overlay\n ref={overlayRef}\n data-test='smart-text-input__highlight'\n aria-hidden\n style={{ zIndex: 3 }}\n $size={size}\n $variant={variant}\n >\n {highlightedText}\n </Overlay>\n {isLoading && (\n <LoadingContainer>\n <LoadingIndicator aria-label='Loading schema…' role='status' />\n </LoadingContainer>\n )}\n {children}\n </OverlayContainer>\n );\n },\n);\n\n/**\n * Render the value with syntax highlighting and clickable link spans using the parsed AST.\n */\nexport const HighlightedText: FC<{\n value: string;\n tree: ASTNode;\n focused: boolean;\n interactive: boolean;\n schemaValidator: SchemaValidator;\n /** Called when the user mousedowns on a clickable identifier span. */\n onLinkMouseDown: (linkStart: number, linkEnd: number, e: React.MouseEvent) => void;\n dontHighlightErrors?: boolean;\n cursorIdx?: number | null;\n}> = ({\n value,\n tree,\n focused,\n interactive,\n schemaValidator,\n onLinkMouseDown,\n dontHighlightErrors = false,\n cursorIdx,\n}) => {\n const runs = buildHighlights(tree, value, focused, schemaValidator);\n\n // Build a map from span-start-position → link boundaries for all chain identifiers.\n // Used to add data-link-start/end attributes so the mousedown handler can identify\n // which identifier was clicked without needing mouse coordinates.\n //\n // For function nodes:\n // - The name span maps to the full [link.start, link.end] so clicking the name selects\n // the entire function text for replacement.\n // - Each param span maps to a zero-length [child.start, child.start] so clicking a param\n // positions the cursor inside the function's param area, which triggers the function dialog.\n const linkMap = new Map<number, { start: number; end: number }>();\n findAll(tree, NodeType.Chain).forEach((chainNode) => {\n if (!isASTChainNode(chainNode)) {\n return;\n }\n chainNode.children.forEach((link) => {\n if (\n link.type === NodeType.Identifier ||\n link.type === NodeType.Function ||\n link.type === NodeType.CustomFunction\n ) {\n linkMap.set(link.start, { start: link.start, end: link.end });\n if (link.type === NodeType.Function || link.type === NodeType.CustomFunction) {\n const hasParenClose = link.children.some((child) => child.type === NodeType.ParenClose);\n if (hasParenClose) {\n for (const child of link.children) {\n if (\n child.type !== NodeType.Error &&\n child.type !== NodeType.ParenOpen &&\n child.type !== NodeType.ParenClose\n ) {\n linkMap.set(child.start, { start: child.start, end: child.start });\n }\n }\n }\n }\n }\n });\n });\n\n let pos = 0;\n return (\n <>\n {runs.map((r) => {\n const start = pos;\n pos += r.str.length;\n const linkInfo = linkMap.get(start);\n const isLinkSpan = linkInfo != null;\n const isHidingErrorSpan =\n dontHighlightErrors && (r.style === 'schemaError' || r.style === 'syntaxError');\n // Block link clicks when cursor is within the link span.\n const cursorWithinSpan =\n focused &&\n isLinkSpan &&\n cursorIdx != null &&\n cursorIdx >= start &&\n cursorIdx <= start + r.str.length;\n\n return (\n <MonoSpan\n key={start}\n data-style={r.style}\n $style={isHidingErrorSpan ? 'none' : r.style}\n $interactive={interactive && isLinkSpan && !cursorWithinSpan}\n onMouseDown={\n isLinkSpan && interactive && onLinkMouseDown\n ? (e: React.MouseEvent) => {\n e.preventDefault(); // prevent browser from blurring input after el.focus()\n onLinkMouseDown(linkInfo.start, linkInfo.end, e);\n }\n : undefined\n }\n >\n {r.str.replace(/ /g, '\\u00a0')}\n </MonoSpan>\n );\n })}\n </>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport type { ChainRoot } from 'design-system/lib/chainTypes';\nimport type { JsonSchema } from 'design-system/lib/jsonSchema';\nimport type { FunctionParamType, MethodChainNode } from 'design-system/lib/methodChain';\nimport type { FunctionJsonSchema } from 'design-system/lib/objectSchemaTypes';\n\n/**\n * The mode of the SmartTextInput. Determined by the position of the cursor in the input and the\n * result of the parser.\n *\n * Mode determines behavior of the input.\n */\nexport enum Mode {\n MethodChain = 'method-chain',\n Code = 'code',\n Text = 'text',\n}\n\n/**\n * The value type of the SmartTextInput. Value type indicates the semantic meaning of the input's\n * raw string value.\n */\nexport enum ValueType {\n Interpolation = 'interpolation',\n MethodChain = 'method-chain',\n}\n\n/**\n * The popup mode of the SmartTextInput. Determines whether the popup is a listbox or a dialog.\n */\nexport enum PopupMode {\n Listbox = 'listbox',\n FunctionDialog = 'function-dialog',\n CodeDialog = 'code-dialog',\n}\n\n/**\n * Context for a method chain function at a cursor position.\n */\nexport type FunctionAtCursor = {\n functionName: string;\n existingParams: FunctionParamType[];\n /** Absolute start position of the function name in the full value string. */\n start: number;\n /** Absolute end position (exclusive) of the function call (past the closing paren) in the full value string. */\n end: number;\n /** True when the cursor is strictly inside the function's parentheses (the params area). */\n cursorInParens: boolean;\n /** True when the function is a custom function (CCF). */\n custom: boolean;\n};\n\nexport interface FunctionFormRenderProps {\n baseId: string;\n functionName: string;\n schema: FunctionJsonSchema;\n parentItemSchema: JsonSchema;\n receiverSchema: JsonSchema;\n defaultParameters: FunctionAtCursor['existingParams'];\n chainRoots: ChainRoot[];\n onComplete: (nodes: MethodChainNode[]) => void;\n onCancel: () => void;\n}\n\nexport interface CodeChainFunctionPanelRenderProps {\n initialName: string;\n inputSchema: JsonSchema | null;\n codeChainFunctionToken?: string;\n initialCode?: string;\n initialDescription?: string;\n initialOutputSchema?: JsonSchema | null;\n onClose: (result?: { savedName: string }) => void;\n}\n\nexport type OpenCodeChainFunctionPanel = (\n props: Omit<CodeChainFunctionPanelRenderProps, 'onClose'>,\n) => void;\n\nexport interface CustomFunctionDetailRenderProps {\n token: string;\n name: string;\n onCancel: () => void;\n onEdit?: OpenCodeChainFunctionPanel;\n}\n\nexport type PopoverFooterRenderer = (helpers: { closePopover: () => void }) => ReactNode;\n\n/**\n * Styling applied to text in the input.\n */\nexport type TextStyle =\n | 'none'\n | 'token'\n | 'hoverable'\n | 'hoverableToken'\n | 'schemaError'\n | 'syntaxError';\n","import { parse, type ParseOptions } from './smart-text/parser.js';\nimport { NodeType, type ASTNode } from './smart-text/types';\n\n/**\n * Parses the input string into an ASTNode tree.\n */\nexport function safeParse(input: string, options?: ParseOptions): ASTNode {\n try {\n return parse(input, { startRule: 'Root', strict: false, ...options });\n } catch {\n return {\n type: NodeType.Root,\n start: 0,\n end: input.length,\n children: [{ type: NodeType.Error, start: 0, end: input.length }],\n };\n }\n}\n\nexport type { ParseOptions };\n","import type { RefObject } from 'react';\n\nimport type { ChainRoot } from 'design-system/lib/chainTypes';\nimport { isFunctionSchema } from 'design-system/lib/jsonSchema';\nimport type { Chain, MethodChainNode } from 'design-system/lib/methodChain';\nimport { normalizeFunctionParam } from 'design-system/lib/methodChainNormalize';\n\nimport {\n type ASTParenCloseNode,\n type ASTParenOpenNode,\n isRealASTFunctionParamType,\n type ASTChain,\n isAnyASTFunctionNode,\n isASTCustomFunctionNode,\n} from './parser/method-chain/types';\nimport { safeParse } from './parser/safe-parse';\nimport {\n type ASTNode,\n isASTChainNode,\n isASTContainerNode,\n isMethodChainNode,\n NodeType,\n} from './parser/smart-text/types';\nimport { enclosingExpr, findAll, resolve } from './parser/tree';\nimport { type FunctionAtCursor, Mode, ValueType } from './types';\n\nconst createMeasureCanvas = (): [HTMLCanvasElement, () => void] => {\n const canvas = document.createElement('canvas');\n return [\n canvas,\n () => {\n canvas.width = 0;\n canvas.height = 0;\n canvas.remove();\n },\n ];\n};\n\nexport const safeCursorIdx = (cursorIdx: number | null, ast: ASTNode): number => {\n const idx = cursorIdx ?? ast.end;\n return Math.max(Math.min(idx, ast.end), 0);\n};\n\n/**\n * Returns true if the input is allowed to transition to the given value type based on allowed type.\n * When allowedValueType is set, transitions to a different type are prohibited.\n */\nexport function canTransitionToValueType(\n valueType: ValueType,\n allowedValueType: ValueType | undefined,\n): boolean {\n if (!allowedValueType) {\n return true;\n }\n return allowedValueType === valueType;\n}\n\n/**\n * Returns true if the given interpolation mode (handlebars or code) is allowed.\n * When allowedValueType is 'method-chain', interpolation modes are never allowed.\n */\nexport function isInterpolationModeAllowed(\n mode: Mode.MethodChain | Mode.Code,\n allowedValueType: ValueType | undefined,\n allowedInterpolationModes: (Mode.MethodChain | Mode.Code)[] | undefined,\n): boolean {\n if (allowedValueType === ValueType.MethodChain) {\n return false;\n }\n if (!allowedInterpolationModes) {\n return true;\n }\n return allowedInterpolationModes.includes(mode);\n}\n\n/**\n * Returns true if the input can exit method-chain value type back to interpolation.\n * Requires an empty value and that the allowed value type is interpolation.\n */\nexport function canExitToInterpolation(\n value: string,\n allowedValueType: ValueType | undefined,\n): boolean {\n return value === '' && canTransitionToValueType(ValueType.Interpolation, allowedValueType);\n}\n\n/**\n * Apply from element scrollLeft to the to element scrollLeft\n */\nexport const syncScroll = (from: RefObject<HTMLElement>, to: RefObject<HTMLElement>) => {\n if (from.current && to.current) {\n to.current.scrollLeft = from.current.scrollLeft;\n }\n};\n\n// Reused across calls — avoids creating a new canvas on every selection.\nconst [globalMeasureCanvas] = createMeasureCanvas();\n\n/**\n * Scroll the input so the cursor at cursorIdx is visible, then sync the overlay.\n *\n * overflow:hidden on the StyledInput prevents the browser from auto-scrolling to\n * the cursor when setSelectionRange is called programmatically. We replicate the\n * same manual scrollLeft update that handleWheel uses.\n */\nexport const scrollInputToCursor = (\n inputRef: RefObject<HTMLInputElement>,\n cursorIdx: number,\n): void => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n const ctx = globalMeasureCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const style = window.getComputedStyle(input);\n ctx.font = `${style.fontStyle} ${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;\n const cursorPx = ctx.measureText(input.value.slice(0, cursorIdx)).width;\n // Include one character past the cursor so chars immediately after it (e.g. closing ')') stay visible.\n const lookaheadPx = ctx.measureText(input.value.slice(0, cursorIdx + 1)).width;\n\n const paddingLeft = parseFloat(style.paddingLeft) || 0;\n const paddingRight = parseFloat(style.paddingRight) || 0;\n const contentWidth = input.clientWidth - paddingLeft - paddingRight;\n const margin = 4;\n\n if (cursorPx < input.scrollLeft) {\n input.scrollLeft = Math.max(0, cursorPx - margin);\n } else if (lookaheadPx > input.scrollLeft + contentWidth) {\n input.scrollLeft = lookaheadPx - contentWidth + margin;\n }\n};\n\n/**\n * Returns true if the value is a valid method chain where the root is valid given the passed\n * accepted chain roots.\n */\nexport const isChainWithValidRoot = (\n value: string,\n chainRoots: ChainRoot[],\n { onlyAllowSingleLink = false }: { onlyAllowSingleLink?: boolean } = {},\n): boolean => {\n const tree = safeParse(value, { startRule: 'ChainRoot' });\n const firstChild = (tree.children ?? [])[0];\n\n return (\n firstChild != null &&\n firstChild.type === NodeType.Chain &&\n isASTChainNode(firstChild) &&\n chainRoots.some((r) => {\n const firstLink = firstChild.children[0];\n return firstLink != null && isMethodChainNode(firstLink) && r.label === firstLink.name;\n }) &&\n (!onlyAllowSingleLink || firstChild.children.length === 1)\n );\n};\n\n/**\n * Returns the ASTChain node that contains the cursor, or undefined if none.\n */\nexport function findChainAtCursor(\n tree: ASTNode,\n cursorIdx: number | null,\n valueType: ValueType,\n): ASTChain | undefined {\n const idx = cursorIdx ?? 0;\n\n if (valueType === ValueType.MethodChain) {\n const chainNode = findAll(tree, NodeType.Chain)[0];\n return chainNode && isASTChainNode(chainNode) ? chainNode : undefined;\n }\n\n // Interpolation mode — look for an enclosing {{...}} or ${...} expression.\n const resolveIdx = idx > 0 ? idx - 1 : 0;\n const node = resolve(tree, resolveIdx);\n\n // If the cursor is strictly inside a 2-char delimiter token (e.g. between `{` and `{`\n // in `{{`, or between `}` and `}` in `}}`), we're not inside the expression content.\n if (\n node &&\n (node.type === NodeType.HBOpen ||\n node.type === NodeType.HBClose ||\n node.type === NodeType.CodeOpen ||\n node.type === NodeType.CodeClose) &&\n idx > node.start &&\n idx < node.end\n ) {\n return undefined;\n }\n\n if (node) {\n const expr = enclosingExpr(tree, node);\n if (expr && isASTContainerNode(expr) && idx > expr.start) {\n const chainChild = (expr.children ?? []).find((c) => isASTChainNode(c));\n if (chainChild && isASTChainNode(chainChild)) {\n return chainChild;\n }\n }\n }\n // Fallback: bare top-level chain containing the cursor.\n const fallback = findAll(tree, NodeType.Chain).find((c) => c.start <= idx && idx <= c.end);\n return fallback && isASTChainNode(fallback) ? fallback : undefined;\n}\n\n/**\n * Replace the chain string at the cursor position.\n *\n * - ValueType.MethodChain: replaces the entire value.\n * - ValueType.Interpolation: replaces the chain inside the {{...}} or ${...}\n * expression the cursor is currently in.\n *\n * Returns the new value string and the new cursor position (end of inserted chain).\n */\nexport const replaceChainAtCursor = (\n value: string,\n valueType: ValueType,\n cursorIdx: number | null,\n tree: ASTNode,\n newChainString: string,\n): { newValue: string; newCursorIdx: number } => {\n if (valueType === ValueType.MethodChain) {\n return { newValue: newChainString, newCursorIdx: newChainString.length };\n }\n\n // Interpolation mode — find the {{...}} or ${...} enclosing the cursor.\n const idx = cursorIdx != null && cursorIdx > 0 ? cursorIdx - 1 : 0;\n const nodeAtCursor = resolve(tree, idx);\n\n if (!nodeAtCursor) {\n return { newValue: value, newCursorIdx: cursorIdx ?? value.length };\n }\n\n // enclosingExpr finds an ancestor Handlebars/Code node. If the cursor is\n // sitting directly on such a node (e.g. partially typed \"{{\"), use it directly.\n let expr = enclosingExpr(tree, nodeAtCursor);\n if (!expr && (nodeAtCursor.type === NodeType.Handlebars || nodeAtCursor.type === NodeType.Code)) {\n expr = nodeAtCursor;\n }\n\n if (!expr || !isASTContainerNode(expr)) {\n return { newValue: value, newCursorIdx: cursorIdx ?? value.length };\n }\n\n const children = expr.children ?? [];\n const openNode = children.find((c) => c.type === NodeType.HBOpen || c.type === NodeType.CodeOpen);\n const closeNode = children.find(\n (c) => c.type === NodeType.HBClose || c.type === NodeType.CodeClose,\n );\n\n if (!openNode) {\n return { newValue: value, newCursorIdx: cursorIdx ?? value.length };\n }\n\n const before = value.slice(0, openNode.end);\n const after = closeNode ? value.slice(closeNode.start) : '';\n const newValue = before + newChainString + after;\n return { newValue, newCursorIdx: before.length + newChainString.length };\n};\n\n/**\n * Returns context about a method chain function whenever the cursor falls anywhere within\n * the function node's span (name, parens, or params).\n */\nexport function getFunctionAtCursor(\n tree: ASTNode,\n cursorIdx: number | null,\n valueType: ValueType,\n): FunctionAtCursor | null {\n const idx = cursorIdx ?? 0;\n const chainNode = findChainAtCursor(tree, cursorIdx, valueType);\n if (!chainNode) {\n return null;\n }\n\n // Walk chain links for FunctionNode or CustomFunctionNode.\n // Both complete and incomplete function calls are represented as FunctionNode.\n for (const link of chainNode.children) {\n if (!isAnyASTFunctionNode(link)) {\n continue;\n }\n\n // Cursor must be within the function's span (exclusive end — past closing paren is not \"in\" the function).\n if (idx < link.start || idx >= link.end) {\n continue;\n }\n\n // Determine whether the cursor is inside the parens (the params area).\n const parenOpenNode = link.children.find(\n (c): c is ASTParenOpenNode => c.type === NodeType.ParenOpen,\n );\n const parenCloseNode = link.children.find(\n (c): c is ASTParenCloseNode => c.type === NodeType.ParenClose,\n );\n const cursorInParens =\n parenOpenNode != null &&\n parenCloseNode != null &&\n idx > parenOpenNode.start &&\n idx < parenCloseNode.end;\n\n const existingParams = link.children\n .filter(isRealASTFunctionParamType)\n .map(normalizeFunctionParam);\n\n return {\n functionName: isASTCustomFunctionNode(link) ? `@${link.name}` : link.name,\n existingParams,\n start: link.start,\n end: link.end,\n cursorInParens,\n custom: isASTCustomFunctionNode(link),\n };\n }\n\n return null;\n}\n\n/**\n * Returns true if there is a CustomFunction node that starts at the given position.\n * Used to detect clicks on custom code function spans.\n */\nexport function isCustomFunctionAtStart(tree: ASTNode, position: number): boolean {\n return findAll(tree, NodeType.CustomFunction).some((n) => n.start === position);\n}\n\n/**\n * Returns true when the cursor sits immediately after a function call's closing paren\n * (e.g. cursor at the `|` in `accounts.filter(x)|`). Used to derive assumeOnNextLink\n * from cursor position rather than relying solely on state.\n */\nexport function isCursorAfterFunctionClose(\n tree: ASTNode,\n cursorIdx: number | null,\n valueType: ValueType,\n): boolean {\n const idx = cursorIdx ?? 0;\n const chainNode = findChainAtCursor(tree, cursorIdx, valueType);\n if (!chainNode) {\n return false;\n }\n\n for (const link of chainNode.children) {\n if (!isAnyASTFunctionNode(link)) {\n continue;\n }\n const parenCloseNode = link.children.find(\n (c): c is ASTParenCloseNode => c.type === NodeType.ParenClose,\n );\n if (parenCloseNode && idx === parenCloseNode.end) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Return the current Mode of the input. The mode determines what is valid syntax.\n */\nexport const getMode = (tree: ASTNode, valueType: ValueType, cursorIdx: number | null): Mode => {\n cursorIdx = cursorIdx ?? 0;\n\n if (valueType === ValueType.MethodChain) {\n return Mode.MethodChain;\n }\n const idx = cursorIdx > 0 ? cursorIdx - 1 : 0;\n const n = resolve(tree, idx);\n if (!n) {\n return Mode.Text;\n }\n const expr = enclosingExpr(tree, n);\n if (!expr) {\n // The cursor is not inside any Handlebars/Code expression.\n // If the cursor resolved to a Handlebars or Code node itself (trailing chars consumed\n // into the node span but not part of a child), return MethodChain so the user can\n // continue typing inside the still-open expression (e.g. \"{{trigger.\" + \"}\" in flight).\n if (n.type === NodeType.Handlebars || n.type === NodeType.Code) {\n return Mode.MethodChain;\n }\n return Mode.Text;\n }\n const exprChildren = isASTContainerNode(expr) ? (expr.children ?? []) : [];\n const openNode = exprChildren.find(\n (c) => c.type === NodeType.HBOpen || c.type === NodeType.CodeOpen,\n );\n const closeNode = exprChildren.find(\n (c) => c.type === NodeType.HBClose || c.type === NodeType.CodeClose,\n );\n if (closeNode && cursorIdx > closeNode.start) {\n return Mode.Text;\n }\n // Cursor is before the end of the opening token (e.g. between `{` and `{` in `{{...}}`).\n if (openNode && cursorIdx < openNode.end) {\n return Mode.Text;\n }\n if (expr.type === NodeType.Handlebars) {\n return Mode.MethodChain;\n }\n if (expr.type === NodeType.Code) {\n return Mode.Code;\n }\n return Mode.Text;\n};\n\n/**\n * Determine if the cursor is strictly between chars of a delimiter token (like `{{`). In this\n * state we want to hide the popover.\n */\nexport const isCursorInExpressionToken = (\n tree: ASTNode,\n cursorIdx: number | null,\n valueType: ValueType,\n): boolean => {\n if (valueType === ValueType.MethodChain) {\n return false;\n }\n const idx = safeCursorIdx(cursorIdx, tree);\n if (idx === 0) {\n return false;\n }\n const n = resolve(tree, idx - 1);\n if (\n !n ||\n (n.type !== NodeType.HBOpen &&\n n.type !== NodeType.HBClose &&\n n.type !== NodeType.CodeOpen &&\n n.type !== NodeType.CodeClose)\n ) {\n return false;\n }\n return idx > n.start && idx < n.end;\n};\n\n/**\n * When the user selects a chain option that already exists at the cursor position\n * (e.g. confirming \"page_number\" while the value is \"accounts.page_number(#1)\", or\n * confirming \"accounts\" while the cursor is inside \"accounts.id\"), returns the cursor\n * position to move to rather than replacing the value via appendChain (which would\n * discard existing parameters or suffixes after the link).\n *\n * Returns null when the link is not already present — caller should appendChain instead.\n *\n * Note: options always carry Identifier chain nodes (appendedMethodChain uses strings),\n * so `isFunction` is derived from the schema rather than chain.type.\n */\nexport const getConfirmLinkCursorPos = (\n tree: ASTNode,\n valueType: ValueType,\n currentChain: Chain,\n chain: MethodChainNode,\n schema: object | null | undefined,\n cursorIdx: number | null,\n): number | null => {\n // Find the ASTChain at the cursor. If there is none (e.g. cursor is inside an empty {{}}\n // expression), there is nothing to confirm — the caller should appendChain instead.\n const astChain = findChainAtCursor(tree, cursorIdx, valueType);\n if (!astChain) {\n return null;\n }\n\n // Options built from schema always use Identifier nodes; use the schema to detect functions.\n const isFunction = isFunctionSchema(schema ?? {});\n\n // Collect only named links (Identifier, Function, CustomFunction) to index into, skipping\n // Dot separators and Error recovery nodes.\n const namedLinks = astChain.children.filter(isMethodChainNode);\n // The link to confirm is the one immediately after the current (parent) chain links.\n const targetLink = namedLinks[currentChain.links.length];\n\n if (!targetLink || targetLink.name !== chain.name) {\n return null;\n }\n\n if (\n isFunction &&\n (targetLink.type === NodeType.Function || targetLink.type === NodeType.CustomFunction)\n ) {\n // Place cursor inside the parentheses (just after the opening paren).\n const parenOpen = targetLink.children.find((c) => c.type === NodeType.ParenOpen);\n return parenOpen ? parenOpen.end : targetLink.end;\n }\n\n // For identifier links, skip the following dot so the cursor lands at the next identifier.\n const linkIdxInChain = astChain.children.indexOf(targetLink);\n const dotAfter = astChain.children[linkIdxInChain + 1];\n return dotAfter?.type === NodeType.Dot ? dotAfter.end : targetLink.end;\n};\n\n/**\n * Matching function for filtering chain options given a partially typed option name.\n *\n * TODO: Add more sophistication here (e.g. fuzzy matching, etc.)\n */\nexport const isQueryMatch = (query: string, chain: { property: string }): boolean => {\n const prop = chain.property.toLowerCase();\n\n // If the query is for a CCF (leading '@'), filter for CCF functions\n if (query.startsWith('@')) {\n return prop.startsWith(query);\n }\n\n // Otherwise, include CCF functions even when not explicitly queried for with a leading '@'.\n const normalizedName = prop.startsWith('@') ? prop.slice(1) : prop;\n return normalizedName.startsWith(query);\n};\n","import type { PossibleChainSchema } from 'design-system/lib/chainTypes';\n\nimport { Mode, ValueType } from './types';\nimport { canTransitionToValueType, isInterpolationModeAllowed } from './utils';\n\nconst CONTEXT_MENU_OPTIONS = {\n enterMethodChainMode: {\n label: 'trigger.id',\n returnType: 'Data path',\n ariaLabel: 'Enter data path',\n interactive: true,\n description: undefined,\n },\n insertCustomCode: {\n label: '${...}',\n returnType: 'Code expression',\n ariaLabel: 'Insert code expression',\n interactive: true,\n description: undefined,\n },\n insertMethodChainHandlebars: {\n label: 'Hello, {{...}}',\n returnType: 'Data expression',\n ariaLabel: 'Insert data expression',\n interactive: true,\n description: undefined,\n },\n};\n\nexport type MethodChainOption = {\n id: string;\n type: 'method-chain-option';\n ariaLabel: string;\n label: string;\n returnType: string | undefined;\n description: string | undefined;\n interactive: boolean;\n disabled: boolean;\n};\n\nexport type ContextMenuOption = {\n id: string;\n type: 'context-menu-option';\n ariaLabel: string;\n label: string;\n returnType: string;\n description: string | undefined;\n interactive: boolean;\n disabled: boolean;\n};\n\nexport type SmartTextInputOption = ContextMenuOption | MethodChainOption;\n\nexport const EXIT_METHOD_CHAIN_VALUE_TYPE_OPTION: MethodChainOption = {\n type: 'method-chain-option',\n id: 'exitMethodChainValueType',\n ariaLabel: 'Exit data path',\n label: 'Data path',\n returnType: undefined,\n description: undefined,\n disabled: false,\n interactive: true,\n};\n\nexport const isContextMenuOption = (item: SmartTextInputOption): item is ContextMenuOption => {\n return item.type === 'context-menu-option';\n};\n\nexport const isMethodChainOption = (item: SmartTextInputOption): item is MethodChainOption => {\n return item.type === 'method-chain-option';\n};\n\nexport type ContextMenuExamples = {\n code?: string;\n handlebars?: string;\n methodChain?: string;\n};\n\nconst CONTEXT_MENU_EXAMPLE_KEY: Record<string, keyof ContextMenuExamples> = {\n insertCustomCode: 'code',\n insertMethodChainHandlebars: 'handlebars',\n enterMethodChainMode: 'methodChain',\n};\n\nexport const getContextMenuOptions = (\n valueIsEmpty: boolean,\n allowedValueType: ValueType | undefined,\n allowedInterpolationModes: (Mode.MethodChain | Mode.Code)[] | undefined,\n examples?: ContextMenuExamples,\n): ContextMenuOption[] => {\n return Object.entries(CONTEXT_MENU_OPTIONS)\n .filter(([key]) => {\n if (key === 'insertCustomCode') {\n return isInterpolationModeAllowed(Mode.Code, allowedValueType, allowedInterpolationModes);\n }\n if (key === 'insertMethodChainHandlebars') {\n return isInterpolationModeAllowed(\n Mode.MethodChain,\n allowedValueType,\n allowedInterpolationModes,\n );\n }\n if (key === 'enterMethodChainMode') {\n return canTransitionToValueType(ValueType.MethodChain, allowedValueType) && valueIsEmpty;\n }\n return true;\n })\n .map(([key, value]) => ({\n type: 'context-menu-option',\n id: key,\n ...value,\n label: examples?.[CONTEXT_MENU_EXAMPLE_KEY[key]!] ?? value.label,\n disabled: false,\n }));\n};\n\nexport const getMethodChainOptions = (options: PossibleChainSchema[]): MethodChainOption[] => {\n return options.map((option) => ({\n type: 'method-chain-option',\n id: option.value,\n disabled: false,\n ariaLabel: `Select ${option.label}`,\n label: option.label,\n returnType: option.returnType,\n description: option.schema.description,\n interactive: true,\n }));\n};\n","import { useMemo, useRef } from 'react';\nimport { useDialog, useInteractOutside } from 'react-aria';\nimport styled from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport { Stack } from 'design-system/components/Stack';\nimport { Paragraph } from 'design-system/components/Text';\nimport type { ChainRoot, PossibleChainSchema } from 'design-system/lib/chainTypes';\nimport { isFunctionSchema, isJsonSchemaArray } from 'design-system/lib/jsonSchema';\nimport type { MethodChainNode } from 'design-system/lib/methodChain';\n\nimport type {\n CustomFunctionDetailRenderProps,\n FunctionAtCursor,\n FunctionFormRenderProps,\n OpenCodeChainFunctionPanel,\n} from './types';\n\nexport const StyledDialog = styled(Stack)`\n height: 100%;\n gap: 0;\n overflow: hidden;\n`;\n\nexport const DialogHeading = styled.div`\n ${Typography.TextMono};\n padding: ${Spacing[3]} ${Spacing[2]};\n border-bottom: 1px solid ${Color.BorderDivider};\n`;\n\nconst DialogContent = styled(Stack)`\n gap: 0;\n overflow: hidden;\n`;\n\nconst FormContent = styled.div`\n padding: ${Spacing[3]};\n overflow-y: auto;\n`;\n\ninterface SmartTextInputFunctionDialogProps {\n id: string;\n inputRef: React.RefObject<HTMLInputElement>;\n functionAtCursor: FunctionAtCursor;\n nextPossibleChains: PossibleChainSchema[];\n chainRoots: ChainRoot[];\n onConfirm: (nodes: MethodChainNode[]) => void;\n onCancel: () => void;\n renderFunctionForm?: (props: FunctionFormRenderProps) => React.ReactNode;\n renderCustomFunctionDetail?: (props: CustomFunctionDetailRenderProps) => React.ReactNode;\n openCodeChainFunctionPanel?: OpenCodeChainFunctionPanel;\n}\n\nconst SmartTextInputFunctionDialog = ({\n id,\n inputRef,\n functionAtCursor,\n nextPossibleChains,\n chainRoots,\n onConfirm,\n onCancel,\n renderFunctionForm,\n renderCustomFunctionDetail,\n openCodeChainFunctionPanel,\n}: SmartTextInputFunctionDialogProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { dialogProps } = useDialog(\n { role: 'dialog', 'aria-label': `Edit ${functionAtCursor.functionName} parameters`, id },\n ref,\n );\n\n // Remove tabIndex from dialogProps.\n // react-aria sets tabIndex=-1 which causes FocusScope to make the dialog element focusable. We\n // do not want this.\n const { tabIndex: _tabIndex, ...restDialogProps } = dialogProps;\n\n useInteractOutside({\n ref,\n onInteractOutside: (e) => {\n if (inputRef.current?.contains(e.target as Node)) {\n return;\n }\n if ((e.target as HTMLElement)?.closest('#combobox-dropdown-portal-wrapper')) {\n return;\n }\n onCancel();\n },\n });\n\n // Look up FunctionJsonSchema for the function at cursor from the already-computed nextPossibleChains.\n // extractChainContextAtCursor only includes Identifier links (not Function) in chainString, so when\n // cursor is inside filter(...), the chain string is \"current_case.accounts\" and nextPossibleChains\n // includes \"filter\" with its FunctionJsonSchema.\n const functionSchema = useMemo(() => {\n for (const opt of nextPossibleChains) {\n if (opt.property === functionAtCursor.functionName && isFunctionSchema(opt.schema)) {\n const ccfToken =\n 'codeChainFunctionToken' in opt.schema ? opt.schema.codeChainFunctionToken : undefined;\n\n return {\n schema: opt.schema,\n parentSchema: isJsonSchemaArray(opt.parentSchema)\n ? opt.parentSchema.items\n : opt.parentSchema,\n ccfToken,\n };\n }\n }\n }, [functionAtCursor, nextPossibleChains]);\n\n return (\n <StyledDialog ref={ref} {...restDialogProps}>\n <DialogHeading>{functionAtCursor.functionName}</DialogHeading>\n <DialogContent>\n {functionSchema != null ? (\n functionAtCursor.custom && functionSchema.ccfToken != null ? (\n renderCustomFunctionDetail?.({\n token: functionSchema.ccfToken,\n name: functionAtCursor.functionName,\n onCancel,\n onEdit: openCodeChainFunctionPanel,\n })\n ) : (\n renderFunctionForm?.({\n baseId: id,\n functionName: functionAtCursor.functionName,\n schema: functionSchema.schema,\n parentItemSchema: functionSchema.parentSchema,\n receiverSchema: functionSchema.parentSchema,\n defaultParameters: functionAtCursor.existingParams,\n chainRoots,\n onComplete: onConfirm,\n onCancel,\n })\n )\n ) : (\n <FormContent>\n <Paragraph size='sm'>\n Could not find a valid schema for the function {functionAtCursor.functionName}.\n </Paragraph>\n </FormContent>\n )}\n </DialogContent>\n </StyledDialog>\n );\n};\n\nexport default SmartTextInputFunctionDialog;\n","import { useRef } from 'react';\nimport { useDialog, useInteractOutside } from 'react-aria';\nimport styled from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport Button from 'design-system/components/Button';\nimport { HStack } from 'design-system/components/Stack';\n\nimport { DialogHeading, StyledDialog } from './SmartTextInputFunctionDialog';\n\nconst DialogContent = styled.div`\n padding: ${Spacing[3]};\n overflow-y: auto;\n flex: 1;\n ${Typography.TextMono};\n color: ${Color.TextSecondary};\n`;\n\nconst DialogFooter = styled.div`\n padding: ${Spacing[2]};\n border-top: 1px solid ${Color.BorderDivider};\n`;\n\ninterface SmartTextInputCodeDialogProps {\n id: string;\n inputRef: React.RefObject<HTMLInputElement>;\n onConfirm: () => void;\n onCancel: () => void;\n}\n\nconst SmartTextInputCodeDialog = ({\n id,\n inputRef,\n onConfirm,\n onCancel,\n}: SmartTextInputCodeDialogProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { dialogProps } = useDialog(\n { role: 'dialog', 'aria-label': 'Edit code expression', id },\n ref,\n );\n\n const { tabIndex: _tabIndex, ...restDialogProps } = dialogProps;\n\n useInteractOutside({\n ref,\n onInteractOutside: (e) => {\n if (inputRef.current?.contains(e.target as Node)) {\n return;\n }\n onCancel();\n },\n });\n\n return (\n <StyledDialog ref={ref} {...restDialogProps}>\n <DialogHeading>Code</DialogHeading>\n <DialogContent>\n <div\n style={{\n minHeight: '100px',\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n --Code editor goes here--\n </div>\n </DialogContent>\n <DialogFooter>\n <HStack justify='flex-end' spacing={Spacing[1]}>\n <Button onClick={onCancel} width='auto' size='sm' variant='basic'>\n Cancel\n </Button>\n <Button onClick={onConfirm} width='auto' size='sm' variant='primary'>\n Confirm\n </Button>\n </HStack>\n </DialogFooter>\n </StyledDialog>\n );\n};\n\nexport default SmartTextInputCodeDialog;\n","import { type ReactNode, forwardRef, useImperativeHandle, useLayoutEffect, useState } from 'react';\nimport { FocusScope, useFocusManager, usePopover } from 'react-aria';\nimport { createPortal } from 'react-dom';\nimport type { ComboBoxState } from 'react-stately';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport { Z_INDICES } from 'design-system/lib/zindex';\nimport { Elevation } from 'design-system/variables/effect';\n\nimport type { SmartTextInputOption } from './listbox-options';\n\ntype PopoverContainerProps = {\n $isDialog: boolean;\n $position?: 'absolute' | 'relative';\n};\nexport const PopoverContainer = styled.div<PopoverContainerProps>`\n ${({ $isDialog }) =>\n $isDialog\n ? css`\n min-width: 340px;\n max-width: 400px;\n `\n : css`\n min-width: 320px;\n max-width: 380px;\n `}\n overflow: hidden;\n display: flex;\n flex-direction: column;\n position: ${({ $position = 'absolute' }) => $position};\n border-radius: 4px;\n border: 1px solid ${Color.BorderDivider};\n box-shadow: ${Elevation.Low};\n background: ${Color.BackgroundPrimary};\n font-size: ${Typography.TextMono.fontSize};\n font-family: ${Typography.TextMono.fontFamily};\n`;\n\nexport interface DialogFocusHandle {\n focusFirst: () => void;\n}\n\nconst DialogFocusHandle = forwardRef<DialogFocusHandle, object>(\n function DialogFocusHandle(_props, ref) {\n const focusManager = useFocusManager();\n useImperativeHandle(\n ref,\n () => ({\n focusFirst: () => {\n focusManager?.focusFirst({ tabbable: true });\n },\n }),\n [focusManager],\n );\n return null;\n },\n);\n\nexport const FooterContainer = styled.div`\n border-top: 1px solid ${Color.BorderDivider};\n padding: ${Spacing[1]};\n`;\n\ninterface SmartTextInputPopoverProps {\n id: string;\n children: ReactNode;\n comboboxState: ComboBoxState<SmartTextInputOption>;\n popoverRef: React.RefObject<HTMLDivElement>;\n inputRef: React.RefObject<HTMLInputElement>;\n variant: 'default' | 'table-cell';\n portalContainerRef?: HTMLElement | null;\n dialogFocusRef?: React.RefObject<DialogFocusHandle>;\n isDialog: boolean;\n onDialogClose: () => void;\n footer?: ReactNode;\n}\n\nconst SmartTextInputPopover = ({\n id,\n children,\n comboboxState,\n inputRef,\n popoverRef,\n variant,\n portalContainerRef,\n dialogFocusRef,\n isDialog,\n onDialogClose,\n footer,\n}: SmartTextInputPopoverProps) => {\n const { popoverProps } = usePopover(\n {\n triggerRef: inputRef,\n popoverRef,\n placement: 'bottom start',\n offset: variant === 'table-cell' ? 1 : 4,\n isNonModal: true,\n maxHeight: isDialog ? 375 : 295,\n shouldCloseOnInteractOutside: (element) =>\n !element.closest('#combobox-dropdown-portal-wrapper'),\n },\n {\n ...comboboxState,\n close: () => {\n onDialogClose();\n },\n },\n );\n\n const [popoverWidth, setPopoverWidth] = useState<number | undefined>(undefined);\n useLayoutEffect(() => {\n if (comboboxState.isOpen) {\n setPopoverWidth(inputRef.current?.scrollWidth);\n }\n }, [comboboxState.isOpen, inputRef]);\n\n if (!comboboxState.isOpen) {\n return null;\n }\n\n const render = () => {\n return (\n <PopoverContainer\n {...popoverProps}\n ref={popoverRef}\n $isDialog={isDialog}\n id={id}\n style={{ zIndex: Z_INDICES.modalDropdown, width: popoverWidth }}\n >\n <FocusScope contain={isDialog}>\n {dialogFocusRef && <DialogFocusHandle ref={dialogFocusRef} />}\n {children}\n {!isDialog && footer != null && <FooterContainer>{footer}</FooterContainer>}\n </FocusScope>\n </PopoverContainer>\n );\n };\n\n // Explictly check for null since undefined is semantically different here.\n // oxlint-disable-next-line @persona-id/eqeq-null-undefined\n if (portalContainerRef === null) {\n return render();\n } else {\n return createPortal(render(), portalContainerRef ?? document.body);\n }\n};\n\nexport default SmartTextInputPopover;\n","import { useRef } from 'react';\nimport { useOption, useListBox } from 'react-aria';\nimport type { ListBoxProps } from 'react-aria-components';\nimport type { Node, ComboBoxState } from 'react-stately';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport { ArrowLeftIcon } from '@persona/icons/12px';\nimport { Button } from 'design-system/components/Button';\nimport { HStack } from 'design-system/components/Stack';\n\nimport { HighlightedText } from './HighlightedText';\nimport {\n EXIT_METHOD_CHAIN_VALUE_TYPE_OPTION,\n isContextMenuOption,\n type SmartTextInputOption,\n} from './listbox-options';\nimport { safeParse } from './parser/safe-parse';\nimport PillType from './PillType';\nimport { FooterContainer } from './SmartTextInputPopover';\nimport { Mode } from './types';\n\nconst EmptyOptionList = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n ${Typography.TextMono};\n color: ${Color.TextSecondary};\n padding: ${Spacing[4]} ${Spacing[5]};\n`;\n\nconst StyledArrowLeftIcon = styled(ArrowLeftIcon)`\n border-radius: 3px;\n`;\n\nconst StyledListBox = styled.div`\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n`;\n\nconst OptionDescription = styled.div`\n ${Typography.TextSmall};\n color: ${Color.TextSecondary};\n padding: 2px 0; // Added to containers/gap 4px padding to equal 6px\n`;\n\ntype OptionLabelProps = {\n $heading?: boolean;\n};\nconst OptionLabel = styled.div<OptionLabelProps>`\n ${Typography.TextMono};\n font-size: 12px;\n line-height: 16px;\n\n color: ${({ $heading }) => ($heading ? Color.TextSecondary : Color.TextPrimary)};\n`;\n\ntype StyledListboxOptionProps = {\n $interactive?: boolean;\n $bottomBorder?: boolean;\n $iconFocus?: boolean;\n};\nconst StyledListboxOption = styled.div<StyledListboxOptionProps>`\n display: flex;\n flex-direction: column;\n gap: ${Spacing[1]};\n padding: ${Spacing[1]} ${Spacing[2]};\n border-bottom: ${({ $bottomBorder }) => ($bottomBorder ? `1px solid ${Color.BorderDivider}` : 'none')};\n\n ${OptionDescription} {\n display: none;\n }\n\n\n ${({ $interactive, $iconFocus }) =>\n $interactive &&\n css`\n &:not([aria-disabled='true']) {\n cursor: pointer;\n }\n\n &[aria-disabled='true'] ${OptionLabel} {\n color: ${Color.TextDisabled};\n }\n\n &[data-focused='true'] {\n ${\n $iconFocus\n ? css`\n ${StyledArrowLeftIcon} {\n background-color: ${Color.CoreSlate100};\n }\n `\n : css`\n background-color: ${Color.BackgroundSecondary};\n `\n }\n\n ${OptionDescription} {\n display: block;\n }\n }\n `}\n`;\n\nconst buildTextModeHeading = (nodes: Node<SmartTextInputOption>[]): string => {\n const parts: string[] = [];\n for (const node of nodes) {\n if (node.value?.id === 'insertCustomCode') {\n parts.push('Code expression');\n } else if (node.value?.id === 'insertMethodChainHandlebars') {\n parts.push('Data expression');\n } else if (node.value?.id === 'enterMethodChainMode') {\n parts.push('Data path');\n }\n }\n parts.push('String');\n return parts.join(', ');\n};\n\nconst ListboxOption = ({\n item,\n state,\n}: {\n item: SmartTextInputOption;\n state: ComboBoxState<SmartTextInputOption>;\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n const { optionProps, isFocused } = useOption({ key: item.id }, state, ref);\n\n if (isContextMenuOption(item)) {\n return (\n <StyledListboxOption\n $interactive={item.interactive}\n ref={ref}\n {...optionProps}\n aria-label={item.ariaLabel}\n aria-disabled={item.disabled || !item.interactive ? 'true' : 'false'}\n data-focused={isFocused ? 'true' : 'false'}\n >\n <HStack justify='space-between'>\n <OptionLabel>\n {item.disabled ? (\n <span>{item.label}</span>\n ) : (\n <HighlightedText\n value={item.label}\n tree={safeParse(item.label, {\n startRule: item.id === 'enterMethodChainMode' ? 'ChainRoot' : 'Root',\n allowHandlebars: true,\n allowCode: true,\n })}\n focused={false}\n interactive={false}\n schemaValidator={() => null}\n onLinkMouseDown={() => {}}\n dontHighlightErrors\n />\n )}\n </OptionLabel>\n <PillType>{item.returnType}</PillType>\n </HStack>\n {item.description && <OptionDescription>{item.description}</OptionDescription>}\n </StyledListboxOption>\n );\n } else {\n const isExitMethodChainOption = item.id === EXIT_METHOD_CHAIN_VALUE_TYPE_OPTION.id;\n\n return (\n <StyledListboxOption\n $interactive\n $bottomBorder={isExitMethodChainOption}\n $iconFocus={isExitMethodChainOption}\n ref={ref}\n {...optionProps}\n aria-label={item.ariaLabel}\n data-focused={isFocused ? 'true' : 'false'}\n >\n <HStack justify='space-between'>\n {isExitMethodChainOption ? (\n <OptionLabel $heading>\n <HStack align='center' justify='center'>\n <StyledArrowLeftIcon />\n {item.label}\n </HStack>\n </OptionLabel>\n ) : (\n <OptionLabel>{item.label}</OptionLabel>\n )}\n {item.returnType && <PillType>{item.returnType}</PillType>}\n </HStack>\n {item.description && <OptionDescription>{item.description}</OptionDescription>}\n </StyledListboxOption>\n );\n }\n};\n\ninterface SmartTextInputListboxProps {\n comboboxState: ComboBoxState<SmartTextInputOption>;\n listBoxRef: React.RefObject<HTMLDivElement>;\n listBoxProps: ListBoxProps<SmartTextInputOption>;\n mode: Mode;\n isLoading: boolean;\n openCodeChainFunctionPanel?: () => void;\n}\n\nconst SmartTextInputListbox = ({\n comboboxState,\n listBoxRef,\n listBoxProps,\n mode,\n isLoading,\n openCodeChainFunctionPanel,\n}: SmartTextInputListboxProps) => {\n const listBox = useListBox(\n { ...listBoxProps, 'aria-label': mode === Mode.Text ? 'Context menu' : 'Data path options' },\n comboboxState,\n listBoxRef,\n );\n\n const nodes = [...comboboxState.collection];\n\n return (\n <StyledListBox ref={listBoxRef} {...listBox.listBoxProps}>\n {mode === Mode.MethodChain && nodes[0]?.value?.id !== 'exitMethodChainValueType' && (\n <>\n <StyledListboxOption $bottomBorder>\n <OptionLabel $heading>Data path</OptionLabel>\n </StyledListboxOption>\n </>\n )}\n {mode === Mode.Text && (\n <>\n <StyledListboxOption $bottomBorder>\n <OptionLabel $heading>{buildTextModeHeading(nodes)}</OptionLabel>\n </StyledListboxOption>\n <StyledListboxOption>\n <OptionLabel $heading>Modes</OptionLabel>\n </StyledListboxOption>\n </>\n )}\n {nodes.length === 0 || (mode !== Mode.Text && isLoading) ? (\n <>\n <EmptyOptionList>No options available</EmptyOptionList>\n {openCodeChainFunctionPanel && (\n <FooterContainer>\n <Button variant='basic' size='sm' onClick={openCodeChainFunctionPanel}>\n Create custom chain\n </Button>\n </FooterContainer>\n )}\n </>\n ) : (\n nodes.map((node) =>\n node.value ? (\n <ListboxOption key={node.key} item={node.value} state={comboboxState} />\n ) : null,\n )\n )}\n </StyledListBox>\n );\n};\n\nexport default SmartTextInputListbox;\n","import { useMemo } from 'react';\n\nimport type { ChainRoot, PossibleChainSchema } from 'design-system/lib/chainTypes';\nimport type { JsonSchema } from 'design-system/lib/jsonSchema';\nimport {\n type Chain,\n type MethodChainNode,\n methodChainToString,\n} from 'design-system/lib/methodChain';\nimport { normalizeChain } from 'design-system/lib/methodChainNormalize';\nimport type { FunctionJsonSchema, ObjectSchemaMap } from 'design-system/lib/objectSchemaTypes';\nimport useChain from 'design-system/lib/useChain';\n\nimport type {\n ASTParenOpenNode,\n ASTFunctionNode,\n ASTCustomFunctionNode,\n} from './parser/method-chain/types';\nimport { NodeType, type ASTNode } from './parser/smart-text/types';\nimport type { ValueType } from './types';\nimport { findChainAtCursor, isQueryMatch, replaceChainAtCursor } from './utils';\n\n/**\n * Extracts the chain context at the cursor position in a single pass.\n *\n * Returns:\n * - `chainString`: dot-joined names of all identifier links that end strictly\n * before the cursor. The link at or containing the cursor is excluded so\n * that `useChain` resolves the PARENT's options.\n * When `assumeOnNextLink` is true, the link at the cursor IS included so\n * that `useChain` resolves that link's children instead.\n * - `partialQuery`: partial text typed for the link at the cursor, used to\n * filter the dropdown. Always '' when `assumeOnNextLink` is true.\n *\n * Examples (cursor position denoted by |, normal mode):\n * `trigger.|` → { chainString: \"trigger\", partialQuery: \"\" }\n * `trigger.case.|` → { chainString: \"trigger.case\", partialQuery: \"\" }\n * `trigger.cas|e` → { chainString: \"trigger\", partialQuery: \"cas\" }\n * `trigger.case|` → { chainString: \"trigger\", partialQuery: \"case\" }\n * `trigger|` → { chainString: \"\", partialQuery: \"trigger\" }\n * `tri|gger` → { chainString: \"\", partialQuery: \"tri\" }\n */\nexport function extractChainContextAtCursor(\n tree: ASTNode,\n cursorIdx: number | null,\n valueType: ValueType,\n assumeOnNextLink: boolean,\n): { chainString: string; partialQuery: string } {\n const chainNode = findChainAtCursor(tree, cursorIdx, valueType);\n if (!chainNode) {\n return { chainString: '', partialQuery: '' };\n }\n\n const idx = cursorIdx ?? 0;\n let cutoffIdx = chainNode.children.length;\n let partialQuery = '';\n\n for (let i = 0; i < chainNode.children.length; i++) {\n const link = chainNode.children[i];\n\n // Detect a WIP '@' error — user started a custom function name (e.g. \"id.@\").\n if (link.type === NodeType.Error && (link as { kind?: string }).kind === 'trailingAtSign') {\n if (!assumeOnNextLink) {\n partialQuery = '@';\n cutoffIdx = i;\n }\n break;\n }\n\n if (\n link.type !== NodeType.Identifier &&\n link.type !== NodeType.Function &&\n link.type !== NodeType.CustomFunction\n ) {\n continue;\n }\n\n let shouldInclude = assumeOnNextLink ? link.end <= idx : link.end < idx;\n // Exclude an incomplete function call (has ParenOpen but no ParenClose in children) when\n // the cursor is past the opening paren — the listbox handles it as a completion candidate.\n if (\n shouldInclude &&\n (link.type === NodeType.Function || link.type === NodeType.CustomFunction)\n ) {\n const fn = link as ASTFunctionNode | ASTCustomFunctionNode;\n const parenOpen = fn.children.find(\n (c): c is ASTParenOpenNode => c.type === NodeType.ParenOpen,\n );\n const hasParenClose = fn.children.some((c) => c.type === NodeType.ParenClose);\n if (parenOpen && !hasParenClose && parenOpen.end <= idx) {\n shouldInclude = false;\n }\n }\n\n if (!shouldInclude) {\n cutoffIdx = i;\n if (!assumeOnNextLink && link.start < idx) {\n partialQuery = link.name.slice(0, Math.min(idx - link.start, link.name.length));\n }\n break;\n }\n }\n\n const subChain = normalizeChain({\n ...chainNode,\n children: chainNode.children.slice(0, cutoffIdx),\n });\n\n return { chainString: methodChainToString(subChain), partialQuery };\n}\n\n/**\n * Resolves schema-driven method chain options for the current cursor\n * position in a SmartTextInput.\n *\n * Wraps `useChain` with cursor-aware chain extraction: it reads the AST to\n * determine which chain context the cursor is in (inside `{{...}}`, inside\n * `${...}`, or a bare top-level chain), derives the partial chain string\n * representing all links before the cursor, and returns the next possible\n * options from the schema.\n *\n * When `chainConfig` is absent, returns an empty options list.\n */\nexport const useChainAtCursor = ({\n value,\n onUpdateChain,\n tree,\n cursorIdx,\n valueType,\n assumeOnNextLink = false,\n useChainRootDescriptions,\n chainRoots,\n primitivesSchema,\n platformObjectJsonSchema,\n defaultPrimitiveUtilities,\n codeChainFunctionSchema,\n getSchemaOptionsOverride,\n sortOptionsBy,\n}: {\n value: string;\n onUpdateChain: (value: string, newCursorIdx: number) => void;\n tree: ASTNode;\n cursorIdx: number | null;\n valueType: ValueType;\n useChainRootDescriptions: boolean;\n chainRoots: ChainRoot[];\n primitivesSchema: 'none' | 'default' | ObjectSchemaMap;\n platformObjectJsonSchema: ObjectSchemaMap;\n defaultPrimitiveUtilities: ObjectSchemaMap;\n codeChainFunctionSchema?: Record<string, Record<string, FunctionJsonSchema>>;\n getSchemaOptionsOverride?: Parameters<typeof useChain>[0]['getSchemaOptionsOverride'];\n sortOptionsBy?: (option: PossibleChainSchema) => number;\n assumeOnNextLink?: boolean;\n}): [\n currentChain: Chain,\n {\n appendChain: (newNodes: MethodChainNode[], meta?: { isFunction?: boolean }) => void;\n insertChainAtCursor: (nodes: MethodChainNode[]) => void;\n nextPossibleChains: PossibleChainSchema[];\n resolveSchema: (chainStr: string) => JsonSchema | null;\n currentSchema: JsonSchema | null;\n query: string;\n },\n] => {\n const { chainString, partialQuery } = extractChainContextAtCursor(\n tree,\n cursorIdx,\n valueType,\n assumeOnNextLink,\n );\n\n const [\n currentChain,\n { appendChain, commitChain, nextPossibleChains, resolveSchema, currentSchema },\n ] = useChain({\n chainString,\n chainRoots,\n primitivesSchema,\n platformObjectJsonSchema,\n defaultPrimitiveUtilities,\n codeChainFunctionSchema,\n useChainRootDescriptions,\n getSchemaOptionsOverride,\n onUpdateChain: (newChainString, meta: { schema?: JsonSchema | null; isFunction?: boolean }) => {\n if (meta.isFunction) {\n newChainString = newChainString + '()';\n }\n const { newValue, newCursorIdx: rawCursorIdx } = replaceChainAtCursor(\n value,\n valueType,\n cursorIdx,\n tree,\n newChainString,\n );\n // Place cursor between the parens for function calls.\n onUpdateChain(newValue, meta.isFunction ? rawCursorIdx - 1 : rawCursorIdx);\n },\n });\n\n const nextPossibleChainsSorted = useMemo(() => {\n let chains = nextPossibleChains;\n if (partialQuery) {\n const query = partialQuery.toLowerCase();\n chains = chains.filter((item) => isQueryMatch(query, item));\n }\n if (!sortOptionsBy) {\n return chains;\n }\n return [...chains].sort((a, b) => sortOptionsBy(a) - sortOptionsBy(b));\n }, [nextPossibleChains, partialQuery, sortOptionsBy]);\n\n // insertChainAtCursor replaces the function node at the cursor with `nodes`, preserving any\n // links that follow it in the full chain. Unlike appendChain (which only knows the partial chain\n // up to the cursor), this reads the full chain from the AST to recover the suffix.\n const insertChainAtCursor = (nodes: MethodChainNode[]) => {\n const fullChainNode = findChainAtCursor(tree, cursorIdx, valueType);\n if (fullChainNode == null) {\n appendChain(nodes);\n return;\n }\n const suffix = normalizeChain(fullChainNode).links.slice(\n currentChain.links.length + nodes.length,\n );\n commitChain(\n methodChainToString({\n type: NodeType.Chain,\n links: [...currentChain.links, ...nodes, ...suffix],\n }),\n );\n };\n\n return [\n currentChain,\n {\n appendChain,\n insertChainAtCursor,\n nextPossibleChains: nextPossibleChainsSorted,\n resolveSchema,\n currentSchema,\n query: partialQuery,\n },\n ];\n};\n","import { type ReactNode, useCallback, useState } from 'react';\n\nimport type { CodeChainFunctionPanelRenderProps, OpenCodeChainFunctionPanel } from './types';\n\n/**\n * Manages opening and rendering the CCF editing panel.\n */\nexport const useCodeChainFunctionPanel = ({\n enabled,\n canCreate,\n renderPanel: renderPanelContent,\n onOpen,\n onSaveNew,\n}: {\n enabled: boolean;\n canCreate: boolean;\n renderPanel?: (props: CodeChainFunctionPanelRenderProps) => ReactNode;\n onOpen: () => void;\n onSaveNew: (savedName: string) => void;\n}): {\n renderPanel: () => ReactNode;\n openPanel: OpenCodeChainFunctionPanel | undefined;\n} => {\n const [panelProps, setPanelProps] = useState<Omit<\n CodeChainFunctionPanelRenderProps,\n 'onClose'\n > | null>(null);\n\n const closePanel = useCallback(\n ({ savedName }: { savedName?: string } = {}) => {\n setPanelProps(null);\n if (savedName) {\n onSaveNew(savedName);\n }\n },\n [onSaveNew],\n );\n const renderPanel = useCallback(() => {\n return panelProps != null && renderPanelContent != null\n ? renderPanelContent({ ...panelProps, onClose: closePanel })\n : null;\n }, [panelProps, closePanel, renderPanelContent]);\n const openPanel = useCallback(\n (panelProps: Omit<CodeChainFunctionPanelRenderProps, 'onClose'>) => {\n setPanelProps(panelProps);\n onOpen();\n },\n [onOpen],\n );\n\n return {\n renderPanel,\n openPanel: enabled && canCreate && renderPanelContent != null ? openPanel : undefined,\n };\n};\n","import { useCallback, useEffect, useMemo, type ReactNode } from 'react';\nimport styled from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport type { ChainRoot } from 'design-system/lib/chainTypes';\nimport {\n JsonSchemaStringifiableTypes,\n type JsonSchemaObject,\n JsonSchemaTypes,\n type JsonSchema,\n getNonNullableRefSchema,\n getNonNullableType,\n isSchemaTypeAllowed,\n} from 'design-system/lib/jsonSchema';\nimport { methodChainToString } from 'design-system/lib/methodChain';\nimport { normalizeChain } from 'design-system/lib/methodChainNormalize';\nimport type { FunctionJsonSchema, ObjectSchemaMap } from 'design-system/lib/objectSchemaTypes';\nimport { getFunctionSchemaForNode, getSchemaForFieldPath } from 'design-system/lib/schemaOptions';\nimport { useChainSchema } from 'design-system/lib/useChain';\n\nimport {\n type ASTCustomFunctionNode,\n isAnyASTFunctionNode,\n type ASTFunctionNode,\n} from './parser/method-chain/types';\nimport {\n type ASTNode,\n ErrorMessageByKind,\n type ErrorNode,\n isASTChainNode,\n isMethodChainNode,\n NodeType,\n} from './parser/smart-text/types';\nimport { enclosingExpr, findAll } from './parser/tree';\nimport PillType from './PillType';\nimport { ValueType } from './types';\n\nconst SchemaErrorMessage = styled.span`\n display: inline-flex;\n align-items: center;\n gap: ${Spacing[1]};\n`;\n\nexport type SchemaValidator = (\n tree: ASTNode,\n) => { start: number; end: number; name: string; message?: string } | null;\n\ntype SchemaError = { start: number; end: number; name: string; message?: string };\n\nfunction validateFunctionParams(\n link: ASTFunctionNode | ASTCustomFunctionNode,\n parentSchema: JsonSchema,\n platformObjectJsonSchema: ObjectSchemaMap | undefined,\n primitiveUtilities: ObjectSchemaMap | undefined,\n): SchemaError | null {\n // Skip incomplete (unclosed) calls — those are handled by the syntax error system.\n if (!link.children.some((c) => c.type === NodeType.ParenClose)) {\n return null;\n }\n\n const functionName = link.type === NodeType.CustomFunction ? `@${link.name}` : link.name;\n const funcSchema = getFunctionSchemaForNode({\n parentSchema,\n functionName,\n isCustomFunction: link.type === NodeType.CustomFunction,\n platformObjectJsonSchema: platformObjectJsonSchema ?? {},\n primitiveUtilities: primitiveUtilities ?? {},\n });\n if (funcSchema == null) {\n return { start: link.start, end: link.end, name: link.name };\n }\n\n const expectedParamCount = Object.keys(funcSchema.properties.parameterTypes.properties).length;\n const actualParamCount = link.children.filter(\n (c) =>\n c.type === NodeType.Chain ||\n c.type === NodeType.String ||\n c.type === NodeType.Number ||\n c.type === NodeType.Array,\n ).length;\n\n if (expectedParamCount !== actualParamCount) {\n return {\n start: link.start,\n end: link.end,\n name: link.name,\n message: `has ${expectedParamCount} parameter, but ${actualParamCount} were provided.`,\n };\n }\n return null;\n}\n\n/**\n * Returns the first chain identifier span that fails schema validation, walking\n * all chains left-to-right. Once the first invalid link is found, subsequent\n * links are meaningless and validation stops.\n */\nexport function findSchemaErrors(\n tree: ASTNode,\n rootSchema: JsonSchema,\n platformObjectJsonSchema?: ObjectSchemaMap,\n primitiveUtilities?: ObjectSchemaMap,\n): SchemaError | null {\n // Collect all chain nodes in the tree.\n const nodes = findAll(tree, NodeType.Chain).filter(isASTChainNode);\n\n for (const chainNode of nodes) {\n const identifierLinks = chainNode.children.filter(isMethodChainNode);\n\n let prevSchema: JsonSchema = rootSchema;\n\n for (const [linkIndex, link] of identifierLinks.entries()) {\n // Serialize the chain prefix rather than joining bare link names so function\n // params stay in the path: functions whose return schema is parameter-driven\n // (e.g. collect_from_each) resolve to an empty schema when the params are\n // dropped, and every later link then reports \"does not exist\".\n const partialPath = methodChainToString(\n normalizeChain({ ...chainNode, children: identifierLinks.slice(0, linkIndex + 1) }),\n ).replace(/^\\./, '');\n const { schema } = getSchemaForFieldPath({\n path: partialPath,\n initialSchema: rootSchema,\n platformObjectJsonSchema,\n primitiveUtilities,\n });\n if (schema == null) {\n // A strict CCF after a possibly-null value exists but is rejected by\n // the null-compatibility rule; \"does not exist\" would misdirect the\n // author toward a typo.\n if (\n link.type === NodeType.CustomFunction &&\n (getNonNullableRefSchema(prevSchema) != null || getNonNullableType(prevSchema) != null)\n ) {\n const fn = getFunctionSchemaForNode({\n parentSchema: prevSchema,\n functionName: `@${link.name}`,\n isCustomFunction: true,\n platformObjectJsonSchema: platformObjectJsonSchema ?? {},\n primitiveUtilities: primitiveUtilities ?? {},\n });\n if (fn != null && fn.acceptsNullReceiver !== true) {\n return {\n start: link.start,\n end: link.end,\n name: link.name,\n message: 'does not accept a possibly null value.',\n };\n }\n }\n return { start: link.start, end: link.end, name: link.name };\n }\n\n if (isAnyASTFunctionNode(link)) {\n const paramError = validateFunctionParams(\n link,\n prevSchema,\n platformObjectJsonSchema,\n primitiveUtilities,\n );\n if (paramError != null) {\n return paramError;\n }\n }\n\n prevSchema = schema;\n }\n\n // Chains inside {{...}} must resolve to a stringable type — objects are not valid.\n // Skip for incomplete chains:\n // - WIP errors in the chain (trailing dot, unclosed paren) — user still typing\n // - Unclosed Handlebars — the closing }} is missing, so the expression isn't done yet\n const hasIncomplete = (findAll(chainNode, NodeType.Error) as ErrorNode[]).some((c) => c.wip);\n const enclosing = enclosingExpr(tree, chainNode);\n const inClosedHandlebars =\n enclosing?.type === NodeType.Handlebars &&\n !enclosing.children?.some(\n (c) => c.type === NodeType.Error && (c as { kind?: string }).kind === 'unclosedHandlebars',\n );\n if (!hasIncomplete && identifierLinks.length > 0 && inClosedHandlebars) {\n const isStringable = isSchemaTypeAllowed(prevSchema, JsonSchemaStringifiableTypes);\n if (!isStringable) {\n const lastLink = identifierLinks[identifierLinks.length - 1];\n return {\n start: lastLink.start,\n end: lastLink.end,\n name: lastLink.name,\n message: 'is not a string value.',\n };\n }\n }\n }\n return null;\n}\n\nexport const useSchemaValidator = ({\n chainRoots,\n primitivesSchema,\n platformObjectJsonSchema,\n defaultPrimitiveUtilities,\n codeChainFunctionSchema,\n isLoading,\n}: {\n chainRoots: ChainRoot[];\n primitivesSchema: 'none' | 'default' | ObjectSchemaMap;\n platformObjectJsonSchema: ObjectSchemaMap;\n defaultPrimitiveUtilities: ObjectSchemaMap;\n codeChainFunctionSchema?: Record<string, Record<string, FunctionJsonSchema>>;\n isLoading: boolean;\n}): SchemaValidator => {\n const { platformObjectJsonSchema: resolvedPlatformSchema, primitiveUtilities } = useChainSchema({\n primitivesSchema,\n platformObjectJsonSchema,\n defaultPrimitiveUtilities,\n codeChainFunctionSchema,\n });\n\n const rootSchema: JsonSchemaObject = useMemo(\n () => ({\n type: JsonSchemaTypes.Object,\n properties: Object.fromEntries(\n chainRoots.map((r) => [methodChainToString(r.chain), r.schema]),\n ),\n }),\n [chainRoots],\n );\n\n return useCallback(\n (tree: ASTNode) =>\n isLoading\n ? null\n : findSchemaErrors(tree, rootSchema, resolvedPlatformSchema, primitiveUtilities),\n [rootSchema, resolvedPlatformSchema, primitiveUtilities, isLoading],\n );\n};\n\nfunction getError(\n leftmostSyntaxError: ErrorNode | undefined,\n leftmostIncompleteError: ErrorNode | undefined,\n leftmostSchemaError: SchemaError | undefined,\n focused: boolean,\n valueIsEmpty: boolean,\n): { errorKey: string | null; errorText: ReactNode | null } {\n if (leftmostSyntaxError != null) {\n return {\n errorKey: `syntax:${leftmostSyntaxError.kind}`,\n errorText:\n (leftmostSyntaxError.kind && ErrorMessageByKind[leftmostSyntaxError.kind]) ||\n 'Syntax error',\n };\n } else if (leftmostSchemaError != null && !focused) {\n return {\n errorKey: `schema:${leftmostSchemaError.name}:${leftmostSchemaError.message ?? ''}`,\n errorText: (\n <SchemaErrorMessage>\n <PillType as='span' error>\n {leftmostSchemaError.name}\n </PillType>{' '}\n {leftmostSchemaError.message ?? 'does not exist.'}\n </SchemaErrorMessage>\n ),\n };\n } else if (leftmostIncompleteError != null && !focused && !valueIsEmpty) {\n return {\n errorKey: `incomplete:${leftmostIncompleteError.kind}`,\n errorText:\n (leftmostIncompleteError.kind && ErrorMessageByKind[leftmostIncompleteError.kind]) ||\n 'Expression is incomplete',\n };\n } else {\n return { errorKey: null, errorText: null };\n }\n}\n\n/**\n * Calls the onValidationChange callback when the input's value is invalid in some manner based\n * on syntax or schema.\n */\nexport const useInternalValidation = ({\n tree,\n valueIsEmpty,\n focused,\n schemaValidator,\n onValidationChange,\n value,\n valueType,\n}: {\n tree: ASTNode;\n valueIsEmpty: boolean;\n focused: boolean;\n schemaValidator: SchemaValidator;\n onValidationChange?: (errorText: ReactNode | null) => void;\n value: string;\n valueType: ValueType;\n}) => {\n const errorNodes = findAll(tree, NodeType.Error) as Array<ErrorNode>;\n let leftmostSyntaxError = errorNodes.find((e) => e.start < e.end && !e.wip);\n const leftmostIncompleteError = errorNodes.find((e) => e.start === e.end);\n const leftmostSchemaError = useMemo(() => schemaValidator(tree), [tree, schemaValidator]);\n\n if (\n leftmostSyntaxError != null &&\n valueType === ValueType.MethodChain &&\n (value.includes('{{') || value.includes('${'))\n ) {\n leftmostSyntaxError = { ...leftmostSyntaxError, kind: 'interpolationInDataPath' };\n }\n\n // Stable string key that changes when the error type or content changes.\n // Used as the effect dep to avoid firing onValidationChange on every render\n // when the error node has JSX identity (schema error case).\n const { errorKey, errorText } = getError(\n leftmostSyntaxError,\n leftmostIncompleteError,\n leftmostSchemaError ?? undefined,\n focused,\n valueIsEmpty,\n );\n\n // Call onValidationChange callback when the input's value is invalid in some manner based\n // on syntax or schema.\n useEffect(() => {\n onValidationChange?.(errorText);\n // errorKey is a stable string proxy for the computedError ReactNode identity.\n // oxlint-disable-next-line eslint-plugin-react-hooks/exhaustive-deps\n }, [errorKey, onValidationChange]);\n};\n","// oxlint-disable persona-web/no-core-color-tokens\n\nimport { useState, useRef, useCallback, useMemo, type ReactNode, useEffect } from 'react';\nimport { type Key, FocusScope, mergeProps, useComboBox } from 'react-aria';\nimport { Item, useComboBoxState } from 'react-stately';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Typography } from '@persona/design-tokens';\nimport Input from 'design-system/components/Input';\nimport { assertNever } from 'design-system/lib/assertNever';\nimport type { ChainRoot, PossibleChainSchema } from 'design-system/lib/chainTypes';\nimport {\n isCreatableReceiverSchema,\n isNoArgCodeChainFunction,\n} from 'design-system/lib/customFunctionSchema';\nimport { isFunctionSchema } from 'design-system/lib/jsonSchema';\nimport type { JsonSchema } from 'design-system/lib/jsonSchema';\nimport {\n isEmpty,\n MethodChainNodeTypes,\n methodChainToString,\n type MethodChainNode,\n} from 'design-system/lib/methodChain';\nimport type { FunctionJsonSchema, ObjectSchemaMap } from 'design-system/lib/objectSchemaTypes';\nimport type useChain from 'design-system/lib/useChain';\n\nimport { HighlightedText, HighlightedTextOverlay } from './HighlightedText';\nimport {\n EXIT_METHOD_CHAIN_VALUE_TYPE_OPTION,\n getContextMenuOptions,\n getMethodChainOptions,\n type ContextMenuExamples,\n type SmartTextInputOption,\n} from './listbox-options';\nimport { safeParse } from './parser/safe-parse';\nimport { NodeType, type ASTNode } from './parser/smart-text/types';\nimport SmartTextInputCodeDialog from './SmartTextInputCodeDialog';\nimport SmartTextInputFunctionDialog from './SmartTextInputFunctionDialog';\nimport SmartTextInputListbox from './SmartTextInputListbox';\nimport SmartTextInputPopover, { type DialogFocusHandle } from './SmartTextInputPopover';\nimport {\n Mode,\n ValueType,\n PopupMode,\n type CustomFunctionDetailRenderProps,\n type FunctionFormRenderProps,\n type PopoverFooterRenderer,\n type CodeChainFunctionPanelRenderProps,\n} from './types';\nimport { useChainAtCursor } from './useChainAtCursor';\nimport { useCodeChainFunctionPanel } from './useCodeChainFunctionPanel';\nimport {\n isChainWithValidRoot,\n syncScroll,\n scrollInputToCursor,\n getMode,\n canTransitionToValueType,\n isInterpolationModeAllowed,\n canExitToInterpolation,\n getFunctionAtCursor,\n isCursorAfterFunctionClose,\n isCursorInExpressionToken,\n getConfirmLinkCursorPos,\n safeCursorIdx,\n findChainAtCursor,\n isCustomFunctionAtStart,\n} from './utils';\nimport { useInternalValidation, useSchemaValidator } from './validation';\n\ntype StyledInputProps = {\n $variant: 'default' | 'table-cell';\n};\nconst StyledInput = styled(Input)<StyledInputProps>`\n ${Typography.TextMono}\n position: relative;\n z-index: 2;\n color: transparent;\n background: transparent;\n caret-color: ${Color.TextPrimary};\n white-space: pre;\n overflow: hidden;\n\n ${({ size }) =>\n size === 'sm' &&\n css`\n font-size: 12px;\n `}\n ${({ $variant }) =>\n $variant === 'table-cell' &&\n css`\n border: none;\n padding: 0;\n height: 18px;\n border-radius: 0;\n `}\n`;\n\nconst withClosingToken = (key: '{' | '(' | '[' | \"'\"): string => {\n switch (key) {\n case '{':\n return '{}';\n case '(':\n return '()';\n case '[':\n return '[]';\n case \"'\":\n return \"''\";\n default:\n assertNever(key);\n }\n};\n\nconst spliceAtCursor = (value: string, insert: string, cursorIdx: number): string =>\n value.slice(0, cursorIdx) + insert + value.slice(cursorIdx);\n\nconst getInitialValueType = (\n chainRoots: ChainRoot[],\n initialValue?: string,\n allowedValueType?: ValueType,\n): ValueType => {\n if (allowedValueType != null) {\n return allowedValueType;\n }\n return initialValue && isChainWithValidRoot(initialValue, chainRoots)\n ? ValueType.MethodChain\n : ValueType.Interpolation;\n};\n\nexport interface SmartTextInputProps {\n // Input behavior props\n /**\n * Lock the input to a single value type. When set, transitions between value types are\n * prohibited. null or undefined allows free switching (default behavior).\n */\n valueType?: ValueType;\n /**\n * Restrict which interpolation expression types are available. Applies only when\n * valueType is 'interpolation' or unset. Ignored when valueType is 'method-chain'.\n *\n * - [Mode.MethodChain]: only {{...}} expressions\n * - [Mode.Code]: only ${...} expressions\n * - [Mode.MethodChain, Mode.Code] or undefined: both (default)\n */\n allowedInterpolationModes?: (Mode.MethodChain | Mode.Code)[];\n\n // Schema props\n chainRoots: ChainRoot[];\n primitivesSchema?: 'none' | 'default' | ObjectSchemaMap;\n platformObjectJsonSchema: ObjectSchemaMap;\n defaultPrimitiveUtilities: ObjectSchemaMap;\n codeChainFunctionSchema?: Record<string, Record<string, FunctionJsonSchema>>;\n getSchemaOptionsOverride?: Parameters<typeof useChain>[0]['getSchemaOptionsOverride'];\n isLoading?: boolean;\n sortOptionsBy?: (option: PossibleChainSchema) => number;\n useChainRootDescriptions?: boolean;\n\n // Value control\n value?: string;\n onChange?: (\n value: string,\n meta: { valueType: ValueType; schema: JsonSchema | null; ast: ASTNode },\n ) => void;\n\n /**\n * Override the example labels shown in the context menu (Text mode listbox).\n * Each key corresponds to one context menu option. Omitted keys keep their defaults.\n */\n contextMenuExamples?: ContextMenuExamples;\n\n // Other props\n /**\n * Called when the component's internally-computed validation error changes.\n * Receives a ReactNode (or null when valid) that can be passed directly to\n * a FormField's errorText prop. Covers syntax errors, schema errors, and\n * incomplete-expression errors.\n */\n onValidationChange?: (errorText: ReactNode | null) => void;\n size?: 'sm' | 'md';\n variant?: 'default' | 'table-cell';\n /**\n * Container to render the input's popover into using a portal.\n * - If undefiend, the popover will be portaled into a default element.\n * - If null, the popover will not be portaled and will be rendered in-place.\n */\n portalContainerRef?: HTMLElement | null;\n creatable?: boolean;\n renderFunctionForm?: (props: FunctionFormRenderProps) => ReactNode;\n renderCustomFunctionDetail?: (props: CustomFunctionDetailRenderProps) => ReactNode;\n renderCodeChainFunctionPanel?: (props: CodeChainFunctionPanelRenderProps) => ReactNode;\n canCreateCodeChainFunction?: boolean;\n popoverFooter?: PopoverFooterRenderer;\n\n // Regular input props\n id?: string;\n placeholder?: string;\n disabled?: boolean;\n autoFocus?: boolean;\n}\n\n/**\n * Smart text input for configuring access to data, interpolated strings, or inline code.\n */\nconst SmartTextInput = ({\n value: passedValue,\n onChange,\n valueType: allowedValueType,\n allowedInterpolationModes,\n chainRoots,\n platformObjectJsonSchema,\n defaultPrimitiveUtilities,\n codeChainFunctionSchema,\n useChainRootDescriptions = false,\n primitivesSchema = 'default',\n isLoading = false,\n portalContainerRef,\n getSchemaOptionsOverride,\n creatable = false,\n renderFunctionForm,\n renderCustomFunctionDetail,\n renderCodeChainFunctionPanel,\n canCreateCodeChainFunction = false,\n sortOptionsBy,\n onValidationChange,\n contextMenuExamples,\n popoverFooter,\n id,\n placeholder = 'Select or type',\n disabled = false,\n size = 'md',\n variant = 'default',\n ...props\n}: SmartTextInputProps) => {\n // value prop is an initial value only — the component always manages its own state so that\n // intermediate/invalid states during editing are never blocked by the caller.\n const lastNotifiedValueRef = useRef(passedValue ?? '');\n const [value, setValue] = useState(passedValue ?? '');\n\n useEffect(() => {\n // Check against undefined exactly for uncontrolled/controlled behavior\n // oxlint-disable-next-line @persona-id/eqeq-null-undefined\n if (passedValue !== undefined && passedValue !== lastNotifiedValueRef.current) {\n setValue(passedValue);\n lastNotifiedValueRef.current = passedValue;\n }\n }, [passedValue]);\n\n // Keep a stable ref to onChange so the notify effect never goes stale\n // without needing onChange in its dep array (which would re-fire on every render).\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const [cursorIdx, setCursor] = useState<number | null>(null);\n const [valueType, setValueType] = useState(\n getInitialValueType(chainRoots, passedValue, allowedValueType),\n );\n\n // After selecting a link from the popover the cursor lands at the end of the\n // committed identifier. assumeOnNextLink sets the option list to be for the next link instead\n // of filtering the current link. Any user keystroke (onChange on the input) clears this state.\n const [assumeOnNextLinkState, setAssumeOnNextLink] = useState(false);\n // When true, forces popupMode to FunctionDialog even when the cursor is not inside the\n // function's parens. Set by clicking a custom code function span; cleared by the same\n // user inputs that clear assumeOnNextLink.\n const [forceFunctionDialog, setForceFunctionDialog] = useState(false);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const listBoxRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const dialogFocusRef = useRef<DialogFocusHandle>(null);\n\n // Used to store state that should be applied in the next render.\n const nextRenderRef = useRef<{\n // Update cursor position after a value change through setValue.\n cursor?: {\n start: number;\n end: number;\n };\n // Update the focused key in the next render.\n focusedKey?: string;\n // Focus the input in the next render.\n focusInput?: boolean;\n // Open the popover in the next render.\n openPopover?: boolean;\n }>({});\n const blockEscapePropagationRef = useRef(false);\n\n const tree = safeParse(value, {\n startRule: valueType === ValueType.MethodChain ? 'ChainRoot' : 'Root',\n allowHandlebars: isInterpolationModeAllowed(\n Mode.MethodChain,\n allowedValueType,\n allowedInterpolationModes,\n ),\n allowCode: isInterpolationModeAllowed(Mode.Code, allowedValueType, allowedInterpolationModes),\n });\n const mode = getMode(tree, valueType, cursorIdx);\n\n // When cursor is between chars of a {{ or }} token, suppress the popover without\n // changing combobox state (so focus/open state is preserved for when cursor exits).\n const suppressPopover = isCursorInExpressionToken(tree, cursorIdx, valueType);\n\n // In addition to tracked state, when cursor is after a function close,\n // treat assumeOnNextLink as true\n const assumeOnNextLink =\n assumeOnNextLinkState || isCursorAfterFunctionClose(tree, cursorIdx, valueType);\n\n useEffect(() => {\n if (!inputRef.current) {\n return;\n }\n const input = inputRef.current;\n const listener = () => {\n setCursor(input.selectionStart);\n syncScroll(inputRef, overlayRef);\n };\n\n input.addEventListener('selectionchange', listener);\n return () => {\n input.removeEventListener('selectionchange', listener);\n };\n }, []);\n\n const [\n currentChain,\n { appendChain, insertChainAtCursor, nextPossibleChains, resolveSchema, currentSchema, query },\n ] = useChainAtCursor({\n value,\n tree,\n cursorIdx,\n valueType,\n chainRoots,\n primitivesSchema,\n platformObjectJsonSchema,\n defaultPrimitiveUtilities,\n codeChainFunctionSchema,\n getSchemaOptionsOverride,\n useChainRootDescriptions,\n sortOptionsBy,\n assumeOnNextLink,\n onUpdateChain: (newValue, newCursorIdx) => {\n setValue(newValue);\n nextRenderRef.current.cursor = { start: newCursorIdx, end: newCursorIdx };\n },\n });\n\n // Fire onChange after each render where value or valueType changed. Using an effect\n // ensures tree and schema are computed from the committed render state, not mid-event.\n useEffect(() => {\n if (value === lastNotifiedValueRef.current) {\n return;\n }\n lastNotifiedValueRef.current = value;\n onChangeRef.current?.(value, { valueType, schema: resolveSchema(value), ast: tree });\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n // Detect if cursor is inside a function and compute popup mode.\n const functionAtCursor = getFunctionAtCursor(tree, cursorIdx, valueType);\n const showingFunctionDialog =\n functionAtCursor != null && (functionAtCursor.cursorInParens || forceFunctionDialog);\n const popupMode = showingFunctionDialog\n ? PopupMode.FunctionDialog\n : mode === Mode.Code\n ? PopupMode.CodeDialog\n : PopupMode.Listbox;\n\n const comboboxItems = useMemo<SmartTextInputOption[]>(() => {\n if (suppressPopover) {\n return [];\n }\n if (popupMode === PopupMode.FunctionDialog || popupMode === PopupMode.CodeDialog) {\n return [];\n } else if (mode === Mode.Text) {\n return getContextMenuOptions(\n value === '',\n allowedValueType,\n allowedInterpolationModes,\n contextMenuExamples,\n );\n } else if (mode === Mode.MethodChain) {\n const items = getMethodChainOptions(nextPossibleChains);\n if (valueType === ValueType.MethodChain && canExitToInterpolation(value, allowedValueType)) {\n items.unshift(EXIT_METHOD_CHAIN_VALUE_TYPE_OPTION);\n }\n return items;\n } else {\n return [];\n }\n }, [\n valueType,\n allowedValueType,\n allowedInterpolationModes,\n contextMenuExamples,\n suppressPopover,\n popupMode,\n mode,\n value,\n nextPossibleChains,\n ]);\n\n const comboboxState = useComboBoxState({\n items: comboboxItems,\n children: (item) => <Item key={item.id}>{item.label}</Item>,\n allowsCustomValue: true,\n allowsEmptyCollection: true,\n disabledKeys: comboboxItems\n .filter((item) => item.disabled || !item.interactive)\n .map((item) => item.id),\n menuTrigger: 'focus',\n // When a dialog (function/code) is open, blur should not close the combobox\n // TODO: try to re-enable this, it is causing focus to remaing on input when clicking outside\n // of the dialog popover\n // shouldCloseOnBlur: popupMode === PopupMode.Listbox,\n onOpenChange: (open, trigger) => {\n // Don't open the popover if it is closed and react-aria attempts to open it because of\n // input changes. Only allow re-opening on focus or manual (DownArrow key press) trigger.\n if (open && trigger === 'input') {\n comboboxState.setOpen(false);\n }\n },\n selectedKey: null,\n onSelectionChange: (key) => {\n switch (mode) {\n case Mode.Text:\n switch (key) {\n case 'insertCustomCode': {\n const idx = safeCursorIdx(cursorIdx, tree);\n setValue(spliceAtCursor(value, '${}', idx));\n nextRenderRef.current.cursor = {\n start: idx + 2,\n end: idx + 2,\n };\n break;\n }\n case 'insertMethodChainHandlebars': {\n const idx = safeCursorIdx(cursorIdx, tree);\n setValue(spliceAtCursor(value, '{{}}', idx));\n nextRenderRef.current.cursor = {\n start: idx + 2,\n end: idx + 2,\n };\n break;\n }\n case 'enterMethodChainMode':\n setValueType(ValueType.MethodChain);\n setValue('');\n nextRenderRef.current.focusedKey = '__secondKey';\n break;\n }\n break;\n case Mode.MethodChain: {\n // Handle special value for exiting method chain value type\n if (key === 'exitMethodChainValueType') {\n setValueType(ValueType.Interpolation);\n setValue('');\n nextRenderRef.current.focusedKey = 'enterMethodChainMode';\n break;\n }\n\n const option = nextPossibleChains.find((n) => n.value === key);\n const chain = option?.methodChain?.links?.[0];\n\n if (chain) {\n const schema = option?.schema;\n const isNoArgCCF =\n schema != null && isFunctionSchema(schema) && isNoArgCodeChainFunction(schema);\n\n const confirmCursorPos = getConfirmLinkCursorPos(\n tree,\n valueType,\n currentChain,\n chain,\n schema,\n cursorIdx,\n );\n if (confirmCursorPos != null) {\n setCursor(confirmCursorPos);\n nextRenderRef.current.cursor = { start: confirmCursorPos, end: confirmCursorPos };\n } else {\n appendChain([chain], {\n isFunction: isFunctionSchema(schema) && !isNoArgCCF,\n });\n }\n\n if (\n chain.type !== NodeType.Function &&\n (chain.type !== NodeType.CustomFunction || isNoArgCCF)\n ) {\n // Show the selected link's children rather than filtering by its name.\n setAssumeOnNextLink(true);\n }\n }\n break;\n }\n case Mode.Code:\n break;\n }\n },\n });\n const combobox = useComboBox(\n {\n id,\n inputRef,\n listBoxRef,\n popoverRef,\n shouldFocusWrap: true,\n ...props,\n },\n comboboxState,\n );\n\n useEffect(() => {\n if (nextRenderRef.current.focusInput === true) {\n nextRenderRef.current.focusInput = undefined;\n inputRef.current?.focus();\n }\n\n if (nextRenderRef.current.cursor) {\n const { start, end } = nextRenderRef.current.cursor;\n nextRenderRef.current.cursor = undefined;\n inputRef.current?.setSelectionRange(start, end);\n // WebKit: selectionchange does not fire when the cursor lands exactly at the end of the\n // string (selectionStart === value.length). Defer a cursor state sync via microtask so it\n // runs after any focus-return events. Non-end-of-string cursors (e.g. inside function parens)\n // reliably get updated via selectionchange when focus returns, so we skip them here.\n if (start === value.length) {\n const startCapture = start;\n void Promise.resolve().then(() => setCursor(startCapture));\n }\n scrollInputToCursor(inputRef, end);\n syncScroll(inputRef, overlayRef);\n }\n\n if (nextRenderRef.current.focusedKey) {\n let key: Key | null = nextRenderRef.current.focusedKey;\n nextRenderRef.current.focusedKey = undefined;\n switch (key) {\n case '__firstKey':\n key = comboboxState.collection.getFirstKey();\n break;\n case '__secondKey':\n key = comboboxState.collection.getFirstKey();\n if (key != null) {\n key = comboboxState.collection.getKeyAfter(key);\n }\n break;\n }\n comboboxState.selectionManager.setFocusedKey(key);\n }\n\n if (nextRenderRef.current.openPopover === true) {\n nextRenderRef.current.openPopover = undefined;\n comboboxState.setOpen(true);\n }\n });\n\n // Open the popover when mode changes to MethodChain and input is focused.\n useEffect(() => {\n if (mode === Mode.MethodChain && comboboxState.isFocused) {\n comboboxState.open('first', 'manual');\n }\n // oxlint-disable-next-line eslint-plugin-react-hooks/exhaustive-deps\n }, [mode]);\n\n /**\n * Effect to select the first key in the popover consistently\n * - When the popover is opened.\n * - When popover options change.\n */\n useEffect(() => {\n if (comboboxState.isOpen && comboboxState.selectionManager.focusedKey == null) {\n let key = comboboxState.collection.getFirstKey();\n if (key != null) {\n if (key === 'exitMethodChainValueType') {\n key = comboboxState.collection.getKeyAfter(key);\n }\n comboboxState.selectionManager.setFocusedKey(key);\n }\n }\n }, [\n comboboxState.isOpen,\n comboboxState.selectionManager.focusedKey,\n comboboxState.collection,\n comboboxState.selectionManager,\n comboboxItems,\n ]);\n\n const handleWheel = useCallback(function (e: React.WheelEvent) {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n e.preventDefault();\n input.scrollLeft += e.deltaX || e.deltaY;\n syncScroll(inputRef, overlayRef);\n }, []);\n\n const handleMouseMove = useCallback(function () {\n syncScroll(inputRef, overlayRef);\n }, []);\n\n /**\n * Handle clicks on links in a method chain to automatically text select the link.\n */\n const handleLinkMouseDown = useCallback(\n function (linkStart: number, linkEnd: number, _e: React.MouseEvent) {\n setAssumeOnNextLink(false);\n if (isCustomFunctionAtStart(tree, linkStart)) {\n setForceFunctionDialog(true);\n }\n const el = inputRef.current;\n if (el) {\n el.focus();\n el.setSelectionRange(linkStart, linkEnd);\n comboboxState.setOpen(true);\n }\n },\n [comboboxState, tree],\n );\n\n const handleFunctionConfirm = useCallback(\n (nodes: MethodChainNode[]) => {\n // insertChainAtCursor replaces the function at the cursor and preserves any suffix links\n // that follow it in the full chain (e.g. .page_size(#2).first after page_number(#1)).\n insertChainAtCursor(nodes);\n comboboxState.setOpen(false);\n setAssumeOnNextLink(true);\n setForceFunctionDialog(false);\n nextRenderRef.current.focusInput = true;\n nextRenderRef.current.openPopover = true;\n if (functionAtCursor != null) {\n const newFnStr = methodChainToString({ type: NodeType.Chain, links: nodes });\n const newCursorIdx = functionAtCursor.start + newFnStr.length - 1;\n setCursor(newCursorIdx);\n nextRenderRef.current.cursor = { start: newCursorIdx, end: newCursorIdx };\n }\n },\n [\n insertChainAtCursor,\n functionAtCursor,\n setAssumeOnNextLink,\n nextRenderRef,\n comboboxState,\n setCursor,\n ],\n );\n\n const handleCodeConfirm = useCallback(() => {\n comboboxState.setOpen(false);\n nextRenderRef.current.focusInput = true;\n }, [comboboxState]);\n\n const handleDialogCancel = useCallback(() => {\n nextRenderRef.current.focusInput = true;\n setForceFunctionDialog(false);\n\n // If the cancel is closing the custom function dialog with forceFunctionDialog set\n // we want to open the options listbox instead of closing the popover\n if (functionAtCursor != null && functionAtCursor.custom && forceFunctionDialog) {\n return;\n } else {\n comboboxState.setOpen(false);\n }\n }, [comboboxState, functionAtCursor, forceFunctionDialog]);\n\n const schemaValidator = useSchemaValidator({\n chainRoots,\n primitivesSchema,\n isLoading,\n platformObjectJsonSchema,\n defaultPrimitiveUtilities,\n codeChainFunctionSchema,\n });\n\n useInternalValidation({\n tree,\n valueIsEmpty: value === '',\n focused: comboboxState.isFocused,\n schemaValidator,\n onValidationChange,\n value,\n valueType,\n });\n\n const { renderPanel: renderCcfPanel, openPanel: openCcfPanel } = useCodeChainFunctionPanel({\n enabled: creatable && !isEmpty(currentChain) && isCreatableReceiverSchema(currentSchema),\n canCreate: canCreateCodeChainFunction,\n renderPanel: renderCodeChainFunctionPanel,\n onOpen: () => {\n comboboxState.setOpen(false);\n },\n onSaveNew: (savedName: string) => {\n appendChain([{ type: MethodChainNodeTypes.CustomFunction, name: savedName, params: [] }]);\n setAssumeOnNextLink(true);\n setForceFunctionDialog(false);\n nextRenderRef.current.focusInput = true;\n comboboxState.setOpen(true);\n },\n });\n\n const showFunctionDialog = popupMode === PopupMode.FunctionDialog && comboboxState.isOpen;\n const showCodeDialog = popupMode === PopupMode.CodeDialog && comboboxState.isOpen;\n\n const popoverFooterRendered = useMemo(() => {\n return popoverFooter == null\n ? undefined\n : popoverFooter({\n closePopover() {\n comboboxState.setOpen(false);\n if (inputRef.current) {\n inputRef.current.scrollLeft = 0;\n }\n },\n });\n }, [popoverFooter, comboboxState]);\n\n // Strip aria-errormessage and aria-invalid from the combobox hook output — we derive these\n // from our own computed validation state instead of react-aria's validation system.\n const {\n 'aria-errormessage': _ariaErrormessage,\n 'aria-invalid': _ariaInvalid,\n ...inputProps\n } = combobox.inputProps;\n\n return (\n <>\n <FocusScope contain={showFunctionDialog || showCodeDialog}>\n <HighlightedTextOverlay\n onWheel={handleWheel}\n onMouseMove={handleMouseMove}\n overlayRef={overlayRef}\n inputIsFocused={comboboxState.isFocused}\n mode={mode}\n size={size}\n variant={variant}\n valueType={valueType}\n isLoading={isLoading}\n highlightedText={\n value ? (\n <HighlightedText\n value={value}\n tree={tree}\n focused={comboboxState.isFocused}\n interactive={!disabled}\n schemaValidator={schemaValidator}\n onLinkMouseDown={handleLinkMouseDown}\n cursorIdx={cursorIdx}\n />\n ) : null\n }\n >\n <StyledInput\n {...mergeProps(\n {\n ...inputProps,\n // This onKeyDown handler actually overrides the react-aria handler.\n // We do this to intercept before react-aria handler runs.\n onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => {\n // When the dialog is open, Tab from the input should move focus to the\n // first focusable element in the dialog rather than triggering react-aria's\n // default Tab handler\n if (e.key === 'Tab' && (showFunctionDialog || showCodeDialog)) {\n e.preventDefault();\n e.stopPropagation();\n dialogFocusRef.current?.focusFirst();\n return;\n }\n\n // Call react-aria onKeyDown\n inputProps.onKeyDown?.(e);\n },\n },\n {\n onPaste: (e: React.ClipboardEvent<HTMLInputElement>) => {\n // Handle auto-detection of valueType = MethodChain when pasting a chain into empty input.\n if (\n value === '' &&\n canTransitionToValueType(ValueType.MethodChain, allowedValueType) &&\n isChainWithValidRoot(e.clipboardData.getData('text'), chainRoots)\n ) {\n setValueType(ValueType.MethodChain);\n }\n },\n onKeyDownCapture: (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (\n e.key === 'Tab' &&\n comboboxState.isOpen &&\n !showFunctionDialog &&\n !showCodeDialog\n ) {\n comboboxState.setOpen(false);\n }\n // Prevent ArrowDown/ArrowUp from moving the cursor to end/start of input.\n // useComboBox handles these keys for popover navigation but doesn't call preventDefault.\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n }\n },\n onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => {\n // Handle {Backspace} out of method chain value type\n if (\n e.key === 'Backspace' &&\n valueType === ValueType.MethodChain &&\n value === '' &&\n canTransitionToValueType(ValueType.Interpolation, allowedValueType)\n ) {\n setValueType(ValueType.Interpolation);\n setValue('');\n nextRenderRef.current.focusedKey = 'enterMethodChainMode';\n return;\n }\n\n // Handle {Backspace} out of method chain value type when the entire\n // chain is selected.\n if (\n e.key === 'Backspace' &&\n valueType === ValueType.MethodChain &&\n inputRef.current?.selectionStart === 0 &&\n inputRef.current?.selectionEnd === value.length &&\n canTransitionToValueType(ValueType.Interpolation, allowedValueType)\n ) {\n setValueType(ValueType.Interpolation);\n setValue('');\n return;\n }\n\n // Handle '.' to enter method chain value type.\n // - Enter method chain value type when the input is empty on '.'.\n // - Enter method chain value type when the input is a valid root chain on '.'.\n if (\n e.key === '.' &&\n valueType === ValueType.Interpolation &&\n canTransitionToValueType(ValueType.MethodChain, allowedValueType)\n ) {\n if (value === '') {\n setValueType(ValueType.MethodChain);\n setValue('');\n nextRenderRef.current.focusedKey = '__secondKey';\n // Prevent input from being updated through onChange.\n e.preventDefault();\n return;\n } else if (\n isChainWithValidRoot(value, chainRoots, {\n onlyAllowSingleLink: true,\n })\n ) {\n setValueType(ValueType.MethodChain);\n return;\n }\n }\n\n // Insert a dot when assumeOnNextLink is true and the user types anything\n // that could be the valid start of a link.\n // Let regular event handling insert the actual character.\n if (assumeOnNextLink && /^[a-zA-Z0-9]$/.test(e.key)) {\n const idx = safeCursorIdx(cursorIdx, tree);\n setValue(spliceAtCursor(value, '.', idx));\n nextRenderRef.current.cursor = {\n start: idx + 1,\n end: idx + 1,\n };\n setAssumeOnNextLink(false);\n return;\n }\n // Keys that don't modify the value but should clear assumeOnNextLink/forceFunctionDialog.\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight' || e.key === 'Escape') {\n setAssumeOnNextLink(false);\n setForceFunctionDialog(false);\n }\n\n // When deleting a character, move the cursor back one character as well\n // so it is set correctly before the sync from onselectionchange.\n //\n // This fixes flashing the wrong listbox options when deleting characters.\n // that are part of typeahead.\n if (e.key === 'Backspace') {\n setCursor(safeCursorIdx(cursorIdx, tree));\n return;\n }\n\n // Add closing tokens when typing opening tokens.\n if (e.key === '{' || e.key === '(') {\n const idx = safeCursorIdx(cursorIdx, tree);\n setValue(spliceAtCursor(value, withClosingToken(e.key), idx));\n nextRenderRef.current.cursor = {\n start: idx + 1,\n end: idx + 1,\n };\n // Prevent input from being updated through onChange.\n e.preventDefault();\n return;\n }\n\n // In method chain mode, insert matching closing character for ' and [.\n if ((e.key === \"'\" || e.key === '[') && mode === Mode.MethodChain) {\n const idx = safeCursorIdx(cursorIdx, tree);\n setValue(spliceAtCursor(value, withClosingToken(e.key), idx));\n nextRenderRef.current.cursor = {\n start: idx + 1,\n end: idx + 1,\n };\n e.preventDefault();\n return;\n }\n\n // Block escape propagation if the combobox is open\n if (e.key === 'Escape' && comboboxState.isOpen) {\n blockEscapePropagationRef.current = true;\n e.stopPropagation();\n }\n },\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => {\n // Block escape propagation if the combobox is open (using ref since onKeyDown\n // handles the state changes of the input).\n if (e.key === 'Escape' && blockEscapePropagationRef.current) {\n blockEscapePropagationRef.current = false;\n e.stopPropagation();\n }\n },\n onMouseDown: () => {\n setAssumeOnNextLink(false);\n setForceFunctionDialog(false);\n },\n onClick: () => {\n // Set assumeOnNextLink when the user clicks exactly at the end of a chain.\n // Must be onClick (not onMouseDown) — the browser positions the cursor during\n // mousedown, so selectionStart is stale until the click event fires.\n //\n // We do this check in onClick so that:\n // - The cursor position in the input has updated\n // - This event fires after onMouseDown, so the clearing of assumeOnNextLink has\n // already been called for this \"click\"\n const clickCursorPos = inputRef.current?.selectionStart ?? null;\n // WebKit: selectionchange may not fire for mouse clicks, so directly sync\n // cursor state here to keep computed options in sync with the DOM selection.\n if (clickCursorPos != null) {\n setCursor(clickCursorPos);\n }\n if (clickCursorPos != null && clickCursorPos === inputRef.current?.selectionEnd) {\n const chainNode = findChainAtCursor(tree, clickCursorPos, valueType);\n if (chainNode && clickCursorPos === chainNode.end) {\n setAssumeOnNextLink(true);\n }\n }\n },\n onBlur: () => {\n setAssumeOnNextLink(false);\n },\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n // Any direct keystroke (backspace, dot, regular typing) exits\n // assumeOnNextLink/forceFunctionDialog — the user is now editing, not just navigating.\n setAssumeOnNextLink(false);\n setForceFunctionDialog(false);\n setValue(e.target.value);\n syncScroll(inputRef, overlayRef);\n\n // Auto-close the context menu when typing in Text mode.\n if (comboboxState.isOpen && mode === Mode.Text) {\n comboboxState.setOpen(false);\n }\n },\n },\n )}\n data-smart-text-input='true'\n ref={inputRef}\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n size={size}\n $variant={variant}\n aria-haspopup={\n popupMode === PopupMode.FunctionDialog || popupMode === PopupMode.CodeDialog\n ? 'dialog'\n : inputProps['aria-haspopup']\n }\n {...(suppressPopover ? { 'aria-expanded': false } : {})}\n />\n </HighlightedTextOverlay>\n {!suppressPopover && (\n <SmartTextInputPopover\n id={`${id}__popover`} // Set ID for external click handling\n comboboxState={comboboxState}\n popoverRef={popoverRef}\n inputRef={inputRef}\n variant={variant}\n isDialog={showFunctionDialog || showCodeDialog}\n onDialogClose={handleDialogCancel}\n dialogFocusRef={dialogFocusRef}\n portalContainerRef={portalContainerRef}\n footer={popoverFooterRendered}\n >\n {showFunctionDialog && functionAtCursor != null ? (\n <SmartTextInputFunctionDialog\n id={combobox.listBoxProps.id!}\n inputRef={inputRef}\n functionAtCursor={functionAtCursor}\n nextPossibleChains={nextPossibleChains}\n chainRoots={chainRoots}\n onConfirm={handleFunctionConfirm}\n onCancel={handleDialogCancel}\n renderFunctionForm={renderFunctionForm}\n renderCustomFunctionDetail={renderCustomFunctionDetail}\n openCodeChainFunctionPanel={openCcfPanel}\n />\n ) : showCodeDialog ? (\n <SmartTextInputCodeDialog\n id={combobox.listBoxProps.id!}\n inputRef={inputRef}\n onConfirm={handleCodeConfirm}\n onCancel={handleDialogCancel}\n />\n ) : (\n <SmartTextInputListbox\n comboboxState={comboboxState}\n listBoxRef={listBoxRef}\n listBoxProps={combobox.listBoxProps}\n mode={mode}\n isLoading={isLoading}\n openCodeChainFunctionPanel={\n openCcfPanel\n ? () => {\n openCcfPanel({\n initialName: query,\n inputSchema: currentSchema,\n });\n }\n : undefined\n }\n />\n )}\n </SmartTextInputPopover>\n )}\n </FocusScope>\n {renderCcfPanel()}\n </>\n );\n};\n\nexport default SmartTextInput;\n","import { type CSSProperties, useState, type ComponentProps, type ReactNode } from 'react';\n\nimport { Spacing } from '@persona/design-tokens';\nimport { ErrorText, useFormField } from 'design-system/components/FormControl';\nimport type { ImplementsFormField } from 'design-system/components/FormField';\nimport FormField, { splitOutFormFieldProps } from 'design-system/components/FormField';\nimport { TableBoxField } from 'design-system/components/FormField';\nimport { Stack } from 'design-system/components/Stack';\n\nimport SmartTextInput from './SmartTextInput';\n\nexport interface SmartTextInputFieldProps\n extends ImplementsFormField, Omit<ComponentProps<typeof SmartTextInput>, 'onValidationChange'> {\n formFieldStyle?: CSSProperties;\n /** Marks the input invalid without requiring visible error text. */\n hasError?: boolean;\n /** Renders as a borderless TableBox cell instead of the bordered FormField wrapper. */\n asTableBoxCell?: boolean;\n /** Props for the TableBox cell. */\n tableBoxCellProps?: ComponentProps<typeof TableBoxField.Cell>;\n}\n\nexport const SmartTextInputForField = (props: ComponentProps<typeof SmartTextInput>) => {\n const field = useFormField({ inputId: props.id });\n\n return <SmartTextInput {...props} id={field.inputId} aria-labelledby={field.labelId} />;\n};\n\n/**\n * FormField wrapper for SmartTextInput so callers can use shared\n * helper/warning/error text plumbing without duplicating wrappers.\n */\nconst SmartTextInputField = (props: SmartTextInputFieldProps) => {\n const [fromInputErrorText, setErrorText] = useState<ReactNode>(null);\n const { formFieldProps, inputProps } = splitOutFormFieldProps(props);\n const { formFieldStyle, hasError, asTableBoxCell, tableBoxCellProps, ...rest } = inputProps;\n\n const errorText = formFieldProps.errorText ?? fromInputErrorText;\n\n if (asTableBoxCell) {\n return (\n // TODO: Properly handle error messages for TableBox cells\n <TableBoxField.Cell {...tableBoxCellProps}>\n <SmartTextInputForField\n onValidationChange={setErrorText}\n variant='table-cell'\n size='sm'\n {...rest}\n />\n </TableBoxField.Cell>\n );\n }\n\n return (\n <FormField\n {...formFieldProps}\n inputId={formFieldProps.inputId ?? rest.id}\n errorText={errorText}\n hasError={hasError || !!errorText}\n style={formFieldStyle}\n >\n <Stack spacing={Spacing[1]} fullWidth>\n <SmartTextInputForField onValidationChange={setErrorText} {...rest} />\n {/* TODO: Remove this when FormField is fixed to render error text in config mode */}\n {/* This is a hack to ensure the errors render for the moment */}\n {errorText && formFieldProps.configField && <ErrorText>{errorText}</ErrorText>}\n </Stack>\n </FormField>\n );\n};\n\nexport default SmartTextInputField;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { i as peg$parse, n as peg$SyntaxError, r as peg$allowedStartRules } from "../../../../parser-Kxos6siN.mjs";
1
+ import { i as peg$parse, n as peg$SyntaxError, r as peg$allowedStartRules } from "../../../../parser-BeTiVjRs.mjs";
2
2
  export { peg$allowedStartRules as StartRules, peg$SyntaxError as SyntaxError, peg$parse as parse };
@@ -1,2 +1,2 @@
1
- import { _ as isASTMethodChainNode, a as ASTErrorNode, c as ASTIdentifierNode, d as ASTNumberNode, f as ASTParenCloseNode, g as isASTCustomFunctionNode, h as ErrorKind, i as ASTDotNode, l as ASTMethodChainNode, m as ASTStringNode, n as ASTChain, o as ASTFunctionNode, p as ASTParenOpenNode, r as ASTCustomFunctionNode, s as ASTFunctionParamType, t as ASTArrayNode, u as ASTNodeType, v as isAnyASTFunctionNode, y as isRealASTFunctionParamType } from "../../../../types-BGMmkUpy.mjs";
1
+ import { _ as isASTMethodChainNode, a as ASTErrorNode, c as ASTIdentifierNode, d as ASTNumberNode, f as ASTParenCloseNode, g as isASTCustomFunctionNode, h as ErrorKind, i as ASTDotNode, l as ASTMethodChainNode, m as ASTStringNode, n as ASTChain, o as ASTFunctionNode, p as ASTParenOpenNode, r as ASTCustomFunctionNode, s as ASTFunctionParamType, t as ASTArrayNode, u as ASTNodeType, v as isAnyASTFunctionNode, y as isRealASTFunctionParamType } from "../../../../types-l-arEBLb.mjs";
2
2
  export { ASTArrayNode, ASTChain, ASTCustomFunctionNode, ASTDotNode, ASTErrorNode, ASTFunctionNode, ASTFunctionParamType, ASTIdentifierNode, ASTMethodChainNode, ASTNodeType, ASTNumberNode, ASTParenCloseNode, ASTParenOpenNode, ASTStringNode, ErrorKind, isASTCustomFunctionNode, isASTMethodChainNode, isAnyASTFunctionNode, isRealASTFunctionParamType };
@@ -1,4 +1,4 @@
1
- import { t as parser_exports } from "../../../../parser-Kxos6siN.mjs";
1
+ import { t as parser_exports } from "../../../../parser-BeTiVjRs.mjs";
2
2
  //#region components/SmartTextInput/parser/smart-text/parser.js
3
3
  /**
4
4
  * ==============================================================================
@@ -1,72 +1,3 @@
1
- import { a as ASTErrorNode, f as ASTParenCloseNode, l as ASTMethodChainNode, n as ASTChain, p as ASTParenOpenNode, u as ASTNodeType } from "../../../../types-BGMmkUpy.mjs";
2
-
3
- //#region components/SmartTextInput/parser/smart-text/types.d.ts
4
- type ErrorKind = NonNullable<ASTErrorNode['kind']> | 'unclosedHandlebars' | 'emptyHandlebars' | 'invalidHandlebarsContent' | 'interpolationInDataPath';
5
- declare const ErrorMessageByKind: Record<ErrorKind, string>;
6
- declare enum SmartTextInputNodeType {
7
- Root = "root",
8
- Text = "text",
9
- Handlebars = "handlebars",
10
- Code = "code",
11
- HBOpen = "hb_open",
12
- HBClose = "hb_close",
13
- CodeOpen = "code_open",
14
- CodeClose = "code_close",
15
- Space = "space"
16
- }
17
- declare const NodeType: {
18
- readonly Chain: ASTNodeType.Chain;
19
- readonly Identifier: ASTNodeType.Identifier;
20
- readonly Function: ASTNodeType.Function;
21
- readonly CustomFunction: ASTNodeType.CustomFunction;
22
- readonly String: ASTNodeType.String;
23
- readonly Number: ASTNodeType.Number;
24
- readonly Array: ASTNodeType.Array;
25
- readonly ParenOpen: ASTNodeType.ParenOpen;
26
- readonly ParenClose: ASTNodeType.ParenClose;
27
- readonly Error: ASTNodeType.Error;
28
- readonly Dot: ASTNodeType.Dot;
29
- readonly Root: SmartTextInputNodeType.Root;
30
- readonly Text: SmartTextInputNodeType.Text;
31
- readonly Handlebars: SmartTextInputNodeType.Handlebars;
32
- readonly Code: SmartTextInputNodeType.Code;
33
- readonly HBOpen: SmartTextInputNodeType.HBOpen;
34
- readonly HBClose: SmartTextInputNodeType.HBClose;
35
- readonly CodeOpen: SmartTextInputNodeType.CodeOpen;
36
- readonly CodeClose: SmartTextInputNodeType.CodeClose;
37
- readonly Space: SmartTextInputNodeType.Space;
38
- };
39
- type ErrorNode = {
40
- type: 'error';
41
- start: number;
42
- end: number;
43
- children?: ASTNode[];
44
- wip?: boolean;
45
- kind?: ErrorKind;
46
- };
47
- type ASTNode = {
48
- type: 'root' | 'text' | 'handlebars' | 'code' | 'space' | 'hb_open' | 'hb_close' | 'code_open' | 'code_close';
49
- start: number;
50
- end: number;
51
- children?: ASTNode[];
52
- } | ErrorNode | ASTChain;
53
- declare const isASTChainNode: (node: {
54
- type: string;
55
- }) => node is ASTChain;
56
- /**
57
- * Narrows to named method-chain nodes (Identifier, Function, CustomFunction).
58
- * These are the nodes that carry a `.name` property.
59
- * Dot nodes and Error nodes are excluded.
60
- */
61
- declare const isMethodChainNode: (node: {
62
- type: string;
63
- }) => node is ASTMethodChainNode;
64
- type ASTContainerNode = Extract<ASTNode, {
65
- children?: ASTNode[];
66
- }>;
67
- declare const isASTContainerNode: (node: {
68
- type: string;
69
- }) => node is ASTContainerNode;
70
- //#endregion
71
- export { ASTNode, type ASTParenCloseNode, type ASTParenOpenNode, ErrorKind, ErrorMessageByKind, ErrorNode, NodeType, isASTChainNode, isASTContainerNode, isMethodChainNode };
72
- //# sourceMappingURL=types.d.mts.map
1
+ import { f as ASTParenCloseNode, p as ASTParenOpenNode } from "../../../../types-l-arEBLb.mjs";
2
+ import { a as NodeType, c as isMethodChainNode, i as ErrorNode, n as ErrorKind, o as isASTChainNode, r as ErrorMessageByKind, s as isASTContainerNode, t as ASTNode } from "../../../../types-BB5WwerD.mjs";
3
+ export { ASTNode, ASTParenCloseNode, ASTParenOpenNode, ErrorKind, ErrorMessageByKind, ErrorNode, NodeType, isASTChainNode, isASTContainerNode, isMethodChainNode };
@@ -1,2 +1,2 @@
1
- import { t as Spacer_default } from "../../Spacer-BFOuo0sZ.mjs";
1
+ import { t as Spacer_default } from "../../Spacer-J_HuhxX2.mjs";
2
2
  export { Spacer_default as default };
@@ -1,2 +1,2 @@
1
- import { t as Spinner } from "../../Spinner-BlAg8_OX.mjs";
1
+ import { t as Spinner } from "../../Spinner-uVZyOh1T.mjs";
2
2
  export { Spinner, Spinner as default };
@@ -1,2 +1,2 @@
1
- import { i as StackProps, n as HStackProps, r as Stack, t as HStack } from "../../Stack-CYqjBXe8.mjs";
1
+ import { i as StackProps, n as HStackProps, r as Stack, t as HStack } from "../../Stack-opuYfQvc.mjs";
2
2
  export { HStack, HStackProps, Stack, Stack as default, StackProps };
@@ -1,2 +1,2 @@
1
- import { n as Stack, t as HStack } from "../../Stack-Bkn0TUDe.mjs";
1
+ import { n as Stack, t as HStack } from "../../Stack-BkC7FCdF.mjs";
2
2
  export { HStack, Stack, Stack as default };
@@ -1,2 +1,2 @@
1
- import { n as StatusIndicator, t as STATUSES } from "../../StatusIndicator-DT2zNbkp.mjs";
1
+ import { n as StatusIndicator, t as STATUSES } from "../../StatusIndicator-akDwBiBW.mjs";
2
2
  export { STATUSES, StatusIndicator, StatusIndicator as default };
@@ -1,2 +1,2 @@
1
- import { a as StickerContentContainer, i as StickerContainer, n as STICKER_COLOR_CONFIG, o as StickerProps, r as Sticker, s as StyledTruncatedText, t as LabelBackgrounds } from "../../Sticker-BmyKaxwx.mjs";
1
+ import { a as StickerContentContainer, i as StickerContainer, n as STICKER_COLOR_CONFIG, o as StickerProps, r as Sticker, s as StyledTruncatedText, t as LabelBackgrounds } from "../../Sticker-rxBNVYlX.mjs";
2
2
  export { LabelBackgrounds, STICKER_COLOR_CONFIG, Sticker, Sticker as default, StickerContainer, StickerContentContainer, StickerProps, StyledTruncatedText };
@@ -1,2 +1,2 @@
1
- import { a as StyledTruncatedText, i as StickerContentContainer, n as Sticker, r as StickerContainer, t as STICKER_COLOR_CONFIG } from "../../Sticker-BLbgJxcH.mjs";
1
+ import { a as StyledTruncatedText, i as StickerContentContainer, n as Sticker, r as StickerContainer, t as STICKER_COLOR_CONFIG } from "../../Sticker-DdhSpTcV.mjs";
2
2
  export { STICKER_COLOR_CONFIG, Sticker, Sticker as default, StickerContainer, StickerContentContainer, StyledTruncatedText };
@@ -1,2 +1,2 @@
1
- import { a as TabContainer, i as TabBar, n as StyledTab, r as Tab, t as TabBarIconButton_default } from "../../TabBar-Bj84q1Mr.mjs";
1
+ import { a as TabContainer, i as TabBar, n as StyledTab, r as Tab, t as TabBarIconButton_default } from "../../TabBar-DBOPWUUa.mjs";
2
2
  export { StyledTab, Tab, TabBar, TabBar as default, TabBarIconButton_default as TabBarIconButton, TabContainer };
@@ -1,9 +1,9 @@
1
- import { t as Table } from "../../Table-DhdHUQ8V.mjs";
2
- import { t as TableHeaderCell } from "../../TableHeaderCell-C7gp9j1X.mjs";
3
- import { t as TableRow } from "../../TableRow-BJZM8I8i.mjs";
4
- import { a as TableCellProps, c as TableTD, i as TableCell, l as TableTR, n as StickyTH, o as TableCellTitle, r as TableActionTD, s as TableIconTD, t as StickyTD } from "../../TableCell-CGPQRc5g.mjs";
5
- import { t as TableHead } from "../../TableHead-36j-_oyn.mjs";
6
- import { t as TableBody } from "../../TableBody-qoSvQDds.mjs";
7
- import { t as TableTH } from "../../index-BXSe73Xn.mjs";
8
- import { t as TableLayout } from "../../TableLayout-CQqIV0vj.mjs";
1
+ import { t as Table } from "../../Table-Bt7zAlgQ.mjs";
2
+ import { t as TableHeaderCell } from "../../TableHeaderCell-C1PJHhXZ.mjs";
3
+ import { t as TableRow } from "../../TableRow-B1yeAiVf.mjs";
4
+ import { a as TableCellProps, c as TableTD, i as TableCell, l as TableTR, n as StickyTH, o as TableCellTitle, r as TableActionTD, s as TableIconTD, t as StickyTD } from "../../TableCell-WD0ultKh.mjs";
5
+ import { t as TableHead } from "../../TableHead-DqcFsWpz.mjs";
6
+ import { t as TableBody } from "../../TableBody-9AYpXi2y.mjs";
7
+ import { t as TableTH } from "../../index-Blo6W_k0.mjs";
8
+ import { t as TableLayout } from "../../TableLayout-B4qzMWXH.mjs";
9
9
  export { StickyTD, StickyTH, Table, Table as default, TableActionTD, TableBody, TableCell, TableCellProps, TableCellTitle, TableHead, TableHeaderCell, TableIconTD, TableLayout, TableRow, TableTD, TableTH, TableTR };
@@ -1,2 +1,2 @@
1
- import { a as StickyTH, c as TableCellTitle, d as TableTR, f as TableTH, h as Table, i as StickyTD, l as TableIconTD, m as TableHeaderCell, n as TableBody, o as TableActionTD, p as TableRow, r as TableHead, s as TableCell, t as TableLayout, u as TableTD } from "../../Table-WqNfjasd.mjs";
1
+ import { a as StickyTH, c as TableCellTitle, d as TableTR, f as TableTH, h as Table, i as StickyTD, l as TableIconTD, m as TableHeaderCell, n as TableBody, o as TableActionTD, p as TableRow, r as TableHead, s as TableCell, t as TableLayout, u as TableTD } from "../../Table--o4ZLRbb.mjs";
2
2
  export { StickyTD, StickyTH, Table, Table as default, TableActionTD, TableBody, TableCell, TableCellTitle, TableHead, TableHeaderCell, TableIconTD, TableLayout, TableRow, TableTD, TableTH, TableTR };
@@ -1,3 +1,3 @@
1
- import { t as DragDirection } from "../../useTableBoxDragAndDrop-Da4TiYBT.mjs";
2
- import { a as TableBox, o as TableBoxContext, r as InlineEditConfig, s as TableBoxProps } from "../../TableBoxCell-DzYMx4Ju.mjs";
1
+ import { t as DragDirection } from "../../useTableBoxDragAndDrop-Bw93rNFH.mjs";
2
+ import { a as TableBox, o as TableBoxContext, r as InlineEditConfig, s as TableBoxProps } from "../../TableBoxCell-6ovTrboM.mjs";
3
3
  export { DragDirection, InlineEditConfig, TableBoxContext, TableBoxProps, TableBox as default };
@@ -1,2 +1,2 @@
1
- import { n as TableBoxContext, t as TableBox } from "../../TableBox-obl64W5Y.mjs";
1
+ import { n as TableBoxContext, t as TableBox } from "../../TableBox-BGabyY7E.mjs";
2
2
  export { TableBoxContext, TableBox as default };
@@ -1,2 +1,2 @@
1
- import { t as TechnicalSticker } from "../../TechnicalSticker-CL0zkOAj.mjs";
1
+ import { t as TechnicalSticker } from "../../TechnicalSticker-CALVwnrT.mjs";
2
2
  export { TechnicalSticker, TechnicalSticker as default };