@dxos/react-ui-form 0.8.4-main.e8ec1fe → 0.8.4-main.effb148878

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 (268) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +0 -1
  3. package/dist/lib/browser/index.mjs +3240 -2345
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/translations.mjs +83 -0
  7. package/dist/lib/browser/translations.mjs.map +7 -0
  8. package/dist/lib/node-esm/index.mjs +3240 -2345
  9. package/dist/lib/node-esm/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/translations.mjs +85 -0
  12. package/dist/lib/node-esm/translations.mjs.map +7 -0
  13. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts +8 -7
  14. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts.map +1 -1
  15. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts +69 -59
  16. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/Form/Form.d.ts +123 -27
  18. package/dist/types/src/components/Form/Form.d.ts.map +1 -1
  19. package/dist/types/src/components/Form/Form.stories.d.ts +175 -137
  20. package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Form/FormField.d.ts +48 -0
  22. package/dist/types/src/components/Form/FormField.d.ts.map +1 -0
  23. package/dist/types/src/components/Form/FormFieldComponent.d.ts +95 -0
  24. package/dist/types/src/components/Form/FormFieldComponent.d.ts.map +1 -0
  25. package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts +9 -0
  26. package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts.map +1 -0
  27. package/dist/types/src/components/Form/FormFieldSet.d.ts +21 -0
  28. package/dist/types/src/components/Form/FormFieldSet.d.ts.map +1 -0
  29. package/dist/types/src/components/Form/FormTooltipsContext.d.ts +19 -0
  30. package/dist/types/src/components/Form/FormTooltipsContext.d.ts.map +1 -0
  31. package/dist/types/src/components/Form/Layout/FormLayout.d.ts +25 -0
  32. package/dist/types/src/components/Form/Layout/FormLayout.d.ts.map +1 -0
  33. package/dist/types/src/components/Form/Layout/FormLayout.stories.d.ts +116 -0
  34. package/dist/types/src/components/Form/Layout/FormLayout.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/Form/Layout/annotation.d.ts +30 -0
  36. package/dist/types/src/components/Form/Layout/annotation.d.ts.map +1 -0
  37. package/dist/types/src/components/Form/Layout/index.d.ts +4 -0
  38. package/dist/types/src/components/Form/Layout/index.d.ts.map +1 -0
  39. package/dist/types/src/components/Form/Layout/parser.d.ts +31 -0
  40. package/dist/types/src/components/Form/Layout/parser.d.ts.map +1 -0
  41. package/dist/types/src/components/Form/Layout/parser.test.d.ts +2 -0
  42. package/dist/types/src/components/Form/Layout/parser.test.d.ts.map +1 -0
  43. package/dist/types/src/components/Form/fields/ArrayField.d.ts +18 -0
  44. package/dist/types/src/components/Form/fields/ArrayField.d.ts.map +1 -0
  45. package/dist/types/src/components/Form/fields/BooleanField.d.ts +4 -0
  46. package/dist/types/src/components/Form/fields/BooleanField.d.ts.map +1 -0
  47. package/dist/types/src/components/Form/fields/DateField.d.ts +4 -0
  48. package/dist/types/src/components/Form/fields/DateField.d.ts.map +1 -0
  49. package/dist/types/src/components/Form/fields/GeoPointField.d.ts +5 -0
  50. package/dist/types/src/components/Form/fields/GeoPointField.d.ts.map +1 -0
  51. package/dist/types/src/components/Form/fields/MarkdownField.d.ts +11 -0
  52. package/dist/types/src/components/Form/fields/MarkdownField.d.ts.map +1 -0
  53. package/dist/types/src/components/Form/fields/MarkdownField.stories.d.ts +85 -0
  54. package/dist/types/src/components/Form/fields/MarkdownField.stories.d.ts.map +1 -0
  55. package/dist/types/src/components/Form/fields/NumberField.d.ts +4 -0
  56. package/dist/types/src/components/Form/fields/NumberField.d.ts.map +1 -0
  57. package/dist/types/src/components/Form/fields/RefField.d.ts +22 -0
  58. package/dist/types/src/components/Form/fields/RefField.d.ts.map +1 -0
  59. package/dist/types/src/components/Form/fields/SelectField.d.ts +13 -0
  60. package/dist/types/src/components/Form/fields/SelectField.d.ts.map +1 -0
  61. package/dist/types/src/components/Form/fields/SelectOptionField.d.ts +5 -0
  62. package/dist/types/src/components/Form/fields/SelectOptionField.d.ts.map +1 -0
  63. package/dist/types/src/components/Form/fields/SelectOptionField.stories.d.ts +85 -0
  64. package/dist/types/src/components/Form/fields/SelectOptionField.stories.d.ts.map +1 -0
  65. package/dist/types/src/components/Form/fields/TextAreaField.d.ts +4 -0
  66. package/dist/types/src/components/Form/fields/TextAreaField.d.ts.map +1 -0
  67. package/dist/types/src/components/Form/fields/TextField.d.ts +4 -0
  68. package/dist/types/src/components/Form/fields/TextField.d.ts.map +1 -0
  69. package/dist/types/src/components/Form/fields/TupleField.d.ts +6 -0
  70. package/dist/types/src/components/Form/fields/TupleField.d.ts.map +1 -0
  71. package/dist/types/src/components/Form/fields/index.d.ts +13 -0
  72. package/dist/types/src/components/Form/fields/index.d.ts.map +1 -0
  73. package/dist/types/src/components/Form/index.d.ts +4 -4
  74. package/dist/types/src/components/Form/index.d.ts.map +1 -1
  75. package/dist/types/src/components/ObjectForm/ObjectForm.d.ts +8 -0
  76. package/dist/types/src/components/ObjectForm/ObjectForm.d.ts.map +1 -0
  77. package/dist/types/src/components/ObjectForm/index.d.ts +2 -0
  78. package/dist/types/src/components/ObjectForm/index.d.ts.map +1 -0
  79. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts +37 -10
  80. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts.map +1 -1
  81. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts +65 -58
  82. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts.map +1 -1
  83. package/dist/types/src/components/ObjectProperties/ObjectProperties.d.ts +9 -0
  84. package/dist/types/src/components/ObjectProperties/ObjectProperties.d.ts.map +1 -0
  85. package/dist/types/src/components/ObjectProperties/ObjectProperties.stories.d.ts +128 -0
  86. package/dist/types/src/components/ObjectProperties/ObjectProperties.stories.d.ts.map +1 -0
  87. package/dist/types/src/components/ObjectProperties/ObjectProperties.test.d.ts +2 -0
  88. package/dist/types/src/components/ObjectProperties/ObjectProperties.test.d.ts.map +1 -0
  89. package/dist/types/src/components/ObjectProperties/index.d.ts +2 -0
  90. package/dist/types/src/components/ObjectProperties/index.d.ts.map +1 -0
  91. package/dist/types/src/components/ObjectTree/ObjectTree.d.ts +9 -0
  92. package/dist/types/src/components/ObjectTree/ObjectTree.d.ts.map +1 -0
  93. package/dist/types/src/components/ObjectTree/ObjectTree.stories.d.ts +87 -0
  94. package/dist/types/src/components/ObjectTree/ObjectTree.stories.d.ts.map +1 -0
  95. package/dist/types/src/components/ObjectTree/index.d.ts +2 -0
  96. package/dist/types/src/components/ObjectTree/index.d.ts.map +1 -0
  97. package/dist/types/src/components/Settings/Settings.d.ts +51 -0
  98. package/dist/types/src/components/Settings/Settings.d.ts.map +1 -0
  99. package/dist/types/src/components/Settings/Settings.stories.d.ts +85 -0
  100. package/dist/types/src/components/Settings/Settings.stories.d.ts.map +1 -0
  101. package/dist/types/src/components/Settings/SettingsFieldSet.d.ts +43 -0
  102. package/dist/types/src/components/Settings/SettingsFieldSet.d.ts.map +1 -0
  103. package/dist/types/src/components/Settings/SettingsItem.d.ts +16 -0
  104. package/dist/types/src/components/Settings/SettingsItem.d.ts.map +1 -0
  105. package/dist/types/src/components/Settings/SettingsSelectField.d.ts +18 -0
  106. package/dist/types/src/components/Settings/SettingsSelectField.d.ts.map +1 -0
  107. package/dist/types/src/components/Settings/index.d.ts +4 -0
  108. package/dist/types/src/components/Settings/index.d.ts.map +1 -0
  109. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts +14 -18
  110. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts.map +1 -1
  111. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts +71 -64
  112. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/index.d.ts +4 -1
  114. package/dist/types/src/components/index.d.ts.map +1 -1
  115. package/dist/types/src/components/testing.d.ts +13 -6
  116. package/dist/types/src/components/testing.d.ts.map +1 -1
  117. package/dist/types/src/hooks/index.d.ts +2 -3
  118. package/dist/types/src/hooks/index.d.ts.map +1 -1
  119. package/dist/types/src/hooks/useFormHandler.d.ts +82 -0
  120. package/dist/types/src/hooks/useFormHandler.d.ts.map +1 -0
  121. package/dist/types/src/hooks/useKeyHandler.d.ts +7 -0
  122. package/dist/types/src/hooks/useKeyHandler.d.ts.map +1 -0
  123. package/dist/types/src/index.d.ts +0 -2
  124. package/dist/types/src/index.d.ts.map +1 -1
  125. package/dist/types/src/translations.d.ts +66 -59
  126. package/dist/types/src/translations.d.ts.map +1 -1
  127. package/dist/types/src/util/field-type.d.ts +19 -0
  128. package/dist/types/src/util/field-type.d.ts.map +1 -0
  129. package/dist/types/src/util/field.d.ts +3 -3
  130. package/dist/types/src/util/field.d.ts.map +1 -1
  131. package/dist/types/src/util/formatting.d.ts +2 -2
  132. package/dist/types/src/util/formatting.d.ts.map +1 -1
  133. package/dist/types/src/util/index.d.ts +2 -1
  134. package/dist/types/src/util/index.d.ts.map +1 -1
  135. package/dist/types/src/util/properties.d.ts +17 -0
  136. package/dist/types/src/util/properties.d.ts.map +1 -0
  137. package/dist/types/src/util/properties.test.d.ts +2 -0
  138. package/dist/types/src/util/properties.test.d.ts.map +1 -0
  139. package/dist/types/src/util/refs.d.ts +2 -2
  140. package/dist/types/src/util/refs.d.ts.map +1 -1
  141. package/dist/types/tsconfig.tsbuildinfo +1 -1
  142. package/package.json +61 -52
  143. package/src/components/FieldEditor/FieldEditor.stories.tsx +44 -25
  144. package/src/components/FieldEditor/FieldEditor.test.tsx +0 -1
  145. package/src/components/FieldEditor/FieldEditor.tsx +84 -84
  146. package/src/components/Form/AUDIT.md +17 -0
  147. package/src/components/Form/Form.stories.tsx +134 -252
  148. package/src/components/Form/Form.tsx +417 -109
  149. package/src/components/Form/FormField.tsx +332 -0
  150. package/src/components/Form/FormFieldComponent.stories.tsx +65 -0
  151. package/src/components/Form/FormFieldComponent.tsx +206 -0
  152. package/src/components/Form/FormFieldSet.tsx +173 -0
  153. package/src/components/Form/FormTooltipsContext.ts +25 -0
  154. package/src/components/Form/Layout/FormLayout.stories.tsx +339 -0
  155. package/src/components/Form/Layout/FormLayout.tsx +123 -0
  156. package/src/components/Form/Layout/annotation.ts +38 -0
  157. package/src/components/Form/Layout/index.ts +7 -0
  158. package/src/components/Form/Layout/parser.test.ts +120 -0
  159. package/src/components/Form/Layout/parser.ts +167 -0
  160. package/src/components/Form/README.md +3 -0
  161. package/src/components/Form/fields/ArrayField.tsx +185 -0
  162. package/src/components/Form/fields/BooleanField.tsx +22 -0
  163. package/src/components/Form/fields/DateField.tsx +95 -0
  164. package/src/components/Form/fields/GeoPointField.tsx +124 -0
  165. package/src/components/Form/fields/MarkdownField.stories.tsx +206 -0
  166. package/src/components/Form/fields/MarkdownField.tsx +168 -0
  167. package/src/components/Form/fields/NumberField.tsx +39 -0
  168. package/src/components/Form/fields/RefField.tsx +232 -0
  169. package/src/components/Form/fields/SelectField.tsx +77 -0
  170. package/src/components/Form/{custom/SelectOptionsInput.stories.tsx → fields/SelectOptionField.stories.tsx} +23 -18
  171. package/src/components/Form/{custom/SelectOptionsInput.tsx → fields/SelectOptionField.tsx} +32 -25
  172. package/src/components/Form/fields/TextAreaField.tsx +38 -0
  173. package/src/components/Form/fields/TextField.tsx +38 -0
  174. package/src/components/Form/{custom/TupleInput.tsx → fields/TupleField.tsx} +17 -9
  175. package/src/components/Form/fields/index.ts +16 -0
  176. package/src/components/Form/index.ts +5 -4
  177. package/src/components/ObjectForm/ObjectForm.tsx +115 -0
  178. package/src/components/{ControlSection → ObjectForm}/index.ts +1 -1
  179. package/src/components/ObjectPicker/ObjectPicker.stories.tsx +26 -21
  180. package/src/components/ObjectPicker/ObjectPicker.tsx +122 -81
  181. package/src/components/ObjectProperties/ObjectProperties.stories.tsx +350 -0
  182. package/src/components/ObjectProperties/ObjectProperties.test.tsx +108 -0
  183. package/src/components/ObjectProperties/ObjectProperties.tsx +147 -0
  184. package/src/components/ObjectProperties/index.ts +5 -0
  185. package/src/components/ObjectTree/ObjectTree.stories.tsx +134 -0
  186. package/src/components/ObjectTree/ObjectTree.tsx +190 -0
  187. package/src/components/ObjectTree/index.ts +5 -0
  188. package/src/components/Settings/AUDIT.md +51 -0
  189. package/src/components/Settings/Settings.stories.tsx +104 -0
  190. package/src/components/Settings/Settings.tsx +81 -0
  191. package/src/components/Settings/SettingsFieldSet.tsx +257 -0
  192. package/src/components/Settings/SettingsItem.tsx +58 -0
  193. package/src/components/Settings/SettingsSelectField.tsx +59 -0
  194. package/src/components/Settings/index.ts +7 -0
  195. package/src/components/ViewEditor/ViewEditor.stories.tsx +62 -71
  196. package/src/components/ViewEditor/ViewEditor.test.tsx +10 -10
  197. package/src/components/ViewEditor/ViewEditor.tsx +308 -217
  198. package/src/components/index.ts +4 -1
  199. package/src/components/testing.tsx +24 -11
  200. package/src/hooks/index.ts +2 -3
  201. package/src/hooks/useFormHandler.ts +380 -0
  202. package/src/hooks/useKeyHandler.tsx +37 -0
  203. package/src/index.ts +0 -4
  204. package/src/translations.ts +71 -64
  205. package/src/util/field-type.ts +60 -0
  206. package/src/util/field.ts +25 -25
  207. package/src/util/formatting.ts +22 -22
  208. package/src/util/index.ts +2 -1
  209. package/src/util/properties.test.ts +78 -0
  210. package/src/util/properties.ts +38 -0
  211. package/src/util/refs.ts +13 -15
  212. package/src/vite-env.d.ts +10 -0
  213. package/dist/types/src/components/ControlSection/ControlSection.d.ts +0 -23
  214. package/dist/types/src/components/ControlSection/ControlSection.d.ts.map +0 -1
  215. package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts +0 -83
  216. package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts.map +0 -1
  217. package/dist/types/src/components/ControlSection/index.d.ts +0 -2
  218. package/dist/types/src/components/ControlSection/index.d.ts.map +0 -1
  219. package/dist/types/src/components/Form/ArrayField.d.ts +0 -16
  220. package/dist/types/src/components/Form/ArrayField.d.ts.map +0 -1
  221. package/dist/types/src/components/Form/Defaults.d.ts +0 -14
  222. package/dist/types/src/components/Form/Defaults.d.ts.map +0 -1
  223. package/dist/types/src/components/Form/FormActions.d.ts +0 -9
  224. package/dist/types/src/components/Form/FormActions.d.ts.map +0 -1
  225. package/dist/types/src/components/Form/FormContent.d.ts +0 -63
  226. package/dist/types/src/components/Form/FormContent.d.ts.map +0 -1
  227. package/dist/types/src/components/Form/FormContext.d.ts +0 -23
  228. package/dist/types/src/components/Form/FormContext.d.ts.map +0 -1
  229. package/dist/types/src/components/Form/Input.d.ts +0 -29
  230. package/dist/types/src/components/Form/Input.d.ts.map +0 -1
  231. package/dist/types/src/components/Form/RefField.d.ts +0 -22
  232. package/dist/types/src/components/Form/RefField.d.ts.map +0 -1
  233. package/dist/types/src/components/Form/custom/GeoPointInput.d.ts +0 -4
  234. package/dist/types/src/components/Form/custom/GeoPointInput.d.ts.map +0 -1
  235. package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts +0 -4
  236. package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts.map +0 -1
  237. package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts +0 -78
  238. package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts.map +0 -1
  239. package/dist/types/src/components/Form/custom/TupleInput.d.ts +0 -6
  240. package/dist/types/src/components/Form/custom/TupleInput.d.ts.map +0 -1
  241. package/dist/types/src/components/Form/custom/index.d.ts +0 -4
  242. package/dist/types/src/components/Form/custom/index.d.ts.map +0 -1
  243. package/dist/types/src/components/Form/factory.d.ts +0 -8
  244. package/dist/types/src/components/Form/factory.d.ts.map +0 -1
  245. package/dist/types/src/hooks/useForm.d.ts +0 -67
  246. package/dist/types/src/hooks/useForm.d.ts.map +0 -1
  247. package/dist/types/src/hooks/useQueryRefOptions.d.ts +0 -29
  248. package/dist/types/src/hooks/useQueryRefOptions.d.ts.map +0 -1
  249. package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts +0 -8
  250. package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts.map +0 -1
  251. package/dist/types/src/util/schema.d.ts +0 -3
  252. package/dist/types/src/util/schema.d.ts.map +0 -1
  253. package/src/components/ControlSection/ControlSection.stories.tsx +0 -38
  254. package/src/components/ControlSection/ControlSection.tsx +0 -153
  255. package/src/components/Form/ArrayField.tsx +0 -125
  256. package/src/components/Form/Defaults.tsx +0 -205
  257. package/src/components/Form/FormActions.tsx +0 -54
  258. package/src/components/Form/FormContent.tsx +0 -362
  259. package/src/components/Form/FormContext.tsx +0 -110
  260. package/src/components/Form/Input.tsx +0 -54
  261. package/src/components/Form/RefField.tsx +0 -283
  262. package/src/components/Form/custom/GeoPointInput.tsx +0 -80
  263. package/src/components/Form/custom/index.ts +0 -7
  264. package/src/components/Form/factory.tsx +0 -31
  265. package/src/hooks/useForm.ts +0 -296
  266. package/src/hooks/useQueryRefOptions.ts +0 -62
  267. package/src/hooks/useRefQueryLookupHandler.ts +0 -39
  268. package/src/util/schema.ts +0 -12
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/translations.ts", "../../../src/components/ControlSection/ControlSection.tsx", "../../../src/components/FieldEditor/FieldEditor.tsx", "../../../src/components/Form/custom/GeoPointInput.tsx", "../../../src/components/Form/Input.tsx", "../../../src/components/Form/custom/SelectOptionsInput.tsx", "../../../src/components/Form/custom/TupleInput.tsx", "../../../src/components/Form/Defaults.tsx", "../../../src/components/Form/Form.tsx", "../../../src/components/Form/FormActions.tsx", "../../../src/components/Form/FormContext.tsx", "../../../src/hooks/useForm.ts", "../../../src/hooks/useRefQueryLookupHandler.ts", "../../../src/hooks/useQueryRefOptions.ts", "../../../src/components/Form/FormContent.tsx", "../../../src/util/field.ts", "../../../src/util/formatting.ts", "../../../src/util/refs.ts", "../../../src/util/schema.ts", "../../../src/components/Form/ArrayField.tsx", "../../../src/components/Form/factory.tsx", "../../../src/components/Form/RefField.tsx", "../../../src/components/ObjectPicker/ObjectPicker.tsx", "../../../src/components/ViewEditor/ViewEditor.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = 'react-ui-form';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {\n 'fields label': 'Fields',\n 'hidden fields label': 'Hidden Fields',\n 'empty readonly ref field label': '(none)',\n\n // TODO(burdon): Standardize field/property.\n 'add property button': 'Add property',\n 'field property label': 'Property',\n 'field property placeholder': 'Property name',\n 'field format label': 'Type',\n 'field path label': 'Field path',\n 'add field': 'Add field',\n 'delete field': 'Delete field',\n 'field limit reached': 'Maximum number of fields reached',\n 'boolean input true value': 'Yes',\n 'boolean input false value': 'No',\n 'show field label': 'Show field',\n 'hide field label': 'Hide field',\n 'delete field label': 'Delete field',\n 'ref field combobox input placeholder': 'Search…',\n 'ref field placeholder_one': 'Select…',\n 'ref field placeholder_other': 'Select items…',\n\n // TODO(burdon): Factor out?\n 'save button': 'Save',\n\n // FormatEnum\n 'format boolean': 'Boolean',\n 'format currency': 'Currency',\n 'format date': 'Date',\n 'format date-time': 'DateTime',\n 'format did': 'DID',\n 'format duration': 'Duration',\n 'format dxn': 'DXN',\n 'format email': 'Email',\n 'format formula': 'Formula',\n 'format hostname': 'Hostname',\n 'format integer': 'Integer',\n 'format json': 'JSON',\n 'format lnglat': 'Geopoint',\n 'format markdown': 'Markdown',\n 'format percent': 'Percent',\n 'format ref': 'Reference',\n 'format regex': 'RegExp',\n 'format string': 'String',\n 'format single-select': 'Select',\n 'format multi-select': 'Multi-select',\n 'format text': 'Long text',\n 'format time': 'Time',\n 'format timestamp': 'Timestamp',\n 'format user': 'User',\n 'format number': 'Number',\n 'format uri': 'URI',\n 'format url': 'URL',\n 'format uuid': 'UUID',\n\n // GeoPointInput.\n 'latitude label': 'Latitude',\n 'longitude label': 'Longitude',\n\n // SelectOptionsInput.\n 'select option label': 'Label',\n 'select option label placeholder': 'Option label',\n 'select option color': 'Color',\n 'select option delete': 'Delete',\n 'select option add': 'Add option',\n\n // System schema message.\n 'system schema title': 'System record type',\n 'system schema description':\n 'This is a system record type and cannot be modified, though the view can still be configured.',\n },\n },\n },\n] as const satisfies Resource[];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, type PropsWithChildren } from 'react';\n\nimport {\n Button,\n type ButtonProps,\n Input,\n type Label,\n type ThemedClassName,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { translationKey } from '../../translations';\n\nexport type ControlPageProps = ThemedClassName<ComponentPropsWithoutRef<'div'>>;\n\nexport const ControlPage = ({ children, classNames, ...props }: ControlPageProps) => {\n return (\n <StackItem.Content scrollable classNames='[--control-spacing:var(--dx-trimMd)]'>\n <div role='none' className={mx('pli-cardSpacingInline pbe-trimLg', classNames)} {...props}>\n {children}\n </div>\n </StackItem.Content>\n );\n};\n\nexport type ControlSectionProps = PropsWithChildren<{\n title: Label;\n description?: Label;\n}>;\n\nexport const ControlSection = ({ title, description, children }: ControlSectionProps) => {\n return (\n <>\n <ControlSectionHeading title={title} description={description} />\n {children}\n </>\n );\n};\n\nexport const ControlSectionHeading = ({ title, description }: Omit<ControlSectionProps, 'children'>) => {\n const { t } = useTranslation(translationKey);\n return (\n <>\n <h2 className='pli-trimMd container-max-width text-xl mbs-trimLg mbe-trimMd'>{toLocalizedString(title, t)}</h2>\n {description && (\n <p className='pli-trimMd mlb-trimMd container-max-width text-description'>\n {toLocalizedString(description, t)}\n </p>\n )}\n </>\n );\n};\n\nexport const ControlGroupButton = ({ classNames, ...props }: ButtonProps) => {\n return <Button {...props} classNames={['md:col-span-2', classNames]} />;\n};\n\nexport type ControlGroupProps = ThemedClassName<PropsWithChildren>;\n\nexport const ControlGroup = ({ children, classNames }: ControlGroupProps) => (\n <div\n role='none'\n className={mx(\n 'group container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content] gap-trimMd',\n '[--control-spacing:0px] [&_input]:justify-self-end [&_button]:justify-self-end',\n classNames,\n )}\n >\n {children}\n </div>\n);\n\nexport const ControlFrame = ({ children }: ControlGroupProps) => (\n <div\n role='none'\n className={mx(\n 'container-max-width grid grid-cols-1 md:grid-cols-[1fr_1fr] gap-trimSm md:gap-trimMd p-trimMd',\n 'border border-separator rounded-md',\n )}\n >\n {children}\n </div>\n);\n\nexport const controlItemClasses = mx([\n 'container-max-width grid md:col-span-2 grid-cols-subgrid gap-trimSm items-center',\n // TODO(burdon): Use grid gap consistently or apply margins consistently?\n 'mlb-[--control-spacing] *:first:!mbs-0 *:last:!mbe-0 pli-trimMd plb-trimMd',\n 'border border-separator rounded-md',\n]);\n\nconst controlItemTitleClasses = 'mbe-0 text-lg text-baseText font-normal';\nconst controlItemDescriptionClasses = 'mlb-trimSm md:mbe-0 text-base text-description';\n\nexport type ControlItemProps = PropsWithChildren<{\n title: Label;\n description?: Label;\n}>;\n\nexport const ControlItem = ({ title, description, children }: ControlItemProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <div className={controlItemClasses}>\n <div role='none'>\n <h3 className={controlItemTitleClasses}>{toLocalizedString(title, t)}</h3>\n {description && <p className={controlItemDescriptionClasses}>{toLocalizedString(description, t)}</p>}\n </div>\n {children}\n </div>\n );\n};\n\nexport const ControlItemInput = ({ title, description, children }: ControlItemProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <Input.Root>\n <div className={controlItemClasses}>\n <div role='none'>\n <Input.Label classNames={controlItemTitleClasses}>{toLocalizedString(title, t)}</Input.Label>\n {description && (\n <Input.DescriptionAndValidation>\n <Input.Description classNames={controlItemDescriptionClasses}>\n {toLocalizedString(description, t)}\n </Input.Description>\n </Input.DescriptionAndValidation>\n )}\n </div>\n {children}\n </div>\n </Input.Root>\n );\n};\n\nexport const ControlFrameItem = ({ title, description, children }: ControlItemProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <div role='group' className='min-is-0'>\n <h3 className='text-lg mbe-2'>{toLocalizedString(title, t)}</h3>\n {description && <p className='mlb-trimSm md:mbe-0 text-description'>{toLocalizedString(description, t)}</p>}\n {children}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type EchoSchema, FormatEnum, FormatEnums, formatToType } from '@dxos/echo/internal';\nimport { type SchemaRegistry } from '@dxos/echo-db';\nimport { log } from '@dxos/log';\nimport { useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport {\n type FieldType,\n type ProjectionModel,\n type PropertyType,\n type SchemaProperty,\n formatToAdditionalPropertyAttributes,\n getFormatSchema,\n getSchemaProperties,\n sortProperties,\n} from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { Form, type FormProps, type InputComponent, SelectInput, SelectOptionInput } from '../Form';\n\nexport type FieldEditorProps = {\n projection: ProjectionModel;\n field: FieldType;\n registry?: SchemaRegistry;\n onSave: () => void;\n onCancel?: () => void;\n} & Pick<FormProps<any>, 'outerSpacing' | 'readonly'>;\n\n/**\n * Displays a Form representing the metadata for a given `Field` and `View`.\n */\nexport const FieldEditor = ({\n readonly,\n projection,\n field,\n registry,\n onSave,\n onCancel,\n outerSpacing,\n}: FieldEditorProps) => {\n const { t } = useTranslation(translationKey);\n const [props, setProps] = useState<PropertyType>(projection.getFieldProjection(field.id).props);\n useEffect(() => setProps(projection.getFieldProjection(field.id).props), [field, projection]);\n\n const [schemas, setSchemas] = useState<EchoSchema[]>([]);\n useAsyncEffect(async () => {\n if (!registry) {\n return;\n }\n\n const subscription = registry.query().subscribe((query) => setSchemas(query.results), { fire: true });\n\n // TODO(dmaretskyi): This shouldn't be needed.\n const schemas = await registry.query().run();\n setSchemas(schemas);\n\n return () => subscription?.();\n }, [registry]);\n\n const [referenceSchema, setReferenceSchema] = useState<EchoSchema>();\n useEffect(() => {\n setReferenceSchema(schemas.find((schema) => schema.typename === props?.referenceSchema));\n }, [schemas, props?.referenceSchema]);\n\n // TODO(burdon): Need to wrap otherwise throws error:\n // Class constructor SchemaClass cannot be invoked without 'new'.\n const [{ fieldSchema }, setFieldSchema] = useState({ fieldSchema: getFormatSchema(props?.format) });\n\n const handleValuesChanged = useCallback<NonNullable<FormProps<PropertyType>['onValuesChanged']>>(\n (_props) => {\n // TODO(burdon): Callback should pass `changed` to indicate which fields have changed.\n // TODO(Zaymon): Workout why old and new format values are the same sometimes even when\n // selecting novel format values.\n setFieldSchema((prev) => {\n const fieldSchema = getFormatSchema(_props.format);\n if (prev.fieldSchema === fieldSchema) {\n return prev;\n }\n return { fieldSchema };\n });\n\n setReferenceSchema((prev) => {\n if (_props.referenceSchema !== prev?.typename) {\n const newSchema = schemas.find((schema) => schema.typename === _props.referenceSchema);\n if (newSchema) {\n return newSchema;\n }\n }\n return prev;\n });\n\n setProps((props) => {\n const type = formatToType[_props.format as keyof typeof formatToType];\n const additionalProps =\n formatToAdditionalPropertyAttributes[_props.format as keyof typeof formatToAdditionalPropertyAttributes];\n if (props.type !== type) {\n return { ...props, ..._props, ...additionalProps, type } as PropertyType;\n }\n\n return _props as PropertyType;\n });\n },\n [schemas, props.format, props.referenceSchema],\n );\n\n const handleValidate = useCallback<NonNullable<FormProps<PropertyType>['onValidate']>>(\n ({ property }) => {\n if (property && projection.fields.find((f) => f.path === property && f.path !== field.path)) {\n return [\n {\n path: 'property',\n message: `property is not unique: '${property}'`,\n },\n ];\n }\n },\n [projection.fields, field],\n );\n\n const handleSave = useCallback<NonNullable<FormProps<PropertyType>['onSave']>>(\n (props) => {\n projection.setFieldProjection({ field, props });\n onSave();\n },\n [projection, field, onSave],\n );\n\n const handleCancel = useCallback<NonNullable<FormProps<PropertyType>['onCancel']>>(() => {\n // Need to defer to allow form to close.\n requestAnimationFrame(() => onCancel?.());\n onSave();\n }, [onSave]);\n\n const custom: Partial<Record<string, InputComponent>> = useMemo(\n () => ({\n ['format' satisfies keyof PropertyType]: (props) => (\n <SelectInput\n {...props}\n options={FormatEnums.filter((value) => value !== FormatEnum.None).map((value) => ({\n value,\n label: t(`format ${value}`),\n }))}\n />\n ),\n ['referenceSchema' satisfies keyof PropertyType]: (props) => (\n <SelectInput\n {...props}\n options={schemas.map((schema) => ({\n value: schema.typename,\n }))}\n />\n ),\n ['referencePath' satisfies keyof PropertyType]: (props) => (\n <SelectInput\n {...props}\n options={\n referenceSchema\n ? getSchemaProperties(referenceSchema.ast)\n .sort(sortProperties)\n .map((p) => ({ value: p.name }))\n : []\n }\n />\n ),\n ['options' satisfies keyof PropertyType]: (props) => <SelectOptionInput {...props} />,\n }),\n [t, schemas, referenceSchema],\n );\n\n const propIsNotType = useCallback(\n (props: SchemaProperty<PropertyType>[]) => props.filter((p) => p.name !== 'type'),\n [],\n );\n\n if (!fieldSchema) {\n log.warn('invalid format', { props });\n return null;\n }\n\n return (\n <Form<PropertyType>\n key={field.id}\n autoFocus\n readonly={readonly}\n values={props}\n schema={fieldSchema}\n filter={propIsNotType}\n sort={['property', 'format']}\n onValuesChanged={handleValuesChanged}\n onValidate={handleValidate}\n onSave={handleSave}\n onCancel={handleCancel}\n Custom={custom}\n outerSpacing={outerSpacing}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { GeoLocation, type GeoPoint } from '@dxos/echo/internal';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { translationKey } from '../../../translations';\nimport { InputHeader, type InputProps } from '../Input';\n\nexport const GeoPointInput = ({ type, label, readonly, getStatus, getValue, onValueChange, onBlur }: InputProps) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const geoPoint = useMemo<GeoPoint>(() => getValue<GeoPoint>() ?? [0, 0], [getValue]);\n const geoLocation = useMemo(() => GeoLocation.fromGeoPoint(geoPoint), [geoPoint]);\n\n const [longitudeText, setLongitudeText] = useState(geoLocation.longitude?.toString());\n const [latitudeText, setLatitudeText] = useState(geoLocation.latitude?.toString());\n\n useEffect(() => {\n const location = GeoLocation.fromGeoPoint(geoPoint);\n setLongitudeText(location.longitude.toString());\n setLatitudeText(location.latitude.toString());\n }, [geoPoint]);\n\n const handleCoordinateChange = useCallback(\n (coordinateType: keyof Pick<GeoLocation, 'longitude' | 'latitude'>, setText: (text: string) => void) =>\n (event: ChangeEvent<HTMLInputElement>) => {\n const inputText = event.target.value;\n setText(inputText);\n if (inputText !== '' && inputText !== '-') {\n const coord = safeParseFloat(inputText);\n if (coord !== undefined && !isNaN(coord)) {\n const currentLocation = GeoLocation.fromGeoPoint(getValue<GeoPoint>() ?? [0, 0]);\n const newLocation = { ...currentLocation, [coordinateType]: coord };\n const newValue = GeoLocation.toGeoPoint(newLocation);\n onValueChange(type, newValue);\n }\n }\n },\n [getValue, onValueChange, type],\n );\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error} label={label} />\n <div role='none' className='grid grid-cols-2 gap-2'>\n <div role='none'>\n <Input.Label>{t('latitude label')}</Input.Label>\n <Input.TextInput\n type='number'\n step='0.00001'\n min='-90'\n max='90'\n disabled={!!readonly}\n value={latitudeText}\n onChange={handleCoordinateChange('latitude', setLatitudeText)}\n onBlur={onBlur}\n />\n </div>\n <div role='none'>\n <Input.Label>{t('longitude label')}</Input.Label>\n <Input.TextInput\n type='number'\n step='0.00001'\n min='-180'\n max='180'\n disabled={!!readonly}\n value={longitudeText}\n onChange={handleCoordinateChange('longitude', setLongitudeText)}\n onBlur={onBlur}\n />\n </div>\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { type FormatEnum } from '@dxos/echo/internal';\nimport { type SimpleType } from '@dxos/effect';\nimport { Icon, Input, Tooltip } from '@dxos/react-ui';\nimport { labelSpacing } from '@dxos/react-ui-stack';\nimport { errorText, mx } from '@dxos/react-ui-theme';\n\nimport { type FormInputStateProps } from './FormContext';\n\n/**\n * Props passed to input components.\n */\nexport type InputProps = {\n type: SimpleType;\n format?: FormatEnum;\n label: string;\n placeholder?: string;\n inputOnly?: boolean;\n /**\n * Specifies the readonly variant: either disabled inputs, elements indicating they are usually editable but currently are not; or `static`, a field’s representation as regular content without signifiers that it is ever editable.\n */\n readonly?: 'disabled-input' | 'static' | false;\n} & FormInputStateProps;\n\n/**\n * Form input component.\n */\nexport type InputComponent = FC<InputProps>;\n\nexport type InputHeaderProps = {\n error?: string;\n label: string;\n readonly?: boolean;\n};\n\nexport const InputHeader = ({ error, label, readonly }: InputHeaderProps) => {\n const Label = readonly ? 'span' : Input.Label;\n const labelProps = readonly ? {} : { classNames: '!mlb-0' };\n return (\n <div role='none' className={mx('flex justify-between items-center', labelSpacing)}>\n <Label {...labelProps}>{label}</Label>\n {error && (\n <Tooltip.Trigger asChild content={error} side='bottom'>\n <Icon icon='ph--warning--regular' size={4} classNames={errorText} />\n </Tooltip.Trigger>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type ChangeEvent, type KeyboardEvent, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { type SelectOption } from '@dxos/echo/internal';\nimport { PublicKey } from '@dxos/keys';\nimport { type ChromaticPalette, IconButton, Input, Tag, useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { HuePicker } from '@dxos/react-ui-pickers';\nimport { hues, subtleHover } from '@dxos/react-ui-theme';\n\nimport { translationKey } from '../../../translations';\nimport { InputHeader, type InputProps } from '../Input';\n\nexport const SelectOptionInput = ({ type, label, readonly, getStatus, getValue, onValueChange }: InputProps) => {\n const [selected, setSelectedId] = useState<string | null>(null);\n const [isNewOption, setIsNewOption] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const options = getValue<SelectOption[] | undefined>();\n\n // Initialization.\n useEffect(() => {\n if (options === undefined) {\n onValueChange(type, []);\n }\n }, [options, onValueChange, type]);\n\n const randomHue = () => {\n const usedHues = new Set(options?.map((option) => option.color) ?? []);\n // Pick a random unused option from hueTokenThemes.\n const unusedHues = hues.filter((hue) => !usedHues.has(hue));\n if (unusedHues.length > 0) {\n return unusedHues[Math.floor(Math.random() * unusedHues.length)];\n }\n\n // Pick a random one that hasn't been used in the last three options\n const lastThree = new Set(options?.slice(-3).map((option) => option.color) ?? []);\n const availableHues = hues.filter((hue) => !lastThree.has(hue));\n return (\n availableHues[Math.floor(Math.random() * availableHues.length)] ?? hues[Math.floor(Math.random() * hues.length)]\n );\n };\n\n const handleAdd = useCallback(() => {\n const newId = PublicKey.random().truncate();\n const newOption = { id: newId, title: '', color: randomHue() };\n onValueChange(type, [...(options ?? []), newOption]);\n setSelectedId(newId);\n setIsNewOption(true);\n }, [options, type, onValueChange]);\n\n const handleDelete = useCallback(\n (id: string) => {\n const newOptions = options?.filter((option) => option.id !== id) ?? [];\n onValueChange(type, newOptions);\n setSelectedId(null);\n },\n [options, type, onValueChange],\n );\n\n const handleMove = useCallback(\n (from: number, to: number) => {\n if (!options) {\n return;\n }\n\n const newOptions = [...options];\n const [removed] = newOptions.splice(from, 1);\n newOptions.splice(to, 0, removed);\n onValueChange(type, newOptions);\n },\n [options, type, onValueChange],\n );\n\n const handleClick = useCallback((id: string) => {\n setSelectedId((current) => (current === id ? null : id));\n }, []);\n\n const handleTitleChange = useCallback(\n (id: string) => (e: ChangeEvent<HTMLInputElement>) => {\n const newOptions = options?.map((o) => (o.id === id ? { ...o, title: e.target.value } : o));\n onValueChange(type, newOptions ?? []);\n },\n [options, type, onValueChange],\n );\n\n const handleKeyDown = useCallback((e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n setSelectedId(null);\n }\n }, []);\n\n const handleColorChange = useCallback(\n (id: string) => (hue: string) => {\n const newOptions = options?.map((o) => (o.id === id ? { ...o, color: hue } : o));\n onValueChange(type, newOptions ?? []);\n },\n [options, type, onValueChange],\n );\n\n useEffect(() => {\n if (selected && isNewOption && inputRef.current) {\n inputRef.current.focus();\n setIsNewOption(false);\n }\n }, [selected, isNewOption]);\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error} label={label} />\n <div role='none'>\n {options && (\n <List.Root\n items={options}\n isItem={(item) => true}\n onMove={readonly ? undefined : handleMove}\n readonly={!!readonly}\n >\n {({ items }) => (\n <div role='list' className='is-full overflow-auto'>\n {items?.map((item) => (\n <div key={item.id}>\n <List.Item\n role='button'\n item={item}\n classNames={[subtleHover, 'flex flex-col cursor-pointer rounded-sm']}\n aria-expanded={selected === item.id}\n >\n <div className='flex items-center'>\n <List.ItemDragHandle disabled={!!readonly} />\n <List.ItemTitle onClick={() => handleClick(item.id)} classNames='flex-1'>\n {/* TODO(ZaymonFC): Move spacer into Tag component. */}\n <Tag palette={item.color as ChromaticPalette}>{item.title || '\\u200b'}</Tag>\n </List.ItemTitle>\n <IconButton\n iconOnly\n variant='ghost'\n label={t(selected === item.id ? 'collapse label' : 'expand label', { ns: 'os' })}\n icon={selected === item.id ? 'ph--caret-down--regular' : 'ph--caret-right--regular'}\n onClick={() => handleClick(item.id)}\n />\n </div>\n {selected === item.id && (\n <div className='pli-cardSpacingInline plb-cardSpacingBlock flex flex-col gap-1 density-fine'>\n {/* 16px to match drag handle width. */}\n <Input.Label classNames='text-xs'>{t('select option label')}</Input.Label>\n <div className='grid grid-cols-[1fr_min-content_min-content] gap-1'>\n <Input.TextInput\n disabled={!!readonly}\n placeholder={t('select option label placeholder')}\n ref={selected === item.id ? inputRef : undefined}\n value={item.title}\n onChange={handleTitleChange(item.id)}\n onKeyDown={handleKeyDown}\n classNames='flex-1'\n data-no-submit\n />\n <HuePicker disabled={!!readonly} value={item.color} onChange={handleColorChange(item.id)} />\n <IconButton\n disabled={!!readonly}\n icon='ph--trash--fill'\n iconOnly\n label={t('select option delete')}\n onClick={() => handleDelete(item.id)}\n />\n </div>\n </div>\n )}\n </List.Item>\n </div>\n ))}\n <IconButton\n variant='ghost'\n icon='ph--plus--regular'\n label={t('select option add')}\n onClick={handleAdd}\n disabled={!!readonly}\n classNames='is-full'\n />\n </div>\n )}\n </List.Root>\n )}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { InputHeader, type InputProps } from '../Input';\n\nconst gridCols = ['grid-cols-1', 'grid-cols-2', 'grid-cols-3', 'grid-cols-4'];\n\nexport const TupleInput = ({\n binding,\n type,\n label,\n readonly,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps & { binding: string[] }) => {\n const { status, error } = getStatus();\n\n // TODO(burdon): Generalize number/float/string, etc.\n const values: Record<string, number> = getValue<Record<string, number>>() ?? {};\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error} label={label} />\n <div className={mx('grid gap-2', gridCols[binding.length - 1])}>\n {binding.map((prop) => (\n <Input.TextInput\n key={prop}\n type='number'\n disabled={!!readonly}\n value={values[prop]}\n onChange={(event) => onValueChange(type, { ...values, [prop]: safeParseFloat(event.target.value, 0) })}\n onBlur={onBlur}\n />\n ))}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useRef } from 'react';\n\nimport { Input, Select, useTranslation } from '@dxos/react-ui';\n\nimport { translationKey } from '../../translations';\n\nimport { InputHeader, type InputProps } from './Input';\n\nexport const TextInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps) => {\n const { status, error } = getStatus();\n\n return readonly && !getValue() ? null : readonly === 'static' && inputOnly ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.TextInput\n disabled={!!readonly}\n placeholder={placeholder}\n value={getValue() ?? ''}\n onChange={(event) => onValueChange(type, event.target.value)}\n onBlur={onBlur}\n />\n )}\n {inputOnly && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n\nexport const NumberInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps) => {\n const { status, error } = getStatus();\n\n return readonly && !getValue() ? null : readonly === 'static' && inputOnly ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.TextInput\n type='number'\n disabled={!!readonly}\n placeholder={placeholder}\n value={getValue()}\n onChange={(event) => onValueChange(type, event.target.value)}\n onBlur={onBlur}\n />\n )}\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport const BooleanInput = ({ type, label, inputOnly, getStatus, getValue, onValueChange, readonly }: InputProps) => {\n const { status, error } = getStatus();\n const checked = Boolean(getValue());\n const { t } = useTranslation(translationKey);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{t(checked ? 'boolean input true value' : 'boolean input false value')}</p>\n ) : (\n <Input.Switch disabled={!!readonly} checked={checked} onCheckedChange={(value) => onValueChange(type, value)} />\n )}\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport type SelectInputOptions = InputProps & {\n options?: Array<{ value: string | number; label?: string }>;\n};\n\nexport const SelectInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n options,\n getStatus,\n getValue,\n onValueChange,\n}: SelectInputOptions) => {\n const { status, error } = getStatus();\n\n const value = getValue() as string | undefined;\n const handleValueChange = useCallback((value: string | number) => onValueChange(type, value), [type, onValueChange]);\n\n return readonly && !value ? null : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{options?.find(({ value: optionValue }) => optionValue === value)?.label ?? String(value)}</p>\n ) : (\n <Select.Root value={value} onValueChange={handleValueChange}>\n {/* TODO(burdon): Placeholder not working? */}\n <Select.TriggerButton classNames='is-full' disabled={!!readonly} placeholder={placeholder} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {options?.map(({ value, label }) => (\n // NOTE: Numeric values are converted to and from strings.\n <Select.Option key={String(value)} value={String(value)}>\n {label ?? String(value)}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n )}\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport const MarkdownInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps) => {\n const { status, error } = getStatus();\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // TODO(ZaymonFC): If we start using `Enter` for form submission, we should prevent default behavior here\n // since we're using a textarea element and the user needs to be able to enter new lines.\n\n const adjustHeight = useCallback(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.blockSize = 'auto'; // For measurement.\n textarea.style.blockSize = `${textarea.scrollHeight + 2}px`;\n }\n }, []);\n\n // Adjust height on initial render.\n useEffect(() => {\n adjustHeight();\n }, [adjustHeight]);\n\n // Adjust height when the content changes.\n useEffect(() => {\n adjustHeight();\n }, [getValue(), adjustHeight]);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.TextArea\n ref={textareaRef}\n disabled={!!readonly}\n placeholder={placeholder}\n value={getValue() ?? ''}\n classNames={'min-bs-auto max-bs-40 overflow-auto'}\n onChange={(event) => onValueChange(type, event.target.value)}\n onBlur={onBlur}\n style={{ resize: 'none' }}\n spellCheck={false}\n />\n )}\n {inputOnly && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport type * as Schema from 'effect/Schema';\nimport React, { type ReactElement, useCallback, useEffect, useRef } from 'react';\n\nimport { type BaseObject, type PropertyKey } from '@dxos/echo/internal';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { cardDialogOverflow, cardSpacing } from '@dxos/react-ui-stack';\nimport { type ProjectionModel, type SchemaProperty } from '@dxos/schema';\n\nimport { type FormHandler, type FormOptions } from '../../hooks';\n\nimport { FormActions, type FormOuterSpacing } from './FormActions';\nimport { FormFields, type FormFieldsProps } from './FormContent';\nimport { FormProvider } from './FormContext';\nimport { type InputComponent, type InputProps } from './Input';\n\nexport type PropsFilter<T extends BaseObject> = (props: SchemaProperty<T>[]) => SchemaProperty<T>[];\n\nexport type ComponentLookup = (args: {\n prop: string;\n schema: Schema.Schema<any>;\n inputProps: InputProps;\n}) => ReactElement | undefined;\n\nexport type CustomInputMap = Partial<Record<string, InputComponent>>;\n\nexport type FormProps<T extends BaseObject> = ThemedClassName<{\n id?: string;\n values: Partial<T>;\n // TODO(burdon): Autofocus first input.\n autoFocus?: boolean;\n // TODO(burdon): Change to JsonPath includes/excludes.\n filter?: PropsFilter<T>;\n sort?: PropertyKey<T>[];\n projection?: ProjectionModel;\n autoSave?: boolean;\n outerSpacing?: FormOuterSpacing;\n onCancel?: () => void;\n}> &\n Pick<FormOptions<T>, 'schema' | 'onValuesChanged' | 'onValidate' | 'onSave'> &\n // TODO(wittjosiah): This needs to support different ref field options per field.\n FormFieldsProps;\n\nexport const Form = <T extends BaseObject>({\n classNames,\n id,\n testId,\n values: initialValues,\n autoFocus,\n readonly,\n autoSave,\n outerSpacing = true,\n schema,\n onCancel,\n onValuesChanged,\n onValidate,\n onSave,\n ...props\n}: FormProps<T>) => {\n const formRef = useRef<HTMLDivElement>(null);\n\n // Focus the first focusable element within this form.\n const { findFirstFocusable } = useFocusFinders();\n useEffect(() => {\n if (autoFocus && formRef.current) {\n const firstFocusable = findFirstFocusable(formRef.current);\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n }, [autoFocus]);\n\n // TODO(burdon): Name?\n const handleValid = useCallback(\n async (values: any, meta: { changed: FormHandler<T>['changed'] }) => {\n if (autoSave) {\n await onSave?.(values, meta);\n }\n },\n [autoSave, onSave],\n );\n\n return (\n <FormProvider\n formRef={formRef}\n schema={schema}\n autoSave={autoSave}\n initialValues={initialValues}\n onValuesChanged={onValuesChanged}\n onValidate={onValidate}\n onValid={handleValid}\n onSave={onSave}\n >\n <div role='none' className='contents' {...(id && { 'data-object-id': id })} data-testid={testId}>\n <FormFields\n {...props}\n ref={formRef}\n classNames={[\n outerSpacing === 'blockStart-0'\n ? 'pli-cardSpacingInline mbe-cardSpacingBlock [&>.mbs-inputSpacingBlock:first-child]:!mbs-0'\n : outerSpacing === 'scroll-fields'\n ? 'pli-cardSpacingInline pbe-cardSpacingBlock'\n : outerSpacing\n ? cardSpacing\n : false,\n outerSpacing === 'scroll-fields' && cardDialogOverflow,\n classNames,\n ]}\n readonly={readonly}\n schema={schema}\n />\n {(onCancel || onSave) && !autoSave && !readonly && (\n <FormActions readonly={readonly} onCancel={onCancel} outerSpacing={outerSpacing} />\n )}\n </div>\n </FormProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { IconButton, useTranslation } from '@dxos/react-ui';\nimport { cardSpacing } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { translationKey } from '../../translations';\n\nimport { useFormContext } from './FormContext';\n\nexport type FormOuterSpacing = boolean | 'blockStart-0' | 'scroll-fields';\n\nexport type FormActionsProps = {\n readonly?: boolean;\n onCancel?: () => void;\n outerSpacing?: FormOuterSpacing;\n};\n\nexport const FormActions = ({ readonly, onCancel, outerSpacing = true }: FormActionsProps) => {\n const { t } = useTranslation(translationKey);\n const { canSave, handleSave } = useFormContext();\n\n return (\n <div\n role='none'\n className={mx(\n outerSpacing === 'scroll-fields'\n ? 'pli-cardSpacingInline mbe-cardSpacingBlock'\n : outerSpacing\n ? cardSpacing\n : 'mbs-cardSpacingBlock',\n 'flex [&_button]:grow gap-1 first:mbs-0',\n )}\n >\n {onCancel && !readonly && (\n <IconButton data-testid='cancel-button' icon='ph--x--regular' label={t('cancel button')} onClick={onCancel} />\n )}\n {handleSave && (\n <IconButton\n type='submit'\n data-testid='save-button'\n disabled={!canSave}\n icon='ph--check--regular'\n label={t('save button')}\n onClick={handleSave}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, {\n type FocusEvent,\n type PropsWithChildren,\n type RefObject,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n} from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { type BaseObject, getValue } from '@dxos/echo/internal';\nimport { type SimpleType, createJsonPath } from '@dxos/effect';\n\nimport { type FormHandler, type FormOptions, useForm } from '../../hooks';\n\ntype FormContextValue<T extends BaseObject> = FormHandler<T>;\n\nconst FormContext = createContext<FormContextValue<any> | undefined>(undefined);\n\nexport const useFormContext = <T extends BaseObject>(): FormContextValue<T> => {\n return useContext(FormContext) ?? raise(new Error('Missing FormContext'));\n};\n\nexport const useFormValues = (path: (string | number)[] = []): any => {\n const { values: formValues } = useFormContext();\n const jsonPath = createJsonPath(path);\n return getValue(formValues, jsonPath) as BaseObject;\n};\n\nexport type FormInputStateProps = {\n getStatus: () => { status?: 'error'; error?: string };\n getValue: <V>() => V | undefined;\n onValueChange: (type: SimpleType, value: any) => void;\n onBlur: (event: FocusEvent<HTMLElement>) => void;\n};\n\nexport const useInputProps = (path: (string | number)[] = []): FormInputStateProps => {\n const { getStatus, getValue: getFormValue, onValueChange, onTouched } = useFormContext();\n\n const stablePath = useMemo(() => path, [Array.isArray(path) ? path.join('.') : path]);\n return useMemo(\n () => ({\n getStatus: () => getStatus(stablePath),\n getValue: () => getFormValue(stablePath),\n onValueChange: (type: SimpleType, value: any) => onValueChange(stablePath, type, value),\n onBlur: () => onTouched(stablePath),\n }),\n [getStatus, getFormValue, onValueChange, onTouched, stablePath],\n );\n};\n\nexport const FormProvider = ({\n children,\n formRef,\n autoSave,\n ...formOptions\n}: PropsWithChildren<\n FormOptions<any> & {\n formRef?: RefObject<HTMLDivElement | null>;\n autoSave?: boolean;\n }\n>) => {\n const form = useForm(formOptions);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const keyIsEnter = event.key === 'Enter';\n const modifierUsed = event.ctrlKey || event.altKey || event.metaKey || event.shiftKey;\n const inputIsTextarea = (event.target as HTMLElement).tagName.toLowerCase() === 'textarea';\n const inputOptOut =\n (event.target as HTMLElement).hasAttribute('data-no-submit') ||\n (event.target as HTMLElement).closest('[data-no-submit]') !== null;\n\n // Regular inputs: Submit on Enter (no modifiers).\n const shouldSubmitRegularInput = !inputIsTextarea && keyIsEnter && !modifierUsed;\n\n // Textareas: Submit only on Meta+Enter.\n const shouldSubmitTextarea = inputIsTextarea && keyIsEnter && event.metaKey;\n\n if ((shouldSubmitRegularInput || shouldSubmitTextarea) && !inputOptOut) {\n if (!autoSave && form.canSave) {\n form.handleSave();\n }\n if (autoSave && form.formIsValid) {\n (event.target as HTMLElement).blur();\n }\n }\n },\n [form.canSave, form.formIsValid, form.handleSave, autoSave],\n );\n\n useEffect(() => {\n if (!formRef?.current) {\n return;\n }\n\n const formElement = formRef.current;\n\n formElement.addEventListener('keydown', handleKeyDown);\n return () => formElement.removeEventListener('keydown', handleKeyDown);\n }, [formRef, form.canSave, form.formIsValid, form.handleSave, autoSave]);\n\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type BaseObject, getValue, setValue } from '@dxos/echo/internal';\nimport { type JsonPath, type SimpleType, createJsonPath, fromEffectValidationPath } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type ValidationError, validateSchema } from '@dxos/schema';\nimport { type MaybePromise } from '@dxos/util';\n\n/**\n * Return type from `useForm` hook.\n */\nexport type FormHandler<T extends BaseObject> = {\n //\n // Form state management.\n //\n\n values: Partial<T>;\n errors: Record<JsonPath, string>;\n touched: Record<JsonPath, boolean>;\n changed: Record<JsonPath, boolean>;\n canSave: boolean;\n formIsValid: boolean;\n\n // TODO(burdon): Return onSave.\n handleSave: () => void;\n\n //\n // Form input component helpers.\n //\n\n getStatus: (path: string | (string | number)[]) => { status?: 'error'; error?: string };\n getValue: <V>(path: (string | number)[]) => V | undefined;\n onValueChange: <V>(path: (string | number)[], type: SimpleType, value: V) => void;\n onTouched: (path: (string | number)[]) => void;\n};\n\n/**\n * Hook options.\n */\nexport interface FormOptions<T extends BaseObject> {\n /**\n * Effect schema (Type literal).\n */\n schema: Schema.Schema<T, any>;\n\n /**\n * Initial values (which may not pass validation).\n */\n initialValues: Partial<T>;\n\n /**\n * Callback for value changes. Note: This is called even when values are invalid.\n * Sometimes the parent component may want to know about changes even if the form is\n * in an invalid state.\n */\n onValuesChanged?: (values: Partial<T>) => void;\n\n /**\n * Custom validation function that runs only after schema validation passes.\n * Use this for complex validation logic that can't be expressed in the schema.\n * @returns Array of validation errors, or undefined if validation passes\n */\n // TODO(burdon): Change to key x value?\n onValidate?: (values: T) => ValidationError[] | undefined;\n\n /**\n * Called when the form is valid.\n */\n onValid?: (values: T, meta: { changed: FormHandler<T>['changed'] }) => void;\n\n /**\n * Called when the form is submitted and passes validation.\n */\n onSave?: (values: T, meta: { changed: FormHandler<T>['changed'] }) => MaybePromise<void>;\n}\n\n/**\n * Creates a hook for managing form state, including values, validation, and submission.\n * Deeply integrated with `@dxos/schema` for schema-based validation.\n */\nexport const useForm = <T extends BaseObject>({\n schema,\n initialValues,\n onValuesChanged,\n onValidate,\n onValid,\n onSave,\n}: FormOptions<T>): FormHandler<T> => {\n invariant(SchemaAST.isTypeLiteral(schema.ast));\n\n const [values, setValues] = useState<Partial<T>>(initialValues);\n\n useEffect(() => {\n setValues(initialValues);\n }, [initialValues]);\n\n const [touched, setTouched] = useState<Record<JsonPath, boolean>>(createKeySet(initialValues, false));\n const [changed, setChanged] = useState<Record<JsonPath, boolean>>(createKeySet(initialValues, false));\n const [errors, setErrors] = useState<Record<JsonPath, string>>({});\n const [saving, setSaving] = useState(false);\n\n //\n // Validation.\n //\n\n const validate = useCallback(\n (values: Partial<T>): values is T => {\n let errors: ValidationError[] = validateSchema(schema, values) ?? [];\n if (errors.length === 0 && onValidate) {\n const validatedValues = values as T;\n errors = onValidate(validatedValues) ?? [];\n }\n\n setErrors(flatMap(errors));\n const valid = errors.length === 0;\n return valid;\n },\n [schema, onValidate],\n );\n\n // Validate on schema change.\n const [schemaDirty, setSchemaDirty] = useState(false);\n useEffect(() => setSchemaDirty(true), [schema]);\n useEffect(() => {\n if (schemaDirty) {\n validate(values);\n setSchemaDirty(false);\n }\n }, [values, schemaDirty]);\n\n const formIsValid = useMemo(() => {\n return Object.keys(errors).length === 0;\n }, [errors]);\n\n /**\n * NOTE: We can submit if there is no touched field that has an error.\n * Basically, if there's a validation message visible in the form, submit should be disabled.\n */\n const canSave = useMemo(\n () =>\n !saving &&\n // Check if any error paths that are touched have errors.\n !Object.entries(touched).some(\n ([path, isTouched]) =>\n isTouched &&\n Object.keys(errors).some(\n (errorPath) => errorPath === path || errorPath.startsWith(`${path}.`) || errorPath.startsWith(`${path}[`),\n ),\n ),\n [touched, errors, saving],\n );\n\n const handleSave = useCallback(async () => {\n if (validate(values)) {\n setSaving(true);\n try {\n await onSave?.(values, { changed });\n } finally {\n setSaving(false);\n }\n }\n }, [values, validate, onSave, changed]);\n\n //\n // Fields.\n //\n\n const getStatus = useCallback<FormHandler<T>['getStatus']>(\n (path) => {\n const jsonPath = Array.isArray(path) ? createJsonPath(path) : path;\n const matchingError = Object.entries(errors).find(\n ([errorPath]) =>\n errorPath === jsonPath || errorPath.startsWith(`${jsonPath}.`) || errorPath.startsWith(`${jsonPath}[`),\n );\n\n // Only show errors for touched fields.\n const isTouched = touched[jsonPath as JsonPath];\n if (!isTouched) {\n return {\n status: undefined,\n error: undefined,\n };\n }\n\n return {\n status: matchingError ? 'error' : undefined,\n error: matchingError ? matchingError[1] : undefined,\n };\n },\n [errors, touched],\n );\n\n const getFormValue = useCallback<FormHandler<T>['getValue']>(\n <V>(path: (string | number)[]): V | undefined => {\n return getValue(values, createJsonPath(path));\n },\n [values],\n );\n\n // TODO(wittjosiah): This is causing the entire form to re-render on every change.\n const onValueChange = useCallback<FormHandler<T>['onValueChange']>(\n (path: (string | number)[], type: SimpleType, value: any) => {\n const jsonPath = createJsonPath(path);\n let parsedValue = value;\n try {\n if (type === 'number') {\n parsedValue = parseFloat(value as string) || 0;\n }\n } catch (err) {\n log.catch(err);\n parsedValue = undefined;\n }\n\n const newValues = { ...setValue(values, jsonPath, parsedValue) };\n setValues(newValues);\n const newChanged = { ...changed, [jsonPath]: true };\n setChanged(newChanged);\n onValuesChanged?.(newValues);\n\n const isValid = validate(newValues);\n if (isValid && onValid) {\n onValid(newValues, { changed: newChanged });\n }\n },\n [values, onValuesChanged, validate, onValid, changed],\n );\n\n const onTouched = useCallback(\n (path: (string | number)[]) => {\n const jsonPath = createJsonPath(path);\n setTouched((touched) => ({ ...touched, [jsonPath]: true }));\n validate(values);\n },\n [validate, values],\n );\n\n return useMemo(\n () => ({\n // State.\n values,\n errors,\n touched,\n changed,\n canSave,\n formIsValid,\n\n // Actions.\n handleSave,\n\n // Field utils.\n getStatus,\n getValue: getFormValue,\n onValueChange,\n onTouched,\n }),\n [\n values,\n errors,\n touched,\n changed,\n canSave,\n formIsValid,\n handleSave,\n getStatus,\n getFormValue,\n onValueChange,\n onTouched,\n ],\n );\n};\n\nconst createKeySet = <T extends BaseObject, V>(obj: T, value: V): Record<JsonPath, V> => {\n invariant(obj);\n return Object.keys(obj).reduce((acc, key) => ({ ...acc, [key]: value }), {} as Record<JsonPath, V>);\n};\n\nconst flatMap = (errors: ValidationError[]) => {\n return errors.reduce(\n (result, { path, message }) => {\n // Convert the validation error path format to our JsonPath format.\n const jsonPath = fromEffectValidationPath(path);\n if (!(jsonPath in result)) {\n result[jsonPath] = message;\n }\n return result;\n },\n {} as Record<JsonPath, string>,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { type TypeAnnotation, getObjectDXN } from '@dxos/echo/internal';\nimport { Filter, type Space } from '@dxos/react-client/echo';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type QueryRefOptions } from './useQueryRefOptions';\n\ntype UseRefQueryLookupProps = { space?: Space };\n\nexport const useRefQueryLookupHandler = ({ space }: UseRefQueryLookupProps): QueryRefOptions => {\n return useCallback(\n async (typeInfo: TypeAnnotation) => {\n if (!space) {\n return [];\n }\n const query = space.db.query(Filter.typename(typeInfo.typename));\n const { objects } = await query.run();\n\n return objects\n .map((object) => {\n const dxn = getObjectDXN(object);\n if (!dxn) {\n return undefined;\n }\n\n const item = { dxn, label: Obj.getLabel(object) ?? object?.id ?? '' };\n return item;\n })\n .filter(isNonNullable);\n },\n [space],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { type TypeAnnotation } from '@dxos/echo/internal';\nimport { type DXN } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type Palette } from '@dxos/react-ui-types';\nimport { type MaybePromise } from '@dxos/util';\n\nexport type RefOption = { dxn: DXN; label?: string };\nexport type QueryRefOptions = (type: TypeAnnotation) => MaybePromise<RefOption[]>;\n\nexport type QueryTag = {\n id: string;\n label: string;\n hue?: Palette;\n};\n\ntype UseQueryRefOptionsProps = { refTypeInfo: TypeAnnotation | undefined; onQueryRefOptions?: QueryRefOptions };\n\n/**\n * Hook to query reference options based on type information.\n * Used internally within forms to fetch and format reference options for reference fields.\n */\n// TODO(wittjosiah): This should be a reactive query so that the options are always up to date.\nexport const useQueryRefOptions = ({ refTypeInfo, onQueryRefOptions }: UseQueryRefOptionsProps) => {\n const [options, setOptions] = useState<QueryTag[]>([]);\n const [loading, setLoading] = useState(false);\n const [state, setState] = useState({});\n const update = useCallback(() => setState({}), []);\n\n useEffect(() => {\n if (!refTypeInfo || !onQueryRefOptions) {\n return;\n }\n\n const fetchOptions = async () => {\n setLoading(true);\n try {\n const fetchedOptions = await onQueryRefOptions(refTypeInfo);\n setOptions(\n fetchedOptions.map((option) => {\n const dxn = option.dxn.toString() as string;\n return { id: dxn, label: option.label ?? dxn, hue: 'neutral' as any };\n }),\n );\n } catch (error) {\n log.error('Failed to fetch ref options:', error);\n setOptions([]);\n } finally {\n setLoading(false);\n }\n };\n\n void fetchOptions();\n }, [refTypeInfo, onQueryRefOptions, state]);\n\n return { options, update, loading };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport * as StringEffect from 'effect/String';\nimport React, { Component, type PropsWithChildren, type ReactNode, forwardRef, useMemo } from 'react';\n\nimport { createJsonPath, findNode, getDiscriminatedType, isDiscriminatedUnion } from '@dxos/effect';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type ProjectionModel, type SchemaProperty, getSchemaProperties } from '@dxos/schema';\nimport { isTruthy } from '@dxos/util';\n\nimport { type QueryRefOptions } from '../../hooks';\nimport { getRefProps } from '../../util';\n\nimport { ArrayField } from './ArrayField';\nimport { SelectInput } from './Defaults';\nimport { getInputComponent } from './factory';\nimport { type ComponentLookup } from './Form';\nimport { useFormValues, useInputProps } from './FormContext';\nimport { type InputComponent } from './Input';\nimport { RefField, type RefFieldProps } from './RefField';\n\nexport type FormFieldProps = {\n property: SchemaProperty<any>;\n path?: (string | number)[];\n /** Used to indicate if input should be presented inline (e.g. for array items). */\n inline?: boolean;\n projection?: ProjectionModel;\n lookupComponent?: ComponentLookup;\n Custom?: Partial<Record<string, InputComponent>>;\n} & Pick<\n RefFieldProps,\n | 'readonly'\n | 'onQueryRefOptions'\n | 'createOptionLabel'\n | 'createOptionIcon'\n | 'onCreate'\n | 'createSchema'\n | 'createInitialValuePath'\n>;\n\nexport const FormField = ({\n property,\n path,\n readonly,\n inline,\n projection,\n onQueryRefOptions,\n createOptionLabel,\n createOptionIcon,\n onCreate,\n createSchema,\n createInitialValuePath,\n lookupComponent,\n Custom,\n}: FormFieldProps) => {\n const { ast, name, type, format, title, description, options, examples, array } = property;\n const inputProps = useInputProps(path);\n\n const label = useMemo(() => title ?? Function.pipe(name, StringEffect.capitalize), [title, name]);\n const placeholder = useMemo(\n () => (examples?.length ? `Example: \"${examples[0]}\"` : description),\n [examples, description],\n );\n\n //\n // Registry and Custom.\n //\n\n const FoundComponent = lookupComponent?.({\n prop: name,\n schema: Schema.make(ast),\n inputProps: {\n type,\n format,\n label,\n readonly,\n placeholder,\n ...inputProps,\n },\n });\n\n if (FoundComponent) {\n return FoundComponent;\n }\n\n const jsonPath = createJsonPath(path ?? []);\n const CustomComponent = Custom?.[jsonPath];\n if (CustomComponent) {\n return (\n <CustomComponent\n type={type}\n format={format}\n label={label}\n inputOnly={inline}\n placeholder={placeholder}\n readonly={readonly}\n {...inputProps}\n />\n );\n }\n\n //\n // Refs.\n //\n\n const refProps = getRefProps(property);\n if (refProps) {\n return (\n <RefField\n ast={refProps.ast}\n array={refProps.isArray}\n type={type}\n format={format}\n label={label}\n placeholder={placeholder}\n readonly={readonly}\n inputOnly={inline}\n onQueryRefOptions={onQueryRefOptions}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n onCreate={onCreate}\n createSchema={createSchema}\n createInitialValuePath={createInitialValuePath}\n {...inputProps}\n />\n );\n }\n\n //\n // Arrays.\n //\n\n if (array) {\n return <ArrayField property={property} path={path} inputProps={inputProps} readonly={readonly} Custom={Custom} />;\n }\n\n //\n // Standard Inputs.\n //\n\n const InputComponent = getInputComponent(type, format);\n if (InputComponent) {\n return (\n <InputComponent\n type={type}\n format={format}\n label={label}\n inputOnly={inline}\n placeholder={placeholder}\n readonly={readonly}\n {...inputProps}\n />\n );\n }\n\n //\n // Select.\n //\n\n if (options) {\n return (\n <SelectInput\n type={type}\n format={format}\n readonly={readonly}\n inputOnly={inline}\n label={label}\n options={options.map((option) => ({ value: option, label: String(option) }))}\n placeholder={placeholder}\n {...inputProps}\n />\n );\n }\n\n //\n // Nested Objects.\n //\n\n if (type === 'object') {\n const baseNode = findNode(ast, isDiscriminatedUnion);\n const typeLiteral = baseNode\n ? getDiscriminatedType(baseNode, inputProps.getValue() as any)\n : findNode(ast, SchemaAST.isTypeLiteral);\n\n if (typeLiteral) {\n return (\n <>\n {!inline && <h3 className={mx('text-lg mlb-inputSpacingBlock first:mbs-0')}>{label}</h3>}\n <FormFields\n schema={Schema.make(typeLiteral)}\n path={path}\n readonly={readonly}\n projection={projection}\n onQueryRefOptions={onQueryRefOptions}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n onCreate={onCreate}\n Custom={Custom}\n lookupComponent={lookupComponent}\n />\n </>\n );\n }\n }\n\n return null;\n};\n\nexport type FormFieldsProps = ThemedClassName<\n {\n testId?: string;\n schema: Schema.Schema.All;\n /**\n * Path to the current object from the root. Used with nested forms.\n */\n path?: (string | number)[];\n filter?: (props: SchemaProperty<any>[]) => SchemaProperty<any>[];\n sort?: string[];\n /**\n * Optional projection for projection-based field management\n */\n projection?: ProjectionModel;\n lookupComponent?: ComponentLookup;\n /**\n * Map of custom renderers for specific properties.\n * Prefer lookupComponent for plugin specific input surfaces.\n */\n Custom?: Partial<Record<string, InputComponent>>;\n onQueryRefOptions?: QueryRefOptions;\n } & Pick<FormFieldProps, 'readonly'> &\n Pick<\n RefFieldProps,\n | 'onQueryRefOptions'\n | 'createOptionLabel'\n | 'createOptionIcon'\n | 'onCreate'\n | 'createSchema'\n | 'createInitialValuePath'\n >\n>;\n\nexport const FormFields = forwardRef<HTMLDivElement, FormFieldsProps>(\n (\n {\n classNames,\n schema,\n path,\n filter,\n sort,\n projection,\n readonly,\n lookupComponent,\n Custom,\n onQueryRefOptions,\n ...props\n },\n forwardRef,\n ) => {\n const values = useFormValues(path);\n const properties = useMemo(() => {\n const props = getSchemaProperties(schema.ast, values);\n\n // Use projection-based field management when view and projection are available\n if (projection) {\n const fieldProjections = projection.getFieldProjections();\n const hiddenProperties = new Set(projection.getHiddenProperties());\n\n // Filter properties to only include visible ones and order by projection\n const visibleProps = props.filter((prop) => !hiddenProperties.has(prop.name));\n const orderedProps: SchemaProperty<any>[] = [];\n\n // Add properties in projection field order\n for (const fieldProjection of fieldProjections) {\n const fieldPath = String(fieldProjection.field.path);\n const prop = visibleProps.find((p) => p.name === fieldPath);\n if (prop) {\n orderedProps.push(prop);\n }\n }\n\n // Add any remaining properties not in projection\n const projectionPaths = new Set(fieldProjections.map((fp) => String(fp.field.path)));\n const remainingProps = visibleProps.filter((prop) => !projectionPaths.has(prop.name));\n orderedProps.push(...remainingProps);\n\n return orderedProps;\n }\n\n // Fallback to legacy filter/sort behavior\n const filtered = filter ? filter(props) : props;\n return sort ? filtered.sort((a, b) => sort.indexOf(a.name) - sort.indexOf(b.name)) : filtered;\n }, [schema, values, filter, sort, projection?.fields]);\n\n return (\n <div role='form' className={mx('is-full', classNames)} ref={forwardRef}>\n {properties\n .map((property) => {\n return (\n <ErrorBoundary key={property.name} path={[...(path ?? []), property.name]}>\n <FormField\n property={property}\n path={[...(path ?? []), property.name]}\n readonly={readonly}\n projection={projection}\n onQueryRefOptions={onQueryRefOptions}\n lookupComponent={lookupComponent}\n Custom={Custom}\n {...props}\n />\n </ErrorBoundary>\n );\n })\n .filter(isTruthy)}\n </div>\n );\n },\n);\n\ntype ErrorState = {\n error: Error | undefined;\n};\n\ntype ErrorBoundaryProps = PropsWithChildren<{\n path?: (string | number)[];\n}>;\n\nclass ErrorBoundary extends Component<ErrorBoundaryProps, ErrorState> {\n static getDerivedStateFromError(error: Error): { error: Error } {\n return { error };\n }\n\n override state = { error: undefined };\n\n override componentDidUpdate(prevProps: ErrorBoundaryProps): void {\n if (prevProps.path !== this.props.path) {\n this.resetError();\n }\n }\n\n override render(): ReactNode {\n if (this.state.error) {\n return (\n <div className='flex gap-2 border border-roseFill font-mono text-sm'>\n <span className='bg-roseFill text-surfaceText pli-1 font-thin'>ERROR</span>\n {String(this.props.path?.join('.'))}\n </div>\n );\n }\n\n return this.props.children;\n }\n\n private resetError(): void {\n this.setState({ error: undefined });\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { FormatEnum, GeoLocation, TypeEnum } from '@dxos/echo/internal';\nimport { type ValidationError } from '@dxos/schema';\n\n/**\n * Parse value by field value type.\n * Used by Table, Sheet, etc.\n * Handles various data types including booleans, numbers, dates, and strings.\n * Returns undefined for empty or null inputs.\n */\nexport type ParseProps = {\n type?: TypeEnum;\n format?: FormatEnum;\n value: any;\n};\n\nexport const parseValue = ({ type, format, value }: ParseProps) => {\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n\n const parseScalar = (type?: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean: {\n if (typeof value === 'string') {\n const lowercaseValue = value.toLowerCase();\n if (lowercaseValue === '0' || lowercaseValue === 'false') {\n return false;\n } else if (lowercaseValue === '1' || lowercaseValue === 'true') {\n return true;\n }\n }\n return Boolean(value);\n }\n\n case TypeEnum.Number: {\n const cleaned = typeof value === 'string' ? value.replace(/[^0-9.-]+/g, '') : value;\n const num = Number(cleaned);\n return Number.isNaN(num) ? null : num;\n }\n\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default: {\n return value;\n }\n }\n };\n\n if (!format) {\n return parseScalar(type);\n }\n\n switch (format) {\n case FormatEnum.Boolean:\n return parseScalar(TypeEnum.Boolean);\n\n case FormatEnum.Number:\n case FormatEnum.Percent:\n case FormatEnum.Currency:\n return parseScalar(TypeEnum.Number);\n\n case FormatEnum.String:\n case FormatEnum.Markdown: {\n return parseScalar(TypeEnum.String);\n }\n\n case FormatEnum.Ref:\n throw new Error(`unexpected format: ${FormatEnum.Ref}`);\n\n case FormatEnum.DateTime:\n case FormatEnum.Date:\n case FormatEnum.Time:\n case FormatEnum.Timestamp: {\n const date = new Date(value as string | number);\n return isNaN(date.getTime()) ? null : date;\n }\n\n case FormatEnum.GeoPoint: {\n // Parse string in format \"lat,long\" to GeoPoint [longitude, latitude].\n if (typeof value === 'string') {\n // Only keep digits, decimal points, minus signs, and commas.\n const cleaned = value.replace(/[^0-9.,-]+/g, '');\n const parts = cleaned.split(',');\n if (parts.length === 2) {\n const lat = parseFloat(parts[0]);\n const long = parseFloat(parts[1]);\n if (!isNaN(lat) && !isNaN(long)) {\n return GeoLocation.toGeoPoint({ latitude: lat, longitude: long });\n }\n }\n }\n\n return [0, 0];\n }\n\n default: {\n return value;\n }\n }\n};\n\n// TODO(burdon): Type and format.\nexport type CellClassesForFieldTypeProps = {\n type?: TypeEnum;\n format?: FormatEnum;\n};\n\nexport const cellClassesForFieldType = ({ type, format }: CellClassesForFieldTypeProps): string[] | undefined => {\n switch (format || type) {\n case FormatEnum.Markdown:\n return undefined;\n case FormatEnum.Time:\n case FormatEnum.Timestamp:\n case FormatEnum.DateTime:\n case FormatEnum.Date:\n case FormatEnum.Duration:\n return ['font-mono', 'text-right'];\n case FormatEnum.Currency:\n return ['text-right'];\n case FormatEnum.JSON:\n case FormatEnum.DID:\n return ['font-mono'];\n case TypeEnum.Number:\n case TypeEnum.Boolean:\n return ['text-right', 'font-mono'];\n case TypeEnum.String:\n return undefined;\n case TypeEnum.Ref:\n return undefined;\n default:\n return undefined;\n }\n};\n\n// TODO(ZaymonFC): How to do this with translations?\nexport const pathNotUniqueError = (path: string): ValidationError => ({\n path: 'path',\n message: `'${path}' is already present`,\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { format as formatDate } from 'date-fns/format';\n\nimport { FormatEnum, GeoLocation, TypeEnum } from '@dxos/echo/internal';\n\ntype ValueFormatProps = {\n type: TypeEnum;\n format?: FormatEnum | undefined;\n value: any;\n locale?: string | undefined;\n};\n\n/**\n * Format value by type.\n * Used by Table, Sheet, etc.\n */\n// TODO(burdon): Move to react-ui-form.\n// TODO(burdon): Formatting is different from kind format (e.g., percent is not a data format).\nexport const formatForDisplay = ({ type, format, value, locale = undefined }: ValueFormatProps): string => {\n const formatScalar = (type: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean:\n return (value as boolean).toLocaleString().toUpperCase();\n case TypeEnum.Number:\n return value.toLocaleString(locale);\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default: {\n return String(value);\n }\n }\n };\n\n if (!format) {\n return formatScalar(type);\n }\n\n switch (format) {\n case FormatEnum.Boolean: {\n return formatScalar(TypeEnum.Boolean);\n }\n case FormatEnum.Number: {\n return formatScalar(TypeEnum.Number);\n }\n case FormatEnum.String:\n case FormatEnum.Ref: {\n return formatScalar(TypeEnum.String);\n }\n case FormatEnum.Percent: {\n return `${(value as number) * 100}%`;\n }\n case FormatEnum.Currency: {\n // TODO(burdon): Get from property annotation.\n return (value as number).toLocaleString(locale, {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n case FormatEnum.Date: {\n try {\n return formatDate(new Date(value as number), 'yyyy-MM-dd');\n } catch (error) {\n return 'Invalid Date';\n }\n }\n case FormatEnum.Time: {\n try {\n return formatDate(new Date(value as number), 'HH:mm:ss');\n } catch (error) {\n return 'Invalid Time';\n }\n }\n case FormatEnum.DateTime: {\n try {\n return formatDate(new Date(value as number), 'yyyy-MM-dd HH:mm:ss');\n } catch (error) {\n return 'Invalid DateTime';\n }\n }\n case FormatEnum.GeoPoint: {\n if (value === null || value === undefined) {\n return '';\n }\n\n // For GeoPoint format [longitude, latitude].\n if (Array.isArray(value) && value.length >= 2 && value.every(Number.isFinite)) {\n const { latitude, longitude } = GeoLocation.fromGeoPoint(value as [number, number]);\n return `${latitude},${longitude}`;\n }\n\n return String(value);\n }\n default: {\n if (value === null || value === 'undefined') {\n return '';\n }\n return String(value);\n }\n }\n};\n\nexport const formatForEditing = ({ type, format, value, locale = undefined }: ValueFormatProps): string => {\n const formatScalar = (type: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean:\n case TypeEnum.Number:\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default:\n return String(value);\n }\n };\n\n if (!format) {\n return formatScalar(type);\n }\n\n switch (format) {\n case FormatEnum.Boolean:\n case FormatEnum.Number:\n case FormatEnum.String:\n case FormatEnum.Ref: {\n return formatScalar(type);\n }\n case FormatEnum.Percent: {\n return String(value * 100);\n }\n case FormatEnum.Currency: {\n return String(value);\n }\n case FormatEnum.DateTime: {\n const date = new Date(value as number);\n return date.toISOString();\n }\n case FormatEnum.Date: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[0];\n }\n case FormatEnum.Time: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[1].split('.')[0];\n }\n case FormatEnum.GeoPoint: {\n // Handle null or undefined\n if (value === null || value === undefined) {\n return '';\n }\n\n // For GeoPoint format [longitude, latitude].\n if (Array.isArray(value) && value.length >= 2 && value.every(Number.isFinite)) {\n const { latitude, longitude } = GeoLocation.fromGeoPoint(value as [number, number]);\n return `${latitude},${longitude}`;\n }\n\n return String(value);\n }\n\n default: {\n return String(value);\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as SchemaAST from 'effect/SchemaAST';\n\nimport { FormatEnum, ReferenceAnnotationId } from '@dxos/echo/internal';\nimport { findAnnotation } from '@dxos/effect';\nimport { type SchemaProperty } from '@dxos/schema';\n\nimport { findArrayElementType } from './schema';\n\ntype RefProps = {\n ast: SchemaAST.AST;\n isArray: boolean;\n};\n\nexport const getRefProps = (property: SchemaProperty<any>): RefProps | undefined => {\n const { ast, format, array } = property;\n\n // Array of references.\n if (array) {\n const elementType = findArrayElementType(ast);\n if (elementType) {\n const annotation = findAnnotation(elementType, ReferenceAnnotationId);\n if (annotation) {\n return { ast: elementType, isArray: true };\n }\n }\n }\n\n // Direct reference.\n if (format === FormatEnum.Ref) {\n return { ast, isArray: false };\n }\n\n return undefined;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { findNode } from '@dxos/effect';\n\nexport const findArrayElementType = (ast: SchemaAST.AST) => {\n const tupleType = findNode(ast, SchemaAST.isTupleType);\n return (tupleType as SchemaAST.TupleType | undefined)?.rest[0]?.type;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport * as String from 'effect/String';\nimport React, { Fragment, useCallback } from 'react';\n\nimport { SimpleType, findNode, getDiscriminatedType, isDiscriminatedUnion } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\nimport { type SchemaProperty, getSchemaProperties } from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { findArrayElementType } from '../../util';\n\nimport { type ComponentLookup } from './Form';\nimport { FormField, type FormFieldProps } from './FormContent';\nimport { type FormInputStateProps, useFormValues } from './FormContext';\nimport { type InputComponent, InputHeader } from './Input';\n\ntype ArrayFieldProps = {\n property: SchemaProperty<any>;\n inputProps: FormInputStateProps;\n path?: (string | number)[];\n Custom?: Partial<Record<string, InputComponent>>;\n lookupComponent?: ComponentLookup;\n} & Pick<FormFieldProps, 'readonly'>;\n\nexport const ArrayField = ({ property, readonly, path, inputProps, Custom, lookupComponent }: ArrayFieldProps) => {\n const { t } = useTranslation(translationKey);\n const { ast, name, type, title } = property;\n // TODO(wittjosiah): The fallback to an empty array stops the form from crashing but isn't immediately live.\n // It doesn't become live until another field is touched, but that's better than the whole form crashing.\n const values = (useFormValues(path ?? []) ?? []) as any[];\n invariant(Array.isArray(values), `Values at path ${path?.join('.')} must be an array.`);\n const label = title ?? Function.pipe(name, String.capitalize);\n\n const elementType = findArrayElementType(ast);\n\n const getDefaultObjectValue = (typeNode: SchemaAST.AST): any => {\n const baseNode = findNode(typeNode, isDiscriminatedUnion);\n const typeLiteral = baseNode ? getDiscriminatedType(baseNode, {}) : findNode(typeNode, SchemaAST.isTypeLiteral);\n if (!typeLiteral) {\n return {};\n }\n\n return Object.fromEntries(getSchemaProperties(typeLiteral, {}).map((prop) => [prop.name, prop.defaultValue]));\n };\n\n const getDefaultValue = () =>\n type === 'object' && elementType ? getDefaultObjectValue(elementType) : SimpleType.getDefaultValue(type);\n\n const handleAdd = useCallback(() => {\n inputProps.onValueChange(type, [...values, getDefaultValue()]);\n }, [type, elementType, inputProps, values]);\n\n const handleRemove = useCallback(\n (index: number) => {\n const newValues = values.filter((_, i) => i !== index);\n inputProps.onValueChange(type, newValues);\n },\n [type, inputProps, values],\n );\n\n if (!elementType) {\n return null;\n }\n\n return readonly && values.length < 1 ? null : (\n <>\n <InputHeader readonly label={label} />\n <div\n role='none'\n className={\n readonly\n ? 'flex flex-wrap gap-1 mlb-1'\n : values.length > 0\n ? 'grid gap-1 grid-cols-[1fr_min-content] mlb-1'\n : 'hidden'\n }\n >\n {values.map((_value, index) => {\n const field = (\n <FormField\n property={{\n ...property,\n array: false, // NOTE(ZaymonFC): This breaks arrays of arrays but ¯\\_(ツ)_/¯. Ping me if you need that.\n ast: elementType,\n }}\n path={[...(path ?? []), index]}\n readonly={readonly}\n inline\n Custom={Custom}\n lookupComponent={lookupComponent}\n />\n );\n return readonly ? (\n field\n ) : (\n <Fragment key={index}>\n <div role='none'>{field}</div>\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n label={t('button remove')}\n onClick={() => handleRemove(index)}\n classNames='self-center'\n />\n </Fragment>\n );\n })}\n </div>\n {!readonly && (\n <IconButton\n classNames='is-full mlb-cardSpacingBlock flex'\n icon='ph--plus--regular'\n label={t('add field')}\n onClick={handleAdd}\n />\n )}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { FormatEnum } from '@dxos/echo/internal';\nimport { type SimpleType } from '@dxos/effect';\n\nimport { GeoPointInput } from './custom';\nimport { BooleanInput, MarkdownInput, NumberInput, TextInput } from './Defaults';\nimport { type InputComponent } from './Input';\n\n/**\n * Get property input component.\n */\nexport const getInputComponent = (type: SimpleType, format?: FormatEnum | string): InputComponent | undefined => {\n switch (format) {\n case FormatEnum.GeoPoint:\n return GeoPointInput;\n case FormatEnum.Markdown:\n return MarkdownInput;\n }\n\n switch (type) {\n case 'string':\n return TextInput;\n case 'number':\n return NumberInput;\n case 'boolean':\n return BooleanInput;\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport '@dxos/lit-ui/dx-tag-picker.pcss';\n\nimport type * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport React, { useCallback, useMemo } from 'react';\n\nimport {\n type EchoSchema,\n Expando,\n Ref,\n ReferenceAnnotationId,\n type ReferenceAnnotationValue,\n getTypeAnnotation,\n} from '@dxos/echo/internal';\nimport { findAnnotation } from '@dxos/effect';\nimport { DXN } from '@dxos/keys';\nimport { type DxTagPickerItemClick } from '@dxos/lit-ui';\nimport { DxAnchor, DxTagPickerItem } from '@dxos/lit-ui/react';\nimport { Button, Icon, Input, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type QueryRefOptions, useQueryRefOptions } from '../../hooks';\nimport { translationKey } from '../../translations';\nimport { ObjectPicker } from '../ObjectPicker';\n\nimport { TextInput } from './Defaults';\nimport { InputHeader, type InputProps } from './Input';\n\nexport type RefFieldProps = InputProps & {\n ast?: SchemaAST.AST;\n array?: boolean;\n createOptionLabel?: [string, { ns: string }];\n createOptionIcon?: string;\n onCreate?: (values: any) => void;\n createSchema?: Schema.Schema.AnyNoContext;\n createInitialValuePath?: string;\n onQueryRefOptions?: QueryRefOptions;\n schema?: EchoSchema;\n};\n\n// TODO(thure): Is this a standard that should be better canonized?\nconst isRefSnapShot = (val: any): val is { '/': string } => {\n return typeof val === 'object' && typeof (val as any)?.['/'] === 'string';\n};\n\nexport const RefField = ({\n type,\n label,\n readonly,\n placeholder,\n inputOnly,\n array,\n ast,\n getValue,\n createOptionLabel,\n createOptionIcon,\n onBlur,\n onCreate,\n createSchema,\n createInitialValuePath,\n onQueryRefOptions,\n onValueChange,\n ...restInputProps\n}: RefFieldProps) => {\n const { t } = useTranslation(translationKey);\n const refTypeInfo = useMemo(\n () => (ast ? findAnnotation<ReferenceAnnotationValue>(ast, ReferenceAnnotationId) : undefined),\n [ast],\n );\n const {\n options: availableOptions,\n update: updateOptions,\n loading: _loading,\n } = useQueryRefOptions({ refTypeInfo, onQueryRefOptions });\n\n if ((refTypeInfo && refTypeInfo?.typename === getTypeAnnotation(Expando)?.typename) || !onQueryRefOptions) {\n // If ref type is expando, fall back to taking a DXN in string format.\n return (\n <RefFieldFallback\n {...{ type, label, placeholder, readonly, inputOnly, getValue, onBlur, onValueChange, ...restInputProps }}\n />\n );\n }\n\n const handleGetValue = useCallback(() => {\n const formValue = getValue();\n\n const unknownToRefOption = (val: unknown) => {\n const isRef = Ref.isRef(val);\n if (isRef || isRefSnapShot(val)) {\n const dxnString = isRef ? val.dxn.toString() : val['/'];\n const matchingOption = availableOptions.find((option) => option.id === dxnString);\n if (matchingOption) {\n return matchingOption;\n }\n }\n return undefined;\n };\n\n if (array && Array.isArray(formValue)) {\n return formValue.map(unknownToRefOption).filter(isNonNullable) ?? [];\n }\n\n const option = unknownToRefOption(formValue);\n if (option) {\n return [option];\n }\n\n return [];\n }, [getValue, availableOptions, array]);\n\n const handleUpdate = useCallback(\n (ids: string[]) => {\n if (ids.length === 0) {\n onValueChange('object', undefined);\n return;\n }\n\n const refs = ids\n .map((id) => {\n const item = availableOptions.find((option) => option.id === id);\n if (item) {\n const dxn = DXN.parse(item.id);\n return Ref.fromDXN(dxn);\n }\n return null;\n })\n .filter(isNonNullable);\n\n if (array) {\n onValueChange('object', refs);\n } else {\n onValueChange('object', refs[0]);\n }\n },\n [availableOptions, array, onValueChange],\n );\n\n const handleCreate = useCallback(\n (values: any) => {\n onCreate?.(values);\n updateOptions();\n },\n [onCreate, updateOptions],\n );\n\n if (!refTypeInfo) {\n return null;\n }\n\n const { status, error } = restInputProps.getStatus();\n\n const items = handleGetValue();\n const selectedIds = useMemo(() => items.map((i: any) => i.id), [items]);\n const toggleSelect = useCallback(\n (id: string) => {\n if (array) {\n const nextIds = selectedIds.includes(id) ? selectedIds.filter((x) => x !== id) : [...selectedIds, id];\n handleUpdate(nextIds);\n } else {\n if (selectedIds[0] === id) {\n handleUpdate([]);\n } else {\n handleUpdate([id]);\n }\n }\n },\n [array, selectedIds, handleUpdate],\n );\n\n // NOTE(thure): I left both predicates in-place in case we decide to add variants which do render readonly but empty values.\n return readonly && items.length < 1 ? null : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n <div data-no-submit>\n {readonly ? (\n items.length < 1 ? (\n <p className={mx(descriptionText, 'mbe-2')}>{t('empty readonly ref field label')}</p>\n ) : (\n items.map((item) => (\n <DxAnchor key={item.id} refid={item.id} rootclassname='mie-1'>\n {item.label}\n </DxAnchor>\n ))\n )\n ) : (\n <ObjectPicker.Root>\n <ObjectPicker.Trigger asChild>\n <Button variant='ghost' classNames='is-full text-start gap-2'>\n <div role='none' className='grow'>\n {items?.length ? (\n items?.map((item) => (\n <DxTagPickerItem\n key={item.id}\n itemId={item.id}\n label={item.label}\n {...(item.hue ? { hue: item.hue } : {})}\n removeLabel={t('remove item label')}\n onItemClick={(event: DxTagPickerItemClick) => {\n if (event.action === 'remove') {\n toggleSelect(item.id);\n }\n }}\n />\n ))\n ) : (\n <span className='text-description'>\n {placeholder ?? t('ref field placeholder', { count: array ? 99 : 1 })}\n </span>\n )}\n </div>\n <Icon size={3} icon='ph--caret-down--bold' />\n </Button>\n </ObjectPicker.Trigger>\n <ObjectPicker.Content\n options={availableOptions}\n selectedIds={selectedIds}\n onSelect={toggleSelect}\n createSchema={createSchema}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n createInitialValuePath={createInitialValuePath}\n onCreate={handleCreate}\n />\n </ObjectPicker.Root>\n )}\n </div>\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nconst RefFieldFallback = ({\n type,\n label,\n readonly,\n placeholder,\n inputOnly,\n getValue,\n onValueChange,\n ...restInputProps\n}: InputProps) => {\n const handleOnValueChange = (_type: any, dxnString: string) => {\n const dxn = DXN.tryParse(dxnString);\n if (dxn) {\n onValueChange?.('object', Ref.fromDXN(dxn));\n } else if (dxnString === '') {\n onValueChange?.('object', undefined);\n } else {\n onValueChange?.('string', dxnString);\n }\n };\n\n const handleGetValue = () => {\n const formValue = getValue();\n if (typeof formValue === 'string') {\n return formValue;\n }\n if (Ref.isRef(formValue)) {\n return formValue.dxn.toString();\n }\n\n return undefined;\n };\n\n return (\n <TextInput\n type={type}\n label={label}\n readonly={readonly}\n placeholder={placeholder}\n inputOnly={inputOnly}\n getValue={handleGetValue as <V>() => V | undefined}\n onValueChange={handleOnValueChange}\n {...restInputProps}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport React, { type KeyboardEvent, type MouseEvent, forwardRef, useCallback, useMemo, useState } from 'react';\n\nimport { Icon, Popover, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { Combobox } from '@dxos/react-ui-searchlist';\n\nimport { type QueryTag } from '../../hooks';\nimport { translationKey } from '../../translations';\nimport { Form } from '../Form';\n\nexport type ObjectPickerContentProps = ThemedClassName<{\n options: QueryTag[];\n selectedIds?: string[];\n createSchema?: Schema.Schema.AnyNoContext;\n createOptionLabel?: [string, { ns: string }];\n createOptionIcon?: string;\n createInitialValuePath?: string;\n onSelect: (id: string) => void;\n onCreate?: (values: any) => void;\n}>;\n\nconst ObjectPickerContent = forwardRef<HTMLDivElement, ObjectPickerContentProps>(\n (\n {\n options,\n selectedIds,\n createSchema,\n createOptionLabel,\n createOptionIcon,\n createInitialValuePath,\n onSelect,\n onCreate,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation(translationKey);\n\n const [searchString, setSearchString] = useState('');\n const [showForm, setShowForm] = useState(false);\n\n const handleFormSave = useCallback(\n (values: any) => {\n onCreate?.(values);\n setShowForm(false);\n setSearchString('');\n },\n [onCreate],\n );\n\n const handleFormCancel = useCallback(() => {\n setShowForm(false);\n setSearchString('');\n }, []);\n\n // TODO(thure): The following click and keydown handlers are necessary because `onSelect` is called after the\n // Popover is already closed. Augment/refactor CmdK, if possible, to facilitate stopping event default\n // and propagation.\n\n const handleClick = useCallback(\n (event: MouseEvent) => {\n if (createSchema && (event.target as HTMLElement).closest('[data-value=\"__create__\"]')) {\n event.stopPropagation();\n event.preventDefault();\n setShowForm(true);\n }\n },\n [createSchema],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (\n event.key === 'Enter' &&\n createSchema &&\n (event.currentTarget as HTMLElement).querySelector(\n '[role=\"option\"][aria-selected=\"true\"][data-value=\"__create__\"]',\n )\n ) {\n event.stopPropagation();\n event.preventDefault();\n setShowForm(true);\n }\n },\n [createSchema],\n );\n\n const labelById = useMemo(\n () =>\n options.reduce((acc: Record<string, string>, option) => {\n acc[option.id.toLowerCase()] = option.label.toLowerCase();\n return acc;\n }, {}),\n [options],\n );\n\n return (\n <Combobox.Content\n {...props}\n ref={ref}\n filter={(value, search) => (value === '__create__' || labelById[value]?.includes(search.toLowerCase()) ? 1 : 0)}\n onClickCapture={handleClick}\n onKeyDownCapture={handleKeyDown}\n >\n {showForm && createSchema ? (\n <Popover.Viewport>\n <Form\n schema={createSchema}\n values={createInitialValuePath ? { [createInitialValuePath]: searchString } : {}}\n onSave={handleFormSave}\n onCancel={handleFormCancel}\n testId='create-referenced-object-form'\n />\n </Popover.Viewport>\n ) : (\n <>\n <Combobox.Input\n placeholder={t('ref field combobox input placeholder')}\n value={searchString}\n onValueChange={setSearchString}\n autoFocus\n />\n <Combobox.List>\n {options.map((option) => (\n <Combobox.Item\n key={option.id}\n value={option.id}\n onSelect={() => onSelect(option.id)}\n classNames='flex items-center gap-2'\n >\n <span className='grow'>{option.label}</span>\n {selectedIds?.includes(option.id) && <Icon icon='ph--check--regular' />}\n </Combobox.Item>\n ))}\n {searchString.length > 0 && createOptionLabel && createOptionIcon && createSchema && onCreate && (\n <Combobox.Item value='__create__' classNames='flex items-center gap-2'>\n <Icon icon={createOptionIcon} />\n {t(createOptionLabel[0], { ns: createOptionLabel[1].ns, text: searchString })}\n </Combobox.Item>\n )}\n </Combobox.List>\n </>\n )}\n <Combobox.Arrow />\n </Combobox.Content>\n );\n },\n);\n\nObjectPickerContent.displayName = 'ObjectPickerContent';\n\nexport const ObjectPicker = {\n Root: Combobox.Root,\n Trigger: Combobox.Trigger,\n VirtualTrigger: Combobox.VirtualTrigger,\n Content: ObjectPickerContent,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport React, { forwardRef, useCallback, useImperativeHandle, useMemo, useState } from 'react';\n\nimport { QueryAST } from '@dxos/echo';\nimport { EchoSchema, Format, type JsonProp, isMutable, toJsonSchema } from '@dxos/echo/internal';\nimport { Filter, Query, type SchemaRegistry } from '@dxos/echo-db';\nimport { invariant } from '@dxos/invariant';\nimport { Callout, IconButton, Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { QueryForm, type QueryFormProps } from '@dxos/react-ui-components';\nimport { List } from '@dxos/react-ui-list';\nimport { cardSpacing } from '@dxos/react-ui-stack';\nimport { inputTextLabel, mx, subtleHover } from '@dxos/react-ui-theme';\nimport {\n FieldSchema,\n type FieldType,\n ProjectionModel,\n VIEW_FIELD_LIMIT,\n type View,\n getTypenameFromQuery,\n} from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { FieldEditor } from '../FieldEditor';\nimport { Form, type FormProps, type InputComponent, InputHeader, type InputProps } from '../Form';\n\nconst listGrid = 'grid grid-cols-[min-content_1fr_min-content_min-content_min-content]';\nconst listItemGrid = 'grid grid-cols-subgrid col-span-5';\n\nexport type ViewEditorProps = ThemedClassName<\n {\n schema: Schema.Schema.AnyNoContext;\n view: View.View;\n mode?: 'schema' | 'query' | 'named-query';\n registry?: SchemaRegistry;\n readonly?: boolean;\n showHeading?: boolean;\n onQueryChanged?: (query: QueryAST.Query, target?: string) => void;\n onDelete?: (fieldId: string) => void;\n } & Pick<FormProps<any>, 'outerSpacing'> &\n Pick<QueryFormProps, 'types' | 'tags'>\n>;\n\n/**\n * Schema-based object form.\n */\nexport const ViewEditor = forwardRef<ProjectionModel, ViewEditorProps>(\n (\n {\n classNames,\n schema,\n view,\n mode = 'schema',\n registry,\n readonly,\n showHeading = false,\n types,\n tags,\n onQueryChanged,\n onDelete,\n outerSpacing = true,\n },\n forwardedRef,\n ) => {\n const schemaReadonly = !isMutable(schema);\n const { t } = useTranslation(translationKey);\n const projectionModel = useMemo(() => {\n // Use reactive and mutable version of json schema when schema is mutable.\n const jsonSchema = schema instanceof EchoSchema ? schema.jsonSchema : toJsonSchema(schema);\n return new ProjectionModel(jsonSchema, view.projection);\n }, [schema, JSON.stringify(view.projection)]);\n useImperativeHandle(forwardedRef, () => projectionModel, [projectionModel]);\n const [expandedField, setExpandedField] = useState<FieldType['id']>();\n\n const queueTarget = Match.value(view.query.ast).pipe(\n Match.when({ type: 'options' }, ({ options }) => {\n return Option.fromNullable(options.queues).pipe(\n Option.flatMap((queues) => Array.head(queues)),\n Option.getOrUndefined,\n );\n }),\n Match.orElse(() => undefined),\n );\n\n const viewSchema = useMemo(() => {\n const base = Schema.Struct({\n query:\n mode === 'schema'\n ? Format.URL.annotations({ title: 'Record type' })\n : QueryAST.Query.annotations({ title: 'Query' }),\n });\n\n if (mode === 'query' || mode === 'named-query') {\n const name = Schema.Struct({\n name: Schema.optional(Schema.String.annotations({ title: 'Name' })),\n });\n\n return Schema.Struct({\n ...(mode === 'named-query' ? { ...name.fields, ...base.fields } : base.fields),\n target: Schema.optional(Schema.String.annotations({ title: 'Target Queue' })),\n }).pipe(Schema.mutable);\n }\n\n return base.pipe(Schema.mutable);\n }, [mode]);\n\n // TODO(burdon): Need to warn user of possible consequences of editing.\n // TODO(burdon): Settings should have domain name owned by user.\n const viewValues = useMemo(\n () => ({\n name: view.name,\n query: mode === 'schema' ? getTypenameFromQuery(view.query.ast) : view.query.ast,\n target: queueTarget,\n }),\n [view.name, mode, view.query.ast, queueTarget],\n );\n\n const handleToggleField = useCallback(\n (field: FieldType) => {\n setExpandedField((prevExpandedFieldId) => (prevExpandedFieldId === field.id ? undefined : field.id));\n },\n [readonly],\n );\n\n // TODO(burdon): Check if mutable; variant of useCallback that return undefined if readonly?\n\n const handleAdd = useCallback(() => {\n invariant(!readonly);\n const field = projectionModel.createFieldProjection();\n setExpandedField(field.id);\n }, [schema, projectionModel, readonly]);\n\n const handleUpdate = useCallback(\n (values: any) => {\n invariant(!readonly);\n requestAnimationFrame(() => {\n if ('name' in values && view.name !== values.name) {\n view.name = values.name;\n return;\n }\n\n const query = mode === 'schema' ? Query.select(Filter.typename(values.query)).ast : values.query;\n onQueryChanged?.(query, values.target);\n });\n },\n [onQueryChanged, readonly, view, queueTarget, mode],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => {\n invariant(!readonly);\n if (fieldId === expandedField) {\n setExpandedField(undefined);\n }\n\n onDelete?.(fieldId);\n },\n [expandedField, onDelete, readonly],\n );\n\n const handleMove = useCallback(\n (fromIndex: number, toIndex: number) => {\n invariant(!readonly);\n // NOTE(ZaymonFC): Using arrayMove here causes a race condition with the kanban model.\n const fields = [...view.projection.fields];\n const [moved] = fields.splice(fromIndex, 1);\n fields.splice(toIndex, 0, moved);\n view.projection.fields = fields;\n },\n [view.projection.fields, readonly],\n );\n\n const handleClose = useCallback(() => setExpandedField(undefined), []);\n\n const handleHide = useCallback(\n (fieldId: string) => {\n setExpandedField(undefined);\n projectionModel.hideFieldProjection(fieldId);\n },\n [projectionModel],\n );\n\n const handleShow = useCallback(\n (property: string) => {\n setExpandedField(undefined);\n projectionModel.showFieldProjection(property as JsonProp);\n },\n [projectionModel],\n );\n\n const custom = useMemo(() => (mode === 'query' ? customFields({ types, tags }) : undefined), [types, tags, mode]);\n\n return (\n <div role='none' className={mx(classNames)}>\n {schemaReadonly && mode === 'schema' && (\n <Callout.Root valence='info' classNames={['mlb-cardSpacingBlock', outerSpacing && 'mli-cardSpacingInline']}>\n <Callout.Title>{t('system schema description')}</Callout.Title>\n </Callout.Root>\n )}\n\n {/* TODO(burdon): Is the form read-only or just the schema? */}\n {/* TODO(burdon): Readonly fields should take up the same space as editable fields (just be ghosted). */}\n <Form<Schema.Schema.Type<typeof viewSchema>>\n autoSave\n schema={viewSchema}\n values={viewValues}\n readonly={readonly ? 'disabled-input' : false}\n onSave={handleUpdate}\n outerSpacing={outerSpacing}\n Custom={custom}\n />\n\n <div role='none' className={outerSpacing ? cardSpacing : 'mlb-cardSpacingBlock'}>\n <h2 className={mx(inputTextLabel)}>{t('fields label')}</h2>\n\n <List.Root<FieldType>\n items={view.projection.fields}\n isItem={Schema.is(FieldSchema)}\n getId={(field) => field.id}\n onMove={readonly ? undefined : handleMove}\n readonly={readonly}\n >\n {({ items: fields }) => (\n <>\n {showHeading && <h3 className='text-sm'>{t('field path label')}</h3>}\n <div role='list' className={listGrid}>\n {fields?.map((field) => {\n const hidden = field.visible === false;\n return (\n <List.Item<FieldType>\n key={field.id}\n item={field}\n classNames={listItemGrid}\n aria-expanded={expandedField === field.id}\n >\n <div\n role='none'\n className={mx(subtleHover, listItemGrid, 'rounded-sm cursor-pointer min-bs-10')}\n >\n <List.ItemDragHandle disabled={readonly} />\n <List.ItemTitle\n classNames={hidden && 'text-subdued'}\n onClick={() => handleToggleField(field)}\n >\n {field.path}\n </List.ItemTitle>\n <List.ItemButton\n label={t(hidden ? 'show field label' : 'hide field label')}\n data-testid={hidden ? 'show-field-button' : 'hide-field-button'}\n icon={hidden ? 'ph--eye-closed--regular' : 'ph--eye--regular'}\n autoHide={false}\n disabled={readonly || (!hidden && projectionModel.fields.length <= 1)}\n onClick={() => (hidden ? handleShow(field.path) : handleHide(field.id))}\n />\n {mode === 'schema' && (\n <>\n <List.ItemDeleteButton\n label={t('delete field label')}\n autoHide={false}\n disabled={readonly || schemaReadonly || view.projection.fields.length <= 1}\n onClick={() => handleDelete(field.id)}\n data-testid='field.delete'\n />\n <IconButton\n iconOnly\n variant='ghost'\n label={t('toggle expand label', { ns: 'os' })}\n icon={\n expandedField === field.id ? 'ph--caret-down--regular' : 'ph--caret-right--regular'\n }\n onClick={() => handleToggleField(field)}\n />\n </>\n )}\n </div>\n {expandedField === field.id && mode === 'schema' && (\n <div role='none' className='col-span-5 mbs-1 mbe-1 border border-separator rounded-md'>\n <FieldEditor\n readonly={readonly || schemaReadonly ? 'disabled-input' : false}\n projection={projectionModel}\n field={field}\n registry={registry}\n onSave={handleClose}\n />\n </div>\n )}\n </List.Item>\n );\n })}\n </div>\n </>\n )}\n </List.Root>\n </div>\n\n {!readonly && !expandedField && mode === 'schema' && (\n <div role='none' className={outerSpacing ? cardSpacing : 'mlb-cardSpacingBlock'}>\n <IconButton\n icon='ph--plus--regular'\n label={t('add property button')}\n onClick={readonly ? undefined : handleAdd}\n // TODO(burdon): Show field limit in ux (not tooltip).\n disabled={view.projection.fields.length >= VIEW_FIELD_LIMIT}\n classNames='is-full'\n />\n </div>\n )}\n </div>\n );\n },\n);\n\nconst customFields = ({ types, tags }: Pick<ViewEditorProps, 'types' | 'tags'>): Record<string, InputComponent> => ({\n query: (props: InputProps) => {\n const handleChange = useCallback(\n (query: Query.Any) => props.onValueChange('object', query.ast),\n [props.onValueChange],\n );\n\n return (\n <Input.Root>\n <InputHeader label={props.label} />\n <QueryForm initialQuery={props.getValue()} types={types} tags={tags} onChange={handleChange} />\n </Input.Root>\n );\n },\n});\n"],
5
- "mappings": ";AAMO,IAAMA,iBAAiB;AAEvB,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACD,cAAAA,GAAiB;QAChB,gBAAgB;QAChB,uBAAuB;QACvB,kCAAkC;;QAGlC,uBAAuB;QACvB,wBAAwB;QACxB,8BAA8B;QAC9B,sBAAsB;QACtB,oBAAoB;QACpB,aAAa;QACb,gBAAgB;QAChB,uBAAuB;QACvB,4BAA4B;QAC5B,6BAA6B;QAC7B,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,wCAAwC;QACxC,6BAA6B;QAC7B,+BAA+B;;QAG/B,eAAe;;QAGf,kBAAkB;QAClB,mBAAmB;QACnB,eAAe;QACf,oBAAoB;QACpB,cAAc;QACd,mBAAmB;QACnB,cAAc;QACd,gBAAgB;QAChB,kBAAkB;QAClB,mBAAmB;QACnB,kBAAkB;QAClB,eAAe;QACf,iBAAiB;QACjB,mBAAmB;QACnB,kBAAkB;QAClB,cAAc;QACd,gBAAgB;QAChB,iBAAiB;QACjB,wBAAwB;QACxB,uBAAuB;QACvB,eAAe;QACf,eAAe;QACf,oBAAoB;QACpB,eAAe;QACf,iBAAiB;QACjB,cAAc;QACd,cAAc;QACd,eAAe;;QAGf,kBAAkB;QAClB,mBAAmB;;QAGnB,uBAAuB;QACvB,mCAAmC;QACnC,uBAAuB;QACvB,wBAAwB;QACxB,qBAAqB;;QAGrB,uBAAuB;QACvB,6BACE;MACJ;IACF;EACF;;;;;AChFF,OAAOE,WAAsE;AAE7E,SACEC,QAEAC,OAGAC,mBACAC,sBACK;AACP,SAASC,iBAAiB;AAC1B,SAASC,UAAU;AAMZ,IAAMC,cAAc,CAAC,EAAEC,UAAUC,YAAY,GAAGC,MAAAA,MAAyB;;;AAC9E,WACE,sBAAA,cAACC,UAAUC,SAAO;MAACC,YAAAA;MAAWJ,YAAW;OACvC,sBAAA,cAACK,OAAAA;MAAIC,MAAK;MAAOC,WAAWC,GAAG,oCAAoCR,UAAAA;MAAc,GAAGC;OACjFF,QAAAA,CAAAA;;;;AAIT;AAOO,IAAMU,iBAAiB,CAAC,EAAEC,OAAOC,aAAaZ,SAAQ,MAAuB;;;AAClF,WACE,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAACa,uBAAAA;MAAsBF;MAAcC;QACpCZ,QAAAA;;;;AAGP;AAEO,IAAMa,wBAAwB,CAAC,EAAEF,OAAOC,YAAW,MAAyC;;;AACjG,UAAM,EAAEE,EAAC,IAAKC,eAAeC,cAAAA;AAC7B,WACE,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAACC,MAAAA;MAAGT,WAAU;OAAgEU,kBAAkBP,OAAOG,CAAAA,CAAAA,GACtGF,eACC,sBAAA,cAACO,KAAAA;MAAEX,WAAU;OACVU,kBAAkBN,aAAaE,CAAAA,CAAAA,CAAAA;;;;AAK1C;AAEO,IAAMM,qBAAqB,CAAC,EAAEnB,YAAY,GAAGC,MAAAA,MAAoB;;;AACtE,WAAO,sBAAA,cAACmB,QAAAA;MAAQ,GAAGnB;MAAOD,YAAY;QAAC;QAAiBA;;;;;;AAC1D;AAIO,IAAMqB,eAAe,CAAC,EAAEtB,UAAUC,WAAU,MAAqB;;;WACtE,sBAAA,cAACK,OAAAA;MACCC,MAAK;MACLC,WAAWC,GACT,wFACA,kFACAR,UAAAA;OAGDD,QAAAA;;;;;AAIE,IAAMuB,eAAe,CAAC,EAAEvB,SAAQ,MAAqB;;;WAC1D,sBAAA,cAACM,OAAAA;MACCC,MAAK;MACLC,WAAWC,GACT,iGACA,oCAAA;OAGDT,QAAAA;;;;;AAIE,IAAMwB,qBAAqBf,GAAG;EACnC;;EAEA;EACA;CACD;AAED,IAAMgB,0BAA0B;AAChC,IAAMC,gCAAgC;AAO/B,IAAMC,cAAc,CAAC,EAAEhB,OAAOC,aAAaZ,SAAQ,MAAoB;;;AAC5E,UAAM,EAAEc,EAAC,IAAKC,eAAeC,cAAAA;AAE7B,WACE,sBAAA,cAACV,OAAAA;MAAIE,WAAWgB;OACd,sBAAA,cAAClB,OAAAA;MAAIC,MAAK;OACR,sBAAA,cAACqB,MAAAA;MAAGpB,WAAWiB;OAA0BP,kBAAkBP,OAAOG,CAAAA,CAAAA,GACjEF,eAAe,sBAAA,cAACO,KAAAA;MAAEX,WAAWkB;OAAgCR,kBAAkBN,aAAaE,CAAAA,CAAAA,CAAAA,GAE9Fd,QAAAA;;;;AAGP;AAEO,IAAM6B,mBAAmB,CAAC,EAAElB,OAAOC,aAAaZ,SAAQ,MAAoB;;;AACjF,UAAM,EAAEc,EAAC,IAAKC,eAAeC,cAAAA;AAE7B,WACE,sBAAA,cAACc,MAAMC,MAAI,MACT,sBAAA,cAACzB,OAAAA;MAAIE,WAAWgB;OACd,sBAAA,cAAClB,OAAAA;MAAIC,MAAK;OACR,sBAAA,cAACuB,MAAME,OAAK;MAAC/B,YAAYwB;OAA0BP,kBAAkBP,OAAOG,CAAAA,CAAAA,GAC3EF,eACC,sBAAA,cAACkB,MAAMG,0BAAwB,MAC7B,sBAAA,cAACH,MAAMI,aAAW;MAACjC,YAAYyB;OAC5BR,kBAAkBN,aAAaE,CAAAA,CAAAA,CAAAA,CAAAA,GAKvCd,QAAAA,CAAAA;;;;AAIT;AAEO,IAAMmC,mBAAmB,CAAC,EAAExB,OAAOC,aAAaZ,SAAQ,MAAoB;;;AACjF,UAAM,EAAEc,EAAC,IAAKC,eAAeC,cAAAA;AAE7B,WACE,sBAAA,cAACV,OAAAA;MAAIC,MAAK;MAAQC,WAAU;OAC1B,sBAAA,cAACoB,MAAAA;MAAGpB,WAAU;OAAiBU,kBAAkBP,OAAOG,CAAAA,CAAAA,GACvDF,eAAe,sBAAA,cAACO,KAAAA;MAAEX,WAAU;OAAwCU,kBAAkBN,aAAaE,CAAAA,CAAAA,GACnGd,QAAAA;;;;AAGP;;;;ACpJA,OAAOoC,WAASC,eAAAA,eAAaC,aAAAA,YAAWC,WAAAA,UAASC,YAAAA,iBAAgB;AAEjE,SAA0BC,cAAAA,aAAYC,aAAaC,oBAAoB;AAEvE,SAASC,OAAAA,YAAW;AACpB,SAASC,gBAAgBC,kBAAAA,uBAAsB;AAC/C,SAKEC,sCACAC,iBACAC,uBAAAA,sBACAC,sBACK;;;;ACfP,OAAOC,UAA2BC,aAAaC,WAAWC,SAASC,gBAAgB;AAEnF,SAASC,mBAAkC;AAC3C,SAASC,SAAAA,QAAOC,kBAAAA,uBAAsB;AACtC,SAASC,sBAAsB;;;;ACJ/B,OAAOC,YAAwB;AAI/B,SAASC,MAAMC,SAAAA,QAAOC,eAAe;AACrC,SAASC,oBAAoB;AAC7B,SAASC,WAAWC,MAAAA,WAAU;AA8BvB,IAAMC,cAAc,CAAC,EAAEC,OAAOC,OAAOC,SAAQ,MAAoB;;;AACtE,UAAMC,QAAQD,WAAW,SAASE,OAAMD;AACxC,UAAME,aAAaH,WAAW,CAAC,IAAI;MAAEI,YAAY;IAAS;AAC1D,WACE,gBAAAC,OAAA,cAACC,OAAAA;MAAIC,MAAK;MAAOC,WAAWC,IAAG,qCAAqCC,YAAAA;OAClE,gBAAAL,OAAA,cAACJ,OAAUE,YAAaJ,KAAAA,GACvBD,SACC,gBAAAO,OAAA,cAACM,QAAQC,SAAO;MAACC,SAAAA;MAAQC,SAAShB;MAAOiB,MAAK;OAC5C,gBAAAV,OAAA,cAACW,MAAAA;MAAKC,MAAK;MAAuBC,MAAM;MAAGd,YAAYe;;;;;AAKjE;;;ADxCO,IAAMC,gBAAgB,CAAC,EAAEC,MAAMC,OAAOC,UAAUC,WAAWC,UAAAA,WAAUC,eAAeC,OAAM,MAAc;;;AAC7G,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAC7B,UAAM,EAAEC,QAAQC,MAAK,IAAKR,UAAAA;AAC1B,UAAMS,WAAWC,QAAkB,MAAMT,UAAAA,KAAwB;MAAC;MAAG;OAAI;MAACA;KAAS;AACnF,UAAMU,cAAcD,QAAQ,MAAME,YAAYC,aAAaJ,QAAAA,GAAW;MAACA;KAAS;AAEhF,UAAM,CAACK,eAAeC,gBAAAA,IAAoBC,SAASL,YAAYM,WAAWC,SAAAA,CAAAA;AAC1E,UAAM,CAACC,cAAcC,eAAAA,IAAmBJ,SAASL,YAAYU,UAAUH,SAAAA,CAAAA;AAEvEI,cAAU,MAAA;AACR,YAAMC,WAAWX,YAAYC,aAAaJ,QAAAA;AAC1CM,uBAAiBQ,SAASN,UAAUC,SAAQ,CAAA;AAC5CE,sBAAgBG,SAASF,SAASH,SAAQ,CAAA;IAC5C,GAAG;MAACT;KAAS;AAEb,UAAMe,yBAAyBC,YAC7B,CAACC,gBAAmEC,YAClE,CAACC,UAAAA;AACC,YAAMC,YAAYD,MAAME,OAAOC;AAC/BJ,cAAQE,SAAAA;AACR,UAAIA,cAAc,MAAMA,cAAc,KAAK;AACzC,cAAMG,QAAQC,eAAeJ,SAAAA;AAC7B,YAAIG,UAAUE,UAAa,CAACC,MAAMH,KAAAA,GAAQ;AACxC,gBAAMI,kBAAkBxB,YAAYC,aAAaZ,UAAAA,KAAwB;YAAC;YAAG;WAAE;AAC/E,gBAAMoC,cAAc;YAAE,GAAGD;YAAiB,CAACV,cAAAA,GAAiBM;UAAM;AAClE,gBAAMM,WAAW1B,YAAY2B,WAAWF,WAAAA;AACxCnC,wBAAcL,MAAMyC,QAAAA;QACtB;MACF;IACF,GACF;MAACrC;MAAUC;MAAeL;KAAK;AAGjC,WACE,gBAAA2C,OAAA,cAACC,OAAMC,MAAI;MAACC,mBAAmBpC;OAC7B,gBAAAiC,OAAA,cAACI,aAAAA;MAAYpC;MAAcV;QAC3B,gBAAA0C,OAAA,cAACK,OAAAA;MAAIC,MAAK;MAAOC,WAAU;OACzB,gBAAAP,OAAA,cAACK,OAAAA;MAAIC,MAAK;OACR,gBAAAN,OAAA,cAACC,OAAMO,OAAK,MAAE5C,EAAE,gBAAA,CAAA,GAChB,gBAAAoC,OAAA,cAACC,OAAMQ,WAAS;MACdpD,MAAK;MACLqD,MAAK;MACLC,KAAI;MACJC,KAAI;MACJC,UAAU,CAAC,CAACtD;MACZgC,OAAOZ;MACPmC,UAAU9B,uBAAuB,YAAYJ,eAAAA;MAC7CjB;SAGJ,gBAAAqC,OAAA,cAACK,OAAAA;MAAIC,MAAK;OACR,gBAAAN,OAAA,cAACC,OAAMO,OAAK,MAAE5C,EAAE,iBAAA,CAAA,GAChB,gBAAAoC,OAAA,cAACC,OAAMQ,WAAS;MACdpD,MAAK;MACLqD,MAAK;MACLC,KAAI;MACJC,KAAI;MACJC,UAAU,CAAC,CAACtD;MACZgC,OAAOjB;MACPwC,UAAU9B,uBAAuB,aAAaT,gBAAAA;MAC9CZ;;;;;AAMZ;;;;AE3EA,OAAOoD,UAA+CC,eAAAA,cAAaC,aAAAA,YAAWC,QAAQC,YAAAA,iBAAgB;AAGtG,SAASC,iBAAiB;AAC1B,SAAgCC,YAAYC,SAAAA,QAAOC,KAAKC,kBAAAA,uBAAsB;AAC9E,SAASC,YAAY;AACrB,SAASC,iBAAiB;AAC1B,SAASC,MAAMC,mBAAmB;AAK3B,IAAMC,oBAAoB,CAAC,EAAEC,MAAMC,OAAOC,UAAUC,WAAWC,UAAAA,WAAUC,cAAa,MAAc;;;AACzG,UAAM,CAACC,UAAUC,aAAAA,IAAiBC,UAAwB,IAAA;AAC1D,UAAM,CAACC,aAAaC,cAAAA,IAAkBF,UAAS,KAAA;AAC/C,UAAMG,WAAWC,OAAyB,IAAA;AAC1C,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAC7B,UAAM,EAAEC,QAAQC,MAAK,IAAKd,UAAAA;AAC1B,UAAMe,UAAUd,UAAAA;AAGhBe,IAAAA,WAAU,MAAA;AACR,UAAID,YAAYE,QAAW;AACzBf,sBAAcL,MAAM,CAAA,CAAE;MACxB;IACF,GAAG;MAACkB;MAASb;MAAeL;KAAK;AAEjC,UAAMqB,YAAY,MAAA;AAChB,YAAMC,WAAW,IAAIC,IAAIL,SAASM,IAAI,CAACC,WAAWA,OAAOC,KAAK,KAAK,CAAA,CAAE;AAErE,YAAMC,aAAaC,KAAKC,OAAO,CAACC,QAAQ,CAACR,SAASS,IAAID,GAAAA,CAAAA;AACtD,UAAIH,WAAWK,SAAS,GAAG;AACzB,eAAOL,WAAWM,KAAKC,MAAMD,KAAKE,OAAM,IAAKR,WAAWK,MAAM,CAAA;MAChE;AAGA,YAAMI,YAAY,IAAIb,IAAIL,SAASmB,MAAM,EAAC,EAAGb,IAAI,CAACC,WAAWA,OAAOC,KAAK,KAAK,CAAA,CAAE;AAChF,YAAMY,gBAAgBV,KAAKC,OAAO,CAACC,QAAQ,CAACM,UAAUL,IAAID,GAAAA,CAAAA;AAC1D,aACEQ,cAAcL,KAAKC,MAAMD,KAAKE,OAAM,IAAKG,cAAcN,MAAM,CAAA,KAAMJ,KAAKK,KAAKC,MAAMD,KAAKE,OAAM,IAAKP,KAAKI,MAAM,CAAA;IAElH;AAEA,UAAMO,YAAYC,aAAY,MAAA;AAC5B,YAAMC,QAAQC,UAAUP,OAAM,EAAGQ,SAAQ;AACzC,YAAMC,YAAY;QAAEC,IAAIJ;QAAOK,OAAO;QAAIpB,OAAOL,UAAAA;MAAY;AAC7DhB,oBAAcL,MAAM;WAAKkB,WAAW,CAAA;QAAK0B;OAAU;AACnDrC,oBAAckC,KAAAA;AACd/B,qBAAe,IAAA;IACjB,GAAG;MAACQ;MAASlB;MAAMK;KAAc;AAEjC,UAAM0C,eAAeP,aACnB,CAACK,OAAAA;AACC,YAAMG,aAAa9B,SAASW,OAAO,CAACJ,WAAWA,OAAOoB,OAAOA,EAAAA,KAAO,CAAA;AACpExC,oBAAcL,MAAMgD,UAAAA;AACpBzC,oBAAc,IAAA;IAChB,GACA;MAACW;MAASlB;MAAMK;KAAc;AAGhC,UAAM4C,aAAaT,aACjB,CAACU,MAAcC,OAAAA;AACb,UAAI,CAACjC,SAAS;AACZ;MACF;AAEA,YAAM8B,aAAa;WAAI9B;;AACvB,YAAM,CAACkC,OAAAA,IAAWJ,WAAWK,OAAOH,MAAM,CAAA;AAC1CF,iBAAWK,OAAOF,IAAI,GAAGC,OAAAA;AACzB/C,oBAAcL,MAAMgD,UAAAA;IACtB,GACA;MAAC9B;MAASlB;MAAMK;KAAc;AAGhC,UAAMiD,cAAcd,aAAY,CAACK,OAAAA;AAC/BtC,oBAAc,CAACgD,YAAaA,YAAYV,KAAK,OAAOA,EAAAA;IACtD,GAAG,CAAA,CAAE;AAEL,UAAMW,oBAAoBhB,aACxB,CAACK,OAAe,CAACY,MAAAA;AACf,YAAMT,aAAa9B,SAASM,IAAI,CAACkC,MAAOA,EAAEb,OAAOA,KAAK;QAAE,GAAGa;QAAGZ,OAAOW,EAAEE,OAAOC;MAAM,IAAIF,CAAAA;AACxFrD,oBAAcL,MAAMgD,cAAc,CAAA,CAAE;IACtC,GACA;MAAC9B;MAASlB;MAAMK;KAAc;AAGhC,UAAMwD,gBAAgBrB,aAAY,CAACiB,MAAAA;AACjC,UAAIA,EAAEK,QAAQ,SAAS;AACrBvD,sBAAc,IAAA;MAChB;IACF,GAAG,CAAA,CAAE;AAEL,UAAMwD,oBAAoBvB,aACxB,CAACK,OAAe,CAACf,QAAAA;AACf,YAAMkB,aAAa9B,SAASM,IAAI,CAACkC,MAAOA,EAAEb,OAAOA,KAAK;QAAE,GAAGa;QAAGhC,OAAOI;MAAI,IAAI4B,CAAAA;AAC7ErD,oBAAcL,MAAMgD,cAAc,CAAA,CAAE;IACtC,GACA;MAAC9B;MAASlB;MAAMK;KAAc;AAGhCc,IAAAA,WAAU,MAAA;AACR,UAAIb,YAAYG,eAAeE,SAAS4C,SAAS;AAC/C5C,iBAAS4C,QAAQS,MAAK;AACtBtD,uBAAe,KAAA;MACjB;IACF,GAAG;MAACJ;MAAUG;KAAY;AAE1B,WACE,gBAAAwD,OAAA,cAACC,OAAMC,MAAI;MAACC,mBAAmBpD;OAC7B,gBAAAiD,OAAA,cAACI,aAAAA;MAAYpD;MAAchB;QAC3B,gBAAAgE,OAAA,cAACK,OAAAA;MAAIC,MAAK;OACPrD,WACC,gBAAA+C,OAAA,cAACO,KAAKL,MAAI;MACRM,OAAOvD;MACPwD,QAAQ,CAACC,SAAS;MAClBC,QAAQ1E,WAAWkB,SAAY6B;MAC/B/C,UAAU,CAAC,CAACA;OAEX,CAAC,EAAEuE,MAAK,MACP,gBAAAR,OAAA,cAACK,OAAAA;MAAIC,MAAK;MAAOM,WAAU;OACxBJ,OAAOjD,IAAI,CAACmD,SACX,gBAAAV,OAAA,cAACK,OAAAA;MAAIR,KAAKa,KAAK9B;OACb,gBAAAoB,OAAA,cAACO,KAAKM,MAAI;MACRP,MAAK;MACLI;MACAI,YAAY;QAACC;QAAa;;MAC1BC,iBAAe3E,aAAaqE,KAAK9B;OAEjC,gBAAAoB,OAAA,cAACK,OAAAA;MAAIO,WAAU;OACb,gBAAAZ,OAAA,cAACO,KAAKU,gBAAc;MAACC,UAAU,CAAC,CAACjF;QACjC,gBAAA+D,OAAA,cAACO,KAAKY,WAAS;MAACC,SAAS,MAAM/B,YAAYqB,KAAK9B,EAAE;MAAGkC,YAAW;OAE9D,gBAAAd,OAAA,cAACqB,KAAAA;MAAIC,SAASZ,KAAKjD;OAA4BiD,KAAK7B,SAAS,QAAA,CAAA,GAE/D,gBAAAmB,OAAA,cAACuB,YAAAA;MACCC,UAAAA;MACAC,SAAQ;MACRzF,OAAOY,EAAEP,aAAaqE,KAAK9B,KAAK,mBAAmB,gBAAgB;QAAE8C,IAAI;MAAK,CAAA;MAC9EC,MAAMtF,aAAaqE,KAAK9B,KAAK,4BAA4B;MACzDwC,SAAS,MAAM/B,YAAYqB,KAAK9B,EAAE;SAGrCvC,aAAaqE,KAAK9B,MACjB,gBAAAoB,OAAA,cAACK,OAAAA;MAAIO,WAAU;OAEb,gBAAAZ,OAAA,cAACC,OAAM2B,OAAK;MAACd,YAAW;OAAWlE,EAAE,qBAAA,CAAA,GACrC,gBAAAoD,OAAA,cAACK,OAAAA;MAAIO,WAAU;OACb,gBAAAZ,OAAA,cAACC,OAAM4B,WAAS;MACdX,UAAU,CAAC,CAACjF;MACZ6F,aAAalF,EAAE,iCAAA;MACfmF,KAAK1F,aAAaqE,KAAK9B,KAAKlC,WAAWS;MACvCwC,OAAOe,KAAK7B;MACZmD,UAAUzC,kBAAkBmB,KAAK9B,EAAE;MACnCqD,WAAWrC;MACXkB,YAAW;MACXoB,kBAAAA;QAEF,gBAAAlC,OAAA,cAACmC,WAAAA;MAAUjB,UAAU,CAAC,CAACjF;MAAU0D,OAAOe,KAAKjD;MAAOuE,UAAUlC,kBAAkBY,KAAK9B,EAAE;QACvF,gBAAAoB,OAAA,cAACuB,YAAAA;MACCL,UAAU,CAAC,CAACjF;MACZ0F,MAAK;MACLH,UAAAA;MACAxF,OAAOY,EAAE,sBAAA;MACTwE,SAAS,MAAMtC,aAAa4B,KAAK9B,EAAE;aAQjD,gBAAAoB,OAAA,cAACuB,YAAAA;MACCE,SAAQ;MACRE,MAAK;MACL3F,OAAOY,EAAE,mBAAA;MACTwE,SAAS9C;MACT4C,UAAU,CAAC,CAACjF;MACZ6E,YAAW;;;;;AAS7B;;;;AC1LA,OAAOsB,YAAW;AAElB,SAASC,SAAAA,cAAa;AACtB,SAASC,MAAAA,WAAU;AACnB,SAASC,kBAAAA,uBAAsB;AAI/B,IAAMC,WAAW;EAAC;EAAe;EAAe;EAAe;;AAExD,IAAMC,aAAa,CAAC,EACzBC,SACAC,MACAC,OACAC,UACAC,WACAC,UAAAA,WACAC,eACAC,OAAM,MAC6B;;;AACnC,UAAM,EAAEC,QAAQC,MAAK,IAAKL,UAAAA;AAG1B,UAAMM,SAAiCL,UAAAA,KAAsC,CAAC;AAE9E,WACE,gBAAAM,OAAA,cAACC,OAAMC,MAAI;MAACC,mBAAmBN;OAC7B,gBAAAG,OAAA,cAACI,aAAAA;MAAYN;MAAcP;QAC3B,gBAAAS,OAAA,cAACK,OAAAA;MAAIC,WAAWC,IAAG,cAAcpB,SAASE,QAAQmB,SAAS,CAAA,CAAE;OAC1DnB,QAAQoB,IAAI,CAACC,SACZ,gBAAAV,OAAA,cAACC,OAAMU,WAAS;MACdC,KAAKF;MACLpB,MAAK;MACLuB,UAAU,CAAC,CAACrB;MACZsB,OAAOf,OAAOW,IAAAA;MACdK,UAAU,CAACC,UAAUrB,cAAcL,MAAM;QAAE,GAAGS;QAAQ,CAACW,IAAAA,GAAOO,gBAAeD,MAAME,OAAOJ,OAAO,CAAA;MAAG,CAAA;MACpGlB;;;;;AAMZ;;;;AC1CA,OAAOuB,UAASC,eAAAA,cAAaC,aAAAA,YAAWC,UAAAA,eAAc;AAEtD,SAASC,SAAAA,QAAOC,QAAQC,kBAAAA,uBAAsB;AAMvC,IAAMC,YAAY,CAAC,EACxBC,MACAC,OACAC,WACAC,UACAC,aACAC,WACAC,UAAAA,WACAC,eACAC,OAAM,MACK;;;AACX,UAAM,EAAEC,QAAQC,MAAK,IAAKL,UAAAA;AAE1B,WAAOF,YAAY,CAACG,UAAAA,IAAa,OAAOH,aAAa,YAAYD,YAC/D,gBAAAS,OAAA,cAACC,KAAAA,MAAGN,UAAAA,KAAc,EAAA,IAElB,gBAAAK,OAAA,cAACE,OAAMC,MAAI;MAACC,mBAAmBN;OAC5B,CAACP,aAAa,gBAAAS,OAAA,cAACK,aAAAA;MAAYN;MAAcT;QACzCE,aAAa,WACZ,gBAAAQ,OAAA,cAACC,KAAAA,MAAGN,UAAAA,KAAc,EAAA,IAElB,gBAAAK,OAAA,cAACE,OAAMd,WAAS;MACdkB,UAAU,CAAC,CAACd;MACZC;MACAc,OAAOZ,UAAAA,KAAc;MACrBa,UAAU,CAACC,UAAUb,cAAcP,MAAMoB,MAAMC,OAAOH,KAAK;MAC3DV;QAGHN,aAAa,gBAAAS,OAAA,cAACE,OAAMS,YAAU,MAAEZ,KAAAA,CAAAA;;;;AAGvC;AAEO,IAAMa,cAAc,CAAC,EAC1BvB,MACAC,OACAC,WACAC,UACAC,aACAC,WACAC,UAAAA,WACAC,eACAC,OAAM,MACK;;;AACX,UAAM,EAAEC,QAAQC,MAAK,IAAKL,UAAAA;AAE1B,WAAOF,YAAY,CAACG,UAAAA,IAAa,OAAOH,aAAa,YAAYD,YAC/D,gBAAAS,OAAA,cAACC,KAAAA,MAAGN,UAAAA,KAAc,EAAA,IAElB,gBAAAK,OAAA,cAACE,OAAMC,MAAI;MAACC,mBAAmBN;OAC5B,CAACP,aAAa,gBAAAS,OAAA,cAACK,aAAAA;MAAYN;MAAcT;QACzCE,aAAa,WACZ,gBAAAQ,OAAA,cAACC,KAAAA,MAAGN,UAAAA,KAAc,EAAA,IAElB,gBAAAK,OAAA,cAACE,OAAMd,WAAS;MACdC,MAAK;MACLiB,UAAU,CAAC,CAACd;MACZC;MACAc,OAAOZ,UAAAA;MACPa,UAAU,CAACC,UAAUb,cAAcP,MAAMoB,MAAMC,OAAOH,KAAK;MAC3DV;QAGHN,aAAa,gBAAAS,OAAA,cAACE,OAAMW,0BAAwB,MAAEd,KAAAA,CAAAA;;;;AAGrD;AAEO,IAAMe,eAAe,CAAC,EAAEzB,MAAMC,OAAOC,WAAWG,WAAWC,UAAAA,WAAUC,eAAeJ,SAAQ,MAAc;;;AAC/G,UAAM,EAAEM,QAAQC,MAAK,IAAKL,UAAAA;AAC1B,UAAMqB,UAAUC,QAAQrB,UAAAA,CAAAA;AACxB,UAAM,EAAEsB,EAAC,IAAKC,gBAAeC,cAAAA;AAE7B,WACE,gBAAAnB,OAAA,cAACE,OAAMC,MAAI;MAACC,mBAAmBN;OAC5B,CAACP,aAAa,gBAAAS,OAAA,cAACK,aAAAA;MAAYN;MAAcT;QACzCE,aAAa,WACZ,gBAAAQ,OAAA,cAACC,KAAAA,MAAGgB,EAAEF,UAAU,6BAA6B,2BAAA,CAAA,IAE7C,gBAAAf,OAAA,cAACE,OAAMkB,QAAM;MAACd,UAAU,CAAC,CAACd;MAAUuB;MAAkBM,iBAAiB,CAACd,WAAUX,cAAcP,MAAMkB,MAAAA;QAEvGhB,aAAa,gBAAAS,OAAA,cAACE,OAAMW,0BAAwB,MAAEd,KAAAA,CAAAA;;;;AAGrD;AAMO,IAAMuB,cAAc,CAAC,EAC1BjC,MACAC,OACAC,WACAC,UACAC,aACA8B,SACA7B,WACAC,UAAAA,WACAC,cAAa,MACM;;;AACnB,UAAM,EAAEE,QAAQC,MAAK,IAAKL,UAAAA;AAE1B,UAAMa,SAAQZ,UAAAA;AACd,UAAM6B,oBAAoBC,aAAY,CAAClB,WAA2BX,cAAcP,MAAMkB,MAAAA,GAAQ;MAAClB;MAAMO;KAAc;AAEnH,WAAOJ,YAAY,CAACe,SAAQ,OAC1B,gBAAAP,OAAA,cAACE,OAAMC,MAAI;MAACC,mBAAmBN;OAC5B,CAACP,aAAa,gBAAAS,OAAA,cAACK,aAAAA;MAAYN;MAAcT;QACzCE,aAAa,WACZ,gBAAAQ,OAAA,cAACC,KAAAA,MAAGsB,SAASG,KAAK,CAAC,EAAEnB,OAAOoB,YAAW,MAAOA,gBAAgBpB,MAAAA,GAAQjB,SAASsC,OAAOrB,MAAAA,CAAAA,IAEtF,gBAAAP,OAAA,cAAC6B,OAAO1B,MAAI;MAACI,OAAOA;MAAOX,eAAe4B;OAExC,gBAAAxB,OAAA,cAAC6B,OAAOC,eAAa;MAACC,YAAW;MAAUzB,UAAU,CAAC,CAACd;MAAUC;QACjE,gBAAAO,OAAA,cAAC6B,OAAOG,QAAM,MACZ,gBAAAhC,OAAA,cAAC6B,OAAOI,SAAO,MACb,gBAAAjC,OAAA,cAAC6B,OAAOK,UAAQ,MACbX,SAASY,IAAI,CAAC,EAAE5B,OAAAA,QAAOjB,OAAAA,OAAK;;MAE3B,gBAAAU,OAAA,cAAC6B,OAAOO,QAAM;QAACC,KAAKT,OAAOrB,MAAAA;QAAQA,OAAOqB,OAAOrB,MAAAA;SAC9CjB,UAASsC,OAAOrB,MAAAA,CAAAA;KAAAA,CAAAA,GAIvB,gBAAAP,OAAA,cAAC6B,OAAOS,OAAK,IAAA,CAAA,CAAA,CAAA,GAKpB/C,aAAa,gBAAAS,OAAA,cAACE,OAAMW,0BAAwB,MAAEd,KAAAA,CAAAA;;;;AAGrD;AAEO,IAAMwC,gBAAgB,CAAC,EAC5BlD,MACAC,OACAC,WACAC,UACAC,aACAC,WACAC,UAAAA,WACAC,eACAC,OAAM,MACK;;;AACX,UAAM,EAAEC,QAAQC,MAAK,IAAKL,UAAAA;AAC1B,UAAM8C,cAAcC,QAA4B,IAAA;AAKhD,UAAMC,eAAejB,aAAY,MAAA;AAC/B,YAAMkB,WAAWH,YAAYI;AAC7B,UAAID,UAAU;AACZA,iBAASE,MAAMC,YAAY;AAC3BH,iBAASE,MAAMC,YAAY,GAAGH,SAASI,eAAe,CAAA;MACxD;IACF,GAAG,CAAA,CAAE;AAGLC,IAAAA,WAAU,MAAA;AACRN,mBAAAA;IACF,GAAG;MAACA;KAAa;AAGjBM,IAAAA,WAAU,MAAA;AACRN,mBAAAA;IACF,GAAG;MAAC/C,UAAAA;MAAY+C;KAAa;AAE7B,WACE,gBAAA1C,OAAA,cAACE,OAAMC,MAAI;MAACC,mBAAmBN;OAC5B,CAACP,aAAa,gBAAAS,OAAA,cAACK,aAAAA;MAAYN;MAAcT;QACzCE,aAAa,WACZ,gBAAAQ,OAAA,cAACC,KAAAA,MAAGN,UAAAA,KAAc,EAAA,IAElB,gBAAAK,OAAA,cAACE,OAAM+C,UAAQ;MACbC,KAAKV;MACLlC,UAAU,CAAC,CAACd;MACZC;MACAc,OAAOZ,UAAAA,KAAc;MACrBoC,YAAY;MACZvB,UAAU,CAACC,UAAUb,cAAcP,MAAMoB,MAAMC,OAAOH,KAAK;MAC3DV;MACAgD,OAAO;QAAEM,QAAQ;MAAO;MACxBC,YAAY;QAGf7D,aAAa,gBAAAS,OAAA,cAACE,OAAMS,YAAU,MAAEZ,KAAAA,CAAAA;;;;AAGvC;;;;ACxMA,SAASsD,uBAAuB;AAEhC,OAAOC,WAA4BC,eAAAA,eAAaC,aAAAA,YAAWC,UAAAA,eAAc;AAIzE,SAASC,oBAAoBC,eAAAA,oBAAmB;;;;ACNhD,OAAOC,YAAW;AAElB,SAASC,cAAAA,aAAYC,kBAAAA,uBAAsB;AAC3C,SAASC,mBAAmB;AAC5B,SAASC,MAAAA,WAAU;;;;ACJnB,OAAOC,UAILC,eACAC,eAAAA,cACAC,YACAC,aAAAA,YACAC,WAAAA,gBACK;AAEP,SAASC,aAAa;AACtB,SAA0BC,YAAAA,iBAAgB;AAC1C,SAA0BC,kBAAAA,uBAAsB;;;ACZhD,YAAYC,eAAe;AAC3B,SAASC,eAAAA,cAAaC,aAAAA,YAAWC,WAAAA,UAASC,YAAAA,iBAAgB;AAE1D,SAA0BC,UAAUC,gBAAgB;AACpD,SAAyCC,gBAAgBC,gCAAgC;AACzF,SAASC,iBAAiB;AAC1B,SAASC,WAAW;AACpB,SAA+BC,sBAAsB;;AA2E9C,IAAMC,UAAU,CAAuB,EAC5CC,QACAC,eACAC,iBACAC,YACAC,SACAC,OAAM,MACS;AACfT,YAAoBU,wBAAcN,OAAOO,GAAG,GAAA,QAAA;;;;;;;;;AAE5C,QAAM,CAACC,QAAQC,SAAAA,IAAalB,UAAqBU,aAAAA;AAEjDZ,EAAAA,WAAU,MAAA;AACRoB,cAAUR,aAAAA;EACZ,GAAG;IAACA;GAAc;AAElB,QAAM,CAACS,SAASC,UAAAA,IAAcpB,UAAoCqB,aAAaX,eAAe,KAAA,CAAA;AAC9F,QAAM,CAACY,SAASC,UAAAA,IAAcvB,UAAoCqB,aAAaX,eAAe,KAAA,CAAA;AAC9F,QAAM,CAACc,QAAQC,SAAAA,IAAazB,UAAmC,CAAC,CAAA;AAChE,QAAM,CAAC0B,QAAQC,SAAAA,IAAa3B,UAAS,KAAA;AAMrC,QAAM4B,WAAW/B,aACf,CAACoB,YAAAA;AACC,QAAIO,UAA4BjB,eAAeE,QAAQQ,OAAAA,KAAW,CAAA;AAClE,QAAIO,QAAOK,WAAW,KAAKjB,YAAY;AACrC,YAAMkB,kBAAkBb;AACxBO,MAAAA,UAASZ,WAAWkB,eAAAA,KAAoB,CAAA;IAC1C;AAEAL,cAAUM,QAAQP,OAAAA,CAAAA;AAClB,UAAMQ,QAAQR,QAAOK,WAAW;AAChC,WAAOG;EACT,GACA;IAACvB;IAAQG;GAAW;AAItB,QAAM,CAACqB,aAAaC,cAAAA,IAAkBlC,UAAS,KAAA;AAC/CF,EAAAA,WAAU,MAAMoC,eAAe,IAAA,GAAO;IAACzB;GAAO;AAC9CX,EAAAA,WAAU,MAAA;AACR,QAAImC,aAAa;AACfL,eAASX,MAAAA;AACTiB,qBAAe,KAAA;IACjB;EACF,GAAG;IAACjB;IAAQgB;GAAY;AAExB,QAAME,cAAcpC,SAAQ,MAAA;AAC1B,WAAOqC,OAAOC,KAAKb,MAAAA,EAAQK,WAAW;EACxC,GAAG;IAACL;GAAO;AAMX,QAAMc,UAAUvC,SACd,MACE,CAAC2B;EAED,CAACU,OAAOG,QAAQpB,OAAAA,EAASqB,KACvB,CAAC,CAACC,MAAMC,SAAAA,MACNA,aACAN,OAAOC,KAAKb,MAAAA,EAAQgB,KAClB,CAACG,cAAcA,cAAcF,QAAQE,UAAUC,WAAW,GAAGH,IAAAA,GAAO,KAAKE,UAAUC,WAAW,GAAGH,IAAAA,GAAO,CAAA,CAAA,GAGhH;IAACtB;IAASK;IAAQE;GAAO;AAG3B,QAAMmB,aAAahD,aAAY,YAAA;AAC7B,QAAI+B,SAASX,MAAAA,GAAS;AACpBU,gBAAU,IAAA;AACV,UAAI;AACF,cAAMb,SAASG,QAAQ;UAAEK;QAAQ,CAAA;MACnC,UAAA;AACEK,kBAAU,KAAA;MACZ;IACF;EACF,GAAG;IAACV;IAAQW;IAAUd;IAAQQ;GAAQ;AAMtC,QAAMwB,YAAYjD,aAChB,CAAC4C,SAAAA;AACC,UAAMM,WAAWC,MAAMC,QAAQR,IAAAA,IAAQtC,eAAesC,IAAAA,IAAQA;AAC9D,UAAMS,gBAAgBd,OAAOG,QAAQf,MAAAA,EAAQ2B,KAC3C,CAAC,CAACR,SAAAA,MACAA,cAAcI,YAAYJ,UAAUC,WAAW,GAAGG,QAAAA,GAAW,KAAKJ,UAAUC,WAAW,GAAGG,QAAAA,GAAW,CAAA;AAIzG,UAAML,YAAYvB,QAAQ4B,QAAAA;AAC1B,QAAI,CAACL,WAAW;AACd,aAAO;QACLU,QAAQC;QACRC,OAAOD;MACT;IACF;AAEA,WAAO;MACLD,QAAQF,gBAAgB,UAAUG;MAClCC,OAAOJ,gBAAgBA,cAAc,CAAA,IAAKG;IAC5C;EACF,GACA;IAAC7B;IAAQL;GAAQ;AAGnB,QAAMoC,eAAe1D,aACnB,CAAI4C,SAAAA;AACF,WAAOxC,SAASgB,QAAQd,eAAesC,IAAAA,CAAAA;EACzC,GACA;IAACxB;GAAO;AAIV,QAAMuC,gBAAgB3D,aACpB,CAAC4C,MAA2BgB,MAAkBC,WAAAA;AAC5C,UAAMX,WAAW5C,eAAesC,IAAAA;AAChC,QAAIkB,cAAcD;AAClB,QAAI;AACF,UAAID,SAAS,UAAU;AACrBE,sBAAcC,WAAWF,MAAAA,KAAoB;MAC/C;IACF,SAASG,KAAK;AACZvD,UAAIwD,MAAMD,KAAAA,QAAAA;;;;;;AACVF,oBAAcN;IAChB;AAEA,UAAMU,YAAY;MAAE,GAAG7D,SAASe,QAAQ8B,UAAUY,WAAAA;IAAa;AAC/DzC,cAAU6C,SAAAA;AACV,UAAMC,aAAa;MAAE,GAAG1C;MAAS,CAACyB,QAAAA,GAAW;IAAK;AAClDxB,eAAWyC,UAAAA;AACXrD,sBAAkBoD,SAAAA;AAElB,UAAME,UAAUrC,SAASmC,SAAAA;AACzB,QAAIE,WAAWpD,SAAS;AACtBA,cAAQkD,WAAW;QAAEzC,SAAS0C;MAAW,CAAA;IAC3C;EACF,GACA;IAAC/C;IAAQN;IAAiBiB;IAAUf;IAASS;GAAQ;AAGvD,QAAM4C,YAAYrE,aAChB,CAAC4C,SAAAA;AACC,UAAMM,WAAW5C,eAAesC,IAAAA;AAChCrB,eAAW,CAACD,cAAa;MAAE,GAAGA;MAAS,CAAC4B,QAAAA,GAAW;IAAK,EAAA;AACxDnB,aAASX,MAAAA;EACX,GACA;IAACW;IAAUX;GAAO;AAGpB,SAAOlB,SACL,OAAO;;IAELkB;IACAO;IACAL;IACAG;IACAgB;IACAH;;IAGAU;;IAGAC;IACA7C,UAAUsD;IACVC;IACAU;EACF,IACA;IACEjD;IACAO;IACAL;IACAG;IACAgB;IACAH;IACAU;IACAC;IACAS;IACAC;IACAU;GACD;AAEL;AAEA,IAAM7C,eAAe,CAA0B8C,KAAQT,WAAAA;AACrDrD,YAAU8D,KAAAA,QAAAA;;;;;;;;;AACV,SAAO/B,OAAOC,KAAK8B,GAAAA,EAAKC,OAAO,CAACC,KAAKC,SAAS;IAAE,GAAGD;IAAK,CAACC,GAAAA,GAAMZ;EAAM,IAAI,CAAC,CAAA;AAC5E;AAEA,IAAM3B,UAAU,CAACP,WAAAA;AACf,SAAOA,OAAO4C,OACZ,CAACG,QAAQ,EAAE9B,MAAM+B,QAAO,MAAE;AAExB,UAAMzB,WAAW3C,yBAAyBqC,IAAAA;AAC1C,QAAI,EAAEM,YAAYwB,SAAS;AACzBA,aAAOxB,QAAAA,IAAYyB;IACrB;AACA,WAAOD;EACT,GACA,CAAC,CAAA;AAEL;;;ACnSA,SAASE,eAAAA,oBAAmB;AAE5B,SAASC,WAAW;AACpB,SAA8BC,oBAAoB;AAClD,SAASC,cAA0B;AACnC,SAASC,qBAAqB;AAMvB,IAAMC,2BAA2B,CAAC,EAAEC,MAAK,MAA0B;AACxE,SAAOC,aACL,OAAOC,aAAAA;AACL,QAAI,CAACF,OAAO;AACV,aAAO,CAAA;IACT;AACA,UAAMG,QAAQH,MAAMI,GAAGD,MAAME,OAAOC,SAASJ,SAASI,QAAQ,CAAA;AAC9D,UAAM,EAAEC,QAAO,IAAK,MAAMJ,MAAMK,IAAG;AAEnC,WAAOD,QACJE,IAAI,CAACC,WAAAA;AACJ,YAAMC,MAAMC,aAAaF,MAAAA;AACzB,UAAI,CAACC,KAAK;AACR,eAAOE;MACT;AAEA,YAAMC,OAAO;QAAEH;QAAKI,OAAOC,IAAIC,SAASP,MAAAA,KAAWA,QAAQQ,MAAM;MAAG;AACpE,aAAOJ;IACT,CAAA,EACCK,OAAOC,aAAAA;EACZ,GACA;IAACpB;GAAM;AAEX;;;AClCA,SAASqB,eAAAA,cAAaC,aAAAA,YAAWC,YAAAA,iBAAgB;AAIjD,SAASC,OAAAA,YAAW;;AAoBb,IAAMC,qBAAqB,CAAC,EAAEC,aAAaC,kBAAiB,MAA2B;AAC5F,QAAM,CAACC,SAASC,UAAAA,IAAcN,UAAqB,CAAA,CAAE;AACrD,QAAM,CAACO,SAASC,UAAAA,IAAcR,UAAS,KAAA;AACvC,QAAM,CAACS,OAAOC,QAAAA,IAAYV,UAAS,CAAC,CAAA;AACpC,QAAMW,SAASb,aAAY,MAAMY,SAAS,CAAC,CAAA,GAAI,CAAA,CAAE;AAEjDX,EAAAA,WAAU,MAAA;AACR,QAAI,CAACI,eAAe,CAACC,mBAAmB;AACtC;IACF;AAEA,UAAMQ,eAAe,YAAA;AACnBJ,iBAAW,IAAA;AACX,UAAI;AACF,cAAMK,iBAAiB,MAAMT,kBAAkBD,WAAAA;AAC/CG,mBACEO,eAAeC,IAAI,CAACC,WAAAA;AAClB,gBAAMC,MAAMD,OAAOC,IAAIC,SAAQ;AAC/B,iBAAO;YAAEC,IAAIF;YAAKG,OAAOJ,OAAOI,SAASH;YAAKI,KAAK;UAAiB;QACtE,CAAA,CAAA;MAEJ,SAASC,OAAO;AACdpB,QAAAA,KAAIoB,MAAM,gCAAgCA,OAAAA;;;;;;AAC1Cf,mBAAW,CAAA,CAAE;MACf,UAAA;AACEE,mBAAW,KAAA;MACb;IACF;AAEA,SAAKI,aAAAA;EACP,GAAG;IAACT;IAAaC;IAAmBK;GAAM;AAE1C,SAAO;IAAEJ;IAASM;IAAQJ;EAAQ;AACpC;;;AHtCA,IAAMe,cAAcC,8BAAiDC,MAAAA;AAE9D,IAAMC,iBAAiB,MAAA;AAC5B,SAAOC,WAAWJ,WAAAA,KAAgBK,MAAM,IAAIC,MAAM,qBAAA,CAAA;AACpD;AAEO,IAAMC,gBAAgB,CAACC,OAA4B,CAAA,MAAE;AAC1D,QAAM,EAAEC,QAAQC,WAAU,IAAKP,eAAAA;AAC/B,QAAMQ,WAAWC,gBAAeJ,IAAAA;AAChC,SAAOK,UAASH,YAAYC,QAAAA;AAC9B;AASO,IAAMG,gBAAgB,CAACN,OAA4B,CAAA,MAAE;AAC1D,QAAM,EAAEO,WAAWF,UAAUG,cAAcC,eAAeC,UAAS,IAAKf,eAAAA;AAExE,QAAMgB,aAAaC,SAAQ,MAAMZ,MAAM;IAACa,MAAMC,QAAQd,IAAAA,IAAQA,KAAKe,KAAK,GAAA,IAAOf;GAAK;AACpF,SAAOY,SACL,OAAO;IACLL,WAAW,MAAMA,UAAUI,UAAAA;IAC3BN,UAAU,MAAMG,aAAaG,UAAAA;IAC7BF,eAAe,CAACO,MAAkBC,WAAeR,cAAcE,YAAYK,MAAMC,MAAAA;IACjFC,QAAQ,MAAMR,UAAUC,UAAAA;EAC1B,IACA;IAACJ;IAAWC;IAAcC;IAAeC;IAAWC;GAAW;AAEnE;AAEO,IAAMQ,eAAe,CAAC,EAC3BC,UACAC,SACAC,UACA,GAAGC,YAAAA,MAMJ;;;AACC,UAAMC,OAAOC,QAAQF,WAAAA;AAErB,UAAMG,gBAAgBC,aACpB,CAACC,UAAAA;AACC,YAAMC,aAAaD,MAAME,QAAQ;AACjC,YAAMC,eAAeH,MAAMI,WAAWJ,MAAMK,UAAUL,MAAMM,WAAWN,MAAMO;AAC7E,YAAMC,kBAAmBR,MAAMS,OAAuBC,QAAQC,YAAW,MAAO;AAChF,YAAMC,cACHZ,MAAMS,OAAuBI,aAAa,gBAAA,KAC1Cb,MAAMS,OAAuBK,QAAQ,kBAAA,MAAwB;AAGhE,YAAMC,2BAA2B,CAACP,mBAAmBP,cAAc,CAACE;AAGpE,YAAMa,uBAAuBR,mBAAmBP,cAAcD,MAAMM;AAEpE,WAAKS,4BAA4BC,yBAAyB,CAACJ,aAAa;AACtE,YAAI,CAAClB,YAAYE,KAAKqB,SAAS;AAC7BrB,eAAKsB,WAAU;QACjB;AACA,YAAIxB,YAAYE,KAAKuB,aAAa;AAC/BnB,gBAAMS,OAAuBW,KAAI;QACpC;MACF;IACF,GACA;MAACxB,KAAKqB;MAASrB,KAAKuB;MAAavB,KAAKsB;MAAYxB;KAAS;AAG7D2B,IAAAA,WAAU,MAAA;AACR,UAAI,CAAC5B,SAAS6B,SAAS;AACrB;MACF;AAEA,YAAMC,cAAc9B,QAAQ6B;AAE5BC,kBAAYC,iBAAiB,WAAW1B,aAAAA;AACxC,aAAO,MAAMyB,YAAYE,oBAAoB,WAAW3B,aAAAA;IAC1D,GAAG;MAACL;MAASG,KAAKqB;MAASrB,KAAKuB;MAAavB,KAAKsB;MAAYxB;KAAS;AAEvE,WAAO,gBAAAgC,OAAA,cAAC9D,YAAY+D,UAAQ;MAACtC,OAAOO;OAAOJ,QAAAA;;;;AAC7C;;;ADvFO,IAAMoC,cAAc,CAAC,EAAEC,UAAUC,UAAUC,eAAe,KAAI,MAAoB;;;AACvF,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAC7B,UAAM,EAAEC,SAASC,WAAU,IAAKC,eAAAA;AAEhC,WACE,gBAAAC,OAAA,cAACC,OAAAA;MACCC,MAAK;MACLC,WAAWC,IACTX,iBAAiB,kBACb,+CACAA,eACEY,cACA,wBACN,wCAAA;OAGDb,YAAY,CAACD,YACZ,gBAAAS,OAAA,cAACM,aAAAA;MAAWC,eAAY;MAAgBC,MAAK;MAAiBC,OAAOf,EAAE,eAAA;MAAkBgB,SAASlB;QAEnGM,cACC,gBAAAE,OAAA,cAACM,aAAAA;MACCK,MAAK;MACLJ,eAAY;MACZK,UAAU,CAACf;MACXW,MAAK;MACLC,OAAOf,EAAE,aAAA;MACTgB,SAASZ;;;;;AAKnB;;;;AKjDA,YAAYe,eAAc;AAC1B,YAAYC,YAAY;AACxB,YAAYC,gBAAe;AAC3B,YAAYC,kBAAkB;AAC9B,OAAOC,WAASC,WAAmDC,cAAAA,aAAYC,WAAAA,gBAAe;AAE9F,SAASC,kBAAAA,iBAAgBC,YAAAA,WAAUC,wBAAAA,uBAAsBC,wBAAAA,6BAA4B;AAErF,SAASC,MAAAA,WAAU;AACnB,SAAoDC,uBAAAA,4BAA2B;AAC/E,SAASC,gBAAgB;;;ACVzB,SAASC,YAAYC,eAAAA,cAAaC,gBAAgB;AAe3C,IAAMC,aAAa,CAAC,EAAEC,MAAMC,QAAQC,OAAAA,OAAK,MAAc;AAC5D,MAAIA,WAAUC,UAAaD,WAAU,QAAQA,WAAU,IAAI;AACzD,WAAOC;EACT;AAEA,QAAMC,cAAc,CAACJ,UAAAA;AACnB,YAAQA,OAAAA;MACN,KAAKK,SAASC,SAAS;AACrB,YAAI,OAAOJ,WAAU,UAAU;AAC7B,gBAAMK,iBAAiBL,OAAMM,YAAW;AACxC,cAAID,mBAAmB,OAAOA,mBAAmB,SAAS;AACxD,mBAAO;UACT,WAAWA,mBAAmB,OAAOA,mBAAmB,QAAQ;AAC9D,mBAAO;UACT;QACF;AACA,eAAOD,QAAQJ,MAAAA;MACjB;MAEA,KAAKG,SAASI,QAAQ;AACpB,cAAMC,UAAU,OAAOR,WAAU,WAAWA,OAAMS,QAAQ,cAAc,EAAA,IAAMT;AAC9E,cAAMU,MAAMH,OAAOC,OAAAA;AACnB,eAAOD,OAAOI,MAAMD,GAAAA,IAAO,OAAOA;MACpC;MAEA,KAAKP,SAASS;MACd,KAAKT,SAASU;AACZ,eAAOD,OAAOZ,MAAAA;MAEhB,SAAS;AACP,eAAOA;MACT;IACF;EACF;AAEA,MAAI,CAACD,QAAQ;AACX,WAAOG,YAAYJ,IAAAA;EACrB;AAEA,UAAQC,QAAAA;IACN,KAAKe,WAAWV;AACd,aAAOF,YAAYC,SAASC,OAAO;IAErC,KAAKU,WAAWP;IAChB,KAAKO,WAAWC;IAChB,KAAKD,WAAWE;AACd,aAAOd,YAAYC,SAASI,MAAM;IAEpC,KAAKO,WAAWF;IAChB,KAAKE,WAAWG,UAAU;AACxB,aAAOf,YAAYC,SAASS,MAAM;IACpC;IAEA,KAAKE,WAAWD;AACd,YAAM,IAAIK,MAAM,sBAAsBJ,WAAWD,GAAG,EAAE;IAExD,KAAKC,WAAWK;IAChB,KAAKL,WAAWM;IAChB,KAAKN,WAAWO;IAChB,KAAKP,WAAWQ,WAAW;AACzB,YAAMC,OAAO,IAAIH,KAAKpB,MAAAA;AACtB,aAAOW,MAAMY,KAAKC,QAAO,CAAA,IAAM,OAAOD;IACxC;IAEA,KAAKT,WAAWW,UAAU;AAExB,UAAI,OAAOzB,WAAU,UAAU;AAE7B,cAAMQ,UAAUR,OAAMS,QAAQ,eAAe,EAAA;AAC7C,cAAMiB,QAAQlB,QAAQmB,MAAM,GAAA;AAC5B,YAAID,MAAME,WAAW,GAAG;AACtB,gBAAMC,MAAMC,WAAWJ,MAAM,CAAA,CAAE;AAC/B,gBAAMK,OAAOD,WAAWJ,MAAM,CAAA,CAAE;AAChC,cAAI,CAACf,MAAMkB,GAAAA,KAAQ,CAAClB,MAAMoB,IAAAA,GAAO;AAC/B,mBAAOC,aAAYC,WAAW;cAAEC,UAAUL;cAAKM,WAAWJ;YAAK,CAAA;UACjE;QACF;MACF;AAEA,aAAO;QAAC;QAAG;;IACb;IAEA,SAAS;AACP,aAAO/B;IACT;EACF;AACF;AAQO,IAAMoC,0BAA0B,CAAC,EAAEtC,MAAMC,OAAM,MAAgC;AACpF,UAAQA,UAAUD,MAAAA;IAChB,KAAKgB,WAAWG;AACd,aAAOhB;IACT,KAAKa,WAAWO;IAChB,KAAKP,WAAWQ;IAChB,KAAKR,WAAWK;IAChB,KAAKL,WAAWM;IAChB,KAAKN,WAAWuB;AACd,aAAO;QAAC;QAAa;;IACvB,KAAKvB,WAAWE;AACd,aAAO;QAAC;;IACV,KAAKF,WAAWwB;IAChB,KAAKxB,WAAWyB;AACd,aAAO;QAAC;;IACV,KAAKpC,SAASI;IACd,KAAKJ,SAASC;AACZ,aAAO;QAAC;QAAc;;IACxB,KAAKD,SAASS;AACZ,aAAOX;IACT,KAAKE,SAASU;AACZ,aAAOZ;IACT;AACE,aAAOA;EACX;AACF;AAGO,IAAMuC,qBAAqB,CAACC,UAAmC;EACpEA,MAAM;EACNC,SAAS,IAAID,IAAAA;AACf;;;AC5IA,SAASE,UAAUC,kBAAkB;AAErC,SAASC,cAAAA,aAAYC,eAAAA,cAAaC,YAAAA,iBAAgB;AAe3C,IAAMC,mBAAmB,CAAC,EAAEC,MAAMC,QAAQC,OAAAA,QAAOC,SAASC,OAAS,MAAoB;AAC5F,QAAMC,eAAe,CAACL,UAAAA;AACpB,YAAQA,OAAAA;MACN,KAAKM,UAASC;AACZ,eAAQL,OAAkBM,eAAc,EAAGC,YAAW;MACxD,KAAKH,UAASI;AACZ,eAAOR,OAAMM,eAAeL,MAAAA;MAC9B,KAAKG,UAASK;MACd,KAAKL,UAASM;AACZ,eAAOD,OAAOT,MAAAA;MAEhB,SAAS;AACP,eAAOS,OAAOT,MAAAA;MAChB;IACF;EACF;AAEA,MAAI,CAACD,QAAQ;AACX,WAAOI,aAAaL,IAAAA;EACtB;AAEA,UAAQC,QAAAA;IACN,KAAKY,YAAWN,SAAS;AACvB,aAAOF,aAAaC,UAASC,OAAO;IACtC;IACA,KAAKM,YAAWH,QAAQ;AACtB,aAAOL,aAAaC,UAASI,MAAM;IACrC;IACA,KAAKG,YAAWF;IAChB,KAAKE,YAAWD,KAAK;AACnB,aAAOP,aAAaC,UAASK,MAAM;IACrC;IACA,KAAKE,YAAWC,SAAS;AACvB,aAAO,GAAIZ,SAAmB,GAAA;IAChC;IACA,KAAKW,YAAWE,UAAU;AAExB,aAAQb,OAAiBM,eAAeL,QAAQ;QAC9Ca,OAAO;QACPC,UAAU;QACVC,uBAAuB;QACvBC,uBAAuB;MACzB,CAAA;IACF;IACA,KAAKN,YAAWO,MAAM;AACpB,UAAI;AACF,eAAOC,WAAW,IAAID,KAAKlB,MAAAA,GAAkB,YAAA;MAC/C,SAASoB,OAAO;AACd,eAAO;MACT;IACF;IACA,KAAKT,YAAWU,MAAM;AACpB,UAAI;AACF,eAAOF,WAAW,IAAID,KAAKlB,MAAAA,GAAkB,UAAA;MAC/C,SAASoB,OAAO;AACd,eAAO;MACT;IACF;IACA,KAAKT,YAAWW,UAAU;AACxB,UAAI;AACF,eAAOH,WAAW,IAAID,KAAKlB,MAAAA,GAAkB,qBAAA;MAC/C,SAASoB,OAAO;AACd,eAAO;MACT;IACF;IACA,KAAKT,YAAWY,UAAU;AACxB,UAAIvB,WAAU,QAAQA,WAAUE,QAAW;AACzC,eAAO;MACT;AAGA,UAAIsB,MAAMC,QAAQzB,MAAAA,KAAUA,OAAM0B,UAAU,KAAK1B,OAAM2B,MAAMnB,OAAOoB,QAAQ,GAAG;AAC7E,cAAM,EAAEC,UAAUC,UAAS,IAAKC,aAAYC,aAAahC,MAAAA;AACzD,eAAO,GAAG6B,QAAAA,IAAYC,SAAAA;MACxB;AAEA,aAAOrB,OAAOT,MAAAA;IAChB;IACA,SAAS;AACP,UAAIA,WAAU,QAAQA,WAAU,aAAa;AAC3C,eAAO;MACT;AACA,aAAOS,OAAOT,MAAAA;IAChB;EACF;AACF;AAEO,IAAMiC,mBAAmB,CAAC,EAAEnC,MAAMC,QAAQC,OAAAA,QAAOC,SAASC,OAAS,MAAoB;AAC5F,QAAMC,eAAe,CAACL,UAAAA;AACpB,YAAQA,OAAAA;MACN,KAAKM,UAASC;MACd,KAAKD,UAASI;MACd,KAAKJ,UAASK;MACd,KAAKL,UAASM;AACZ,eAAOD,OAAOT,MAAAA;MAEhB;AACE,eAAOS,OAAOT,MAAAA;IAClB;EACF;AAEA,MAAI,CAACD,QAAQ;AACX,WAAOI,aAAaL,IAAAA;EACtB;AAEA,UAAQC,QAAAA;IACN,KAAKY,YAAWN;IAChB,KAAKM,YAAWH;IAChB,KAAKG,YAAWF;IAChB,KAAKE,YAAWD,KAAK;AACnB,aAAOP,aAAaL,IAAAA;IACtB;IACA,KAAKa,YAAWC,SAAS;AACvB,aAAOH,OAAOT,SAAQ,GAAA;IACxB;IACA,KAAKW,YAAWE,UAAU;AACxB,aAAOJ,OAAOT,MAAAA;IAChB;IACA,KAAKW,YAAWW,UAAU;AACxB,YAAMY,OAAO,IAAIhB,KAAKlB,MAAAA;AACtB,aAAOkC,KAAKC,YAAW;IACzB;IACA,KAAKxB,YAAWO,MAAM;AACpB,YAAMgB,OAAO,IAAIhB,KAAKlB,MAAAA;AACtB,aAAOkC,KAAKC,YAAW,EAAGC,MAAM,GAAA,EAAK,CAAA;IACvC;IACA,KAAKzB,YAAWU,MAAM;AACpB,YAAMa,OAAO,IAAIhB,KAAKlB,MAAAA;AACtB,aAAOkC,KAAKC,YAAW,EAAGC,MAAM,GAAA,EAAK,CAAA,EAAGA,MAAM,GAAA,EAAK,CAAA;IACrD;IACA,KAAKzB,YAAWY,UAAU;AAExB,UAAIvB,WAAU,QAAQA,WAAUE,QAAW;AACzC,eAAO;MACT;AAGA,UAAIsB,MAAMC,QAAQzB,MAAAA,KAAUA,OAAM0B,UAAU,KAAK1B,OAAM2B,MAAMnB,OAAOoB,QAAQ,GAAG;AAC7E,cAAM,EAAEC,UAAUC,UAAS,IAAKC,aAAYC,aAAahC,MAAAA;AACzD,eAAO,GAAG6B,QAAAA,IAAYC,SAAAA;MACxB;AAEA,aAAOrB,OAAOT,MAAAA;IAChB;IAEA,SAAS;AACP,aAAOS,OAAOT,MAAAA;IAChB;EACF;AACF;;;ACpKA,SAASqC,cAAAA,aAAYC,6BAA6B;AAClD,SAASC,sBAAsB;;;ACH/B,YAAYC,gBAAe;AAE3B,SAASC,gBAAgB;AAElB,IAAMC,uBAAuB,CAACC,QAAAA;AACnC,QAAMC,YAAYC,SAASF,KAAeG,sBAAW;AACrD,SAAQF,WAA+CG,KAAK,CAAA,GAAIC;AAClE;;;ADMO,IAAMC,cAAc,CAACC,aAAAA;AAC1B,QAAM,EAAEC,KAAKC,QAAQC,MAAK,IAAKH;AAG/B,MAAIG,OAAO;AACT,UAAMC,cAAcC,qBAAqBJ,GAAAA;AACzC,QAAIG,aAAa;AACf,YAAME,aAAaC,eAAeH,aAAaI,qBAAAA;AAC/C,UAAIF,YAAY;AACd,eAAO;UAAEL,KAAKG;UAAaK,SAAS;QAAK;MAC3C;IACF;EACF;AAGA,MAAIP,WAAWQ,YAAWC,KAAK;AAC7B,WAAO;MAAEV;MAAKQ,SAAS;IAAM;EAC/B;AAEA,SAAOG;AACT;;;;AEjCA,YAAYC,cAAc;AAC1B,YAAYC,gBAAe;AAC3B,YAAYC,aAAY;AACxB,OAAOC,UAASC,UAAUC,eAAAA,oBAAmB;AAE7C,SAASC,YAAYC,YAAAA,WAAUC,sBAAsBC,4BAA4B;AACjF,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,cAAAA,aAAYC,kBAAAA,uBAAsB;AAC3C,SAA8BC,2BAA2B;;AAkBlD,IAAMC,aAAa,CAAC,EAAEC,UAAUC,UAAUC,MAAMC,YAAYC,QAAQC,gBAAe,MAAmB;;;AAC3G,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAC7B,UAAM,EAAEC,KAAKC,MAAMC,MAAMC,MAAK,IAAKZ;AAGnC,UAAMa,SAAUC,cAAcZ,QAAQ,CAAA,CAAE,KAAK,CAAA;AAC7Ca,IAAAA,WAAUC,MAAMC,QAAQJ,MAAAA,GAAS,kBAAkBX,MAAMgB,KAAK,GAAA,CAAA,sBAAwB;;;;;;;;;AACtF,UAAMC,QAAQP,SAAkBQ,cAAKV,MAAaW,kBAAU;AAE5D,UAAMC,cAAcC,qBAAqBd,GAAAA;AAEzC,UAAMe,wBAAwB,CAACC,aAAAA;AAC7B,YAAMC,WAAWC,UAASF,UAAUG,oBAAAA;AACpC,YAAMC,cAAcH,WAAWI,qBAAqBJ,UAAU,CAAC,CAAA,IAAKC,UAASF,UAAoBM,wBAAa;AAC9G,UAAI,CAACF,aAAa;AAChB,eAAO,CAAC;MACV;AAEA,aAAOG,OAAOC,YAAYC,oBAAoBL,aAAa,CAAC,CAAA,EAAGM,IAAI,CAACC,SAAS;QAACA,KAAK1B;QAAM0B,KAAKC;OAAa,CAAA;IAC7G;AAEA,UAAMC,kBAAkB,MACtB3B,SAAS,YAAYW,cAAcE,sBAAsBF,WAAAA,IAAeiB,WAAWD,gBAAgB3B,IAAAA;AAErG,UAAM6B,YAAYC,aAAY,MAAA;AAC5BtC,iBAAWuC,cAAc/B,MAAM;WAAIE;QAAQyB,gBAAAA;OAAkB;IAC/D,GAAG;MAAC3B;MAAMW;MAAanB;MAAYU;KAAO;AAE1C,UAAM8B,eAAeF,aACnB,CAACG,UAAAA;AACC,YAAMC,YAAYhC,OAAOiC,OAAO,CAACC,GAAGC,MAAMA,MAAMJ,KAAAA;AAChDzC,iBAAWuC,cAAc/B,MAAMkC,SAAAA;IACjC,GACA;MAAClC;MAAMR;MAAYU;KAAO;AAG5B,QAAI,CAACS,aAAa;AAChB,aAAO;IACT;AAEA,WAAOrB,YAAYY,OAAOoC,SAAS,IAAI,OACrC,gBAAAC,OAAA,cAAAA,OAAA,UAAA,MACE,gBAAAA,OAAA,cAACC,aAAAA;MAAYlD,UAAAA;MAASkB;QACtB,gBAAA+B,OAAA,cAACE,OAAAA;MACCC,MAAK;MACLC,WACErD,WACI,+BACAY,OAAOoC,SAAS,IACd,iDACA;OAGPpC,OAAOsB,IAAI,CAACoB,QAAQX,UAAAA;AACnB,YAAMY,QACJ,gBAAAN,OAAA,cAACO,WAAAA;QACCzD,UAAU;UACR,GAAGA;UACH0D,OAAO;UACPjD,KAAKa;QACP;QACApB,MAAM;aAAKA,QAAQ,CAAA;UAAK0C;;QACxB3C;QACA0D,QAAAA;QACAvD;QACAC;;AAGJ,aAAOJ,WACLuD,QAEA,gBAAAN,OAAA,cAACU,UAAAA;QAASC,KAAKjB;SACb,gBAAAM,OAAA,cAACE,OAAAA;QAAIC,MAAK;SAAQG,KAAAA,GAClB,gBAAAN,OAAA,cAACY,aAAAA;QACCC,MAAK;QACLC,UAAAA;QACA7C,OAAOb,EAAE,eAAA;QACT2D,SAAS,MAAMtB,aAAaC,KAAAA;QAC5BsB,YAAW;;IAInB,CAAA,CAAA,GAED,CAACjE,YACA,gBAAAiD,OAAA,cAACY,aAAAA;MACCI,YAAW;MACXH,MAAK;MACL5C,OAAOb,EAAE,WAAA;MACT2D,SAASzB;;;;;AAKnB;;;ACxHA,SAAS2B,cAAAA,mBAAkB;AAUpB,IAAMC,oBAAoB,CAACC,MAAkBC,WAAAA;AAClD,UAAQA,QAAAA;IACN,KAAKC,YAAWC;AACd,aAAOC;IACT,KAAKF,YAAWG;AACd,aAAOC;EACX;AAEA,UAAQN,MAAAA;IACN,KAAK;AACH,aAAOO;IACT,KAAK;AACH,aAAOC;IACT,KAAK;AACH,aAAOC;EACX;AACF;;;;AC1BA,OAAO;AAIP,OAAOC,WAASC,eAAAA,eAAaC,WAAAA,gBAAe;AAE5C,SAEEC,SACAC,KACAC,yBAAAA,wBAEAC,yBACK;AACP,SAASC,kBAAAA,uBAAsB;AAC/B,SAASC,WAAW;AAEpB,SAASC,UAAUC,uBAAuB;AAC1C,SAASC,UAAAA,SAAQC,QAAAA,OAAMC,SAAAA,QAAOC,kBAAAA,uBAAsB;AACpD,SAASC,iBAAiBC,MAAAA,WAAU;AACpC,SAASC,iBAAAA,sBAAqB;;;;ACnB9B,OAAOC,WAA8CC,YAAYC,eAAAA,cAAaC,WAAAA,UAASC,YAAAA,iBAAgB;AAEvG,SAASC,QAAAA,OAAMC,SAA+BC,kBAAAA,uBAAsB;AACpE,SAASC,gBAAgB;AAiBzB,IAAMC,sBAAsBC,2BAC1B,CACE,EACEC,SACAC,aACAC,cACAC,mBACAC,kBACAC,wBACAC,UACAC,UACA,GAAGC,MAAAA,GAELC,QAAAA;;;AAEA,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAE7B,UAAM,CAACC,cAAcC,eAAAA,IAAmBC,UAAS,EAAA;AACjD,UAAM,CAACC,UAAUC,WAAAA,IAAeF,UAAS,KAAA;AAEzC,UAAMG,iBAAiBC,aACrB,CAACC,WAAAA;AACCb,iBAAWa,MAAAA;AACXH,kBAAY,KAAA;AACZH,sBAAgB,EAAA;IAClB,GACA;MAACP;KAAS;AAGZ,UAAMc,mBAAmBF,aAAY,MAAA;AACnCF,kBAAY,KAAA;AACZH,sBAAgB,EAAA;IAClB,GAAG,CAAA,CAAE;AAML,UAAMQ,cAAcH,aAClB,CAACI,UAAAA;AACC,UAAIrB,gBAAiBqB,MAAMC,OAAuBC,QAAQ,2BAAA,GAA8B;AACtFF,cAAMG,gBAAe;AACrBH,cAAMI,eAAc;AACpBV,oBAAY,IAAA;MACd;IACF,GACA;MAACf;KAAa;AAGhB,UAAM0B,gBAAgBT,aACpB,CAACI,UAAAA;AACC,UACEA,MAAMM,QAAQ,WACd3B,gBACCqB,MAAMO,cAA8BC,cACnC,gEAAA,GAEF;AACAR,cAAMG,gBAAe;AACrBH,cAAMI,eAAc;AACpBV,oBAAY,IAAA;MACd;IACF,GACA;MAACf;KAAa;AAGhB,UAAM8B,YAAYC,SAChB,MACEjC,QAAQkC,OAAO,CAACC,KAA6BC,WAAAA;AAC3CD,UAAIC,OAAOC,GAAGC,YAAW,CAAA,IAAMF,OAAOG,MAAMD,YAAW;AACvD,aAAOH;IACT,GAAG,CAAC,CAAA,GACN;MAACnC;KAAQ;AAGX,WACE,gBAAAwC,QAAA,cAACC,SAASC,SAAO;MACd,GAAGlC;MACJC;MACAkC,QAAQ,CAACC,QAAOC,WAAYD,WAAU,gBAAgBZ,UAAUY,MAAAA,GAAQE,SAASD,OAAOP,YAAW,CAAA,IAAM,IAAI;MAC7GS,gBAAgBzB;MAChB0B,kBAAkBpB;OAEjBZ,YAAYd,eACX,gBAAAsC,QAAA,cAACS,QAAQC,UAAQ,MACf,gBAAAV,QAAA,cAACW,MAAAA;MACCC,QAAQlD;MACRkB,QAAQf,yBAAyB;QAAE,CAACA,sBAAAA,GAAyBQ;MAAa,IAAI,CAAC;MAC/EwC,QAAQnC;MACRoC,UAAUjC;MACVkC,QAAO;UAIX,gBAAAf,QAAA,cAAAA,QAAA,UAAA,MACE,gBAAAA,QAAA,cAACC,SAASe,OAAK;MACbC,aAAa/C,EAAE,sCAAA;MACfkC,OAAO/B;MACP6C,eAAe5C;MACf6C,WAAAA;QAEF,gBAAAnB,QAAA,cAACC,SAASmB,MAAI,MACX5D,QAAQ6D,IAAI,CAACzB,WACZ,gBAAAI,QAAA,cAACC,SAASqB,MAAI;MACZjC,KAAKO,OAAOC;MACZO,OAAOR,OAAOC;MACd/B,UAAU,MAAMA,SAAS8B,OAAOC,EAAE;MAClC0B,YAAW;OAEX,gBAAAvB,QAAA,cAACwB,QAAAA;MAAKC,WAAU;OAAQ7B,OAAOG,KAAK,GACnCtC,aAAa6C,SAASV,OAAOC,EAAE,KAAK,gBAAAG,QAAA,cAAC0B,OAAAA;MAAKC,MAAK;UAGnDtD,aAAauD,SAAS,KAAKjE,qBAAqBC,oBAAoBF,gBAAgBK,YACnF,gBAAAiC,QAAA,cAACC,SAASqB,MAAI;MAAClB,OAAM;MAAamB,YAAW;OAC3C,gBAAAvB,QAAA,cAAC0B,OAAAA;MAAKC,MAAM/D;QACXM,EAAEP,kBAAkB,CAAA,GAAI;MAAEkE,IAAIlE,kBAAkB,CAAA,EAAGkE;MAAIC,MAAMzD;IAAa,CAAA,CAAA,CAAA,CAAA,GAMrF,gBAAA2B,QAAA,cAACC,SAAS8B,OAAK,IAAA,CAAA;;;;AAGrB,CAAA;AAGFzE,oBAAoB0E,cAAc;AAE3B,IAAMC,eAAe;EAC1BC,MAAMjC,SAASiC;EACfC,SAASlC,SAASkC;EAClBC,gBAAgBnC,SAASmC;EACzBlC,SAAS5C;AACX;;;ADlHA,IAAM+E,gBAAgB,CAACC,QAAAA;AACrB,SAAO,OAAOA,QAAQ,YAAY,OAAQA,MAAc,GAAA,MAAS;AACnE;AAEO,IAAMC,WAAW,CAAC,EACvBC,MACAC,OACAC,UACAC,aACAC,WACAC,OACAC,KACAC,UAAAA,WACAC,mBACAC,kBACAC,QACAC,UACAC,cACAC,wBACAC,mBACAC,eACA,GAAGC,eAAAA,MACW;;;AACd,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAC7B,UAAMC,cAAcC,SAClB,MAAOf,MAAMgB,gBAAyChB,KAAKiB,sBAAAA,IAAyBC,QACpF;MAAClB;KAAI;AAEP,UAAM,EACJmB,SAASC,kBACTC,QAAQC,eACRC,SAASC,SAAQ,IACfC,mBAAmB;MAAEX;MAAaN;IAAkB,CAAA;AAExD,QAAKM,eAAeA,aAAaY,aAAaC,kBAAkBC,OAAAA,GAAUF,YAAa,CAAClB,mBAAmB;AAEzG,aACE,gBAAAqB,QAAA,cAACC,kBACK;QAAEpC;QAAMC;QAAOE;QAAaD;QAAUE;QAAWG,UAAAA;QAAUG;QAAQK;QAAe,GAAGC;MAAe,CAAA;IAG9G;AAEA,UAAMqB,iBAAiBC,cAAY,MAAA;AACjC,YAAMC,YAAYhC,UAAAA;AAElB,YAAMiC,qBAAqB,CAAC1C,QAAAA;AAC1B,cAAM2C,QAAQC,IAAID,MAAM3C,GAAAA;AACxB,YAAI2C,SAAS5C,cAAcC,GAAAA,GAAM;AAC/B,gBAAM6C,YAAYF,QAAQ3C,IAAI8C,IAAIC,SAAQ,IAAK/C,IAAI,GAAA;AACnD,gBAAMgD,iBAAiBpB,iBAAiBqB,KAAK,CAACC,YAAWA,QAAOC,OAAON,SAAAA;AACvE,cAAIG,gBAAgB;AAClB,mBAAOA;UACT;QACF;AACA,eAAOtB;MACT;AAEA,UAAInB,SAAS6C,MAAMC,QAAQZ,SAAAA,GAAY;AACrC,eAAOA,UAAUa,IAAIZ,kBAAAA,EAAoBa,OAAOC,cAAAA,KAAkB,CAAA;MACpE;AAEA,YAAMN,SAASR,mBAAmBD,SAAAA;AAClC,UAAIS,QAAQ;AACV,eAAO;UAACA;;MACV;AAEA,aAAO,CAAA;IACT,GAAG;MAACzC;MAAUmB;MAAkBrB;KAAM;AAEtC,UAAMkD,eAAejB,cACnB,CAACkB,QAAAA;AACC,UAAIA,IAAIC,WAAW,GAAG;AACpB1C,sBAAc,UAAUS,MAAAA;AACxB;MACF;AAEA,YAAMkC,OAAOF,IACVJ,IAAI,CAACH,OAAAA;AACJ,cAAMU,OAAOjC,iBAAiBqB,KAAK,CAACC,WAAWA,OAAOC,OAAOA,EAAAA;AAC7D,YAAIU,MAAM;AACR,gBAAMf,MAAMgB,IAAIC,MAAMF,KAAKV,EAAE;AAC7B,iBAAOP,IAAIoB,QAAQlB,GAAAA;QACrB;AACA,eAAO;MACT,CAAA,EACCS,OAAOC,cAAAA;AAEV,UAAIjD,OAAO;AACTU,sBAAc,UAAU2C,IAAAA;MAC1B,OAAO;AACL3C,sBAAc,UAAU2C,KAAK,CAAA,CAAE;MACjC;IACF,GACA;MAAChC;MAAkBrB;MAAOU;KAAc;AAG1C,UAAMgD,eAAezB,cACnB,CAAC0B,WAAAA;AACCrD,iBAAWqD,MAAAA;AACXpC,oBAAAA;IACF,GACA;MAACjB;MAAUiB;KAAc;AAG3B,QAAI,CAACR,aAAa;AAChB,aAAO;IACT;AAEA,UAAM,EAAE6C,QAAQC,MAAK,IAAKlD,eAAemD,UAAS;AAElD,UAAMC,QAAQ/B,eAAAA;AACd,UAAMgC,cAAchD,SAAQ,MAAM+C,MAAMhB,IAAI,CAACkB,MAAWA,EAAErB,EAAE,GAAG;MAACmB;KAAM;AACtE,UAAMG,eAAejC,cACnB,CAACW,OAAAA;AACC,UAAI5C,OAAO;AACT,cAAMmE,UAAUH,YAAYI,SAASxB,EAAAA,IAAMoB,YAAYhB,OAAO,CAACqB,MAAMA,MAAMzB,EAAAA,IAAM;aAAIoB;UAAapB;;AAClGM,qBAAaiB,OAAAA;MACf,OAAO;AACL,YAAIH,YAAY,CAAA,MAAOpB,IAAI;AACzBM,uBAAa,CAAA,CAAE;QACjB,OAAO;AACLA,uBAAa;YAACN;WAAG;QACnB;MACF;IACF,GACA;MAAC5C;MAAOgE;MAAad;KAAa;AAIpC,WAAOrD,YAAYkE,MAAMX,SAAS,IAAI,OACpC,gBAAAtB,QAAA,cAACwC,OAAMC,MAAI;MAACC,mBAAmBZ;OAC5B,CAAC7D,aAAa,gBAAA+B,QAAA,cAAC2C,aAAAA;MAAYZ;MAAcjE;QAC1C,gBAAAkC,QAAA,cAAC4C,OAAAA;MAAIC,kBAAAA;OACF9E,WACCkE,MAAMX,SAAS,IACb,gBAAAtB,QAAA,cAAC8C,KAAAA;MAAEC,WAAWC,IAAGC,iBAAiB,OAAA;OAAWnE,EAAE,gCAAA,CAAA,IAE/CmD,MAAMhB,IAAI,CAACO,SACT,gBAAAxB,QAAA,cAACkD,UAAAA;MAASC,KAAK3B,KAAKV;MAAIsC,OAAO5B,KAAKV;MAAIuC,eAAc;OACnD7B,KAAK1D,KAAK,CAAA,IAKjB,gBAAAkC,QAAA,cAACsD,aAAab,MAAI,MAChB,gBAAAzC,QAAA,cAACsD,aAAaC,SAAO;MAACC,SAAAA;OACpB,gBAAAxD,QAAA,cAACyD,SAAAA;MAAOC,SAAQ;MAAQC,YAAW;OACjC,gBAAA3D,QAAA,cAAC4C,OAAAA;MAAIgB,MAAK;MAAOb,WAAU;OACxBd,OAAOX,SACNW,OAAOhB,IAAI,CAACO,SACV,gBAAAxB,QAAA,cAAC6D,iBAAAA;MACCV,KAAK3B,KAAKV;MACVgD,QAAQtC,KAAKV;MACbhD,OAAO0D,KAAK1D;MACX,GAAI0D,KAAKuC,MAAM;QAAEA,KAAKvC,KAAKuC;MAAI,IAAI,CAAC;MACrCC,aAAalF,EAAE,mBAAA;MACfmF,aAAa,CAACC,UAAAA;AACZ,YAAIA,MAAMC,WAAW,UAAU;AAC7B/B,uBAAaZ,KAAKV,EAAE;QACtB;MACF;UAIJ,gBAAAd,QAAA,cAACoE,QAAAA;MAAKrB,WAAU;OACb/E,eAAec,EAAE,yBAAyB;MAAEuF,OAAOnG,QAAQ,KAAK;IAAE,CAAA,CAAA,CAAA,GAIzE,gBAAA8B,QAAA,cAACsE,OAAAA;MAAKC,MAAM;MAAGC,MAAK;UAGxB,gBAAAxE,QAAA,cAACsD,aAAamB,SAAO;MACnBnF,SAASC;MACT2C;MACAwC,UAAUtC;MACV3D;MACAJ;MACAC;MACAI;MACAF,UAAUoD;UAKjB3D,aAAa,gBAAA+B,QAAA,cAACwC,OAAMmC,0BAAwB,MAAE5C,KAAAA,CAAAA;;;;AAGrD;AAEA,IAAM9B,mBAAmB,CAAC,EACxBpC,MACAC,OACAC,UACAC,aACAC,WACAG,UAAAA,WACAQ,eACA,GAAGC,eAAAA,MACQ;;;AACX,UAAM+F,sBAAsB,CAACC,OAAYrE,cAAAA;AACvC,YAAMC,MAAMgB,IAAIqD,SAAStE,SAAAA;AACzB,UAAIC,KAAK;AACP7B,wBAAgB,UAAU2B,IAAIoB,QAAQlB,GAAAA,CAAAA;MACxC,WAAWD,cAAc,IAAI;AAC3B5B,wBAAgB,UAAUS,MAAAA;MAC5B,OAAO;AACLT,wBAAgB,UAAU4B,SAAAA;MAC5B;IACF;AAEA,UAAMN,iBAAiB,MAAA;AACrB,YAAME,YAAYhC,UAAAA;AAClB,UAAI,OAAOgC,cAAc,UAAU;AACjC,eAAOA;MACT;AACA,UAAIG,IAAID,MAAMF,SAAAA,GAAY;AACxB,eAAOA,UAAUK,IAAIC,SAAQ;MAC/B;AAEA,aAAOrB;IACT;AAEA,WACE,gBAAAW,QAAA,cAAC+E,WAAAA;MACClH;MACAC;MACAC;MACAC;MACAC;MACAG,UAAU8B;MACVtB,eAAegG;MACd,GAAG/F;;;;;AAGV;;;AP5OO,IAAMmG,YAAY,CAAC,EACxBC,UACAC,MACAC,UACAC,QACAC,YACAC,mBACAC,mBACAC,kBACAC,UACAC,cACAC,wBACAC,iBACAC,OAAM,MACS;;;AACf,UAAM,EAAEC,KAAKC,MAAMC,MAAMC,QAAQC,OAAOC,aAAaC,SAASC,UAAUC,MAAK,IAAKrB;AAClF,UAAMsB,aAAaC,cAActB,IAAAA;AAEjC,UAAMuB,QAAQC,SAAQ,MAAMR,SAAkBS,eAAKZ,MAAmBa,uBAAU,GAAG;MAACV;MAAOH;KAAK;AAChG,UAAMc,cAAcH,SAClB,MAAOL,UAAUS,SAAS,aAAaT,SAAS,CAAA,CAAE,MAAMF,aACxD;MAACE;MAAUF;KAAY;AAOzB,UAAMY,iBAAiBnB,kBAAkB;MACvCoB,MAAMjB;MACNkB,QAAeC,YAAKpB,GAAAA;MACpBS,YAAY;QACVP;QACAC;QACAQ;QACAtB;QACA0B;QACA,GAAGN;MACL;IACF,CAAA;AAEA,QAAIQ,gBAAgB;AAClB,aAAOA;IACT;AAEA,UAAMI,WAAWC,gBAAelC,QAAQ,CAAA,CAAE;AAC1C,UAAMmC,kBAAkBxB,SAASsB,QAAAA;AACjC,QAAIE,iBAAiB;AACnB,aACE,gBAAAC,QAAA,cAACD,iBAAAA;QACCrB;QACAC;QACAQ;QACAc,WAAWnC;QACXyB;QACA1B;QACC,GAAGoB;;IAGV;AAMA,UAAMiB,WAAWC,YAAYxC,QAAAA;AAC7B,QAAIuC,UAAU;AACZ,aACE,gBAAAF,QAAA,cAACI,UAAAA;QACC5B,KAAK0B,SAAS1B;QACdQ,OAAOkB,SAASG;QAChB3B;QACAC;QACAQ;QACAI;QACA1B;QACAoC,WAAWnC;QACXE;QACAC;QACAC;QACAC;QACAC;QACAC;QACC,GAAGY;;IAGV;AAMA,QAAID,OAAO;AACT,aAAO,gBAAAgB,QAAA,cAACM,YAAAA;QAAW3C;QAAoBC;QAAYqB;QAAwBpB;QAAoBU;;IACjG;AAMA,UAAMgC,iBAAiBC,kBAAkB9B,MAAMC,MAAAA;AAC/C,QAAI4B,gBAAgB;AAClB,aACE,gBAAAP,QAAA,cAACO,gBAAAA;QACC7B;QACAC;QACAQ;QACAc,WAAWnC;QACXyB;QACA1B;QACC,GAAGoB;;IAGV;AAMA,QAAIH,SAAS;AACX,aACE,gBAAAkB,QAAA,cAACS,aAAAA;QACC/B;QACAC;QACAd;QACAoC,WAAWnC;QACXqB;QACAL,SAASA,QAAQ4B,IAAI,CAACC,YAAY;UAAEC,OAAOD;UAAQxB,OAAO0B,OAAOF,MAAAA;QAAQ,EAAA;QACzEpB;QACC,GAAGN;;IAGV;AAMA,QAAIP,SAAS,UAAU;AACrB,YAAMoC,WAAWC,UAASvC,KAAKwC,qBAAAA;AAC/B,YAAMC,cAAcH,WAChBI,sBAAqBJ,UAAU7B,WAAWkC,SAAQ,CAAA,IAClDJ,UAASvC,KAAe4C,wBAAa;AAEzC,UAAIH,aAAa;AACf,eACE,gBAAAjB,QAAA,cAAAA,QAAA,UAAA,MACG,CAAClC,UAAU,gBAAAkC,QAAA,cAACqB,MAAAA;UAAGC,WAAWC,IAAG,2CAAA;WAA+CpC,KAAAA,GAC7E,gBAAAa,QAAA,cAACwB,YAAAA;UACC7B,QAAeC,YAAKqB,WAAAA;UACpBrD;UACAC;UACAE;UACAC;UACAC;UACAC;UACAC;UACAI;UACAD;;MAIR;IACF;AAEA,WAAO;;;;AACT;AAmCO,IAAMkD,aAAaC,gBAAAA,YACxB,CACE,EACEC,YACA/B,QACA/B,MACA+D,QACAC,MACA7D,YACAF,UACAS,iBACAC,QACAP,mBACA,GAAG6D,MAAAA,GAELJ,gBAAAA;;;AAEA,UAAMK,SAASC,cAAcnE,IAAAA;AAC7B,UAAMoE,aAAa5C,SAAQ,MAAA;AACzB,YAAMyC,SAAQI,qBAAoBtC,OAAOnB,KAAKsD,MAAAA;AAG9C,UAAI/D,YAAY;AACd,cAAMmE,mBAAmBnE,WAAWoE,oBAAmB;AACvD,cAAMC,mBAAmB,IAAIC,IAAItE,WAAWuE,oBAAmB,CAAA;AAG/D,cAAMC,eAAeV,OAAMF,OAAO,CAACjC,SAAS,CAAC0C,iBAAiBI,IAAI9C,KAAKjB,IAAI,CAAA;AAC3E,cAAMgE,eAAsC,CAAA;AAG5C,mBAAWC,mBAAmBR,kBAAkB;AAC9C,gBAAMS,YAAY9B,OAAO6B,gBAAgBE,MAAMhF,IAAI;AACnD,gBAAM8B,OAAO6C,aAAaM,KAAK,CAACC,MAAMA,EAAErE,SAASkE,SAAAA;AACjD,cAAIjD,MAAM;AACR+C,yBAAaM,KAAKrD,IAAAA;UACpB;QACF;AAGA,cAAMsD,kBAAkB,IAAIX,IAAIH,iBAAiBxB,IAAI,CAACuC,OAAOpC,OAAOoC,GAAGL,MAAMhF,IAAI,CAAA,CAAA;AACjF,cAAMsF,iBAAiBX,aAAaZ,OAAO,CAACjC,SAAS,CAACsD,gBAAgBR,IAAI9C,KAAKjB,IAAI,CAAA;AACnFgE,qBAAaM,KAAI,GAAIG,cAAAA;AAErB,eAAOT;MACT;AAGA,YAAMU,WAAWxB,SAASA,OAAOE,MAAAA,IAASA;AAC1C,aAAOD,OAAOuB,SAASvB,KAAK,CAACwB,GAAGC,MAAMzB,KAAK0B,QAAQF,EAAE3E,IAAI,IAAImD,KAAK0B,QAAQD,EAAE5E,IAAI,CAAA,IAAK0E;IACvF,GAAG;MAACxD;MAAQmC;MAAQH;MAAQC;MAAM7D,YAAYwF;KAAO;AAErD,WACE,gBAAAvD,QAAA,cAACwD,OAAAA;MAAIC,MAAK;MAAOnC,WAAWC,IAAG,WAAWG,UAAAA;MAAagC,KAAKjC;OACzDO,WACEtB,IAAI,CAAC/C,aAAAA;AACJ,aACE,gBAAAqC,QAAA,cAAC2D,eAAAA;QAAcC,KAAKjG,SAASc;QAAMb,MAAM;aAAKA,QAAQ,CAAA;UAAKD,SAASc;;SAClE,gBAAAuB,QAAA,cAACtC,WAAAA;QACCC;QACAC,MAAM;aAAKA,QAAQ,CAAA;UAAKD,SAASc;;QACjCZ;QACAE;QACAC;QACAM;QACAC;QACC,GAAGsD;;IAIZ,CAAA,EACCF,OAAOkC,QAAAA,CAAAA;;;;AAGhB,CAAA;AAWF,IAAMF,gBAAN,cAA4BG,UAAAA;EAC1B,OAAOC,yBAAyBC,OAAgC;AAC9D,WAAO;MAAEA;IAAM;EACjB;EAESC,QAAQ;IAAED,OAAOE;EAAU;EAE3BC,mBAAmBC,WAAqC;AAC/D,QAAIA,UAAUxG,SAAS,KAAKiE,MAAMjE,MAAM;AACtC,WAAKyG,WAAU;IACjB;EACF;EAESC,SAAoB;AAC3B,QAAI,KAAKL,MAAMD,OAAO;AACpB,aACE,gBAAAhE,QAAA,cAACwD,OAAAA;QAAIlC,WAAU;SACb,gBAAAtB,QAAA,cAACuE,QAAAA;QAAKjD,WAAU;SAA+C,OAAA,GAC9DT,OAAO,KAAKgB,MAAMjE,MAAM4G,KAAK,GAAA,CAAA,CAAA;IAGpC;AAEA,WAAO,KAAK3C,MAAM4C;EACpB;EAEQJ,aAAmB;AACzB,SAAKK,SAAS;MAAEV,OAAOE;IAAU,CAAA;EACnC;AACF;;;AN1TO,IAAMS,OAAO,CAAuB,EACzCC,YACAC,IACAC,QACAC,QAAQC,eACRC,WACAC,UACAC,UACAC,eAAe,MACfC,QACAC,UACAC,iBACAC,YACAC,QACA,GAAGC,MAAAA,MACU;;;AACb,UAAMC,UAAUC,QAAuB,IAAA;AAGvC,UAAM,EAAEC,mBAAkB,IAAKC,gBAAAA;AAC/BC,IAAAA,WAAU,MAAA;AACR,UAAId,aAAaU,QAAQK,SAAS;AAChC,cAAMC,iBAAiBJ,mBAAmBF,QAAQK,OAAO;AACzD,YAAIC,gBAAgB;AAClBA,yBAAeC,MAAK;QACtB;MACF;IACF,GAAG;MAACjB;KAAU;AAGd,UAAMkB,cAAcC,cAClB,OAAOrB,QAAasB,SAAAA;AAClB,UAAIlB,UAAU;AACZ,cAAMM,SAASV,QAAQsB,IAAAA;MACzB;IACF,GACA;MAAClB;MAAUM;KAAO;AAGpB,WACE,gBAAAa,QAAA,cAACC,cAAAA;MACCZ;MACAN;MACAF;MACAH;MACAO;MACAC;MACAgB,SAASL;MACTV;OAEA,gBAAAa,QAAA,cAACG,OAAAA;MAAIC,MAAK;MAAOC,WAAU;MAAY,GAAI9B,MAAM;QAAE,kBAAkBA;MAAG;MAAI+B,eAAa9B;OACvF,gBAAAwB,QAAA,cAACO,YAAAA;MACE,GAAGnB;MACJoB,KAAKnB;MACLf,YAAY;QACVQ,iBAAiB,iBACb,6FACAA,iBAAiB,kBACf,+CACAA,eACE2B,eACA;QACR3B,iBAAiB,mBAAmB4B;QACpCpC;;MAEFM;MACAG;SAEAC,YAAYG,WAAW,CAACN,YAAY,CAACD,YACrC,gBAAAoB,QAAA,cAACW,aAAAA;MAAY/B;MAAoBI;MAAoBF;;;;;AAK/D;;;;ANtFO,IAAM8B,cAAc,CAAC,EAC1BC,UACAC,YACAC,OACAC,UACAC,QACAC,UACAC,aAAY,MACK;;;AACjB,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAC7B,UAAM,CAACC,OAAOC,QAAAA,IAAYC,UAAuBX,WAAWY,mBAAmBX,MAAMY,EAAE,EAAEJ,KAAK;AAC9FK,IAAAA,WAAU,MAAMJ,SAASV,WAAWY,mBAAmBX,MAAMY,EAAE,EAAEJ,KAAK,GAAG;MAACR;MAAOD;KAAW;AAE5F,UAAM,CAACe,SAASC,UAAAA,IAAcL,UAAuB,CAAA,CAAE;AACvDM,mBAAe,YAAA;AACb,UAAI,CAACf,UAAU;AACb;MACF;AAEA,YAAMgB,eAAehB,SAASiB,MAAK,EAAGC,UAAU,CAACD,UAAUH,WAAWG,MAAME,OAAO,GAAG;QAAEC,MAAM;MAAK,CAAA;AAGnG,YAAMP,WAAU,MAAMb,SAASiB,MAAK,EAAGI,IAAG;AAC1CP,iBAAWD,QAAAA;AAEX,aAAO,MAAMG,eAAAA;IACf,GAAG;MAAChB;KAAS;AAEb,UAAM,CAACsB,iBAAiBC,kBAAAA,IAAsBd,UAAAA;AAC9CG,IAAAA,WAAU,MAAA;AACRW,yBAAmBV,QAAQW,KAAK,CAACC,WAAWA,OAAOC,aAAanB,OAAOe,eAAAA,CAAAA;IACzE,GAAG;MAACT;MAASN,OAAOe;KAAgB;AAIpC,UAAM,CAAC,EAAEK,YAAW,GAAIC,cAAAA,IAAkBnB,UAAS;MAAEkB,aAAaE,gBAAgBtB,OAAOuB,MAAAA;IAAQ,CAAA;AAEjG,UAAMC,sBAAsBC,cAC1B,CAACC,WAAAA;AAICL,qBAAe,CAACM,SAAAA;AACd,cAAMP,eAAcE,gBAAgBI,OAAOH,MAAM;AACjD,YAAII,KAAKP,gBAAgBA,cAAa;AACpC,iBAAOO;QACT;AACA,eAAO;UAAEP,aAAAA;QAAY;MACvB,CAAA;AAEAJ,yBAAmB,CAACW,SAAAA;AAClB,YAAID,OAAOX,oBAAoBY,MAAMR,UAAU;AAC7C,gBAAMS,YAAYtB,QAAQW,KAAK,CAACC,WAAWA,OAAOC,aAAaO,OAAOX,eAAe;AACrF,cAAIa,WAAW;AACb,mBAAOA;UACT;QACF;AACA,eAAOD;MACT,CAAA;AAEA1B,eAAS,CAACD,WAAAA;AACR,cAAM6B,OAAOC,aAAaJ,OAAOH,MAAM;AACvC,cAAMQ,kBACJC,qCAAqCN,OAAOH,MAAM;AACpD,YAAIvB,OAAM6B,SAASA,MAAM;AACvB,iBAAO;YAAE,GAAG7B;YAAO,GAAG0B;YAAQ,GAAGK;YAAiBF;UAAK;QACzD;AAEA,eAAOH;MACT,CAAA;IACF,GACA;MAACpB;MAASN,MAAMuB;MAAQvB,MAAMe;KAAgB;AAGhD,UAAMkB,iBAAiBR,cACrB,CAAC,EAAES,SAAQ,MAAE;AACX,UAAIA,YAAY3C,WAAW4C,OAAOlB,KAAK,CAACmB,MAAMA,EAAEC,SAASH,YAAYE,EAAEC,SAAS7C,MAAM6C,IAAI,GAAG;AAC3F,eAAO;UACL;YACEA,MAAM;YACNC,SAAS,4BAA4BJ,QAAAA;UACvC;;MAEJ;IACF,GACA;MAAC3C,WAAW4C;MAAQ3C;KAAM;AAG5B,UAAM+C,aAAad,cACjB,CAACzB,WAAAA;AACCT,iBAAWiD,mBAAmB;QAAEhD;QAAOQ,OAAAA;MAAM,CAAA;AAC7CN,aAAAA;IACF,GACA;MAACH;MAAYC;MAAOE;KAAO;AAG7B,UAAM+C,eAAehB,cAA8D,MAAA;AAEjFiB,4BAAsB,MAAM/C,WAAAA,CAAAA;AAC5BD,aAAAA;IACF,GAAG;MAACA;KAAO;AAEX,UAAMiD,SAAkDC,SACtD,OAAO;MACL,CAAC,QAAA,GAAwC,CAAC5C,WACxC,gBAAA6C,QAAA,cAACC,aAAAA;QACE,GAAG9C;QACJ+C,SAASC,YAAYC,OAAO,CAACC,WAAUA,WAAUC,YAAWC,IAAI,EAAEC,IAAI,CAACH,YAAW;UAChFA,OAAAA;UACAI,OAAOzD,EAAE,UAAUqD,MAAAA,EAAO;QAC5B,EAAA;;MAGJ,CAAC,iBAAA,GAAiD,CAAClD,WACjD,gBAAA6C,QAAA,cAACC,aAAAA;QACE,GAAG9C;QACJ+C,SAASzC,QAAQ+C,IAAI,CAACnC,YAAY;UAChCgC,OAAOhC,OAAOC;QAChB,EAAA;;MAGJ,CAAC,eAAA,GAA+C,CAACnB,WAC/C,gBAAA6C,QAAA,cAACC,aAAAA;QACE,GAAG9C;QACJ+C,SACEhC,kBACIwC,qBAAoBxC,gBAAgByC,GAAG,EACpCC,KAAKC,cAAAA,EACLL,IAAI,CAACM,OAAO;UAAET,OAAOS,EAAEC;QAAK,EAAA,IAC/B,CAAA;;MAIV,CAAC,SAAA,GAAyC,CAAC5D,WAAU,gBAAA6C,QAAA,cAACgB,mBAAsB7D,MAAAA;IAC9E,IACA;MAACH;MAAGS;MAASS;KAAgB;AAG/B,UAAM+C,gBAAgBrC,cACpB,CAACzB,WAA0CA,OAAMiD,OAAO,CAACU,MAAMA,EAAEC,SAAS,MAAA,GAC1E,CAAA,CAAE;AAGJ,QAAI,CAACxC,aAAa;AAChB2C,MAAAA,KAAIC,KAAK,kBAAkB;QAAEhE;MAAM,GAAA;;;;;;AACnC,aAAO;IACT;AAEA,WACE,gBAAA6C,QAAA,cAACoB,MAAAA;MACCC,KAAK1E,MAAMY;MACX+D,WAAAA;MACA7E;MACA8E,QAAQpE;MACRkB,QAAQE;MACR6B,QAAQa;MACRL,MAAM;QAAC;QAAY;;MACnBY,iBAAiB7C;MACjB8C,YAAYrC;MACZvC,QAAQ6C;MACR5C,UAAU8C;MACV8B,QAAQ5B;MACR/C;;;;;AAGN;;;;AqBpMA,YAAY4E,YAAW;AACvB,YAAYC,WAAW;AACvB,YAAYC,YAAY;AACxB,YAAYC,aAAY;AACxB,OAAOC,WAASC,cAAAA,aAAYC,eAAAA,eAAaC,qBAAqBC,WAAAA,UAASC,YAAAA,iBAAgB;AAEvF,SAASC,gBAAgB;AACzB,SAASC,YAAYC,QAAuBC,WAAWC,oBAAoB;AAC3E,SAASC,UAAAA,SAAQC,aAAkC;AACnD,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,SAASC,cAAAA,aAAYC,SAAAA,QAA6BC,kBAAAA,wBAAsB;AACjF,SAASC,iBAAsC;AAC/C,SAASC,QAAAA,aAAY;AACrB,SAASC,eAAAA,oBAAmB;AAC5B,SAASC,gBAAgBC,MAAAA,KAAIC,eAAAA,oBAAmB;AAChD,SACEC,aAEAC,iBACAC,kBAEAC,4BACK;;AAMP,IAAMC,WAAW;AACjB,IAAMC,eAAe;AAmBd,IAAMC,aAAaC,gBAAAA,YACxB,CACE,EACEC,YACAC,QACAC,MACAC,OAAO,UACPC,UACAC,UACAC,cAAc,OACdC,OACAC,MACAC,gBACAC,UACAC,eAAe,KAAI,GAErBC,iBAAAA;;;AAEA,UAAMC,iBAAiB,CAACC,UAAUb,MAAAA;AAClC,UAAM,EAAEc,EAAC,IAAKC,iBAAeC,cAAAA;AAC7B,UAAMC,kBAAkBC,SAAQ,MAAA;AAE9B,YAAMC,aAAanB,kBAAkBoB,aAAapB,OAAOmB,aAAaE,aAAarB,MAAAA;AACnF,aAAO,IAAIsB,gBAAgBH,YAAYlB,KAAKsB,UAAU;IACxD,GAAG;MAACvB;MAAQwB,KAAKC,UAAUxB,KAAKsB,UAAU;KAAE;AAC5CG,wBAAoBf,cAAc,MAAMM,iBAAiB;MAACA;KAAgB;AAC1E,UAAM,CAACU,eAAeC,gBAAAA,IAAoBC,UAAAA;AAE1C,UAAMC,cAAoBC,YAAM9B,KAAK+B,MAAMC,GAAG,EAAEC,KACxCC,WAAK;MAAEC,MAAM;IAAU,GAAG,CAAC,EAAEC,QAAO,MAAE;AAC1C,aAAcC,oBAAaD,QAAQE,MAAM,EAAEL,KAClCM,eAAQ,CAACD,WAAiBE,YAAKF,MAAAA,CAAAA,GAC/BG,qBAAc;IAEzB,CAAA,GACMC,aAAO,MAAMC,MAAAA,CAAAA;AAGrB,UAAMC,aAAa3B,SAAQ,MAAA;AACzB,YAAM4B,OAAcC,eAAO;QACzBf,OACE9B,SAAS,WACL8C,OAAOC,IAAIC,YAAY;UAAEC,OAAO;QAAc,CAAA,IAC9CC,SAASC,MAAMH,YAAY;UAAEC,OAAO;QAAQ,CAAA;MACpD,CAAA;AAEA,UAAIjD,SAAS,WAAWA,SAAS,eAAe;AAC9C,cAAMoD,OAAcP,eAAO;UACzBO,MAAaC,iBAAgBC,eAAON,YAAY;YAAEC,OAAO;UAAO,CAAA,CAAA;QAClE,CAAA;AAEA,eAAcJ,eAAO;UACnB,GAAI7C,SAAS,gBAAgB;YAAE,GAAGoD,KAAKG;YAAQ,GAAGX,KAAKW;UAAO,IAAIX,KAAKW;UACvEC,QAAeH,iBAAgBC,eAAON,YAAY;YAAEC,OAAO;UAAe,CAAA,CAAA;QAC5E,CAAA,EAAGjB,KAAYyB,eAAO;MACxB;AAEA,aAAOb,KAAKZ,KAAYyB,eAAO;IACjC,GAAG;MAACzD;KAAK;AAIT,UAAM0D,aAAa1C,SACjB,OAAO;MACLoC,MAAMrD,KAAKqD;MACXtB,OAAO9B,SAAS,WAAW2D,qBAAqB5D,KAAK+B,MAAMC,GAAG,IAAIhC,KAAK+B,MAAMC;MAC7EyB,QAAQ5B;IACV,IACA;MAAC7B,KAAKqD;MAAMpD;MAAMD,KAAK+B,MAAMC;MAAKH;KAAY;AAGhD,UAAMgC,oBAAoBC,cACxB,CAACC,UAAAA;AACCpC,uBAAiB,CAACqC,wBAAyBA,wBAAwBD,MAAME,KAAKtB,SAAYoB,MAAME,EAAE;IACpG,GACA;MAAC9D;KAAS;AAKZ,UAAM+D,YAAYJ,cAAY,MAAA;AAC5BK,MAAAA,WAAU,CAAChE,UAAAA,QAAAA;;;;;;;;;AACX,YAAM4D,QAAQ/C,gBAAgBoD,sBAAqB;AACnDzC,uBAAiBoC,MAAME,EAAE;IAC3B,GAAG;MAAClE;MAAQiB;MAAiBb;KAAS;AAEtC,UAAMkE,eAAeP,cACnB,CAACQ,WAAAA;AACCH,MAAAA,WAAU,CAAChE,UAAAA,QAAAA;;;;;;;;;AACXoE,4BAAsB,MAAA;AACpB,YAAI,UAAUD,UAAUtE,KAAKqD,SAASiB,OAAOjB,MAAM;AACjDrD,eAAKqD,OAAOiB,OAAOjB;AACnB;QACF;AAEA,cAAMtB,QAAQ9B,SAAS,WAAWmD,MAAMoB,OAAOC,QAAOC,SAASJ,OAAOvC,KAAK,CAAA,EAAGC,MAAMsC,OAAOvC;AAC3FxB,yBAAiBwB,OAAOuC,OAAOb,MAAM;MACvC,CAAA;IACF,GACA;MAAClD;MAAgBJ;MAAUH;MAAM6B;MAAa5B;KAAK;AAGrD,UAAM0E,eAAeb,cACnB,CAACc,YAAAA;AACCT,MAAAA,WAAU,CAAChE,UAAAA,QAAAA;;;;;;;;;AACX,UAAIyE,YAAYlD,eAAe;AAC7BC,yBAAiBgB,MAAAA;MACnB;AAEAnC,iBAAWoE,OAAAA;IACb,GACA;MAAClD;MAAelB;MAAUL;KAAS;AAGrC,UAAM0E,aAAaf,cACjB,CAACgB,WAAmBC,YAAAA;AAClBZ,MAAAA,WAAU,CAAChE,UAAAA,QAAAA;;;;;;;;;AAEX,YAAMqD,SAAS;WAAIxD,KAAKsB,WAAWkC;;AACnC,YAAM,CAACwB,KAAAA,IAASxB,OAAOyB,OAAOH,WAAW,CAAA;AACzCtB,aAAOyB,OAAOF,SAAS,GAAGC,KAAAA;AAC1BhF,WAAKsB,WAAWkC,SAASA;IAC3B,GACA;MAACxD,KAAKsB,WAAWkC;MAAQrD;KAAS;AAGpC,UAAM+E,cAAcpB,cAAY,MAAMnC,iBAAiBgB,MAAAA,GAAY,CAAA,CAAE;AAErE,UAAMwC,aAAarB,cACjB,CAACc,YAAAA;AACCjD,uBAAiBgB,MAAAA;AACjB3B,sBAAgBoE,oBAAoBR,OAAAA;IACtC,GACA;MAAC5D;KAAgB;AAGnB,UAAMqE,aAAavB,cACjB,CAACwB,aAAAA;AACC3D,uBAAiBgB,MAAAA;AACjB3B,sBAAgBuE,oBAAoBD,QAAAA;IACtC,GACA;MAACtE;KAAgB;AAGnB,UAAMwE,SAASvE,SAAQ,MAAOhB,SAAS,UAAUwF,aAAa;MAAEpF;MAAOC;IAAK,CAAA,IAAKqC,QAAY;MAACtC;MAAOC;MAAML;KAAK;AAEhH,WACE,gBAAAyF,QAAA,cAACC,OAAAA;MAAIC,MAAK;MAAOC,WAAWC,IAAGhG,UAAAA;OAC5Ba,kBAAkBV,SAAS,YAC1B,gBAAAyF,QAAA,cAACK,QAAQC,MAAI;MAACC,SAAQ;MAAOnG,YAAY;QAAC;QAAwBW,gBAAgB;;OAChF,gBAAAiF,QAAA,cAACK,QAAQG,OAAK,MAAErF,EAAE,2BAAA,CAAA,CAAA,GAMtB,gBAAA6E,QAAA,cAACS,MAAAA;MACCC,UAAAA;MACArG,QAAQ6C;MACR0B,QAAQX;MACRxD,UAAUA,WAAW,mBAAmB;MACxCkG,QAAQhC;MACR5D;MACA6F,QAAQd;QAGV,gBAAAE,QAAA,cAACC,OAAAA;MAAIC,MAAK;MAAOC,WAAWpF,eAAe8F,eAAc;OACvD,gBAAAb,QAAA,cAACc,MAAAA;MAAGX,WAAWC,IAAGW,cAAAA;OAAkB5F,EAAE,cAAA,CAAA,GAEtC,gBAAA6E,QAAA,cAACgB,MAAKV,MAAI;MACRW,OAAO3G,KAAKsB,WAAWkC;MACvBoD,QAAeC,WAAGC,WAAAA;MAClBC,OAAO,CAAChD,UAAUA,MAAME;MACxB+C,QAAQ7G,WAAWwC,SAAYkC;MAC/B1E;OAEC,CAAC,EAAEwG,OAAOnD,OAAM,MACf,gBAAAkC,QAAA,cAAAA,QAAA,UAAA,MACGtF,eAAe,gBAAAsF,QAAA,cAACuB,MAAAA;MAAGpB,WAAU;OAAWhF,EAAE,kBAAA,CAAA,GAC3C,gBAAA6E,QAAA,cAACC,OAAAA;MAAIC,MAAK;MAAOC,WAAWnG;OACzB8D,QAAQ0D,IAAI,CAACnD,UAAAA;AACZ,YAAMoD,SAASpD,MAAMqD,YAAY;AACjC,aACE,gBAAA1B,QAAA,cAACgB,MAAKW,MAAI;QACRC,KAAKvD,MAAME;QACXsD,MAAMxD;QACNjE,YAAYH;QACZ6H,iBAAe9F,kBAAkBqC,MAAME;SAEvC,gBAAAyB,QAAA,cAACC,OAAAA;QACCC,MAAK;QACLC,WAAWC,IAAG2B,cAAa9H,cAAc,qCAAA;SAEzC,gBAAA+F,QAAA,cAACgB,MAAKgB,gBAAc;QAACC,UAAUxH;UAC/B,gBAAAuF,QAAA,cAACgB,MAAKkB,WAAS;QACb9H,YAAYqH,UAAU;QACtBU,SAAS,MAAMhE,kBAAkBE,KAAAA;SAEhCA,MAAM+D,IAAI,GAEb,gBAAApC,QAAA,cAACgB,MAAKqB,YAAU;QACdC,OAAOnH,EAAEsG,SAAS,qBAAqB,kBAAA;QACvCc,eAAad,SAAS,sBAAsB;QAC5Ce,MAAMf,SAAS,4BAA4B;QAC3CgB,UAAU;QACVR,UAAUxH,YAAa,CAACgH,UAAUnG,gBAAgBwC,OAAO4E,UAAU;QACnEP,SAAS,MAAOV,SAAS9B,WAAWtB,MAAM+D,IAAI,IAAI3C,WAAWpB,MAAME,EAAE;UAEtEhE,SAAS,YACR,gBAAAyF,QAAA,cAAAA,QAAA,UAAA,MACE,gBAAAA,QAAA,cAACgB,MAAK2B,kBAAgB;QACpBL,OAAOnH,EAAE,oBAAA;QACTsH,UAAU;QACVR,UAAUxH,YAAYQ,kBAAkBX,KAAKsB,WAAWkC,OAAO4E,UAAU;QACzEP,SAAS,MAAMlD,aAAaZ,MAAME,EAAE;QACpCgE,eAAY;UAEd,gBAAAvC,QAAA,cAAC4C,aAAAA;QACCC,UAAAA;QACAC,SAAQ;QACRR,OAAOnH,EAAE,uBAAuB;UAAE4H,IAAI;QAAK,CAAA;QAC3CP,MACExG,kBAAkBqC,MAAME,KAAK,4BAA4B;QAE3D4D,SAAS,MAAMhE,kBAAkBE,KAAAA;YAKxCrC,kBAAkBqC,MAAME,MAAMhE,SAAS,YACtC,gBAAAyF,QAAA,cAACC,OAAAA;QAAIC,MAAK;QAAOC,WAAU;SACzB,gBAAAH,QAAA,cAACgD,aAAAA;QACCvI,UAAUA,YAAYQ,iBAAiB,mBAAmB;QAC1DW,YAAYN;QACZ+C;QACA7D;QACAmG,QAAQnB;;IAMpB,CAAA,CAAA,CAAA,CAAA,CAAA,GAOT,CAAC/E,YAAY,CAACuB,iBAAiBzB,SAAS,YACvC,gBAAAyF,QAAA,cAACC,OAAAA;MAAIC,MAAK;MAAOC,WAAWpF,eAAe8F,eAAc;OACvD,gBAAAb,QAAA,cAAC4C,aAAAA;MACCJ,MAAK;MACLF,OAAOnH,EAAE,qBAAA;MACTgH,SAAS1H,WAAWwC,SAAYuB;;MAEhCyD,UAAU3H,KAAKsB,WAAWkC,OAAO4E,UAAUO;MAC3C7I,YAAW;;;;;AAMvB,CAAA;AAGF,IAAM2F,eAAe,CAAC,EAAEpF,OAAOC,KAAI,OAAiF;EAClHyB,OAAO,CAAC6G,UAAAA;AACN,UAAMC,eAAe/E,cACnB,CAAC/B,UAAqB6G,MAAME,cAAc,UAAU/G,MAAMC,GAAG,GAC7D;MAAC4G,MAAME;KAAc;AAGvB,WACE,gBAAApD,QAAA,cAACqD,OAAM/C,MAAI,MACT,gBAAAN,QAAA,cAACsD,aAAAA;MAAYhB,OAAOY,MAAMZ;QAC1B,gBAAAtC,QAAA,cAACuD,WAAAA;MAAUC,cAAcN,MAAMO,SAAQ;MAAI9I;MAAcC;MAAY8I,UAAUP;;EAGrF;AACF;",
6
- "names": ["translationKey", "translations", "React", "Button", "Input", "toLocalizedString", "useTranslation", "StackItem", "mx", "ControlPage", "children", "classNames", "props", "StackItem", "Content", "scrollable", "div", "role", "className", "mx", "ControlSection", "title", "description", "ControlSectionHeading", "t", "useTranslation", "translationKey", "h2", "toLocalizedString", "p", "ControlGroupButton", "Button", "ControlGroup", "ControlFrame", "controlItemClasses", "controlItemTitleClasses", "controlItemDescriptionClasses", "ControlItem", "h3", "ControlItemInput", "Input", "Root", "Label", "DescriptionAndValidation", "Description", "ControlFrameItem", "React", "useCallback", "useEffect", "useMemo", "useState", "FormatEnum", "FormatEnums", "formatToType", "log", "useAsyncEffect", "useTranslation", "formatToAdditionalPropertyAttributes", "getFormatSchema", "getSchemaProperties", "sortProperties", "React", "useCallback", "useEffect", "useMemo", "useState", "GeoLocation", "Input", "useTranslation", "safeParseFloat", "React", "Icon", "Input", "Tooltip", "labelSpacing", "errorText", "mx", "InputHeader", "error", "label", "readonly", "Label", "Input", "labelProps", "classNames", "React", "div", "role", "className", "mx", "labelSpacing", "Tooltip", "Trigger", "asChild", "content", "side", "Icon", "icon", "size", "errorText", "GeoPointInput", "type", "label", "readonly", "getStatus", "getValue", "onValueChange", "onBlur", "t", "useTranslation", "translationKey", "status", "error", "geoPoint", "useMemo", "geoLocation", "GeoLocation", "fromGeoPoint", "longitudeText", "setLongitudeText", "useState", "longitude", "toString", "latitudeText", "setLatitudeText", "latitude", "useEffect", "location", "handleCoordinateChange", "useCallback", "coordinateType", "setText", "event", "inputText", "target", "value", "coord", "safeParseFloat", "undefined", "isNaN", "currentLocation", "newLocation", "newValue", "toGeoPoint", "React", "Input", "Root", "validationValence", "InputHeader", "div", "role", "className", "Label", "TextInput", "step", "min", "max", "disabled", "onChange", "React", "useCallback", "useEffect", "useRef", "useState", "PublicKey", "IconButton", "Input", "Tag", "useTranslation", "List", "HuePicker", "hues", "subtleHover", "SelectOptionInput", "type", "label", "readonly", "getStatus", "getValue", "onValueChange", "selected", "setSelectedId", "useState", "isNewOption", "setIsNewOption", "inputRef", "useRef", "t", "useTranslation", "translationKey", "status", "error", "options", "useEffect", "undefined", "randomHue", "usedHues", "Set", "map", "option", "color", "unusedHues", "hues", "filter", "hue", "has", "length", "Math", "floor", "random", "lastThree", "slice", "availableHues", "handleAdd", "useCallback", "newId", "PublicKey", "truncate", "newOption", "id", "title", "handleDelete", "newOptions", "handleMove", "from", "to", "removed", "splice", "handleClick", "current", "handleTitleChange", "e", "o", "target", "value", "handleKeyDown", "key", "handleColorChange", "focus", "React", "Input", "Root", "validationValence", "InputHeader", "div", "role", "List", "items", "isItem", "item", "onMove", "className", "Item", "classNames", "subtleHover", "aria-expanded", "ItemDragHandle", "disabled", "ItemTitle", "onClick", "Tag", "palette", "IconButton", "iconOnly", "variant", "ns", "icon", "Label", "TextInput", "placeholder", "ref", "onChange", "onKeyDown", "data-no-submit", "HuePicker", "React", "Input", "mx", "safeParseFloat", "gridCols", "TupleInput", "binding", "type", "label", "readonly", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "values", "React", "Input", "Root", "validationValence", "InputHeader", "div", "className", "mx", "length", "map", "prop", "TextInput", "key", "disabled", "value", "onChange", "event", "safeParseFloat", "target", "React", "useCallback", "useEffect", "useRef", "Input", "Select", "useTranslation", "TextInput", "type", "label", "inputOnly", "readonly", "placeholder", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "React", "p", "Input", "Root", "validationValence", "InputHeader", "disabled", "value", "onChange", "event", "target", "Validation", "NumberInput", "DescriptionAndValidation", "BooleanInput", "checked", "Boolean", "t", "useTranslation", "translationKey", "Switch", "onCheckedChange", "SelectInput", "options", "handleValueChange", "useCallback", "find", "optionValue", "String", "Select", "TriggerButton", "classNames", "Portal", "Content", "Viewport", "map", "Option", "key", "Arrow", "MarkdownInput", "textareaRef", "useRef", "adjustHeight", "textarea", "current", "style", "blockSize", "scrollHeight", "useEffect", "TextArea", "ref", "resize", "spellCheck", "useFocusFinders", "React", "useCallback", "useEffect", "useRef", "cardDialogOverflow", "cardSpacing", "React", "IconButton", "useTranslation", "cardSpacing", "mx", "React", "createContext", "useCallback", "useContext", "useEffect", "useMemo", "raise", "getValue", "createJsonPath", "SchemaAST", "useCallback", "useEffect", "useMemo", "useState", "getValue", "setValue", "createJsonPath", "fromEffectValidationPath", "invariant", "log", "validateSchema", "useForm", "schema", "initialValues", "onValuesChanged", "onValidate", "onValid", "onSave", "isTypeLiteral", "ast", "values", "setValues", "touched", "setTouched", "createKeySet", "changed", "setChanged", "errors", "setErrors", "saving", "setSaving", "validate", "length", "validatedValues", "flatMap", "valid", "schemaDirty", "setSchemaDirty", "formIsValid", "Object", "keys", "canSave", "entries", "some", "path", "isTouched", "errorPath", "startsWith", "handleSave", "getStatus", "jsonPath", "Array", "isArray", "matchingError", "find", "status", "undefined", "error", "getFormValue", "onValueChange", "type", "value", "parsedValue", "parseFloat", "err", "catch", "newValues", "newChanged", "isValid", "onTouched", "obj", "reduce", "acc", "key", "result", "message", "useCallback", "Obj", "getObjectDXN", "Filter", "isNonNullable", "useRefQueryLookupHandler", "space", "useCallback", "typeInfo", "query", "db", "Filter", "typename", "objects", "run", "map", "object", "dxn", "getObjectDXN", "undefined", "item", "label", "Obj", "getLabel", "id", "filter", "isNonNullable", "useCallback", "useEffect", "useState", "log", "useQueryRefOptions", "refTypeInfo", "onQueryRefOptions", "options", "setOptions", "loading", "setLoading", "state", "setState", "update", "fetchOptions", "fetchedOptions", "map", "option", "dxn", "toString", "id", "label", "hue", "error", "FormContext", "createContext", "undefined", "useFormContext", "useContext", "raise", "Error", "useFormValues", "path", "values", "formValues", "jsonPath", "createJsonPath", "getValue", "useInputProps", "getStatus", "getFormValue", "onValueChange", "onTouched", "stablePath", "useMemo", "Array", "isArray", "join", "type", "value", "onBlur", "FormProvider", "children", "formRef", "autoSave", "formOptions", "form", "useForm", "handleKeyDown", "useCallback", "event", "keyIsEnter", "key", "modifierUsed", "ctrlKey", "altKey", "metaKey", "shiftKey", "inputIsTextarea", "target", "tagName", "toLowerCase", "inputOptOut", "hasAttribute", "closest", "shouldSubmitRegularInput", "shouldSubmitTextarea", "canSave", "handleSave", "formIsValid", "blur", "useEffect", "current", "formElement", "addEventListener", "removeEventListener", "React", "Provider", "FormActions", "readonly", "onCancel", "outerSpacing", "t", "useTranslation", "translationKey", "canSave", "handleSave", "useFormContext", "React", "div", "role", "className", "mx", "cardSpacing", "IconButton", "data-testid", "icon", "label", "onClick", "type", "disabled", "Function", "Schema", "SchemaAST", "StringEffect", "React", "Component", "forwardRef", "useMemo", "createJsonPath", "findNode", "getDiscriminatedType", "isDiscriminatedUnion", "mx", "getSchemaProperties", "isTruthy", "FormatEnum", "GeoLocation", "TypeEnum", "parseValue", "type", "format", "value", "undefined", "parseScalar", "TypeEnum", "Boolean", "lowercaseValue", "toLowerCase", "Number", "cleaned", "replace", "num", "isNaN", "String", "Ref", "FormatEnum", "Percent", "Currency", "Markdown", "Error", "DateTime", "Date", "Time", "Timestamp", "date", "getTime", "GeoPoint", "parts", "split", "length", "lat", "parseFloat", "long", "GeoLocation", "toGeoPoint", "latitude", "longitude", "cellClassesForFieldType", "Duration", "JSON", "DID", "pathNotUniqueError", "path", "message", "format", "formatDate", "FormatEnum", "GeoLocation", "TypeEnum", "formatForDisplay", "type", "format", "value", "locale", "undefined", "formatScalar", "TypeEnum", "Boolean", "toLocaleString", "toUpperCase", "Number", "String", "Ref", "FormatEnum", "Percent", "Currency", "style", "currency", "minimumFractionDigits", "maximumFractionDigits", "Date", "formatDate", "error", "Time", "DateTime", "GeoPoint", "Array", "isArray", "length", "every", "isFinite", "latitude", "longitude", "GeoLocation", "fromGeoPoint", "formatForEditing", "date", "toISOString", "split", "FormatEnum", "ReferenceAnnotationId", "findAnnotation", "SchemaAST", "findNode", "findArrayElementType", "ast", "tupleType", "findNode", "isTupleType", "rest", "type", "getRefProps", "property", "ast", "format", "array", "elementType", "findArrayElementType", "annotation", "findAnnotation", "ReferenceAnnotationId", "isArray", "FormatEnum", "Ref", "undefined", "Function", "SchemaAST", "String", "React", "Fragment", "useCallback", "SimpleType", "findNode", "getDiscriminatedType", "isDiscriminatedUnion", "invariant", "IconButton", "useTranslation", "getSchemaProperties", "ArrayField", "property", "readonly", "path", "inputProps", "Custom", "lookupComponent", "t", "useTranslation", "translationKey", "ast", "name", "type", "title", "values", "useFormValues", "invariant", "Array", "isArray", "join", "label", "pipe", "capitalize", "elementType", "findArrayElementType", "getDefaultObjectValue", "typeNode", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "isTypeLiteral", "Object", "fromEntries", "getSchemaProperties", "map", "prop", "defaultValue", "getDefaultValue", "SimpleType", "handleAdd", "useCallback", "onValueChange", "handleRemove", "index", "newValues", "filter", "_", "i", "length", "React", "InputHeader", "div", "role", "className", "_value", "field", "FormField", "array", "inline", "Fragment", "key", "IconButton", "icon", "iconOnly", "onClick", "classNames", "FormatEnum", "getInputComponent", "type", "format", "FormatEnum", "GeoPoint", "GeoPointInput", "Markdown", "MarkdownInput", "TextInput", "NumberInput", "BooleanInput", "React", "useCallback", "useMemo", "Expando", "Ref", "ReferenceAnnotationId", "getTypeAnnotation", "findAnnotation", "DXN", "DxAnchor", "DxTagPickerItem", "Button", "Icon", "Input", "useTranslation", "descriptionText", "mx", "isNonNullable", "React", "forwardRef", "useCallback", "useMemo", "useState", "Icon", "Popover", "useTranslation", "Combobox", "ObjectPickerContent", "forwardRef", "options", "selectedIds", "createSchema", "createOptionLabel", "createOptionIcon", "createInitialValuePath", "onSelect", "onCreate", "props", "ref", "t", "useTranslation", "translationKey", "searchString", "setSearchString", "useState", "showForm", "setShowForm", "handleFormSave", "useCallback", "values", "handleFormCancel", "handleClick", "event", "target", "closest", "stopPropagation", "preventDefault", "handleKeyDown", "key", "currentTarget", "querySelector", "labelById", "useMemo", "reduce", "acc", "option", "id", "toLowerCase", "label", "React", "Combobox", "Content", "filter", "value", "search", "includes", "onClickCapture", "onKeyDownCapture", "Popover", "Viewport", "Form", "schema", "onSave", "onCancel", "testId", "Input", "placeholder", "onValueChange", "autoFocus", "List", "map", "Item", "classNames", "span", "className", "Icon", "icon", "length", "ns", "text", "Arrow", "displayName", "ObjectPicker", "Root", "Trigger", "VirtualTrigger", "isRefSnapShot", "val", "RefField", "type", "label", "readonly", "placeholder", "inputOnly", "array", "ast", "getValue", "createOptionLabel", "createOptionIcon", "onBlur", "onCreate", "createSchema", "createInitialValuePath", "onQueryRefOptions", "onValueChange", "restInputProps", "t", "useTranslation", "translationKey", "refTypeInfo", "useMemo", "findAnnotation", "ReferenceAnnotationId", "undefined", "options", "availableOptions", "update", "updateOptions", "loading", "_loading", "useQueryRefOptions", "typename", "getTypeAnnotation", "Expando", "React", "RefFieldFallback", "handleGetValue", "useCallback", "formValue", "unknownToRefOption", "isRef", "Ref", "dxnString", "dxn", "toString", "matchingOption", "find", "option", "id", "Array", "isArray", "map", "filter", "isNonNullable", "handleUpdate", "ids", "length", "refs", "item", "DXN", "parse", "fromDXN", "handleCreate", "values", "status", "error", "getStatus", "items", "selectedIds", "i", "toggleSelect", "nextIds", "includes", "x", "Input", "Root", "validationValence", "InputHeader", "div", "data-no-submit", "p", "className", "mx", "descriptionText", "DxAnchor", "key", "refid", "rootclassname", "ObjectPicker", "Trigger", "asChild", "Button", "variant", "classNames", "role", "DxTagPickerItem", "itemId", "hue", "removeLabel", "onItemClick", "event", "action", "span", "count", "Icon", "size", "icon", "Content", "onSelect", "DescriptionAndValidation", "handleOnValueChange", "_type", "tryParse", "TextInput", "FormField", "property", "path", "readonly", "inline", "projection", "onQueryRefOptions", "createOptionLabel", "createOptionIcon", "onCreate", "createSchema", "createInitialValuePath", "lookupComponent", "Custom", "ast", "name", "type", "format", "title", "description", "options", "examples", "array", "inputProps", "useInputProps", "label", "useMemo", "pipe", "capitalize", "placeholder", "length", "FoundComponent", "prop", "schema", "make", "jsonPath", "createJsonPath", "CustomComponent", "React", "inputOnly", "refProps", "getRefProps", "RefField", "isArray", "ArrayField", "InputComponent", "getInputComponent", "SelectInput", "map", "option", "value", "String", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "getValue", "isTypeLiteral", "h3", "className", "mx", "FormFields", "forwardRef", "classNames", "filter", "sort", "props", "values", "useFormValues", "properties", "getSchemaProperties", "fieldProjections", "getFieldProjections", "hiddenProperties", "Set", "getHiddenProperties", "visibleProps", "has", "orderedProps", "fieldProjection", "fieldPath", "field", "find", "p", "push", "projectionPaths", "fp", "remainingProps", "filtered", "a", "b", "indexOf", "fields", "div", "role", "ref", "ErrorBoundary", "key", "isTruthy", "Component", "getDerivedStateFromError", "error", "state", "undefined", "componentDidUpdate", "prevProps", "resetError", "render", "span", "join", "children", "setState", "Form", "classNames", "id", "testId", "values", "initialValues", "autoFocus", "readonly", "autoSave", "outerSpacing", "schema", "onCancel", "onValuesChanged", "onValidate", "onSave", "props", "formRef", "useRef", "findFirstFocusable", "useFocusFinders", "useEffect", "current", "firstFocusable", "focus", "handleValid", "useCallback", "meta", "React", "FormProvider", "onValid", "div", "role", "className", "data-testid", "FormFields", "ref", "cardSpacing", "cardDialogOverflow", "FormActions", "FieldEditor", "readonly", "projection", "field", "registry", "onSave", "onCancel", "outerSpacing", "t", "useTranslation", "translationKey", "props", "setProps", "useState", "getFieldProjection", "id", "useEffect", "schemas", "setSchemas", "useAsyncEffect", "subscription", "query", "subscribe", "results", "fire", "run", "referenceSchema", "setReferenceSchema", "find", "schema", "typename", "fieldSchema", "setFieldSchema", "getFormatSchema", "format", "handleValuesChanged", "useCallback", "_props", "prev", "newSchema", "type", "formatToType", "additionalProps", "formatToAdditionalPropertyAttributes", "handleValidate", "property", "fields", "f", "path", "message", "handleSave", "setFieldProjection", "handleCancel", "requestAnimationFrame", "custom", "useMemo", "React", "SelectInput", "options", "FormatEnums", "filter", "value", "FormatEnum", "None", "map", "label", "getSchemaProperties", "ast", "sort", "sortProperties", "p", "name", "SelectOptionInput", "propIsNotType", "log", "warn", "Form", "key", "autoFocus", "values", "onValuesChanged", "onValidate", "Custom", "Array", "Match", "Option", "Schema", "React", "forwardRef", "useCallback", "useImperativeHandle", "useMemo", "useState", "QueryAST", "EchoSchema", "Format", "isMutable", "toJsonSchema", "Filter", "Query", "invariant", "Callout", "IconButton", "Input", "useTranslation", "QueryForm", "List", "cardSpacing", "inputTextLabel", "mx", "subtleHover", "FieldSchema", "ProjectionModel", "VIEW_FIELD_LIMIT", "getTypenameFromQuery", "listGrid", "listItemGrid", "ViewEditor", "forwardRef", "classNames", "schema", "view", "mode", "registry", "readonly", "showHeading", "types", "tags", "onQueryChanged", "onDelete", "outerSpacing", "forwardedRef", "schemaReadonly", "isMutable", "t", "useTranslation", "translationKey", "projectionModel", "useMemo", "jsonSchema", "EchoSchema", "toJsonSchema", "ProjectionModel", "projection", "JSON", "stringify", "useImperativeHandle", "expandedField", "setExpandedField", "useState", "queueTarget", "value", "query", "ast", "pipe", "when", "type", "options", "fromNullable", "queues", "flatMap", "head", "getOrUndefined", "orElse", "undefined", "viewSchema", "base", "Struct", "Format", "URL", "annotations", "title", "QueryAST", "Query", "name", "optional", "String", "fields", "target", "mutable", "viewValues", "getTypenameFromQuery", "handleToggleField", "useCallback", "field", "prevExpandedFieldId", "id", "handleAdd", "invariant", "createFieldProjection", "handleUpdate", "values", "requestAnimationFrame", "select", "Filter", "typename", "handleDelete", "fieldId", "handleMove", "fromIndex", "toIndex", "moved", "splice", "handleClose", "handleHide", "hideFieldProjection", "handleShow", "property", "showFieldProjection", "custom", "customFields", "React", "div", "role", "className", "mx", "Callout", "Root", "valence", "Title", "Form", "autoSave", "onSave", "Custom", "cardSpacing", "h2", "inputTextLabel", "List", "items", "isItem", "is", "FieldSchema", "getId", "onMove", "h3", "map", "hidden", "visible", "Item", "key", "item", "aria-expanded", "subtleHover", "ItemDragHandle", "disabled", "ItemTitle", "onClick", "path", "ItemButton", "label", "data-testid", "icon", "autoHide", "length", "ItemDeleteButton", "IconButton", "iconOnly", "variant", "ns", "FieldEditor", "VIEW_FIELD_LIMIT", "props", "handleChange", "onValueChange", "Input", "InputHeader", "QueryForm", "initialQuery", "getValue", "onChange"]
3
+ "sources": ["../../../src/components/FieldEditor/FieldEditor.tsx", "../../../src/util/field.ts", "../../../src/util/field-type.ts", "../../../src/util/formatting.ts", "../../../src/util/properties.ts", "../../../src/util/refs.ts", "../../../src/components/Form/fields/ArrayField.tsx", "../../../src/components/Form/Form.tsx", "../../../src/hooks/useFormHandler.ts", "../../../src/hooks/useKeyHandler.tsx", "../../../src/components/Form/FormFieldComponent.tsx", "../../../src/components/Form/FormTooltipsContext.ts", "../../../src/components/Form/FormFieldSet.tsx", "../../../src/components/Form/FormField.tsx", "../../../src/components/Form/Layout/annotation.ts", "../../../src/components/Form/Layout/FormLayout.tsx", "../../../src/components/Form/Layout/parser.ts", "../../../src/components/Form/fields/BooleanField.tsx", "../../../src/components/Form/fields/DateField.tsx", "../../../src/components/Form/fields/GeoPointField.tsx", "../../../src/components/Form/fields/MarkdownField.tsx", "../../../src/components/Form/fields/NumberField.tsx", "../../../src/components/Form/fields/RefField.tsx", "../../../src/components/ObjectPicker/ObjectPicker.tsx", "../../../src/components/Form/fields/SelectField.tsx", "../../../src/components/Form/fields/SelectOptionField.tsx", "../../../src/components/Form/fields/TextField.tsx", "../../../src/components/Form/fields/TextAreaField.tsx", "../../../src/components/Form/fields/TupleField.tsx", "../../../src/components/ObjectForm/ObjectForm.tsx", "../../../src/components/ObjectProperties/ObjectProperties.tsx", "../../../src/components/ObjectTree/ObjectTree.tsx", "../../../src/components/Settings/Settings.tsx", "../../../src/components/Settings/SettingsFieldSet.tsx", "../../../src/components/Settings/SettingsItem.tsx", "../../../src/components/Settings/SettingsSelectField.tsx", "../../../src/components/ViewEditor/ViewEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Obj, type SchemaRegistry, Type, type View } from '@dxos/echo';\nimport { Format, FormatEnums, formatToType } from '@dxos/echo/internal';\nimport { type SchemaProperty } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport {\n type ProjectionModel,\n type PropertyType,\n formatToAdditionalPropertyAttributes,\n getFormatSchema,\n} from '@dxos/schema';\n\nimport { translationKey } from '#translations';\n\nimport { getFormProperties } from '../../util';\nimport { Form, type FormFieldMap, type FormRootProps, SelectField, SelectOptionField } from '../Form';\n\nexport type FieldEditorProps = {\n projection: ProjectionModel;\n field: View.FieldType;\n registry?: SchemaRegistry.SchemaRegistry;\n view?: Obj.Unknown;\n onSave: () => void;\n onCancel?: () => void;\n} & Pick<FormRootProps<any>, 'readonly'>;\n\n/**\n * Displays a Form representing the metadata for a given `Field` and `View`.\n */\nexport const FieldEditor = ({ readonly, projection, field, registry, view, onSave, onCancel }: FieldEditorProps) => {\n const { t } = useTranslation(translationKey);\n const [props, setProps] = useState<PropertyType>(projection.getFieldProjection(field.id).props);\n useEffect(() => setProps(projection.getFieldProjection(field.id).props), [field, projection]);\n\n const [schemas, setSchemas] = useState<Type.Type[]>([]);\n useAsyncEffect(async () => {\n if (!registry) {\n return;\n }\n\n const subscription = registry.query().subscribe((query) => setSchemas(query.results), { fire: true });\n\n // TODO(dmaretskyi): This shouldn't be needed.\n const schemas = await registry.query().run();\n setSchemas(schemas);\n\n return () => subscription?.();\n }, [registry]);\n\n const [referenceSchema, setReferenceSchema] = useState<Type.Type>();\n useEffect(() => {\n setReferenceSchema(schemas.find((schema) => Type.getTypename(schema) === props?.referenceSchema));\n }, [schemas, props?.referenceSchema]);\n\n // TODO(burdon): Need to wrap otherwise throws error:\n // Class constructor SchemaClass cannot be invoked without 'new'.\n const [{ fieldSchema }, setFieldSchema] = useState({ fieldSchema: getFormatSchema(props?.format) });\n\n const fieldMap = useMemo<FormFieldMap>(\n () => ({\n ['format' satisfies keyof PropertyType]: (props) => (\n <SelectField\n {...props}\n options={FormatEnums.filter((value) => value !== Format.TypeFormat.None).map((value) => ({\n value,\n label: t(`format.${value}.label`),\n }))}\n />\n ),\n ['referenceSchema' satisfies keyof PropertyType]: (props) => (\n <SelectField\n {...props}\n options={schemas\n .map((schema) => Type.getTypename(schema))\n .filter((typename): typename is string => typename != null)\n .map((typename) => ({\n value: typename,\n }))}\n />\n ),\n ['referencePath' satisfies keyof PropertyType]: (props) => (\n <SelectField\n {...props}\n options={\n referenceSchema\n ? getFormProperties(Type.getSchema(referenceSchema).ast)\n .sort((a, b) => a.name.toString().localeCompare(b.name.toString()))\n .map((p) => ({ value: p.name.toString() }))\n : []\n }\n />\n ),\n ['options' satisfies keyof PropertyType]: (props) => <SelectOptionField {...props} />,\n }),\n [t, schemas, referenceSchema],\n );\n\n const propIsNotType = useCallback((props: SchemaProperty[]) => props.filter((prop) => prop.name !== 'type'), []);\n\n const handleValuesChanged = useCallback<NonNullable<FormRootProps<PropertyType>['onValuesChanged']>>(\n (_props) => {\n // TODO(Zaymon): Workout why old and new format values are the same sometimes even when selecting novel format values.\n setFieldSchema((prev) => {\n const fieldSchema = getFormatSchema(_props.format);\n if (prev.fieldSchema === fieldSchema) {\n return prev;\n }\n return { fieldSchema };\n });\n\n setReferenceSchema((prev) => {\n if (_props.referenceSchema !== (prev ? Type.getTypename(prev) : undefined)) {\n const newSchema = schemas.find((schema) => Type.getTypename(schema) === _props.referenceSchema);\n if (newSchema) {\n return newSchema;\n }\n }\n return prev;\n });\n\n setProps((props) => {\n const type = formatToType[_props.format as keyof typeof formatToType];\n const additionalProps =\n formatToAdditionalPropertyAttributes[_props.format as keyof typeof formatToAdditionalPropertyAttributes];\n if (props.type !== type) {\n return { ...props, ..._props, ...additionalProps, type } as PropertyType;\n }\n\n return _props as PropertyType;\n });\n },\n [schemas, props.format, props.referenceSchema],\n );\n\n const handleValidate = useCallback<NonNullable<FormRootProps<PropertyType>['onValidate']>>(\n ({ property }) => {\n if (property && projection.getFields().find((f) => f.path === property && f.path !== field.path)) {\n return [\n {\n path: 'property',\n message: `property is not unique: '${property}'`,\n },\n ];\n }\n },\n [projection.getFields(), field],\n );\n\n const handleSave = useCallback<NonNullable<FormRootProps<PropertyType>['onSave']>>(\n (props) => {\n if (view) {\n Obj.update(view, () => {\n projection.setFieldProjection({ field, props });\n });\n } else {\n projection.setFieldProjection({ field, props });\n }\n onSave();\n },\n [projection, field, view, onSave],\n );\n\n const handleCancel = useCallback<NonNullable<FormRootProps<PropertyType>['onCancel']>>(() => {\n onSave();\n // Need to defer to allow form to close.\n requestAnimationFrame(() => onCancel?.());\n }, [onSave]);\n\n if (!fieldSchema) {\n log.warn('invalid format', { props });\n return null;\n }\n\n return (\n <Form.Root<PropertyType>\n key={field.id}\n fieldMap={fieldMap}\n autoFocus\n readonly={readonly}\n schema={fieldSchema}\n values={props}\n exclude={propIsNotType}\n sort={['property', 'format']}\n onValuesChanged={handleValuesChanged}\n onValidate={handleValidate}\n onSave={handleSave}\n onCancel={handleCancel}\n >\n <Form.Content>\n <Form.FieldSet />\n <Form.Actions />\n </Form.Content>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Format, GeoLocation, TypeEnum } from '@dxos/echo/internal';\nimport { type ValidationError } from '@dxos/schema';\n\n/**\n * Parse value by field value type.\n * Used by Table, Sheet, etc.\n * Handles various data types including booleans, numbers, dates, and strings.\n * Returns undefined for empty or null inputs.\n */\nexport type ParseProps = {\n type?: TypeEnum;\n format?: Format.TypeFormat;\n value: any;\n};\n\nexport const parseValue = ({ type, format, value }: ParseProps) => {\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n\n const parseScalar = (type?: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean: {\n if (typeof value === 'string') {\n const lowercaseValue = value.toLowerCase();\n if (lowercaseValue === '0' || lowercaseValue === 'false') {\n return false;\n } else if (lowercaseValue === '1' || lowercaseValue === 'true') {\n return true;\n }\n }\n return Boolean(value);\n }\n\n case TypeEnum.Number: {\n const cleaned = typeof value === 'string' ? value.replace(/[^0-9.-]+/g, '') : value;\n const num = Number(cleaned);\n return Number.isNaN(num) ? null : num;\n }\n\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default: {\n return value;\n }\n }\n };\n\n if (!format) {\n return parseScalar(type);\n }\n\n switch (format) {\n case Format.TypeFormat.Boolean:\n return parseScalar(TypeEnum.Boolean);\n\n case Format.TypeFormat.Number:\n case Format.TypeFormat.Percent:\n case Format.TypeFormat.Currency:\n return parseScalar(TypeEnum.Number);\n\n case Format.TypeFormat.String:\n case Format.TypeFormat.Markdown: {\n return parseScalar(TypeEnum.String);\n }\n\n case Format.TypeFormat.Ref:\n throw new Error(`unexpected format: ${Format.TypeFormat.Ref}`);\n\n case Format.TypeFormat.DateTime:\n case Format.TypeFormat.Date:\n case Format.TypeFormat.Time:\n case Format.TypeFormat.Timestamp: {\n const date = new Date(value as string | number);\n return isNaN(date.getTime()) ? null : date;\n }\n\n case Format.TypeFormat.GeoPoint: {\n // Parse string in format \"lat,long\" to GeoPoint [longitude, latitude].\n if (typeof value === 'string') {\n // Only keep digits, decimal points, minus signs, and commas.\n const cleaned = value.replace(/[^0-9.,-]+/g, '');\n const parts = cleaned.split(',');\n if (parts.length === 2) {\n const lat = parseFloat(parts[0]);\n const long = parseFloat(parts[1]);\n if (!isNaN(lat) && !isNaN(long)) {\n return GeoLocation.toGeoPoint({ latitude: lat, longitude: long });\n }\n }\n }\n\n return [0, 0];\n }\n\n default: {\n return value;\n }\n }\n};\n\n// TODO(burdon): Type and format.\nexport type CellClassesForFieldTypeProps = {\n type?: TypeEnum;\n format?: Format.TypeFormat;\n};\n\nexport const cellClassesForFieldType = ({ type, format }: CellClassesForFieldTypeProps): string[] | undefined => {\n switch (format || type) {\n case Format.TypeFormat.Markdown:\n return undefined;\n case Format.TypeFormat.Time:\n case Format.TypeFormat.Timestamp:\n case Format.TypeFormat.DateTime:\n case Format.TypeFormat.Date:\n case Format.TypeFormat.Duration:\n return ['font-mono', 'text-right'];\n case Format.TypeFormat.Currency:\n return ['text-right'];\n case Format.TypeFormat.JSON:\n case Format.TypeFormat.DID:\n return ['font-mono'];\n case TypeEnum.Number:\n case TypeEnum.Boolean:\n return ['text-right', 'font-mono'];\n case TypeEnum.String:\n return undefined;\n case TypeEnum.Ref:\n return undefined;\n default:\n return undefined;\n }\n};\n\n// TODO(ZaymonFC): How to do this with translations?\nexport const pathNotUniqueError = (path: string): ValidationError => ({\n path: 'path',\n message: `'${path}' is already present`,\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { getAnnotation, isLiteralUnion } from '@dxos/effect';\n\n/**\n * Detected field type for a schema property.\n */\nexport type SettingsFieldType = 'boolean' | 'string' | 'number' | 'select' | 'struct';\n\nexport type SelectOption = {\n value: string | number;\n label?: string;\n};\n\n/**\n * Detect the field type from an Effect Schema AST node.\n */\nexport const detectFieldType = (ast: SchemaAST.AST): SettingsFieldType | undefined => {\n if (isLiteralUnion(ast)) {\n return 'select';\n }\n if (SchemaAST.isTypeLiteral(ast)) {\n return 'struct';\n }\n\n switch (ast._tag) {\n case 'BooleanKeyword':\n return 'boolean';\n case 'StringKeyword':\n return 'string';\n case 'NumberKeyword':\n return 'number';\n }\n\n return undefined;\n};\n\n/**\n * Extract select options from a literal union AST node.\n * Reads title annotations from individual literals for labels.\n */\nexport const getSelectOptionsFromAst = (ast: SchemaAST.AST): SelectOption[] | undefined => {\n if (!isLiteralUnion(ast)) {\n return undefined;\n }\n\n return (ast as SchemaAST.Union<SchemaAST.Literal>).types.flatMap((literalNode) => {\n const value = literalNode.literal;\n if (typeof value !== 'string' && typeof value !== 'number') {\n return [];\n }\n const title = getAnnotation<string>(SchemaAST.TitleAnnotationId, false)(literalNode);\n const label = title ?? (typeof value === 'string' ? value.charAt(0).toUpperCase() + value.slice(1) : String(value));\n return [{ value, label }];\n });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { format as formatDate } from 'date-fns/format';\n\nimport { Format, GeoLocation, TypeEnum } from '@dxos/echo/internal';\n\ntype ValueFormatProps = {\n type: TypeEnum;\n format?: Format.TypeFormat | undefined;\n value: any;\n locale?: string | undefined;\n};\n\n/**\n * Format value by type.\n * Used by Table, Sheet, etc.\n */\n// TODO(burdon): Move to react-ui-form.\n// TODO(burdon): Formatting is different from kind format (e.g., percent is not a data format).\nexport const formatForDisplay = ({ type, format, value, locale = undefined }: ValueFormatProps): string => {\n const formatScalar = (type: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean:\n return (value as boolean).toLocaleString().toUpperCase();\n case TypeEnum.Number:\n return value.toLocaleString(locale);\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default: {\n return String(value);\n }\n }\n };\n\n if (!format) {\n return formatScalar(type);\n }\n\n switch (format) {\n case Format.TypeFormat.Boolean: {\n return formatScalar(TypeEnum.Boolean);\n }\n case Format.TypeFormat.Number: {\n return formatScalar(TypeEnum.Number);\n }\n case Format.TypeFormat.String:\n case Format.TypeFormat.Ref: {\n return formatScalar(TypeEnum.String);\n }\n case Format.TypeFormat.Percent: {\n return `${(value as number) * 100}%`;\n }\n case Format.TypeFormat.Currency: {\n // TODO(burdon): Get from property annotation.\n return (value as number).toLocaleString(locale, {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n case Format.TypeFormat.Date: {\n try {\n return formatDate(new Date(value as number), 'yyyy-MM-dd');\n } catch (error) {\n return 'Invalid Date';\n }\n }\n case Format.TypeFormat.Time: {\n try {\n return formatDate(new Date(value as number), 'HH:mm:ss');\n } catch (error) {\n return 'Invalid Time';\n }\n }\n case Format.TypeFormat.DateTime: {\n try {\n return formatDate(new Date(value as number), 'yyyy-MM-dd HH:mm:ss');\n } catch (error) {\n return 'Invalid DateTime';\n }\n }\n case Format.TypeFormat.GeoPoint: {\n if (value === null || value === undefined) {\n return '';\n }\n\n // For GeoPoint format [longitude, latitude].\n if (Array.isArray(value) && value.length >= 2 && value.every(Number.isFinite)) {\n const { latitude, longitude } = GeoLocation.fromGeoPoint(value as [number, number]);\n return `${latitude},${longitude}`;\n }\n\n return String(value);\n }\n default: {\n if (value === null || value === 'undefined') {\n return '';\n }\n return String(value);\n }\n }\n};\n\nexport const formatForEditing = ({ type, format, value, locale = undefined }: ValueFormatProps): string => {\n const formatScalar = (type: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean:\n case TypeEnum.Number:\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default:\n return String(value);\n }\n };\n\n if (!format) {\n return formatScalar(type);\n }\n\n switch (format) {\n case Format.TypeFormat.Boolean:\n case Format.TypeFormat.Number:\n case Format.TypeFormat.String:\n case Format.TypeFormat.Ref: {\n return formatScalar(type);\n }\n case Format.TypeFormat.Percent: {\n return String(value * 100);\n }\n case Format.TypeFormat.Currency: {\n return String(value);\n }\n case Format.TypeFormat.DateTime: {\n const date = new Date(value as number);\n return date.toISOString();\n }\n case Format.TypeFormat.Date: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[0];\n }\n case Format.TypeFormat.Time: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[1].split('.')[0];\n }\n case Format.TypeFormat.GeoPoint: {\n // Handle null or undefined\n if (value === null || value === undefined) {\n return '';\n }\n\n // For GeoPoint format [longitude, latitude].\n if (Array.isArray(value) && value.length >= 2 && value.every(Number.isFinite)) {\n const { latitude, longitude } = GeoLocation.fromGeoPoint(value as [number, number]);\n return `${latitude},${longitude}`;\n }\n\n return String(value);\n }\n\n default: {\n return String(value);\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { Annotation } from '@dxos/echo';\nimport { type SchemaProperty, getProperties } from '@dxos/effect';\n\n/**\n * Get the property types of an AST and filter out properties that are not form inputs.\n *\n * The `FormInputAnnotation` is read from the raw property signature's AST (before\n * `encodedBoundAST` is applied by `getProperties`), because `encodedBoundAST` strips\n * annotations from non-keyword inner types (e.g., `Schema.Struct`, `Schema.Array`).\n * Without this, fields like `Routine.input` (a JsonSchema struct) annotated\n * `FormInputAnnotation.set(false)` would still render in the form.\n *\n * For optional fields, `prop.type` is the union `T | undefined` — the annotation\n * lives on the inner `T`. Unwrap before reading so that the conventional pattern\n * `Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional)` works.\n */\nexport const getFormProperties = (ast: SchemaAST.AST): SchemaProperty[] => {\n const hidden = new Set(\n SchemaAST.getPropertySignatures(ast)\n .filter((prop) => {\n // Unwrap `T | undefined` for optional fields so the inner annotation is visible.\n const type =\n prop.isOptional && SchemaAST.isUnion(prop.type)\n ? (prop.type.types.find((t) => t._tag !== 'UndefinedKeyword') ?? prop.type)\n : prop.type;\n return Annotation.FormInputAnnotation.getFromAst(type).pipe(Option.getOrElse(() => true)) === false;\n })\n .map((prop) => prop.name),\n );\n return getProperties(ast).filter((prop) => !hidden.has(prop.name));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as SchemaAST from 'effect/SchemaAST';\n\nimport { Ref } from '@dxos/echo';\nimport { type ReferenceAnnotationValue, ReferenceAnnotationId } from '@dxos/echo/internal';\nimport { findAnnotation, getArrayElementType, isArrayType } from '@dxos/effect';\n\ntype RefProps = {\n ast: SchemaAST.AST;\n isArray: boolean;\n typename?: string;\n};\n\nexport const getRefProps = (ast: SchemaAST.AST): RefProps | undefined => {\n // Array of references.\n if (isArrayType(ast)) {\n const elementType = getArrayElementType(ast);\n if (elementType) {\n if (Ref.isRefType(elementType)) {\n const typename = findAnnotation<ReferenceAnnotationValue>(elementType, ReferenceAnnotationId)?.typename;\n return { ast: elementType, isArray: true, typename };\n }\n }\n }\n\n // Direct reference.\n if (Ref.isRefType(ast)) {\n const typename = findAnnotation<ReferenceAnnotationValue>(ast, ReferenceAnnotationId)?.typename;\n return { ast, isArray: false, typename };\n }\n\n return undefined;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport React, { useCallback } from 'react';\n\nimport { Ref } from '@dxos/echo';\nimport {\n createJsonPath,\n findNode,\n getArrayElementType,\n getDiscriminatedType,\n isDiscriminatedUnion,\n isNestedType,\n} from '@dxos/effect';\nimport { IconButton, IconButtonProps, useTranslation } from '@dxos/react-ui';\n\nimport { translationKey } from '#translations';\n\nimport { getFormProperties } from '../../../util';\nimport { useFormValues } from '../Form';\nimport { FormField, type FormFieldProps } from '../FormField';\nimport { FormFieldLabel, type FormFieldStateProps } from '../FormFieldComponent';\n\nexport type ArrayFieldProps = {\n label: string;\n fieldProps: FormFieldStateProps;\n} & FormFieldProps;\n\nexport const ArrayField = ({\n type,\n path,\n label,\n readonly,\n layout,\n fieldProps: inputProps,\n ...props\n}: ArrayFieldProps) => {\n const { t } = useTranslation(translationKey);\n const elementType = getArrayElementType(type);\n const { onValueChange } = inputProps;\n const values = useFormValues(ArrayField.displayName, path, () => []);\n\n const getDefaultObjectValue = (typeNode: SchemaAST.AST): any => {\n const baseNode = findNode(typeNode, isDiscriminatedUnion);\n const typeLiteral = baseNode ? getDiscriminatedType(baseNode, {}) : findNode(typeNode, SchemaAST.isTypeLiteral);\n if (!typeLiteral) {\n return {};\n }\n\n return Object.fromEntries(\n getFormProperties(typeLiteral).map((prop) => {\n const defaultValue = SchemaAST.getDefaultAnnotation(prop.type).pipe((annotation) =>\n Option.getOrUndefined(annotation),\n );\n return [prop.name, defaultValue];\n }),\n );\n };\n\n const handleAdd = useCallback(() => {\n const defaultValue =\n isNestedType(type) && elementType ? getDefaultObjectValue(elementType) : getDefaultValue(elementType);\n // `values` is `undefined` on first render for arrays whose parent path\n // hasn't been materialised in the form values yet (e.g. `package.repos`\n // when the form starts with no `package`). `useFormValues`'s default-\n // value effect would eventually backfill it to `[]`, but until then the\n // old `values && ...` guard silently swallowed the click. Treat a\n // missing array as empty so Add always produces `[defaultValue]`.\n onValueChange(type, [...(values ?? []), defaultValue]);\n }, [onValueChange, type, elementType, values]);\n\n const handleDelete = useCallback(\n (idx: number) => {\n onValueChange(\n type,\n values?.filter((_, i) => i !== idx),\n );\n },\n [onValueChange, type, values],\n );\n\n if (!elementType || ((readonly || layout === 'static') && values && values.length < 1)) {\n return null;\n }\n\n const renderItemAsObject = elementType && isNestedType(elementType) && !Ref.isRefType(elementType);\n\n return (\n <>\n {(layout !== 'static' || (values && values.length > 0)) && (\n <div className='flex items-center gap-2'>\n <div className='flex-1 min-w-0'>\n <FormFieldLabel readonly={readonly} label={label} path={createJsonPath(path ?? [])} asChild />\n </div>\n {!readonly && layout !== 'static' && (\n <IconBlock icon='ph--plus--regular' label={t('add-item.button')} onClick={handleAdd} />\n )}\n </div>\n )}\n\n <div className='flex flex-col'>\n {values?.map((_, index) => {\n const isLast = index === values.length - 1;\n // Object items: each row contains a recursively-rendered FormField\n // (multiple sub-rows for the object's fields) wrapped in a border,\n // with the delete button bottom-aligned next to it.\n // Scalar items: a single-row inline FormField with a center-aligned\n // delete button. Refs and primitive arrays use this layout.\n const fieldField = (\n <FormField\n {...props}\n autoFocus={isLast}\n type={elementType}\n // Suppress the per-item header for object items only — the recursive\n // form already renders labels for each sub-field. Scalar items\n // (refs, primitives) keep the parent name so inline-layout\n // children (e.g. RefField) have a real label to use as a\n // fallback placeholder.\n {...(renderItemAsObject && { name: null })}\n path={[...(path ?? []), index]}\n readonly={readonly || layout === 'static'}\n layout={renderItemAsObject ? (layout === 'static' ? 'static' : undefined) : 'inline'}\n />\n );\n\n return (\n <div key={index} className='grid grid-cols-[1fr_min-content] items-center mb-1 last:mb-form-gap'>\n {renderItemAsObject ? (\n <div className='p-1 border border-subdued-separator'>{fieldField}</div>\n ) : (\n fieldField\n )}\n\n {!readonly && layout !== 'static' && (\n <IconBlock icon='ph--x--regular' label={t('remove-item.button')} onClick={() => handleDelete(index)} />\n )}\n </div>\n );\n })}\n </div>\n </>\n );\n};\n\nArrayField.displayName = 'Form.ArrayField';\n\nconst IconBlock = (props: IconButtonProps) => {\n return (\n <div className='flex items-center h-full px-1'>\n <IconButton variant='ghost' density='xs' square iconOnly {...props} />\n </div>\n );\n};\n\n/**\n * Returns the default empty value for a given AST.\n * Used for initializing new array values etc.\n */\n// TODO(wittjosiah): Factor out?\nexport const getDefaultValue = (ast?: SchemaAST.AST): any => {\n switch (ast?._tag) {\n case 'StringKeyword': {\n return '';\n }\n case 'NumberKeyword': {\n return 0;\n }\n case 'BooleanKeyword': {\n return false;\n }\n case 'Suspend': {\n return getDefaultValue(ast.f());\n }\n default: {\n if (ast && isNestedType(ast)) {\n return {};\n } else {\n throw new Error(`Unsupported type: ${ast?._tag}`);\n }\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport React, { type PropsWithChildren, useEffect, useMemo, useRef } from 'react';\n\nimport { Annotation as EchoAnnotation, Type } from '@dxos/echo';\nimport { type AnyProperties } from '@dxos/echo/internal';\nimport { createJsonPath, getValue as getValue$ } from '@dxos/effect';\nimport {\n IconButton,\n type IconButtonProps,\n ScrollArea,\n type ThemedClassName,\n useMergeRefs,\n useTranslation,\n} from '@dxos/react-ui';\nimport { composable, composableProps, withColumn } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { translationKey } from '#translations';\n\nimport {\n type FormHandler,\n type FormHandlerProps,\n type FormUpdateMeta,\n useFormHandler,\n useKeyHandler,\n} from '../../hooks';\nimport { FormFieldLabel, type FormFieldLabelProps, type FormFieldStateProps } from './FormFieldComponent';\nimport {\n FormFieldSet as NaturalFormFieldSet,\n type FormFieldSetProps as NaturalFormFieldSetProps,\n} from './FormFieldSet';\nimport { FormTooltipsContext } from './FormTooltipsContext';\nimport { FormLayout as NaturalFormLayout } from './Layout';\nimport { type FormLayoutProps as NaturalFormLayoutProps } from './Layout/FormLayout';\n\n// TODO(burdon): Move styles to form.ts (as with ui-theme).\n\n// TODO(burdon): Reconcile with @dxos/echo.\nexport type ExcludeId<S extends Schema.Schema.AnyNoContext | Type.AnyEntity> = Omit<\n S extends Type.AnyEntity\n ? Type.InstanceType<S>\n : S extends Schema.Schema.AnyNoContext\n ? Schema.Schema.Type<S>\n : never,\n 'id'\n>;\n\n// TODO(burdon): Move to @dxos/schema (re-export here).\nexport const omitId = <S extends Schema.Schema.AnyNoContext | Type.AnyEntity>(\n schemaOrType: S,\n): Schema.Schema<ExcludeId<S>, ExcludeId<S>> => {\n const schema = Type.isType(schemaOrType)\n ? Type.getSchema(schemaOrType)\n : (schemaOrType as Schema.Schema.AnyNoContext);\n return schema.pipe(Schema.omit('id')) as any;\n};\n\n/**\n * Drop fields annotated with `FormInputAnnotation.set(false)` from a schema so\n * the form's validator doesn't trip on required-but-hidden fields. Used by\n * the picker's inline create form, where a `FactoryAnnotation` typically\n * supplies the hidden values (e.g. a backing-object Ref) outside the form.\n */\nexport const omitHiddenFormFields = <S extends Schema.Schema.AnyNoContext>(schema: S): S => {\n const properties = SchemaAST.getPropertySignatures(schema.ast);\n const hidden = properties\n .filter((prop) => Option.getOrElse(EchoAnnotation.FormInputAnnotation.getFromAst(prop.type), () => true) === false)\n .map((prop) => prop.name as string);\n return hidden.length === 0 ? schema : (schema.pipe(Schema.omit(...(hidden as [string, ...string[]]))) as any);\n};\n\n//\n// Context\n//\n\ntype FormContextValue<T extends AnyProperties = any> = {\n /**\n * Form handler.\n */\n form: FormHandler<T>;\n\n /**\n * Show field tooltips (currently: JSON path on each label). Defaults to\n * `true`; pass `false` to suppress.\n */\n tooltips?: boolean;\n\n /**\n * Testing.\n */\n testId?: string;\n} & Pick<\n NaturalFormFieldSetProps<T>,\n 'readonly' | 'layout' | 'fieldMap' | 'fieldProvider' | 'projection' | 'createTypename' | 'createFieldMap' | 'db'\n>;\n\nconst [FormContextProvider, useFormContext] = createContext<FormContextValue>('Form');\n\n/**\n * Get the current form values.\n */\nconst useFormValues: {\n <T extends AnyProperties>(componentName: string, path?: (string | number)[]): T;\n <T extends AnyProperties>(\n componentName: string,\n path: (string | number)[] | undefined,\n defaultValue: () => T,\n ): T | undefined;\n} = (componentName: string, path?: (string | number)[], defaultValue?: () => any) => {\n const stablePath = useMemo(() => path ?? [], [path ? path.join('.') : undefined]);\n const jsonPath = createJsonPath(stablePath);\n const {\n form: { values, onValueChange },\n } = useFormContext(componentName);\n\n const value = getValue$(values, jsonPath);\n\n // Apply default value once when the field has no value. lastAppliedPathRef prevents\n // re-applying on every render (e.g. when defaultValue() returns null) and ensures\n // we apply per path when the hook is used for different fields.\n const lastAppliedPathRef = useRef<string | null>(null);\n useEffect(() => {\n if (value == null && defaultValue && lastAppliedPathRef.current !== jsonPath) {\n lastAppliedPathRef.current = jsonPath;\n onValueChange(stablePath, SchemaAST.stringKeyword, defaultValue());\n }\n }, [value, defaultValue, onValueChange, stablePath, jsonPath]);\n\n return value;\n};\n\n/**\n * Get the state props for the given field.\n */\nconst useFormFieldState = (componentName: string, path: (string | number)[] = []): FormFieldStateProps => {\n const stablePath = useMemo(() => path, [Array.isArray(path) ? path.join('.') : path]);\n const {\n form: { getStatus, getValue, onBlur, onValueChange },\n } = useFormContext(componentName);\n\n return useMemo(\n () => ({\n getStatus: () => getStatus(stablePath),\n getValue: () => getValue(stablePath),\n onBlur: () => onBlur(stablePath),\n onValueChange: (ast: SchemaAST.AST, value: any) => onValueChange(stablePath, ast, value),\n }),\n [getStatus, getValue, onBlur, onValueChange, stablePath],\n );\n};\n\n//\n// Root\n//\n\ntype FormRootProps<T extends AnyProperties = AnyProperties> = PropsWithChildren<\n {\n /**\n * Called when the form is submitted and passes validation.\n */\n onSave?: (values: T, meta: FormUpdateMeta<T>) => void;\n\n /**\n * Called when the form is canceled to abandon/undo any pending changes.\n */\n onCancel?: () => void;\n } & Omit<FormContextValue<T>, 'form'> &\n Pick<FormHandlerProps<T>, 'schema' | 'autoSave' | 'values' | 'defaultValues' | 'onValidate' | 'onValuesChanged'> &\n Omit<NaturalFormFieldSetProps<T>, 'schema' | 'path'>\n>;\n\nconst FormRoot = <T extends AnyProperties = AnyProperties>({\n children,\n schema,\n values,\n onSave,\n onCancel,\n ...props\n}: FormRootProps<T>) => {\n const form = useFormHandler({ schema, values, onSave, onCancel, ...props });\n\n return (\n <FormTooltipsContext.Provider value={props.tooltips ?? true}>\n <FormContextProvider form={form} {...props}>\n {children}\n </FormContextProvider>\n </FormTooltipsContext.Provider>\n );\n};\n\nFormRoot.displayName = 'Form.Root';\n\n//\n// Viewport\n//\n\nconst FORM_VIEWPORT_NAME = 'Form.Viewport';\n\ntype FormViewportProps = {};\n\nconst FormViewport = composable<HTMLDivElement>(({ children, ...props }, forwardedRef) => {\n return (\n <ScrollArea.Root {...composableProps(props)} orientation='vertical' centered padding thin ref={forwardedRef}>\n <ScrollArea.Viewport>{children}</ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n});\n\nFormViewport.displayName = FORM_VIEWPORT_NAME;\n\n//\n// Content\n//\n\nconst FORM_CONTENT_NAME = 'Form.Content';\n\ntype FormContentProps = ThemedClassName<PropsWithChildren<{}>>;\n\nconst FormContent = composable<HTMLDivElement, FormContentProps>(({ children, ...props }, forwardedRef) => {\n const { form, testId } = useFormContext(FORM_CONTENT_NAME);\n const localRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([forwardedRef, localRef]);\n useKeyHandler(localRef, form);\n\n return (\n <div\n {...composableProps(props, {\n role: 'form',\n classNames: mx(withColumn.center(), 'flex flex-col w-full pb-form-gap'),\n })}\n data-testid={testId}\n ref={mergedRef}\n >\n {children}\n </div>\n );\n});\n\nFormContent.displayName = FORM_CONTENT_NAME;\n\n//\n// FieldSet\n//\n\nconst FORM_FIELDSET_NAME = 'Form.FieldSet';\n\ntype FormFieldSetProps = ThemedClassName<NaturalFormFieldSetProps<any>>;\n\nconst FormFieldSet = (props: FormFieldSetProps) => {\n const { form, ...contextProps } = useFormContext(FORM_FIELDSET_NAME);\n\n return <NaturalFormFieldSet schema={form.schema} {...contextProps} {...props} />;\n};\n\nFormFieldSet.displayName = FORM_FIELDSET_NAME;\n\n//\n// Layout\n//\n\nconst FORM_LAYOUT_NAME = 'Form.Layout';\n\ntype FormLayoutProps = Omit<NaturalFormLayoutProps, 'schema'> & { schema?: NaturalFormLayoutProps['schema'] };\n\nconst FormLayout = ({ schema, ...props }: FormLayoutProps) => {\n const { form, ...contextProps } = useFormContext(FORM_LAYOUT_NAME);\n const resolvedSchema = schema ?? form.schema;\n if (!resolvedSchema) {\n return null;\n }\n\n return <NaturalFormLayout schema={resolvedSchema} {...contextProps} {...props} />;\n};\n\nFormLayout.displayName = FORM_LAYOUT_NAME;\n\n//\n// Actions\n//\n\nconst FORM_ACTIONS_NAME = 'Form.Actions';\n\ntype FormActionsProps = ThemedClassName<{}>;\n\nconst FormActions = ({ classNames }: FormActionsProps) => {\n const { t } = useTranslation(translationKey);\n const {\n form: { canSave, onSave, onCancel },\n readonly,\n layout,\n } = useFormContext(FORM_ACTIONS_NAME);\n\n if (readonly || layout === 'static') {\n return null;\n }\n\n // TODO(burdon): Currently onCancel is a no-op; implement \"revert values\".\n // Deprecate FormSubmit ans use FormActions without Cancel button if no callback is supplied.\n\n return (\n <div\n className={mx(withColumn.center(), 'grid grid-flow-col gap-form-gap auto-cols-fr py-form-padding', classNames)}\n >\n {onCancel && (\n <IconButton\n icon='ph--x--regular'\n iconEnd\n label={t('cancel-button.label')}\n onClick={onCancel}\n data-testid='cancel-button'\n />\n )}\n {onSave && (\n <IconButton\n type='submit'\n variant='primary'\n disabled={!canSave}\n icon='ph--check--regular'\n iconEnd\n label={t('save-button.label')}\n onClick={onSave}\n data-testid='save-button'\n />\n )}\n </div>\n );\n};\n\nFormActions.displayName = FORM_ACTIONS_NAME;\n\n//\n// Section\n//\n\nconst FORM_SECTION_NAME = 'Form.Section';\n\ntype FormSectionProps = ThemedClassName<{ label?: string; description?: string }>;\n\nconst FormSection = composable<HTMLDivElement, FormSectionProps>(\n ({ children, label, description, ...props }, forwardedRef) => {\n return (\n <div\n {...composableProps(props, { classNames: 'flex flex-col pt-form-section-gap first:pt-0' })}\n ref={forwardedRef}\n >\n {label && <h2 className='text-lg'>{label}</h2>}\n {description && <p className='text-description'>{description}</p>}\n {children}\n </div>\n );\n },\n);\n\nFormSection.displayName = FORM_SECTION_NAME;\n\n//\n// Submit\n//\n\nconst FORM_SUBMIT_NAME = 'Form.Submit';\n\ntype FormSubmitProps = ThemedClassName<Partial<Pick<IconButtonProps, 'icon' | 'label' | 'disabled'>>>;\n\nconst FormSubmit = ({ classNames, label, icon, disabled }: FormSubmitProps) => {\n const { t } = useTranslation(translationKey);\n const {\n form: { canSave, onSave },\n readonly,\n layout,\n } = useFormContext(FORM_SUBMIT_NAME);\n\n if (readonly || layout === 'static') {\n return null;\n }\n\n return (\n <div className={mx('flex w-full pt-form-padding', classNames)}>\n <IconButton\n classNames='w-full'\n type='submit'\n variant='primary'\n disabled={disabled ?? !canSave}\n icon={icon ?? 'ph--check--regular'}\n label={label ?? t('save-button.label')}\n onClick={onSave}\n data-testid='save-button'\n />\n </div>\n );\n};\n\nFormSubmit.displayName = FORM_SUBMIT_NAME;\n\n//\n// Form\n// https://www.radix-ui.com/primitives/docs/guides/composition\n//\n\nexport const Form = {\n Root: FormRoot,\n Viewport: FormViewport,\n Content: FormContent,\n Section: FormSection,\n FieldSet: FormFieldSet,\n Layout: FormLayout,\n Label: FormFieldLabel,\n Actions: FormActions,\n Submit: FormSubmit,\n};\n\nexport { useFormContext, useFormValues, useFormFieldState };\n\nexport type {\n FormRootProps,\n FormViewportProps,\n FormContentProps,\n FormSectionProps,\n FormFieldSetProps,\n FormLayoutProps,\n FormFieldLabelProps,\n FormActionsProps,\n FormSubmitProps,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport type * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type AnyProperties } from '@dxos/echo/internal';\nimport { type JsonPath, createJsonPath, fromEffectValidationPath, getValue as getValue$ } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { useDefaultValue } from '@dxos/react-ui';\nimport { type ValidationError, validateSchema } from '@dxos/schema';\nimport { type MaybePromise } from '@dxos/util';\n\nexport type FormFieldStatus = {\n status?: 'error';\n error?: string;\n};\n\n/**\n * Form properties.\n */\nexport interface FormHandlerProps<T extends AnyProperties> {\n /**\n * Effect schema (Type literal).\n */\n schema?: Schema.Schema<T, any>;\n\n /**\n * Values for the form if controlled.\n */\n values?: Partial<T>;\n\n /**\n * Default values for the form which will be used if values is not provided.\n */\n defaultValues?: Partial<T>;\n\n /**\n * Auto-save the form when the values change.\n */\n autoSave?: boolean;\n\n /**\n * Callback for value changes. Note: This is called even when values are invalid.\n * Sometimes the parent component may want to know about changes even if the form is\n * in an invalid state.\n */\n onValuesChanged?: (values: Partial<T>, meta: FormUpdateMeta<T>) => void;\n\n /**\n * Custom validation function that runs only after schema validation passes.\n * Use this for complex validation logic that can't be expressed in the schema.\n * @returns Array of validation errors, or undefined if validation passes\n */\n onValidate?: (values: T) => ValidationError[] | undefined;\n\n /**\n * Called when the form is submitted and passes validation.\n */\n onSave?: (values: T, meta: FormUpdateMeta<T>) => MaybePromise<void>;\n\n /**\n * Called when the form is canceled.\n */\n onCancel?: () => void;\n}\n\nexport type FormUpdateMeta<T extends AnyProperties> = {\n changed: FormHandler<T>['changed'];\n isValid: boolean;\n};\n\n/**\n * Form handler properties and methods.\n */\nexport type FormHandler<T extends AnyProperties> = Pick<FormHandlerProps<T>, 'schema' | 'autoSave'> & {\n /** Initial values (which may not pass validation). */\n values: Partial<T>;\n\n /** Map of changed fields. */\n changed: Record<JsonPath, boolean>;\n // TODO(burdon): How is this different from above?\n touched: Record<JsonPath, boolean>;\n\n /** Map of error strings. */\n errors: Record<JsonPath, string>;\n\n /** Whether the form can be saved (i.e., data is valid). */\n isValid: boolean;\n // TODO(burdon): Why is this needed separately from isValid?\n canSave: boolean;\n\n onSave: () => void;\n onCancel: () => void;\n\n //\n // Form field state management\n //\n\n getStatus: (path: string | (string | number)[]) => FormFieldStatus;\n getValue: <V>(path: (string | number)[]) => V | undefined;\n onBlur: (path: (string | number)[]) => void;\n onValueChange: <V>(path: (string | number)[], type: SchemaAST.AST, value: V) => void;\n};\n\n/**\n * Creates a hook for managing form state, including values, validation, and submission.\n * Deeply integrated with `@dxos/schema` for schema-based validation.\n */\nexport const useFormHandler = <T extends AnyProperties>({\n schema,\n autoSave,\n values: valuesProp,\n defaultValues: defaultValuesProp,\n onValuesChanged,\n onValidate,\n onSave,\n onCancel,\n ...props\n}: FormHandlerProps<T>): FormHandler<T> => {\n const [changed, setChanged] = useState<Record<JsonPath, boolean>>({});\n const [touched, setTouched] = useState<Record<JsonPath, boolean>>({});\n const [errors, setErrors] = useState<Record<JsonPath, string>>({});\n const [saving, setSaving] = useState(false);\n const defaultValues = useDefaultValue<Partial<T>>(defaultValuesProp, () => ({}));\n const [values$, setValues] = useControllableState<Partial<T>>({\n prop: valuesProp,\n defaultProp: defaultValues,\n onChange: () => {\n // Only reset when controlled: parent passed new values.\n // Uncontrolled updates come from setValues in onValueChange.\n if (valuesProp !== undefined) {\n setValues(valuesProp ?? defaultValues);\n setChanged({});\n setTouched({});\n setErrors({});\n setSaving(false);\n }\n },\n });\n // TODO(wittjosiah): Upgrade @radix-ui/react-use-controllable-state.\n const values = values$ as Partial<T>;\n\n // Validate.\n const validate = useCallback(\n (values: Partial<T>): values is T => {\n if (!schema) {\n return false;\n }\n\n let errors: ValidationError[] = validateSchema(schema, values) ?? [];\n log('validate', { values, errors });\n if (errors.length === 0 && onValidate) {\n const validatedValues = values as T;\n errors = onValidate(validatedValues) ?? [];\n }\n\n setErrors(flatMap(errors));\n const valid = errors.length === 0;\n return valid;\n },\n [schema, onValidate],\n );\n\n // Validate on schema change.\n const [schemaChanged, setSchemaChanged] = useState(false);\n useEffect(() => setSchemaChanged(true), [schema]);\n useEffect(() => {\n if (schemaChanged) {\n validate(values);\n setSchemaChanged(false);\n }\n }, [validate, values, schemaChanged]);\n\n const isValid = useMemo(() => {\n return Object.keys(errors).length === 0;\n }, [errors]);\n\n /**\n * NOTE: We can submit if there is no touched field that has an error.\n * If there's a validation message visible in the form, submit should be disabled.\n */\n const canSave = useMemo(\n () =>\n !saving &&\n // Check if any error paths that are touched have errors.\n !Object.entries(touched).some(\n ([path, isTouched]) =>\n isTouched &&\n Object.keys(errors).some(\n (errorPath) => errorPath === path || errorPath.startsWith(`${path}.`) || errorPath.startsWith(`${path}[`),\n ),\n ),\n [touched, errors, saving],\n );\n\n const handleSave = useCallback(async () => {\n if (validate(values)) {\n setSaving(true);\n try {\n await onSave?.(values, { changed, isValid });\n } finally {\n setSaving(false);\n }\n }\n }, [values, validate, onSave, changed, isValid]);\n\n const handleCancel = useCallback(() => {\n onCancel?.();\n }, [onCancel]);\n\n //\n // Fields.\n //\n\n const getStatus = useCallback<FormHandler<T>['getStatus']>(\n (path) => {\n const jsonPath = Array.isArray(path) ? createJsonPath(path) : path;\n const [_, error] =\n Object.entries(errors).find(\n ([errorPath]) =>\n errorPath === jsonPath || errorPath.startsWith(`${jsonPath}.`) || errorPath.startsWith(`${jsonPath}[`),\n ) ?? [];\n\n // Only show errors for touched fields.\n const isTouched = touched[jsonPath as JsonPath];\n if (!isTouched) {\n return {\n status: undefined,\n error: undefined,\n };\n }\n\n return {\n status: error ? 'error' : undefined,\n error: error ? (error ?? undefined) : undefined,\n };\n },\n [errors, touched],\n );\n\n const getValue = useCallback<FormHandler<T>['getValue']>(\n (path) => {\n return getValue$(values, createJsonPath(path));\n },\n [values],\n );\n\n const onValueChange = useCallback<FormHandler<T>['onValueChange']>(\n (path, type, value) => {\n log('onValueChange', { path, value });\n\n const jsonPath = createJsonPath(path);\n const pathArray = path;\n let parsedValue = value as any;\n try {\n if (type._tag === 'NumberKeyword') {\n parsedValue = parseFloat(value as string) || 0;\n }\n } catch (err) {\n log.catch(err);\n parsedValue = undefined;\n }\n\n // Create merged values for validation and callback. Form never mutates; parent applies via onValuesChanged.\n const newValues = mergeAtPath(values, pathArray as (string | number)[], parsedValue) as Partial<T>;\n\n // TODO(burdon): Check value has changed from original.\n const newChanged = { [jsonPath]: true };\n setChanged((prev) => ({ ...prev, ...newChanged }));\n\n // Validate.\n const isValid = validate(newValues);\n\n // Notify parent; parent is responsible for applying the change.\n onValuesChanged?.(newValues, { isValid, changed: newChanged });\n\n // For uncontrolled mode, update internal state. Controlled mode relies on parent to pass new values.\n if (valuesProp === undefined) {\n setValues(newValues);\n }\n },\n [values, validate, onValuesChanged, valuesProp],\n );\n\n const onBlur = useCallback(\n async (path: (string | number)[]) => {\n const jsonPath = createJsonPath(path);\n\n // TODO(burdon): Check value has changed from original.\n setTouched((touched) => ({ ...touched, [jsonPath]: true }));\n const isValid = validate(values);\n\n // Auto-save when a field is blurred and is valid.\n if (Object.keys(changed).length > 0 && isValid && autoSave) {\n await onSave?.(values as T, { changed, isValid });\n }\n },\n [validate, values, changed, autoSave, onSave],\n );\n\n return useMemo<FormHandler<T>>(\n () => ({\n // State.\n schema,\n values,\n errors,\n touched,\n changed,\n isValid,\n canSave,\n autoSave,\n\n // Actions.\n onSave: handleSave,\n onCancel: handleCancel,\n\n // Field utils.\n getStatus,\n getValue,\n onBlur,\n onValueChange,\n\n ...props,\n }),\n [\n schema,\n values,\n errors,\n touched,\n changed,\n canSave,\n isValid,\n getStatus,\n getValue,\n onBlur,\n onValueChange,\n onSave,\n onCancel,\n ],\n );\n};\n\n/**\n * Creates a new object with value at path. Does not mutate source.\n * Preserves arrays when path segments are numeric indices.\n */\nconst mergeAtPath = (obj: any, path: readonly (string | number)[], value: any): any => {\n if (path.length === 0) {\n return value;\n }\n\n const [head, ...rest] = path;\n const child = rest.length === 0 ? value : mergeAtPath(obj?.[head], rest, value);\n\n if (Array.isArray(obj)) {\n const copy = [...obj];\n copy[head as number] = child;\n return copy;\n }\n\n return { ...obj, [head]: child };\n};\n\nconst flatMap = (errors: ValidationError[]) => {\n return errors.reduce(\n (result, { path, message }) => {\n // Convert the validation error path format to our JsonPath format.\n const jsonPath = fromEffectValidationPath(path);\n if (!(jsonPath in result)) {\n result[jsonPath] = message;\n }\n return result;\n },\n {} as Record<JsonPath, string>,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type RefObject, useCallback, useLayoutEffect } from 'react';\n\nimport { addEventListener } from '@dxos/async';\n\nimport { type FormHandler } from './useFormHandler';\n\n/**\n * Key handler.\n */\nexport const useKeyHandler = (elRef: RefObject<HTMLDivElement | null>, form: FormHandler<any>) => {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Enter': {\n if (event.metaKey && form.canSave) {\n form.onSave();\n }\n break;\n }\n }\n },\n [form.isValid, form.canSave, form.onSave, form.autoSave],\n );\n\n useLayoutEffect(() => {\n const el = elRef.current;\n if (!el) {\n return;\n }\n\n return addEventListener(el, 'keydown', handleKeyDown);\n }, [elRef, handleKeyDown]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport React, {\n Component,\n type FC,\n type FocusEvent,\n type PropsWithChildren,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { type Database } from '@dxos/echo';\nimport { type Format } from '@dxos/echo/internal';\nimport { Icon, Input, Tooltip } from '@dxos/react-ui';\nimport { inputTextLabel } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { type FormFieldStatus } from '../../hooks';\nimport { useFormTooltips } from './FormTooltipsContext';\n\n/**\n * Dynamic props passed to input components.\n */\nexport type FormFieldStateProps<T = any> = {\n getStatus: () => FormFieldStatus;\n getValue: () => T | undefined;\n onBlur: (event: FocusEvent<HTMLElement>) => void;\n onValueChange: (type: SchemaAST.AST, value: T) => void;\n};\n\n/**\n * Presentation mode.\n * - full: Show label, control, and status.\n * - compact: Show label and control.\n * - inline: Control only.\n * - static: Plain DOM; omit all undefined values.\n */\n// TODO(burdon): 'inline' should be orthogonal to the layout (e.g., array of inline static).\nexport type Presentation = 'full' | 'compact' | 'inline' | 'static';\n\n/**\n * Props passed to input components.\n */\nexport type FormFieldComponentProps<T = any> = {\n type: SchemaAST.AST;\n format?: Format.TypeFormat;\n readonly?: boolean;\n label: string;\n /**\n * Dotted JSON path of this field within the form values (e.g.\n * `runtime.client.storage.persistent`). Forwarded to `FormFieldLabel` so\n * that it can render the path as a debug hint when the enclosing\n * `Form.Root` has `debug` enabled.\n */\n jsonPath?: string;\n placeholder?: string;\n autoFocus?: boolean;\n layout?: Presentation;\n /** Database the form is editing against; populated for fields whose value is an ECHO object/Ref. */\n db?: Database.Database;\n} & FormFieldStateProps<T>;\n\n/**\n * Form field component.\n */\nexport type FormFieldComponent = FC<FormFieldComponentProps>;\n\nexport type FormFieldMap = Record<string, FormFieldComponent>;\n\nexport type FormFieldProvider = (props: {\n prop: string; // TODO(burdon): Path?\n schema: Schema.Schema<any>;\n fieldProps: FormFieldComponentProps;\n}) => ReactElement | undefined;\n\n//\n// FormFieldLabel\n//\n\nexport type FormFieldLabelProps = {\n asChild?: boolean;\n error?: string;\n /**\n * JSON path of the field this label describes (e.g. `runtime.client.storage.persistent`).\n * Surfaced as a hover tooltip on the label when the enclosing `Form.Root`\n * has `tooltips` enabled (the default) -- useful for spotting which field\n * maps to which path when authoring schemas or filing bugs against a form.\n * Callers can supply the path unconditionally; the label suppresses the\n * tooltip when `Form.Root tooltips={false}`.\n */\n path?: string;\n} & Pick<FormFieldComponentProps, 'label' | 'readonly'>;\n\nexport const FormFieldLabel = ({ label, error, readonly, asChild, path }: FormFieldLabelProps) => {\n const tooltips = useFormTooltips();\n const Label = readonly || asChild ? 'span' : Input.Label;\n const labelNode = <Label className={mx(inputTextLabel, 'text-sm')}>{label}</Label>;\n return (\n <div className='flex items-center justify-between'>\n {tooltips && path ? (\n <Tooltip.Trigger asChild content={path} side='bottom'>\n {labelNode}\n </Tooltip.Trigger>\n ) : (\n labelNode\n )}\n {error && (\n <Tooltip.Trigger asChild content={error} side='bottom'>\n <Icon icon='ph--warning--regular' size={4} classNames='text-error-text' />\n </Tooltip.Trigger>\n )}\n </div>\n );\n};\n\nFormFieldLabel.displayName = 'Form.FieldLabel';\n\n//\n// FormFieldWrapper\n//\n\nexport type FormFieldWrapperProps<T = any> = Pick<\n FormFieldComponentProps,\n 'readonly' | 'label' | 'layout' | 'getStatus' | 'getValue' | 'jsonPath'\n> & {\n children?: (props: { value: T }) => ReactNode;\n};\n\nexport const FormFieldWrapper = <T,>(props: FormFieldWrapperProps<T>) => {\n const { children, readonly, layout, label, jsonPath, getStatus, getValue } = props;\n const { status, error } = getStatus();\n\n const value = getValue();\n if (layout === 'static' && value == null) {\n return null;\n }\n\n const str = String(value ?? '');\n\n return (\n <div className='contents'>\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} path={jsonPath} />}\n {layout === 'static' ? (\n <p className='truncate min-w-0' title={str}>\n {str}\n </p>\n ) : children ? (\n children({ value })\n ) : null}\n {layout === 'full' && error && (\n <Input.DescriptionAndValidation>\n <Input.Validation>{error}</Input.Validation>\n </Input.DescriptionAndValidation>\n )}\n </Input.Root>\n </div>\n );\n};\n\n//\n// FormFieldErrorBoundary\n//\n\ntype FormFieldErrorState = {\n error: Error | undefined;\n};\n\ntype FormFieldErrorBoundaryProps = PropsWithChildren<{\n path?: (string | number)[];\n}>;\n\nexport class FormFieldErrorBoundary extends Component<FormFieldErrorBoundaryProps, FormFieldErrorState> {\n static getDerivedStateFromError(error: Error): { error: Error } {\n return { error };\n }\n\n override state = { error: undefined };\n\n override componentDidUpdate(prevProps: FormFieldErrorBoundaryProps) {\n if (prevProps.path !== this.props.path) {\n this.resetError();\n }\n }\n\n override render() {\n if (this.state.error) {\n return (\n <div className='flex gap-2 border border-rose-fill font-mono text-sm'>\n <span className='bg-rose-fill text-base-foreground px-1 font-thin'>ERROR</span>\n {String(this.props.path?.join('.'))}\n </div>\n );\n }\n\n return this.props.children;\n }\n\n private resetError() {\n this.setState({ error: undefined });\n }\n}\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { createContext, useContext } from 'react';\n\n/**\n * A standalone context for the `tooltips` flag (Form.Root's only label\n * decoration today: a JSON-path hover tooltip rendered by\n * `FormFieldLabel`).\n *\n * Lives in its own module so that `FormFieldComponent.tsx` -- imported at\n * the top of `Form.tsx` -- can read the flag without re-importing from\n * `Form.tsx`. That round-trip used to create a circular module-eval\n * dependency that intermittently hit a TDZ (\"Cannot access 'FormFieldLabel'\n * before initialization\") in browser-mode storybook tests.\n *\n * Defaults to `true` both when `Form.Root` doesn't pass an explicit value\n * AND when there is no enclosing `Form.Root` (e.g. `FormFieldWrapper`\n * stories that render an input without a Form provider).\n */\nexport const FormTooltipsContext = createContext<boolean>(true);\n\n/** Returns whether the enclosing `Form.Root` has field tooltips enabled. */\nexport const useFormTooltips = (): boolean => useContext(FormTooltipsContext);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport React, { useMemo } from 'react';\n\nimport { type AnyProperties } from '@dxos/echo/internal';\nimport { createJsonPath, type SchemaProperty } from '@dxos/effect';\n\nimport { type FormHandlerProps } from '../../hooks';\nimport { getFormProperties } from '../../util';\nimport { useFormValues } from './Form';\nimport { FormField, type FormFieldProps } from './FormField';\nimport { FormFieldErrorBoundary, FormFieldLabel } from './FormFieldComponent';\nimport { DEFAULT_LAYOUT_NAME, FormLayout, FormLayoutAnnotation } from './Layout';\n\nconst FORM_FIELDSET_NAME = 'Form.FieldSet';\n\nexport type FormFieldSetProps<T extends AnyProperties> = {\n label?: string;\n sort?: string[];\n exclude?: (props: SchemaProperty[]) => SchemaProperty[];\n /**\n * Picks a named layout out of `FormLayoutAnnotation` when present.\n * Falls back to `'default'`. Ignored when the schema has no annotation\n * (linear rendering then takes over).\n */\n layoutName?: string;\n} & Pick<FormHandlerProps<T>, 'schema'> &\n Pick<\n FormFieldProps,\n | 'path'\n | 'autoFocus'\n | 'readonly'\n | 'layout'\n | 'projection'\n | 'fieldMap'\n | 'fieldProvider'\n | 'createTypename'\n | 'createOptionLabel'\n | 'createOptionIcon'\n | 'createInitialValuePath'\n | 'createFieldMap'\n | 'db'\n | 'useType'\n | 'getOptions'\n | 'onCreate'\n >;\n\n/**\n * Renders a set of form fields derived from a schema object.\n */\nexport const FormFieldSet = ({\n label,\n schema,\n readonly,\n path,\n sort,\n exclude,\n projection,\n layout,\n layoutName = DEFAULT_LAYOUT_NAME,\n ...props\n}: FormFieldSetProps<any>) => {\n const values = useFormValues(FORM_FIELDSET_NAME, path);\n const properties = useFormFieldSetProperties({ schema, values, exclude, sort, projection });\n if ((readonly || layout === 'static') && values == null) {\n return null;\n }\n\n // If the schema carries a layout template, hand off to <Form.Layout/> which renders the DSL.\n // Linear rendering still runs when no annotation is present, so existing call sites are unchanged.\n const layouts = schema ? Option.getOrUndefined(FormLayoutAnnotation.get(schema)) : undefined;\n if (layouts?.[layoutName] !== undefined && schema) {\n return (\n <>\n {layout !== 'inline' && label && <FormFieldLabel label={label} path={createJsonPath(path ?? [])} asChild />}\n <FormLayout\n schema={schema}\n name={layoutName}\n path={path}\n readonly={readonly}\n layout={layout}\n projection={projection}\n {...props}\n />\n </>\n );\n }\n\n return (\n <>\n {layout !== 'inline' && label && <FormFieldLabel label={label} path={createJsonPath(path ?? [])} asChild />}\n {properties.map((property) => {\n const name = property.name.toString();\n return (\n <FormFieldErrorBoundary key={name} path={[...(path ?? []), name]}>\n <FormField\n type={property.type}\n name={name}\n path={[...(path ?? []), name]}\n readonly={readonly}\n layout={layout}\n projection={projection}\n {...props}\n />\n </FormFieldErrorBoundary>\n );\n })}\n </>\n );\n};\n\nFormFieldSet.displayName = FORM_FIELDSET_NAME;\n\ntype UseFormFieldSetPropertiesParams = Pick<FormFieldSetProps<any>, 'schema' | 'exclude' | 'projection' | 'sort'> & {\n values: AnyProperties | undefined;\n sort?: string[];\n};\n\n/**\n * Resolves ordered schema properties for a field set (projection order, exclude, or sort).\n */\nconst useFormFieldSetProperties = ({\n schema,\n exclude,\n projection,\n values,\n sort,\n}: UseFormFieldSetPropertiesParams): SchemaProperty[] => {\n // TODO(burdon): Updates on every value change.\n // Remove values dep if can remove from getSchemaProperties.\n return useMemo(() => {\n if (!schema) {\n return [];\n }\n\n // TODO(wittjosiah): Reconcile FormInputAnnotation with projection hidden properties & exclude function.\n const schemaProps = getFormProperties(schema.ast);\n const filteredProps = exclude ? exclude(schemaProps) : schemaProps;\n\n // Use projection-based field management when view and projection are available.\n if (projection) {\n const fieldProjections = projection.getFieldProjections();\n const hiddenProperties = new Set(projection.getHiddenProperties());\n\n // Filter properties to only include visible ones and order by projection.\n const visibleProps = filteredProps.filter((prop) => !hiddenProperties.has(prop.name.toString()));\n const orderedProps: SchemaProperty[] = [];\n\n // Add properties in projection field order.\n for (const fieldProjection of fieldProjections) {\n const fieldPath = String(fieldProjection.field.path);\n const prop = visibleProps.find((prop) => prop.name === fieldPath);\n if (prop) {\n orderedProps.push(prop);\n }\n }\n\n // Add any remaining properties not in projection.\n const projectionPaths = new Set(fieldProjections.map((projection) => String(projection.field.path)));\n const remainingProps = visibleProps.filter((prop) => !projectionPaths.has(prop.name.toString()));\n orderedProps.push(...remainingProps);\n return orderedProps;\n }\n\n // Fallback to legacy filter/sort behavior.\n return sort\n ? [...filteredProps].sort(({ name: a }, { name: b }) => sort.indexOf(a.toString()) - sort.indexOf(b.toString()))\n : filteredProps;\n }, [schema, values, exclude, sort, projection]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport * as String from 'effect/String';\nimport React, { useMemo } from 'react';\n\nimport { Format } from '@dxos/echo';\nimport {\n createJsonPath,\n findNode,\n getAnnotation,\n getDiscriminatedType,\n isArrayType,\n isDiscriminatedUnion,\n isLiteralUnion,\n isNestedType,\n} from '@dxos/effect';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type ProjectionModel } from '@dxos/schema';\n\nimport { translationKey } from '#translations';\n\nimport { getRefProps } from '../../util';\nimport {\n ArrayField,\n BooleanField,\n DateField,\n GeoPointField,\n MarkdownField,\n NumberField,\n RefField,\n type RefFieldProps,\n SelectField,\n TextAreaField,\n TextField,\n} from './fields';\nimport { useFormFieldState } from './Form';\nimport {\n type FormFieldComponent,\n type FormFieldComponentProps,\n type FormFieldMap,\n type FormFieldProvider,\n} from './FormFieldComponent';\nimport { FormFieldSet } from './FormFieldSet';\n\nexport type FormFieldProps = {\n /**\n * AST of the property to render.\n */\n type: SchemaAST.AST;\n\n /**\n * Name of the property. Used to derive a default label\n * (`title ?? capitalize(name)`) and as the projection lookup key. Pass\n * `null` to suppress the header label entirely -- the form still renders\n * the field/struct, but `FormFieldSet`'s top-level `<FormFieldLabel>` is\n * skipped. Used by `ArrayField` for object-array items, where every item\n * would otherwise repeat the array's parent name.\n */\n name: string | null;\n\n /**\n * Path to the current object from the root. Used with nested forms.\n */\n path?: (string | number)[];\n\n /**\n * Optional projection for projection-based field management.\n */\n projection?: ProjectionModel;\n\n /**\n * Map of custom renderers for specific properties.\n * Prefer fieldProvider for plugin specific input surfaces.\n */\n fieldMap?: FormFieldMap;\n\n /**\n * Function to lookup custom renderers for specific properties.\n */\n fieldProvider?: FormFieldProvider;\n /**\n * Typename of the ref type that the create props apply to.\n * When set, createOptionLabel/createOptionIcon/createInitialValuePath/createFieldMap/onCreate\n * are only passed to ref fields whose typename matches.\n */\n createTypename?: string;\n} & Pick<FormFieldComponentProps, 'autoFocus' | 'readonly' | 'layout'> &\n Pick<\n RefFieldProps,\n | 'createOptionLabel'\n | 'createOptionIcon'\n | 'createInitialValuePath'\n | 'createFieldMap'\n | 'db'\n | 'useType'\n | 'getOptions'\n | 'onCreate'\n >;\n\nexport const FormField = (props: FormFieldProps) => {\n const {\n type,\n name,\n path,\n projection,\n fieldMap,\n fieldProvider,\n readonly,\n layout,\n\n // RefFieldProps\n createTypename,\n createOptionLabel,\n createOptionIcon,\n createInitialValuePath,\n createFieldMap,\n db,\n useType: schemaHook,\n getOptions,\n onCreate,\n } = props;\n const { t } = useTranslation(translationKey);\n const title = getAnnotation<string>(SchemaAST.TitleAnnotationId)(type);\n const description = getAnnotation<string>(SchemaAST.DescriptionAnnotationId)(type);\n const examples = getAnnotation<string[]>(SchemaAST.ExamplesAnnotationId)(type);\n\n // `name === null` means \"no header\" -- collapse to an empty string so\n // downstream consumers keep their `label: string` types, and the falsy\n // value lets `FormFieldSet`'s `label && <FormFieldLabel ...>` guard skip\n // the header.\n const label = useMemo(() => title ?? (name == null ? '' : String.capitalize(name)), [title, name]);\n const placeholder = useMemo(\n () => (examples?.length ? `${t('example.placeholder')}: ${examples[0]}` : (description ?? label)),\n [examples, description, label],\n );\n\n const fieldState = useFormFieldState(FormField.displayName, path);\n const jsonPath = createJsonPath(path ?? []);\n const fieldProps: FormFieldComponentProps = {\n type,\n format: Format.FormatAnnotation.getFromAst(type).pipe((annotation) => Option.getOrUndefined(annotation)),\n readonly,\n label,\n jsonPath,\n placeholder,\n layout,\n db,\n ...fieldState,\n };\n\n // Omit empty fields entirely in read-only mode -- an empty value has nothing\n // to display, so a labelled row with a blank input is just noise. This\n // mirrors what `FormFieldWrapper` already does for `layout === 'static'`, but\n // covers every field type (including those that bypass the wrapper:\n // RefField, SelectField, MarkdownField, ...). Container fields\n // (`ArrayField`, nested-struct -> `FormFieldSet`) keep their own\n // empty-value checks, but those branches only apply when the value is\n // actually a non-null array/object, so this check doesn't interfere.\n if (readonly && fieldState.getValue() == null) {\n return null;\n }\n\n //\n // Custom field.\n //\n\n const CustomField = fieldMap?.[jsonPath];\n if (CustomField) {\n return <CustomField {...fieldProps} />;\n }\n\n // TODO(burdon): Expensive to create schema each time; pass AST?\n const component = fieldProvider?.({ schema: Schema.make(type), prop: name ?? '', fieldProps });\n if (component) {\n return component;\n }\n\n //\n // Array field.\n //\n\n if (isArrayType(type)) {\n return <ArrayField fieldProps={fieldState} label={label} {...props} />;\n }\n\n //\n // Regular field.\n //\n\n const Field = getFormField(fieldProps);\n if (Field) {\n return <Field {...fieldProps} />;\n }\n\n //\n // Select field.\n //\n\n const options = getSelectOptions(type);\n if (options) {\n // Resolve labels from projection metadata when available.\n const fieldProjections = projection?.getFieldProjections();\n const fieldProjection = fieldProjections?.find((fp) => fp.field.path === name);\n const selectOptions = fieldProjection?.props.options;\n\n return (\n <SelectField\n {...fieldProps}\n options={options.map((option) => {\n const selectOption = selectOptions?.find((so) => so.id === globalThis.String(option));\n return {\n value: option,\n label: selectOption?.title ?? option.toString(),\n };\n })}\n />\n );\n }\n\n //\n // Ref field.\n //\n\n const refProps = getRefProps(type);\n if (refProps) {\n const isCreateTarget = !createTypename || refProps.typename === createTypename;\n return (\n <RefField\n {...fieldProps}\n {...refProps}\n createOptionLabel={isCreateTarget ? createOptionLabel : undefined}\n createOptionIcon={isCreateTarget ? createOptionIcon : undefined}\n createInitialValuePath={isCreateTarget ? createInitialValuePath : undefined}\n createFieldMap={isCreateTarget ? createFieldMap : undefined}\n db={db}\n useType={schemaHook}\n getOptions={getOptions}\n onCreate={onCreate}\n />\n );\n }\n\n //\n // Nested Object field.\n //\n\n if (isNestedType(type)) {\n const baseNode = findNode(type, isDiscriminatedUnion);\n const typeLiteral = baseNode\n ? getDiscriminatedType(baseNode, fieldState.getValue() as any)\n : findNode(type, SchemaAST.isTypeLiteral);\n\n if (typeLiteral) {\n const schema = Schema.make(typeLiteral);\n return (\n <FormFieldSet\n schema={schema}\n path={path}\n readonly={readonly}\n layout={layout}\n label={label}\n projection={projection}\n fieldMap={fieldMap}\n fieldProvider={fieldProvider}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n createInitialValuePath={createInitialValuePath}\n db={db}\n useType={schemaHook}\n getOptions={getOptions}\n onCreate={onCreate}\n />\n );\n }\n }\n\n return null;\n};\n\nFormField.displayName = 'Form.FormField';\n\n/**\n * Get property input component.\n */\nconst getFormField = ({ type, format }: FormFieldComponentProps): FormFieldComponent | undefined => {\n //\n // Standard formats.\n //\n\n const formatField = Match.value(format).pipe(\n Match.withReturnType<FormFieldComponent | undefined>(),\n Match.when(Format.TypeFormat.Date, () => DateField),\n Match.when(Format.TypeFormat.DateTime, () => DateField),\n Match.when(Format.TypeFormat.GeoPoint, () => GeoPointField),\n Match.when(Format.TypeFormat.Markdown, () => MarkdownField),\n Match.when(Format.TypeFormat.Text, () => TextAreaField),\n Match.when(Format.TypeFormat.Time, () => DateField),\n Match.orElse(() => undefined),\n );\n if (formatField) {\n return formatField;\n }\n\n //\n // Standard types.\n //\n\n switch (type._tag) {\n // TODO(wittjosiah): Schema.Any is currently used to represent template inputs.\n case 'AnyKeyword':\n case 'StringKeyword':\n return TextField;\n case 'NumberKeyword':\n return NumberField;\n case 'BooleanKeyword':\n return BooleanField;\n }\n};\n\nconst getSelectOptions = (ast: SchemaAST.AST): Format.Options[] | undefined => {\n if (isLiteralUnion(ast)) {\n return ast.types.map((type) => type.literal).filter((v): v is string | number => v !== null);\n }\n\n return Format.OptionsAnnotation.getFromAst(ast).pipe((annotation) => Option.getOrUndefined(annotation));\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { createAnnotationHelper } from '@dxos/echo/internal';\n\n/**\n * Annotation carrying one or more named `FormLayout` DSL templates that\n * control how `Form.FieldSet` / `Form.Layout` arrange a schema's fields.\n * Callers select a variant via the `name` prop; the implicit name is\n * `DEFAULT_LAYOUT_NAME` (`'default'`).\n *\n * Templates use a minimal XML grammar — see `parser.ts`. Example:\n *\n * FormLayoutAnnotation.set({\n * default: `\n * <grid cols=\"2\">\n * <field name=\"origin\"/>\n * <field name=\"destination\"/>\n * <field name=\"provider\" span=\"2\"/>\n * </grid>\n * `,\n * card: `\n * <grid cols=\"1\">\n * <field name=\"provider\"/>\n * <field name=\"number\"/>\n * </grid>\n * `,\n * })\n */\nexport const FormLayoutAnnotationId = Symbol.for('@dxos/react-ui-form/annotation/Layout');\n\nexport type FormLayoutMap = Record<string, string>;\n\nexport const FormLayoutAnnotation = createAnnotationHelper<FormLayoutMap>(FormLayoutAnnotationId);\n\n/** Name used when no explicit variant is requested. */\nexport const DEFAULT_LAYOUT_NAME = 'default';\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport type * as Schema from 'effect/Schema';\nimport React, { Fragment, useMemo } from 'react';\n\nimport { type AnyProperties } from '@dxos/echo/internal';\nimport { type SchemaProperty } from '@dxos/effect';\n\nimport { getFormProperties } from '../../../util';\nimport { FormField, type FormFieldProps } from '../FormField';\nimport { FormFieldErrorBoundary } from '../FormFieldComponent';\nimport { DEFAULT_LAYOUT_NAME, FormLayoutAnnotation } from './annotation';\nimport { LayoutParseError, type LayoutNode, parseLayout } from './parser';\n\nconst FORM_LAYOUT_NAME = 'Form.Layout';\n\nexport type FormLayoutProps = {\n /**\n * Template string in the FormLayout DSL (`<grid cols=…><field name=…/></grid>`).\n * If omitted, the layout is read from the schema's `FormLayoutAnnotation` —\n * the entry named by `name` (default: `'default'`).\n */\n template?: string;\n /**\n * Picks a named layout out of `FormLayoutAnnotation`'s map when no\n * explicit `template` is supplied. Defaults to `'default'`.\n */\n name?: string;\n} & Pick<FormFieldSetSubset, 'schema' | 'path' | 'readonly' | 'layout' | 'projection' | 'fieldMap' | 'fieldProvider'>;\n\ntype FormFieldSetSubset = Pick<\n FormFieldProps,\n 'path' | 'readonly' | 'layout' | 'projection' | 'fieldMap' | 'fieldProvider'\n> & {\n schema: Schema.Schema<AnyProperties>;\n};\n\n/**\n * Lays out schema fields according to a `FormLayout` DSL template. The template\n * is either passed via the `template` prop or read from the schema's\n * `FormLayoutAnnotation`. Fields not referenced in the template are hidden —\n * the template controls exactly what renders.\n */\nexport const FormLayout = ({\n schema,\n template,\n name = DEFAULT_LAYOUT_NAME,\n path,\n readonly,\n layout,\n projection,\n ...props\n}: FormLayoutProps) => {\n const annotated = Option.getOrUndefined(FormLayoutAnnotation.get(schema));\n const source = template ?? annotated?.[name];\n if (source === undefined) {\n throw new LayoutParseError(\n annotated\n ? `no layout named \"${name}\" on schema (available: ${Object.keys(annotated).join(', ') || '∅'})`\n : `no template provided and schema has no FormLayoutAnnotation`,\n );\n }\n\n const tree = useMemo(() => parseLayout(source), [source]);\n const properties = useMemo(() => {\n const map = new Map<string, SchemaProperty>();\n for (const property of getFormProperties(schema.ast)) {\n map.set(String(property.name), property);\n }\n return map;\n }, [schema]);\n\n return (\n <RenderNode\n node={tree}\n properties={properties}\n basePath={path ?? []}\n readonly={readonly}\n layout={layout}\n projection={projection}\n {...props}\n />\n );\n};\n\nFormLayout.displayName = FORM_LAYOUT_NAME;\n\ntype RenderNodeProps = Omit<FormLayoutProps, 'schema' | 'template' | 'path'> & {\n node: LayoutNode;\n properties: Map<string, SchemaProperty>;\n basePath: (string | number)[];\n};\n\nconst RenderNode = ({ node, properties, basePath, ...props }: RenderNodeProps) => {\n if (node.kind === 'grid') {\n return (\n <div className='grid gap-x-form-gap' style={{ gridTemplateColumns: `repeat(${node.cols}, minmax(0, 1fr))` }}>\n {node.children.map((child, index) => (\n <Fragment key={index}>\n <RenderNode node={child} properties={properties} basePath={basePath} {...props} />\n </Fragment>\n ))}\n </div>\n );\n }\n\n const property = properties.get(node.name);\n if (!property) {\n throw new LayoutParseError(`field \"${node.name}\" not found on schema`);\n }\n const path = [...basePath, node.name];\n const span = node.span ? { gridColumn: `span ${node.span} / span ${node.span}` } : undefined;\n return (\n <div className='min-w-0' style={span}>\n <FormFieldErrorBoundary path={path}>\n <FormField type={property.type} name={node.name} path={path} {...props} />\n </FormFieldErrorBoundary>\n </div>\n );\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\n/**\n * Minimal XML-style DSL for laying out schema fields in a grid.\n *\n * Grammar:\n * <grid cols=\"N\"> ...children... </grid>\n * <field name=\"x\" span=\"N\"/>\n *\n * - Attributes accept `\"…\"`, `'…'`, or unquoted integers.\n * - Whitespace between tags is ignored. Text content (between tags) is forbidden.\n * - Self-closing form (`<field … />`) is required for `field`; `grid` must use a closing tag.\n *\n * The parser is hand-rolled (no HTML parser) because the grammar is tiny.\n */\n\n/** Node type for the parsed layout tree. */\nexport type LayoutNode =\n | { readonly kind: 'grid'; readonly cols: number; readonly children: readonly LayoutNode[] }\n | { readonly kind: 'field'; readonly name: string; readonly span?: number };\n\nexport class LayoutParseError extends Error {\n readonly _tag = 'LayoutParseError';\n constructor(\n message: string,\n readonly position?: number,\n ) {\n super(position !== undefined ? `${message} (at position ${position})` : message);\n }\n}\n\nconst TAG_RE = /<\\s*(\\/?)\\s*(\\w+)([^>]*?)(\\/?)\\s*>/g;\nconst ATTR_RE = /([\\w-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|(\\d+))/g;\n\ntype Token =\n | { type: 'open'; name: string; attrs: Record<string, string>; selfClosing: boolean; position: number }\n | { type: 'close'; name: string; position: number };\n\nconst parseAttrs = (raw: string): Record<string, string> => {\n const attrs: Record<string, string> = {};\n ATTR_RE.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = ATTR_RE.exec(raw)) !== null) {\n const [, key, doubleQuoted, singleQuoted, bare] = match;\n attrs[key] = doubleQuoted ?? singleQuoted ?? bare;\n }\n return attrs;\n};\n\nconst tokenize = (input: string): Token[] => {\n const tokens: Token[] = [];\n TAG_RE.lastIndex = 0;\n let match: RegExpExecArray | null;\n let cursor = 0;\n while ((match = TAG_RE.exec(input)) !== null) {\n // Validate that any text between the previous tag and this one is whitespace-only.\n const between = input.slice(cursor, match.index);\n if (between.trim().length > 0) {\n throw new LayoutParseError(`unexpected text content: ${JSON.stringify(between.trim())}`, cursor);\n }\n const [, slash, name, attrsRaw, selfSlash] = match;\n if (slash) {\n tokens.push({ type: 'close', name, position: match.index });\n } else {\n tokens.push({\n type: 'open',\n name,\n attrs: parseAttrs(attrsRaw),\n selfClosing: selfSlash === '/',\n position: match.index,\n });\n }\n cursor = match.index + match[0].length;\n }\n // Any trailing text after the last tag must also be whitespace.\n const trailing = input.slice(cursor);\n if (trailing.trim().length > 0) {\n throw new LayoutParseError(`unexpected text content: ${JSON.stringify(trailing.trim())}`, cursor);\n }\n return tokens;\n};\n\nconst requireAttr = (attrs: Record<string, string>, key: string, tag: string, position: number): string => {\n const value = attrs[key];\n if (value === undefined) {\n throw new LayoutParseError(`<${tag}> missing required attribute \"${key}\"`, position);\n }\n return value;\n};\n\nconst parseInteger = (value: string, attr: string, tag: string, position: number): number => {\n if (!/^\\d+$/.test(value)) {\n throw new LayoutParseError(\n `<${tag}> attribute \"${attr}\" expects an integer, got ${JSON.stringify(value)}`,\n position,\n );\n }\n return Number.parseInt(value, 10);\n};\n\n/** Parses a layout template string into a single root node. The root must be `<grid>`. */\nexport const parseLayout = (template: string): LayoutNode => {\n const tokens = tokenize(template);\n if (tokens.length === 0) {\n throw new LayoutParseError('empty template');\n }\n\n let index = 0;\n\n const parseNode = (): LayoutNode => {\n const token = tokens[index];\n if (!token || token.type !== 'open') {\n throw new LayoutParseError(`expected an opening tag, got ${JSON.stringify(token)}`, token?.position);\n }\n\n if (token.name === 'field') {\n if (!token.selfClosing) {\n throw new LayoutParseError('<field> must be self-closing (e.g. <field name=\"x\"/>)', token.position);\n }\n const name = requireAttr(token.attrs, 'name', 'field', token.position);\n const spanRaw = token.attrs.span;\n const span = spanRaw !== undefined ? parseInteger(spanRaw, 'span', 'field', token.position) : undefined;\n index += 1;\n return { kind: 'field', name, span };\n }\n\n if (token.name === 'grid') {\n if (token.selfClosing) {\n throw new LayoutParseError('<grid> must wrap children (cannot self-close)', token.position);\n }\n const cols = parseInteger(\n requireAttr(token.attrs, 'cols', 'grid', token.position),\n 'cols',\n 'grid',\n token.position,\n );\n index += 1;\n const children: LayoutNode[] = [];\n while (index < tokens.length && !(tokens[index].type === 'close' && tokens[index].name === 'grid')) {\n children.push(parseNode());\n }\n const closing = tokens[index];\n if (!closing || closing.type !== 'close' || closing.name !== 'grid') {\n throw new LayoutParseError('<grid> not closed', token.position);\n }\n index += 1;\n return { kind: 'grid', cols, children };\n }\n\n throw new LayoutParseError(`unknown element <${token.name}>`, token.position);\n };\n\n const root = parseNode();\n if (index !== tokens.length) {\n const trailing = tokens[index];\n throw new LayoutParseError(\n `unexpected trailing tag <${trailing.type === 'open' ? '' : '/'}${trailing.name}>`,\n trailing.position,\n );\n }\n if (root.kind !== 'grid') {\n throw new LayoutParseError('root element must be <grid>');\n }\n return root;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type SwitchProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const BooleanField = ({ type, readonly, onValueChange, ...props }: FormFieldComponentProps<boolean>) => {\n const handleChange = useCallback<NonNullable<SwitchProps['onCheckedChange']>>(\n (value) => onValueChange?.(type, value),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<boolean> readonly={readonly} {...props}>\n {({ value }) => <Input.Switch disabled={!!readonly} checked={value} onCheckedChange={handleChange} />}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { format as formatDate } from 'date-fns';\nimport React, { useCallback } from 'react';\n\nimport { Format } from '@dxos/echo';\nimport { Input } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\n/**\n * Stored value shapes:\n * - `Format.DateTime` -> ISO 8601 (`2018-11-13T20:20:39.000Z`).\n * - `Format.Date` -> `YYYY-MM-DD`.\n * - `Format.Time` -> `HH:mm:ss`.\n *\n * Segmented input value shapes (react-aria-components-backed):\n * - `Input.DateTime` -> `YYYY-MM-DDTHH:mm` in local time.\n * - `Input.Date` -> `YYYY-MM-DD`.\n * - `Input.Time` -> `HH:mm`.\n */\n\n/** ISO 8601 → `YYYY-MM-DDTHH:mm` in the user's local timezone. */\nconst isoToLocalDateTime = (value: string | undefined): string => {\n if (!value) {\n return '';\n }\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) {\n return '';\n }\n return formatDate(date, \"yyyy-MM-dd'T'HH:mm\");\n};\n\n/** `YYYY-MM-DDTHH:mm` (local) → ISO 8601 with timezone. */\nconst localDateTimeToIso = (value: string): string | undefined => {\n if (!value) {\n return undefined;\n }\n // Treat the input as local time. `new Date('YYYY-MM-DDTHH:mm')` parses as local.\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? undefined : date.toISOString();\n};\n\nexport const DateField = ({\n type,\n format,\n readonly,\n placeholder: _placeholder,\n onValueChange,\n onBlur: _onBlur,\n ...props\n}: FormFieldComponentProps<string>) => {\n const handleSimpleChange = useCallback((next: string) => onValueChange(type, next), [type, onValueChange]);\n\n const handleDateTimeChange = useCallback(\n (next: string) => {\n const iso = localDateTimeToIso(next);\n onValueChange(type, iso as string);\n },\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<string> readonly={readonly} {...props}>\n {({ value }) => {\n switch (format) {\n case Format.TypeFormat.Date:\n return (\n <div className='grid grid-cols-[1fr_min-content] items-center gap-1'>\n <Input.Date disabled={!!readonly} value={value ?? ''} onValueChange={handleSimpleChange} />\n <Input.TriggerIcon />\n </div>\n );\n case Format.TypeFormat.Time:\n return <Input.Time disabled={!!readonly} value={value ?? ''} onValueChange={handleSimpleChange} />;\n case Format.TypeFormat.DateTime:\n default:\n return (\n <div className='grid grid-cols-[1fr_min-content] items-center gap-1'>\n <Input.DateTime\n disabled={!!readonly}\n value={isoToLocalDateTime(value)}\n onValueChange={handleDateTimeChange}\n />\n <Input.TriggerIcon />\n </div>\n );\n }\n }}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { GeoLocation, type GeoPoint } from '@dxos/echo/internal';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { translationKey } from '#translations';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport const GeoPointField = ({\n type,\n label,\n jsonPath,\n readonly,\n layout,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: FormFieldComponentProps<GeoPoint>) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const geoPoint = useMemo<GeoPoint>(() => getValue() ?? [0, 0], [getValue]);\n const value = useMemo(() => GeoLocation.fromGeoPoint(geoPoint), [geoPoint]);\n\n const [longitudeText, setLongitudeText] = useState(value.longitude?.toString());\n const [latitudeText, setLatitudeText] = useState(value.latitude?.toString());\n useEffect(() => {\n const location = GeoLocation.fromGeoPoint(geoPoint);\n setLongitudeText(location.longitude?.toString());\n setLatitudeText(location.latitude?.toString());\n }, [geoPoint]);\n\n const handleChange = useCallback(\n (coordinateType: keyof Pick<GeoLocation, 'longitude' | 'latitude'>, setText: (text: string) => void) =>\n (event: ChangeEvent<HTMLInputElement>) => {\n const inputText = event.target.value;\n setText(inputText);\n if (inputText !== '' && inputText !== '-') {\n const coord = safeParseFloat(inputText);\n if (coord !== undefined && !isNaN(coord)) {\n const currentLocation = GeoLocation.fromGeoPoint(getValue() ?? [0, 0]);\n const newLocation = { ...currentLocation, [coordinateType]: coord };\n const newValue = GeoLocation.toGeoPoint(newLocation);\n onValueChange(type, newValue);\n }\n }\n },\n [type, getValue, onValueChange],\n );\n\n if ((readonly || layout === 'static') && !value?.latitude && !value?.longitude) {\n return null;\n }\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && (\n <FormFieldLabel error={error} readonly={readonly} label={label} path={jsonPath} asChild />\n )}\n {layout === 'static' ? (\n <LatLng {...value} />\n ) : (\n <div className='grid grid-cols-2 gap-form-gap'>\n <div>\n <Input.Root>\n {layout !== 'inline' && <Input.Label>{t('latitude.label')}</Input.Label>}\n <Input.TextInput\n type='number'\n step='0.00001'\n min='-90'\n max='90'\n disabled={!!readonly}\n placeholder={t('latitude.placeholder')}\n value={latitudeText ?? ''}\n onChange={handleChange('latitude', setLatitudeText)}\n onBlur={onBlur}\n />\n </Input.Root>\n </div>\n <div>\n <Input.Root>\n {layout !== 'inline' && <Input.Label>{t('longitude.label')}</Input.Label>}\n <Input.TextInput\n type='number'\n step='0.00001'\n min='-180'\n max='180'\n disabled={!!readonly}\n placeholder={t('longitude.placeholder')}\n value={longitudeText ?? ''}\n onChange={handleChange('longitude', setLongitudeText)}\n onBlur={onBlur}\n />\n </Input.Root>\n </div>\n </div>\n )}\n </Input.Root>\n );\n};\n\nconst LatLng = ({ latitude = 0, longitude = 0 }: GeoLocation) => {\n const latHem = latitude >= 0 ? 'N' : 'S';\n const lngHem = longitude >= 0 ? 'E' : 'W';\n\n return (\n <span className='inline-flex items-center gap-form-gap'>\n <span>\n <span>{Math.abs(latitude).toFixed(5)}</span>\n <span className='text-subdued'>°{latHem}</span>\n </span>\n <span>\n <span>{Math.abs(longitude).toFixed(5)}</span>\n <span className='text-subdued'>°{lngHem}</span>\n </span>\n </span>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { type Database, Obj, Ref } from '@dxos/echo';\nimport { AtomRef } from '@dxos/echo-atom';\nimport { createDocAccessor } from '@dxos/echo-db';\nimport { Button, Icon, Input, useTranslation } from '@dxos/react-ui';\nimport { Editor, useBasicMarkdownExtensions } from '@dxos/react-ui-editor';\nimport { Text } from '@dxos/schema';\nimport { createDataExtensions } from '@dxos/ui-editor';\n\nimport { translationKey } from '#translations';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nconst editorClassNames =\n 'transition-colors bg-input-surface focus-within:bg-focus-surface border border-separator rounded-xs p-1 px-2';\n\n/**\n * Form field that edits a markdown value in a CodeMirror editor.\n * Supports two backings:\n * - `Schema.String` annotated with `Format.TypeFormat.Markdown`: edited as plain text via `getValue`/`onValueChange`.\n * - `Ref<Text>` annotated with `Format.TypeFormat.Markdown`: edited in-place via an Automerge doc accessor.\n * When the ref is empty and a database is available, a create button is shown to allocate a new Text.\n */\nexport const MarkdownField = ({\n type,\n readonly,\n label,\n jsonPath,\n placeholder,\n layout,\n db,\n getStatus,\n getValue,\n onValueChange,\n}: FormFieldComponentProps) => {\n const { status, error } = getStatus();\n const isRef = Ref.isRefType(type);\n const value = getValue();\n\n if ((readonly || layout === 'static') && value == null) {\n return null;\n }\n\n const renderEditor = () => {\n if (isRef) {\n const reference = value as Ref.Ref<any> | undefined;\n if (reference) {\n return <RefMarkdownEditor reference={reference} placeholder={placeholder} />;\n }\n\n if (readonly) {\n return null;\n }\n\n return <CreateTextButton db={db} disabled={!db} onCreate={(ref) => onValueChange(type, ref)} />;\n }\n\n return (\n <StringMarkdownEditor\n value={(value as string | undefined) ?? ''}\n placeholder={placeholder}\n readonly={!!readonly}\n onChange={(next) => onValueChange(type, next)}\n />\n );\n };\n\n const renderStatic = () => {\n if (isRef) {\n const reference = value as Ref.Ref<any> | undefined;\n return reference ? <RefStaticText reference={reference} /> : null;\n }\n return <p className='whitespace-pre-wrap'>{(value as string | undefined) ?? ''}</p>;\n };\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} path={jsonPath} />}\n {layout === 'static' ? renderStatic() : renderEditor()}\n {layout === 'full' && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n\n/** Read-only static rendering for a `Ref<Text>` value: resolve the ref and print its content. */\nconst RefStaticText = ({ reference }: { reference: Ref.Ref<any> }) => {\n const text = useAtomValue(useMemo(() => AtomRef.make(reference), [reference]));\n if (!text?.content) {\n return null;\n }\n return <p className='whitespace-pre-wrap'>{text.content}</p>;\n};\n\ntype RefMarkdownEditorProps = {\n reference: Ref.Ref<any>;\n placeholder?: string;\n};\n\nconst RefMarkdownEditor = ({ reference, placeholder }: RefMarkdownEditorProps) => {\n const text = useAtomValue(useMemo(() => AtomRef.make(reference), [reference]));\n const dataExtensions = useMemo(\n () => (text ? [createDataExtensions({ id: reference.uri, text: createDocAccessor(text, ['content']) })] : []),\n [text, reference],\n );\n const extensions = useBasicMarkdownExtensions({ placeholder, extensions: dataExtensions });\n if (!text) {\n return null;\n }\n\n return (\n <Editor.Root>\n <Editor.View classNames={editorClassNames} extensions={extensions} />\n </Editor.Root>\n );\n};\n\ntype StringMarkdownEditorProps = {\n value: string;\n placeholder?: string;\n readonly?: boolean;\n onChange: (value: string) => void;\n};\n\nconst StringMarkdownEditor = ({ value, placeholder, readonly, onChange }: StringMarkdownEditorProps) => {\n const extensions = useBasicMarkdownExtensions({ placeholder });\n const handleChange = useCallback((next: string) => onChange(next), [onChange]);\n\n return (\n <Editor.Root>\n <Editor.View\n classNames={editorClassNames}\n extensions={extensions}\n value={value}\n onChange={readonly ? undefined : handleChange}\n />\n </Editor.Root>\n );\n};\n\ntype CreateTextButtonProps = {\n db?: Database.Database;\n disabled?: boolean;\n onCreate: (ref: Ref.Ref<Text.Text>) => void;\n};\n\nconst CreateTextButton = ({ db, disabled, onCreate }: CreateTextButtonProps) => {\n const { t } = useTranslation(translationKey);\n const handleClick = useCallback(() => {\n if (!db) {\n return;\n }\n const text = db.add(Obj.make(Text.Text, { content: '' }));\n onCreate(Ref.make(text));\n }, [db, onCreate]);\n\n return (\n <Button onClick={handleClick} disabled={disabled}>\n <Icon icon='ph--plus--regular' size={4} />\n <span>{t('create-text.label')}</span>\n </Button>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type TextInputProps } from '@dxos/react-ui';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const NumberField = ({\n type,\n readonly,\n placeholder,\n onValueChange,\n onBlur,\n ...props\n}: FormFieldComponentProps<number>) => {\n const handleChange = useCallback<NonNullable<TextInputProps['onChange']>>(\n (event) => onValueChange(type, safeParseFloat(event.target.value) || 0),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<number> readonly={readonly} {...props}>\n {({ value = '' }) => (\n <Input.TextInput\n type='number'\n disabled={!!readonly}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onBlur={onBlur}\n />\n )}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport '@dxos/lit-ui/dx-tag-picker.pcss';\nimport { type Database, Entity, Filter, Obj, Ref, Type } from '@dxos/echo';\nimport { useQuery, useType as defaultUseType } from '@dxos/echo-react';\nimport { ANY_OBJECT_TYPENAME, ReferenceAnnotationId, type ReferenceAnnotationValue } from '@dxos/echo/internal';\nimport { findAnnotation } from '@dxos/effect';\nimport { URI } from '@dxos/keys';\nimport { DxAnchor } from '@dxos/lit-ui/react';\nimport { Button, Icon, Input, useTranslation } from '@dxos/react-ui';\nimport { ParentLabelAnnotationId } from '@dxos/schema';\n\nimport { translationKey } from '#translations';\n\nimport { ObjectPicker, type ObjectPickerContentProps, type RefOption } from '../../ObjectPicker';\nimport { omitHiddenFormFields, omitId } from '../Form';\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\n// TODO(burdon): Factor out.\nconst isRefSnapshot = (val: any): val is { '/': string } => {\n return typeof val === 'object' && typeof (val as any)?.['/'] === 'string';\n};\n\nconst defaultGetOptions: NonNullable<RefFieldProps['getOptions']> = (results, { parentLabel } = {}) =>\n results.map((result) => {\n const id = Entity.getURI(result);\n const parent = parentLabel ? Obj.getParent(result as Obj.Unknown) : undefined;\n const label = parent ? Entity.getLabel(parent) : Entity.getLabel(result);\n return { id, label: label ?? id };\n });\n\nconst defaultUseResults: NonNullable<RefFieldProps['useResults']> = (db, typename) =>\n useQuery(\n db,\n typename\n ? // For Ref.Ref(Obj.Unknown) we want to show all objects.\n typename === ANY_OBJECT_TYPENAME\n ? Filter.everything()\n : Filter.typename(typename)\n : Filter.nothing(),\n );\n\nexport type RefFieldProps = FormFieldComponentProps &\n Pick<\n ObjectPickerContentProps,\n 'createOptionLabel' | 'createOptionIcon' | 'createInitialValuePath' | 'createFieldMap'\n > & {\n db?: Database.Database;\n // TODO(burdon): Replace hooks with callbacks.\n useType?: (db?: Database.Database, typename?: string) => Type.AnyEntity;\n useResults?: (db?: Database.Database, typename?: string) => Entity.Any[];\n getOptions?: (objects: Entity.Any[], options?: { parentLabel?: boolean }) => RefOption[];\n /**\n * Persist a newly-created object. Called after the user fills out the\n * inline create form and clicks Save. Should add the object to the\n * database and return it (sync or async). The returned object is then\n * wired into this slot's form value as a Ref.\n */\n onCreate?: (schema: Type.AnyEntity, values: any) => Obj.Unknown | Promise<Obj.Unknown> | undefined | void;\n };\n\nexport const RefField = (props: RefFieldProps) => {\n const {\n type,\n readonly,\n label,\n jsonPath,\n placeholder,\n layout,\n getStatus,\n getValue,\n createOptionLabel,\n createOptionIcon,\n createInitialValuePath,\n createFieldMap,\n db,\n useType = defaultUseType,\n useResults = defaultUseResults,\n getOptions = defaultGetOptions,\n onCreate,\n onValueChange,\n } = props;\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n\n const typename = useMemo(\n () => (type ? findAnnotation<ReferenceAnnotationValue>(type, ReferenceAnnotationId)?.typename : undefined),\n [type],\n );\n\n const results = useResults(db, typename);\n const options = useMemo(() => {\n const parentLabel = type ? findAnnotation<boolean>(type, ParentLabelAnnotationId) === true : false;\n return getOptions(results, { parentLabel });\n }, [results, getOptions, type]);\n\n const handleGetValue = useCallback(() => {\n const formValue = getValue();\n // Match form-value Refs against options by the bare object id (last DXN\n // segment), not by full DXN string. Ref.make uses\n // `DXN.fromLocalObjectId(id)` (`dxn:echo:@:<id>`), but\n // `Entity.getURI(obj)` on a registered object produces the space-scoped\n // form (`dxn:echo:<spaceId>:<id>`). String-comparing the two never\n // matches, so the just-created Ref's option lookup fails and the slot\n // displays as empty even though the underlying form value IS set.\n const dxnToObjectId = (dxn: string): string => dxn.split(':').pop() ?? dxn;\n\n const unknownToRefOption = (value: unknown) => {\n const isRef = Ref.isRef(value);\n if (isRef || isRefSnapshot(value)) {\n const dxnString = isRef ? value.uri : value['/'];\n const objectId = dxnToObjectId(dxnString);\n const matchingOption = options.find((option) => dxnToObjectId(option.id) === objectId);\n if (matchingOption) {\n return matchingOption;\n }\n }\n\n return undefined;\n };\n\n return unknownToRefOption(formValue);\n }, [options, getValue]);\n\n const item = handleGetValue();\n const selectedIds = useMemo(() => (item ? [item.id] : []), [item]);\n const createSchema = useType(db, typename);\n\n // Lift the popover open state so we can dismiss it after a successful create.\n const [open, setOpen] = useState(false);\n\n const handleCreate = useCallback(\n async (values: any) => {\n if (!createSchema || !onCreate) {\n return;\n }\n const newObject = await onCreate(createSchema, values);\n if (newObject) {\n // Wire the newly-created object into this slot's form value. ArrayField\n // owns the array; this RefField represents a single slot, so writing a\n // Ref via `onValueChange` populates that slot.\n onValueChange(type, Ref.make(newObject));\n }\n setOpen(false);\n },\n [createSchema, onCreate, type, onValueChange],\n );\n\n const handleUpdate = useCallback(\n (id: string | undefined) => {\n const item = options.find((option) => option.id === id);\n const ref = item ? Ref.fromURI(URI.make(item.id)) : undefined;\n onValueChange(type, ref);\n },\n [options, type, onValueChange],\n );\n\n const handleSelect = useCallback(\n (id: string) => {\n if (item?.id === id) {\n handleUpdate(undefined);\n } else {\n handleUpdate(id);\n }\n },\n [item, handleUpdate],\n );\n\n if (!typename || ((readonly || layout === 'static') && !item)) {\n return null;\n }\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} path={jsonPath} />}\n <div>\n {readonly ? (\n !item ? (\n <p className='text-description mb-2'>{t('empty-readonly-ref-field.label')}</p>\n ) : (\n <DxAnchor key={item.id} dxn={item.id} rootclassname='me-1'>\n {item.label}\n </DxAnchor>\n )\n ) : (\n <ObjectPicker.Root open={open} onOpenChange={setOpen}>\n <ObjectPicker.Trigger asChild classNames='p-0'>\n {item ? (\n <div className='flex gap-form-gap w-full'>\n <Input.Root key={item.id}>\n <Input.TextInput value={item.label} readOnly classNames='w-full' />\n </Input.Root>\n </div>\n ) : (\n <Button classNames='w-full text-start gap-form-gap'>\n <div className='grow overflow-hidden'>\n <span className='truncate text-description'>\n {placeholder || label || t('ref-field.placeholder')}\n </span>\n </div>\n <Icon size={3} icon='ph--caret-down--bold' />\n </Button>\n )}\n </ObjectPicker.Trigger>\n <ObjectPicker.Portal>\n <ObjectPicker.Content\n classNames='dx-card-popover-width'\n options={options}\n selectedIds={selectedIds}\n // Strip hidden (`FormInputAnnotation.set(false)`) fields so the\n // form's validator doesn't reject required-but-hidden fields\n // such as backing-object refs supplied by a `FactoryAnnotation`.\n createSchema={createSchema && omitHiddenFormFields(omitId(Type.getSchema(createSchema)))}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n createInitialValuePath={createInitialValuePath}\n createFieldMap={createFieldMap}\n onCreate={handleCreate}\n onSelect={handleSelect}\n />\n </ObjectPicker.Portal>\n </ObjectPicker.Root>\n )}\n </div>\n {layout === 'full' && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport React, { type KeyboardEvent, forwardRef, useCallback, useState } from 'react';\n\nimport { type Palette, Popover, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { Combobox } from '@dxos/react-ui-list';\nimport { useSearchListResults } from '@dxos/react-ui-search';\n\nimport { translationKey } from '#translations';\n\nimport { Form } from '../Form';\nimport { type FormFieldMap } from '../Form/FormFieldComponent';\n\nexport type RefOption = {\n id: string;\n label: string;\n hue?: Palette;\n};\n\nexport type ObjectPickerContentProps = ThemedClassName<{\n options: RefOption[];\n selectedIds?: string[];\n createOptionLabel?: [string, { ns: string }];\n createOptionIcon?: string;\n createSchema?: Schema.Schema.AnyNoContext;\n createInitialValuePath?: string;\n createFieldMap?: FormFieldMap;\n /**\n * Persist a newly-created object given the form values. May be async (e.g.\n * to write to a database). The Promise is awaited before the inline create\n * form is collapsed back to the picker list, so consumers can complete\n * follow-up work (assign the new ref to a parent slot, close the popover)\n * before the picker UI re-renders.\n */\n onCreate?: (values: any) => unknown | Promise<unknown>;\n onSelect: (id: string) => void;\n}>;\n\nconst ObjectPickerContent = forwardRef<HTMLDivElement, ObjectPickerContentProps>(\n (\n {\n options,\n selectedIds,\n createSchema,\n createOptionLabel,\n createOptionIcon,\n createInitialValuePath,\n createFieldMap,\n onSelect,\n onCreate,\n ...props\n },\n forwardedRef,\n ) => {\n const { t } = useTranslation(translationKey);\n const [showForm, setShowForm] = useState(false);\n const [formInitialValue, setFormInitialValue] = useState<string>('');\n\n const { results, query, handleSearch } = useSearchListResults({\n items: options,\n });\n\n const handleFormSave = useCallback(\n async (values: any) => {\n await onCreate?.(values);\n setShowForm(false);\n setFormInitialValue('');\n },\n [onCreate],\n );\n\n const handleFormCancel = useCallback(() => {\n setShowForm(false);\n setFormInitialValue('');\n }, []);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (\n event.key === 'Enter' &&\n createSchema &&\n (event.currentTarget as HTMLElement).querySelector(\n '[role=\"option\"][aria-selected=\"true\"][data-value=\"__create__\"]',\n )\n ) {\n event.stopPropagation();\n event.preventDefault();\n // Get the current query from the input element\n const input = (event.currentTarget as HTMLElement).querySelector('input[type=\"text\"]') as HTMLInputElement;\n const currentQuery = input?.value || '';\n setFormInitialValue(currentQuery);\n setShowForm(true);\n }\n },\n [createSchema],\n );\n\n if (showForm && createSchema) {\n return (\n <Combobox.Content {...props} onKeyDownCapture={handleKeyDown} ref={forwardedRef}>\n <Popover.Viewport>\n <Form.Root\n testId='create-referenced-object-form'\n schema={createSchema}\n defaultValues={createInitialValuePath ? { [createInitialValuePath]: formInitialValue } : {}}\n fieldMap={createFieldMap}\n onSave={handleFormSave}\n onCancel={handleFormCancel}\n >\n <Form.Viewport>\n <Form.Content>\n <Form.FieldSet />\n <Form.Actions />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n </Popover.Viewport>\n <Combobox.Arrow />\n </Combobox.Content>\n );\n }\n\n return (\n <Combobox.Content {...props} onKeyDownCapture={handleKeyDown} ref={forwardedRef}>\n <Combobox.Input\n placeholder={t('ref-field-combobox-input.placeholder')}\n autoFocus\n value={query}\n onValueChange={handleSearch}\n />\n <Combobox.List>\n {results.map((option) => (\n <Combobox.Item\n key={option.id}\n value={option.id}\n label={option.label}\n checked={selectedIds?.includes(option.id)}\n onSelect={() => onSelect(option.id)}\n classNames='flex items-center gap-2'\n />\n ))}\n {createSchema && onCreate && (\n <CreateItem\n query={query}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon ?? 'ph--plus--regular'}\n onCreateItemSelect={(currentQuery: string) => {\n setFormInitialValue(currentQuery);\n setShowForm(true);\n }}\n />\n )}\n </Combobox.List>\n <Combobox.Arrow />\n </Combobox.Content>\n );\n },\n);\n\nconst CreateItem = ({\n query,\n createOptionLabel,\n createOptionIcon,\n onCreateItemSelect,\n}: {\n query: string;\n createOptionLabel?: [string, { ns: string }];\n createOptionIcon: string;\n onCreateItemSelect: (query: string) => void;\n}) => {\n const { t } = useTranslation(translationKey);\n\n const label = createOptionLabel\n ? t(createOptionLabel[0], { ns: createOptionLabel[1].ns, text: query })\n : t('create-option.label');\n\n return (\n <Combobox.Item\n value='__create__'\n label={label}\n icon={createOptionIcon}\n classNames='flex items-center gap-2'\n closeOnSelect={false}\n onSelect={() => {\n onCreateItemSelect(query);\n }}\n />\n );\n};\n\nObjectPickerContent.displayName = 'ObjectPicker.Content';\n\nexport const ObjectPicker = {\n Root: Combobox.Root,\n Portal: Combobox.Portal,\n Trigger: Combobox.Trigger,\n VirtualTrigger: Combobox.VirtualTrigger,\n Content: ObjectPickerContent,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Icon, Input, Select, type SelectRootProps } from '@dxos/react-ui';\nimport { getStyles } from '@dxos/ui-theme';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport type SelectFieldOptions = FormFieldComponentProps & {\n options?: Array<{ value: string | number; label?: string; secondaryLabel?: string; icon?: string; iconHue?: string }>;\n};\n\nexport const SelectField = ({\n type,\n readonly,\n label,\n jsonPath,\n layout,\n placeholder,\n options,\n getStatus,\n getValue,\n onValueChange,\n}: SelectFieldOptions) => {\n const { status, error } = getStatus();\n const value = getValue() as string | undefined;\n\n const handleValueChange = useCallback<NonNullable<SelectRootProps['onValueChange']>>(\n (value) => onValueChange(type, value),\n [type, onValueChange],\n );\n\n if ((readonly || layout === 'static') && value == null) {\n return null;\n }\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} path={jsonPath} />}\n {layout === 'static' ? (\n <p>{options?.find(({ value: optionValue }) => optionValue === value)?.label ?? String(value)}</p>\n ) : (\n <Select.Root value={value} onValueChange={handleValueChange}>\n {/* TODO(burdon): Placeholder not working? */}\n <Select.TriggerButton classNames='w-full' disabled={!!readonly} placeholder={placeholder} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {options?.map(({ value, label, secondaryLabel, icon, iconHue }) => (\n // NOTE: Numeric values are converted to and from strings.\n <Select.Option key={String(value)} value={String(value)}>\n <span className='flex items-center flex-row gap-2'>\n {icon && <Icon icon={icon} classNames={getIconHueStyles(iconHue)} />}\n {label ?? String(value)}\n {secondaryLabel && <span className='text-subdued text-xs'>{secondaryLabel}</span>}\n </span>\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n )}\n {layout === 'full' && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nconst getIconHueStyles = (iconHue?: string): string | undefined => {\n const styles = iconHue ? getStyles(iconHue) : undefined;\n\n return styles?.foreground;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type ChangeEvent, type KeyboardEvent, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { type SelectOption } from '@dxos/echo/internal';\nimport { PublicKey } from '@dxos/keys';\nimport { type ChromaticPalette, IconButton, Input, Tag, useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { HuePicker } from '@dxos/react-ui-pickers';\nimport { hues, osTranslations } from '@dxos/ui-theme';\n\nimport { translationKey } from '#translations';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport const SelectOptionField = ({\n type,\n readonly,\n label,\n jsonPath,\n getStatus,\n getValue,\n onValueChange,\n}: FormFieldComponentProps<SelectOption[] | undefined>) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const [selected, setSelectedId] = useState<string | null>(null);\n const [isNewOption, setIsNewOption] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const options = getValue();\n\n // Initialization.\n useEffect(() => {\n if (options === undefined) {\n onValueChange(type, []);\n }\n }, [options, type, onValueChange]);\n\n const randomHue = () => {\n const usedHues = new Set(options?.map((option) => option.color) ?? []);\n // Pick a random unused option from hueTokenThemes.\n const unusedHues = hues.filter((hue) => !usedHues.has(hue));\n if (unusedHues.length > 0) {\n return unusedHues[Math.floor(Math.random() * unusedHues.length)];\n }\n\n // Pick a random one that hasn't been used in the last three options\n const lastThree = new Set(options?.slice(-3).map((option) => option.color) ?? []);\n const availableHues = hues.filter((hue) => !lastThree.has(hue));\n return (\n availableHues[Math.floor(Math.random() * availableHues.length)] ?? hues[Math.floor(Math.random() * hues.length)]\n );\n };\n\n const handleAdd = useCallback(() => {\n const newId = PublicKey.random().truncate();\n const newOption = { id: newId, title: '', color: randomHue() };\n onValueChange(type, [...(options ?? []), newOption]);\n setSelectedId(newId);\n setIsNewOption(true);\n }, [options, type, onValueChange]);\n\n const handleDelete = useCallback(\n (id: string) => {\n const newOptions = options?.filter((option) => option.id !== id) ?? [];\n onValueChange(type, newOptions);\n setSelectedId(null);\n },\n [options, type, onValueChange],\n );\n\n const handleMove = useCallback(\n (from: number, to: number) => {\n if (!options) {\n return;\n }\n\n const newOptions = [...options];\n const [removed] = newOptions.splice(from, 1);\n newOptions.splice(to, 0, removed);\n onValueChange(type, newOptions);\n },\n [options, type, onValueChange],\n );\n\n const handleClick = useCallback((id: string) => {\n setSelectedId((current) => (current === id ? null : id));\n }, []);\n\n const handleTitleChange = useCallback(\n (id: string) => (e: ChangeEvent<HTMLInputElement>) => {\n const newOptions = options?.map((o) => (o.id === id ? { ...o, title: e.target.value } : o));\n onValueChange(type, newOptions ?? []);\n },\n [options, type, onValueChange],\n );\n\n const handleKeyDown = useCallback((ev: KeyboardEvent<HTMLInputElement>) => {\n if (ev.key === 'Enter') {\n setSelectedId(null);\n }\n }, []);\n\n const handleColorChange = useCallback(\n (id: string) => (hue: string) => {\n const newOptions = options?.map((o) => (o.id === id ? { ...o, color: hue } : o));\n onValueChange(type, newOptions ?? []);\n },\n [options, type, onValueChange],\n );\n\n useEffect(() => {\n if (selected && isNewOption && inputRef.current) {\n inputRef.current.focus();\n setIsNewOption(false);\n }\n }, [selected, isNewOption]);\n\n return (\n <Input.Root validationValence={status}>\n <FormFieldLabel error={error} readonly={readonly} label={label} path={jsonPath} />\n <div>\n {options && (\n <List.Root\n items={options}\n isItem={(_item) => true}\n onMove={readonly ? undefined : handleMove}\n readonly={!!readonly}\n >\n {({ items }) => (\n <div role='list' className='w-full overflow-auto'>\n {items?.map((item) => (\n <div key={item.id}>\n <List.Item\n role='button'\n item={item}\n classNames='flex flex-col cursor-pointer rounded-xs dx-hover'\n aria-expanded={selected === item.id}\n >\n <div className='flex items-center'>\n <List.ItemDragHandle disabled={!!readonly} />\n <List.ItemTitle onClick={() => handleClick(item.id)} classNames='flex-1'>\n {/* TODO(ZaymonFC): Move spacer into Tag component. */}\n <Tag palette={item.color as ChromaticPalette}>{item.title || '\\u200b'}</Tag>\n </List.ItemTitle>\n <IconButton\n iconOnly\n variant='ghost'\n label={t(selected === item.id ? 'collapse.label' : 'expand.label', { ns: osTranslations })}\n icon={selected === item.id ? 'ph--caret-down--regular' : 'ph--caret-right--regular'}\n onClick={() => handleClick(item.id)}\n />\n </div>\n {selected === item.id && (\n <div className='flex flex-col p-form-padding gap-form-gap dx-density-md'>\n <Input.Label classNames='text-sm'>{t('select-option.label')}</Input.Label>\n <div className='grid grid-cols-[1fr_min-content_min-content] gap-form-gap'>\n <Input.TextInput\n disabled={!!readonly}\n placeholder={t('select-option-label.placeholder')}\n ref={selected === item.id ? inputRef : undefined}\n value={item.title}\n onChange={handleTitleChange(item.id)}\n onKeyDown={handleKeyDown}\n classNames='flex-1'\n />\n <HuePicker disabled={!!readonly} value={item.color} onChange={handleColorChange(item.id)} />\n <IconButton\n disabled={!!readonly}\n icon='ph--trash--fill'\n iconOnly\n label={t('select-option-delete.button')}\n onClick={() => handleDelete(item.id)}\n />\n </div>\n </div>\n )}\n </List.Item>\n </div>\n ))}\n <IconButton\n variant='ghost'\n icon='ph--plus--regular'\n label={t('select-option-add.button')}\n onClick={handleAdd}\n disabled={!!readonly}\n classNames='w-full'\n />\n </div>\n )}\n </List.Root>\n )}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type TextInputProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const TextField = ({\n type,\n readonly,\n placeholder,\n onBlur,\n onValueChange,\n ...props\n}: FormFieldComponentProps<string>) => {\n const handleChange = useCallback<NonNullable<TextInputProps['onChange']>>(\n (event) => onValueChange(type, event.target.value),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<string> readonly={readonly} {...props}>\n {({ value = '' }) => (\n <Input.TextInput\n noAutoFill\n disabled={!!readonly}\n placeholder={placeholder}\n value={value}\n onBlur={onBlur}\n onChange={handleChange}\n />\n )}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type TextAreaProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const TextAreaField = ({\n type,\n readonly,\n placeholder,\n onValueChange,\n onBlur,\n ...props\n}: FormFieldComponentProps<string>) => {\n const handleChange = useCallback<NonNullable<TextAreaProps['onChange']>>(\n (event) => onValueChange(type, event.target.value),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<string> readonly={readonly} {...props}>\n {({ value = '' }) => (\n <Input.TextArea\n rows={5}\n disabled={!!readonly}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onBlur={onBlur}\n />\n )}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nconst gridCols = ['grid-cols-1', 'grid-cols-2', 'grid-cols-3', 'grid-cols-4'];\n\nexport const TupleField = ({\n binding,\n type,\n readonly,\n label,\n jsonPath,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: FormFieldComponentProps<Record<string, number>> & {\n binding: string[];\n}) => {\n const { status, error } = getStatus();\n\n // TODO(burdon): Generalize number/float/string, etc.\n const values: Record<string, number> = getValue() ?? {};\n\n return (\n <Input.Root validationValence={status}>\n <FormFieldLabel error={error} readonly={readonly} label={label} path={jsonPath} />\n <div className={mx('grid gap-form-gap', gridCols[binding.length - 1])}>\n {binding.map((prop) => (\n <Input.TextInput\n key={prop}\n type='number'\n disabled={!!readonly}\n value={values[prop]}\n onChange={(event) => {\n onValueChange(type, {\n ...values,\n [prop]: safeParseFloat(event.target.value, 0),\n });\n }}\n onBlur={onBlur}\n />\n ))}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Obj, Ref, Tag, Type } from '@dxos/echo';\nimport { type JsonPath, splitJsonPath } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { URI } from '@dxos/keys';\nimport { HuePicker } from '@dxos/react-ui-pickers';\nimport { isNonNullable } from '@dxos/util';\n\nimport { translationKey } from '#translations';\n\nimport { Form, type FormFieldMap, omitId } from '../Form';\n\nexport type ObjectFormProps = {\n type: Type.AnyEntity;\n object: Obj.Unknown;\n};\n\nconst createFieldMap: FormFieldMap = {\n hue: ({ type, label, layout, getValue, onValueChange }) => {\n const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange, type]);\n const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);\n return (\n <>\n {layout !== 'inline' && <Form.Label label={label} />}\n <HuePicker value={getValue()} onChange={handleChange} onReset={handleReset} />\n </>\n );\n },\n};\n\nexport const ObjectForm = ({ object, type }: ObjectFormProps) => {\n const db = Obj.getDatabase(object);\n const meta = Obj.getMeta(object);\n const tags = (meta.tags ?? []).map((tag) => db?.makeRef(URI.make(tag))).filter(isNonNullable);\n const values = useMemo(() => ({ tags, ...object }), [object, tags]);\n const formSchema = useMemo(\n () =>\n omitId(\n Schema.Struct({\n tags: Schema.Array(Ref.Ref(Tag.Tag)).pipe(Schema.optional),\n }).pipe(Schema.extend(Type.getSchema(type))),\n ),\n [type],\n );\n\n const handleCreate = useCallback((type: Type.AnyEntity, values: any) => {\n invariant(db);\n invariant(Type.isObject(type));\n const newObject = db.add(Obj.make(type, values));\n if (Obj.instanceOf(Tag.Tag, newObject)) {\n Obj.update(object, (object) => {\n Obj.getMeta(object).tags = [...(Obj.getMeta(object).tags ?? []), Obj.getURI(newObject)];\n });\n }\n }, []);\n\n // TODO(wittjosiah): Use FormRootProps type.\n const handleChange = useCallback(\n ({ tags, ...values }: any, { isValid, changed }: { isValid: boolean; changed: Record<JsonPath, boolean> }) => {\n if (!isValid) {\n return;\n }\n\n const changedPaths = Object.keys(changed).filter((path) => changed[path as JsonPath]) as JsonPath[];\n\n // Handle tags separately using Obj.update.\n const hasTagsChange = changedPaths.some((path) => splitJsonPath(path)[0] === 'tags');\n if (hasTagsChange) {\n Obj.update(object, (object) => {\n Obj.getMeta(object).tags = tags?.map((tag: Ref.Ref<Tag.Tag>) => tag.uri) ?? [];\n });\n }\n\n // Handle other property changes.\n const nonTagPaths = changedPaths.filter((path) => splitJsonPath(path)[0] !== 'tags');\n if (nonTagPaths.length > 0) {\n Obj.update(object, () => {\n for (const path of nonTagPaths) {\n const parts = splitJsonPath(path);\n const value = Obj.getValue(values, parts);\n Obj.setValue(object, parts, value);\n }\n });\n }\n },\n [object],\n );\n\n return (\n <Form.Root\n schema={formSchema}\n defaultValues={values}\n createTypename={Type.getTypename(Tag.Tag)}\n createOptionIcon='ph--plus--regular'\n createOptionLabel={['add-tag.label', { ns: translationKey }]}\n createInitialValuePath='label'\n createFieldMap={createFieldMap}\n db={db}\n onValuesChanged={handleChange}\n onCreate={handleCreate}\n >\n <Form.Viewport>\n <Form.Content>\n <Form.FieldSet />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport React, { type PropsWithChildren, useCallback, useMemo } from 'react';\n\nimport { Obj, Ref, Tag, Type } from '@dxos/echo';\nimport { useType } from '@dxos/echo-react';\nimport { type JsonPath, splitJsonPath } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { URI } from '@dxos/keys';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { HuePicker } from '@dxos/react-ui-pickers';\nimport { FactoryAnnotation } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { translationKey } from '#translations';\n\nimport { Form, type FormFieldMap, omitId } from '../Form';\n\nexport type ObjectPropertiesProps = PropsWithChildren<{ object: Obj.Unknown }>;\n\n// TODO(wittjosiah): Reconcile w/ ObjectForm.\nexport const ObjectProperties = composable<HTMLDivElement, ObjectPropertiesProps>(\n ({ children, object, ...props }, forwardedRef) => {\n const db = Obj.getDatabase(object);\n const meta = Obj.getMeta(object);\n const tags = (meta.tags ?? []).map((tag) => db?.makeRef(URI.make(tag))).filter(isNonNullable);\n const values = useMemo(() => ({ tags, ...object }), [object, tags]);\n\n // Obj.getType fails for database-registered (dynamic) schemas due to DXN mismatch;\n // useType queries by typename which correctly resolves both static and dynamic schemas.\n const typename = Obj.getTypename(object) ?? undefined;\n const typeFromRegistry = useType(db, typename);\n const type = Obj.getType(object) ?? typeFromRegistry;\n\n const formSchema = useMemo(() => {\n return Function.pipe(\n type,\n Option.fromNullable,\n Option.map((type) => Type.getSchema(type)),\n Option.map((schema) => omitId(BaseSchema.pipe(Schema.extend(schema)))),\n Option.getOrUndefined,\n );\n }, [type]);\n\n // Persist a newly-created object referenced by one of the form's ref\n // fields and return it. The calling RefField wires the new Ref into its\n // own slot's form value; for the BaseSchema `tags` array, the resulting\n // form change is then synced back to `Obj.getMeta(object).tags` by\n // `handleChange` below — so Tag.Tag follows the same generic path as any\n // other ref-array field, no type-specific branching required here.\n //\n // Schemas whose required structure can't be produced by `Obj.make(schema,\n // values)` alone (e.g. types with a required ref to a backing object) can\n // declare a `FactoryAnnotation` to take over construction.\n const handleCreate = useCallback(\n (type: Type.AnyEntity, values: any): Obj.Unknown => {\n invariant(db);\n invariant(Type.isObject(type));\n const factory = Option.getOrUndefined(FactoryAnnotation.get(Type.getSchema(type)));\n const newObject = factory ? (factory(values) as Obj.Unknown) : Obj.make(type, values);\n return db.add(newObject) as Obj.Unknown;\n },\n [db],\n );\n\n // TODO(wittjosiah): Use FormRootProps type.\n const handleChange = useCallback(\n ({ tags, ...values }: any, { isValid, changed }: { isValid: boolean; changed: Record<JsonPath, boolean> }) => {\n if (!isValid) {\n return;\n }\n\n const changedPaths = Object.keys(changed).filter((path) => changed[path as JsonPath]) as JsonPath[];\n\n // Handle tags separately using Obj.update.\n const hasTagsChange = changedPaths.some((path) => splitJsonPath(path)[0] === 'tags');\n if (hasTagsChange) {\n Obj.update(object, (object) => {\n Obj.getMeta(object).tags = tags?.map((tag: Ref.Ref<Tag.Tag>) => tag.uri) ?? [];\n });\n }\n\n // Handle other property changes.\n const nonTagPaths = changedPaths.filter((path) => splitJsonPath(path)[0] !== 'tags');\n if (nonTagPaths.length > 0) {\n Obj.update(object, () => {\n for (const path of nonTagPaths) {\n const parts = splitJsonPath(path);\n const value = Obj.getValue(values as any, parts);\n Obj.setValue(object, parts, value);\n }\n });\n }\n },\n [object],\n );\n\n if (!formSchema) {\n return null;\n }\n\n return (\n <Form.Root\n schema={formSchema}\n defaultValues={values as any}\n createTypename={Type.getTypename(Tag.Tag)}\n createOptionIcon='ph--plus--regular'\n createOptionLabel={['add-tag.label', { ns: translationKey }]}\n createInitialValuePath='label'\n createFieldMap={createFieldMap}\n db={db}\n onValuesChanged={handleChange}\n onCreate={handleCreate}\n >\n <Form.Viewport {...composableProps(props)} ref={forwardedRef}>\n <Form.Content>\n <Form.FieldSet />\n {children}\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n },\n);\n\nconst createFieldMap: FormFieldMap = {\n hue: ({ type, label, layout, getValue, onValueChange }) => {\n const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange, type]);\n const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);\n return (\n <>\n {layout !== 'inline' && <Form.Label label={label} />}\n <HuePicker value={getValue()} onChange={handleChange} onReset={handleReset} />\n </>\n );\n },\n};\n\n// TODO(wittjosiah): Would be nice to control order when extending so this isn't always first/last.\nconst BaseSchema = Schema.Struct({\n tags: Schema.Array(Ref.Ref(Tag.Tag)).pipe(Schema.optional),\n});\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// A minimal, read-only schema-driven viewer. Walks an Effect Schema and a\n// matching value and produces a flat list of indented key/value rows -- one\n// per leaf field, with nested Struct fields contributing a header row plus\n// recursively-indented children, and arrays expanded as `[index]` rows.\n//\n// Designed to drive a hierarchical editor over schemas produced by\n// `@dxos/effect-proto` (e.g. the proto-generated `dxos.config.Config`\n// schema), but works for any Effect Struct schema.\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport React, { type ReactElement, type ReactNode, type RefAttributes } from 'react';\n\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\nimport { type ComposableProps } from '@dxos/ui-types';\n\nexport type ObjectTreeProps<T> = {\n schema: Schema.Schema<T, any, never>;\n value: T;\n};\n\n/**\n * Render a value as a sequence of key/value rows whose shape and order are\n * driven by `schema`. Object-typed properties become a header row whose\n * children are indented under it; arrays expand element-by-element.\n *\n * Composable: spreads unknown props (incl. `className` / `classNames` /\n * `style` / `role`) onto its root `<div>` and forwards its ref, so it can\n * be slotted into themed parents like `Panel.Content`.\n */\nconst ObjectTreeImpl = composable<HTMLDivElement, ObjectTreeProps<any>>(({ schema, value, ...props }, forwardedRef) => (\n <div {...composableProps(props, { role: 'table', classNames: 'font-mono text-sm w-full' })} ref={forwardedRef}>\n <Node ast={schema.ast} value={value} label={null} depth={0} />\n </div>\n));\n\nObjectTreeImpl.displayName = 'ObjectTree';\n\n// `composable<HTMLDivElement, ObjectTreeProps<any>>` erases the `T` type\n// parameter inside the factory; the cast restores the generic signature for\n// consumers without changing the underlying component (the COMPOSABLE marker\n// stays attached). This is the pattern documented on `composable()` itself.\nexport const ObjectTree = ObjectTreeImpl as unknown as <T>(\n props: ComposableProps<ObjectTreeProps<T>> & RefAttributes<HTMLDivElement>,\n) => ReactElement | null;\n\n/**\n * Peel wrappers that don't affect the runtime shape: Refinements pass their\n * `from`, Suspends resolve via `f()`, and Transformations expose the encoded\n * (input) side. Repeated unwrapping handles chains like `Schema.suspend ->\n * Refinement -> TypeLiteral`.\n */\nconst unwrap = (ast: SchemaAST.AST): SchemaAST.AST => {\n if (SchemaAST.isRefinement(ast)) {\n return unwrap(ast.from);\n }\n if (SchemaAST.isSuspend(ast)) {\n return unwrap(ast.f());\n }\n if (SchemaAST.isTransformation(ast)) {\n return unwrap(ast.from);\n }\n return ast;\n};\n\n/**\n * Effect models `Schema.optional(X)` as a property whose type AST is\n * `Union(X, UndefinedKeyword)`. For walking purposes we want X -- the\n * undefined branch carries no schema information for the viewer.\n */\nconst stripOptional = (ast: SchemaAST.AST): SchemaAST.AST => {\n if (!SchemaAST.isUnion(ast)) {\n return ast;\n }\n const nonUndef = ast.types.filter((t) => !SchemaAST.isUndefinedKeyword(t));\n return nonUndef.length === 1 ? nonUndef[0] : ast;\n};\n\ntype NodeProps = {\n ast: SchemaAST.AST;\n value: unknown;\n /** Row label; `null` means render children directly without a header row. */\n label: ReactNode | null;\n depth: number;\n};\n\nconst Node = ({ ast, value, label, depth }: NodeProps) => {\n const inner = unwrap(stripOptional(ast));\n\n // Struct: header row + indented children. Skipping the header at depth 0\n // keeps the root flush-left.\n if (SchemaAST.isTypeLiteral(inner) && isPlainObject(value)) {\n const childDepth = label === null ? depth : depth + 1;\n return (\n <>\n {label !== null && <Row label={label} value={null} depth={depth} kind='group' />}\n {inner.propertySignatures.map((prop) => (\n <Node\n key={String(prop.name)}\n ast={prop.type}\n value={(value as Record<string, unknown>)[String(prop.name)]}\n label={String(prop.name)}\n depth={childDepth}\n />\n ))}\n </>\n );\n }\n\n // Array (`Schema.Array(X)` -> TupleType with single rest element).\n if (SchemaAST.isTupleType(inner) && Array.isArray(value)) {\n const elemType = inner.rest[0]?.type;\n return (\n <>\n {label !== null && <Row label={label} value={`Array(${value.length})`} depth={depth} kind='group' />}\n {value.map((item, index) => (\n <Node\n key={index}\n ast={elemType ?? SchemaAST.unknownKeyword}\n value={item}\n label={`[${index}]`}\n depth={depth + 1}\n />\n ))}\n </>\n );\n }\n\n // Leaf (scalars, unions of literals, unknown, etc.).\n return <Row label={label ?? ''} value={formatLeaf(value)} depth={depth} kind='leaf' />;\n};\n\ntype RowProps = {\n label: ReactNode;\n value: ReactNode;\n depth: number;\n kind: 'group' | 'leaf';\n};\n\nconst Row = ({ label, value, depth }: RowProps) => (\n <div role='row' className={mx('flex items-baseline gap-3 py-1')} style={{ paddingInlineStart: 8 + depth * 16 }}>\n <div role='cell' className='text-subdued'>\n {label}\n </div>\n <div role='cell' className={mx('break-all text-base-foreground')}>\n {value}\n </div>\n </div>\n);\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/**\n * Format a leaf value for display. Strings are quoted so empty strings are\n * visible; missing values surface as an em-dash so the row stays present.\n */\nconst formatLeaf = (value: unknown): ReactNode => {\n if (value === undefined) {\n return null;\n }\n\n if (value === null) {\n return <span className='text-description'>null</span>;\n }\n\n switch (typeof value) {\n case 'string':\n // Quote strings so empty strings remain visible (`\"\"` rather than blank).\n return <span className='text-blue-text'>{JSON.stringify(value)}</span>;\n case 'number':\n case 'bigint':\n return <span className='text-green-text'>{String(value)}</span>;\n case 'boolean':\n return <span className='text-purple-text'>{String(value)}</span>;\n default:\n // Objects we couldn't expand via schema (e.g. `google.protobuf.Any` -> Unknown)\n // are rendered as compact JSON.\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { type Label, ScrollArea, type ThemedClassName, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { translationKey } from '#translations';\n\nimport { SettingsFieldSet } from './SettingsFieldSet';\nimport { SettingsItem, SettingsPanel } from './SettingsItem';\n\nconst SETTINGS_ROOT_NAME = 'Settings.Root';\nconst SETTINGS_VIEWPORT_NAME = 'Settings.Viewport';\nconst SETTINGS_SECTION_NAME = 'Settings.Section';\n\n//\n// Root (headless — no styling, no scroll).\n//\n\ntype SettingsRootProps = ThemedClassName<PropsWithChildren>;\n\nconst SettingsRoot = ({ children, classNames }: SettingsRootProps) => {\n return <div className={mx('flex flex-col gap-2', classNames)}>{children}</div>;\n};\n\nSettingsRoot.displayName = SETTINGS_ROOT_NAME;\n\n//\n// Viewport (scroll area + padding + document layout).\n//\n\nconst SettingsViewport = composable<HTMLDivElement>(({ children, ...props }, forwardedRef) => {\n return (\n <ScrollArea.Root {...composableProps(props)} orientation='vertical' centered thin ref={forwardedRef}>\n <ScrollArea.Viewport classNames='px-4 pointer-coarse:px-2'>\n <div className='dx-document flex flex-col gap-2 py-4'>{children}</div>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n});\n\nSettingsViewport.displayName = SETTINGS_VIEWPORT_NAME;\n\n//\n// Section (title + optional description + children with spacing).\n//\n\ntype SettingsSectionProps = PropsWithChildren<{\n title: Label;\n description?: Label;\n}>;\n\nconst SettingsSection = ({ title, description, children }: SettingsSectionProps) => {\n const { t } = useTranslation(translationKey);\n return (\n <>\n <h2 className='px-trim-md mt-trim-md text-xl'>{toLocalizedString(title, t)}</h2>\n {description && <p className='px-trim-md text-description'>{toLocalizedString(description, t)}</p>}\n <div className='w-full pt-trim-md space-y-trim-md'>{children}</div>\n </>\n );\n};\n\nSettingsSection.displayName = SETTINGS_SECTION_NAME;\n\n//\n// Settings\n//\n\nexport const Settings = {\n Root: SettingsRoot,\n Viewport: SettingsViewport,\n Section: SettingsSection,\n Panel: SettingsPanel,\n Item: SettingsItem,\n FieldSet: SettingsFieldSet,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as SchemaAST from 'effect/SchemaAST';\nimport * as String from 'effect/String';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { getAnnotation, type SchemaProperty } from '@dxos/effect';\nimport { Input, Select } from '@dxos/react-ui';\n\nimport { getFormProperties, type SelectOption, detectFieldType, getSelectOptionsFromAst } from '../../util';\nimport { SettingsItem } from './SettingsItem';\n\n//\n// Types\n//\n\n/**\n * Props for a custom field renderer.\n * The renderer provides the control only; SettingsItem wrapper is handled by FieldSet.\n */\nexport type SettingsFieldProps<T = any> = {\n value: T;\n onChange: (value: T) => void;\n readonly?: boolean;\n};\n\n/**\n * Map of property names to either a custom field renderer or a nested field map for struct fields.\n * When a value type `T` is provided, the map shape is checked against the schema's value type.\n */\nexport type SettingsFieldMap<T extends Record<string, any> = Record<string, any>> = {\n [K in keyof T]?: NonNullable<T[K]> extends Record<string, any>\n ? SettingsFieldMap<NonNullable<T[K]>>\n : React.FC<SettingsFieldProps<T[K]>>;\n};\n\nexport type SettingsFieldSetProps<T extends Record<string, any> = Record<string, any>> = {\n /** Effect Schema for the settings object. */\n schema: { ast: SchemaAST.AST };\n\n /** Current settings values. */\n values: T;\n\n /** Callback when any value changes. Receives a new complete object. */\n onValuesChanged?: (values: T) => void;\n\n /** When true, all controls are disabled. */\n readonly?: boolean;\n\n /** Map of property names to custom field renderers. Nested objects map to struct sub-fields. */\n fieldMap?: SettingsFieldMap<T>;\n\n /** Control field visibility. Receives the dotted path (e.g. `'modelDefaults.edge'`) at every level. */\n visible?: (path: string, values: T) => boolean;\n\n /** Override the order of fields. Fields not listed are appended in schema order. Applied per scope. */\n sort?: string[];\n\n /** Internal: dot-path prefix used by recursive struct rendering. */\n pathPrefix?: string;\n};\n\n//\n// Component\n//\n\nexport const SettingsFieldSet = <T extends Record<string, any>>({\n schema,\n values,\n onValuesChanged,\n readonly,\n fieldMap,\n visible,\n sort,\n pathPrefix = '',\n}: SettingsFieldSetProps<T>) => {\n const properties = useMemo(() => {\n const props = getFormProperties(schema.ast);\n if (!sort) {\n return props;\n }\n const rank = (name: string) => {\n const idx = sort.indexOf(name);\n return idx === -1 ? Number.POSITIVE_INFINITY : idx;\n };\n return [...props].sort(({ name: a }, { name: b }) => rank(a.toString()) - rank(b.toString()));\n }, [schema, sort]);\n\n const handleChange = useCallback(\n (name: string, value: unknown) => {\n onValuesChanged?.({ ...values, [name]: value } as T);\n },\n [values, onValuesChanged],\n );\n\n return (\n <>\n {properties.map((property) => {\n const name = property.name.toString();\n const path = pathPrefix ? `${pathPrefix}.${name}` : name;\n if (visible && !visible(path, values)) {\n return null;\n }\n\n const entry = fieldMap?.[name as keyof typeof fieldMap] as\n | React.FC<SettingsFieldProps>\n | SettingsFieldMap\n | undefined;\n return (\n <SettingsFieldItem\n key={name}\n path={path}\n property={property}\n value={values[name]}\n onChange={(value) => handleChange(name, value)}\n readonly={readonly}\n customField={typeof entry === 'function' ? entry : undefined}\n nestedFieldMap={typeof entry === 'object' ? entry : undefined}\n visible={visible as (path: string, values: any) => boolean}\n sort={sort}\n />\n );\n })}\n </>\n );\n};\n\nSettingsFieldSet.displayName = 'Settings.FieldSet';\n\n//\n// Internal: render a single settings field.\n//\n\ntype SettingsFieldItemProps = {\n property: SchemaProperty;\n path: string;\n value: any;\n onChange: (value: any) => void;\n readonly?: boolean;\n customField?: React.FC<SettingsFieldProps>;\n nestedFieldMap?: SettingsFieldMap;\n visible?: (path: string, values: any) => boolean;\n sort?: string[];\n};\n\nconst SettingsFieldItem = ({\n property,\n path,\n value,\n onChange,\n readonly,\n customField,\n nestedFieldMap,\n visible,\n sort,\n}: SettingsFieldItemProps) => {\n const { type } = property;\n const name = property.name.toString();\n const title = getAnnotation<string>(SchemaAST.TitleAnnotationId)(type) ?? String.capitalize(name);\n const description = getAnnotation<string>(SchemaAST.DescriptionAnnotationId)(type);\n\n // Custom field renderer.\n if (customField) {\n const CustomField = customField;\n return (\n <SettingsItem title={title} description={description}>\n <CustomField value={value} onChange={onChange} readonly={readonly} />\n </SettingsItem>\n );\n }\n\n const fieldType = detectFieldType(type);\n\n switch (fieldType) {\n case 'struct':\n return (\n <SettingsFieldSet\n schema={{ ast: type }}\n values={value ?? {}}\n onValuesChanged={onChange}\n readonly={readonly}\n fieldMap={nestedFieldMap}\n visible={visible}\n sort={sort}\n pathPrefix={path}\n />\n );\n\n case 'boolean':\n return (\n <SettingsItem title={title} description={description}>\n <Input.Switch disabled={readonly} checked={!!value} onCheckedChange={(checked) => onChange(!!checked)} />\n </SettingsItem>\n );\n\n case 'select': {\n const options = getSelectOptionsFromAst(type) ?? [];\n return (\n <SettingsItem title={title} description={description}>\n <Select.Root\n disabled={readonly}\n value={value == null ? '' : globalThis.String(value)}\n onValueChange={(selected) => {\n const matched = options.find((option) => globalThis.String(option.value) === selected);\n onChange(matched?.value ?? selected);\n }}\n >\n <Select.TriggerButton disabled={readonly} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {options.map((option: SelectOption) => (\n <Select.Option key={globalThis.String(option.value)} value={globalThis.String(option.value)}>\n {option.label ?? globalThis.String(option.value)}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </SettingsItem>\n );\n }\n\n case 'string':\n return (\n <SettingsItem title={title} description={description}>\n <Input.TextInput disabled={readonly} value={value ?? ''} onChange={(event) => onChange(event.target.value)} />\n </SettingsItem>\n );\n\n case 'number':\n return (\n <SettingsItem title={title} description={description}>\n <Input.TextInput\n disabled={readonly}\n type='number'\n value={value ?? ''}\n onChange={(event) => {\n if (event.target.value === '') {\n onChange(undefined);\n return;\n }\n const parsed = Number(event.target.value);\n onChange(Number.isNaN(parsed) ? undefined : parsed);\n }}\n />\n </SettingsItem>\n );\n\n default:\n return null;\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { Input, type Label, type ThemedClassName, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { translationKey } from '#translations';\n\nconst SETTINGS_PANEL_NAME = 'Settings.Panel';\nconst SETTINGS_ITEM_NAME = 'Settings.Item';\n\n//\n// Panel (bordered card container).\n//\n\ntype SettingsPanelProps = ThemedClassName<PropsWithChildren>;\n\nexport const SettingsPanel = ({ classNames, children }: SettingsPanelProps) => {\n return (\n <div className={mx('flex flex-col gap-3 p-trim-md border border-separator rounded-sm', classNames)}>{children}</div>\n );\n};\n\nSettingsPanel.displayName = SETTINGS_PANEL_NAME;\n\n//\n// Item (label + optional description + control, proper label semantics).\n//\n\ntype SettingsItemProps = PropsWithChildren<{\n title: Label;\n description?: Label;\n}>;\n\nexport const SettingsItem = ({ title, description = '', children }: SettingsItemProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <Input.Root>\n <SettingsPanel classNames='grid grid-cols-1 md:grid-cols-[1fr_1fr] gap-x-trim-lg gap-y-0'>\n <Input.Label classNames='pb-trim-md text-base-foreground text-lg md:col-span-2'>\n {toLocalizedString(title, t)}\n </Input.Label>\n <Input.DescriptionAndValidation>\n <Input.Description classNames='text-base text-description'>\n {toLocalizedString(description, t)}\n </Input.Description>\n </Input.DescriptionAndValidation>\n <div className='text-end py-1'>{children}</div>\n </SettingsPanel>\n </Input.Root>\n );\n};\n\nSettingsItem.displayName = SETTINGS_ITEM_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Select } from '@dxos/react-ui';\n\nimport { type SettingsFieldProps } from './SettingsFieldSet';\n\nexport type SelectFieldOption = {\n value: string;\n label?: string;\n};\n\nexport type CreateSelectFieldOptions = {\n /** Options to display. Strings are used as both value and label. */\n options: ReadonlyArray<string | SelectFieldOption>;\n /** Label for the sentinel option that maps to `undefined`. Defaults to `'Default'`. Pass `null` to omit. */\n defaultLabel?: string | null;\n};\n\n/**\n * Factory for a `SettingsFieldSet` `fieldMap` entry that renders a Select control\n * over a fixed list of options, with an optional sentinel for `undefined`.\n */\nexport const createSelectField = ({\n options,\n defaultLabel = 'Default',\n}: CreateSelectFieldOptions): React.FC<SettingsFieldProps<string | undefined>> => {\n const normalized = options.map((option) => (typeof option === 'string' ? { value: option, label: option } : option));\n const hasDefault = defaultLabel !== null;\n // Per-instance sentinel avoids collisions with real option values; empty string when the\n // sentinel is omitted so `undefined` maps to a value Select.Root treats as \"no selection\".\n const sentinel = hasDefault ? `__default__${Math.random().toString(36).slice(2)}` : '';\n\n return ({ value, onChange, readonly }) => (\n <Select.Root\n disabled={readonly}\n value={value ?? sentinel}\n onValueChange={(next) => onChange(hasDefault && next === sentinel ? undefined : next)}\n >\n <Select.TriggerButton disabled={readonly} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {hasDefault && <Select.Option value={sentinel}>{defaultLabel}</Select.Option>}\n {normalized.map((option) => (\n <Select.Option key={option.value} value={option.value}>\n {option.label ?? option.value}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport * as Array from 'effect/Array';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport React, { forwardRef, useCallback, useContext, useImperativeHandle, useMemo, useState } from 'react';\n\nimport {\n EchoURI,\n Entity,\n Feed,\n Filter,\n Format,\n Obj,\n Query,\n QueryAST,\n Ref,\n type SchemaRegistry,\n Type,\n View,\n} from '@dxos/echo';\nimport { type JsonProp } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { useObject, useQuery } from '@dxos/react-client/echo';\nimport { IconButton, Input, Message, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { QueryForm, type QueryFormProps } from '@dxos/react-ui-components';\nimport { List } from '@dxos/react-ui-list';\nimport {\n ParentLabelAnnotation,\n ProjectionModel,\n VIEW_FIELD_LIMIT,\n createEchoChangeCallback,\n getTypenameFromQuery,\n} from '@dxos/schema';\nimport { mx, osTranslations } from '@dxos/ui-theme';\n\nimport { translationKey } from '#translations';\n\nimport { FieldEditor } from '../FieldEditor';\nimport {\n Form,\n type FormFieldComponent,\n type FormFieldComponentProps,\n FormFieldLabel,\n type FormFieldMap,\n type FormRootProps,\n} from '../Form';\n\nexport type ViewEditorProps = ThemedClassName<\n {\n type: Type.AnyEntity;\n view: View.View;\n mode?: 'schema' | 'tag';\n registry?: SchemaRegistry.SchemaRegistry;\n showHeading?: boolean;\n onQueryChanged?: (query: QueryAST.Query, target?: EchoURI.EchoURI) => void;\n onDelete?: (fieldId: string) => void;\n } & Pick<QueryFormProps, 'types' | 'tags'> &\n Pick<FormRootProps<any>, 'readonly' | 'db'>\n>;\n\n/**\n * Schema-based object form.\n */\nexport const ViewEditor = forwardRef<ProjectionModel, ViewEditorProps>(\n (\n {\n classNames,\n type,\n view,\n mode = 'schema',\n registry,\n db,\n readonly,\n showHeading = false,\n types,\n tags,\n onQueryChanged,\n onDelete,\n },\n forwardedRef,\n ) => {\n const atomRegistry = useContext(RegistryContext);\n const schemaReadonly = Type.getDatabase(type) == null;\n const { t } = useTranslation(translationKey);\n\n const projectionModel = useMemo(() => {\n const jsonSchema = type.jsonSchema;\n\n // Always use createEchoChangeCallback since the view is ECHO-backed.\n // Pass type only when mutable to allow schema mutations.\n const change = createEchoChangeCallback(view, Type.getDatabase(type) != null ? type : undefined);\n\n const model = new ProjectionModel({\n registry: atomRegistry,\n view,\n baseSchema: jsonSchema,\n change,\n });\n\n return model;\n }, [atomRegistry, type, view]);\n\n useImperativeHandle(forwardedRef, () => projectionModel, [projectionModel]);\n\n const queueTarget = Match.value(view.query.ast).pipe(\n Match.when({ type: 'from' }, ({ from }) => {\n if (from._tag !== 'scope') {\n return undefined;\n }\n return Option.fromNullable(from.scope.feeds).pipe(\n Option.flatMap((feeds) => Array.head(feeds)),\n Option.map(String),\n Option.getOrUndefined,\n );\n }),\n Match.orElse(() => undefined),\n );\n\n const feeds = useQuery(db, Filter.type(Feed.Feed));\n\n const targetRef = useMemo(() => {\n if (!queueTarget) {\n return undefined;\n }\n const feed = feeds.find((feed) => Feed.getQueueUri(feed)?.toString() === queueTarget);\n return feed ? Ref.fromURI(Entity.getURI(feed)) : undefined;\n }, [queueTarget, feeds]);\n\n const viewSchema = useMemo(() => {\n const base = Schema.Struct({\n query:\n mode === 'schema'\n ? Format.URL.annotations({ title: 'Record type' })\n : QueryAST.Query.annotations({ title: 'Query' }),\n });\n\n if (mode === 'tag') {\n return Schema.Struct({\n ...base.fields,\n // TODO(wittjosiah): Replace Type.Feed with Dataset.Dataset when Ref.Ref supports unions.\n target: Ref.Ref(Feed.Feed).pipe(\n Schema.annotations({ title: 'Target Feed' }),\n ParentLabelAnnotation.set(true),\n Schema.optional,\n ),\n }).pipe(Schema.mutable);\n }\n\n return base.pipe(Schema.mutable);\n }, [mode]);\n\n // TODO(burdon): Need to warn user of possible consequences of editing.\n // TODO(burdon): Settings should have domain name owned by user.\n const viewValues = useMemo(\n () => ({\n query: mode === 'schema' ? getTypenameFromQuery(view.query.ast) : view.query.ast,\n target: targetRef,\n }),\n [mode, view.query.ast, targetRef],\n );\n\n const fieldMap = useMemo<FormFieldMap | undefined>(\n () => (mode === 'tag' ? customFields({ types, tags }) : undefined),\n [mode, types, tags],\n );\n\n const handleUpdate = useCallback(\n (values: any) => {\n const targetValue = values.target;\n let queueDxn: EchoURI.EchoURI | undefined;\n\n if (Ref.isRef(targetValue)) {\n const feedUri = targetValue.uri;\n const feed = feeds.find((feed) => Obj.getURI(feed) === feedUri);\n if (feed) {\n queueDxn = Feed.getQueueUri(feed);\n }\n }\n\n // TODO(wittjosiah): Deep-clone the AST to plain JS or ECHO proxy arrays become objects with numeric keys.\n const query =\n mode === 'schema'\n ? Query.select(Filter.typename(values.query)).ast\n : JSON.parse(JSON.stringify(values.query));\n onQueryChanged?.(query, queueDxn);\n },\n [onQueryChanged, mode, feeds],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => {\n invariant(!readonly);\n onDelete?.(fieldId);\n },\n [onDelete, readonly],\n );\n\n return (\n <div className={mx(classNames)}>\n {/* If readonly is set, then the callout is not needed. */}\n {schemaReadonly && !readonly && (\n <Message.Root valence='info' classNames='my-form-padding'>\n <Message.Title>{t('system-schema.description')}</Message.Title>\n </Message.Root>\n )}\n\n {/* TODO(burdon): Is the form read-only or just the schema? */}\n <Form.Root schema={viewSchema} values={viewValues} fieldMap={fieldMap} db={db} onValuesChanged={handleUpdate}>\n <Form.FieldSet />\n\n <FormFieldLabel label={t('fields.label')} asChild />\n <FieldList\n type={type}\n view={view}\n registry={registry}\n readonly={readonly}\n showHeading={showHeading}\n onDelete={handleDelete}\n />\n </Form.Root>\n </div>\n );\n },\n);\n\ntype FieldListProps = Pick<ViewEditorProps, 'type' | 'view' | 'registry' | 'readonly' | 'showHeading' | 'onDelete'>;\n\nconst FieldList = ({ type, view, registry, readonly, showHeading = false, onDelete }: FieldListProps) => {\n const atomRegistry = useContext(RegistryContext);\n const schemaReadonly = Type.getDatabase(type) == null;\n const { t } = useTranslation(translationKey);\n\n // Subscribe to view changes for reactivity.\n const [viewSnapshot] = useObject(view);\n\n const projectionModel = useMemo(() => {\n const jsonSchema = type.jsonSchema;\n\n // Always use createEchoChangeCallback since the view is ECHO-backed.\n // Pass type only when mutable to allow schema mutations.\n const change = createEchoChangeCallback(view, Type.getDatabase(type) != null ? type : undefined);\n\n const model = new ProjectionModel({\n registry: atomRegistry,\n view,\n baseSchema: jsonSchema,\n change,\n });\n\n return model;\n }, [atomRegistry, type, view]);\n\n const [expandedField, setExpandedField] = useState<View.FieldType['id']>();\n\n const handleAdd = useCallback(() => {\n invariant(!readonly);\n const field = projectionModel.createFieldProjection();\n setExpandedField(field.id);\n }, [projectionModel, readonly]);\n\n const handleToggleField = useCallback(\n (field: View.FieldType) => {\n setExpandedField((prevExpandedFieldId) => (prevExpandedFieldId === field.id ? undefined : field.id));\n },\n [readonly],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => {\n invariant(!readonly);\n if (fieldId === expandedField) {\n setExpandedField(undefined);\n }\n\n onDelete?.(fieldId);\n },\n [expandedField, onDelete, readonly],\n );\n\n const handleMove = useCallback(\n (fromIndex: number, toIndex: number) => {\n invariant(!readonly);\n Obj.update(view, (view) => {\n // NOTE(ZaymonFC): Using arrayMove here causes a race condition with the kanban model.\n const fields = [...view.projection.fields];\n const [moved] = fields.splice(fromIndex, 1);\n fields.splice(toIndex, 0, moved);\n view.projection.fields = fields;\n });\n },\n [view, readonly],\n );\n\n const handleClose = useCallback(() => setExpandedField(undefined), []);\n\n const handleHide = useCallback(\n (fieldId: string) => {\n setExpandedField(undefined);\n projectionModel.hideFieldProjection(fieldId);\n },\n [projectionModel],\n );\n\n const handleShow = useCallback(\n (property: string) => {\n setExpandedField(undefined);\n projectionModel.showFieldProjection(property as JsonProp);\n },\n [projectionModel],\n );\n\n if (!viewSnapshot) {\n return null;\n }\n\n return (\n <List.Root<View.FieldType>\n items={viewSnapshot.projection.fields as View.FieldType[]}\n isItem={Schema.is(View.FieldSchema)}\n getId={(field) => field.id}\n onMove={readonly ? undefined : handleMove}\n readonly={readonly}\n >\n {({ items: fields }) => (\n <>\n {showHeading && <h3 className='text-sm'>{t('field-path.label')}</h3>}\n <div role='list' className='grid grid-cols-[min-content_1fr_min-content_min-content_min-content]'>\n {fields?.map((field) => {\n const hidden = field.visible === false;\n return (\n <List.Item<View.FieldType>\n key={field.id}\n item={field}\n classNames={'grid grid-cols-subgrid col-span-5'}\n aria-expanded={expandedField === field.id}\n >\n <div className='grid grid-cols-subgrid col-span-5 rounded-xs cursor-pointer min-h-10 dx-hover'>\n <List.ItemDragHandle disabled={readonly || schemaReadonly} />\n <List.ItemTitle classNames={hidden && 'text-subdued'} onClick={() => handleToggleField(field)}>\n {field.path}\n </List.ItemTitle>\n <List.ItemIconButton\n label={t(hidden ? 'show-field.label' : 'hide-field.label')}\n data-testid={hidden ? 'show-field-button' : 'hide-field-button'}\n icon={hidden ? 'ph--eye-closed--regular' : 'ph--eye--regular'}\n autoHide={false}\n disabled={readonly || (!hidden && projectionModel.getFields().length <= 1)}\n onClick={() => (hidden ? handleShow(field.path) : handleHide(field.id))}\n />\n {!readonly && (\n <>\n <List.ItemDeleteButton\n label={t('delete-field.label')}\n autoHide={false}\n disabled={readonly || schemaReadonly || viewSnapshot.projection.fields.length <= 1}\n onClick={() => handleDelete(field.id)}\n data-testid='field.delete'\n />\n <List.ItemIconButton\n iconOnly\n variant='ghost'\n label={t('toggle-expand.label', { ns: osTranslations })}\n icon={expandedField === field.id ? 'ph--caret-down--regular' : 'ph--caret-right--regular'}\n onClick={() => handleToggleField(field)}\n data-testid='field.toggle'\n />\n </>\n )}\n </div>\n {expandedField === field.id && !readonly && (\n <div className='col-span-full mt-1 mb-1 border border-separator rounded-md'>\n <FieldEditor\n readonly={readonly || schemaReadonly}\n registry={registry}\n projection={projectionModel}\n field={field}\n onSave={handleClose}\n />\n </div>\n )}\n </List.Item>\n );\n })}\n </div>\n {!readonly && !expandedField && (\n <div className='my-form-padding'>\n <IconButton\n icon='ph--plus--regular'\n label={t('add-property-button.label')}\n onClick={handleAdd}\n disabled={viewSnapshot.projection.fields.length >= VIEW_FIELD_LIMIT}\n classNames='w-full'\n />\n </div>\n )}\n </>\n )}\n </List.Root>\n );\n};\n\nconst customFields = ({\n types,\n tags,\n}: Pick<ViewEditorProps, 'types' | 'tags'>): Record<string, FormFieldComponent> => ({\n query: ({ type, readonly, label, getValue, onValueChange }: FormFieldComponentProps) => {\n const handleChange = useCallback<NonNullable<QueryFormProps['onChange']>>(\n (query) => onValueChange(type, query.ast),\n [onValueChange],\n );\n\n return (\n <Input.Root>\n <FormFieldLabel readonly={readonly} label={label} />\n <QueryForm initialQuery={getValue()} types={types} tags={tags} onChange={handleChange} />\n </Input.Root>\n );\n },\n});\n"],
5
+ "mappings": ";AAIA,OAAOA,WAASC,eAAAA,eAAaC,aAAAA,YAAWC,WAAAA,UAASC,YAAAA,iBAAgB;AAEjE,SAASC,OAAAA,MAA0BC,QAAAA,aAAuB;AAC1D,SAASC,UAAAA,SAAQC,aAAaC,oBAAoB;AAElD,SAASC,OAAAA,YAAW;AACpB,SAASC,gBAAgBC,kBAAAA,uBAAsB;AAC/C,SAGEC,sCACAC,uBACK;AAEP,SAASC,kBAAAA,uBAAsB;;;ACd/B,SAASC,QAAQC,aAAaC,gBAAgB;AAevC,IAAMC,aAAa,CAAC,EAAEC,MAAMC,QAAQC,OAAAA,OAAK,MAAc;AAC5D,MAAIA,WAAUC,UAAaD,WAAU,QAAQA,WAAU,IAAI;AACzD,WAAOC;EACT;AAEA,QAAMC,cAAc,CAACJ,UAAAA;AACnB,YAAQA,OAAAA;MACN,KAAKF,SAASO,SAAS;AACrB,YAAI,OAAOH,WAAU,UAAU;AAC7B,gBAAMI,iBAAiBJ,OAAMK,YAAW;AACxC,cAAID,mBAAmB,OAAOA,mBAAmB,SAAS;AACxD,mBAAO;UACT,WAAWA,mBAAmB,OAAOA,mBAAmB,QAAQ;AAC9D,mBAAO;UACT;QACF;AACA,eAAOD,QAAQH,MAAAA;MACjB;MAEA,KAAKJ,SAASU,QAAQ;AACpB,cAAMC,UAAU,OAAOP,WAAU,WAAWA,OAAMQ,QAAQ,cAAc,EAAA,IAAMR;AAC9E,cAAMS,MAAMH,OAAOC,OAAAA;AACnB,eAAOD,OAAOI,MAAMD,GAAAA,IAAO,OAAOA;MACpC;MAEA,KAAKb,SAASe;MACd,KAAKf,SAASgB;AACZ,eAAOD,OAAOX,MAAAA;MAEhB,SAAS;AACP,eAAOA;MACT;IACF;EACF;AAEA,MAAI,CAACD,QAAQ;AACX,WAAOG,YAAYJ,IAAAA;EACrB;AAEA,UAAQC,QAAAA;IACN,KAAKL,OAAOmB,WAAWV;AACrB,aAAOD,YAAYN,SAASO,OAAO;IAErC,KAAKT,OAAOmB,WAAWP;IACvB,KAAKZ,OAAOmB,WAAWC;IACvB,KAAKpB,OAAOmB,WAAWE;AACrB,aAAOb,YAAYN,SAASU,MAAM;IAEpC,KAAKZ,OAAOmB,WAAWF;IACvB,KAAKjB,OAAOmB,WAAWG,UAAU;AAC/B,aAAOd,YAAYN,SAASe,MAAM;IACpC;IAEA,KAAKjB,OAAOmB,WAAWD;AACrB,YAAM,IAAIK,MAAM,sBAAsBvB,OAAOmB,WAAWD,GAAG,EAAE;IAE/D,KAAKlB,OAAOmB,WAAWK;IACvB,KAAKxB,OAAOmB,WAAWM;IACvB,KAAKzB,OAAOmB,WAAWO;IACvB,KAAK1B,OAAOmB,WAAWQ,WAAW;AAChC,YAAMC,OAAO,IAAIH,KAAKnB,MAAAA;AACtB,aAAOU,MAAMY,KAAKC,QAAO,CAAA,IAAM,OAAOD;IACxC;IAEA,KAAK5B,OAAOmB,WAAWW,UAAU;AAE/B,UAAI,OAAOxB,WAAU,UAAU;AAE7B,cAAMO,UAAUP,OAAMQ,QAAQ,eAAe,EAAA;AAC7C,cAAMiB,QAAQlB,QAAQmB,MAAM,GAAA;AAC5B,YAAID,MAAME,WAAW,GAAG;AACtB,gBAAMC,MAAMC,WAAWJ,MAAM,CAAA,CAAE;AAC/B,gBAAMK,OAAOD,WAAWJ,MAAM,CAAA,CAAE;AAChC,cAAI,CAACf,MAAMkB,GAAAA,KAAQ,CAAClB,MAAMoB,IAAAA,GAAO;AAC/B,mBAAOnC,YAAYoC,WAAW;cAAEC,UAAUJ;cAAKK,WAAWH;YAAK,CAAA;UACjE;QACF;MACF;AAEA,aAAO;QAAC;QAAG;;IACb;IAEA,SAAS;AACP,aAAO9B;IACT;EACF;AACF;AAQO,IAAMkC,0BAA0B,CAAC,EAAEpC,MAAMC,OAAM,MAAgC;AACpF,UAAQA,UAAUD,MAAAA;IAChB,KAAKJ,OAAOmB,WAAWG;AACrB,aAAOf;IACT,KAAKP,OAAOmB,WAAWO;IACvB,KAAK1B,OAAOmB,WAAWQ;IACvB,KAAK3B,OAAOmB,WAAWK;IACvB,KAAKxB,OAAOmB,WAAWM;IACvB,KAAKzB,OAAOmB,WAAWsB;AACrB,aAAO;QAAC;QAAa;;IACvB,KAAKzC,OAAOmB,WAAWE;AACrB,aAAO;QAAC;;IACV,KAAKrB,OAAOmB,WAAWuB;IACvB,KAAK1C,OAAOmB,WAAWwB;AACrB,aAAO;QAAC;;IACV,KAAKzC,SAASU;IACd,KAAKV,SAASO;AACZ,aAAO;QAAC;QAAc;;IACxB,KAAKP,SAASe;AACZ,aAAOV;IACT,KAAKL,SAASgB;AACZ,aAAOX;IACT;AACE,aAAOA;EACX;AACF;AAGO,IAAMqC,qBAAqB,CAACC,UAAmC;EACpEA,MAAM;EACNC,SAAS,IAAID,IAAAA;AACf;;;AC5IA,YAAYE,eAAe;AAE3B,SAASC,eAAeC,sBAAsB;AAevC,IAAMC,kBAAkB,CAACC,QAAAA;AAC9B,MAAIF,eAAeE,GAAAA,GAAM;AACvB,WAAO;EACT;AACA,MAAcC,wBAAcD,GAAAA,GAAM;AAChC,WAAO;EACT;AAEA,UAAQA,IAAIE,MAAI;IACd,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;EACX;AAEA,SAAOC;AACT;AAMO,IAAMC,0BAA0B,CAACJ,QAAAA;AACtC,MAAI,CAACF,eAAeE,GAAAA,GAAM;AACxB,WAAOG;EACT;AAEA,SAAQH,IAA2CK,MAAMC,QAAQ,CAACC,gBAAAA;AAChE,UAAMC,SAAQD,YAAYE;AAC1B,QAAI,OAAOD,WAAU,YAAY,OAAOA,WAAU,UAAU;AAC1D,aAAO,CAAA;IACT;AACA,UAAME,QAAQb,cAAgCc,6BAAmB,KAAA,EAAOJ,WAAAA;AACxE,UAAMK,QAAQF,UAAU,OAAOF,WAAU,WAAWA,OAAMK,OAAO,CAAA,EAAGC,YAAW,IAAKN,OAAMO,MAAM,CAAA,IAAKC,OAAOR,MAAAA;AAC5G,WAAO;MAAC;QAAEA,OAAAA;QAAOI;MAAM;;EACzB,CAAA;AACF;;;ACvDA,SAASK,UAAUC,kBAAkB;AAErC,SAASC,UAAAA,SAAQC,eAAAA,cAAaC,YAAAA,iBAAgB;AAevC,IAAMC,mBAAmB,CAAC,EAAEC,MAAMN,QAAQO,OAAAA,QAAOC,SAASC,OAAS,MAAoB;AAC5F,QAAMC,eAAe,CAACJ,UAAAA;AACpB,YAAQA,OAAAA;MACN,KAAKF,UAASO;AACZ,eAAQJ,OAAkBK,eAAc,EAAGC,YAAW;MACxD,KAAKT,UAASU;AACZ,eAAOP,OAAMK,eAAeJ,MAAAA;MAC9B,KAAKJ,UAASW;MACd,KAAKX,UAASY;AACZ,eAAOD,OAAOR,MAAAA;MAEhB,SAAS;AACP,eAAOQ,OAAOR,MAAAA;MAChB;IACF;EACF;AAEA,MAAI,CAACP,QAAQ;AACX,WAAOU,aAAaJ,IAAAA;EACtB;AAEA,UAAQN,QAAAA;IACN,KAAKE,QAAOe,WAAWN,SAAS;AAC9B,aAAOD,aAAaN,UAASO,OAAO;IACtC;IACA,KAAKT,QAAOe,WAAWH,QAAQ;AAC7B,aAAOJ,aAAaN,UAASU,MAAM;IACrC;IACA,KAAKZ,QAAOe,WAAWF;IACvB,KAAKb,QAAOe,WAAWD,KAAK;AAC1B,aAAON,aAAaN,UAASW,MAAM;IACrC;IACA,KAAKb,QAAOe,WAAWC,SAAS;AAC9B,aAAO,GAAIX,SAAmB,GAAA;IAChC;IACA,KAAKL,QAAOe,WAAWE,UAAU;AAE/B,aAAQZ,OAAiBK,eAAeJ,QAAQ;QAC9CY,OAAO;QACPC,UAAU;QACVC,uBAAuB;QACvBC,uBAAuB;MACzB,CAAA;IACF;IACA,KAAKrB,QAAOe,WAAWO,MAAM;AAC3B,UAAI;AACF,eAAOvB,WAAW,IAAIuB,KAAKjB,MAAAA,GAAkB,YAAA;MAC/C,SAASkB,OAAO;AACd,eAAO;MACT;IACF;IACA,KAAKvB,QAAOe,WAAWS,MAAM;AAC3B,UAAI;AACF,eAAOzB,WAAW,IAAIuB,KAAKjB,MAAAA,GAAkB,UAAA;MAC/C,SAASkB,OAAO;AACd,eAAO;MACT;IACF;IACA,KAAKvB,QAAOe,WAAWU,UAAU;AAC/B,UAAI;AACF,eAAO1B,WAAW,IAAIuB,KAAKjB,MAAAA,GAAkB,qBAAA;MAC/C,SAASkB,OAAO;AACd,eAAO;MACT;IACF;IACA,KAAKvB,QAAOe,WAAWW,UAAU;AAC/B,UAAIrB,WAAU,QAAQA,WAAUE,QAAW;AACzC,eAAO;MACT;AAGA,UAAIoB,MAAMC,QAAQvB,MAAAA,KAAUA,OAAMwB,UAAU,KAAKxB,OAAMyB,MAAMlB,OAAOmB,QAAQ,GAAG;AAC7E,cAAM,EAAEC,UAAUC,UAAS,IAAKhC,aAAYiC,aAAa7B,MAAAA;AACzD,eAAO,GAAG2B,QAAAA,IAAYC,SAAAA;MACxB;AAEA,aAAOpB,OAAOR,MAAAA;IAChB;IACA,SAAS;AACP,UAAIA,WAAU,QAAQA,WAAU,aAAa;AAC3C,eAAO;MACT;AACA,aAAOQ,OAAOR,MAAAA;IAChB;EACF;AACF;AAEO,IAAM8B,mBAAmB,CAAC,EAAE/B,MAAMN,QAAQO,OAAAA,QAAOC,SAASC,OAAS,MAAoB;AAC5F,QAAMC,eAAe,CAACJ,UAAAA;AACpB,YAAQA,OAAAA;MACN,KAAKF,UAASO;MACd,KAAKP,UAASU;MACd,KAAKV,UAASW;MACd,KAAKX,UAASY;AACZ,eAAOD,OAAOR,MAAAA;MAEhB;AACE,eAAOQ,OAAOR,MAAAA;IAClB;EACF;AAEA,MAAI,CAACP,QAAQ;AACX,WAAOU,aAAaJ,IAAAA;EACtB;AAEA,UAAQN,QAAAA;IACN,KAAKE,QAAOe,WAAWN;IACvB,KAAKT,QAAOe,WAAWH;IACvB,KAAKZ,QAAOe,WAAWF;IACvB,KAAKb,QAAOe,WAAWD,KAAK;AAC1B,aAAON,aAAaJ,IAAAA;IACtB;IACA,KAAKJ,QAAOe,WAAWC,SAAS;AAC9B,aAAOH,OAAOR,SAAQ,GAAA;IACxB;IACA,KAAKL,QAAOe,WAAWE,UAAU;AAC/B,aAAOJ,OAAOR,MAAAA;IAChB;IACA,KAAKL,QAAOe,WAAWU,UAAU;AAC/B,YAAMW,OAAO,IAAId,KAAKjB,MAAAA;AACtB,aAAO+B,KAAKC,YAAW;IACzB;IACA,KAAKrC,QAAOe,WAAWO,MAAM;AAC3B,YAAMc,OAAO,IAAId,KAAKjB,MAAAA;AACtB,aAAO+B,KAAKC,YAAW,EAAGC,MAAM,GAAA,EAAK,CAAA;IACvC;IACA,KAAKtC,QAAOe,WAAWS,MAAM;AAC3B,YAAMY,OAAO,IAAId,KAAKjB,MAAAA;AACtB,aAAO+B,KAAKC,YAAW,EAAGC,MAAM,GAAA,EAAK,CAAA,EAAGA,MAAM,GAAA,EAAK,CAAA;IACrD;IACA,KAAKtC,QAAOe,WAAWW,UAAU;AAE/B,UAAIrB,WAAU,QAAQA,WAAUE,QAAW;AACzC,eAAO;MACT;AAGA,UAAIoB,MAAMC,QAAQvB,MAAAA,KAAUA,OAAMwB,UAAU,KAAKxB,OAAMyB,MAAMlB,OAAOmB,QAAQ,GAAG;AAC7E,cAAM,EAAEC,UAAUC,UAAS,IAAKhC,aAAYiC,aAAa7B,MAAAA;AACzD,eAAO,GAAG2B,QAAAA,IAAYC,SAAAA;MACxB;AAEA,aAAOpB,OAAOR,MAAAA;IAChB;IAEA,SAAS;AACP,aAAOQ,OAAOR,MAAAA;IAChB;EACF;AACF;;;ACtKA,YAAYkC,YAAY;AACxB,YAAYC,gBAAe;AAE3B,SAASC,kBAAkB;AAC3B,SAA8BC,qBAAqB;AAe5C,IAAMC,oBAAoB,CAACC,QAAAA;AAChC,QAAMC,SAAS,IAAIC,IACPC,iCAAsBH,GAAAA,EAC7BI,OAAO,CAACC,SAAAA;AAEP,UAAMC,OACJD,KAAKE,cAAwBC,mBAAQH,KAAKC,IAAI,IACzCD,KAAKC,KAAKG,MAAMC,KAAK,CAACC,MAAMA,EAAEC,SAAS,kBAAA,KAAuBP,KAAKC,OACpED,KAAKC;AACX,WAAOT,WAAWgB,oBAAoBC,WAAWR,IAAAA,EAAMS,KAAYC,iBAAU,MAAM,IAAA,CAAA,MAAW;EAChG,CAAA,EACCC,IAAI,CAACZ,SAASA,KAAKa,IAAI,CAAA;AAE5B,SAAOpB,cAAcE,GAAAA,EAAKI,OAAO,CAACC,SAAS,CAACJ,OAAOkB,IAAId,KAAKa,IAAI,CAAA;AAClE;;;AC/BA,SAASE,WAAW;AACpB,SAAwCC,6BAA6B;AACrE,SAASC,gBAAgBC,qBAAqBC,mBAAmB;AAQ1D,IAAMC,cAAc,CAACC,QAAAA;AAE1B,MAAIF,YAAYE,GAAAA,GAAM;AACpB,UAAMC,cAAcJ,oBAAoBG,GAAAA;AACxC,QAAIC,aAAa;AACf,UAAIP,IAAIQ,UAAUD,WAAAA,GAAc;AAC9B,cAAME,WAAWP,eAAyCK,aAAaN,qBAAAA,GAAwBQ;AAC/F,eAAO;UAAEH,KAAKC;UAAaG,SAAS;UAAMD;QAAS;MACrD;IACF;EACF;AAGA,MAAIT,IAAIQ,UAAUF,GAAAA,GAAM;AACtB,UAAMG,WAAWP,eAAyCI,KAAKL,qBAAAA,GAAwBQ;AACvF,WAAO;MAAEH;MAAKI,SAAS;MAAOD;IAAS;EACzC;AAEA,SAAOE;AACT;;;AC/BA,YAAYC,aAAY;AACxB,YAAYC,gBAAe;AAC3B,OAAOC,UAASC,eAAAA,oBAAmB;AAEnC,SAASC,OAAAA,YAAW;AACpB,SACEC,kBAAAA,iBACAC,YAAAA,WACAC,uBAAAA,sBACAC,wBAAAA,uBACAC,wBAAAA,uBACAC,gBAAAA,qBACK;AACP,SAASC,cAAAA,aAA6BC,kBAAAA,uBAAsB;AAE5D,SAASC,kBAAAA,uBAAsB;;;ACf/B,SAASC,iBAAAA,sBAAqB;AAC9B,YAAYC,aAAY;AACxB,YAAYC,aAAY;AACxB,YAAYC,gBAAe;AAC3B,OAAOC,UAAiCC,aAAAA,YAAWC,WAAAA,UAASC,cAAc;AAE1E,SAASC,cAAcC,gBAAgBC,YAAY;AAEnD,SAASC,kBAAAA,iBAAgBC,YAAYC,kBAAiB;AACtD,SACEC,YAEAC,YAEAC,cACAC,kBAAAA,uBACK;AACP,SAASC,YAAYC,iBAAiBC,kBAAkB;AACxD,SAASC,MAAAA,WAAU;AAEnB,SAASC,kBAAAA,uBAAsB;;;ACpB/B,SAASC,4BAA4B;AAGrC,SAASC,aAAaC,WAAWC,SAASC,gBAAgB;AAG1D,SAAwBC,gBAAgBC,0BAA0BC,YAAYC,iBAAiB;AAC/F,SAASC,WAAW;AACpB,SAASC,uBAAuB;AAChC,SAA+BC,sBAAsB;AA+FrD,IAAA,eAAA;AAgBSC,IAAAA,iBAAuBR,CAAAA,EAAAA,QAAqC,UAAA,QAAA,YAAA,eAAA,mBAAA,iBAAA,YAAA,QAAA,UAAA,GAAA,MAAA,MAAA;AACnE,QAAM,CAACS,SAAQC,UAAU,IAAGV,SAAoC,CAAA,CAAA;AAChE,QAAM,CAACW,SAAQC,UAAU,IAAGZ,SAAS,CAAA,CAAA;AACrC,QAAMa,CAAAA,QAAAA,SAAgBP,IAAAA,SAAAA,CAA4BQ,CAAAA;AAClD,QAAM,CAACC,QAAAA,SAASC,IAAU,SAAGpB,KAAAA;QAC3BqB,gBAAMC,gBAAAA,mBAAAA,OAAAA,CAAAA,EAAAA;QACNC,CAAAA,SAAAA,SAAaN,IAAAA,qBAAAA;IACbO,MAAAA;iBACE;cACA,MAAA;UAGEC,eAAY,QAAA;AACZC,kBAAAA,cAAY,aAAA;AACZZ,mBAAW,CAAA,CAAA;AACXE,mBAAU,CAAA,CAAA;AACZ,kBAAA,CAAA,CAAA;AACF,kBAAA,KAAA;MACF;IACA;EACA,CAAA;AAGA,QAAMW,SAAAA;mBAGO,YAAA,CAAAC,YAAA;AACT,QAAA,CAAA,QAAA;AAEIf,aAAAA;IACJJ;QAAkBmB,UAAAA,eAAAA,QAAAA,OAAAA,KAAAA,CAAAA;QAAQf,YAAAA;MAAO,QAAAe;MAC7Bf,QAAAA;qBACIgB,YAAAA,GAAAA,cAAkBD,GAAAA,IAAAA,GAAAA,OAAAA,CAAAA;QACxBf,QAAAA,WAASiB,KAAWD,YAAAA;AACtB,YAAA,kBAAAD;AAEAd,MAAAA,UAAUiB,WAAQlB,eAAAA,KAAAA,CAAAA;IAClB;AACA,cAAOmB,QAAAA,OAAAA,CAAAA;AAET,UAAA,QAAAnB,QAAA,WAAA;AAACoB,WAAAA;;IAAmB;IAGtB;EACA,CAAA;QACyCA,CAAAA,eAAAA,gBAAAA,IAAAA,SAAAA,KAAAA;YAAO,MAAA,iBAAA,IAAA,GAAA;IAChD/B;;YAEIyB,MAAAA;QACAO,eAAAA;AACF,eAAA,MAAA;AACC,uBAAA,KAAA;IAACP;;IAAkBQ;IAAc;IAEpC;;AAEA,QAAG,UAAA,QAAA,MAAA;AAACtB,WAAAA,OAAAA,KAAAA,MAAAA,EAAAA,WAAAA;KAAO;IAEX;;QAeGD,UAAAA,QAAAA,MAAAA,CAAAA;EAASC,CAAAA,OAAAA,QAAAA,OAAAA,EAAAA,KAAAA,CAAAA,CAAAA,MAAAA,SAAAA,MAAAA,aAAAA,OAAAA,KAAAA,MAAAA,EAAAA,KAAAA,CAAAA,cAAAA,cAAAA,QAAAA,UAAAA,WAAAA,GAAAA,IAAAA,GAAAA,KAAAA,UAAAA,WAAAA,GAAAA,IAAAA,GAAAA,CAAAA,CAAAA,GAAAA;IAAQE;IAAO;IAG3B;;qBAEc,YAAA,YAAA;QACV,SAAI,MAAA,GAAA;gBACIqB,IAAAA;;cAA4BC,SAAAA,QAAAA;UAAQ;UAC5C;QACErB,CAAAA;MACF,UAAA;AACF,kBAAA,KAAA;MACC;IAACY;;IAAkBQ;IAAQE;IAASD;IAAQ;IAE/C;;AAEA,QAAG,eAAA,YAAA,MAAA;AAACE,eAAAA;KAAS;IAEX;EACF,CAAA;QAMI,YAAUC,YACDC,CAAAA,SAAQ5B;AAKjB,UAAA,WAAA,MAAA,QAAA,IAAA,IAAuC,eAAA,IAAA,IAAA;AACvC,UAAM6B,CAAAA,GAAAA,KAAAA,IAAY9B,OAAQ+B,QAAAA,MAAqB,EAAA,KAAA,CAAA,CAAA,SAAA,MAAA,cAAA,YAAA,UAAA,WAAA,GAAA,QAAA,GAAA,KAAA,UAAA,WAAA,GAAA,QAAA,GAAA,CAAA,KAAA,CAAA;UAE7C,YAAO,QAAA,QAAA;oBACGC;aACRJ;QACF,QAAA;QACF,OAAA;MAEA;;WAEEA;MACF,QAAA,QAAA,UAAA;MAEF,OAAA,QAAA,SAAA,SAAA;IAAC3B;;IAAgB;IAGnB;;AAGE,QACA,WAAA,YAAA,CAAA,SAAA;AAACe,WAAAA,UAAAA,QAAAA,eAAAA,IAAAA,CAAAA;KAAO;IAGV;;wBAE2BiB,YAAAA,CAAAA,MAAAA,MAAAA,WAAAA;QAAMC,iBAAAA;MAAM;MAEnC,OAAAA;IACA,GAAA,EAAA,YAAMC,YAAYF,GAAAA,cAAAA,GAAAA,KAAAA,GAAAA,OAAAA,CAAAA;AAClB,UAAIG,WAAAA,eAAcF,IAAAA;AAClB,UAAI,YAAA;QACF,cAAaA;;AAEb,UAAA,KAAA,SAAA,iBAAA;AACA,sBAAY,WAAAA,MAAA,KAAA;MACZrC;aACAuC,KAAAA;AACF,UAAA,MAAA,KAAA,QAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,KAAA,GAAA,OAAA,CAAA;AAEA,oBAAA;IACA;AAGA,UAAMC,YAAAA,YAAa,QAAA,WAAA,WAAA;AAAmB,UAAA,aAAA;MACtCxB,CAAAA,QAAYyB,GAAAA;;eAAwBD,CAAAA,UAAAA;MAAW,GAAA;MAE/C,GAAA;IACA,EAAMZ;AAGNc,UAAAA,WAAAA,SAAkBC,SAAW;sBAAoBH,WAAAA;MAAW,SAAAZ;MAE5D,SAAA;IACA,CAAA;AAEA,QAAA,eAAA,QAAA;AAEF,gBAAA,SAAA;IAACT;;IAAkBuB;IAAiB7B;IAAW;IAGjD;;QAII,SAAA,YAAA,OAAA,SAAA;AACAI,UAAAA,WAAYd,eAAa,IAAA;eAAe+B,CAAAA,cAAW;MAAK,GAAA/B;MAClDyB,CAAAA,QAAUV,GAAAA;IAEhB,EAAA;AACA,UAAI0B,WAAYf,SAASgB,MAAM;eACChB,KAAAA,OAAAA,EAAAA,SAAAA,KAAAA,YAAAA,UAAAA;YAASD,SAAAA,QAAAA;QAAQ;QACjD,SAAAA;MAEF,CAAA;IAACV;;IAAkBW;IAASiB;IAAUnB;IAAO;IAG/C;;iBAGIH,OAAAA;;IAEApB;IACAD;IACA0B;IACAD;IACAmB;IACAD;IAEA;IACAnB;;IAGA,QAAA;IACAqB,UAAAA;;IAEAC;IACAC;IAEA;IAEF;IACE1B,GAAAA;EACAL,IAAAA;IACAf;IACAD;IACA0B;IACAkB;IACAnB;IACAoB;IACAlD;IACAmD;IACAC;IACAvB;IACAG;IACD;IAEH;EAEF,CAAA;;IAMI,cAAOO,CAAAA,KAAAA,MAAAA,WAAAA;AACT,MAAA,KAAA,WAAA,GAAA;AAEA,WAAOc;EACP;AAEA,QAAIC,CAAAA,OAAMC,GAAAA,IAAQC,IAAM;QACtB,QAAMC,KAAO,WAAA,IAAAlB,SAAA,YAAA,MAAAc,KAAA,GAAA,MAAAd,MAAA;oBAAIiB,GAAAA,GAAAA;UAAI,OAAA;MACjB,GAACH;IACL;AACF,SAAAA,KAAA,IAAA;AAEA,WAAO;;SAAWA;IAAa,GAAA;IACjC,CAAAA,KAAA,GAAA;EAEA;;cAGM,CAAA,WAAA;SACA,OAAMjB,OAAWrC,CAAAA,QAAAA,EAAAA,MAAAA,QAAyBuC,MAAAA;UAExCoB,WAAOtB,yBAAYuB,IAAAA;AACrB,QAAA,EAAA,YAAA,SAAA;AACA,aAAOD,QAAAA,IAAAA;IAER;AAEL,WAAA;;;;;ACvXA,SAAyBE,eAAAA,cAAaC,uBAAuB;AAE7D,SAASC,wBAAwB;AAO1B,IAAMC,gBAAgB,CAACC,OAAyCC,SAAAA;AACrE,QAAMC,gBAAgBN,aACpB,CAACO,UAAAA;AACC,YAAQA,MAAMC,KAAG;MACf,KAAK,SAAS;AACZ,YAAID,MAAME,WAAWJ,KAAKK,SAAS;AACjCL,eAAKM,OAAM;QACb;AACA;MACF;IACF;EACF,GACA;IAACN,KAAKO;IAASP,KAAKK;IAASL,KAAKM;IAAQN,KAAKQ;GAAS;AAG1DZ,kBAAgB,MAAA;AACd,UAAMa,KAAKV,MAAMW;AACjB,QAAI,CAACD,IAAI;AACP;IACF;AAEA,WAAOZ,iBAAiBY,IAAI,WAAWR,aAAAA;EACzC,GAAG;IAACF;IAAOE;GAAc;AAC3B;;;AC9BA,OAAOU,SACLC,iBAMK;AAIP,SAASC,MAAMC,OAAOC,eAAe;AACrC,SAASC,sBAAsB;AAC/B,SAASC,UAAU;;;ACfnB,SAASC,eAAeC,kBAAkB;AAiBnC,IAAMC,sBAAsBF,cAAuB,IAAA;AAGnD,IAAMG,kBAAkB,MAAeF,WAAWC,mBAAAA;;;ADyElD,IAAME,iBAAiB,CAAC,EAAEC,OAAOC,OAAOC,UAAUC,SAASC,KAAI,MAAuB;AAC3F,QAAMC,WAAWC,gBAAAA;AACjB,QAAMC,QAAQL,YAAYC,UAAU,SAASK,MAAMD;AACnD,QAAME,YAAY,sBAAA,cAACF,OAAAA;IAAMG,WAAWC,GAAGC,gBAAgB,SAAA;KAAaZ,KAAAA;AACpE,SACE,sBAAA,cAACa,OAAAA;IAAIH,WAAU;KACZL,YAAYD,OACX,sBAAA,cAACU,QAAQC,SAAO;IAACZ,SAAAA;IAAQa,SAASZ;IAAMa,MAAK;KAC1CR,SAAAA,IAGHA,WAEDR,SACC,sBAAA,cAACa,QAAQC,SAAO;IAACZ,SAAAA;IAAQa,SAASf;IAAOgB,MAAK;KAC5C,sBAAA,cAACC,MAAAA;IAAKC,MAAK;IAAuBC,MAAM;IAAGC,YAAW;;AAKhE;AAEAtB,eAAeuB,cAAc;AAatB,IAAMC,mBAAmB,CAAKC,UAAAA;AACnC,QAAM,EAAEC,UAAUvB,UAAUwB,QAAQ1B,OAAO2B,UAAUC,WAAWC,SAAQ,IAAKL;AAC7E,QAAM,EAAEM,QAAQ7B,MAAK,IAAK2B,UAAAA;AAE1B,QAAMG,SAAQF,SAAAA;AACd,MAAIH,WAAW,YAAYK,UAAS,MAAM;AACxC,WAAO;EACT;AAEA,QAAMC,MAAMC,OAAOF,UAAS,EAAA;AAE5B,SACE,sBAAA,cAAClB,OAAAA;IAAIH,WAAU;KACb,sBAAA,cAACF,MAAM0B,MAAI;IAACC,mBAAmBL;KAC5BJ,WAAW,YAAY,sBAAA,cAAC3B,gBAAAA;IAAeE;IAAcC;IAAoBF;IAAcI,MAAMuB;MAC7FD,WAAW,WACV,sBAAA,cAACU,KAAAA;IAAE1B,WAAU;IAAmB2B,OAAOL;KACpCA,GAAAA,IAEDP,WACFA,SAAS;IAAEM,OAAAA;EAAM,CAAA,IACf,MACHL,WAAW,UAAUzB,SACpB,sBAAA,cAACO,MAAM8B,0BAAwB,MAC7B,sBAAA,cAAC9B,MAAM+B,YAAU,MAAEtC,KAAAA,CAAAA,CAAAA,CAAAA;AAM/B;AAcO,IAAMuC,yBAAN,cAAqCC,UAAAA;EAC1C,OAAOC,yBAAyBzC,OAAgC;AAC9D,WAAO;MAAEA;IAAM;EACjB;EAES0C,QAAQ;IAAE1C,OAAO2C;EAAU;EAE3BC,mBAAmBC,WAAwC;AAClE,QAAIA,UAAU1C,SAAS,KAAKoB,MAAMpB,MAAM;AACtC,WAAK2C,WAAU;IACjB;EACF;EAESC,SAAS;AAChB,QAAI,KAAKL,MAAM1C,OAAO;AACpB,aACE,sBAAA,cAACY,OAAAA;QAAIH,WAAU;SACb,sBAAA,cAACuC,QAAAA;QAAKvC,WAAU;SAAmD,OAAA,GAClEuB,OAAO,KAAKT,MAAMpB,MAAM8C,KAAK,GAAA,CAAA,CAAA;IAGpC;AAEA,WAAO,KAAK1B,MAAMC;EACpB;EAEQsB,aAAa;AACnB,SAAKI,SAAS;MAAElD,OAAO2C;IAAU,CAAA;EACnC;AACF;;;AEzMA,YAAYQ,aAAY;AACxB,OAAOC,UAASC,WAAAA,gBAAe;AAG/B,SAASC,kBAAAA,uBAA2C;;;ACJpD,YAAYC,WAAW;AACvB,YAAYC,aAAY;AACxB,YAAYC,YAAY;AACxB,YAAYC,gBAAe;AAC3B,YAAYC,aAAY;AACxB,OAAOC,UAASC,WAAAA,gBAAe;AAE/B,SAASC,UAAAA,eAAc;AACvB,SACEC,kBAAAA,iBACAC,UACAC,iBAAAA,gBACAC,sBACAC,eAAAA,cACAC,sBACAC,kBAAAA,iBACAC,oBACK;AACP,SAASC,sBAAsB;AAG/B,SAASC,sBAAsB;AAgFxB,IAAMC,YAAY,CAACC,UAAAA;AACxB,QAAM;IACJC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;;IAGAC;IACAC;IACAC;IACAC;IACAC,gBAAAA;IACAC;IACAC,SAASC;IACTC;IACAC;EAAQ,IACNlB;AACJ,QAAM,EAAEmB,EAAC,IAAKC,eAAeC,cAAAA;AAC7B,QAAMC,QAAQC,eAAgCC,4BAAiB,EAAEvB,IAAAA;AACjE,QAAMwB,cAAcF,eAAgCG,kCAAuB,EAAEzB,IAAAA;AAC7E,QAAM0B,WAAWJ,eAAkCK,+BAAoB,EAAE3B,IAAAA;AAMzE,QAAM4B,QAAQC,SAAQ,MAAMR,UAAUpB,QAAQ,OAAO,KAAY6B,mBAAW7B,IAAAA,IAAQ;IAACoB;IAAOpB;GAAK;AACjG,QAAM8B,cAAcF,SAClB,MAAOH,UAAUM,SAAS,GAAGd,EAAE,qBAAA,CAAA,KAA2BQ,SAAS,CAAA,CAAE,KAAMF,eAAeI,OAC1F;IAACF;IAAUF;IAAaI;GAAM;AAGhC,QAAMK,aAAaC,kBAAkBpC,UAAUqC,aAAajC,IAAAA;AAC5D,QAAMkC,WAAWC,gBAAenC,QAAQ,CAAA,CAAE;AAC1C,QAAMoC,aAAsC;IAC1CtC;IACAuC,QAAQC,QAAOC,iBAAiBC,WAAW1C,IAAAA,EAAM2C,KAAK,CAACC,eAAsBC,uBAAeD,UAAAA,CAAAA;IAC5FtC;IACAsB;IACAQ;IACAL;IACAxB;IACAM;IACA,GAAGoB;EACL;AAUA,MAAI3B,YAAY2B,WAAWa,SAAQ,KAAM,MAAM;AAC7C,WAAO;EACT;AAMA,QAAMC,cAAc3C,WAAWgC,QAAAA;AAC/B,MAAIW,aAAa;AACf,WAAO,gBAAAC,OAAA,cAACD,aAAgBT,UAAAA;EAC1B;AAGA,QAAMW,YAAY5C,gBAAgB;IAAE6C,QAAeC,YAAKnD,IAAAA;IAAOoD,MAAMnD,QAAQ;IAAIqC;EAAW,CAAA;AAC5F,MAAIW,WAAW;AACb,WAAOA;EACT;AAMA,MAAII,aAAYrD,IAAAA,GAAO;AACrB,WAAO,gBAAAgD,OAAA,cAACM,YAAAA;MAAWhB,YAAYL;MAAYL;MAAe,GAAG7B;;EAC/D;AAMA,QAAMwD,QAAQC,aAAalB,UAAAA;AAC3B,MAAIiB,OAAO;AACT,WAAO,gBAAAP,OAAA,cAACO,OAAUjB,UAAAA;EACpB;AAMA,QAAMmB,UAAUC,iBAAiB1D,IAAAA;AACjC,MAAIyD,SAAS;AAEX,UAAME,mBAAmBxD,YAAYyD,oBAAAA;AACrC,UAAMC,kBAAkBF,kBAAkBG,KAAK,CAACC,OAAOA,GAAGC,MAAM9D,SAASD,IAAAA;AACzE,UAAMgE,gBAAgBJ,iBAAiB9D,MAAM0D;AAE7C,WACE,gBAAAT,OAAA,cAACkB,aAAAA;MACE,GAAG5B;MACJmB,SAASA,QAAQU,IAAI,CAACC,WAAAA;AACpB,cAAMC,eAAeJ,eAAeH,KAAK,CAACQ,OAAOA,GAAGC,OAAOC,WAAWC,OAAOL,MAAAA,CAAAA;AAC7E,eAAO;UACLM,OAAON;UACPxC,OAAOyC,cAAchD,SAAS+C,OAAOO,SAAQ;QAC/C;MACF,CAAA;;EAGN;AAMA,QAAMC,WAAWC,YAAY7E,IAAAA;AAC7B,MAAI4E,UAAU;AACZ,UAAME,iBAAiB,CAACtE,kBAAkBoE,SAASG,aAAavE;AAChE,WACE,gBAAAwC,OAAA,cAACgC,UAAAA;MACE,GAAG1C;MACH,GAAGsC;MACJnE,mBAAmBqE,iBAAiBrE,oBAAoBwE;MACxDvE,kBAAkBoE,iBAAiBpE,mBAAmBuE;MACtDtE,wBAAwBmE,iBAAiBnE,yBAAyBsE;MAClErE,gBAAgBkE,iBAAiBlE,kBAAiBqE;MAClDpE;MACAC,SAASC;MACTC;MACAC;;EAGN;AAMA,MAAIiE,aAAalF,IAAAA,GAAO;AACtB,UAAMmF,WAAWC,SAASpF,MAAMqF,oBAAAA;AAChC,UAAMC,cAAcH,WAChBI,qBAAqBJ,UAAUlD,WAAWa,SAAQ,CAAA,IAClDsC,SAASpF,MAAgBwF,wBAAa;AAE1C,QAAIF,aAAa;AACf,YAAMpC,SAAgBC,YAAKmC,WAAAA;AAC3B,aACE,gBAAAtC,OAAA,cAACyC,cAAAA;QACCvC;QACAhD;QACAI;QACAC;QACAqB;QACAzB;QACAC;QACAC;QACAI;QACAC;QACAC;QACAE;QACAC,SAASC;QACTC;QACAC;;IAGN;EACF;AAEA,SAAO;AACT;AAEAnB,UAAUqC,cAAc;AAKxB,IAAMqB,eAAe,CAAC,EAAExD,MAAMuC,OAAM,MAA2B;AAK7D,QAAMmD,cAAoBhB,YAAMnC,MAAAA,EAAQI,KAChCgD,qBAAc,GACdC,WAAKpD,QAAOqD,WAAWC,MAAM,MAAMC,SAAAA,GACnCH,WAAKpD,QAAOqD,WAAWG,UAAU,MAAMD,SAAAA,GACvCH,WAAKpD,QAAOqD,WAAWI,UAAU,MAAMC,aAAAA,GACvCN,WAAKpD,QAAOqD,WAAWM,UAAU,MAAMC,aAAAA,GACvCR,WAAKpD,QAAOqD,WAAWQ,MAAM,MAAMC,aAAAA,GACnCV,WAAKpD,QAAOqD,WAAWU,MAAM,MAAMR,SAAAA,GACnCS,aAAO,MAAMvB,MAAAA,CAAAA;AAErB,MAAIS,aAAa;AACf,WAAOA;EACT;AAMA,UAAQ1F,KAAKyG,MAAI;;IAEf,KAAK;IACL,KAAK;AACH,aAAOC;IACT,KAAK;AACH,aAAOC;IACT,KAAK;AACH,aAAOC;EACX;AACF;AAEA,IAAMlD,mBAAmB,CAACmD,QAAAA;AACxB,MAAIC,gBAAeD,GAAAA,GAAM;AACvB,WAAOA,IAAIE,MAAM5C,IAAI,CAACnE,SAASA,KAAKgH,OAAO,EAAEC,OAAO,CAACC,MAA4BA,MAAM,IAAA;EACzF;AAEA,SAAO1E,QAAO2E,kBAAkBzE,WAAWmE,GAAAA,EAAKlE,KAAK,CAACC,eAAsBC,uBAAeD,UAAAA,CAAAA;AAC7F;;;ACvUA,SAASwE,8BAA8B;AA0BhC,IAAMC,yBAAyBC,uBAAOC,IAAI,uCAAA;AAI1C,IAAMC,uBAAuBJ,uBAAsCC,sBAAAA;AAGnE,IAAMI,sBAAsB;;;ACjCnC,YAAYC,aAAY;AAExB,OAAOC,UAASC,UAAUC,WAAAA,gBAAe;;;ACiBlC,IAAMC,mBAAN,cAA+BC,MAAAA;;EAC3BC,OAAO;EAChB,YACEC,SACSC,UACT;AACA,UAAMA,aAAaC,SAAY,GAAGF,OAAAA,iBAAwBC,QAAAA,MAAcD,OAAAA,GAAAA,KAF/DC,WAAAA;EAGX;AACF;AAEA,IAAME,SAAS;AACf,IAAMC,UAAU;AAMhB,IAAMC,aAAa,CAACC,QAAAA;AAClB,QAAMC,QAAgC,CAAC;AACvCH,UAAQI,YAAY;AACpB,MAAIC;AACJ,UAAQA,QAAQL,QAAQM,KAAKJ,GAAAA,OAAU,MAAM;AAC3C,UAAM,CAAA,EAAGK,KAAKC,cAAcC,cAAcC,IAAAA,IAAQL;AAClDF,UAAMI,GAAAA,IAAOC,gBAAgBC,gBAAgBC;EAC/C;AACA,SAAOP;AACT;AAEA,IAAMQ,WAAW,CAACC,UAAAA;AAChB,QAAMC,SAAkB,CAAA;AACxBd,SAAOK,YAAY;AACnB,MAAIC;AACJ,MAAIS,SAAS;AACb,UAAQT,QAAQN,OAAOO,KAAKM,KAAAA,OAAY,MAAM;AAE5C,UAAMG,UAAUH,MAAMI,MAAMF,QAAQT,MAAMY,KAAK;AAC/C,QAAIF,QAAQG,KAAI,EAAGC,SAAS,GAAG;AAC7B,YAAM,IAAI1B,iBAAiB,4BAA4B2B,KAAKC,UAAUN,QAAQG,KAAI,CAAA,CAAA,IAAOJ,MAAAA;IAC3F;AACA,UAAM,CAAA,EAAGQ,OAAOC,MAAMC,UAAUC,SAAAA,IAAapB;AAC7C,QAAIiB,OAAO;AACTT,aAAOa,KAAK;QAAEC,MAAM;QAASJ;QAAM1B,UAAUQ,MAAMY;MAAM,CAAA;IAC3D,OAAO;AACLJ,aAAOa,KAAK;QACVC,MAAM;QACNJ;QACApB,OAAOF,WAAWuB,QAAAA;QAClBI,aAAaH,cAAc;QAC3B5B,UAAUQ,MAAMY;MAClB,CAAA;IACF;AACAH,aAAST,MAAMY,QAAQZ,MAAM,CAAA,EAAGc;EAClC;AAEA,QAAMU,WAAWjB,MAAMI,MAAMF,MAAAA;AAC7B,MAAIe,SAASX,KAAI,EAAGC,SAAS,GAAG;AAC9B,UAAM,IAAI1B,iBAAiB,4BAA4B2B,KAAKC,UAAUQ,SAASX,KAAI,CAAA,CAAA,IAAOJ,MAAAA;EAC5F;AACA,SAAOD;AACT;AAEA,IAAMiB,cAAc,CAAC3B,OAA+BI,KAAawB,KAAalC,aAAAA;AAC5E,QAAMmC,SAAQ7B,MAAMI,GAAAA;AACpB,MAAIyB,WAAUlC,QAAW;AACvB,UAAM,IAAIL,iBAAiB,IAAIsC,GAAAA,iCAAoCxB,GAAAA,KAAQV,QAAAA;EAC7E;AACA,SAAOmC;AACT;AAEA,IAAMC,eAAe,CAACD,QAAeE,MAAcH,KAAalC,aAAAA;AAC9D,MAAI,CAAC,QAAQsC,KAAKH,MAAAA,GAAQ;AACxB,UAAM,IAAIvC,iBACR,IAAIsC,GAAAA,gBAAmBG,IAAAA,6BAAiCd,KAAKC,UAAUW,MAAAA,CAAAA,IACvEnC,QAAAA;EAEJ;AACA,SAAOuC,OAAOC,SAASL,QAAO,EAAA;AAChC;AAGO,IAAMM,cAAc,CAACC,aAAAA;AAC1B,QAAM1B,SAASF,SAAS4B,QAAAA;AACxB,MAAI1B,OAAOM,WAAW,GAAG;AACvB,UAAM,IAAI1B,iBAAiB,gBAAA;EAC7B;AAEA,MAAIwB,QAAQ;AAEZ,QAAMuB,YAAY,MAAA;AAChB,UAAMC,QAAQ5B,OAAOI,KAAAA;AACrB,QAAI,CAACwB,SAASA,MAAMd,SAAS,QAAQ;AACnC,YAAM,IAAIlC,iBAAiB,gCAAgC2B,KAAKC,UAAUoB,KAAAA,CAAAA,IAAUA,OAAO5C,QAAAA;IAC7F;AAEA,QAAI4C,MAAMlB,SAAS,SAAS;AAC1B,UAAI,CAACkB,MAAMb,aAAa;AACtB,cAAM,IAAInC,iBAAiB,yDAAyDgD,MAAM5C,QAAQ;MACpG;AACA,YAAM0B,OAAOO,YAAYW,MAAMtC,OAAO,QAAQ,SAASsC,MAAM5C,QAAQ;AACrE,YAAM6C,UAAUD,MAAMtC,MAAMwC;AAC5B,YAAMA,OAAOD,YAAY5C,SAAYmC,aAAaS,SAAS,QAAQ,SAASD,MAAM5C,QAAQ,IAAIC;AAC9FmB,eAAS;AACT,aAAO;QAAE2B,MAAM;QAASrB;QAAMoB;MAAK;IACrC;AAEA,QAAIF,MAAMlB,SAAS,QAAQ;AACzB,UAAIkB,MAAMb,aAAa;AACrB,cAAM,IAAInC,iBAAiB,iDAAiDgD,MAAM5C,QAAQ;MAC5F;AACA,YAAMgD,OAAOZ,aACXH,YAAYW,MAAMtC,OAAO,QAAQ,QAAQsC,MAAM5C,QAAQ,GACvD,QACA,QACA4C,MAAM5C,QAAQ;AAEhBoB,eAAS;AACT,YAAM6B,WAAyB,CAAA;AAC/B,aAAO7B,QAAQJ,OAAOM,UAAU,EAAEN,OAAOI,KAAAA,EAAOU,SAAS,WAAWd,OAAOI,KAAAA,EAAOM,SAAS,SAAS;AAClGuB,iBAASpB,KAAKc,UAAAA,CAAAA;MAChB;AACA,YAAMO,UAAUlC,OAAOI,KAAAA;AACvB,UAAI,CAAC8B,WAAWA,QAAQpB,SAAS,WAAWoB,QAAQxB,SAAS,QAAQ;AACnE,cAAM,IAAI9B,iBAAiB,qBAAqBgD,MAAM5C,QAAQ;MAChE;AACAoB,eAAS;AACT,aAAO;QAAE2B,MAAM;QAAQC;QAAMC;MAAS;IACxC;AAEA,UAAM,IAAIrD,iBAAiB,oBAAoBgD,MAAMlB,IAAI,KAAKkB,MAAM5C,QAAQ;EAC9E;AAEA,QAAMmD,OAAOR,UAAAA;AACb,MAAIvB,UAAUJ,OAAOM,QAAQ;AAC3B,UAAMU,WAAWhB,OAAOI,KAAAA;AACxB,UAAM,IAAIxB,iBACR,4BAA4BoC,SAASF,SAAS,SAAS,KAAK,GAAA,GAAME,SAASN,IAAI,KAC/EM,SAAShC,QAAQ;EAErB;AACA,MAAImD,KAAKJ,SAAS,QAAQ;AACxB,UAAM,IAAInD,iBAAiB,6BAAA;EAC7B;AACA,SAAOuD;AACT;;;ADrJA,IAAMC,mBAAmB;AA6BlB,IAAMC,aAAa,CAAC,EACzBC,QACAC,UACAC,OAAOC,qBACPC,MACAC,UACAC,QACAC,YACA,GAAGC,MAAAA,MACa;AAChB,QAAMC,YAAmBC,uBAAeC,qBAAqBC,IAAIZ,MAAAA,CAAAA;AACjE,QAAMa,SAASZ,YAAYQ,YAAYP,IAAAA;AACvC,MAAIW,WAAWC,QAAW;AACxB,UAAM,IAAIC,iBACRN,YACI,oBAAoBP,IAAAA,2BAA+Bc,OAAOC,KAAKR,SAAAA,EAAWS,KAAK,IAAA,KAAS,QAAA,MACxF,6DAA6D;EAErE;AAEA,QAAMC,OAAOC,SAAQ,MAAMC,YAAYR,MAAAA,GAAS;IAACA;GAAO;AACxD,QAAMS,aAAaF,SAAQ,MAAA;AACzB,UAAMG,OAAM,oBAAIC,IAAAA;AAChB,eAAWC,YAAYC,kBAAkB1B,OAAO2B,GAAG,GAAG;AACpDJ,MAAAA,KAAIK,IAAIC,OAAOJ,SAASvB,IAAI,GAAGuB,QAAAA;IACjC;AACA,WAAOF;EACT,GAAG;IAACvB;GAAO;AAEX,SACE,gBAAA8B,OAAA,cAACC,YAAAA;IACCC,MAAMb;IACNG;IACAW,UAAU7B,QAAQ,CAAA;IAClBC;IACAC;IACAC;IACC,GAAGC;;AAGV;AAEAT,WAAWmC,cAAcpC;AAQzB,IAAMiC,aAAa,CAAC,EAAEC,MAAMV,YAAYW,UAAU,GAAGzB,MAAAA,MAAwB;AAC3E,MAAIwB,KAAKG,SAAS,QAAQ;AACxB,WACE,gBAAAL,OAAA,cAACM,OAAAA;MAAIC,WAAU;MAAsBC,OAAO;QAAEC,qBAAqB,UAAUP,KAAKQ,IAAI;MAAoB;OACvGR,KAAKS,SAASlB,IAAI,CAACmB,OAAOC,UACzB,gBAAAb,OAAA,cAACc,UAAAA;MAASC,KAAKF;OACb,gBAAAb,OAAA,cAACC,YAAAA;MAAWC,MAAMU;MAAOpB;MAAwBW;MAAqB,GAAGzB;;EAKnF;AAEA,QAAMiB,WAAWH,WAAWV,IAAIoB,KAAK9B,IAAI;AACzC,MAAI,CAACuB,UAAU;AACb,UAAM,IAAIV,iBAAiB,UAAUiB,KAAK9B,IAAI,uBAAuB;EACvE;AACA,QAAME,OAAO;OAAI6B;IAAUD,KAAK9B;;AAChC,QAAM4C,OAAOd,KAAKc,OAAO;IAAEC,YAAY,QAAQf,KAAKc,IAAI,WAAWd,KAAKc,IAAI;EAAG,IAAIhC;AACnF,SACE,gBAAAgB,OAAA,cAACM,OAAAA;IAAIC,WAAU;IAAUC,OAAOQ;KAC9B,gBAAAhB,OAAA,cAACkB,wBAAAA;IAAuB5C;KACtB,gBAAA0B,OAAA,cAACmB,WAAAA;IAAUC,MAAMzB,SAASyB;IAAMhD,MAAM8B,KAAK9B;IAAME;IAAa,GAAGI;;AAIzE;;;AHzGA,IAAM2C,qBAAqB;AAoCpB,IAAMC,eAAe,CAAC,EAC3BC,OACAC,QACAC,UACAC,MACAC,MACAC,SACAC,YACAC,QACAC,aAAaC,qBACb,GAAGC,MAAAA,MACoB;AACvB,QAAMC,SAASC,cAAcd,oBAAoBK,IAAAA;AACjD,QAAMU,aAAaC,0BAA0B;IAAEb;IAAQU;IAAQN;IAASD;IAAME;EAAW,CAAA;AACzF,OAAKJ,YAAYK,WAAW,aAAaI,UAAU,MAAM;AACvD,WAAO;EACT;AAIA,QAAMI,UAAUd,SAAgBe,uBAAeC,qBAAqBC,IAAIjB,MAAAA,CAAAA,IAAWkB;AACnF,MAAIJ,UAAUP,UAAAA,MAAgBW,UAAalB,QAAQ;AACjD,WACE,gBAAAmB,OAAA,cAAAA,OAAA,UAAA,MACGb,WAAW,YAAYP,SAAS,gBAAAoB,OAAA,cAACC,gBAAAA;MAAerB;MAAcG,MAAMmB,gBAAenB,QAAQ,CAAA,CAAE;MAAGoB,SAAAA;QACjG,gBAAAH,OAAA,cAACI,YAAAA;MACCvB;MACAwB,MAAMjB;MACNL;MACAD;MACAK;MACAD;MACC,GAAGI;;EAIZ;AAEA,SACE,gBAAAU,OAAA,cAAAA,OAAA,UAAA,MACGb,WAAW,YAAYP,SAAS,gBAAAoB,OAAA,cAACC,gBAAAA;IAAerB;IAAcG,MAAMmB,gBAAenB,QAAQ,CAAA,CAAE;IAAGoB,SAAAA;MAChGV,WAAWa,IAAI,CAACC,aAAAA;AACf,UAAMF,OAAOE,SAASF,KAAKG,SAAQ;AACnC,WACE,gBAAAR,OAAA,cAACS,wBAAAA;MAAuBC,KAAKL;MAAMtB,MAAM;WAAKA,QAAQ,CAAA;QAAKsB;;OACzD,gBAAAL,OAAA,cAACW,WAAAA;MACCC,MAAML,SAASK;MACfP;MACAtB,MAAM;WAAKA,QAAQ,CAAA;QAAKsB;;MACxBvB;MACAK;MACAD;MACC,GAAGI;;EAIZ,CAAA,CAAA;AAGN;AAEAX,aAAakC,cAAcnC;AAU3B,IAAMgB,4BAA4B,CAAC,EACjCb,QACAI,SACAC,YACAK,QACAP,KAAI,MAC4B;AAGhC,SAAO8B,SAAQ,MAAA;AACb,QAAI,CAACjC,QAAQ;AACX,aAAO,CAAA;IACT;AAGA,UAAMkC,cAAcC,kBAAkBnC,OAAOoC,GAAG;AAChD,UAAMC,gBAAgBjC,UAAUA,QAAQ8B,WAAAA,IAAeA;AAGvD,QAAI7B,YAAY;AACd,YAAMiC,mBAAmBjC,WAAWkC,oBAAmB;AACvD,YAAMC,mBAAmB,IAAIC,IAAIpC,WAAWqC,oBAAmB,CAAA;AAG/D,YAAMC,eAAeN,cAAcO,OAAO,CAACC,SAAS,CAACL,iBAAiBM,IAAID,KAAKrB,KAAKG,SAAQ,CAAA,CAAA;AAC5F,YAAMoB,eAAiC,CAAA;AAGvC,iBAAWC,mBAAmBV,kBAAkB;AAC9C,cAAMW,YAAYC,OAAOF,gBAAgBG,MAAMjD,IAAI;AACnD,cAAM2C,OAAOF,aAAaS,KAAK,CAACP,UAASA,MAAKrB,SAASyB,SAAAA;AACvD,YAAIJ,MAAM;AACRE,uBAAaM,KAAKR,IAAAA;QACpB;MACF;AAGA,YAAMS,kBAAkB,IAAIb,IAAIH,iBAAiBb,IAAI,CAACpB,gBAAe6C,OAAO7C,YAAW8C,MAAMjD,IAAI,CAAA,CAAA;AACjG,YAAMqD,iBAAiBZ,aAAaC,OAAO,CAACC,SAAS,CAACS,gBAAgBR,IAAID,KAAKrB,KAAKG,SAAQ,CAAA,CAAA;AAC5FoB,mBAAaM,KAAI,GAAIE,cAAAA;AACrB,aAAOR;IACT;AAGA,WAAO5C,OACH;SAAIkC;MAAelC,KAAK,CAAC,EAAEqB,MAAMgC,EAAC,GAAI,EAAEhC,MAAMiC,EAAC,MAAOtD,KAAKuD,QAAQF,EAAE7B,SAAQ,CAAA,IAAMxB,KAAKuD,QAAQD,EAAE9B,SAAQ,CAAA,CAAA,IAC1GU;EACN,GAAG;IAACrC;IAAQU;IAAQN;IAASD;IAAME;GAAW;AAChD;;;ALrHO,IAAMsD,SAAS,CACpBC,iBAAAA;AAEA,QAAMC,SAASC,KAAKC,OAAOH,YAAAA,IACvBE,KAAKE,UAAUJ,YAAAA,IACdA;AACL,SAAOC,OAAOI,KAAYC,aAAK,IAAA,CAAA;AACjC;AAQO,IAAMC,uBAAuB,CAAuCN,WAAAA;AACzE,QAAMO,aAAuBC,iCAAsBR,OAAOS,GAAG;AAC7D,QAAMC,SAASH,WACZI,OAAO,CAACC,SAAgBC,kBAAUC,eAAeC,oBAAoBC,WAAWJ,KAAKK,IAAI,GAAG,MAAM,IAAA,MAAU,KAAA,EAC5GC,IAAI,CAACN,SAASA,KAAKO,IAAI;AAC1B,SAAOT,OAAOU,WAAW,IAAIpB,SAAUA,OAAOI,KAAYC,aAAI,GAAKK,MAAAA,CAAAA;AACrE;AA2BA,IAAM,CAACW,qBAAqBC,cAAAA,IAAkBC,eAAgC,MAAA;AAK9E,IAAMC,gBAOF,CAACC,eAAuBC,MAA4BC,iBAAAA;AACtD,QAAMC,aAAaC,SAAQ,MAAMH,QAAQ,CAAA,GAAI;IAACA,OAAOA,KAAKI,KAAK,GAAA,IAAOC;GAAU;AAChF,QAAMC,WAAWC,gBAAeL,UAAAA;AAChC,QAAM,EACJM,MAAM,EAAEC,QAAQC,cAAa,EAAE,IAC7Bd,eAAeG,aAAAA;AAEnB,QAAMY,SAAQC,WAAUH,QAAQH,QAAAA;AAKhC,QAAMO,qBAAqBC,OAAsB,IAAA;AACjDC,EAAAA,WAAU,MAAA;AACR,QAAIJ,UAAS,QAAQV,gBAAgBY,mBAAmBG,YAAYV,UAAU;AAC5EO,yBAAmBG,UAAUV;AAC7BI,oBAAcR,YAAsBe,0BAAehB,aAAAA,CAAAA;IACrD;EACF,GAAG;IAACU;IAAOV;IAAcS;IAAeR;IAAYI;GAAS;AAE7D,SAAOK;AACT;AAKA,IAAMO,oBAAoB,CAACnB,eAAuBC,OAA4B,CAAA,MAAE;AAC9E,QAAME,aAAaC,SAAQ,MAAMH,MAAM;IAACmB,MAAMC,QAAQpB,IAAAA,IAAQA,KAAKI,KAAK,GAAA,IAAOJ;GAAK;AACpF,QAAM,EACJQ,MAAM,EAAEa,WAAWC,UAAUC,QAAQb,cAAa,EAAE,IAClDd,eAAeG,aAAAA;AAEnB,SAAOI,SACL,OAAO;IACLkB,WAAW,MAAMA,UAAUnB,UAAAA;IAC3BoB,UAAU,MAAMA,SAASpB,UAAAA;IACzBqB,QAAQ,MAAMA,OAAOrB,UAAAA;IACrBQ,eAAe,CAAC3B,KAAoB4B,WAAeD,cAAcR,YAAYnB,KAAK4B,MAAAA;EACpF,IACA;IAACU;IAAWC;IAAUC;IAAQb;IAAeR;GAAW;AAE5D;AAsBA,IAAMsB,WAAW,CAA0C,EACzDC,UACAnD,QACAmC,QACAiB,QACAC,UACA,GAAGC,MAAAA,MACc;AACjB,QAAMpB,OAAOqB,eAAe;IAAEvD;IAAQmC;IAAQiB;IAAQC;IAAU,GAAGC;EAAM,CAAA;AAEzE,SACE,gBAAAE,OAAA,cAACC,oBAAoBC,UAAQ;IAACrB,OAAOiB,MAAMK,YAAY;KACrD,gBAAAH,OAAA,cAACnC,qBAAAA;IAAoBa;IAAa,GAAGoB;KAClCH,QAAAA,CAAAA;AAIT;AAEAD,SAASU,cAAc;AAMvB,IAAMC,qBAAqB;AAI3B,IAAMC,eAAeC,WAA2B,CAAC,EAAEZ,UAAU,GAAGG,MAAAA,GAASU,iBAAAA;AACvE,SACE,gBAAAR,OAAA,cAACS,WAAWC,MAAI;IAAE,GAAGC,gBAAgBb,KAAAA;IAAQc,aAAY;IAAWC,UAAAA;IAASC,SAAAA;IAAQC,MAAAA;IAAKC,KAAKR;KAC7F,gBAAAR,OAAA,cAACS,WAAWQ,UAAQ,MAAEtB,QAAAA,CAAAA;AAG5B,CAAA;AAEAW,aAAaF,cAAcC;AAM3B,IAAMa,oBAAoB;AAI1B,IAAMC,cAAcZ,WAA6C,CAAC,EAAEZ,UAAU,GAAGG,MAAAA,GAASU,iBAAAA;AACxF,QAAM,EAAE9B,MAAM0C,OAAM,IAAKtD,eAAeoD,iBAAAA;AACxC,QAAMG,WAAWrC,OAAuB,IAAA;AACxC,QAAMsC,YAAYC,aAAa;IAACf;IAAca;GAAS;AACvDG,gBAAcH,UAAU3C,IAAAA;AAExB,SACE,gBAAAsB,OAAA,cAACyB,OAAAA;IACE,GAAGd,gBAAgBb,OAAO;MACzB4B,MAAM;MACNC,YAAYC,IAAGC,WAAWC,OAAM,GAAI,kCAAA;IACtC,CAAA;IACAC,eAAaX;IACbJ,KAAKM;KAEJ3B,QAAAA;AAGP,CAAA;AAEAwB,YAAYf,cAAcc;AAM1B,IAAMc,sBAAqB;AAI3B,IAAMC,gBAAe,CAACnC,UAAAA;AACpB,QAAM,EAAEpB,MAAM,GAAGwD,aAAAA,IAAiBpE,eAAekE,mBAAAA;AAEjD,SAAO,gBAAAhC,OAAA,cAACmC,cAAAA;IAAoB3F,QAAQkC,KAAKlC;IAAS,GAAG0F;IAAe,GAAGpC;;AACzE;AAEAmC,cAAa7B,cAAc4B;AAM3B,IAAMI,oBAAmB;AAIzB,IAAMC,cAAa,CAAC,EAAE7F,QAAQ,GAAGsD,MAAAA,MAAwB;AACvD,QAAM,EAAEpB,MAAM,GAAGwD,aAAAA,IAAiBpE,eAAesE,iBAAAA;AACjD,QAAME,iBAAiB9F,UAAUkC,KAAKlC;AACtC,MAAI,CAAC8F,gBAAgB;AACnB,WAAO;EACT;AAEA,SAAO,gBAAAtC,OAAA,cAACuC,YAAAA;IAAkB/F,QAAQ8F;IAAiB,GAAGJ;IAAe,GAAGpC;;AAC1E;AAEAuC,YAAWjC,cAAcgC;AAMzB,IAAMI,oBAAoB;AAI1B,IAAMC,cAAc,CAAC,EAAEd,WAAU,MAAoB;AACnD,QAAM,EAAEe,EAAC,IAAKC,gBAAeC,eAAAA;AAC7B,QAAM,EACJlE,MAAM,EAAEmE,SAASjD,QAAQC,SAAQ,GACjCiD,UACAC,OAAM,IACJjF,eAAe0E,iBAAAA;AAEnB,MAAIM,YAAYC,WAAW,UAAU;AACnC,WAAO;EACT;AAKA,SACE,gBAAA/C,OAAA,cAACyB,OAAAA;IACCuB,WAAWpB,IAAGC,WAAWC,OAAM,GAAI,gEAAgEH,UAAAA;KAElG9B,YACC,gBAAAG,OAAA,cAACiD,YAAAA;IACCC,MAAK;IACLC,SAAAA;IACAC,OAAOV,EAAE,qBAAA;IACTW,SAASxD;IACTkC,eAAY;MAGfnC,UACC,gBAAAI,OAAA,cAACiD,YAAAA;IACCxF,MAAK;IACL6F,SAAQ;IACRC,UAAU,CAACV;IACXK,MAAK;IACLC,SAAAA;IACAC,OAAOV,EAAE,mBAAA;IACTW,SAASzD;IACTmC,eAAY;;AAKtB;AAEAU,YAAYrC,cAAcoC;AAM1B,IAAMgB,oBAAoB;AAI1B,IAAMC,cAAclD,WAClB,CAAC,EAAEZ,UAAUyD,OAAOM,aAAa,GAAG5D,MAAAA,GAASU,iBAAAA;AAC3C,SACE,gBAAAR,OAAA,cAACyB,OAAAA;IACE,GAAGd,gBAAgBb,OAAO;MAAE6B,YAAY;IAA+C,CAAA;IACxFX,KAAKR;KAEJ4C,SAAS,gBAAApD,OAAA,cAAC2D,MAAAA;IAAGX,WAAU;KAAWI,KAAAA,GAClCM,eAAe,gBAAA1D,OAAA,cAAC4D,KAAAA;IAAEZ,WAAU;KAAoBU,WAAAA,GAChD/D,QAAAA;AAGP,CAAA;AAGF8D,YAAYrD,cAAcoD;AAM1B,IAAMK,mBAAmB;AAIzB,IAAMC,aAAa,CAAC,EAAEnC,YAAYyB,OAAOF,MAAMK,SAAQ,MAAmB;AACxE,QAAM,EAAEb,EAAC,IAAKC,gBAAeC,eAAAA;AAC7B,QAAM,EACJlE,MAAM,EAAEmE,SAASjD,OAAM,GACvBkD,UACAC,OAAM,IACJjF,eAAe+F,gBAAAA;AAEnB,MAAIf,YAAYC,WAAW,UAAU;AACnC,WAAO;EACT;AAEA,SACE,gBAAA/C,OAAA,cAACyB,OAAAA;IAAIuB,WAAWpB,IAAG,+BAA+BD,UAAAA;KAChD,gBAAA3B,OAAA,cAACiD,YAAAA;IACCtB,YAAW;IACXlE,MAAK;IACL6F,SAAQ;IACRC,UAAUA,YAAY,CAACV;IACvBK,MAAMA,QAAQ;IACdE,OAAOA,SAASV,EAAE,mBAAA;IAClBW,SAASzD;IACTmC,eAAY;;AAIpB;AAEA+B,WAAW1D,cAAcyD;AAOlB,IAAME,OAAO;EAClBrD,MAAMhB;EACNuB,UAAUX;EACV0D,SAAS7C;EACT8C,SAASR;EACTS,UAAUjC;EACVkC,QAAQ9B;EACR+B,OAAOC;EACPC,SAAS7B;EACT8B,QAAQT;AACV;;;ADhYO,IAAMU,aAAa,CAAC,EACzBC,MACAC,MACAC,OACAC,UACAC,QACAC,YAAYC,YACZ,GAAGC,MAAAA,MACa;AAChB,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,eAAAA;AAC7B,QAAMC,cAAcC,qBAAoBZ,IAAAA;AACxC,QAAM,EAAEa,cAAa,IAAKP;AAC1B,QAAMQ,SAASC,cAAchB,WAAWiB,aAAaf,MAAM,MAAM,CAAA,CAAE;AAEnE,QAAMgB,wBAAwB,CAACC,aAAAA;AAC7B,UAAMC,WAAWC,UAASF,UAAUG,qBAAAA;AACpC,UAAMC,cAAcH,WAAWI,sBAAqBJ,UAAU,CAAC,CAAA,IAAKC,UAASF,UAAoBM,wBAAa;AAC9G,QAAI,CAACF,aAAa;AAChB,aAAO,CAAC;IACV;AAEA,WAAOG,OAAOC,YACZC,kBAAkBL,WAAAA,EAAaM,IAAI,CAACC,SAAAA;AAClC,YAAMC,eAAyBC,gCAAqBF,KAAK7B,IAAI,EAAEgC,KAAK,CAACC,eAC5DC,uBAAeD,UAAAA,CAAAA;AAExB,aAAO;QAACJ,KAAKM;QAAML;;IACrB,CAAA,CAAA;EAEJ;AAEA,QAAMM,YAAYC,aAAY,MAAA;AAC5B,UAAMP,eACJQ,cAAatC,IAAAA,KAASW,cAAcM,sBAAsBN,WAAAA,IAAe4B,gBAAgB5B,WAAAA;AAO3FE,kBAAcb,MAAM;SAAKc,UAAU,CAAA;MAAKgB;KAAa;EACvD,GAAG;IAACjB;IAAeb;IAAMW;IAAaG;GAAO;AAE7C,QAAM0B,eAAeH,aACnB,CAACI,QAAAA;AACC5B,kBACEb,MACAc,QAAQ4B,OAAO,CAACC,GAAGC,MAAMA,MAAMH,GAAAA,CAAAA;EAEnC,GACA;IAAC5B;IAAeb;IAAMc;GAAO;AAG/B,MAAI,CAACH,gBAAiBR,YAAYC,WAAW,aAAaU,UAAUA,OAAO+B,SAAS,GAAI;AACtF,WAAO;EACT;AAEA,QAAMC,qBAAqBnC,eAAe2B,cAAa3B,WAAAA,KAAgB,CAACoC,KAAIC,UAAUrC,WAAAA;AAEtF,SACE,gBAAAsC,OAAA,cAAAA,OAAA,UAAA,OACI7C,WAAW,YAAaU,UAAUA,OAAO+B,SAAS,MAClD,gBAAAI,OAAA,cAACC,OAAAA;IAAIC,WAAU;KACb,gBAAAF,OAAA,cAACC,OAAAA;IAAIC,WAAU;KACb,gBAAAF,OAAA,cAACG,gBAAAA;IAAejD;IAAoBD;IAAcD,MAAMoD,gBAAepD,QAAQ,CAAA,CAAE;IAAGqD,SAAAA;OAErF,CAACnD,YAAYC,WAAW,YACvB,gBAAA6C,OAAA,cAACM,WAAAA;IAAUC,MAAK;IAAoBtD,OAAOM,EAAE,iBAAA;IAAoBiD,SAASrB;OAKhF,gBAAAa,OAAA,cAACC,OAAAA;IAAIC,WAAU;KACZrC,QAAQc,IAAI,CAACe,GAAGe,UAAAA;AACf,UAAMC,SAASD,UAAU5C,OAAO+B,SAAS;AAMzC,UAAMe,aACJ,gBAAAX,OAAA,cAACY,WAAAA;MACE,GAAGtD;MACJuD,WAAWH;MACX3D,MAAMW;MAML,GAAImC,sBAAsB;QAAEX,MAAM;MAAK;MACxClC,MAAM;WAAKA,QAAQ,CAAA;QAAKyD;;MACxBvD,UAAUA,YAAYC,WAAW;MACjCA,QAAQ0C,qBAAsB1C,WAAW,WAAW,WAAW2D,SAAa;;AAIhF,WACE,gBAAAd,OAAA,cAACC,OAAAA;MAAIc,KAAKN;MAAOP,WAAU;OACxBL,qBACC,gBAAAG,OAAA,cAACC,OAAAA;MAAIC,WAAU;OAAuCS,UAAAA,IAEtDA,YAGD,CAACzD,YAAYC,WAAW,YACvB,gBAAA6C,OAAA,cAACM,WAAAA;MAAUC,MAAK;MAAiBtD,OAAOM,EAAE,oBAAA;MAAuBiD,SAAS,MAAMjB,aAAakB,KAAAA;;EAIrG,CAAA,CAAA,CAAA;AAIR;AAEA3D,WAAWiB,cAAc;AAEzB,IAAMuC,YAAY,CAAChD,UAAAA;AACjB,SACE,gBAAA0C,OAAA,cAACC,OAAAA;IAAIC,WAAU;KACb,gBAAAF,OAAA,cAACgB,aAAAA;IAAWC,SAAQ;IAAQC,SAAQ;IAAKC,QAAAA;IAAOC,UAAAA;IAAU,GAAG9D;;AAGnE;AAOO,IAAMgC,kBAAkB,CAAC+B,QAAAA;AAC9B,UAAQA,KAAKC,MAAAA;IACX,KAAK,iBAAiB;AACpB,aAAO;IACT;IACA,KAAK,iBAAiB;AACpB,aAAO;IACT;IACA,KAAK,kBAAkB;AACrB,aAAO;IACT;IACA,KAAK,WAAW;AACd,aAAOhC,gBAAgB+B,IAAIE,EAAC,CAAA;IAC9B;IACA,SAAS;AACP,UAAIF,OAAOhC,cAAagC,GAAAA,GAAM;AAC5B,eAAO,CAAC;MACV,OAAO;AACL,cAAM,IAAIG,MAAM,qBAAqBH,KAAKC,IAAAA,EAAM;MAClD;IACF;EACF;AACF;;;AWpLA,OAAOG,UAASC,eAAAA,oBAAmB;AAEnC,SAASC,SAAAA,cAA+B;AAIjC,IAAMC,eAAe,CAAC,EAAEC,MAAMC,UAAUC,eAAe,GAAGC,MAAAA,MAAyC;AACxG,QAAMC,eAAeC,aACnB,CAACC,WAAUJ,gBAAgBF,MAAMM,MAAAA,GACjC;IAACN;IAAME;GAAc;AAGvB,SACE,gBAAAK,OAAA,cAACC,kBAAAA;IAA0BP;IAAqB,GAAGE;KAChD,CAAC,EAAEG,OAAAA,OAAK,MAAO,gBAAAC,OAAA,cAACE,OAAMC,QAAM;IAACC,UAAU,CAAC,CAACV;IAAUW,SAASN;IAAOO,iBAAiBT;;AAG3F;;;ACjBA,SAASU,UAAUC,mBAAkB;AACrC,OAAOC,UAASC,eAAAA,oBAAmB;AAEnC,SAASC,UAAAA,eAAc;AACvB,SAASC,SAAAA,cAAa;AAiBtB,IAAMC,qBAAqB,CAACC,WAAAA;AAC1B,MAAI,CAACA,QAAO;AACV,WAAO;EACT;AACA,QAAMC,OAAO,IAAIC,KAAKF,MAAAA;AACtB,MAAIG,OAAOC,MAAMH,KAAKI,QAAO,CAAA,GAAK;AAChC,WAAO;EACT;AACA,SAAOC,YAAWL,MAAM,oBAAA;AAC1B;AAGA,IAAMM,qBAAqB,CAACP,WAAAA;AAC1B,MAAI,CAACA,QAAO;AACV,WAAOQ;EACT;AAEA,QAAMP,OAAO,IAAIC,KAAKF,MAAAA;AACtB,SAAOG,OAAOC,MAAMH,KAAKI,QAAO,CAAA,IAAMG,SAAYP,KAAKQ,YAAW;AACpE;AAEO,IAAMC,YAAY,CAAC,EACxBC,MACAC,QACAC,UACAC,aAAaC,cACbC,eACAC,QAAQC,SACR,GAAGC,MAAAA,MAC6B;AAChC,QAAMC,qBAAqBC,aAAY,CAACC,SAAiBN,cAAcL,MAAMW,IAAAA,GAAO;IAACX;IAAMK;GAAc;AAEzG,QAAMO,uBAAuBF,aAC3B,CAACC,SAAAA;AACC,UAAME,MAAMjB,mBAAmBe,IAAAA;AAC/BN,kBAAcL,MAAMa,GAAAA;EACtB,GACA;IAACb;IAAMK;GAAc;AAGvB,SACE,gBAAAS,OAAA,cAACC,kBAAAA;IAAyBb;IAAqB,GAAGM;KAC/C,CAAC,EAAEnB,OAAAA,OAAK,MAAE;AACT,YAAQY,QAAAA;MACN,KAAKe,QAAOC,WAAW1B;AACrB,eACE,gBAAAuB,OAAA,cAACI,OAAAA;UAAIC,WAAU;WACb,gBAAAL,OAAA,cAACM,OAAM7B,MAAI;UAAC8B,UAAU,CAAC,CAACnB;UAAUb,OAAOA,UAAS;UAAIgB,eAAeI;YACrE,gBAAAK,OAAA,cAACM,OAAME,aAAW,IAAA,CAAA;MAGxB,KAAKN,QAAOC,WAAWM;AACrB,eAAO,gBAAAT,OAAA,cAACM,OAAMG,MAAI;UAACF,UAAU,CAAC,CAACnB;UAAUb,OAAOA,UAAS;UAAIgB,eAAeI;;MAC9E,KAAKO,QAAOC,WAAWO;MACvB;AACE,eACE,gBAAAV,OAAA,cAACI,OAAAA;UAAIC,WAAU;WACb,gBAAAL,OAAA,cAACM,OAAMI,UAAQ;UACbH,UAAU,CAAC,CAACnB;UACZb,OAAOD,mBAAmBC,MAAAA;UAC1BgB,eAAeO;YAEjB,gBAAAE,OAAA,cAACM,OAAME,aAAW,IAAA,CAAA;IAG1B;EACF,CAAA;AAGN;;;AC1FA,OAAOG,UAA2BC,eAAAA,cAAaC,aAAAA,YAAWC,WAAAA,UAASC,YAAAA,iBAAgB;AAEnF,SAASC,eAAAA,oBAAkC;AAC3C,SAASC,SAAAA,QAAOC,kBAAAA,uBAAsB;AACtC,SAASC,sBAAsB;AAE/B,SAASC,kBAAAA,uBAAsB;AAIxB,IAAMC,gBAAgB,CAAC,EAC5BC,MACAC,OACAC,UACAC,UACAC,QACAC,WACAC,UACAC,eACAC,OAAM,MAC4B;AAClC,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,eAAAA;AAC7B,QAAM,EAAEC,QAAQC,MAAK,IAAKR,UAAAA;AAC1B,QAAMS,WAAWC,SAAkB,MAAMT,SAAAA,KAAc;IAAC;IAAG;KAAI;IAACA;GAAS;AACzE,QAAMU,SAAQD,SAAQ,MAAME,aAAYC,aAAaJ,QAAAA,GAAW;IAACA;GAAS;AAE1E,QAAM,CAACK,eAAeC,gBAAAA,IAAoBC,UAASL,OAAMM,WAAWC,SAAAA,CAAAA;AACpE,QAAM,CAACC,cAAcC,eAAAA,IAAmBJ,UAASL,OAAMU,UAAUH,SAAAA,CAAAA;AACjEI,EAAAA,WAAU,MAAA;AACR,UAAMC,WAAWX,aAAYC,aAAaJ,QAAAA;AAC1CM,qBAAiBQ,SAASN,WAAWC,SAAAA,CAAAA;AACrCE,oBAAgBG,SAASF,UAAUH,SAAAA,CAAAA;EACrC,GAAG;IAACT;GAAS;AAEb,QAAMe,eAAeC,aACnB,CAACC,gBAAmEC,YAClE,CAACC,UAAAA;AACC,UAAMC,YAAYD,MAAME,OAAOnB;AAC/BgB,YAAQE,SAAAA;AACR,QAAIA,cAAc,MAAMA,cAAc,KAAK;AACzC,YAAME,QAAQC,eAAeH,SAAAA;AAC7B,UAAIE,UAAUE,UAAa,CAACC,MAAMH,KAAAA,GAAQ;AACxC,cAAMI,kBAAkBvB,aAAYC,aAAaZ,SAAAA,KAAc;UAAC;UAAG;SAAE;AACrE,cAAMmC,cAAc;UAAE,GAAGD;UAAiB,CAACT,cAAAA,GAAiBK;QAAM;AAClE,cAAMM,WAAWzB,aAAY0B,WAAWF,WAAAA;AACxClC,sBAAcP,MAAM0C,QAAAA;MACtB;IACF;EACF,GACF;IAAC1C;IAAMM;IAAUC;GAAc;AAGjC,OAAKJ,YAAYC,WAAW,aAAa,CAACY,QAAOU,YAAY,CAACV,QAAOM,WAAW;AAC9E,WAAO;EACT;AAEA,SACE,gBAAAsB,OAAA,cAACC,OAAMC,MAAI;IAACC,mBAAmBnC;KAC5BR,WAAW,YACV,gBAAAwC,OAAA,cAACI,gBAAAA;IAAenC;IAAcV;IAAoBF;IAAcgD,MAAM/C;IAAUgD,SAAAA;MAEjF9C,WAAW,WACV,gBAAAwC,OAAA,cAACO,QAAWnC,MAAAA,IAEZ,gBAAA4B,OAAA,cAACQ,OAAAA;IAAIC,WAAU;KACb,gBAAAT,OAAA,cAACQ,OAAAA,MACC,gBAAAR,OAAA,cAACC,OAAMC,MAAI,MACR1C,WAAW,YAAY,gBAAAwC,OAAA,cAACC,OAAMS,OAAK,MAAE7C,EAAE,gBAAA,CAAA,GACxC,gBAAAmC,OAAA,cAACC,OAAMU,WAAS;IACdvD,MAAK;IACLwD,MAAK;IACLC,KAAI;IACJC,KAAI;IACJC,UAAU,CAAC,CAACxD;IACZyD,aAAanD,EAAE,sBAAA;IACfO,OAAOQ,gBAAgB;IACvBqC,UAAUhC,aAAa,YAAYJ,eAAAA;IACnCjB;QAIN,gBAAAoC,OAAA,cAACQ,OAAAA,MACC,gBAAAR,OAAA,cAACC,OAAMC,MAAI,MACR1C,WAAW,YAAY,gBAAAwC,OAAA,cAACC,OAAMS,OAAK,MAAE7C,EAAE,iBAAA,CAAA,GACxC,gBAAAmC,OAAA,cAACC,OAAMU,WAAS;IACdvD,MAAK;IACLwD,MAAK;IACLC,KAAI;IACJC,KAAI;IACJC,UAAU,CAAC,CAACxD;IACZyD,aAAanD,EAAE,uBAAA;IACfO,OAAOG,iBAAiB;IACxB0C,UAAUhC,aAAa,aAAaT,gBAAAA;IACpCZ;;AAQhB;AAEA,IAAM2C,SAAS,CAAC,EAAEzB,WAAW,GAAGJ,YAAY,EAAC,MAAe;AAC1D,QAAMwC,SAASpC,YAAY,IAAI,MAAM;AACrC,QAAMqC,SAASzC,aAAa,IAAI,MAAM;AAEtC,SACE,gBAAAsB,OAAA,cAACoB,QAAAA;IAAKX,WAAU;KACd,gBAAAT,OAAA,cAACoB,QAAAA,MACC,gBAAApB,OAAA,cAACoB,QAAAA,MAAMC,KAAKC,IAAIxC,QAAAA,EAAUyC,QAAQ,CAAA,CAAA,GAClC,gBAAAvB,OAAA,cAACoB,QAAAA;IAAKX,WAAU;KAAe,QAAES,MAAAA,CAAAA,GAEnC,gBAAAlB,OAAA,cAACoB,QAAAA,MACC,gBAAApB,OAAA,cAACoB,QAAAA,MAAMC,KAAKC,IAAI5C,SAAAA,EAAW6C,QAAQ,CAAA,CAAA,GACnC,gBAAAvB,OAAA,cAACoB,QAAAA;IAAKX,WAAU;KAAe,QAAEU,MAAAA,CAAAA,CAAAA;AAIzC;;;ACvHA,SAASK,oBAAoB;AAC7B,OAAOC,WAASC,eAAAA,cAAaC,WAAAA,gBAAe;AAE5C,SAAwBC,KAAKC,OAAAA,YAAW;AACxC,SAASC,eAAe;AACxB,SAASC,yBAAyB;AAClC,SAASC,QAAQC,QAAAA,OAAMC,SAAAA,QAAOC,kBAAAA,uBAAsB;AACpD,SAASC,QAAQC,kCAAkC;AACnD,SAASC,YAAY;AACrB,SAASC,4BAA4B;AAErC,SAASC,kBAAAA,uBAAsB;AAI/B,IAAMC,mBACJ;AASK,IAAMC,gBAAgB,CAAC,EAC5BC,MACAC,UACAC,OACAC,UACAC,aACAC,QACAC,IACAC,WACAC,UACAC,cAAa,MACW;AACxB,QAAM,EAAEC,QAAQC,MAAK,IAAKJ,UAAAA;AAC1B,QAAMK,QAAQC,KAAIC,UAAUd,IAAAA;AAC5B,QAAMe,SAAQP,SAAAA;AAEd,OAAKP,YAAYI,WAAW,aAAaU,UAAS,MAAM;AACtD,WAAO;EACT;AAEA,QAAMC,eAAe,MAAA;AACnB,QAAIJ,OAAO;AACT,YAAMK,YAAYF;AAClB,UAAIE,WAAW;AACb,eAAO,gBAAAC,QAAA,cAACC,mBAAAA;UAAkBF;UAAsBb;;MAClD;AAEA,UAAIH,UAAU;AACZ,eAAO;MACT;AAEA,aAAO,gBAAAiB,QAAA,cAACE,kBAAAA;QAAiBd;QAAQe,UAAU,CAACf;QAAIgB,UAAU,CAACC,QAAQd,cAAcT,MAAMuB,GAAAA;;IACzF;AAEA,WACE,gBAAAL,QAAA,cAACM,sBAAAA;MACCT,OAAQA,UAAgC;MACxCX;MACAH,UAAU,CAAC,CAACA;MACZwB,UAAU,CAACC,SAASjB,cAAcT,MAAM0B,IAAAA;;EAG9C;AAEA,QAAMC,eAAe,MAAA;AACnB,QAAIf,OAAO;AACT,YAAMK,YAAYF;AAClB,aAAOE,YAAY,gBAAAC,QAAA,cAACU,eAAAA;QAAcX;WAA2B;IAC/D;AACA,WAAO,gBAAAC,QAAA,cAACW,KAAAA;MAAEC,WAAU;OAAwBf,UAAgC,EAAA;EAC9E;AAEA,SACE,gBAAAG,QAAA,cAACa,OAAMC,MAAI;IAACC,mBAAmBvB;KAC5BL,WAAW,YAAY,gBAAAa,QAAA,cAACgB,gBAAAA;IAAevB;IAAcV;IAAoBC;IAAciC,MAAMhC;MAC7FE,WAAW,WAAWsB,aAAAA,IAAiBX,aAAAA,GACvCX,WAAW,UAAU,gBAAAa,QAAA,cAACa,OAAMK,YAAU,MAAEzB,KAAAA,CAAAA;AAG/C;AAGA,IAAMiB,gBAAgB,CAAC,EAAEX,UAAS,MAA+B;AAC/D,QAAMoB,OAAOC,aAAaC,SAAQ,MAAMC,QAAQC,KAAKxB,SAAAA,GAAY;IAACA;GAAU,CAAA;AAC5E,MAAI,CAACoB,MAAMK,SAAS;AAClB,WAAO;EACT;AACA,SAAO,gBAAAxB,QAAA,cAACW,KAAAA;IAAEC,WAAU;KAAuBO,KAAKK,OAAO;AACzD;AAOA,IAAMvB,oBAAoB,CAAC,EAAEF,WAAWb,YAAW,MAA0B;AAC3E,QAAMiC,OAAOC,aAAaC,SAAQ,MAAMC,QAAQC,KAAKxB,SAAAA,GAAY;IAACA;GAAU,CAAA;AAC5E,QAAM0B,iBAAiBJ,SACrB,MAAOF,OAAO;IAACO,qBAAqB;MAAEC,IAAI5B,UAAU6B;MAAKT,MAAMU,kBAAkBV,MAAM;QAAC;OAAU;IAAE,CAAA;MAAM,CAAA,GAC1G;IAACA;IAAMpB;GAAU;AAEnB,QAAM+B,aAAaC,2BAA2B;IAAE7C;IAAa4C,YAAYL;EAAe,CAAA;AACxF,MAAI,CAACN,MAAM;AACT,WAAO;EACT;AAEA,SACE,gBAAAnB,QAAA,cAACgC,OAAOlB,MAAI,MACV,gBAAAd,QAAA,cAACgC,OAAOC,MAAI;IAACC,YAAYtD;IAAkBkD;;AAGjD;AASA,IAAMxB,uBAAuB,CAAC,EAAET,OAAAA,QAAOX,aAAaH,UAAUwB,SAAQ,MAA6B;AACjG,QAAMuB,aAAaC,2BAA2B;IAAE7C;EAAY,CAAA;AAC5D,QAAMiD,eAAeC,aAAY,CAAC5B,SAAiBD,SAASC,IAAAA,GAAO;IAACD;GAAS;AAE7E,SACE,gBAAAP,QAAA,cAACgC,OAAOlB,MAAI,MACV,gBAAAd,QAAA,cAACgC,OAAOC,MAAI;IACVC,YAAYtD;IACZkD;IACAjC,OAAOA;IACPU,UAAUxB,WAAWsD,SAAYF;;AAIzC;AAQA,IAAMjC,mBAAmB,CAAC,EAAEd,IAAIe,UAAUC,SAAQ,MAAyB;AACzE,QAAM,EAAEkC,EAAC,IAAKC,gBAAeC,eAAAA;AAC7B,QAAMC,cAAcL,aAAY,MAAA;AAC9B,QAAI,CAAChD,IAAI;AACP;IACF;AACA,UAAM+B,OAAO/B,GAAGsD,IAAIC,IAAIpB,KAAKqB,KAAKA,MAAM;MAAEpB,SAAS;IAAG,CAAA,CAAA;AACtDpB,aAAST,KAAI4B,KAAKJ,IAAAA,CAAAA;EACpB,GAAG;IAAC/B;IAAIgB;GAAS;AAEjB,SACE,gBAAAJ,QAAA,cAAC6C,QAAAA;IAAOC,SAASL;IAAatC;KAC5B,gBAAAH,QAAA,cAAC+C,OAAAA;IAAKC,MAAK;IAAoBC,MAAM;MACrC,gBAAAjD,QAAA,cAACkD,QAAAA,MAAMZ,EAAE,mBAAA,CAAA,CAAA;AAGf;;;ACnKA,OAAOa,WAASC,eAAAA,oBAAmB;AAEnC,SAASC,SAAAA,cAAkC;AAC3C,SAASC,kBAAAA,uBAAsB;AAIxB,IAAMC,cAAc,CAAC,EAC1BC,MACAC,UACAC,aACAC,eACAC,QACA,GAAGC,MAAAA,MAC6B;AAChC,QAAMC,eAAeC,aACnB,CAACC,UAAUL,cAAcH,MAAMS,gBAAeD,MAAME,OAAOC,KAAK,KAAK,CAAA,GACrE;IAACX;IAAMG;GAAc;AAGvB,SACE,gBAAAS,QAAA,cAACC,kBAAAA;IAAyBZ;IAAqB,GAAGI;KAC/C,CAAC,EAAEM,OAAAA,SAAQ,GAAE,MACZ,gBAAAC,QAAA,cAACE,OAAMC,WAAS;IACdf,MAAK;IACLgB,UAAU,CAAC,CAACf;IACZC;IACAS,OAAOA;IACPM,UAAUX;IACVF;;AAKV;;;AClCA,OAAOc,WAASC,eAAAA,eAAaC,WAAAA,UAASC,YAAAA,iBAAgB;AAEtD,OAAO;AACP,SAAwBC,QAAQC,QAAQC,OAAAA,MAAKC,OAAAA,MAAKC,QAAAA,aAAY;AAC9D,SAASC,UAAUC,WAAWC,sBAAsB;AACpD,SAASC,qBAAqBC,yBAAAA,8BAA4D;AAC1F,SAASC,kBAAAA,uBAAsB;AAC/B,SAASC,WAAW;AACpB,SAASC,gBAAgB;AACzB,SAASC,UAAAA,SAAQC,QAAAA,OAAMC,SAAAA,QAAOC,kBAAAA,uBAAsB;AACpD,SAASC,+BAA+B;AAExC,SAASC,kBAAAA,uBAAsB;;;ACX/B,OAAOC,WAA6BC,YAAYC,eAAAA,cAAaC,YAAAA,iBAAgB;AAE7E,SAAuBC,SAA+BC,kBAAAA,uBAAsB;AAC5E,SAASC,gBAAgB;AACzB,SAASC,4BAA4B;AAErC,SAASC,kBAAAA,uBAAsB;AA8B/B,IAAMC,sBAAsBC,2BAC1B,CACE,EACEC,SACAC,aACAC,cACAC,mBACAC,kBACAC,wBACAC,gBAAAA,iBACAC,UACAC,UACA,GAAGC,MAAAA,GAELC,iBAAAA;AAEA,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,eAAAA;AAC7B,QAAM,CAACC,UAAUC,WAAAA,IAAeC,UAAS,KAAA;AACzC,QAAM,CAACC,kBAAkBC,mBAAAA,IAAuBF,UAAiB,EAAA;AAEjE,QAAM,EAAEG,SAASC,OAAOC,aAAY,IAAKC,qBAAqB;IAC5DC,OAAOvB;EACT,CAAA;AAEA,QAAMwB,iBAAiBC,aACrB,OAAOC,WAAAA;AACL,UAAMlB,WAAWkB,MAAAA;AACjBX,gBAAY,KAAA;AACZG,wBAAoB,EAAA;EACtB,GACA;IAACV;GAAS;AAGZ,QAAMmB,mBAAmBF,aAAY,MAAA;AACnCV,gBAAY,KAAA;AACZG,wBAAoB,EAAA;EACtB,GAAG,CAAA,CAAE;AAEL,QAAMU,gBAAgBH,aACpB,CAACI,UAAAA;AACC,QACEA,MAAMC,QAAQ,WACd5B,gBACC2B,MAAME,cAA8BC,cACnC,gEAAA,GAEF;AACAH,YAAMI,gBAAe;AACrBJ,YAAMK,eAAc;AAEpB,YAAMC,QAASN,MAAME,cAA8BC,cAAc,oBAAA;AACjE,YAAMI,eAAeD,OAAOE,SAAS;AACrCnB,0BAAoBkB,YAAAA;AACpBrB,kBAAY,IAAA;IACd;EACF,GACA;IAACb;GAAa;AAGhB,MAAIY,YAAYZ,cAAc;AAC5B,WACE,gBAAAoC,QAAA,cAACC,SAASC,SAAO;MAAE,GAAG/B;MAAOgC,kBAAkBb;MAAec,KAAKhC;OACjE,gBAAA4B,QAAA,cAACK,QAAQC,UAAQ,MACf,gBAAAN,QAAA,cAACO,KAAKC,MAAI;MACRC,QAAO;MACPC,QAAQ9C;MACR+C,eAAe5C,yBAAyB;QAAE,CAACA,sBAAAA,GAAyBY;MAAiB,IAAI,CAAC;MAC1FiC,UAAU5C;MACV6C,QAAQ3B;MACR4B,UAAUzB;OAEV,gBAAAW,QAAA,cAACO,KAAKD,UAAQ,MACZ,gBAAAN,QAAA,cAACO,KAAKL,SAAO,MACX,gBAAAF,QAAA,cAACO,KAAKQ,UAAQ,IAAA,GACd,gBAAAf,QAAA,cAACO,KAAKS,SAAO,IAAA,CAAA,CAAA,CAAA,CAAA,GAKrB,gBAAAhB,QAAA,cAACC,SAASgB,OAAK,IAAA,CAAA;EAGrB;AAEA,SACE,gBAAAjB,QAAA,cAACC,SAASC,SAAO;IAAE,GAAG/B;IAAOgC,kBAAkBb;IAAec,KAAKhC;KACjE,gBAAA4B,QAAA,cAACC,SAASiB,OAAK;IACbC,aAAa9C,EAAE,sCAAA;IACf+C,WAAAA;IACArB,OAAOjB;IACPuC,eAAetC;MAEjB,gBAAAiB,QAAA,cAACC,SAASqB,MAAI,MACXzC,QAAQ0C,IAAI,CAACC,WACZ,gBAAAxB,QAAA,cAACC,SAASwB,MAAI;IACZjC,KAAKgC,OAAOE;IACZ3B,OAAOyB,OAAOE;IACdC,OAAOH,OAAOG;IACdC,SAASjE,aAAakE,SAASL,OAAOE,EAAE;IACxCzD,UAAU,MAAMA,SAASuD,OAAOE,EAAE;IAClCI,YAAW;OAGdlE,gBAAgBM,YACf,gBAAA8B,QAAA,cAAC+B,YAAAA;IACCjD;IACAjB;IACAC,kBAAkBA,oBAAoB;IACtCkE,oBAAoB,CAAClC,iBAAAA;AACnBlB,0BAAoBkB,YAAAA;AACpBrB,kBAAY,IAAA;IACd;OAIN,gBAAAuB,QAAA,cAACC,SAASgB,OAAK,IAAA,CAAA;AAGrB,CAAA;AAGF,IAAMc,aAAa,CAAC,EAClBjD,OACAjB,mBACAC,kBACAkE,mBAAkB,MAMnB;AACC,QAAM,EAAE3D,EAAC,IAAKC,gBAAeC,eAAAA;AAE7B,QAAMoD,QAAQ9D,oBACVQ,EAAER,kBAAkB,CAAA,GAAI;IAAEoE,IAAIpE,kBAAkB,CAAA,EAAGoE;IAAIC,MAAMpD;EAAM,CAAA,IACnET,EAAE,qBAAA;AAEN,SACE,gBAAA2B,QAAA,cAACC,SAASwB,MAAI;IACZ1B,OAAM;IACN4B;IACAQ,MAAMrE;IACNgE,YAAW;IACXM,eAAe;IACfnE,UAAU,MAAA;AACR+D,yBAAmBlD,KAAAA;IACrB;;AAGN;AAEAtB,oBAAoB6E,cAAc;AAE3B,IAAMC,eAAe;EAC1B9B,MAAMP,SAASO;EACf+B,QAAQtC,SAASsC;EACjBC,SAASvC,SAASuC;EAClBC,gBAAgBxC,SAASwC;EACzBvC,SAAS1C;AACX;;;ADlLA,IAAMkF,gBAAgB,CAACC,QAAAA;AACrB,SAAO,OAAOA,QAAQ,YAAY,OAAQA,MAAc,GAAA,MAAS;AACnE;AAEA,IAAMC,oBAA8D,CAACC,SAAS,EAAEC,YAAW,IAAK,CAAC,MAC/FD,QAAQE,IAAI,CAACC,WAAAA;AACX,QAAMC,KAAKC,OAAOC,OAAOH,MAAAA;AACzB,QAAMI,SAASN,cAAcO,KAAIC,UAAUN,MAAAA,IAAyBO;AACpE,QAAMC,QAAQJ,SAASF,OAAOO,SAASL,MAAAA,IAAUF,OAAOO,SAAST,MAAAA;AACjE,SAAO;IAAEC;IAAIO,OAAOA,SAASP;EAAG;AAClC,CAAA;AAEF,IAAMS,oBAA8D,CAACC,IAAIC,aACvEC,SACEF,IACAC,WAEIA,aAAaE,sBACXC,OAAOC,WAAU,IACjBD,OAAOH,SAASA,QAAAA,IAClBG,OAAOE,QAAO,CAAA;AAsBf,IAAMC,WAAW,CAACC,UAAAA;AACvB,QAAM,EACJC,MACAC,UACAb,OACAc,UACAC,aACAC,QACAC,WACAC,UACAC,mBACAC,kBACAC,wBACAC,gBAAAA,iBACAnB,IACAoB,SAAAA,WAAUC,gBACVC,aAAavB,mBACbwB,aAAatC,mBACbuC,UACAC,cAAa,IACXjB;AACJ,QAAM,EAAEkB,EAAC,IAAKC,gBAAeC,eAAAA;AAC7B,QAAM,EAAEC,QAAQC,MAAK,IAAKhB,UAAAA;AAE1B,QAAMb,WAAW8B,SACf,MAAOtB,OAAOuB,gBAAyCvB,MAAMwB,sBAAAA,GAAwBhC,WAAWL,QAChG;IAACa;GAAK;AAGR,QAAMvB,UAAUoC,WAAWtB,IAAIC,QAAAA;AAC/B,QAAMiC,UAAUH,SAAQ,MAAA;AACtB,UAAM5C,cAAcsB,OAAOuB,gBAAwBvB,MAAM0B,uBAAAA,MAA6B,OAAO;AAC7F,WAAOZ,WAAWrC,SAAS;MAAEC;IAAY,CAAA;EAC3C,GAAG;IAACD;IAASqC;IAAYd;GAAK;AAE9B,QAAM2B,iBAAiBC,cAAY,MAAA;AACjC,UAAMC,YAAYvB,SAAAA;AAQlB,UAAMwB,gBAAgB,CAACC,QAAwBA,IAAIC,MAAM,GAAA,EAAKC,IAAG,KAAMF;AAEvE,UAAMG,qBAAqB,CAACC,WAAAA;AAC1B,YAAMC,QAAQC,KAAID,MAAMD,MAAAA;AACxB,UAAIC,SAAS9D,cAAc6D,MAAAA,GAAQ;AACjC,cAAMG,YAAYF,QAAQD,OAAMI,MAAMJ,OAAM,GAAA;AAC5C,cAAMK,WAAWV,cAAcQ,SAAAA;AAC/B,cAAMG,iBAAiBhB,QAAQiB,KAAK,CAACC,WAAWb,cAAca,OAAO9D,EAAE,MAAM2D,QAAAA;AAC7E,YAAIC,gBAAgB;AAClB,iBAAOA;QACT;MACF;AAEA,aAAOtD;IACT;AAEA,WAAO+C,mBAAmBL,SAAAA;EAC5B,GAAG;IAACJ;IAASnB;GAAS;AAEtB,QAAMsC,OAAOjB,eAAAA;AACb,QAAMkB,cAAcvB,SAAQ,MAAOsB,OAAO;IAACA,KAAK/D;MAAM,CAAA,GAAK;IAAC+D;GAAK;AACjE,QAAME,eAAenC,SAAQpB,IAAIC,QAAAA;AAGjC,QAAM,CAACuD,MAAMC,OAAAA,IAAWC,UAAS,KAAA;AAEjC,QAAMC,eAAetB,cACnB,OAAOuB,WAAAA;AACL,QAAI,CAACL,gBAAgB,CAAC/B,UAAU;AAC9B;IACF;AACA,UAAMqC,YAAY,MAAMrC,SAAS+B,cAAcK,MAAAA;AAC/C,QAAIC,WAAW;AAIbpC,oBAAchB,MAAMqC,KAAIgB,KAAKD,SAAAA,CAAAA;IAC/B;AACAJ,YAAQ,KAAA;EACV,GACA;IAACF;IAAc/B;IAAUf;IAAMgB;GAAc;AAG/C,QAAMsC,eAAe1B,cACnB,CAAC/C,OAAAA;AACC,UAAM+D,QAAOnB,QAAQiB,KAAK,CAACC,WAAWA,OAAO9D,OAAOA,EAAAA;AACpD,UAAM0E,MAAMX,QAAOP,KAAImB,QAAQC,IAAIJ,KAAKT,MAAK/D,EAAE,CAAA,IAAKM;AACpD6B,kBAAchB,MAAMuD,GAAAA;EACtB,GACA;IAAC9B;IAASzB;IAAMgB;GAAc;AAGhC,QAAM0C,eAAe9B,cACnB,CAAC/C,OAAAA;AACC,QAAI+D,MAAM/D,OAAOA,IAAI;AACnByE,mBAAanE,MAAAA;IACf,OAAO;AACLmE,mBAAazE,EAAAA;IACf;EACF,GACA;IAAC+D;IAAMU;GAAa;AAGtB,MAAI,CAAC9D,aAAcS,YAAYG,WAAW,aAAa,CAACwC,MAAO;AAC7D,WAAO;EACT;AAEA,SACE,gBAAAe,QAAA,cAACC,OAAMC,MAAI;IAACC,mBAAmB1C;KAC5BhB,WAAW,YAAY,gBAAAuD,QAAA,cAACI,gBAAAA;IAAe1C;IAAcpB;IAAoBb;IAAc4E,MAAM9D;MAC9F,gBAAAyD,QAAA,cAACM,OAAAA,MACEhE,WACC,CAAC2C,OACC,gBAAAe,QAAA,cAACO,KAAAA;IAAEC,WAAU;KAAyBlD,EAAE,gCAAA,CAAA,IAExC,gBAAA0C,QAAA,cAACS,UAAAA;IAASC,KAAKzB,KAAK/D;IAAIkD,KAAKa,KAAK/D;IAAIyF,eAAc;KACjD1B,KAAKxD,KAAK,IAIf,gBAAAuE,QAAA,cAACY,aAAaV,MAAI;IAACd;IAAYyB,cAAcxB;KAC3C,gBAAAW,QAAA,cAACY,aAAaE,SAAO;IAACC,SAAAA;IAAQC,YAAW;KACtC/B,OACC,gBAAAe,QAAA,cAACM,OAAAA;IAAIE,WAAU;KACb,gBAAAR,QAAA,cAACC,OAAMC,MAAI;IAACQ,KAAKzB,KAAK/D;KACpB,gBAAA8E,QAAA,cAACC,OAAMgB,WAAS;IAACzC,OAAOS,KAAKxD;IAAOyF,UAAAA;IAASF,YAAW;SAI5D,gBAAAhB,QAAA,cAACmB,SAAAA;IAAOH,YAAW;KACjB,gBAAAhB,QAAA,cAACM,OAAAA;IAAIE,WAAU;KACb,gBAAAR,QAAA,cAACoB,QAAAA;IAAKZ,WAAU;KACbhE,eAAef,SAAS6B,EAAE,uBAAA,CAAA,CAAA,GAG/B,gBAAA0C,QAAA,cAACqB,OAAAA;IAAKC,MAAM;IAAGC,MAAK;QAI1B,gBAAAvB,QAAA,cAACY,aAAaY,QAAM,MAClB,gBAAAxB,QAAA,cAACY,aAAaa,SAAO;IACnBT,YAAW;IACXlD;IACAoB;;;;IAIAC,cAAcA,gBAAgBuC,qBAAqBC,OAAOC,MAAKC,UAAU1C,YAAAA,CAAAA,CAAAA;IACzEvC;IACAC;IACAC;IACAC,gBAAgBA;IAChBK,UAAUmC;IACVuC,UAAU/B;SAMnBtD,WAAW,UAAU,gBAAAuD,QAAA,cAACC,OAAM8B,0BAAwB,MAAErE,KAAAA,CAAAA;AAG7D;;;AEnOA,OAAOsE,WAASC,eAAAA,qBAAmB;AAEnC,SAASC,QAAAA,OAAMC,SAAAA,QAAOC,cAAoC;AAC1D,SAASC,iBAAiB;AAQnB,IAAMC,cAAc,CAAC,EAC1BC,MACAC,UACAC,OACAC,UACAC,QACAC,aACAC,SACAC,WACAC,UACAC,cAAa,MACM;AACnB,QAAM,EAAEC,QAAQC,MAAK,IAAKJ,UAAAA;AAC1B,QAAMK,SAAQJ,SAAAA;AAEd,QAAMK,oBAAoBC,cACxB,CAACF,WAAUH,cAAcT,MAAMY,MAAAA,GAC/B;IAACZ;IAAMS;GAAc;AAGvB,OAAKR,YAAYG,WAAW,aAAaQ,UAAS,MAAM;AACtD,WAAO;EACT;AAEA,SACE,gBAAAG,QAAA,cAACC,OAAMC,MAAI;IAACC,mBAAmBR;KAC5BN,WAAW,YAAY,gBAAAW,QAAA,cAACI,gBAAAA;IAAeR;IAAcV;IAAoBC;IAAckB,MAAMjB;MAC7FC,WAAW,WACV,gBAAAW,QAAA,cAACM,KAAAA,MAAGf,SAASgB,KAAK,CAAC,EAAEV,OAAOW,YAAW,MAAOA,gBAAgBX,MAAAA,GAAQV,SAASsB,OAAOZ,MAAAA,CAAAA,IAEtF,gBAAAG,QAAA,cAACU,OAAOR,MAAI;IAACL,OAAOA;IAAOH,eAAeI;KAExC,gBAAAE,QAAA,cAACU,OAAOC,eAAa;IAACC,YAAW;IAASC,UAAU,CAAC,CAAC3B;IAAUI;MAChE,gBAAAU,QAAA,cAACU,OAAOI,QAAM,MACZ,gBAAAd,QAAA,cAACU,OAAOK,SAAO,MACb,gBAAAf,QAAA,cAACU,OAAOM,UAAQ,MACbzB,SAAS0B,IAAI,CAAC,EAAEpB,OAAAA,QAAOV,OAAAA,QAAO+B,gBAAgBC,MAAMC,QAAO;;IAE1D,gBAAApB,QAAA,cAACU,OAAOW,QAAM;MAACC,KAAKb,OAAOZ,MAAAA;MAAQA,OAAOY,OAAOZ,MAAAA;OAC/C,gBAAAG,QAAA,cAACuB,QAAAA;MAAKC,WAAU;OACbL,QAAQ,gBAAAnB,QAAA,cAACyB,OAAAA;MAAKN;MAAYP,YAAYc,iBAAiBN,OAAAA;QACvDjC,UAASsB,OAAOZ,MAAAA,GAChBqB,kBAAkB,gBAAAlB,QAAA,cAACuB,QAAAA;MAAKC,WAAU;OAAwBN,cAAAA,CAAAA,CAAAA;GAAAA,CAAAA,GAKnE,gBAAAlB,QAAA,cAACU,OAAOiB,OAAK,IAAA,CAAA,CAAA,CAAA,GAKpBtC,WAAW,UAAU,gBAAAW,QAAA,cAACC,OAAM2B,0BAAwB,MAAEhC,KAAAA,CAAAA;AAG7D;AAEA,IAAM8B,mBAAmB,CAACN,YAAAA;AACxB,QAAMS,SAAST,UAAUU,UAAUV,OAAAA,IAAWW;AAE9C,SAAOF,QAAQG;AACjB;;;ACxEA,OAAOC,WAA+CC,eAAAA,eAAaC,aAAAA,YAAWC,UAAAA,SAAQC,YAAAA,iBAAgB;AAGtG,SAASC,iBAAiB;AAC1B,SAAgCC,cAAAA,aAAYC,SAAAA,QAAOC,KAAKC,kBAAAA,uBAAsB;AAC9E,SAASC,YAAY;AACrB,SAASC,iBAAiB;AAC1B,SAASC,MAAMC,sBAAsB;AAErC,SAASC,kBAAAA,uBAAsB;AAIxB,IAAMC,oBAAoB,CAAC,EAChCC,MACAC,UACAC,OACAC,UACAC,WACAC,UACAC,cAAa,MACuC;AACpD,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,eAAAA;AAC7B,QAAM,EAAEC,QAAQC,MAAK,IAAKP,UAAAA;AAC1B,QAAM,CAACQ,UAAUC,aAAAA,IAAiBC,UAAwB,IAAA;AAC1D,QAAM,CAACC,aAAaC,cAAAA,IAAkBF,UAAS,KAAA;AAC/C,QAAMG,WAAWC,QAAyB,IAAA;AAC1C,QAAMC,UAAUd,SAAAA;AAGhBe,EAAAA,WAAU,MAAA;AACR,QAAID,YAAYE,QAAW;AACzBf,oBAAcN,MAAM,CAAA,CAAE;IACxB;EACF,GAAG;IAACmB;IAASnB;IAAMM;GAAc;AAEjC,QAAMgB,YAAY,MAAA;AAChB,UAAMC,WAAW,IAAIC,IAAIL,SAASM,IAAI,CAACC,WAAWA,OAAOC,KAAK,KAAK,CAAA,CAAE;AAErE,UAAMC,aAAaC,KAAKC,OAAO,CAACC,QAAQ,CAACR,SAASS,IAAID,GAAAA,CAAAA;AACtD,QAAIH,WAAWK,SAAS,GAAG;AACzB,aAAOL,WAAWM,KAAKC,MAAMD,KAAKE,OAAM,IAAKR,WAAWK,MAAM,CAAA;IAChE;AAGA,UAAMI,YAAY,IAAIb,IAAIL,SAASmB,MAAM,EAAC,EAAGb,IAAI,CAACC,WAAWA,OAAOC,KAAK,KAAK,CAAA,CAAE;AAChF,UAAMY,gBAAgBV,KAAKC,OAAO,CAACC,QAAQ,CAACM,UAAUL,IAAID,GAAAA,CAAAA;AAC1D,WACEQ,cAAcL,KAAKC,MAAMD,KAAKE,OAAM,IAAKG,cAAcN,MAAM,CAAA,KAAMJ,KAAKK,KAAKC,MAAMD,KAAKE,OAAM,IAAKP,KAAKI,MAAM,CAAA;EAElH;AAEA,QAAMO,YAAYC,cAAY,MAAA;AAC5B,UAAMC,QAAQC,UAAUP,OAAM,EAAGQ,SAAQ;AACzC,UAAMC,YAAY;MAAEC,IAAIJ;MAAOK,OAAO;MAAIpB,OAAOL,UAAAA;IAAY;AAC7DhB,kBAAcN,MAAM;SAAKmB,WAAW,CAAA;MAAK0B;KAAU;AACnDhC,kBAAc6B,KAAAA;AACd1B,mBAAe,IAAA;EACjB,GAAG;IAACG;IAASnB;IAAMM;GAAc;AAEjC,QAAM0C,eAAeP,cACnB,CAACK,OAAAA;AACC,UAAMG,aAAa9B,SAASW,OAAO,CAACJ,WAAWA,OAAOoB,OAAOA,EAAAA,KAAO,CAAA;AACpExC,kBAAcN,MAAMiD,UAAAA;AACpBpC,kBAAc,IAAA;EAChB,GACA;IAACM;IAASnB;IAAMM;GAAc;AAGhC,QAAM4C,aAAaT,cACjB,CAACU,MAAcC,OAAAA;AACb,QAAI,CAACjC,SAAS;AACZ;IACF;AAEA,UAAM8B,aAAa;SAAI9B;;AACvB,UAAM,CAACkC,OAAAA,IAAWJ,WAAWK,OAAOH,MAAM,CAAA;AAC1CF,eAAWK,OAAOF,IAAI,GAAGC,OAAAA;AACzB/C,kBAAcN,MAAMiD,UAAAA;EACtB,GACA;IAAC9B;IAASnB;IAAMM;GAAc;AAGhC,QAAMiD,cAAcd,cAAY,CAACK,OAAAA;AAC/BjC,kBAAc,CAAC2C,YAAaA,YAAYV,KAAK,OAAOA,EAAAA;EACtD,GAAG,CAAA,CAAE;AAEL,QAAMW,oBAAoBhB,cACxB,CAACK,OAAe,CAACY,MAAAA;AACf,UAAMT,aAAa9B,SAASM,IAAI,CAACkC,MAAOA,EAAEb,OAAOA,KAAK;MAAE,GAAGa;MAAGZ,OAAOW,EAAEE,OAAOC;IAAM,IAAIF,CAAAA;AACxFrD,kBAAcN,MAAMiD,cAAc,CAAA,CAAE;EACtC,GACA;IAAC9B;IAASnB;IAAMM;GAAc;AAGhC,QAAMwD,gBAAgBrB,cAAY,CAACsB,OAAAA;AACjC,QAAIA,GAAGC,QAAQ,SAAS;AACtBnD,oBAAc,IAAA;IAChB;EACF,GAAG,CAAA,CAAE;AAEL,QAAMoD,oBAAoBxB,cACxB,CAACK,OAAe,CAACf,QAAAA;AACf,UAAMkB,aAAa9B,SAASM,IAAI,CAACkC,MAAOA,EAAEb,OAAOA,KAAK;MAAE,GAAGa;MAAGhC,OAAOI;IAAI,IAAI4B,CAAAA;AAC7ErD,kBAAcN,MAAMiD,cAAc,CAAA,CAAE;EACtC,GACA;IAAC9B;IAASnB;IAAMM;GAAc;AAGhCc,EAAAA,WAAU,MAAA;AACR,QAAIR,YAAYG,eAAeE,SAASuC,SAAS;AAC/CvC,eAASuC,QAAQU,MAAK;AACtBlD,qBAAe,KAAA;IACjB;EACF,GAAG;IAACJ;IAAUG;GAAY;AAE1B,SACE,gBAAAoD,QAAA,cAACC,OAAMC,MAAI;IAACC,mBAAmB5D;KAC7B,gBAAAyD,QAAA,cAACI,gBAAAA;IAAe5D;IAAcV;IAAoBC;IAAcsE,MAAMrE;MACtE,gBAAAgE,QAAA,cAACM,OAAAA,MACEtD,WACC,gBAAAgD,QAAA,cAACO,KAAKL,MAAI;IACRM,OAAOxD;IACPyD,QAAQ,CAACC,UAAU;IACnBC,QAAQ7E,WAAWoB,SAAY6B;IAC/BjD,UAAU,CAAC,CAACA;KAEX,CAAC,EAAE0E,MAAK,MACP,gBAAAR,QAAA,cAACM,OAAAA;IAAIM,MAAK;IAAOC,WAAU;KACxBL,OAAOlD,IAAI,CAACwD,SACX,gBAAAd,QAAA,cAACM,OAAAA;IAAIT,KAAKiB,KAAKnC;KACb,gBAAAqB,QAAA,cAACO,KAAKQ,MAAI;IACRH,MAAK;IACLE;IACAE,YAAW;IACXC,iBAAexE,aAAaqE,KAAKnC;KAEjC,gBAAAqB,QAAA,cAACM,OAAAA;IAAIO,WAAU;KACb,gBAAAb,QAAA,cAACO,KAAKW,gBAAc;IAACC,UAAU,CAAC,CAACrF;MACjC,gBAAAkE,QAAA,cAACO,KAAKa,WAAS;IAACC,SAAS,MAAMjC,YAAY0B,KAAKnC,EAAE;IAAGqC,YAAW;KAE9D,gBAAAhB,QAAA,cAACsB,KAAAA;IAAIC,SAAST,KAAKtD;KAA4BsD,KAAKlC,SAAS,QAAA,CAAA,GAE/D,gBAAAoB,QAAA,cAACwB,aAAAA;IACCC,UAAAA;IACAC,SAAQ;IACR3F,OAAOK,EAAEK,aAAaqE,KAAKnC,KAAK,mBAAmB,gBAAgB;MAAEgD,IAAIC;IAAe,CAAA;IACxFC,MAAMpF,aAAaqE,KAAKnC,KAAK,4BAA4B;IACzD0C,SAAS,MAAMjC,YAAY0B,KAAKnC,EAAE;OAGrClC,aAAaqE,KAAKnC,MACjB,gBAAAqB,QAAA,cAACM,OAAAA;IAAIO,WAAU;KACb,gBAAAb,QAAA,cAACC,OAAM6B,OAAK;IAACd,YAAW;KAAW5E,EAAE,qBAAA,CAAA,GACrC,gBAAA4D,QAAA,cAACM,OAAAA;IAAIO,WAAU;KACb,gBAAAb,QAAA,cAACC,OAAM8B,WAAS;IACdZ,UAAU,CAAC,CAACrF;IACZkG,aAAa5F,EAAE,iCAAA;IACf6F,KAAKxF,aAAaqE,KAAKnC,KAAK7B,WAAWI;IACvCwC,OAAOoB,KAAKlC;IACZsD,UAAU5C,kBAAkBwB,KAAKnC,EAAE;IACnCwD,WAAWxC;IACXqB,YAAW;MAEb,gBAAAhB,QAAA,cAACoC,WAAAA;IAAUjB,UAAU,CAAC,CAACrF;IAAU4D,OAAOoB,KAAKtD;IAAO0E,UAAUpC,kBAAkBgB,KAAKnC,EAAE;MACvF,gBAAAqB,QAAA,cAACwB,aAAAA;IACCL,UAAU,CAAC,CAACrF;IACZ+F,MAAK;IACLJ,UAAAA;IACA1F,OAAOK,EAAE,6BAAA;IACTiF,SAAS,MAAMxC,aAAaiC,KAAKnC,EAAE;WAQjD,gBAAAqB,QAAA,cAACwB,aAAAA;IACCE,SAAQ;IACRG,MAAK;IACL9F,OAAOK,EAAE,0BAAA;IACTiF,SAAShD;IACT8C,UAAU,CAAC,CAACrF;IACZkF,YAAW;;AAS7B;;;ACjMA,OAAOqB,WAASC,eAAAA,qBAAmB;AAEnC,SAASC,SAAAA,eAAkC;AAIpC,IAAMC,YAAY,CAAC,EACxBC,MACAC,UACAC,aACAC,QACAC,eACA,GAAGC,MAAAA,MAC6B;AAChC,QAAMC,eAAeC,cACnB,CAACC,UAAUJ,cAAcJ,MAAMQ,MAAMC,OAAOC,KAAK,GACjD;IAACV;IAAMI;GAAc;AAGvB,SACE,gBAAAO,QAAA,cAACC,kBAAAA;IAAyBX;IAAqB,GAAGI;KAC/C,CAAC,EAAEK,OAAAA,SAAQ,GAAE,MACZ,gBAAAC,QAAA,cAACE,QAAMC,WAAS;IACdC,YAAAA;IACAC,UAAU,CAAC,CAACf;IACZC;IACAQ,OAAOA;IACPP;IACAc,UAAUX;;AAKpB;;;ACjCA,OAAOY,WAASC,eAAAA,qBAAmB;AAEnC,SAASC,SAAAA,eAAiC;AAInC,IAAMC,gBAAgB,CAAC,EAC5BC,MACAC,UACAC,aACAC,eACAC,QACA,GAAGC,MAAAA,MAC6B;AAChC,QAAMC,eAAeC,cACnB,CAACC,UAAUL,cAAcH,MAAMQ,MAAMC,OAAOC,KAAK,GACjD;IAACV;IAAMG;GAAc;AAGvB,SACE,gBAAAQ,QAAA,cAACC,kBAAAA;IAAyBX;IAAqB,GAAGI;KAC/C,CAAC,EAAEK,OAAAA,SAAQ,GAAE,MACZ,gBAAAC,QAAA,cAACE,QAAMC,UAAQ;IACbC,MAAM;IACNC,UAAU,CAAC,CAACf;IACZC;IACAQ,OAAOA;IACPO,UAAUX;IACVF;;AAKV;;;ACjCA,OAAOc,aAAW;AAElB,SAASC,SAAAA,eAAa;AACtB,SAASC,MAAAA,WAAU;AACnB,SAASC,kBAAAA,uBAAsB;AAI/B,IAAMC,WAAW;EAAC;EAAe;EAAe;EAAe;;AAExD,IAAMC,aAAa,CAAC,EACzBC,SACAC,MACAC,UACAC,OACAC,UACAC,WACAC,UACAC,eACAC,OAAM,MAGP;AACC,QAAM,EAAEC,QAAQC,MAAK,IAAKL,UAAAA;AAG1B,QAAMM,SAAiCL,SAAAA,KAAc,CAAC;AAEtD,SACE,gBAAAM,QAAA,cAACC,QAAMC,MAAI;IAACC,mBAAmBN;KAC7B,gBAAAG,QAAA,cAACI,gBAAAA;IAAeN;IAAcR;IAAoBC;IAAcc,MAAMb;MACtE,gBAAAQ,QAAA,cAACM,OAAAA;IAAIC,WAAWC,IAAG,qBAAqBtB,SAASE,QAAQqB,SAAS,CAAA,CAAE;KACjErB,QAAQsB,IAAI,CAACC,SACZ,gBAAAX,QAAA,cAACC,QAAMW,WAAS;IACdC,KAAKF;IACLtB,MAAK;IACLyB,UAAU,CAAC,CAACxB;IACZyB,OAAOhB,OAAOY,IAAAA;IACdK,UAAU,CAACC,UAAAA;AACTtB,oBAAcN,MAAM;QAClB,GAAGU;QACH,CAACY,IAAAA,GAAOO,gBAAeD,MAAME,OAAOJ,OAAO,CAAA;MAC7C,CAAA;IACF;IACAnB;;AAMZ;;;A5BtBA,IAAAwB,gBAAA;AAKSC,IAAAA,cAAmBC,CAAAA,EAAAA,UAAuBC,YAAWC,OAAAA,UAAmBC,MAAUJ,QAAK,SAAA,MAAA;AAC9FK,QAAAA,EAAAA,EAAU,IAAMC,gBAASJ,eAAWC;QAAsCC,CAAAA,OAAAA,QAAAA,IAAAA,UAAAA,WAAAA,mBAAAA,MAAAA,EAAAA,EAAAA,KAAAA;aAAOF,MAAAA,SAAAA,WAAAA,mBAAAA,MAAAA,EAAAA,EAAAA,KAAAA,GAAAA;IAAW;IAE5F;EACAK,CAAAA;QACE,CAAA,SAAKC,UAAU,IAAAP,UAAA,CAAA,CAAA;iBACb,YAAA;AACF,QAAA,CAAA,UAAA;AAEA;;AAAmG,UAAA,eAAA,SAAA,MAAA,EAAA,UAAA,CAAA,UAAA,WAAA,MAAA,OAAA,GAAA;MAEnG,MAAA;IACA,CAAA;AAGA,UAAAQ,WAAaC,MAAAA,SAAAA,MAAAA,EAAAA,IAAAA;AACZ,eAAAD,QAAA;AAACD,WAAAA,MAAAA,eAAAA;KAAS;IAEb;EACAH,CAAAA;QACEM,CAAAA,iBAAmBF,kBAAcG,IAAWC,UAAKC;AACnD,EAAAT,WAAG,MAAA;AAACI,uBAAAA,QAAAA,KAAAA,CAAAA,WAAAA,MAAAA,YAAAA,MAAAA,MAAAA,OAAAA,eAAAA,CAAAA;;IAAgC;IAEpC,OAAA;EACA,CAAA;AACiG,QAAA,CAAA,EAAA,YAAA,GAAA,cAAA,IAAAR,UAAA;IAEjG,aAAiBc,gBACR,OAAA,MAAA;;mBAGAA,SAAQ,OAAA;aACTC,GAAAA,CAAAA,WAA2B,gBAAAC,QAAEC,cAAoBC,aAAOC;;eAEtDC,YAAU,OAASH,CAAAA,WAAMA,WAAOC,QAAA,WAAA,IAAA,EAAA,IAAA,CAAAD,YAAA;QAClC,OAAAA;;MAGH,EAAA;;sBAGYT,GAAAA,CAAAA,WACeK,gBAAAA,QAAAA,cAAYF,aACzBU;;eAGT,QAAA,IAAA,CAAA,WAAAT,MAAA,YAAA,MAAA,CAAA,EAAA,OAAA,CAAA,aAAA,YAAA,IAAA,EAAA,IAAA,CAAA,cAAA;;MAGL,EAAA;;oBAGGG,GACEO,CAAAA,WACIC,gBAAAA,QAAAA,cAAuBC,aAAUF;;eAES,kBACxC,kBAAAV,MAAA,UAAA,eAAA,EAAA,GAAA,EAAA,KAAA,CAAA,GAAA,MAAA,EAAA,KAAA,SAAA,EAAA,cAAA,EAAA,KAAA,SAAA,CAAA,CAAA,EAAA,IAAA,CAAA,OAAA;;MAI4B,EAAGb,IAAAA,CAAAA;IAE7C,CAAA;IAAC0B,CAAAA,SAAAA,GAAAA,CAAAA,WAAAA,gBAAAA,QAAAA,cAAAA,mBAAAA,MAAAA;EAAGjB,IAAAA;IAASc;IAAgB;IAG/B;EAEA,CAAA;QAEI,gBAAAI,cAAA,CAAA3B,WAAAA,OAAA,OAAA,CAAA,SAAA,KAAA,SAAA,MAAA,GAAA,CAAA,CAAA;QACA4B,sBAAgBC,cAAAA,CAAAA,WAAAA;mBAELC,CAAAA,SAAAA;YACPA,eAAOD,gBAAAA,OAAAA,MAAAA;AACT,UAAA,KAAA,gBAAAC,cAAA;AACA,eAAO;;AAAc,aAAA;QACvB,aAAAA;MAEAnB;;uBAEUoB,CAAAA,SAAYtB;UAClB,OAAIsB,qBAAW,OAAAlB,MAAA,YAAA,IAAA,IAAA,SAAA;cACb,YAAOkB,QAAAA,KAAAA,CAAAA,WAAAA,MAAAA,YAAAA,MAAAA,MAAAA,OAAAA,eAAAA;AACT,YAAA,WAAA;AACF,iBAAA;QACA;MACF;AAEAzB,aAAUN;;aAER,CAAMgC,WAAAA;AAEN,YAAIhC,OAAMiC,aAAe,OAAA,MAAA;YACvB,kBAAO,qCAAA,OAAA,MAAA;iBAAE,SAAQ,MAAA;eAAKC;UAAQ,GAAGF;UAAiBC,GAAAA;UAAK,GAAA;UACzD;QAEA;MACF;AAEF,aAAA;IAACxB,CAAAA;;IAAuBT;IAAsB,MAAA;IAGhD,MAAMmC;;yBAGOR,cAAA,CAAA,EAAA,SAAA,MAAA;oBACL,WAAA,UAAA,EAAA,KAAA,CAAA,MAAA,EAAA,SAAA,YAAA,EAAA,SAAA,MAAA,IAAA,GAAA;;;UAGA,MAAA;UACD,SAAA,4BAAA,QAAA;QACH;MAEF;IAACzB;;IAA8B,WAAA,UAAA;IAGjC;;qBAGiBkC,cAAM,CAAApC,WAAA;cACfE;kBAAgCE,MAAAA,MAAAA;mBAAOJ,mBAAAA;UAAM;UAC/C,OAAAA;QACK,CAAA;MACLE,CAAAA;;iBAAuCF,mBAAAA;QAAM;QAC/C,OAAAA;MACAqC,CAAAA;IAEF;AAACnC,WAAAA;;IAAmBkC;IAAMC;IAAO;IAGnC;;QAEE,eAAAV,cAAA,MAAA;AACAW,WAAAA;AACED,0BAAAA,MAAAA,WAAAA,CAAAA;KAAO;IAEP;;oBAC2BrC;AAAM,IAAAuC,KAAA,KAAA,kBAAA;MACnC;IACF,GAAA,EAAA,YAAA,YAAA,GAAAxC,eAAA,GAAA,KAAA,GAAA,OAAA,CAAA;AAEA,WAAA;;SAGcyC,gBAAAA,QAAAA,cAAAA,KAAAA,MAAAA;IACVC,KAAAA,MAAAA;IACAC;IACA9B,WAAQkB;IACRa;IACAC,QAAAA;IACAC,QAAM;aAAC;UAAY;MAAS;MAC5BC;IACAC;IACAV,iBAAQW;IACRC,YAAUC;;IAQd,UAAA;;;;;A6BpMF,YAAYC,aAAY;AACxB,OAAOC,WAASC,eAAAA,eAAaC,WAAAA,iBAAe;AAE5C,SAASC,OAAAA,MAAKC,OAAAA,MAAKC,OAAAA,MAAKC,QAAAA,aAAY;AACpC,SAAwBC,qBAAqB;AAC7C,SAASC,iBAAiB;AAC1B,SAASC,OAAAA,YAAW;AACpB,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,qBAAqB;AAE9B,SAASC,kBAAAA,wBAAsB;AAS/B,IAAAC,gBAAMC;qBAEIC;UAA+EC,MAAAA,OAAAA,QAAAA,UAAAA,cAAAA,MAAAA;UAAeC,eAAAA,cAAAA,CAAAA,YAAAA,cAAAA,MAAAA,OAAAA,GAAAA;MAAK;MACzG;;UAAsFA,cAAAA,cAAAA,MAAAA,cAAAA,MAAAA,MAAAA,GAAAA;MAAK;MAC3F;;WAGI,gBAAAC,QAAA,cAACC,QAAAA,UAAAA,MAAAA,WAAAA,YAAAA,gBAAAA,QAAAA,cAAAA,KAAAA,OAAAA;MAAUC;QAA6BL,gBAAAA,QAAAA,cAAAA,YAAAA;MAAcM,OAAAA,SAASC;;MAGrE,SAAA;IACF,CAAA,CAAA;EAEA;;AAEE,IAAMC,aAAWC,CAAAA,EAAQC,QAAAA,KAAAA,MAAAA;AACzB,QAAMC,KAAAA,KAAQH,YAAa,MAAII;AAC/B,QAAMC,OAAAA,KAASC,QAAQ,MAAO;gBAAEH,KAAAA,QAAAA,CAAAA,GAAAA,IAAAA,CAAAA,QAAAA,IAAAA,QAAAA,KAAAA,KAAAA,GAAAA,CAAAA,CAAAA,EAAAA,OAAAA,aAAAA;iBAASD,UAAM,OAAA;IAAK;IAACA,GAAAA;EAAQC,IAAAA;IAAK;IAClE;;QAKM,aAAeI,UAAOC,MAAKC,OAAUf,eAEzC;IAACA,MAAAA,cAAAA,KAAAA,IAAAA,KAAAA,GAAAA,CAAAA,EAAAA,KAAAA,gBAAAA;EAAK,CAAA,EAAA,KAAA,eAAAc,MAAA,UAAA,IAAA,CAAA,CAAA,CAAA,GAAA;IAGR;;QAEEE,eAAeC,cAASjB,CAAAA,OAAAA,YAAAA;AACxB,cAAMkB,IAAAA,QAAYC,EAAGC,YAAQC,YAAWV,GAAAA,eAAAA,GAAAA,IAAAA,GAAAA,QAAAA,GAAAA,CAAAA,MAAAA,EAAAA,EAAAA,CAAAA;AACxC,cAAQW,MAAAA,SAAeC,KAAKL,GAAAA,QAAAA,EAAAA,YAAY,YAAA,GAAAtB,eAAA,GAAA,IAAA,GAAA,QAAA,GAAA,CAAA,uBAAA,EAAA,EAAA,CAAA;UACtC4B,YAAWhB,GAAAA,IAASA,KAAAA,KAAAA,OAAAA,OAAAA,CAAAA;aAClBgB,WAAWD,KAACf,KAAQC,SAAO,GAAA;kBAAKe,QAAIjB,CAAAA,YAAQC;aAAqBgB,QAAIC,OAAOP,EAAAA,OAAAA;UAAW,GAAAM,KAAA,QAAAhB,OAAA,EAAA,QAAA,CAAA;UACzFgB,KAAA,OAAA,SAAA;QACF;MACG,CAAA;IAEL;EACA,GAAA,CAAA,CAAA;uBAGME,cAAA,CAAA,EAAA,MAAAjB,OAAA,GAAAE,QAAA,GAAA,EAAA,SAAA,QAAA,MAAA;AACF,QAAA,CAAA,SAAA;AAEA;IAEA;AACA,UAAMgB,eAAAA,OAAgBC,KAAAA,OAAkB,EAACC,OAASC,CAAAA,SAAAA,QAAcD,IAAM,CAAE;UAEtEL,gBAAWhB,aAASA,KAAAA,CAAAA,SAAAA,cAAAA,IAAAA,EAAAA,CAAAA,MAAAA,MAAAA;uBACP;AACb,MAAAgB,KAAA,OAAA,QAAA,CAAAhB,YAAA;AACF,QAAAgB,KAAA,QAAAhB,OAAA,EAAA,OAAAC,OAAA,IAAA,CAAA,QAAA,IAAA,GAAA,KAAA,CAAA;MAEA,CAAA;IACA;UAEEe,cAAWhB,aAAQ,OAAA,CAAA,SAAA,cAAA,IAAA,EAAA,CAAA,MAAA,MAAA;oBACZ,SAAMqB,GAAQE;kBACjB,QAAMC,MAAQF;mBACR3B,QAAQqB,aAAab;AAC3Ba,gBAAIS,QAASzB,cAAeL,IAAAA;AAC9B,gBAAAA,SAAAqB,KAAA,SAAAb,SAAA,KAAA;AACF,UAAAa,KAAA,SAAA,QAAA,OAAArB,MAAA;QACF;MAEF,CAAA;IAACK;KAAO;IAGV;;SAGmBG,gBAAAA,QAAAA,cAAAA,KAAAA,MAAAA;IACfuB,QAAAA;IACAC,eAAAA;IACAC,gBAAAA,MAAmB,YAAAb,KAAA,GAAA;sBAAC;uBAAiB;;MAAqB;QAAE,IAAAc;MAC5DC;IACAzC;IACAsB,wBAAIA;IACJoB;IACAC;qBAEA;IAOJ,UAAA;;;;;AC9GF,YAAYC,cAAc;AAC1B,YAAYC,aAAY;AACxB,YAAYC,aAAY;AACxB,OAAOC,WAAiCC,eAAAA,eAAaC,WAAAA,iBAAe;AAEpE,SAASC,OAAAA,MAAKC,OAAAA,MAAKC,OAAAA,MAAKC,QAAAA,aAAY;AACpC,SAASC,eAAe;AACxB,SAAwBC,iBAAAA,sBAAqB;AAC7C,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,OAAAA,YAAW;AACpB,SAASC,cAAAA,aAAYC,mBAAAA,wBAAuB;AAC5C,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,yBAAyB;AAClC,SAASC,iBAAAA,sBAAqB;AAE9B,SAASC,kBAAAA,wBAAsB;AAM/B,IAAAC,gBAAA;AAII,IAAMC,mBAAmBC,YAAAA,CAAAA,EAAAA,UAAAA,QAAAA,GAAAA,MAAAA,GAAAA,iBAAAA;AACzB,QAAMC,KAAAA,KAAQF,YAAa,MAAIG;AAC/B,QAAMC,OAAAA,KAASC,QAAQ,MAAO;gBAAEH,KAAAA,QAAAA,CAAAA,GAAAA,IAAAA,CAAAA,QAAAA,IAAAA,QAAAA,KAAAA,KAAAA,GAAAA,CAAAA,CAAAA,EAAAA,OAAAA,cAAAA;iBAASD,UAAM,OAAA;IAAK;IAACA,GAAAA;EAAQC,IAAAA;IAAK;IAElE;EACA,CAAA;AAGA,QAAMI,WAAWC,KAAAA,YAAQN,MAAWO,KAAAA;AAEpC,QAAMC,mBAAaJ,QAAQ,IAAA,QAAA;QACzB,OAAOK,KAAAA,QACLJ,MACAK,KAAAA;AAKJ,QAAG,aAAAN,UAAA,MAAA;AAACC,WAAAA,cAAAA,MAAAA,sBAAAA,YAAAA,CAAAA,UAAAA,MAAAA,UAAAA,KAAAA,CAAAA,GAAAA,YAAAA,CAAAA,WAAAA,OAAAA,WAAAA,KAAAA,eAAAA,MAAAA,CAAAA,CAAAA,CAAAA,GAAAA,sBAAAA;KAAK;IAET;EACA,CAAA;QAYIM,eAAeC,cAASP,CAAAA,OAAAA,YAAAA;AACxB,IAAAM,WAAME,IAAAA,QAAUH,EAAAA,YAAOI,YAAeC,GAAAA,eAAkBC,GAAIC,IAAAA,GAAKC,QAAAA,GAAAA,CAAAA,MAAUb,EAAAA,EAAAA,CAAAA;AAC3E,IAAAM,WAAMQ,MAAAA,SAAYN,KAAWA,GAAAA,QAAQV,EAAAA,YAA0BiB,YAASf,GAAMF,eAAAA,GAAAA,IAAAA,GAAAA,QAAAA,GAAAA,CAAAA,uBAAAA,EAAAA,EAAAA,CAAAA;AAC9E,UAAA,UAAcgB,uBAAAA,kBAAAA,IAAAA,MAAAA,UAAAA,KAAAA,CAAAA,CAAAA;AAEhB,UAAA,YAAA,UAAA,QAAAhB,OAAA,IAAAiB,KAAA,KAAAf,OAAAF,OAAA;AAACkB,WAAAA,GAAAA,IAAAA,SAAAA;KAAG;IAGN;EACA,CAAA;uBAGMC,cAAA,CAAA,EAAA,MAAArB,OAAA,GAAAE,QAAA,GAAA,EAAA,SAAA,QAAA,MAAA;AACF,QAAA,CAAA,SAAA;AAEA;IAEA;AACA,UAAMoB,eAAAA,OAAgBC,KAAAA,OAAkB,EAACC,OAASC,CAAAA,SAAAA,QAAcD,IAAM,CAAE;UAEtEL,gBAAWpB,aAASA,KAAAA,CAAAA,SAAAA,eAAAA,IAAAA,EAAAA,CAAAA,MAAAA,MAAAA;uBACP;AACb,MAAAoB,KAAA,OAAA,QAAA,CAAApB,YAAA;AACF,QAAAoB,KAAA,QAAApB,OAAA,EAAA,OAAAC,OAAA,IAAA,CAAA,QAAA,IAAA,GAAA,KAAA,CAAA;MAEA,CAAA;IACA;UAEEmB,cAAWpB,aAAQ,OAAA,CAAA,SAAA0B,eAAA,IAAA,EAAA,CAAA,MAAA,MAAA;oBACZ,SAAMD,GAAQE;kBACjB,QAAMC,MAAQF;mBACRG,QAAQT,aAAajB;AAC3BiB,gBAAIU,QAAS9B,eAAe6B,IAAAA;AAC9B,gBAAAA,SAAAT,KAAA,SAAAjB,SAAA,KAAA;AACF,UAAAiB,KAAA,SAAA,QAAA,OAAAS,MAAA;QACF;MAEF,CAAA;IAAC7B;KAAO;IAGN;;AAEJ,MAAA,CAAA,YAAA;AAEA,WAAA;;SAGmBG,gBAAAA,QAAAA,cAAAA,KAAAA,MAAAA;IACf4B,QAAAA;IACAC,eAAAA;IACAC,gBAAAA,MAAmB,YAAAC,KAAA,GAAA;sBAAC;uBAAiB;;MAAqB;QAAE,IAAAC;MAC5DC;IACAC;IACAhB,wBAAIA;IACJiB,gBAAAA;IACAC;qBAEA;IAAgB,UAAGC;KAA6BC,gBAAAA,QAAAA,cAAAA,KAAAA,UAAAA;wBAC9C,KAAA;IAQR,KAAA;EAEF,GAAMJ,gBAAAA,QAA+B,cAAA,KAAA,SAAA,MAAA,gBAAAK,QAAA,cAAA,KAAA,UAAA,IAAA,GAAA,QAAA,CAAA,CAAA;;sBAE3BC;UAA+EC,MAAAA,OAAAA,QAAAA,UAAAA,cAAAA,MAAAA;UAAevC,eAAAA,cAAAA,CAAAA,YAAAA,cAAAA,MAAAA,OAAAA,GAAAA;MAAK;MACzG;;UAAsFA,cAAAA,cAAAA,MAAAA,cAAAA,MAAAA,MAAAA,GAAAA;MAAK;MAC3F;;WAGI,gBAAAqC,QAAA,cAACG,QAAAA,UAAAA,MAAAA,WAAAA,YAAAA,gBAAAA,QAAAA,cAAAA,KAAAA,OAAAA;MAAUhB;QAA6Bc,gBAAAA,QAAAA,cAAAA,YAAAA;MAAcG,OAAAA,SAASC;;MAGrE,SAAA;IACF,CAAA,CAAA;EAEA;AACA;AAEA,IAAA,aAAA,eAAA;;;;;ACpIA,YAAYC,gBAAe;AAC3B,OAAOC,aAAsE;AAE7E,SAASC,cAAAA,aAAYC,mBAAAA,wBAAuB;AAC5C,SAASC,MAAAA,WAAU;AAiBnB,IAAMC,iBAAiBH,YAAiD,CAAC,EAAEI,QAAQC,OAAAA,QAAO,GAAGC,MAAAA,GAASC,iBACpG,gBAAAR,QAAA,cAACS,OAAAA;EAAK,GAAGP,iBAAgBK,OAAO;IAAEG,MAAM;IAASC,YAAY;EAA2B,CAAA;EAAIC,KAAKJ;GAC/F,gBAAAR,QAAA,cAACa,MAAAA;EAAKC,KAAKT,OAAOS;EAAKR,OAAOA;EAAOS,OAAO;EAAMC,OAAO;;AAI7DZ,eAAea,cAAc;AAMtB,IAAMC,aAAad;AAU1B,IAAMe,SAAS,CAACL,QAAAA;AACd,MAAcM,wBAAaN,GAAAA,GAAM;AAC/B,WAAOK,OAAOL,IAAIO,IAAI;EACxB;AACA,MAAcC,qBAAUR,GAAAA,GAAM;AAC5B,WAAOK,OAAOL,IAAIS,EAAC,CAAA;EACrB;AACA,MAAcC,4BAAiBV,GAAAA,GAAM;AACnC,WAAOK,OAAOL,IAAIO,IAAI;EACxB;AACA,SAAOP;AACT;AAOA,IAAMW,gBAAgB,CAACX,QAAAA;AACrB,MAAI,CAAWY,mBAAQZ,GAAAA,GAAM;AAC3B,WAAOA;EACT;AACA,QAAMa,WAAWb,IAAIc,MAAMC,OAAO,CAACC,MAAM,CAAWC,8BAAmBD,CAAAA,CAAAA;AACvE,SAAOH,SAASK,WAAW,IAAIL,SAAS,CAAA,IAAKb;AAC/C;AAUA,IAAMD,OAAO,CAAC,EAAEC,KAAKR,OAAAA,QAAOS,OAAOC,MAAK,MAAa;AACnD,QAAMiB,QAAQd,OAAOM,cAAcX,GAAAA,CAAAA;AAInC,MAAcoB,yBAAcD,KAAAA,KAAUE,cAAc7B,MAAAA,GAAQ;AAC1D,UAAM8B,aAAarB,UAAU,OAAOC,QAAQA,QAAQ;AACpD,WACE,gBAAAhB,QAAA,cAAAA,QAAA,UAAA,MACGe,UAAU,QAAQ,gBAAAf,QAAA,cAACqC,KAAAA;MAAItB;MAAcT,OAAO;MAAMU;MAAcsB,MAAK;QACrEL,MAAMM,mBAAmBC,IAAI,CAACC,SAC7B,gBAAAzC,QAAA,cAACa,MAAAA;MACC6B,KAAKC,OAAOF,KAAKG,IAAI;MACrB9B,KAAK2B,KAAKI;MACVvC,OAAQA,OAAkCqC,OAAOF,KAAKG,IAAI,CAAA;MAC1D7B,OAAO4B,OAAOF,KAAKG,IAAI;MACvB5B,OAAOoB;;EAKjB;AAGA,MAAcU,uBAAYb,KAAAA,KAAUc,MAAMC,QAAQ1C,MAAAA,GAAQ;AACxD,UAAM2C,WAAWhB,MAAMiB,KAAK,CAAA,GAAIL;AAChC,WACE,gBAAA7C,QAAA,cAAAA,QAAA,UAAA,MACGe,UAAU,QAAQ,gBAAAf,QAAA,cAACqC,KAAAA;MAAItB;MAAcT,OAAO,SAASA,OAAM0B,MAAM;MAAKhB;MAAcsB,MAAK;QACzFhC,OAAMkC,IAAI,CAACW,MAAMC,UAChB,gBAAApD,QAAA,cAACa,MAAAA;MACC6B,KAAKU;MACLtC,KAAKmC,YAAsBI;MAC3B/C,OAAO6C;MACPpC,OAAO,IAAIqC,KAAAA;MACXpC,OAAOA,QAAQ;;EAKzB;AAGA,SAAO,gBAAAhB,QAAA,cAACqC,KAAAA;IAAItB,OAAOA,SAAS;IAAIT,OAAOgD,WAAWhD,MAAAA;IAAQU;IAAcsB,MAAK;;AAC/E;AASA,IAAMD,MAAM,CAAC,EAAEtB,OAAOT,OAAAA,QAAOU,MAAK,MAChC,gBAAAhB,QAAA,cAACS,OAAAA;EAAIC,MAAK;EAAM6C,WAAWpD,IAAG,gCAAA;EAAmCqD,OAAO;IAAEC,oBAAoB,IAAIzC,QAAQ;EAAG;GAC3G,gBAAAhB,QAAA,cAACS,OAAAA;EAAIC,MAAK;EAAO6C,WAAU;GACxBxC,KAAAA,GAEH,gBAAAf,QAAA,cAACS,OAAAA;EAAIC,MAAK;EAAO6C,WAAWpD,IAAG,gCAAA;GAC5BG,MAAAA,CAAAA;AAKP,IAAM6B,gBAAgB,CAAC7B,WACrB,OAAOA,WAAU,YAAYA,WAAU,QAAQ,CAACyC,MAAMC,QAAQ1C,MAAAA;AAMhE,IAAMgD,aAAa,CAAChD,WAAAA;AAClB,MAAIA,WAAUoD,QAAW;AACvB,WAAO;EACT;AAEA,MAAIpD,WAAU,MAAM;AAClB,WAAO,gBAAAN,QAAA,cAAC2D,QAAAA;MAAKJ,WAAU;OAAmB,MAAA;EAC5C;AAEA,UAAQ,OAAOjD,QAAAA;IACb,KAAK;AAEH,aAAO,gBAAAN,QAAA,cAAC2D,QAAAA;QAAKJ,WAAU;SAAkBK,KAAKC,UAAUvD,MAAAA,CAAAA;IAC1D,KAAK;IACL,KAAK;AACH,aAAO,gBAAAN,QAAA,cAAC2D,QAAAA;QAAKJ,WAAU;SAAmBZ,OAAOrC,MAAAA,CAAAA;IACnD,KAAK;AACH,aAAO,gBAAAN,QAAA,cAAC2D,QAAAA;QAAKJ,WAAU;SAAoBZ,OAAOrC,MAAAA,CAAAA;IACpD;AAGE,UAAI;AACF,eAAOsD,KAAKC,UAAUvD,MAAAA;MACxB,QAAQ;AACN,eAAOqC,OAAOrC,MAAAA;MAChB;EACJ;AACF;;;ACzLA,OAAOwD,aAAuC;AAE9C,SAAqBC,cAAAA,aAAkCC,qBAAAA,oBAAmBC,kBAAAA,wBAAsB;AAChG,SAASC,cAAAA,aAAYC,mBAAAA,wBAAuB;AAC5C,SAASC,MAAAA,WAAU;AAEnB,SAASC,kBAAAA,wBAAsB;;;ACN/B,YAAYC,gBAAe;AAC3B,YAAYC,aAAY;AACxB,OAAOC,WAASC,eAAAA,eAAaC,WAAAA,iBAAe;AAE5C,SAASC,iBAAAA,sBAA0C;AACnD,SAASC,SAAAA,SAAOC,UAAAA,eAAc;;;ACL9B,OAAOC,aAAuC;AAE9C,SAASC,SAAAA,SAAyCC,mBAAmBC,kBAAAA,wBAAsB;AAC3F,SAASC,MAAAA,WAAU;AAEnB,SAASC,kBAAAA,wBAAsB;AAE/B,IAAMC,sBAAsB;AAC5B,IAAMC,qBAAqB;AAQpB,IAAMC,gBAAgB,CAAC,EAAEC,YAAYC,SAAQ,MAAsB;AACxE,SACE,gBAAAV,QAAA,cAACW,OAAAA;IAAIC,WAAWR,IAAG,oEAAoEK,UAAAA;KAAcC,QAAAA;AAEzG;AAEAF,cAAcK,cAAcP;AAWrB,IAAMQ,eAAe,CAAC,EAAEC,OAAOC,cAAc,IAAIN,SAAQ,MAAqB;AACnF,QAAM,EAAEO,EAAC,IAAKd,iBAAeE,gBAAAA;AAE7B,SACE,gBAAAL,QAAA,cAACC,QAAMiB,MAAI,MACT,gBAAAlB,QAAA,cAACQ,eAAAA;IAAcC,YAAW;KACxB,gBAAAT,QAAA,cAACC,QAAMkB,OAAK;IAACV,YAAW;KACrBP,kBAAkBa,OAAOE,CAAAA,CAAAA,GAE5B,gBAAAjB,QAAA,cAACC,QAAMmB,0BAAwB,MAC7B,gBAAApB,QAAA,cAACC,QAAMoB,aAAW;IAACZ,YAAW;KAC3BP,kBAAkBc,aAAaC,CAAAA,CAAAA,CAAAA,GAGpC,gBAAAjB,QAAA,cAACW,OAAAA;IAAIC,WAAU;KAAiBF,QAAAA,CAAAA,CAAAA;AAIxC;AAEAI,aAAaD,cAAcN;;;ADWpB,IAAMe,mBAAmB,CAAgC,EAC9DC,QACAC,QACAC,iBACAC,UACAC,UACAC,SACAC,MACAC,aAAa,GAAE,MACU;AACzB,QAAMC,aAAaC,UAAQ,MAAA;AACzB,UAAMC,QAAQC,kBAAkBX,OAAOY,GAAG;AAC1C,QAAI,CAACN,MAAM;AACT,aAAOI;IACT;AACA,UAAMG,OAAO,CAACC,SAAAA;AACZ,YAAMC,MAAMT,KAAKU,QAAQF,IAAAA;AACzB,aAAOC,QAAQ,KAAKE,OAAOC,oBAAoBH;IACjD;AACA,WAAO;SAAIL;MAAOJ,KAAK,CAAC,EAAEQ,MAAMK,EAAC,GAAI,EAAEL,MAAMM,EAAC,MAAOP,KAAKM,EAAEE,SAAQ,CAAA,IAAMR,KAAKO,EAAEC,SAAQ,CAAA,CAAA;EAC3F,GAAG;IAACrB;IAAQM;GAAK;AAEjB,QAAMgB,eAAeC,cACnB,CAACT,MAAcU,WAAAA;AACbtB,sBAAkB;MAAE,GAAGD;MAAQ,CAACa,IAAAA,GAAOU;IAAM,CAAA;EAC/C,GACA;IAACvB;IAAQC;GAAgB;AAG3B,SACE,gBAAAuB,QAAA,cAAAA,QAAA,UAAA,MACGjB,WAAWkB,IAAI,CAACC,aAAAA;AACf,UAAMb,OAAOa,SAASb,KAAKO,SAAQ;AACnC,UAAMO,OAAOrB,aAAa,GAAGA,UAAAA,IAAcO,IAAAA,KAASA;AACpD,QAAIT,WAAW,CAACA,QAAQuB,MAAM3B,MAAAA,GAAS;AACrC,aAAO;IACT;AAEA,UAAM4B,QAAQzB,WAAWU,IAAAA;AAIzB,WACE,gBAAAW,QAAA,cAACK,mBAAAA;MACCC,KAAKjB;MACLc;MACAD;MACAH,OAAOvB,OAAOa,IAAAA;MACdkB,UAAU,CAACR,WAAUF,aAAaR,MAAMU,MAAAA;MACxCrB;MACA8B,aAAa,OAAOJ,UAAU,aAAaA,QAAQK;MACnDC,gBAAgB,OAAON,UAAU,WAAWA,QAAQK;MACpD7B;MACAC;;EAGN,CAAA,CAAA;AAGN;AAEAP,iBAAiBqC,cAAc;AAkB/B,IAAMN,oBAAoB,CAAC,EACzBH,UACAC,MACAJ,OAAAA,QACAQ,UACA7B,UACA8B,aACAE,gBACA9B,SACAC,KAAI,MACmB;AACvB,QAAM,EAAE+B,KAAI,IAAKV;AACjB,QAAMb,OAAOa,SAASb,KAAKO,SAAQ;AACnC,QAAMiB,QAAQC,eAAgCC,4BAAiB,EAAEH,IAAAA,KAAgBI,mBAAW3B,IAAAA;AAC5F,QAAM4B,cAAcH,eAAgCI,kCAAuB,EAAEN,IAAAA;AAG7E,MAAIJ,aAAa;AACf,UAAMW,cAAcX;AACpB,WACE,gBAAAR,QAAA,cAACoB,cAAAA;MAAaP;MAAcI;OAC1B,gBAAAjB,QAAA,cAACmB,aAAAA;MAAYpB,OAAOA;MAAOQ;MAAoB7B;;EAGrD;AAEA,QAAM2C,YAAYC,gBAAgBV,IAAAA;AAElC,UAAQS,WAAAA;IACN,KAAK;AACH,aACE,gBAAArB,QAAA,cAAC1B,kBAAAA;QACCC,QAAQ;UAAEY,KAAKyB;QAAK;QACpBpC,QAAQuB,UAAS,CAAC;QAClBtB,iBAAiB8B;QACjB7B;QACAC,UAAU+B;QACV9B;QACAC;QACAC,YAAYqB;;IAIlB,KAAK;AACH,aACE,gBAAAH,QAAA,cAACoB,cAAAA;QAAaP;QAAcI;SAC1B,gBAAAjB,QAAA,cAACuB,QAAMC,QAAM;QAACC,UAAU/C;QAAUgD,SAAS,CAAC,CAAC3B;QAAO4B,iBAAiB,CAACD,YAAYnB,SAAS,CAAC,CAACmB,OAAAA;;IAInG,KAAK,UAAU;AACb,YAAME,UAAUC,wBAAwBjB,IAAAA,KAAS,CAAA;AACjD,aACE,gBAAAZ,QAAA,cAACoB,cAAAA;QAAaP;QAAcI;SAC1B,gBAAAjB,QAAA,cAAC8B,QAAOC,MAAI;QACVN,UAAU/C;QACVqB,OAAOA,UAAS,OAAO,KAAKiC,WAAWC,OAAOlC,MAAAA;QAC9CmC,eAAe,CAACC,aAAAA;AACd,gBAAMC,UAAUR,QAAQS,KAAK,CAACC,WAAWN,WAAWC,OAAOK,OAAOvC,KAAK,MAAMoC,QAAAA;AAC7E5B,mBAAS6B,SAASrC,SAASoC,QAAAA;QAC7B;SAEA,gBAAAnC,QAAA,cAAC8B,QAAOS,eAAa;QAACd,UAAU/C;UAChC,gBAAAsB,QAAA,cAAC8B,QAAOU,QAAM,MACZ,gBAAAxC,QAAA,cAAC8B,QAAOW,SAAO,MACb,gBAAAzC,QAAA,cAAC8B,QAAOY,UAAQ,MACbd,QAAQ3B,IAAI,CAACqC,WACZ,gBAAAtC,QAAA,cAAC8B,QAAOa,QAAM;QAACrC,KAAK0B,WAAWC,OAAOK,OAAOvC,KAAK;QAAGA,OAAOiC,WAAWC,OAAOK,OAAOvC,KAAK;SACvFuC,OAAOM,SAASZ,WAAWC,OAAOK,OAAOvC,KAAK,CAAA,CAAA,CAAA,GAIrD,gBAAAC,QAAA,cAAC8B,QAAOe,OAAK,IAAA,CAAA,CAAA,CAAA,CAAA;IAMzB;IAEA,KAAK;AACH,aACE,gBAAA7C,QAAA,cAACoB,cAAAA;QAAaP;QAAcI;SAC1B,gBAAAjB,QAAA,cAACuB,QAAMuB,WAAS;QAACrB,UAAU/C;QAAUqB,OAAOA,UAAS;QAAIQ,UAAU,CAACwC,UAAUxC,SAASwC,MAAMC,OAAOjD,KAAK;;IAI/G,KAAK;AACH,aACE,gBAAAC,QAAA,cAACoB,cAAAA;QAAaP;QAAcI;SAC1B,gBAAAjB,QAAA,cAACuB,QAAMuB,WAAS;QACdrB,UAAU/C;QACVkC,MAAK;QACLb,OAAOA,UAAS;QAChBQ,UAAU,CAACwC,UAAAA;AACT,cAAIA,MAAMC,OAAOjD,UAAU,IAAI;AAC7BQ,qBAASE,MAAAA;AACT;UACF;AACA,gBAAMwC,SAASzD,OAAOuD,MAAMC,OAAOjD,KAAK;AACxCQ,mBAASf,OAAO0D,MAAMD,MAAAA,IAAUxC,SAAYwC,MAAAA;QAC9C;;IAKR;AACE,aAAO;EACX;AACF;;;ADjPA,IAAME,qBAAqB;AAC3B,IAAMC,yBAAyB;AAC/B,IAAMC,wBAAwB;AAQ9B,IAAMC,eAAe,CAAC,EAAEC,UAAUC,WAAU,MAAqB;AAC/D,SAAO,gBAAAC,QAAA,cAACC,OAAAA;IAAIC,WAAWC,IAAG,uBAAuBJ,UAAAA;KAAcD,QAAAA;AACjE;AAEAD,aAAaO,cAAcV;AAM3B,IAAMW,mBAAmBC,YAA2B,CAAC,EAAER,UAAU,GAAGS,MAAAA,GAASC,iBAAAA;AAC3E,SACE,gBAAAR,QAAA,cAACS,YAAWC,MAAI;IAAE,GAAGC,iBAAgBJ,KAAAA;IAAQK,aAAY;IAAWC,UAAAA;IAASC,MAAAA;IAAKC,KAAKP;KACrF,gBAAAR,QAAA,cAACS,YAAWO,UAAQ;IAACjB,YAAW;KAC9B,gBAAAC,QAAA,cAACC,OAAAA;IAAIC,WAAU;KAAwCJ,QAAAA,CAAAA,CAAAA;AAI/D,CAAA;AAEAO,iBAAiBD,cAAcT;AAW/B,IAAMsB,kBAAkB,CAAC,EAAEC,OAAOC,aAAarB,SAAQ,MAAwB;AAC7E,QAAM,EAAEsB,EAAC,IAAKC,iBAAeC,gBAAAA;AAC7B,SACE,gBAAAtB,QAAA,cAAAA,QAAA,UAAA,MACE,gBAAAA,QAAA,cAACuB,MAAAA;IAAGrB,WAAU;KAAiCsB,mBAAkBN,OAAOE,CAAAA,CAAAA,GACvED,eAAe,gBAAAnB,QAAA,cAACyB,KAAAA;IAAEvB,WAAU;KAA+BsB,mBAAkBL,aAAaC,CAAAA,CAAAA,GAC3F,gBAAApB,QAAA,cAACC,OAAAA;IAAIC,WAAU;KAAqCJ,QAAAA,CAAAA;AAG1D;AAEAmB,gBAAgBb,cAAcR;AAMvB,IAAM8B,WAAW;EACtBhB,MAAMb;EACNmB,UAAUX;EACVsB,SAASV;EACTW,OAAOC;EACPC,MAAMC;EACNC,UAAUC;AACZ;;;AG5EA,OAAOC,aAAW;AAElB,SAASC,UAAAA,eAAc;AAoBhB,IAAMC,oBAAoB,CAAC,EAChCC,SACAC,eAAe,UAAS,MACC;AACzB,QAAMC,aAAaF,QAAQG,IAAI,CAACC,WAAY,OAAOA,WAAW,WAAW;IAAEC,OAAOD;IAAQE,OAAOF;EAAO,IAAIA,MAAAA;AAC5G,QAAMG,aAAaN,iBAAiB;AAGpC,QAAMO,WAAWD,aAAa,cAAcE,KAAKC,OAAM,EAAGC,SAAS,EAAA,EAAIC,MAAM,CAAA,CAAA,KAAO;AAEpF,SAAO,CAAC,EAAEP,OAAAA,QAAOQ,UAAUC,SAAQ,MACjC,gBAAAjB,QAAA,cAACC,QAAOiB,MAAI;IACVC,UAAUF;IACVT,OAAOA,UAASG;IAChBS,eAAe,CAACC,SAASL,SAASN,cAAcW,SAASV,WAAWW,SAAYD,IAAAA;KAEhF,gBAAArB,QAAA,cAACC,QAAOsB,eAAa;IAACJ,UAAUF;MAChC,gBAAAjB,QAAA,cAACC,QAAOuB,QAAM,MACZ,gBAAAxB,QAAA,cAACC,QAAOwB,SAAO,MACb,gBAAAzB,QAAA,cAACC,QAAOyB,UAAQ,MACbhB,cAAc,gBAAAV,QAAA,cAACC,QAAO0B,QAAM;IAACnB,OAAOG;KAAWP,YAAAA,GAC/CC,WAAWC,IAAI,CAACC,WACf,gBAAAP,QAAA,cAACC,QAAO0B,QAAM;IAACC,KAAKrB,OAAOC;IAAOA,OAAOD,OAAOC;KAC7CD,OAAOE,SAASF,OAAOC,KAAK,CAAA,CAAA,GAInC,gBAAAR,QAAA,cAACC,QAAO4B,OAAK,IAAA,CAAA,CAAA,CAAA;AAKvB;;;ACtDA,SAASC,uBAAuB;AAChC,YAAYC,YAAW;AACvB,YAAYC,YAAW;AACvB,YAAYC,aAAY;AACxB,YAAYC,aAAY;AACxB,OAAOC,WAASC,cAAAA,aAAYC,eAAAA,eAAaC,cAAAA,aAAYC,qBAAqBC,WAAAA,WAASC,YAAAA,iBAAgB;AAEnG,SAEEC,UAAAA,SACAC,MACAC,UAAAA,SACAC,UAAAA,SACAC,OAAAA,MACAC,OACAC,UACAC,OAAAA,MAEAC,QAAAA,OACAC,YACK;AAEP,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,WAAWC,YAAAA,iBAAgB;AACpC,SAASC,cAAAA,aAAYC,SAAAA,SAAOC,SAA+BC,kBAAAA,wBAAsB;AACjF,SAASC,iBAAsC;AAC/C,SAASC,QAAAA,aAAY;AACrB,SACEC,uBACAC,iBACAC,kBACAC,0BACAC,4BACK;AACP,SAASC,MAAAA,KAAIC,kBAAAA,uBAAsB;AAEnC,SAASC,kBAAAA,wBAAsB;AAyB/B,IAAAC,gBAAA;AAsBUC,IAAAA,aAAkCC,gBAAAA,YAAS,CAAA,EAAA,YAAA,MAAA,MAAA,OAAA,UAAA,UAAA,IAAA,UAAA,cAAA,OAAA,OAAA,MAAA,gBAAA,SAAA,GAAA,iBAAA;AACjD,QAAM,eAAQC,YAAeC,eAAAA;AAE7B,QAAMC,iBAAAA,MAAkBC,YAAQ,IAAA,KAAA;QAC9B,EAAA,EAAMC,IAAAA,iBAAkBA,gBAAU;QAElC,kBAAAD,UAAA,MAAA;AACA,UAAA,aAAA,KAAA;UAIEE,SAAUC,yBAAAA,MAAAA,MAAAA,YAAAA,IAAAA,KAAAA,OAAAA,OAAAA,MAAAA;UACVC,QAAAA,IAAAA,gBAAAA;MACAC,UAAAA;MACAC;MACF,YAAA;MAEA;IACC,CAAA;AAACH,WAAAA;;IAAoBC;IAAK;IAE7BG;;sBAA0E,cAAA,MAAA,iBAAA;IAE1E;;AAC4B,QAAMC,cAAM,aAAA,KAAA,MAAA,GAAA,EAAA,KAAA,YAAA;IACpC,MAAIA;aACF,MAAOC;AACT,QAAA,KAAA,SAAA,SAAA;AACA,aAAOC;IAMTC;AAGF,WAAcC,qBAAaC,KAAOjB,MAAKkB,KAAKA,EAAI,KAAA,gBAAA,CAAAC,WAAA,YAAAA,MAAA,CAAA,GAAA,YAAA,MAAA,GAAA,sBAAA;EAEhD,CAAA,GAAMC,cAAAA,MAAYhB,MAAQ,CAAA;QACxB,QAAKiB,UAAa,IAAAJ,QAAA,KAAA,KAAA,IAAA,CAAA;oBACTJ,UAAAA,MAAAA;AACT,QAAA,CAAA,aAAA;AACA,aAAMS;IACN;AACC,UAAA,OAAA,MAAA,KAAA,CAAAA,UAAA,KAAA,YAAAA,KAAA,GAAA,SAAA,MAAA,WAAA;AAACD,WAAAA,OAAAA,KAAAA,QAAAA,QAAAA,OAAAA,IAAAA,CAAAA,IAAAA;;IAAmB;IAEvB;;qBAGME,UAAS,MAAA;iBAC2B,eAAA;MAAc,OAC9CC,SAASC,WAAMC,QAAY,IAAA,YAAA;QAAEC,OAAO;MAAQ,CAAA,IAAA,SAAA,MAAA,YAAA;QACpD,OAAA;MAEIJ,CAAAA;;iBAEGK,OAAKC;aACR,eAAA;QACAC,GAAAA,KAAQC;;QACoC,QAC1CC,KAAAA,IAAAA,KAAAA,IAAAA,EAAsBC,KACtBC,oBAAOC;UAEHD,OAAOE;QACjB,CAAA,GAAA,sBAAA,IAAA,IAAA,GAAA,gBAAA;MAEA,CAAA,EAAOR,KAAUM,eAAOE;IACvB;AAACb,WAAAA,KAAAA,KAAAA,eAAAA;KAAK;IAET;EACA,CAAA;qBAIYH,UAAAA,OAAAA;IAEV,OAAA,SAAA,WAAA,qBAAA,KAAA,MAAA,GAAA,IAAA,KAAA,MAAA;IAACG,QAAAA;EAAMf,IAAAA;IAAgBY;IAAU,KAAA,MAAA;IAGnC;;mBACgDiB,UAAAA,MAAAA,SAAAA,QAAAA,aAAAA;IAAK;IAClDd;EAAMe,CAAAA,IAAAA,QAAAA;IAAOD;IAAK;IAGrB;;QAGI,eAAIE,cAAAA,CAAAA,WAAAA;AAEJ,UAAIR,cAAUS,OAAAA;QACZ;QACAT,KAAA,MAAMT,WAAamB,GAAK;AACxB,YAAInB,UAAM,YAAA;YACRiB,OAAAA,MAAWrB,KAAKwB,CAAAA,UAAYpB,KAAAA,OAAAA,KAAAA,MAAAA,OAAAA;AAC9B,UAAA,MAAA;AACF,mBAAA,KAAA,YAAA,IAAA;MAEA;IACA;AAMF,UAAA,QAAA,SAAA,WAAA,MAAA,OAAAL,QAAA,SAAA,OAAA,KAAA,CAAA,EAAA,MAAA,KAAA,MAAA,KAAA,UAAA,OAAA,KAAA,CAAA;AAAC0B,qBAAAA,OAAAA,QAAAA;;IAAsBxB;IAAM;IAG/B;;QAGIyB,eAAWC,cAAAA,CAAAA,YAAAA;AAEb,IAAAC,WAAA,CAAA,UAAA,QAAA,EAAA,YAAA,YAAA,GAAAhD,eAAA,GAAA,KAAA,GAAA,QAAA,GAAA,CAAA,aAAA,EAAA,EAAA,CAAA;AAAC8C,eAAAA,OAAAA;;IAAmB;IAGtB;;SAGuB,gBAAAG,QAACC,cAAAA,OAClB;IAAcC,WAAQC,IAAA,UAAA;uBAAkB,CAAA,YAAA,gBAAAH,QAAA,cAAA,QAAA,MAAA;;IAM/BI,YAAQC;KAAoBC,gBAAAA,QAAAA,cAAAA,QAAAA,OAAAA,MAAAA,EAAAA,2BAAAA,CAAAA,CAAAA,GAAAA,gBAAAA,QAAAA,cAAAA,KAAAA,MAAAA;IAAYC,QAAAA;IAAoBC,QAAIA;IAAIC;;IAG7DC,iBAAS;KAAiBC,gBAAAA,QAAAA,cAAAA,KAAAA,UAAAA,IAAAA,GAAAA,gBAAAA,QAAAA,cAAAA,gBAAAA;2BAC1C;IACE1D,SAAMA;MACAQ,gBAAAA,QAAAA,cAAAA,WAAAA;IACNF;IACA0C;IACAW;IACAf;;IAMV,UAAA;EAIF,CAAA,CAAMgB,CAAAA;;IAEJ,YAAM7D,CAAAA,EAAAA,MAAiB8D,MAAKC,UAAW,UAAU,cAAA,OAAA,SAAA,MAAA;AACjD,QAAM,eAAQ7D,YAAeC,eAAAA;AAE7B,QAAA,iBAAA2D,MAAA,YAAA,IAA4C,KAAA;AAC5C,QAAM,EAACE,EAAAA,IAAAA,iBAAgBC,gBAAUxD;QAG/B,CAAA,YAAMH,IAAaL,UAAKK,IAAAA;QAExB,kBAAAD,UAAA,MAAA;AACA,UAAA,aAAA,KAAA;UAIEE,SAAUC,yBAAAA,MAAAA,MAAAA,YAAAA,IAAAA,KAAAA,OAAAA,OAAAA,MAAAA;UACVC,QAAAA,IAAAA,gBAAAA;MACAC,UAAAA;MACAC;MACF,YAAA;MAEA;IACC,CAAA;AAACH,WAAAA;;IAAoBC;IAAK;IAE7B;EAEA,CAAA;QACEsC,CAAAA,eAAWE,gBAAAA,IAAAA,UAAAA;QACX,YAAc7C,cAAAA,MAAgB8D;AAC9BC,IAAAA,WAAAA,CAAAA,UAAiBC,QAAQ,EAAA,YAAA,YAAA,GAAArE,eAAA,GAAA,KAAA,GAAA,QAAA,GAAA,CAAA,aAAA,EAAA,EAAA,CAAA;AACxB,UAAA,QAAA,gBAAA,sBAAA;AAACK,qBAAAA,MAAAA,EAAAA;;IAA0B;IAE9B;;AAGE,QACA,oBAAAiE,cAAA,CAAA,UAAA;AAACpB,qBAAAA,CAAAA,wBAAAA,wBAAAA,MAAAA,KAAAA,SAAAA,MAAAA,EAAAA;KAAS;IAGZ;;QAGI,eAAgBqB,cAAAA,CAAAA,YAAe;eAC7BH,CAAAA,UAAAA,QAAiBrD,EAAAA,YAAAA,YAAAA,GAAAA,eAAAA,GAAAA,KAAAA,GAAAA,QAAAA,GAAAA,CAAAA,aAAAA,EAAAA,EAAAA,CAAAA;AACnB,QAAA,YAAA,eAAA;AAEA+B,uBAAWC,MAAAA;IAEb;AAACwB,eAAAA,OAAAA;;IAAyBrB;IAAS;IAGrC;;QAGIsB,aAAW9D,cAAOA,CAAAA,WAAAA,YAAAA;eAChB,CAAA,UAAA,QAAA,EAAA,YAAA,YAAA,GAAAV,eAAA,GAAA,KAAA,GAAA,QAAA,GAAA,CAAA,aAAsF,EAAA,EAAA,CAAA;SACtF,OAAM+B,MAAAA,CAAAA,UAAS;YAA2B,SAAA;QAC1C,GAAO0C,MAAAA,WAAgBC;MACvB3C;AACArB,YAAKiE,CAAAA,KAAAA,IAAW5C,OAAM,OAAGA,WAAAA,CAAAA;AAC3B,aAAA,OAAA,SAAA,GAAA,KAAA;AAEF,MAAArB,MAAA,WAAA,SAAA;IAACA,CAAAA;;IAAe;IAGlB;EAEA,CAAA;QAEI0D,cAAAA,cAAiBrD,MAAAA,iBAAAA,MAAAA,GAAAA,CAAAA,CAAAA;QACjBV,aAAAA,cAAgBuE,CAAAA,YAAoB7B;AAEtC,qBAAA,MAAA;AAAC1C,oBAAAA,oBAAAA,OAAAA;KAAgB;IAGnB;;QAGIA,aAAAA,cAAgBwE,CAAAA,aAAoBC;AAEtC,qBAAA,MAAA;AAACzE,oBAAAA,oBAAAA,QAAAA;KAAgB;IAGf;;AAEJ,MAAA,CAAA,cAAA;AAEA,WAAA;;SAGqB,gBAAA4C,QAAM8B,cAAWC,MAAA,MAAA;IAClCC,OAAO,aAAWZ,WAAQ;IAC1Ba,QAAQhC,WAAAA,KAAWnC,WAAYoE;IAC/BjC,OAAAA,CAAAA,UAAUA,MAAAA;IAER,QAAEkC,WAAe,SAAA;;eAE4B,OAAA,MAAA,gBAAAnC,QAAA,cAC3CA,QAAA,UAACoC,MAAAA,eAAAA,gBAAAA,QAAAA,cAAAA,MAAAA;IAAIC,WAAK;OAAOC,kBAAU,CAAA,GAAA,gBAAAtC,QAAA,cAAA,OAAA;IACxBlB,MAAAA;IACC,WAAMyD;aACN,IAAA,CAAA,UAAA;UAEIC,SAAWC,MAAE,YAAA;WACPrB,gBAAAA,QAAAA,cAAAA,MAAAA,MAAAA;MACNsB,KAAAA,MAAAA;MACAC,MAAAA;;MAEKL,iBAAU,kBAAA,MAAA;OACb,gBAAAtC,QAAA,cAAC+B,OAAKa;MAAeC,WAAU5C;+BAC/B,cAAA8B,MAACA,gBAAc;MAACW,UAAAA,YAAsB;QAA+BI,gBAAAA,QAAAA,cAAkB1B,MAAAA,WAAAA;MACpFA,YAAU,UAAA;MAGXV,SAAS6B,MAAAA,kBAAS,KAAA;aAClBQ,IAAAA,GAAsB,gBAAA/C,QAAA,cAAsB+B,MAAA,gBAAA;MAC5CiB,OAAMT,EAAAA,SAAS,qBAAA,kBAA4B;MAC3CU,eAAU,SAAA,sBAAA;MACVJ,MAAAA,SAAU5C,4BAAwB7C;MAClC8F,UAAS;MAEV,UAACjD,YAAAA,CAAAA,UACA,gBAAA,UAAA,EAAA,UAAA;MAEIS,SAAS,MAAA,SAAA,WAAA,MAAA,IAAA,IAAA,WAAA,MAAA,EAAA;QACTuC,CAAAA,YAAU,gBAAAjD,QAAA,cAAAA,QAAA,UAAA,MAAA,gBAAAA,QAAA,cAAA+B,MAAA,kBAAA;MACVc,OAAAA,EAAAA,oBAAsB7F;MACtBkG,UAAS;MACTH,UAAAA,YAAY,kBAAA,aAAA,WAAA,OAAA,UAAA;kCAEd,MAAA,EAAChB;MACCoB,eAAAA;QACQ,gBAAAnD,QAAA,cAAA+B,MAAA,gBAAA;MACRrB,UAAS;eAA6B0C;MAAe,OAAA,EAAA,uBAAA;QACrDJ,IAAM1B;MACN4B,CAAAA;MACAH,MAAAA,kBAAY,MAAA,KAAA,4BAAA;eAKnBzB,MAAAA,kBAA0B,KAAKrB;MACzBqC,eAAU;4BACb,MAAA,MAAA,CAACe,YAAAA,gBAAAA,QAAAA,cAAAA,OAAAA;MACCpD,WAAUA;OACA1C,gBAAAA,QAAAA,cAAAA,aAAAA;MACVmE,UAAAA,YAAYtE;MACZgE;MACAkC,YAAQC;;MAQpBtD,QAAAA;IACKqC,CAAAA,CAAAA,CAAAA;oBACH,CAAA,iBAACkB,gBAAAA,QAAAA,cAAAA,OAAAA;IACCR,WAAK;KACI,gBAAAhD,QAAA,cAAAwD,aAAA;IACTN,MAAAA;IACAL,OAAAA,EAAAA,2BAAkC/D;IAClC4D,SAAAA;;IAQhB,YAAA;EAEMe,CAAAA,CAAAA,CAAAA,CAAAA;;mBAKIC,CAAAA,EAAAA,OAAAA,KAAerC,OAAAA;UAElBsC,EAAAA,MAAAA,UAAAA,OAAAA,UAAAA,cAAAA,MAAAA;UAAc,eAAAtC,cAAA,CAAA,UAAA,cAAA,MAAA,MAAA,GAAA,GAAA;MAGjB;;WAE+CX,gBAAAA,QAAAA,cAAAA,QAAAA,MAAAA,MAAAA,gBAAAA,QAAAA,cAAAA,gBAAAA;;MAChCkD;QAAiCrE,gBAAAA,QAAAA,cAAAA,WAAAA;MAAOD,cAAMA,SAAAA;MAAMuE;;MAGrE,UAAA;IACF,CAAA,CAAA;;;",
6
+ "names": ["React", "useCallback", "useEffect", "useMemo", "useState", "Obj", "Type", "Format", "FormatEnums", "formatToType", "log", "useAsyncEffect", "useTranslation", "formatToAdditionalPropertyAttributes", "getFormatSchema", "translationKey", "Format", "GeoLocation", "TypeEnum", "parseValue", "type", "format", "value", "undefined", "parseScalar", "Boolean", "lowercaseValue", "toLowerCase", "Number", "cleaned", "replace", "num", "isNaN", "String", "Ref", "TypeFormat", "Percent", "Currency", "Markdown", "Error", "DateTime", "Date", "Time", "Timestamp", "date", "getTime", "GeoPoint", "parts", "split", "length", "lat", "parseFloat", "long", "toGeoPoint", "latitude", "longitude", "cellClassesForFieldType", "Duration", "JSON", "DID", "pathNotUniqueError", "path", "message", "SchemaAST", "getAnnotation", "isLiteralUnion", "detectFieldType", "ast", "isTypeLiteral", "_tag", "undefined", "getSelectOptionsFromAst", "types", "flatMap", "literalNode", "value", "literal", "title", "TitleAnnotationId", "label", "charAt", "toUpperCase", "slice", "String", "format", "formatDate", "Format", "GeoLocation", "TypeEnum", "formatForDisplay", "type", "value", "locale", "undefined", "formatScalar", "Boolean", "toLocaleString", "toUpperCase", "Number", "String", "Ref", "TypeFormat", "Percent", "Currency", "style", "currency", "minimumFractionDigits", "maximumFractionDigits", "Date", "error", "Time", "DateTime", "GeoPoint", "Array", "isArray", "length", "every", "isFinite", "latitude", "longitude", "fromGeoPoint", "formatForEditing", "date", "toISOString", "split", "Option", "SchemaAST", "Annotation", "getProperties", "getFormProperties", "ast", "hidden", "Set", "getPropertySignatures", "filter", "prop", "type", "isOptional", "isUnion", "types", "find", "t", "_tag", "FormInputAnnotation", "getFromAst", "pipe", "getOrElse", "map", "name", "has", "Ref", "ReferenceAnnotationId", "findAnnotation", "getArrayElementType", "isArrayType", "getRefProps", "ast", "elementType", "isRefType", "typename", "isArray", "undefined", "Option", "SchemaAST", "React", "useCallback", "Ref", "createJsonPath", "findNode", "getArrayElementType", "getDiscriminatedType", "isDiscriminatedUnion", "isNestedType", "IconButton", "useTranslation", "translationKey", "createContext", "Option", "Schema", "SchemaAST", "React", "useEffect", "useMemo", "useRef", "Annotation", "EchoAnnotation", "Type", "createJsonPath", "getValue", "getValue$", "IconButton", "ScrollArea", "useMergeRefs", "useTranslation", "composable", "composableProps", "withColumn", "mx", "translationKey", "useControllableState", "useCallback", "useEffect", "useMemo", "useState", "createJsonPath", "fromEffectValidationPath", "getValue", "getValue$", "log", "useDefaultValue", "validateSchema", "touched", "errors", "setErrors", "saving", "setSaving", "defaultValues", "defaultValuesProp", "values$", "setValues", "prop", "valuesProp", "defaultProp", "onChange", "setChanged", "setTouched", "validate", "values", "validatedValues", "onValidate", "flatMap", "valid", "schema", "setSchemaChanged", "schemaChanged", "onSave", "isValid", "changed", "onCancel", "error", "entries", "isTouched", "jsonPath", "undefined", "path", "value", "pathArray", "parsedValue", "newChanged", "prev", "onValuesChanged", "newValues", "Object", "length", "autoSave", "canSave", "getStatus", "onBlur", "onValueChange", "head", "Array", "isArray", "obj", "copy", "result", "message", "useCallback", "useLayoutEffect", "addEventListener", "useKeyHandler", "elRef", "form", "handleKeyDown", "event", "key", "metaKey", "canSave", "onSave", "isValid", "autoSave", "el", "current", "React", "Component", "Icon", "Input", "Tooltip", "inputTextLabel", "mx", "createContext", "useContext", "FormTooltipsContext", "useFormTooltips", "FormFieldLabel", "label", "error", "readonly", "asChild", "path", "tooltips", "useFormTooltips", "Label", "Input", "labelNode", "className", "mx", "inputTextLabel", "div", "Tooltip", "Trigger", "content", "side", "Icon", "icon", "size", "classNames", "displayName", "FormFieldWrapper", "props", "children", "layout", "jsonPath", "getStatus", "getValue", "status", "value", "str", "String", "Root", "validationValence", "p", "title", "DescriptionAndValidation", "Validation", "FormFieldErrorBoundary", "Component", "getDerivedStateFromError", "state", "undefined", "componentDidUpdate", "prevProps", "resetError", "render", "span", "join", "setState", "Option", "React", "useMemo", "createJsonPath", "Match", "Option", "Schema", "SchemaAST", "String", "React", "useMemo", "Format", "createJsonPath", "findNode", "getAnnotation", "getDiscriminatedType", "isArrayType", "isDiscriminatedUnion", "isLiteralUnion", "isNestedType", "useTranslation", "translationKey", "FormField", "props", "type", "name", "path", "projection", "fieldMap", "fieldProvider", "readonly", "layout", "createTypename", "createOptionLabel", "createOptionIcon", "createInitialValuePath", "createFieldMap", "db", "useType", "schemaHook", "getOptions", "onCreate", "t", "useTranslation", "translationKey", "title", "getAnnotation", "TitleAnnotationId", "description", "DescriptionAnnotationId", "examples", "ExamplesAnnotationId", "label", "useMemo", "capitalize", "placeholder", "length", "fieldState", "useFormFieldState", "displayName", "jsonPath", "createJsonPath", "fieldProps", "format", "Format", "FormatAnnotation", "getFromAst", "pipe", "annotation", "getOrUndefined", "getValue", "CustomField", "React", "component", "schema", "make", "prop", "isArrayType", "ArrayField", "Field", "getFormField", "options", "getSelectOptions", "fieldProjections", "getFieldProjections", "fieldProjection", "find", "fp", "field", "selectOptions", "SelectField", "map", "option", "selectOption", "so", "id", "globalThis", "String", "value", "toString", "refProps", "getRefProps", "isCreateTarget", "typename", "RefField", "undefined", "isNestedType", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "isTypeLiteral", "FormFieldSet", "formatField", "withReturnType", "when", "TypeFormat", "Date", "DateField", "DateTime", "GeoPoint", "GeoPointField", "Markdown", "MarkdownField", "Text", "TextAreaField", "Time", "orElse", "_tag", "TextField", "NumberField", "BooleanField", "ast", "isLiteralUnion", "types", "literal", "filter", "v", "OptionsAnnotation", "createAnnotationHelper", "FormLayoutAnnotationId", "Symbol", "for", "FormLayoutAnnotation", "DEFAULT_LAYOUT_NAME", "Option", "React", "Fragment", "useMemo", "LayoutParseError", "Error", "_tag", "message", "position", "undefined", "TAG_RE", "ATTR_RE", "parseAttrs", "raw", "attrs", "lastIndex", "match", "exec", "key", "doubleQuoted", "singleQuoted", "bare", "tokenize", "input", "tokens", "cursor", "between", "slice", "index", "trim", "length", "JSON", "stringify", "slash", "name", "attrsRaw", "selfSlash", "push", "type", "selfClosing", "trailing", "requireAttr", "tag", "value", "parseInteger", "attr", "test", "Number", "parseInt", "parseLayout", "template", "parseNode", "token", "spanRaw", "span", "kind", "cols", "children", "closing", "root", "FORM_LAYOUT_NAME", "FormLayout", "schema", "template", "name", "DEFAULT_LAYOUT_NAME", "path", "readonly", "layout", "projection", "props", "annotated", "getOrUndefined", "FormLayoutAnnotation", "get", "source", "undefined", "LayoutParseError", "Object", "keys", "join", "tree", "useMemo", "parseLayout", "properties", "map", "Map", "property", "getFormProperties", "ast", "set", "String", "React", "RenderNode", "node", "basePath", "displayName", "kind", "div", "className", "style", "gridTemplateColumns", "cols", "children", "child", "index", "Fragment", "key", "span", "gridColumn", "FormFieldErrorBoundary", "FormField", "type", "FORM_FIELDSET_NAME", "FormFieldSet", "label", "schema", "readonly", "path", "sort", "exclude", "projection", "layout", "layoutName", "DEFAULT_LAYOUT_NAME", "props", "values", "useFormValues", "properties", "useFormFieldSetProperties", "layouts", "getOrUndefined", "FormLayoutAnnotation", "get", "undefined", "React", "FormFieldLabel", "createJsonPath", "asChild", "FormLayout", "name", "map", "property", "toString", "FormFieldErrorBoundary", "key", "FormField", "type", "displayName", "useMemo", "schemaProps", "getFormProperties", "ast", "filteredProps", "fieldProjections", "getFieldProjections", "hiddenProperties", "Set", "getHiddenProperties", "visibleProps", "filter", "prop", "has", "orderedProps", "fieldProjection", "fieldPath", "String", "field", "find", "push", "projectionPaths", "remainingProps", "a", "b", "indexOf", "omitId", "schemaOrType", "schema", "Type", "isType", "getSchema", "pipe", "omit", "omitHiddenFormFields", "properties", "getPropertySignatures", "ast", "hidden", "filter", "prop", "getOrElse", "EchoAnnotation", "FormInputAnnotation", "getFromAst", "type", "map", "name", "length", "FormContextProvider", "useFormContext", "createContext", "useFormValues", "componentName", "path", "defaultValue", "stablePath", "useMemo", "join", "undefined", "jsonPath", "createJsonPath", "form", "values", "onValueChange", "value", "getValue$", "lastAppliedPathRef", "useRef", "useEffect", "current", "stringKeyword", "useFormFieldState", "Array", "isArray", "getStatus", "getValue", "onBlur", "FormRoot", "children", "onSave", "onCancel", "props", "useFormHandler", "React", "FormTooltipsContext", "Provider", "tooltips", "displayName", "FORM_VIEWPORT_NAME", "FormViewport", "composable", "forwardedRef", "ScrollArea", "Root", "composableProps", "orientation", "centered", "padding", "thin", "ref", "Viewport", "FORM_CONTENT_NAME", "FormContent", "testId", "localRef", "mergedRef", "useMergeRefs", "useKeyHandler", "div", "role", "classNames", "mx", "withColumn", "center", "data-testid", "FORM_FIELDSET_NAME", "FormFieldSet", "contextProps", "NaturalFormFieldSet", "FORM_LAYOUT_NAME", "FormLayout", "resolvedSchema", "NaturalFormLayout", "FORM_ACTIONS_NAME", "FormActions", "t", "useTranslation", "translationKey", "canSave", "readonly", "layout", "className", "IconButton", "icon", "iconEnd", "label", "onClick", "variant", "disabled", "FORM_SECTION_NAME", "FormSection", "description", "h2", "p", "FORM_SUBMIT_NAME", "FormSubmit", "Form", "Content", "Section", "FieldSet", "Layout", "Label", "FormFieldLabel", "Actions", "Submit", "ArrayField", "type", "path", "label", "readonly", "layout", "fieldProps", "inputProps", "props", "t", "useTranslation", "translationKey", "elementType", "getArrayElementType", "onValueChange", "values", "useFormValues", "displayName", "getDefaultObjectValue", "typeNode", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "isTypeLiteral", "Object", "fromEntries", "getFormProperties", "map", "prop", "defaultValue", "getDefaultAnnotation", "pipe", "annotation", "getOrUndefined", "name", "handleAdd", "useCallback", "isNestedType", "getDefaultValue", "handleDelete", "idx", "filter", "_", "i", "length", "renderItemAsObject", "Ref", "isRefType", "React", "div", "className", "FormFieldLabel", "createJsonPath", "asChild", "IconBlock", "icon", "onClick", "index", "isLast", "fieldField", "FormField", "autoFocus", "undefined", "key", "IconButton", "variant", "density", "square", "iconOnly", "ast", "_tag", "f", "Error", "React", "useCallback", "Input", "BooleanField", "type", "readonly", "onValueChange", "props", "handleChange", "useCallback", "value", "React", "FormFieldWrapper", "Input", "Switch", "disabled", "checked", "onCheckedChange", "format", "formatDate", "React", "useCallback", "Format", "Input", "isoToLocalDateTime", "value", "date", "Date", "Number", "isNaN", "getTime", "formatDate", "localDateTimeToIso", "undefined", "toISOString", "DateField", "type", "format", "readonly", "placeholder", "_placeholder", "onValueChange", "onBlur", "_onBlur", "props", "handleSimpleChange", "useCallback", "next", "handleDateTimeChange", "iso", "React", "FormFieldWrapper", "Format", "TypeFormat", "div", "className", "Input", "disabled", "TriggerIcon", "Time", "DateTime", "React", "useCallback", "useEffect", "useMemo", "useState", "GeoLocation", "Input", "useTranslation", "safeParseFloat", "translationKey", "GeoPointField", "type", "label", "jsonPath", "readonly", "layout", "getStatus", "getValue", "onValueChange", "onBlur", "t", "useTranslation", "translationKey", "status", "error", "geoPoint", "useMemo", "value", "GeoLocation", "fromGeoPoint", "longitudeText", "setLongitudeText", "useState", "longitude", "toString", "latitudeText", "setLatitudeText", "latitude", "useEffect", "location", "handleChange", "useCallback", "coordinateType", "setText", "event", "inputText", "target", "coord", "safeParseFloat", "undefined", "isNaN", "currentLocation", "newLocation", "newValue", "toGeoPoint", "React", "Input", "Root", "validationValence", "FormFieldLabel", "path", "asChild", "LatLng", "div", "className", "Label", "TextInput", "step", "min", "max", "disabled", "placeholder", "onChange", "latHem", "lngHem", "span", "Math", "abs", "toFixed", "useAtomValue", "React", "useCallback", "useMemo", "Obj", "Ref", "AtomRef", "createDocAccessor", "Button", "Icon", "Input", "useTranslation", "Editor", "useBasicMarkdownExtensions", "Text", "createDataExtensions", "translationKey", "editorClassNames", "MarkdownField", "type", "readonly", "label", "jsonPath", "placeholder", "layout", "db", "getStatus", "getValue", "onValueChange", "status", "error", "isRef", "Ref", "isRefType", "value", "renderEditor", "reference", "React", "RefMarkdownEditor", "CreateTextButton", "disabled", "onCreate", "ref", "StringMarkdownEditor", "onChange", "next", "renderStatic", "RefStaticText", "p", "className", "Input", "Root", "validationValence", "FormFieldLabel", "path", "Validation", "text", "useAtomValue", "useMemo", "AtomRef", "make", "content", "dataExtensions", "createDataExtensions", "id", "uri", "createDocAccessor", "extensions", "useBasicMarkdownExtensions", "Editor", "View", "classNames", "handleChange", "useCallback", "undefined", "t", "useTranslation", "translationKey", "handleClick", "add", "Obj", "Text", "Button", "onClick", "Icon", "icon", "size", "span", "React", "useCallback", "Input", "safeParseFloat", "NumberField", "type", "readonly", "placeholder", "onValueChange", "onBlur", "props", "handleChange", "useCallback", "event", "safeParseFloat", "target", "value", "React", "FormFieldWrapper", "Input", "TextInput", "disabled", "onChange", "React", "useCallback", "useMemo", "useState", "Entity", "Filter", "Obj", "Ref", "Type", "useQuery", "useType", "defaultUseType", "ANY_OBJECT_TYPENAME", "ReferenceAnnotationId", "findAnnotation", "URI", "DxAnchor", "Button", "Icon", "Input", "useTranslation", "ParentLabelAnnotationId", "translationKey", "React", "forwardRef", "useCallback", "useState", "Popover", "useTranslation", "Combobox", "useSearchListResults", "translationKey", "ObjectPickerContent", "forwardRef", "options", "selectedIds", "createSchema", "createOptionLabel", "createOptionIcon", "createInitialValuePath", "createFieldMap", "onSelect", "onCreate", "props", "forwardedRef", "t", "useTranslation", "translationKey", "showForm", "setShowForm", "useState", "formInitialValue", "setFormInitialValue", "results", "query", "handleSearch", "useSearchListResults", "items", "handleFormSave", "useCallback", "values", "handleFormCancel", "handleKeyDown", "event", "key", "currentTarget", "querySelector", "stopPropagation", "preventDefault", "input", "currentQuery", "value", "React", "Combobox", "Content", "onKeyDownCapture", "ref", "Popover", "Viewport", "Form", "Root", "testId", "schema", "defaultValues", "fieldMap", "onSave", "onCancel", "FieldSet", "Actions", "Arrow", "Input", "placeholder", "autoFocus", "onValueChange", "List", "map", "option", "Item", "id", "label", "checked", "includes", "classNames", "CreateItem", "onCreateItemSelect", "ns", "text", "icon", "closeOnSelect", "displayName", "ObjectPicker", "Portal", "Trigger", "VirtualTrigger", "isRefSnapshot", "val", "defaultGetOptions", "results", "parentLabel", "map", "result", "id", "Entity", "getURI", "parent", "Obj", "getParent", "undefined", "label", "getLabel", "defaultUseResults", "db", "typename", "useQuery", "ANY_OBJECT_TYPENAME", "Filter", "everything", "nothing", "RefField", "props", "type", "readonly", "jsonPath", "placeholder", "layout", "getStatus", "getValue", "createOptionLabel", "createOptionIcon", "createInitialValuePath", "createFieldMap", "useType", "defaultUseType", "useResults", "getOptions", "onCreate", "onValueChange", "t", "useTranslation", "translationKey", "status", "error", "useMemo", "findAnnotation", "ReferenceAnnotationId", "options", "ParentLabelAnnotationId", "handleGetValue", "useCallback", "formValue", "dxnToObjectId", "dxn", "split", "pop", "unknownToRefOption", "value", "isRef", "Ref", "dxnString", "uri", "objectId", "matchingOption", "find", "option", "item", "selectedIds", "createSchema", "open", "setOpen", "useState", "handleCreate", "values", "newObject", "make", "handleUpdate", "ref", "fromURI", "URI", "handleSelect", "React", "Input", "Root", "validationValence", "FormFieldLabel", "path", "div", "p", "className", "DxAnchor", "key", "rootclassname", "ObjectPicker", "onOpenChange", "Trigger", "asChild", "classNames", "TextInput", "readOnly", "Button", "span", "Icon", "size", "icon", "Portal", "Content", "omitHiddenFormFields", "omitId", "Type", "getSchema", "onSelect", "DescriptionAndValidation", "React", "useCallback", "Icon", "Input", "Select", "getStyles", "SelectField", "type", "readonly", "label", "jsonPath", "layout", "placeholder", "options", "getStatus", "getValue", "onValueChange", "status", "error", "value", "handleValueChange", "useCallback", "React", "Input", "Root", "validationValence", "FormFieldLabel", "path", "p", "find", "optionValue", "String", "Select", "TriggerButton", "classNames", "disabled", "Portal", "Content", "Viewport", "map", "secondaryLabel", "icon", "iconHue", "Option", "key", "span", "className", "Icon", "getIconHueStyles", "Arrow", "DescriptionAndValidation", "styles", "getStyles", "undefined", "foreground", "React", "useCallback", "useEffect", "useRef", "useState", "PublicKey", "IconButton", "Input", "Tag", "useTranslation", "List", "HuePicker", "hues", "osTranslations", "translationKey", "SelectOptionField", "type", "readonly", "label", "jsonPath", "getStatus", "getValue", "onValueChange", "t", "useTranslation", "translationKey", "status", "error", "selected", "setSelectedId", "useState", "isNewOption", "setIsNewOption", "inputRef", "useRef", "options", "useEffect", "undefined", "randomHue", "usedHues", "Set", "map", "option", "color", "unusedHues", "hues", "filter", "hue", "has", "length", "Math", "floor", "random", "lastThree", "slice", "availableHues", "handleAdd", "useCallback", "newId", "PublicKey", "truncate", "newOption", "id", "title", "handleDelete", "newOptions", "handleMove", "from", "to", "removed", "splice", "handleClick", "current", "handleTitleChange", "e", "o", "target", "value", "handleKeyDown", "ev", "key", "handleColorChange", "focus", "React", "Input", "Root", "validationValence", "FormFieldLabel", "path", "div", "List", "items", "isItem", "_item", "onMove", "role", "className", "item", "Item", "classNames", "aria-expanded", "ItemDragHandle", "disabled", "ItemTitle", "onClick", "Tag", "palette", "IconButton", "iconOnly", "variant", "ns", "osTranslations", "icon", "Label", "TextInput", "placeholder", "ref", "onChange", "onKeyDown", "HuePicker", "React", "useCallback", "Input", "TextField", "type", "readonly", "placeholder", "onBlur", "onValueChange", "props", "handleChange", "useCallback", "event", "target", "value", "React", "FormFieldWrapper", "Input", "TextInput", "noAutoFill", "disabled", "onChange", "React", "useCallback", "Input", "TextAreaField", "type", "readonly", "placeholder", "onValueChange", "onBlur", "props", "handleChange", "useCallback", "event", "target", "value", "React", "FormFieldWrapper", "Input", "TextArea", "rows", "disabled", "onChange", "React", "Input", "mx", "safeParseFloat", "gridCols", "TupleField", "binding", "type", "readonly", "label", "jsonPath", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "values", "React", "Input", "Root", "validationValence", "FormFieldLabel", "path", "div", "className", "mx", "length", "map", "prop", "TextInput", "key", "disabled", "value", "onChange", "event", "safeParseFloat", "target", "__dxlog_file", "props", "useState", "projection", "getFieldProjection", "field", "useEffect", "setProps", "useAsyncEffect", "registry", "schemas", "subscription", "setReferenceSchema", "schema", "Type", "getTypename", "useMemo", "options", "React", "value", "Format", "TypeFormat", "label", "typename", "referenceSchema", "getFormProperties", "getSchema", "t", "useCallback", "setFieldSchema", "prev", "fieldSchema", "newSchema", "additionalProps", "type", "_props", "handleValidate", "view", "onSave", "requestAnimationFrame", "log", "fieldMap", "autoFocus", "readonly", "values", "exclude", "sort", "onValuesChanged", "onValidate", "handleSave", "onCancel", "handleCancel", "Schema", "React", "useCallback", "useMemo", "Obj", "Ref", "Tag", "Type", "splitJsonPath", "invariant", "URI", "HuePicker", "isNonNullable", "translationKey", "__dxlog_file", "createFieldMap", "handleChange", "onValueChange", "type", "React", "HuePicker", "value", "onReset", "handleReset", "meta", "getMeta", "object", "tags", "map", "values", "useMemo", "extend", "Type", "getSchema", "invariant", "isObject", "newObject", "db", "add", "make", "instanceOf", "Tag", "Obj", "getURI", "useCallback", "hasTagsChange", "changedPaths", "path", "splitJsonPath", "nonTagPaths", "parts", "setValue", "createTypename", "createOptionIcon", "createOptionLabel", "translationKey", "createInitialValuePath", "onValuesChanged", "onCreate", "Function", "Option", "Schema", "React", "useCallback", "useMemo", "Obj", "Ref", "Tag", "Type", "useType", "splitJsonPath", "invariant", "URI", "composable", "composableProps", "HuePicker", "FactoryAnnotation", "isNonNullable", "translationKey", "__dxlog_file", "meta", "object", "tags", "map", "values", "useMemo", "type", "getType", "typeFromRegistry", "formSchema", "Function", "Option", "invariant", "isObject", "factory", "getOrUndefined", "FactoryAnnotation", "get", "Type", "getSchema", "newObject", "Obj", "db", "useCallback", "hasTagsChange", "changedPaths", "path", "splitJsonPath", "nonTagPaths", "parts", "value", "setValue", "createTypename", "createOptionIcon", "createOptionLabel", "Tag", "translationKey", "createInitialValuePath", "createFieldMap", "onValuesChanged", "onCreate", "composableProps", "forwardedRef", "React", "handleChange", "onValueChange", "HuePicker", "onReset", "handleReset", "SchemaAST", "React", "composable", "composableProps", "mx", "ObjectTreeImpl", "schema", "value", "props", "forwardedRef", "div", "role", "classNames", "ref", "Node", "ast", "label", "depth", "displayName", "ObjectTree", "unwrap", "isRefinement", "from", "isSuspend", "f", "isTransformation", "stripOptional", "isUnion", "nonUndef", "types", "filter", "t", "isUndefinedKeyword", "length", "inner", "isTypeLiteral", "isPlainObject", "childDepth", "Row", "kind", "propertySignatures", "map", "prop", "key", "String", "name", "type", "isTupleType", "Array", "isArray", "elemType", "rest", "item", "index", "unknownKeyword", "formatLeaf", "className", "style", "paddingInlineStart", "undefined", "span", "JSON", "stringify", "React", "ScrollArea", "toLocalizedString", "useTranslation", "composable", "composableProps", "mx", "translationKey", "SchemaAST", "String", "React", "useCallback", "useMemo", "getAnnotation", "Input", "Select", "React", "Input", "toLocalizedString", "useTranslation", "mx", "translationKey", "SETTINGS_PANEL_NAME", "SETTINGS_ITEM_NAME", "SettingsPanel", "classNames", "children", "div", "className", "displayName", "SettingsItem", "title", "description", "t", "Root", "Label", "DescriptionAndValidation", "Description", "SettingsFieldSet", "schema", "values", "onValuesChanged", "readonly", "fieldMap", "visible", "sort", "pathPrefix", "properties", "useMemo", "props", "getFormProperties", "ast", "rank", "name", "idx", "indexOf", "Number", "POSITIVE_INFINITY", "a", "b", "toString", "handleChange", "useCallback", "value", "React", "map", "property", "path", "entry", "SettingsFieldItem", "key", "onChange", "customField", "undefined", "nestedFieldMap", "displayName", "type", "title", "getAnnotation", "TitleAnnotationId", "capitalize", "description", "DescriptionAnnotationId", "CustomField", "SettingsItem", "fieldType", "detectFieldType", "Input", "Switch", "disabled", "checked", "onCheckedChange", "options", "getSelectOptionsFromAst", "Select", "Root", "globalThis", "String", "onValueChange", "selected", "matched", "find", "option", "TriggerButton", "Portal", "Content", "Viewport", "Option", "label", "Arrow", "TextInput", "event", "target", "parsed", "isNaN", "SETTINGS_ROOT_NAME", "SETTINGS_VIEWPORT_NAME", "SETTINGS_SECTION_NAME", "SettingsRoot", "children", "classNames", "React", "div", "className", "mx", "displayName", "SettingsViewport", "composable", "props", "forwardedRef", "ScrollArea", "Root", "composableProps", "orientation", "centered", "thin", "ref", "Viewport", "SettingsSection", "title", "description", "t", "useTranslation", "translationKey", "h2", "toLocalizedString", "p", "Settings", "Section", "Panel", "SettingsPanel", "Item", "SettingsItem", "FieldSet", "SettingsFieldSet", "React", "Select", "createSelectField", "options", "defaultLabel", "normalized", "map", "option", "value", "label", "hasDefault", "sentinel", "Math", "random", "toString", "slice", "onChange", "readonly", "Root", "disabled", "onValueChange", "next", "undefined", "TriggerButton", "Portal", "Content", "Viewport", "Option", "key", "Arrow", "RegistryContext", "Array", "Match", "Option", "Schema", "React", "forwardRef", "useCallback", "useContext", "useImperativeHandle", "useMemo", "useState", "Entity", "Feed", "Filter", "Format", "Obj", "Query", "QueryAST", "Ref", "Type", "View", "invariant", "useObject", "useQuery", "IconButton", "Input", "Message", "useTranslation", "QueryForm", "List", "ParentLabelAnnotation", "ProjectionModel", "VIEW_FIELD_LIMIT", "createEchoChangeCallback", "getTypenameFromQuery", "mx", "osTranslations", "translationKey", "__dxlog_file", "schemaReadonly", "type", "useTranslation", "translationKey", "projectionModel", "useMemo", "jsonSchema", "registry", "atomRegistry", "view", "baseSchema", "change", "useImperativeHandle", "from", "undefined", "Option", "Match", "useQuery", "Filter", "Feed", "feeds", "targetRef", "queueTarget", "feed", "mode", "QueryAST", "Query", "annotations", "title", "base", "fields", "target", "Ref", "ParentLabelAnnotation", "set", "Schema", "optional", "mutable", "tags", "types", "queueDxn", "targetValue", "find", "getQueueUri", "onQueryChanged", "onDelete", "fieldId", "invariant", "React", "readonly", "valence", "mx", "schema", "viewSchema", "viewValues", "fieldMap", "db", "onValuesChanged", "label", "asChild", "showHeading", "FieldList", "Type", "getDatabase", "viewSnapshot", "useObject", "createFieldProjection", "setExpandedField", "field", "useCallback", "expandedField", "Obj", "moved", "splice", "projection", "hideFieldProjection", "showFieldProjection", "property", "FieldSchema", "List", "getId", "onMove", "handleMove", "items", "div", "role", "className", "hidden", "key", "id", "classNames", "aria-expanded", "ItemDragHandle", "disabled", "handleToggleField", "data-testid", "icon", "autoHide", "onClick", "iconOnly", "osTranslations", "FieldEditor", "onSave", "handleClose", "IconButton", "customFields", "handleChange", "onValueChange", "initialQuery", "onChange"]
7
7
  }