@riboseinc/paneron-registry-kit 2.2.58 → 2.2.60

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 (735) hide show
  1. package/LICENSE +21 -0
  2. package/README.adoc +67 -0
  3. package/compiled/common.js +2 -0
  4. package/compiled/index.js +42 -0
  5. package/compiled/item-classes/Tree.js +61 -0
  6. package/compiled/item-classes/treeNodes.js +56 -0
  7. package/compiled/migrations/initial.js +28 -0
  8. package/compiled/proposals/ChangeRequestContext.js +121 -0
  9. package/compiled/proposals/HistoryDrawer.js +55 -0
  10. package/compiled/proposals/ListItem.js +22 -0
  11. package/compiled/proposals/MetaProperties.js +98 -0
  12. package/compiled/proposals/NewProposalMenu.js +53 -0
  13. package/compiled/proposals/ProposalBrowser.js +141 -0
  14. package/compiled/proposals/ProposalDetail.js +27 -0
  15. package/compiled/proposals/ProposalItem.js +24 -0
  16. package/compiled/proposals/ProposalSummary.js +28 -0
  17. package/compiled/proposals/ProposalTab.js +89 -0
  18. package/compiled/proposals/ProposalType.js +62 -0
  19. package/compiled/proposals/ProposalWorkspace.js +70 -0
  20. package/compiled/proposals/Search.js +106 -0
  21. package/compiled/proposals/TransitionHistory.js +271 -0
  22. package/compiled/proposals/TransitionOptions.js +432 -0
  23. package/compiled/proposals/actionableGroups/Tree.js +170 -0
  24. package/compiled/proposals/actionableGroups/queries.js +78 -0
  25. package/compiled/proposals/actionableGroups/treeNodes.js +90 -0
  26. package/compiled/proposals/actionableGroups/types.js +2 -0
  27. package/compiled/proposals/index.js +7 -0
  28. package/compiled/proposals/objectChangeset.js +331 -0
  29. package/compiled/proposals/queries.js +5 -0
  30. package/compiled/proposals/types.js +229 -0
  31. package/compiled/types/index.js +7 -0
  32. package/compiled/types/item.js +28 -0
  33. package/compiled/types/register.js +25 -0
  34. package/compiled/types/registry.js +10 -0
  35. package/compiled/types/stakeholder.js +81 -0
  36. package/compiled/types/util.js +3 -0
  37. package/compiled/types/views.js +2 -0
  38. package/compiled/views/AnnotatedChange.js +62 -0
  39. package/compiled/views/BrowserCtx.js +20 -0
  40. package/compiled/views/FilterCriteria/CRITERIA_CONFIGURATION.js +121 -0
  41. package/compiled/views/FilterCriteria/criteriaGroupToQueryExpression.js +45 -0
  42. package/compiled/views/FilterCriteria/criteriaGroupToSummary.js +47 -0
  43. package/compiled/views/FilterCriteria/criteriaToNodes.js +92 -0
  44. package/compiled/views/FilterCriteria/index.js +75 -0
  45. package/compiled/views/FilterCriteria/models.js +45 -0
  46. package/compiled/views/FilterCriteria/mutateGroup.js +74 -0
  47. package/compiled/views/GenericRelatedItemView.js +179 -0
  48. package/compiled/views/ItemDetailsDrawer.js +21 -0
  49. package/compiled/views/ItemSearchDrawer.js +29 -0
  50. package/compiled/views/Party.js +156 -0
  51. package/compiled/views/RegisterStakeholder.js +22 -0
  52. package/compiled/views/RegisterVersion.js +20 -0
  53. package/compiled/views/SearchQuery.js +90 -0
  54. package/compiled/views/StatefulTree.js +95 -0
  55. package/compiled/views/detail/AllItems.js +31 -0
  56. package/compiled/views/detail/ChangeRequest/index.js +49 -0
  57. package/compiled/views/detail/CustomView/index.js +34 -0
  58. package/compiled/views/detail/ProposalWork.js +167 -0
  59. package/compiled/views/detail/RegisterHome/ActiveProposalDetails.js +64 -0
  60. package/compiled/views/detail/RegisterHome/Block.js +39 -0
  61. package/compiled/views/detail/RegisterHome/MetaSummary.js +27 -0
  62. package/compiled/views/detail/RegisterHome/Proposal.js +105 -0
  63. package/compiled/views/detail/RegisterHome/index.js +381 -0
  64. package/compiled/views/detail/RegisterHome2/index.js +36 -0
  65. package/compiled/views/detail/RegisterItem/RelatedItems.js +28 -0
  66. package/compiled/views/detail/RegisterItem/SupersedingItemMenu.js +27 -0
  67. package/compiled/views/detail/RegisterItem/index.js +576 -0
  68. package/compiled/views/detail/RegisterItem/index.js.map +1 -0
  69. package/compiled/views/detail/RegisterItemClass.js +59 -0
  70. package/compiled/views/detail/RegisterMeta/RegisterMetaForm.js +176 -0
  71. package/compiled/views/detail/RegisterMeta/index.js +73 -0
  72. package/compiled/views/detail/index.js +12 -0
  73. package/compiled/views/diffing/InlineDiff.js +117 -0
  74. package/compiled/views/diffing/StructuredDiff.js +38 -0
  75. package/compiled/views/hooks/useCustomView.js +14 -0
  76. package/compiled/views/hooks/useItemClassConfig.js +8 -0
  77. package/compiled/views/hooks/useItemRef.js +27 -0
  78. package/compiled/views/hooks/useLatestAcceptedProposal.js +39 -0
  79. package/compiled/views/hooks/useRegisterVersion.js +35 -0
  80. package/compiled/views/hooks/useSingleRegisterItemData.js +22 -0
  81. package/compiled/views/hooks/useStakeholder.js +2 -0
  82. package/compiled/views/index.js +247 -0
  83. package/compiled/views/itemPathUtils.js +139 -0
  84. package/compiled/views/itemQueryUtils.js +49 -0
  85. package/compiled/views/protocolRegistry.js +30 -0
  86. package/compiled/views/sidebar/Browse/index.js +291 -0
  87. package/compiled/views/sidebar/ExportImport/ExportOptions.js +56 -0
  88. package/compiled/views/sidebar/ExportImport/ImportOptions.js +9 -0
  89. package/compiled/views/sidebar/ExportImport/index.js +4 -0
  90. package/compiled/views/sidebar/ListItem.js +31 -0
  91. package/compiled/views/sidebar/Registration/index.js +89 -0
  92. package/compiled/views/sidebar/Search/index.js +129 -0
  93. package/{views → compiled/views}/sidebar/Search/index.js.map +1 -1
  94. package/compiled/views/sidebar/index.js +115 -0
  95. package/compiled/views/util.js +278 -0
  96. package/compiled/views/util.js.map +1 -0
  97. package/dependencies-local/extension-kit/SettingsContext.d.ts +8 -0
  98. package/dependencies-local/extension-kit/SettingsContext.js +19 -0
  99. package/dependencies-local/extension-kit/SettingsContext.js.map +1 -0
  100. package/dependencies-local/extension-kit/build_site.d.ts +1 -0
  101. package/dependencies-local/extension-kit/build_site.js +4 -0
  102. package/dependencies-local/extension-kit/build_site.js.map +1 -0
  103. package/dependencies-local/extension-kit/context.d.ts +18 -0
  104. package/dependencies-local/extension-kit/context.js +143 -0
  105. package/dependencies-local/extension-kit/context.js.map +1 -0
  106. package/dependencies-local/extension-kit/i18n/ContextProvider.d.ts +9 -0
  107. package/dependencies-local/extension-kit/i18n/ContextProvider.js +33 -0
  108. package/dependencies-local/extension-kit/i18n/ContextProvider.js.map +1 -0
  109. package/dependencies-local/extension-kit/i18n/context.d.ts +9 -0
  110. package/dependencies-local/extension-kit/i18n/context.js +23 -0
  111. package/dependencies-local/extension-kit/i18n/context.js.map +1 -0
  112. package/dependencies-local/extension-kit/i18n/types.d.ts +10 -0
  113. package/dependencies-local/extension-kit/i18n/types.js.map +1 -0
  114. package/dependencies-local/extension-kit/i18n/widgets.d.ts +16 -0
  115. package/dependencies-local/extension-kit/i18n/widgets.js +59 -0
  116. package/dependencies-local/extension-kit/i18n/widgets.js.map +1 -0
  117. package/dependencies-local/extension-kit/index.d.ts +16 -0
  118. package/dependencies-local/extension-kit/index.js +149 -0
  119. package/dependencies-local/extension-kit/index.js.map +1 -0
  120. package/dependencies-local/extension-kit/object-specs/index.d.ts +2 -0
  121. package/dependencies-local/extension-kit/object-specs/index.js +22 -0
  122. package/dependencies-local/extension-kit/object-specs/index.js.map +1 -0
  123. package/dependencies-local/extension-kit/object-specs/paneron-object.d.ts +7 -0
  124. package/dependencies-local/extension-kit/object-specs/paneron-object.js +159 -0
  125. package/dependencies-local/extension-kit/object-specs/paneron-object.js.map +1 -0
  126. package/dependencies-local/extension-kit/object-specs/ser-des.d.ts +32 -0
  127. package/dependencies-local/extension-kit/object-specs/ser-des.js +232 -0
  128. package/dependencies-local/extension-kit/object-specs/ser-des.js.map +1 -0
  129. package/dependencies-local/extension-kit/object-specs/yaml/custom-bool.d.ts +3 -0
  130. package/dependencies-local/extension-kit/object-specs/yaml/custom-bool.js +42 -0
  131. package/dependencies-local/extension-kit/object-specs/yaml/custom-bool.js.map +1 -0
  132. package/dependencies-local/extension-kit/object-specs/yaml/custom-timestamp.d.ts +3 -0
  133. package/dependencies-local/extension-kit/object-specs/yaml/custom-timestamp.js +110 -0
  134. package/dependencies-local/extension-kit/object-specs/yaml/custom-timestamp.js.map +1 -0
  135. package/dependencies-local/extension-kit/object-specs/yaml/index.d.ts +9 -0
  136. package/dependencies-local/extension-kit/object-specs/yaml/index.js +36 -0
  137. package/dependencies-local/extension-kit/object-specs/yaml/index.js.map +1 -0
  138. package/dependencies-local/extension-kit/object-specs/yaml/schema.d.ts +4 -0
  139. package/dependencies-local/extension-kit/object-specs/yaml/schema.js +26 -0
  140. package/dependencies-local/extension-kit/object-specs/yaml/schema.js.map +1 -0
  141. package/dependencies-local/extension-kit/settings.d.ts +9 -0
  142. package/dependencies-local/extension-kit/settings.js +17 -0
  143. package/dependencies-local/extension-kit/settings.js.map +1 -0
  144. package/dependencies-local/extension-kit/types/binary-invocation.d.ts +31 -0
  145. package/dependencies-local/extension-kit/types/binary-invocation.js.map +1 -0
  146. package/dependencies-local/extension-kit/types/buffers.d.ts +19 -0
  147. package/dependencies-local/extension-kit/types/buffers.js.map +1 -0
  148. package/dependencies-local/extension-kit/types/changes.d.ts +37 -0
  149. package/dependencies-local/extension-kit/types/changes.js +5 -0
  150. package/dependencies-local/extension-kit/types/changes.js.map +1 -0
  151. package/dependencies-local/extension-kit/types/data.d.ts +54 -0
  152. package/dependencies-local/extension-kit/types/data.js +5 -0
  153. package/dependencies-local/extension-kit/types/data.js.map +1 -0
  154. package/dependencies-local/extension-kit/types/dialogs.d.ts +21 -0
  155. package/dependencies-local/extension-kit/types/dialogs.js +5 -0
  156. package/dependencies-local/extension-kit/types/dialogs.js.map +1 -0
  157. package/dependencies-local/extension-kit/types/export-formats.d.ts +23 -0
  158. package/dependencies-local/extension-kit/types/export-formats.js +5 -0
  159. package/dependencies-local/extension-kit/types/export-formats.js.map +1 -0
  160. package/dependencies-local/extension-kit/types/extension-maker.d.ts +17 -0
  161. package/dependencies-local/extension-kit/types/extension-maker.js +5 -0
  162. package/dependencies-local/extension-kit/types/extension-maker.js.map +1 -0
  163. package/dependencies-local/extension-kit/types/extension.d.ts +40 -0
  164. package/dependencies-local/extension-kit/types/extension.js +5 -0
  165. package/dependencies-local/extension-kit/types/extension.js.map +1 -0
  166. package/dependencies-local/extension-kit/types/index.d.ts +3 -0
  167. package/dependencies-local/extension-kit/types/index.js +41 -0
  168. package/dependencies-local/extension-kit/types/index.js.map +1 -0
  169. package/dependencies-local/extension-kit/types/indexes.d.ts +6 -0
  170. package/dependencies-local/extension-kit/types/indexes.js +15 -0
  171. package/dependencies-local/extension-kit/types/indexes.js.map +1 -0
  172. package/dependencies-local/extension-kit/types/migrations.d.ts +35 -0
  173. package/dependencies-local/extension-kit/types/migrations.js +5 -0
  174. package/dependencies-local/extension-kit/types/migrations.js.map +1 -0
  175. package/dependencies-local/extension-kit/types/object-spec.d.ts +109 -0
  176. package/dependencies-local/extension-kit/types/object-spec.js +24 -0
  177. package/dependencies-local/extension-kit/types/object-spec.js.map +1 -0
  178. package/dependencies-local/extension-kit/types/objects.d.ts +18 -0
  179. package/dependencies-local/extension-kit/types/objects.js +5 -0
  180. package/dependencies-local/extension-kit/types/objects.js.map +1 -0
  181. package/dependencies-local/extension-kit/types/progress.d.ts +5 -0
  182. package/dependencies-local/extension-kit/types/progress.js +5 -0
  183. package/dependencies-local/extension-kit/types/progress.js.map +1 -0
  184. package/dependencies-local/extension-kit/types/renderer.d.ts +505 -0
  185. package/dependencies-local/extension-kit/types/renderer.js +16 -0
  186. package/dependencies-local/extension-kit/types/renderer.js.map +1 -0
  187. package/dependencies-local/extension-kit/useDebounce.d.ts +5 -0
  188. package/dependencies-local/extension-kit/useDebounce.js +25 -0
  189. package/dependencies-local/extension-kit/useDebounce.js.map +1 -0
  190. package/dependencies-local/extension-kit/usePersistentStateReducer.d.ts +39 -0
  191. package/dependencies-local/extension-kit/usePersistentStateReducer.js +133 -0
  192. package/dependencies-local/extension-kit/usePersistentStateReducer.js.map +1 -0
  193. package/dependencies-local/extension-kit/useTimeTravelingPersistentStateReducer.d.ts +71 -0
  194. package/dependencies-local/extension-kit/useTimeTravelingPersistentStateReducer.js +107 -0
  195. package/dependencies-local/extension-kit/useTimeTravelingPersistentStateReducer.js.map +1 -0
  196. package/dependencies-local/extension-kit/util.d.ts +37 -0
  197. package/dependencies-local/extension-kit/util.js +179 -0
  198. package/dependencies-local/extension-kit/util.js.map +1 -0
  199. package/dependencies-local/extension-kit/widgets/DL.d.ts +44 -0
  200. package/dependencies-local/extension-kit/widgets/DL.js +89 -0
  201. package/dependencies-local/extension-kit/widgets/DL.js.map +1 -0
  202. package/dependencies-local/extension-kit/widgets/ErrorBoundary.d.ts +17 -0
  203. package/dependencies-local/extension-kit/widgets/ErrorBoundary.js +49 -0
  204. package/dependencies-local/extension-kit/widgets/ErrorBoundary.js.map +1 -0
  205. package/dependencies-local/extension-kit/widgets/ErrorState.d.ts +10 -0
  206. package/dependencies-local/extension-kit/widgets/ErrorState.js +54 -0
  207. package/dependencies-local/extension-kit/widgets/ErrorState.js.map +1 -0
  208. package/dependencies-local/extension-kit/widgets/Grid.d.ts +41 -0
  209. package/dependencies-local/extension-kit/widgets/Grid.js +213 -0
  210. package/dependencies-local/extension-kit/widgets/Grid.js.map +1 -0
  211. package/dependencies-local/extension-kit/widgets/HelpTooltip.d.ts +18 -0
  212. package/dependencies-local/extension-kit/widgets/HelpTooltip.js +72 -0
  213. package/dependencies-local/extension-kit/widgets/HelpTooltip.js.map +1 -0
  214. package/dependencies-local/extension-kit/widgets/ItemCount.d.ts +19 -0
  215. package/dependencies-local/extension-kit/widgets/ItemCount.js +79 -0
  216. package/dependencies-local/extension-kit/widgets/ItemCount.js.map +1 -0
  217. package/dependencies-local/extension-kit/widgets/List.d.ts +41 -0
  218. package/dependencies-local/extension-kit/widgets/List.js +210 -0
  219. package/dependencies-local/extension-kit/widgets/List.js.map +1 -0
  220. package/dependencies-local/extension-kit/widgets/Navbar.d.ts +20 -0
  221. package/dependencies-local/extension-kit/widgets/Navbar.js +76 -0
  222. package/dependencies-local/extension-kit/widgets/Navbar.js.map +1 -0
  223. package/dependencies-local/extension-kit/widgets/Navbar2.d.ts +17 -0
  224. package/dependencies-local/extension-kit/widgets/Navbar2.js +95 -0
  225. package/dependencies-local/extension-kit/widgets/Navbar2.js.map +1 -0
  226. package/dependencies-local/extension-kit/widgets/OperationQueue/context.d.ts +17 -0
  227. package/dependencies-local/extension-kit/widgets/OperationQueue/context.js +21 -0
  228. package/dependencies-local/extension-kit/widgets/OperationQueue/context.js.map +1 -0
  229. package/dependencies-local/extension-kit/widgets/OperationQueue/index.d.ts +8 -0
  230. package/dependencies-local/extension-kit/widgets/OperationQueue/index.js +159 -0
  231. package/dependencies-local/extension-kit/widgets/OperationQueue/index.js.map +1 -0
  232. package/dependencies-local/extension-kit/widgets/OperationQueue/types.d.ts +19 -0
  233. package/dependencies-local/extension-kit/widgets/OperationQueue/types.js +5 -0
  234. package/dependencies-local/extension-kit/widgets/OperationQueue/types.js.map +1 -0
  235. package/dependencies-local/extension-kit/widgets/SearchResultList.d.ts +31 -0
  236. package/dependencies-local/extension-kit/widgets/SearchResultList.js +203 -0
  237. package/dependencies-local/extension-kit/widgets/SearchResultList.js.map +1 -0
  238. package/dependencies-local/extension-kit/widgets/Sidebar/Block.d.ts +24 -0
  239. package/dependencies-local/extension-kit/widgets/Sidebar/Block.js +109 -0
  240. package/dependencies-local/extension-kit/widgets/Sidebar/Block.js.map +1 -0
  241. package/dependencies-local/extension-kit/widgets/Sidebar/BlockStateButtonGroup.d.ts +6 -0
  242. package/dependencies-local/extension-kit/widgets/Sidebar/BlockStateButtonGroup.js +23 -0
  243. package/dependencies-local/extension-kit/widgets/Sidebar/BlockStateButtonGroup.js.map +1 -0
  244. package/dependencies-local/extension-kit/widgets/Sidebar/PropertyView.d.ts +29 -0
  245. package/dependencies-local/extension-kit/widgets/Sidebar/PropertyView.js +157 -0
  246. package/dependencies-local/extension-kit/widgets/Sidebar/PropertyView.js.map +1 -0
  247. package/dependencies-local/extension-kit/widgets/Sidebar/index.d.ts +27 -0
  248. package/dependencies-local/extension-kit/widgets/Sidebar/index.js +197 -0
  249. package/dependencies-local/extension-kit/widgets/Sidebar/index.js.map +1 -0
  250. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/SuperSidebar.d.ts +29 -0
  251. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/SuperSidebar.js +135 -0
  252. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/SuperSidebar.js.map +1 -0
  253. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/context.d.ts +10 -0
  254. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/context.js +205 -0
  255. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/context.js.map +1 -0
  256. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/detail.d.ts +9 -0
  257. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/detail.js +69 -0
  258. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/detail.js.map +1 -0
  259. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/index.d.ts +54 -0
  260. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/index.js +301 -0
  261. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/index.js.map +1 -0
  262. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/types.d.ts +102 -0
  263. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/types.js +5 -0
  264. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/types.js.map +1 -0
  265. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/util.d.ts +1 -0
  266. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/util.js +14 -0
  267. package/dependencies-local/extension-kit/widgets/TabbedWorkspace/util.js.map +1 -0
  268. package/dependencies-local/extension-kit/widgets/Workspace.d.ts +40 -0
  269. package/dependencies-local/extension-kit/widgets/Workspace.js +96 -0
  270. package/dependencies-local/extension-kit/widgets/Workspace.js.map +1 -0
  271. package/dependencies-local/extension-kit/widgets/panels/PanelSeparator.d.ts +12 -0
  272. package/dependencies-local/extension-kit/widgets/panels/PanelSeparator.js +60 -0
  273. package/dependencies-local/extension-kit/widgets/panels/PanelSeparator.js.map +1 -0
  274. package/dependencies-local/extension-kit/widgets/panels/index.d.ts +28 -0
  275. package/dependencies-local/extension-kit/widgets/panels/index.js +169 -0
  276. package/dependencies-local/extension-kit/widgets/panels/index.js.map +1 -0
  277. package/dist/common.d.ts +1 -0
  278. package/dist/common.js.map +1 -0
  279. package/dist/index.d.ts +18 -0
  280. package/dist/index.js.map +1 -0
  281. package/dist/item-classes/Tree.d.ts +5 -0
  282. package/dist/item-classes/Tree.js.map +1 -0
  283. package/dist/item-classes/treeNodes.d.ts +12 -0
  284. package/dist/item-classes/treeNodes.js.map +1 -0
  285. package/dist/migrations/initial.d.ts +3 -0
  286. package/dist/migrations/initial.js.map +1 -0
  287. package/dist/proposals/ChangeRequestContext.d.ts +44 -0
  288. package/dist/proposals/ChangeRequestContext.js.map +1 -0
  289. package/dist/proposals/HistoryDrawer.d.ts +12 -0
  290. package/dist/proposals/HistoryDrawer.js.map +1 -0
  291. package/dist/proposals/ListItem.d.ts +9 -0
  292. package/dist/proposals/ListItem.js.map +1 -0
  293. package/dist/proposals/MetaProperties.d.ts +14 -0
  294. package/dist/proposals/MetaProperties.js.map +1 -0
  295. package/dist/proposals/NewProposalMenu.d.ts +10 -0
  296. package/dist/proposals/NewProposalMenu.js.map +1 -0
  297. package/dist/proposals/ProposalBrowser.d.ts +29 -0
  298. package/dist/proposals/ProposalBrowser.js.map +1 -0
  299. package/dist/proposals/ProposalDetail.d.ts +6 -0
  300. package/dist/proposals/ProposalDetail.js.map +1 -0
  301. package/dist/proposals/ProposalItem.d.ts +16 -0
  302. package/dist/proposals/ProposalItem.js.map +1 -0
  303. package/dist/proposals/ProposalSummary.d.ts +6 -0
  304. package/dist/proposals/ProposalSummary.js.map +1 -0
  305. package/dist/proposals/ProposalTab.d.ts +14 -0
  306. package/dist/proposals/ProposalTab.js.map +1 -0
  307. package/dist/proposals/ProposalType.d.ts +11 -0
  308. package/dist/proposals/ProposalType.js.map +1 -0
  309. package/dist/proposals/ProposalWorkspace.d.ts +15 -0
  310. package/dist/proposals/ProposalWorkspace.js.map +1 -0
  311. package/dist/proposals/Search.d.ts +26 -0
  312. package/dist/proposals/Search.js.map +1 -0
  313. package/dist/proposals/TransitionHistory.d.ts +31 -0
  314. package/dist/proposals/TransitionHistory.js.map +1 -0
  315. package/dist/proposals/TransitionOptions.d.ts +38 -0
  316. package/dist/proposals/TransitionOptions.js.map +1 -0
  317. package/dist/proposals/actionableGroups/Tree.d.ts +7 -0
  318. package/dist/proposals/actionableGroups/Tree.js.map +1 -0
  319. package/dist/proposals/actionableGroups/queries.d.ts +4 -0
  320. package/dist/proposals/actionableGroups/queries.js.map +1 -0
  321. package/dist/proposals/actionableGroups/treeNodes.d.ts +27 -0
  322. package/dist/proposals/actionableGroups/treeNodes.js.map +1 -0
  323. package/dist/proposals/actionableGroups/types.d.ts +6 -0
  324. package/dist/proposals/actionableGroups/types.js +5 -0
  325. package/dist/proposals/actionableGroups/types.js.map +1 -0
  326. package/dist/proposals/index.d.ts +6 -0
  327. package/dist/proposals/index.js.map +1 -0
  328. package/dist/proposals/objectChangeset.d.ts +72 -0
  329. package/dist/proposals/objectChangeset.js.map +1 -0
  330. package/dist/proposals/queries.d.ts +4 -0
  331. package/dist/proposals/queries.js.map +1 -0
  332. package/dist/proposals/types.d.ts +332 -0
  333. package/dist/proposals/types.js.map +1 -0
  334. package/dist/types/index.d.ts +6 -0
  335. package/dist/types/index.js.map +1 -0
  336. package/dist/types/item.d.ts +55 -0
  337. package/dist/types/item.js.map +1 -0
  338. package/dist/types/register.d.ts +21 -0
  339. package/dist/types/register.js.map +1 -0
  340. package/dist/types/registry.d.ts +15 -0
  341. package/dist/types/registry.js.map +1 -0
  342. package/dist/types/stakeholder.d.ts +43 -0
  343. package/dist/types/stakeholder.js.map +1 -0
  344. package/dist/types/util.d.ts +28 -0
  345. package/dist/types/util.js +5 -0
  346. package/dist/types/util.js.map +1 -0
  347. package/dist/types/views.d.ts +228 -0
  348. package/dist/types/views.js +5 -0
  349. package/dist/types/views.js.map +1 -0
  350. package/dist/views/AnnotatedChange.d.ts +7 -0
  351. package/dist/views/AnnotatedChange.js.map +1 -0
  352. package/dist/views/BrowserCtx.d.ts +69 -0
  353. package/dist/views/BrowserCtx.js.map +1 -0
  354. package/dist/views/FilterCriteria/CRITERIA_CONFIGURATION.d.ts +17 -0
  355. package/dist/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -0
  356. package/dist/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +6 -0
  357. package/dist/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -0
  358. package/dist/views/FilterCriteria/criteriaGroupToSummary.d.ts +5 -0
  359. package/dist/views/FilterCriteria/criteriaGroupToSummary.js.map +1 -0
  360. package/dist/views/FilterCriteria/criteriaToNodes.d.ts +24 -0
  361. package/dist/views/FilterCriteria/criteriaToNodes.js.map +1 -0
  362. package/dist/views/FilterCriteria/index.d.ts +23 -0
  363. package/dist/views/FilterCriteria/index.js.map +1 -0
  364. package/dist/views/FilterCriteria/models.d.ts +70 -0
  365. package/dist/views/FilterCriteria/models.js.map +1 -0
  366. package/dist/views/FilterCriteria/mutateGroup.d.ts +24 -0
  367. package/dist/views/FilterCriteria/mutateGroup.js.map +1 -0
  368. package/dist/views/GenericRelatedItemView.d.ts +9 -0
  369. package/dist/views/GenericRelatedItemView.js.map +1 -0
  370. package/dist/views/ItemDetailsDrawer.d.ts +12 -0
  371. package/dist/views/ItemDetailsDrawer.js.map +1 -0
  372. package/dist/views/ItemSearchDrawer.d.ts +11 -0
  373. package/dist/views/ItemSearchDrawer.js.map +1 -0
  374. package/dist/views/Party.d.ts +0 -0
  375. package/dist/views/Party.js.map +1 -0
  376. package/dist/views/RegisterStakeholder.d.ts +12 -0
  377. package/dist/views/RegisterStakeholder.js.map +1 -0
  378. package/dist/views/RegisterVersion.d.ts +9 -0
  379. package/dist/views/RegisterVersion.js.map +1 -0
  380. package/dist/views/SearchQuery.d.ts +19 -0
  381. package/dist/views/SearchQuery.js.map +1 -0
  382. package/dist/views/StatefulTree.d.ts +28 -0
  383. package/dist/views/StatefulTree.js.map +1 -0
  384. package/dist/views/detail/AllItems.d.ts +8 -0
  385. package/dist/views/detail/AllItems.js.map +1 -0
  386. package/dist/views/detail/ChangeRequest/index.d.ts +12 -0
  387. package/dist/views/detail/ChangeRequest/index.js.map +1 -0
  388. package/dist/views/detail/CustomView/index.d.ts +13 -0
  389. package/dist/views/detail/CustomView/index.js.map +1 -0
  390. package/dist/views/detail/ProposalWork.d.ts +8 -0
  391. package/dist/views/detail/ProposalWork.js.map +1 -0
  392. package/dist/views/detail/RegisterHome/ActiveProposalDetails.d.ts +15 -0
  393. package/dist/views/detail/RegisterHome/ActiveProposalDetails.js.map +1 -0
  394. package/dist/views/detail/RegisterHome/Block.d.ts +29 -0
  395. package/dist/views/detail/RegisterHome/Block.js.map +1 -0
  396. package/dist/views/detail/RegisterHome/MetaSummary.d.ts +9 -0
  397. package/dist/views/detail/RegisterHome/MetaSummary.js.map +1 -0
  398. package/dist/views/detail/RegisterHome/Proposal.d.ts +14 -0
  399. package/dist/views/detail/RegisterHome/Proposal.js.map +1 -0
  400. package/dist/views/detail/RegisterHome/index.d.ts +5 -0
  401. package/dist/views/detail/RegisterHome/index.js.map +1 -0
  402. package/dist/views/detail/RegisterHome2/index.d.ts +5 -0
  403. package/dist/views/detail/RegisterHome2/index.js.map +1 -0
  404. package/dist/views/detail/RegisterItem/RelatedItems.d.ts +14 -0
  405. package/dist/views/detail/RegisterItem/RelatedItems.js.map +1 -0
  406. package/dist/views/detail/RegisterItem/SupersedingItemMenu.d.ts +13 -0
  407. package/dist/views/detail/RegisterItem/SupersedingItemMenu.js.map +1 -0
  408. package/dist/views/detail/RegisterItem/index.d.ts +21 -0
  409. package/{views → dist/views}/detail/RegisterItem/index.js +1 -1
  410. package/dist/views/detail/RegisterItem/index.js.map +1 -0
  411. package/dist/views/detail/RegisterItemClass.d.ts +12 -0
  412. package/dist/views/detail/RegisterItemClass.js.map +1 -0
  413. package/dist/views/detail/RegisterMeta/RegisterMetaForm.d.ts +10 -0
  414. package/dist/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -0
  415. package/dist/views/detail/RegisterMeta/index.d.ts +10 -0
  416. package/dist/views/detail/RegisterMeta/index.js.map +1 -0
  417. package/dist/views/detail/index.d.ts +1 -0
  418. package/dist/views/detail/index.js.map +1 -0
  419. package/dist/views/diffing/InlineDiff.d.ts +38 -0
  420. package/dist/views/diffing/InlineDiff.js.map +1 -0
  421. package/dist/views/diffing/StructuredDiff.d.ts +11 -0
  422. package/dist/views/diffing/StructuredDiff.js.map +1 -0
  423. package/dist/views/hooks/useCustomView.d.ts +3 -0
  424. package/dist/views/hooks/useCustomView.js.map +1 -0
  425. package/dist/views/hooks/useItemClassConfig.d.ts +2 -0
  426. package/dist/views/hooks/useItemClassConfig.js.map +1 -0
  427. package/dist/views/hooks/useItemRef.d.ts +3 -0
  428. package/dist/views/hooks/useItemRef.js.map +1 -0
  429. package/dist/views/hooks/useLatestAcceptedProposal.d.ts +2 -0
  430. package/dist/views/hooks/useLatestAcceptedProposal.js.map +1 -0
  431. package/dist/views/hooks/useRegisterVersion.d.ts +5 -0
  432. package/dist/views/hooks/useRegisterVersion.js.map +1 -0
  433. package/dist/views/hooks/useSingleRegisterItemData.d.ts +3 -0
  434. package/dist/views/hooks/useSingleRegisterItemData.js.map +1 -0
  435. package/dist/views/hooks/useStakeholder.d.ts +0 -0
  436. package/dist/views/hooks/useStakeholder.js.map +1 -0
  437. package/dist/views/index.d.ts +8 -0
  438. package/dist/views/index.js.map +1 -0
  439. package/dist/views/itemPathUtils.d.ts +47 -0
  440. package/dist/views/itemPathUtils.js.map +1 -0
  441. package/dist/views/itemQueryUtils.d.ts +12 -0
  442. package/dist/views/itemQueryUtils.js.map +1 -0
  443. package/dist/views/protocolRegistry.d.ts +14 -0
  444. package/dist/views/protocolRegistry.js.map +1 -0
  445. package/dist/views/sidebar/Browse/index.d.ts +11 -0
  446. package/dist/views/sidebar/Browse/index.js.map +1 -0
  447. package/dist/views/sidebar/ExportImport/ExportOptions.d.ts +5 -0
  448. package/dist/views/sidebar/ExportImport/ExportOptions.js.map +1 -0
  449. package/dist/views/sidebar/ExportImport/ImportOptions.d.ts +4 -0
  450. package/dist/views/sidebar/ExportImport/ImportOptions.js.map +1 -0
  451. package/dist/views/sidebar/ExportImport/index.d.ts +3 -0
  452. package/dist/views/sidebar/ExportImport/index.js.map +1 -0
  453. package/dist/views/sidebar/ListItem.d.ts +10 -0
  454. package/dist/views/sidebar/ListItem.js.map +1 -0
  455. package/dist/views/sidebar/Registration/index.d.ts +9 -0
  456. package/dist/views/sidebar/Registration/index.js.map +1 -0
  457. package/dist/views/sidebar/Search/index.d.ts +29 -0
  458. package/{views → dist/views}/sidebar/Search/index.js +1 -1
  459. package/dist/views/sidebar/Search/index.js.map +1 -0
  460. package/dist/views/sidebar/index.d.ts +7 -0
  461. package/dist/views/sidebar/index.js.map +1 -0
  462. package/dist/views/util.d.ts +98 -0
  463. package/{views → dist/views}/util.js +33 -7
  464. package/dist/views/util.js.map +1 -0
  465. package/package.json +1 -1
  466. package/react-visual-diff.d.ts +9 -0
  467. package/views/detail/RegisterItem/index.js.map +0 -1
  468. package/views/util.js.map +0 -1
  469. /package/{common.d.ts → compiled/common.d.ts} +0 -0
  470. /package/{common.js.map → compiled/common.js.map} +0 -0
  471. /package/{index.d.ts → compiled/index.d.ts} +0 -0
  472. /package/{index.js.map → compiled/index.js.map} +0 -0
  473. /package/{item-classes → compiled/item-classes}/Tree.d.ts +0 -0
  474. /package/{item-classes → compiled/item-classes}/Tree.js.map +0 -0
  475. /package/{item-classes → compiled/item-classes}/treeNodes.d.ts +0 -0
  476. /package/{item-classes → compiled/item-classes}/treeNodes.js.map +0 -0
  477. /package/{migrations → compiled/migrations}/initial.d.ts +0 -0
  478. /package/{migrations → compiled/migrations}/initial.js.map +0 -0
  479. /package/{proposals → compiled/proposals}/ChangeRequestContext.d.ts +0 -0
  480. /package/{proposals → compiled/proposals}/ChangeRequestContext.js.map +0 -0
  481. /package/{proposals → compiled/proposals}/HistoryDrawer.d.ts +0 -0
  482. /package/{proposals → compiled/proposals}/HistoryDrawer.js.map +0 -0
  483. /package/{proposals → compiled/proposals}/ListItem.d.ts +0 -0
  484. /package/{proposals → compiled/proposals}/ListItem.js.map +0 -0
  485. /package/{proposals → compiled/proposals}/MetaProperties.d.ts +0 -0
  486. /package/{proposals → compiled/proposals}/MetaProperties.js.map +0 -0
  487. /package/{proposals → compiled/proposals}/NewProposalMenu.d.ts +0 -0
  488. /package/{proposals → compiled/proposals}/NewProposalMenu.js.map +0 -0
  489. /package/{proposals → compiled/proposals}/ProposalBrowser.d.ts +0 -0
  490. /package/{proposals → compiled/proposals}/ProposalBrowser.js.map +0 -0
  491. /package/{proposals → compiled/proposals}/ProposalDetail.d.ts +0 -0
  492. /package/{proposals → compiled/proposals}/ProposalDetail.js.map +0 -0
  493. /package/{proposals → compiled/proposals}/ProposalItem.d.ts +0 -0
  494. /package/{proposals → compiled/proposals}/ProposalItem.js.map +0 -0
  495. /package/{proposals → compiled/proposals}/ProposalSummary.d.ts +0 -0
  496. /package/{proposals → compiled/proposals}/ProposalSummary.js.map +0 -0
  497. /package/{proposals → compiled/proposals}/ProposalTab.d.ts +0 -0
  498. /package/{proposals → compiled/proposals}/ProposalTab.js.map +0 -0
  499. /package/{proposals → compiled/proposals}/ProposalType.d.ts +0 -0
  500. /package/{proposals → compiled/proposals}/ProposalType.js.map +0 -0
  501. /package/{proposals → compiled/proposals}/ProposalWorkspace.d.ts +0 -0
  502. /package/{proposals → compiled/proposals}/ProposalWorkspace.js.map +0 -0
  503. /package/{proposals → compiled/proposals}/Search.d.ts +0 -0
  504. /package/{proposals → compiled/proposals}/Search.js.map +0 -0
  505. /package/{proposals → compiled/proposals}/TransitionHistory.d.ts +0 -0
  506. /package/{proposals → compiled/proposals}/TransitionHistory.js.map +0 -0
  507. /package/{proposals → compiled/proposals}/TransitionOptions.d.ts +0 -0
  508. /package/{proposals → compiled/proposals}/TransitionOptions.js.map +0 -0
  509. /package/{proposals → compiled/proposals}/actionableGroups/Tree.d.ts +0 -0
  510. /package/{proposals → compiled/proposals}/actionableGroups/Tree.js.map +0 -0
  511. /package/{proposals → compiled/proposals}/actionableGroups/queries.d.ts +0 -0
  512. /package/{proposals → compiled/proposals}/actionableGroups/queries.js.map +0 -0
  513. /package/{proposals → compiled/proposals}/actionableGroups/treeNodes.d.ts +0 -0
  514. /package/{proposals → compiled/proposals}/actionableGroups/treeNodes.js.map +0 -0
  515. /package/{proposals → compiled/proposals}/actionableGroups/types.d.ts +0 -0
  516. /package/{proposals → compiled/proposals}/actionableGroups/types.js.map +0 -0
  517. /package/{proposals → compiled/proposals}/index.d.ts +0 -0
  518. /package/{proposals → compiled/proposals}/index.js.map +0 -0
  519. /package/{proposals → compiled/proposals}/objectChangeset.d.ts +0 -0
  520. /package/{proposals → compiled/proposals}/objectChangeset.js.map +0 -0
  521. /package/{proposals → compiled/proposals}/queries.d.ts +0 -0
  522. /package/{proposals → compiled/proposals}/queries.js.map +0 -0
  523. /package/{proposals → compiled/proposals}/types.d.ts +0 -0
  524. /package/{proposals → compiled/proposals}/types.js.map +0 -0
  525. /package/{types → compiled/types}/index.d.ts +0 -0
  526. /package/{types → compiled/types}/index.js.map +0 -0
  527. /package/{types → compiled/types}/item.d.ts +0 -0
  528. /package/{types → compiled/types}/item.js.map +0 -0
  529. /package/{types → compiled/types}/register.d.ts +0 -0
  530. /package/{types → compiled/types}/register.js.map +0 -0
  531. /package/{types → compiled/types}/registry.d.ts +0 -0
  532. /package/{types → compiled/types}/registry.js.map +0 -0
  533. /package/{types → compiled/types}/stakeholder.d.ts +0 -0
  534. /package/{types → compiled/types}/stakeholder.js.map +0 -0
  535. /package/{types → compiled/types}/util.d.ts +0 -0
  536. /package/{types → compiled/types}/util.js.map +0 -0
  537. /package/{types → compiled/types}/views.d.ts +0 -0
  538. /package/{types → compiled/types}/views.js.map +0 -0
  539. /package/{views → compiled/views}/AnnotatedChange.d.ts +0 -0
  540. /package/{views → compiled/views}/AnnotatedChange.js.map +0 -0
  541. /package/{views → compiled/views}/BrowserCtx.d.ts +0 -0
  542. /package/{views → compiled/views}/BrowserCtx.js.map +0 -0
  543. /package/{views → compiled/views}/FilterCriteria/CRITERIA_CONFIGURATION.d.ts +0 -0
  544. /package/{views → compiled/views}/FilterCriteria/CRITERIA_CONFIGURATION.js.map +0 -0
  545. /package/{views → compiled/views}/FilterCriteria/criteriaGroupToQueryExpression.d.ts +0 -0
  546. /package/{views → compiled/views}/FilterCriteria/criteriaGroupToQueryExpression.js.map +0 -0
  547. /package/{views → compiled/views}/FilterCriteria/criteriaGroupToSummary.d.ts +0 -0
  548. /package/{views → compiled/views}/FilterCriteria/criteriaGroupToSummary.js.map +0 -0
  549. /package/{views → compiled/views}/FilterCriteria/criteriaToNodes.d.ts +0 -0
  550. /package/{views → compiled/views}/FilterCriteria/criteriaToNodes.js.map +0 -0
  551. /package/{views → compiled/views}/FilterCriteria/index.d.ts +0 -0
  552. /package/{views → compiled/views}/FilterCriteria/index.js.map +0 -0
  553. /package/{views → compiled/views}/FilterCriteria/models.d.ts +0 -0
  554. /package/{views → compiled/views}/FilterCriteria/models.js.map +0 -0
  555. /package/{views → compiled/views}/FilterCriteria/mutateGroup.d.ts +0 -0
  556. /package/{views → compiled/views}/FilterCriteria/mutateGroup.js.map +0 -0
  557. /package/{views → compiled/views}/GenericRelatedItemView.d.ts +0 -0
  558. /package/{views → compiled/views}/GenericRelatedItemView.js.map +0 -0
  559. /package/{views → compiled/views}/ItemDetailsDrawer.d.ts +0 -0
  560. /package/{views → compiled/views}/ItemDetailsDrawer.js.map +0 -0
  561. /package/{views → compiled/views}/ItemSearchDrawer.d.ts +0 -0
  562. /package/{views → compiled/views}/ItemSearchDrawer.js.map +0 -0
  563. /package/{views → compiled/views}/Party.d.ts +0 -0
  564. /package/{views → compiled/views}/Party.js.map +0 -0
  565. /package/{views → compiled/views}/RegisterStakeholder.d.ts +0 -0
  566. /package/{views → compiled/views}/RegisterStakeholder.js.map +0 -0
  567. /package/{views → compiled/views}/RegisterVersion.d.ts +0 -0
  568. /package/{views → compiled/views}/RegisterVersion.js.map +0 -0
  569. /package/{views → compiled/views}/SearchQuery.d.ts +0 -0
  570. /package/{views → compiled/views}/SearchQuery.js.map +0 -0
  571. /package/{views → compiled/views}/StatefulTree.d.ts +0 -0
  572. /package/{views → compiled/views}/StatefulTree.js.map +0 -0
  573. /package/{views → compiled/views}/detail/AllItems.d.ts +0 -0
  574. /package/{views → compiled/views}/detail/AllItems.js.map +0 -0
  575. /package/{views → compiled/views}/detail/ChangeRequest/index.d.ts +0 -0
  576. /package/{views → compiled/views}/detail/ChangeRequest/index.js.map +0 -0
  577. /package/{views → compiled/views}/detail/CustomView/index.d.ts +0 -0
  578. /package/{views → compiled/views}/detail/CustomView/index.js.map +0 -0
  579. /package/{views → compiled/views}/detail/ProposalWork.d.ts +0 -0
  580. /package/{views → compiled/views}/detail/ProposalWork.js.map +0 -0
  581. /package/{views → compiled/views}/detail/RegisterHome/ActiveProposalDetails.d.ts +0 -0
  582. /package/{views → compiled/views}/detail/RegisterHome/ActiveProposalDetails.js.map +0 -0
  583. /package/{views → compiled/views}/detail/RegisterHome/Block.d.ts +0 -0
  584. /package/{views → compiled/views}/detail/RegisterHome/Block.js.map +0 -0
  585. /package/{views → compiled/views}/detail/RegisterHome/MetaSummary.d.ts +0 -0
  586. /package/{views → compiled/views}/detail/RegisterHome/MetaSummary.js.map +0 -0
  587. /package/{views → compiled/views}/detail/RegisterHome/Proposal.d.ts +0 -0
  588. /package/{views → compiled/views}/detail/RegisterHome/Proposal.js.map +0 -0
  589. /package/{views → compiled/views}/detail/RegisterHome/index.d.ts +0 -0
  590. /package/{views → compiled/views}/detail/RegisterHome/index.js.map +0 -0
  591. /package/{views → compiled/views}/detail/RegisterHome2/index.d.ts +0 -0
  592. /package/{views → compiled/views}/detail/RegisterHome2/index.js.map +0 -0
  593. /package/{views → compiled/views}/detail/RegisterItem/RelatedItems.d.ts +0 -0
  594. /package/{views → compiled/views}/detail/RegisterItem/RelatedItems.js.map +0 -0
  595. /package/{views → compiled/views}/detail/RegisterItem/SupersedingItemMenu.d.ts +0 -0
  596. /package/{views → compiled/views}/detail/RegisterItem/SupersedingItemMenu.js.map +0 -0
  597. /package/{views → compiled/views}/detail/RegisterItem/index.d.ts +0 -0
  598. /package/{views → compiled/views}/detail/RegisterItemClass.d.ts +0 -0
  599. /package/{views → compiled/views}/detail/RegisterItemClass.js.map +0 -0
  600. /package/{views → compiled/views}/detail/RegisterMeta/RegisterMetaForm.d.ts +0 -0
  601. /package/{views → compiled/views}/detail/RegisterMeta/RegisterMetaForm.js.map +0 -0
  602. /package/{views → compiled/views}/detail/RegisterMeta/index.d.ts +0 -0
  603. /package/{views → compiled/views}/detail/RegisterMeta/index.js.map +0 -0
  604. /package/{views → compiled/views}/detail/index.d.ts +0 -0
  605. /package/{views → compiled/views}/detail/index.js.map +0 -0
  606. /package/{views → compiled/views}/diffing/InlineDiff.d.ts +0 -0
  607. /package/{views → compiled/views}/diffing/InlineDiff.js.map +0 -0
  608. /package/{views → compiled/views}/diffing/StructuredDiff.d.ts +0 -0
  609. /package/{views → compiled/views}/diffing/StructuredDiff.js.map +0 -0
  610. /package/{views → compiled/views}/hooks/useCustomView.d.ts +0 -0
  611. /package/{views → compiled/views}/hooks/useCustomView.js.map +0 -0
  612. /package/{views → compiled/views}/hooks/useItemClassConfig.d.ts +0 -0
  613. /package/{views → compiled/views}/hooks/useItemClassConfig.js.map +0 -0
  614. /package/{views → compiled/views}/hooks/useItemRef.d.ts +0 -0
  615. /package/{views → compiled/views}/hooks/useItemRef.js.map +0 -0
  616. /package/{views → compiled/views}/hooks/useLatestAcceptedProposal.d.ts +0 -0
  617. /package/{views → compiled/views}/hooks/useLatestAcceptedProposal.js.map +0 -0
  618. /package/{views → compiled/views}/hooks/useRegisterVersion.d.ts +0 -0
  619. /package/{views → compiled/views}/hooks/useRegisterVersion.js.map +0 -0
  620. /package/{views → compiled/views}/hooks/useSingleRegisterItemData.d.ts +0 -0
  621. /package/{views → compiled/views}/hooks/useSingleRegisterItemData.js.map +0 -0
  622. /package/{views → compiled/views}/hooks/useStakeholder.d.ts +0 -0
  623. /package/{views → compiled/views}/hooks/useStakeholder.js.map +0 -0
  624. /package/{views → compiled/views}/index.d.ts +0 -0
  625. /package/{views → compiled/views}/index.js.map +0 -0
  626. /package/{views → compiled/views}/itemPathUtils.d.ts +0 -0
  627. /package/{views → compiled/views}/itemPathUtils.js.map +0 -0
  628. /package/{views → compiled/views}/itemQueryUtils.d.ts +0 -0
  629. /package/{views → compiled/views}/itemQueryUtils.js.map +0 -0
  630. /package/{views → compiled/views}/protocolRegistry.d.ts +0 -0
  631. /package/{views → compiled/views}/protocolRegistry.js.map +0 -0
  632. /package/{views → compiled/views}/sidebar/Browse/index.d.ts +0 -0
  633. /package/{views → compiled/views}/sidebar/Browse/index.js.map +0 -0
  634. /package/{views → compiled/views}/sidebar/ExportImport/ExportOptions.d.ts +0 -0
  635. /package/{views → compiled/views}/sidebar/ExportImport/ExportOptions.js.map +0 -0
  636. /package/{views → compiled/views}/sidebar/ExportImport/ImportOptions.d.ts +0 -0
  637. /package/{views → compiled/views}/sidebar/ExportImport/ImportOptions.js.map +0 -0
  638. /package/{views → compiled/views}/sidebar/ExportImport/index.d.ts +0 -0
  639. /package/{views → compiled/views}/sidebar/ExportImport/index.js.map +0 -0
  640. /package/{views → compiled/views}/sidebar/ListItem.d.ts +0 -0
  641. /package/{views → compiled/views}/sidebar/ListItem.js.map +0 -0
  642. /package/{views → compiled/views}/sidebar/Registration/index.d.ts +0 -0
  643. /package/{views → compiled/views}/sidebar/Registration/index.js.map +0 -0
  644. /package/{views → compiled/views}/sidebar/Search/index.d.ts +0 -0
  645. /package/{views → compiled/views}/sidebar/index.d.ts +0 -0
  646. /package/{views → compiled/views}/sidebar/index.js.map +0 -0
  647. /package/{views → compiled/views}/util.d.ts +0 -0
  648. /package/{proposals/actionableGroups → dependencies-local/extension-kit/i18n}/types.js +0 -0
  649. /package/{types/util.js → dependencies-local/extension-kit/types/binary-invocation.js} +0 -0
  650. /package/{types/views.js → dependencies-local/extension-kit/types/buffers.js} +0 -0
  651. /package/{common.js → dist/common.js} +0 -0
  652. /package/{index.js → dist/index.js} +0 -0
  653. /package/{item-classes → dist/item-classes}/Tree.js +0 -0
  654. /package/{item-classes → dist/item-classes}/treeNodes.js +0 -0
  655. /package/{migrations → dist/migrations}/initial.js +0 -0
  656. /package/{proposals → dist/proposals}/ChangeRequestContext.js +0 -0
  657. /package/{proposals → dist/proposals}/HistoryDrawer.js +0 -0
  658. /package/{proposals → dist/proposals}/ListItem.js +0 -0
  659. /package/{proposals → dist/proposals}/MetaProperties.js +0 -0
  660. /package/{proposals → dist/proposals}/NewProposalMenu.js +0 -0
  661. /package/{proposals → dist/proposals}/ProposalBrowser.js +0 -0
  662. /package/{proposals → dist/proposals}/ProposalDetail.js +0 -0
  663. /package/{proposals → dist/proposals}/ProposalItem.js +0 -0
  664. /package/{proposals → dist/proposals}/ProposalSummary.js +0 -0
  665. /package/{proposals → dist/proposals}/ProposalTab.js +0 -0
  666. /package/{proposals → dist/proposals}/ProposalType.js +0 -0
  667. /package/{proposals → dist/proposals}/ProposalWorkspace.js +0 -0
  668. /package/{proposals → dist/proposals}/Search.js +0 -0
  669. /package/{proposals → dist/proposals}/TransitionHistory.js +0 -0
  670. /package/{proposals → dist/proposals}/TransitionOptions.js +0 -0
  671. /package/{proposals → dist/proposals}/actionableGroups/Tree.js +0 -0
  672. /package/{proposals → dist/proposals}/actionableGroups/queries.js +0 -0
  673. /package/{proposals → dist/proposals}/actionableGroups/treeNodes.js +0 -0
  674. /package/{proposals → dist/proposals}/index.js +0 -0
  675. /package/{proposals → dist/proposals}/objectChangeset.js +0 -0
  676. /package/{proposals → dist/proposals}/queries.js +0 -0
  677. /package/{proposals → dist/proposals}/types.js +0 -0
  678. /package/{types → dist/types}/index.js +0 -0
  679. /package/{types → dist/types}/item.js +0 -0
  680. /package/{types → dist/types}/register.js +0 -0
  681. /package/{types → dist/types}/registry.js +0 -0
  682. /package/{types → dist/types}/stakeholder.js +0 -0
  683. /package/{views → dist/views}/AnnotatedChange.js +0 -0
  684. /package/{views → dist/views}/BrowserCtx.js +0 -0
  685. /package/{views → dist/views}/FilterCriteria/CRITERIA_CONFIGURATION.js +0 -0
  686. /package/{views → dist/views}/FilterCriteria/criteriaGroupToQueryExpression.js +0 -0
  687. /package/{views → dist/views}/FilterCriteria/criteriaGroupToSummary.js +0 -0
  688. /package/{views → dist/views}/FilterCriteria/criteriaToNodes.js +0 -0
  689. /package/{views → dist/views}/FilterCriteria/index.js +0 -0
  690. /package/{views → dist/views}/FilterCriteria/models.js +0 -0
  691. /package/{views → dist/views}/FilterCriteria/mutateGroup.js +0 -0
  692. /package/{views → dist/views}/GenericRelatedItemView.js +0 -0
  693. /package/{views → dist/views}/ItemDetailsDrawer.js +0 -0
  694. /package/{views → dist/views}/ItemSearchDrawer.js +0 -0
  695. /package/{views → dist/views}/Party.js +0 -0
  696. /package/{views → dist/views}/RegisterStakeholder.js +0 -0
  697. /package/{views → dist/views}/RegisterVersion.js +0 -0
  698. /package/{views → dist/views}/SearchQuery.js +0 -0
  699. /package/{views → dist/views}/StatefulTree.js +0 -0
  700. /package/{views → dist/views}/detail/AllItems.js +0 -0
  701. /package/{views → dist/views}/detail/ChangeRequest/index.js +0 -0
  702. /package/{views → dist/views}/detail/CustomView/index.js +0 -0
  703. /package/{views → dist/views}/detail/ProposalWork.js +0 -0
  704. /package/{views → dist/views}/detail/RegisterHome/ActiveProposalDetails.js +0 -0
  705. /package/{views → dist/views}/detail/RegisterHome/Block.js +0 -0
  706. /package/{views → dist/views}/detail/RegisterHome/MetaSummary.js +0 -0
  707. /package/{views → dist/views}/detail/RegisterHome/Proposal.js +0 -0
  708. /package/{views → dist/views}/detail/RegisterHome/index.js +0 -0
  709. /package/{views → dist/views}/detail/RegisterHome2/index.js +0 -0
  710. /package/{views → dist/views}/detail/RegisterItem/RelatedItems.js +0 -0
  711. /package/{views → dist/views}/detail/RegisterItem/SupersedingItemMenu.js +0 -0
  712. /package/{views → dist/views}/detail/RegisterItemClass.js +0 -0
  713. /package/{views → dist/views}/detail/RegisterMeta/RegisterMetaForm.js +0 -0
  714. /package/{views → dist/views}/detail/RegisterMeta/index.js +0 -0
  715. /package/{views → dist/views}/detail/index.js +0 -0
  716. /package/{views → dist/views}/diffing/InlineDiff.js +0 -0
  717. /package/{views → dist/views}/diffing/StructuredDiff.js +0 -0
  718. /package/{views → dist/views}/hooks/useCustomView.js +0 -0
  719. /package/{views → dist/views}/hooks/useItemClassConfig.js +0 -0
  720. /package/{views → dist/views}/hooks/useItemRef.js +0 -0
  721. /package/{views → dist/views}/hooks/useLatestAcceptedProposal.js +0 -0
  722. /package/{views → dist/views}/hooks/useRegisterVersion.js +0 -0
  723. /package/{views → dist/views}/hooks/useSingleRegisterItemData.js +0 -0
  724. /package/{views → dist/views}/hooks/useStakeholder.js +0 -0
  725. /package/{views → dist/views}/index.js +0 -0
  726. /package/{views → dist/views}/itemPathUtils.js +0 -0
  727. /package/{views → dist/views}/itemQueryUtils.js +0 -0
  728. /package/{views → dist/views}/protocolRegistry.js +0 -0
  729. /package/{views → dist/views}/sidebar/Browse/index.js +0 -0
  730. /package/{views → dist/views}/sidebar/ExportImport/ExportOptions.js +0 -0
  731. /package/{views → dist/views}/sidebar/ExportImport/ImportOptions.js +0 -0
  732. /package/{views → dist/views}/sidebar/ExportImport/index.js +0 -0
  733. /package/{views → dist/views}/sidebar/ListItem.js +0 -0
  734. /package/{views → dist/views}/sidebar/Registration/index.js +0 -0
  735. /package/{views → dist/views}/sidebar/index.js +0 -0
@@ -0,0 +1,31 @@
1
+ /** @jsx jsx */
2
+ /** @jsxFrag React.Fragment */
3
+ import React from 'react';
4
+ import { type RegisterStakeholder } from '../types/stakeholder';
5
+ import * as CR from './types';
6
+ /**
7
+ * Transition history entry is mostly like `CR.TransitionEntry`,
8
+ * except it has optional fields and can be `undefined` to represent
9
+ * missing parts of history.
10
+ */
11
+ export declare type TransitionHistoryEntry = Omit<CR.TransitionEntry, 'timestamp' | 'fromState' | 'stakeholder' | 'input'> & {
12
+ timestamp?: Date;
13
+ fromState?: CR.StateType;
14
+ stakeholder?: RegisterStakeholder;
15
+ input?: CR.StateInput;
16
+ } | undefined;
17
+ /**
18
+ * Outputs transition history,
19
+ * back-filling it from state and timestamps if `pastTransitions` is not present.
20
+ */
21
+ export declare function getTransitionHistory(cr: CR.Base): TransitionHistoryEntry[];
22
+ /**
23
+ * Lists transitions between states,
24
+ * emphasizing the end (current as of now) state.
25
+ */
26
+ export declare const TransitionsAndStatus: React.VoidFunctionComponent<{
27
+ pastTransitions: TransitionHistoryEntry[];
28
+ isFinal?: boolean;
29
+ detailed?: boolean;
30
+ }>;
31
+ export default TransitionsAndStatus;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransitionHistory.js","sourceRoot":"","sources":["../../src/proposals/TransitionHistory.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport styled from '@emotion/styled';\nimport { jsx, css } from '@emotion/react';\nimport React from 'react';\nimport { Icon, Colors } from '@blueprintjs/core';\n\nimport { normalizeObjectRecursively } from '@riboseinc/paneron-extension-kit/util';\nimport HelpTooltip from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\n\nimport { Val } from '../views/diffing/InlineDiff';\nimport { Datestamp } from '../views/util';\nimport { registerStakeholderPlain } from '../views/RegisterStakeholder';\nimport { type RegisterStakeholder } from '../types/stakeholder';\n\nimport * as CR from './types';\nimport { STATE_COLOR } from './TransitionOptions';\n\n\n/**\n * Transition history entry is mostly like `CR.TransitionEntry`,\n * except it has optional fields and can be `undefined` to represent\n * missing parts of history.\n */\nexport type TransitionHistoryEntry = Omit<CR.TransitionEntry, 'timestamp' | 'fromState' | 'stakeholder' | 'input'> & {\n timestamp?: Date\n fromState?: CR.StateType\n stakeholder?: RegisterStakeholder\n input?: CR.StateInput\n} | undefined;\n\n\n/**\n * Outputs transition history,\n * back-filling it from state and timestamps if `pastTransitions` is not present.\n */\nexport function getTransitionHistory(cr: CR.Base): TransitionHistoryEntry[] {\n if (cr.pastTransitions && cr.pastTransitions.length > 0) {\n return [{\n label: \"Create\",\n toState: CR.State.DRAFT,\n timestamp: (cr as CR.Drafted).timeStarted,\n }, ...cr.pastTransitions];\n\n } else {\n const els: TransitionHistoryEntry[] = [];\n\n els.push({\n label: \"Create\",\n toState: CR.State.DRAFT,\n timestamp: (cr as CR.Drafted).timeStarted,\n });\n\n if (!CR.isDrafted(cr)) {\n els.push(undefined);\n }\n\n // Backward compatibility\n\n if (CR.isProposed(cr)) {\n els.push({\n label: \"Propose\",\n toState: CR.State.PROPOSED,\n timestamp: cr.timeProposed,\n input: { justification: cr.justification },\n });\n }\n\n if (CR.isSubmittedForControlBodyReview(cr)) {\n els.push({\n label: \"Submit for control body review\",\n fromState: CR.State.PROPOSED,\n toState: CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW,\n input: { registerManagerNotes: cr.registerManagerNotes },\n });\n }\n\n if (CR.isReturnedForClarification(cr)) {\n els.push({\n label: \"Return for clarification\",\n toState: CR.State.RETURNED_FOR_CLARIFICATION,\n input: {\n registerManagerNotes: cr.registerManagerNotes,\n //controlBodyNotes: (cr as any).controlBodyNotes,\n controlBodyDecisionEvent: (cr as any).controlBodyDecisionEvent,\n },\n });\n }\n\n if (CR.isWithdrawn(cr)) {\n els.push({\n label: \"Withdraw\",\n toState: CR.State.WITHDRAWN,\n timestamp: cr.timeDisposed,\n });\n } else if (CR.isAccepted(cr)) {\n els.push({\n label: \"Accept\",\n toState: CR.State.ACCEPTED,\n timestamp: cr.timeDisposed,\n input: {\n //controlBodyNotes: (cr as any).controlBodyNotes,\n controlBodyDecisionEvent: (cr as any).controlBodyDecisionEvent,\n },\n });\n } else if (CR.isRejected(cr)) {\n els.push({\n label: \"Reject\",\n toState: CR.State.REJECTED,\n timestamp: cr.timeDisposed,\n input: {\n //controlBodyNotes: (cr as any).controlBodyNotes,\n controlBodyDecisionEvent: (cr as any).controlBodyDecisionEvent,\n },\n });\n }\n\n if (CR.isAppealed(cr)) {\n els.push({\n label: \"Appeal\",\n toState: CR.State.APPEALED,\n input: {\n appealReason: cr.appealReason,\n },\n });\n }\n\n if (CR.isRejectedWithAppealWithdrawn(cr)) {\n els.push({\n label: \"Withdraw appeal\",\n toState: CR.State.APPEAL_WITHDRAWN,\n timestamp: cr.timeDisposed,\n });\n } else if (CR.isAcceptedOnAppeal(cr)) {\n els.push({\n label: \"Accept on appeal\",\n toState: CR.State.ACCEPTED_ON_APPEAL,\n timestamp: cr.timeDisposed,\n input: {\n registerOwnerNotes: cr.registerOwnerNotes,\n },\n });\n } else if (CR.isRejectedOnAppeal(cr)) {\n els.push({\n label: \"Uphold rejection\",\n toState: CR.State.REJECTION_UPHELD_ON_APPEAL,\n timestamp: cr.timeDisposed,\n input: {\n registerOwnerNotes: cr.registerOwnerNotes,\n },\n });\n }\n return els;\n }\n}\n\n\n/**\n * Lists transitions between states,\n * emphasizing the end (current as of now) state.\n */\nexport const TransitionsAndStatus: React.VoidFunctionComponent<{\n pastTransitions: TransitionHistoryEntry[]\n isFinal?: boolean\n detailed?: boolean\n}> = function ({ pastTransitions, isFinal, detailed }) {\n return (\n <>\n {pastTransitions.map((entry, idx) => {\n if (entry) {\n const { label, stakeholder, fromState, toState, input, timestamp } = entry;\n const details = input || timestamp || stakeholder\n ? <>\n {input\n ? <div css={css`margin: .25em 0;`}>\n <Val val={normalizeObjectRecursively(input)} />\n </div>\n : null}\n <small css={css`display: block;`}>\n {stakeholder\n ? <span>{registerStakeholderPlain(stakeholder)}</span>\n : 'unknown stakeholder'}\n <br />\n at {timestamp\n ? <Datestamp useUTC showTime date={timestamp} />\n : \"unknown time\"}\n </small>\n </>\n : null;\n return <TransitionEntryWrapper\n title={`Transition ${fromState ? `from ${fromState} ` : ''}to ${toState}`}\n css={css`\n background: linear-gradient(\n 345deg,\n ${STATE_COLOR[toState] ?? Colors.GRAY1}aa,\n ${STATE_COLOR[toState] ?? Colors.GRAY1} 50%);\n position: sticky;\n top: ${idx * 3}px;\n z-index: 1;\n ${idx === pastTransitions.length - 1\n ? `\n ${!detailed ? 'font-weight: bold;' : ''}\n ${isFinal\n ? `\n &::before {\n ${transitionEntryDecorativeMarkerFinal}\n }\n `\n : ''}\n `\n : ''}\n ${idx === 0\n ? `\n &::before {\n ${transitionEntryDecorativeMarkerInitial}\n }\n `\n : ''}\n `}\n key={idx}>\n {label}\n {detailed && details ? details : null}\n {!detailed && details\n ? <>&nbsp;<HelpTooltip icon=\"info-sign\" content={<div css={css`display: flex; flex-flow: column nowrap;`}>{details}</div>} />\n </>\n : null}\n </TransitionEntryWrapper>\n } else {\n if (idx > 0 && pastTransitions[idx - 1] !== undefined) {\n return <MissingTransitionEntries />;\n } else {\n // Don’t output multiple missing steps in a row.\n return null;\n }\n }\n })}\n </>\n );\n};\n\n\n/** Shown in place of transition entries, if some are missing. */\nconst MissingTransitionEntries: React.VoidFunctionComponent<Record<never, never>> = function () {\n return (\n <div title=\"No detailed state transitions available\">\n <Icon\n icon=\"more\"\n css={css`\n position: relative;\n left: ${TRANSITION_ENTRY_MARKER_SIDE_OFFSET_PX}px;\n transform: translateX(-50%);\n `}\n />\n </div>\n );\n};\n\n\nconst TRANSITION_ENTRY_MARKER_SIDE_OFFSET_PX = 22;\n\n/**\n * Style rules for pseudo-element that contains decorative marker line with a circle.\n */\nconst transitionEntryDecorativeMarker = `\n content: \" \";\n background: white;\n display: block;\n overflow: hidden;\n z-index: 1;\n position: absolute;\n left: ${TRANSITION_ENTRY_MARKER_SIDE_OFFSET_PX}px;\n\n transform: translateX(-50%);\n top: 0;\n width: 2px;\n bottom: 0;\n`;\n\n/**\n * Style rules for pseudo-element that contains decorative marker line with a circle.\n */\nconst transitionEntryDecorativeMarkerInitial = `\n top: 50%;\n`;\n\n/**\n * Style rules for pseudo-element that contains decorative marker line with a circle.\n */\nconst transitionEntryDecorativeMarkerFinal = `\n bottom: 50%;\n`;\n\n\nconst TransitionEntryWrapper = styled.div`\n position: relative;\n color: white;\n padding: 10px;\n padding-left: ${TRANSITION_ENTRY_MARKER_SIDE_OFFSET_PX + 20}px;\n margin-bottom: 1px;\n\n &::after {\n content: \" \";\n background: white;\n display: block;\n overflow: hidden;\n z-index: 1;\n position: absolute;\n left: ${TRANSITION_ENTRY_MARKER_SIDE_OFFSET_PX}px;\n\n transform: translateX(-50%) translateY(-50%);\n top: 50%;\n width: 10px;\n height: 10px;\n border-radius: 100%;\n }\n\n &::before {\n ${transitionEntryDecorativeMarker}\n }\n`;\n\n\nexport default TransitionsAndStatus;\n"]}
@@ -0,0 +1,38 @@
1
+ /** @jsx jsx */
2
+ /** @jsxFrag React.Fragment */
3
+ import { jsx } from '@emotion/react';
4
+ import { type Intent, Colors } from '@blueprintjs/core';
5
+ import type { RegisterStakeholder } from '../types';
6
+ import * as CR from './types';
7
+ export interface TransitionOptions<C extends CR.SomeCR> {
8
+ cr: C;
9
+ transitions: PossibleTransitionForCR<C>[];
10
+ stakeholder?: RegisterStakeholder;
11
+ className?: string;
12
+ }
13
+ declare function TransitionOptions<C extends CR.SomeCR>({ cr, transitions, stakeholder, className }: TransitionOptions<C>): jsx.JSX.Element;
14
+ declare type PossibleTransitionForCR<CR extends CR.Base> = [
15
+ targetState: CR.StateType,
16
+ cfg: CR.TransitionConfig<CR, CR.SomeCR, any>
17
+ ];
18
+ /**
19
+ * Returns a list of transitions
20
+ * that can be performed on given CR by given stakeholder.
21
+ */
22
+ export declare function getTransitions<CR extends CR.Base>(cr: CR, stakeholder: RegisterStakeholder): PossibleTransitionForCR<CR>[];
23
+ /**
24
+ * Returns true if given CR can be transitioned
25
+ * *and* given stakeholder is eligible to transition it.
26
+ */
27
+ export declare function canBeTransitionedBy(stakeholder: RegisterStakeholder, cr: CR.SomeCR): boolean;
28
+ /**
29
+ * Returns True if there is no possible transition for given state.
30
+ */
31
+ export declare function isFinalState(state: CR.StateType): boolean;
32
+ export declare const STATE_INTENT: {
33
+ [key in CR.StateType]?: Intent;
34
+ };
35
+ export declare const STATE_COLOR: {
36
+ [key in CR.StateType]?: typeof Colors[keyof typeof Colors];
37
+ };
38
+ export default TransitionOptions;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransitionOptions.js","sourceRoot":"","sources":["../../src/proposals/TransitionOptions.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAmC,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC5H,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAG1E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAkB9B,SAAS,OAAO,CAAC,SAAgB,EAAE,MAAc;IAC/C,QAAQ,MAAM,CAAC,IAAI,EAAE;QACnB,KAAK,kBAAkB;YACrB,OAAO;gBACL,GAAG,SAAS;gBACZ,eAAe,EAAE,SAAS;aAC3B,CAAC;QACJ,KAAK,mBAAmB;YACtB,OAAO;gBACL,GAAG,SAAS;gBACZ,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;aACtC,CAAC;QACJ,KAAK,yBAAyB;YAC5B,OAAO;gBACL,GAAG,SAAS;gBACZ,UAAU,EAAE,MAAM,CAAC,OAAO;aAC3B,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;KACvC;AACH,CAAC;AASD,+JAA+J;AAC/J,SAAS,iBAAiB,CACzB,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAwB;IAChE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,EACJ,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,gCAAgC,GACjC,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAE/B,MAAM,MAAM,GAAG,YAAY,KAAK,SAAS,CAAC;IAE1C,MAAM,YAAY,GAAU,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,sDAAsD;QACtD,eAAe,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,CAAC,SAAS;QACb,UAAU,EAAE,EAAE;KACf,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAEpB,kFAAkF;IAClF,mCAAmC;IACnC,MAAM,CAAE,kBAAkB,EAAE,qBAAqB,CAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElE,MAAM,CAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAE,GACvC,gCAA8E,CAC7E,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EACtB,SAAS,EACT,SAAS,EACT,OAAO,EACP,YAAY,EACZ,IAAI,CAAC,CAAC;IAER,MAAM,qBAAqB,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE;;QAC1C,OAAA,MAAA,CACE,aAAa,IAAI,KAAK,CAAC,eAAe;YACpC,CAAC,CAAC,MAAA,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAG,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,eAAe,CAAC,0CAAG,CAAC,CAAC;YAC/D,CAAC,CAAC,SAAS,CACd,mCAAI,SAAS,CAAA;KAAA,CACf,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;IAExD,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAExE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,EAAE;YACjB,4CAA4C;YAC5C,yEAAyE;YACzE,mCAAmC;YACnC,QAAQ,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;SACxC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,mBAAmB;IACnB,iDAAiD;IACjD,mCAAmC;IACnC,+CAA+C;IAC/C,OAAO;IACP,KAAK;IACL,MAAM;IACN,kBAAkB;IAClB,0BAA0B;IAC1B,0BAA0B;IAC1B,KAAK;IAEL,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,GAEvD,OAAO,CAAC,GAAG,EAAE;;QACX,IAAI,EAAE,IAAI,qBAAqB,EAAE;YAC/B,IAAI;gBACF,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;aAClD;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,SAAS,EAAE,MAAC,CAAS,CAAC,OAAO,mCAAI,GAAG,CAAC,EAAE,CAAC,CAAC;aAClD;YACD,OAAO,CAAC,KAAK,CAAC,UAA2B,EAAE,SAAS,CAAC,CAAC;SACvD;aAAM;YACL,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;SACvD;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,qBAAqB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAElE,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,OAAY,EAAE,EAAE;QACvD,QAAQ,CAAC;YACP,IAAI,EAAE,yBAAyB;YAC/B,OAAO;SACR,CAAC,CAAC;QACH,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,kBAAkB,EAAE;YACtB,MAAM,OAAO,GAAG,UAAU,CACxB,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACzD,GAAG,CAAC,CAAC;YACP,OAAO,SAAS,OAAO,KAAK,YAAY,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC;SACrD;QACD,OAAO,SAAS,IAAI,KAAI,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEhD,MAAM,0BAA0B,GAAG,WAAW,CAC9C,KAAK,WAAW,EAAqC;QACnD,MAAM,YAAY,GAAG,CAAC,MAAM,aAAa,CAAC;YACxC,WAAW,EAAE;gBACX,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;oBACzB,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;oBAC9C,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAG,EAAE,EAAE,CAAC,QAAQ,CAAC;gBACjC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,aAAa,KAAK,cAAc,CAAC;oBAClF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAE,IAAqB,CAAC,kBAAkB,CAAC;aAC7D;SACF,CAAC,CAAC,CAAC,IAAgD,CAAC;QACrD,oDAAoD;QACpD,MAAM,WAAW,GAAG,CAAC,MAAM,aAAa,CAAC;YACvC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;gBAC/E,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAG,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;SACvD,CAAC,CAAC,CAAC,IAAgD,CAAC;QACrD,kDAAkD;QAClD,MAAM,cAAc,GAAG,eAAe;YACpC,CAAC,CAAC,MAAM,eAAe,CACnB,EAAE,CAAC,EAAE,EACL,EAAE,CAAC,KAAK,EACR,YAAY,EACZ,WAAW,EACX,EAAE,iBAAiB,EAAE,CAAC;YAC1B,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;QACvD,sDAAsD;QACtD,OAAO,MAAM,0BAA0B,CACrC,EAAE,CAAC,EAAE,EACL,YAAY,KAAK,SAAS,EAC1B,cAAc,CAAC,SAAS,EACxB,cAAc,CAAC,YAAY,EAC3B,cAAc,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,KAAK,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC;IAErH,MAAM,gBAAgB,GAAG,WAAW,CACpC,KAAK,WAAW,aAA2C,EAAE,UAAyB;;QACpF,IAAI,aAAa,IAAI,aAAa,IAAI,WAAW,IAAI,aAAa,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE;YACvG,MAAM,KAAK,GAAG;gBACZ,GAAI,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAA8B;gBACnE,KAAK,EAAE,aAAa,CAAC,WAAW;aACjC,CAAC;YACF,KAAK,CAAC,eAAe,GAAG;gBACtB,GAAG,CAAC,MAAA,KAAK,CAAC,eAAe,mCAAI,EAAE,CAAC;gBAChC;oBACE,KAAK,EAAE,aAAa,CAAC,KAAK;oBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,SAAS,EAAE,EAAE,CAAC,KAAK;oBACnB,OAAO,EAAE,KAAK,CAAC,KAAK;oBACpB,WAAW;oBACX,KAAK,EAAE,UAAU;iBAClB;aACF,CAAC;YACF,+EAA+E;YAC/E,MAAM,SAAS,GAAoB;gBACjC,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;oBACrB,QAAQ,EAAE,EAAE;oBACZ,QAAQ,EAAE,KAAK;iBAChB;aACF,CAAC;YACF,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBACxD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC;aACnE;YACD,MAAM,aAAa,CAAC;gBAClB,aAAa,EAAE,GAAG,aAAa,CAAC,KAAK,KAAK;gBAC1C,eAAe,EAAE,SAAS;aAC3B,CAAC,CAAC;SACJ;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;SAC/E;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAErE,MAAM,aAAa,GAAG,CACpB,qBAAqB,KAAK,SAAS;WAChC,CAAC,MAAM;WACP,mBAAmB,KAAK,SAAS;WACjC,CAAC,kBAAkB,CACvB,CAAC;IAEF,OAAO,CACL,aAAK,GAAG,EAAE,GAAG,CAAA,0CAA0C,EAAE,SAAS,EAAE,SAAS;QAC1E,WAAW,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC,IAAC,UAAU,IACP,aAAa,EAAE,KAAK,CAAC,eAAe,EACpC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;oBACpD,CAAC,CAAC,QAAQ,CAAC;wBACP,IAAI,EAAE,mBAAmB;wBACzB,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE;qBAC5C,CAAC;oBACJ,CAAC,CAAC,KAAK,CAAC,IACX,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAChC,IAAC,KAAK,IACJ,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,SACL,CACH,CACU;YACf,CAAC,CAAC,IAAI;QACP,CAAA,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,MAAM;YAC5B,CAAC,CAAC,IAAC,OAAO,IACJ,MAAM,EAAE,0BAA0B,KAAK,SAAS,EAChD,SAAS,EAAC,QAAQ,EAClB,aAAa,EAAC,KAAK,EACnB,MAAM,EAAC,SAAS,EAChB,GAAG,EAAE,GAAG,CAAA,UAAU,EAClB,OAAO,EAAE,0BAAG,0BAA0B,CAAI;gBAC5C,IAAC,qBAAqB,CAAC,MAAM,IAC3B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC;wBAC7C,CAAC,CAAC,KAAK,CAAC,UAAU;wBAClB,CAAC,CAAC,EAAE,EACN,QAAQ,EAAE,CAAC,MAAM;wBACf,CAAC,CAAC,mBAAmB;wBACrB,CAAC,CAAC,SAAS,GACb,CACM;YACZ,CAAC,CAAC,IAAI;QACP,qBAAqB;YACpB,CAAC,CAAC,IAAC,MAAM,IACH,QAAQ,EAAE,CAAC,aAAa,EACxB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAC7C,OAAO,EAAE,GAAG,EAAE,CACZ,mBAAmB;oBACjB,CAAC,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAC1D,qBAAqB,EACrB,mBAAmB,CACpB;oBACH,CAAC,CAAC,KAAK,CAAC,IAEb,kBAAkB;gBACjB,CAAC,CAAC;;oBAAe,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,8BAAM,CAAC,CAAI;gBACjH,CAAC,CAAC,qBAAqB,CAAC,KAAK,CACxB;YACX,CAAC,CAAC,IAAI,CACJ,CACP,CAAC;AACJ,CAAC;AAAA,CAAC;AAQF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,EAAM,EACN,WAAgC;IAEhC,MAAM,mBAAmB,GAAG,WAAW,CAAC,EAAE,CAAC,KAA6B,CAAC,CAAC;IAC1E,IAAI,mBAAmB,EAAE;QACvB,OAAO,CACJ,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAmC;YACtE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAC1D,CAAC;KACH;SAAM;QACL,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AAGD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAgC,EAAE,EAAa;IACjF,OAAO,cAAc,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACpD,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAmB;;IAC9C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAA,WAAW,CAAC,KAA6B,CAAC,mCAAI,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACpF,CAAC;AAGD,MAAM,4BAA4B,GAKlC,SAAS,4BAA4B,CAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE;IACjE,OAAO;QACL,GAAG,EAAE;QACL,oBAAoB,EAAE,oBAAoB,aAApB,oBAAoB,cAApB,oBAAoB,GAAI,EAAE;KACjD,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,wBAAwB,GAM9B,SAAS,wBAAwB,CAAE,EAAE,EAAE,EAAE,wBAAwB,EAAE;IACjE,kCAAkC;IAClC,0DAA0D;IAC1D,GAAG;IACH,OAAO;QACL,GAAG,EAAE;QACL,mBAAmB;QACnB,wBAAwB;KACzB,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,WAAW,GAIjB,SAAS,WAAW,CAAE,EAAE,EAAE,EAAE,YAAY,EAAE;IACxC,IAAI,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,EAAE,CAAA,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;KAC/C;IACD,OAAO;QACL,GAAG,EAAE;QACL,YAAY;QACZ,YAAY,EAAE,SAAS;KACxB,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,0BAA0B,GAKhC,SAAS,0BAA0B,CAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE;IAC7D,IAAI,CAAC,CAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,EAAE,CAAA,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;IACD,OAAO;QACL,GAAG,EAAE;QACL,kBAAkB;QAClB,YAAY,EAAE,IAAI,IAAI,EAAE;KACzB,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,qBAAqB,GACgC;IACzD,KAAK,EAAE,UAAU;IACjB,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS;IAC/B,MAAM,EAAE,IAAI;IACZ,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;IAC9F,IAAI,EAAE,CAAC,EAAmB,EAAE,EAAE,CAAC,CAAC;QAC9B,GAAG,EAAE;QACL,YAAY,EAAE,IAAI,IAAI,EAAE;KACzB,CAAC;CACM,CAAC;AAGX,MAAM,oBAAoB,GAGrB,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,gBAAgB;QAC/B,IAAC,uBAAuB,IACtB,QAAQ,QACR,KAAK,EAAE,KAAK,CAAC,aAAa,EAC1B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAChB,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAExD,CACQ,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,uBAAuB,GAA4B,UAAU,KAAK;IACtE,OAAO,IAAC,QAAQ,IACd,IAAI,QACJ,GAAG,EAAE,GAAG,CAAA,mBAAmB,EAC3B,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,KACrB,KAAK,GACT,CAAC;AACL,CAAC,CAAC;AAGF,MAAM,mBAAmB,GAC4C;IACnE,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ;IAC9B,mBAAmB,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CACxC,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CACtE;IACD,MAAM,EAAE,oBAAoB;IAC5B,IAAI,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE;;QAC3B,IAAI,CAAC,CAAA,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,aAAa,0CAAE,IAAI,EAAE,CAAA,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;SAC/C;QACD,OAAO;YACL,GAAG,EAAE;YACL,GAAG,cAAc;YACjB,YAAY,EAAE,IAAI,IAAI,EAAE;SACzB,CAAA;IACH,CAAC;CACF,CAAA;AAGD,MAAM,0BAA0B,GAG3B,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,yBAAyB;QACxC,IAAC,uBAAuB,IACtB,KAAK,EAAE,KAAK,CAAC,oBAAoB,EACjC,QAAQ,QACR,QAAQ,EAAE,GAAG,CAAC,EAAE,CACd,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,EAAE,oBAAoB,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAE/D,CACQ,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,yBAAyB,GAG1B,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL;QAME,IAAC,SAAS,IAAC,KAAK,EAAC,8BAA8B;YAC7C,IAAC,uBAAuB,IACtB,KAAK,EAAE,KAAK,CAAC,wBAAwB,EACrC,QAAQ,QACR,QAAQ,EAAE,GAAG,CAAC,EAAE,CACd,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG;oBACT,2CAA2C;oBAC3C,wBAAwB,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK;iBAClD,CAAC,GAEJ,CACQ,CACX,CACJ,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,mBAAmB,GAGpB,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,mBAAmB;QAClC,IAAC,uBAAuB,IACtB,KAAK,EAAE,KAAK,CAAC,YAAY,EACzB,QAAQ,QACR,QAAQ,EAAE,GAAG,CAAC,EAAE,CACd,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAEvD,CACQ,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,wBAAwB,GAGzB,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,uBAAuB;QACtC,IAAC,uBAAuB,IACtB,KAAK,EAAE,KAAK,CAAC,kBAAkB,EAC/B,QAAQ,QACR,QAAQ,EAAE,GAAG,CAAC,EAAE,CACd,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,EAAE,kBAAkB,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAE7D,CACQ,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,YAAY,GAAuC;IAC9D,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,SAAS;IAC9B,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,SAAS;IAChD,CAAC,EAAE,CAAC,KAAK,CAAC,iCAAiC,CAAC,EAAE,SAAS;IACvD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,SAAS;CAC/B,CAAC;AAGF,MAAM,CAAC,MAAM,WAAW,GAAmE;IACzF,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,KAAK;IACjC,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,MAAM,CAAC,OAAO;IACrD,CAAC,EAAE,CAAC,KAAK,CAAC,iCAAiC,CAAC,EAAE,MAAM,CAAC,KAAK;IAE1D,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO;IACnC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI;IAChC,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,MAAM,CAAC,IAAI;IAElD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM;IAClC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM;CAC7C,CAAC;AAIF,sEAAsE;AACtE,MAAM,WAAW,GAAmB;IAClC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAChB,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,qBAAqB;QAC3C,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,mBAAmB;KACzC;IACD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACnB,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,qBAAqB;QAC3C,CAAC,EAAE,CAAC,KAAK,CAAC,iCAAiC,CAAC,EAAE;YAC5C,KAAK,EAAE,gCAAgC;YACvC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,iCAAiC;YACvD,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;YACtD,MAAM,EAAE,0BAA0B;YAClC,IAAI,EAAE,4BAA4B;SACnC;QACD,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;YACrC,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,0BAA0B;YAChD,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;YACtD,MAAM,EAAE,0BAA0B;YAClC,IAAI,EAAE,SAAS,kCAAkC,CAAC,EAAE,EAAE,OAAO;;gBAC3D,IAAI,CAAC,MAAA,OAAO,CAAC,oBAAoB,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBACtD,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;iBACvF;gBACD,OAAO,4BAA4B,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC;SACF;KACF;IACD,CAAC,EAAE,CAAC,KAAK,CAAC,iCAAiC,CAAC,EAAE;QAC5C,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,qBAAqB;QAC3C,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;YACrC,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,0BAA0B;YAChD,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;YAC1D,MAAM,EAAE,yBAAyB;YACjC,IAAI,EAAE,wBAAwB;SAC/B;QACD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACnB,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ;YAC9B,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;YAC1D,MAAM,EAAE,yBAAyB;YACjC,IAAI,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;gBAC/B,GAAG,wBAAwB,CAAC,EAAE,EAAE,gBAAgB,CAAC;gBACjD,YAAY,EAAE,IAAI,IAAI,EAAE;aACzB,CAAC;SACH;QACD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACnB,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ;YAC9B,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;YAC1D,MAAM,EAAE,yBAAyB;YACjC,IAAI,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;gBAC/B,GAAG,wBAAwB,CAAC,EAAE,EAAE,gBAAgB,CAAC;gBACjD,YAAY,EAAE,IAAI,IAAI,EAAE;aACzB,CAAC;SACH;KACF;IACD,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;QACrC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,mBAAmB;QACxC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,qBAAqB;KAC5C;IACD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACnB,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACnB,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ;YAC9B,mBAAmB,EAAE,EAAE,CAAC,aAAa;YACrC,MAAM,EAAE,mBAAmB;YAC3B,IAAI,EAAE,WAAW;SAClB;KACF;IACD,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACnB,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;YAC3B,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB;YACtC,mBAAmB,EAAE,EAAE,CAAC,aAAa;YACrC,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACb,GAAG,EAAE;gBACL,YAAY,EAAE,IAAI,IAAI,EAAE;aACzB,CAAC;SACH;QACD,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;YAC7B,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB;YACxC,mBAAmB,EAAE,OAAO;YAC5B,MAAM,EAAE,wBAAwB;YAChC,IAAI,EAAE,0BAA0B;SACjC;QACD,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;YACrC,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,0BAA0B;YAChD,mBAAmB,EAAE,OAAO;YAC5B,MAAM,EAAE,wBAAwB;YAChC,IAAI,EAAE,0BAA0B;SACjC;KACF;CACO,CAAC;AAGX,eAAe,iBAAiB,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useState, useContext, useEffect, useMemo, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, RadioGroup, Radio, FormGroup, TextArea, type TextAreaProps, type Intent, Colors } from '@blueprintjs/core';\nimport { Tooltip2 as Tooltip } from '@blueprintjs/popover2';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport type { ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\nimport { BrowserCtx } from '../views/BrowserCtx';\nimport type { RegisterItem, RegisterStakeholder } from '../types';\nimport { isOwner, isControlBody, isManager } from '../types/stakeholder';\nimport { itemPathInCR, crIDToCRPath } from '../views/itemPathUtils';\n\nimport { proposalsToObjectChangeset } from './objectChangeset';\nimport type { Supersession } from './types';\nimport * as CR from './types';\n\n\ninterface State {\n chosenNextState?: CR.StateType;\n\n /**\n * Can contain any fields. Upon transition,\n * they will be validated against selected `chosenNextState`.\n */\n stateInput: Partial<CR.StateInput>;\n}\n\ntype Action =\n | { type: 'unset-next-state' }\n | { type: 'choose-next-state'; payload: { state: CR.StateType } }\n | { type: 'update-next-state-input'; payload: Record<string, any> }\n\nfunction reducer(prevState: State, action: Action) {\n switch (action.type) {\n case 'unset-next-state':\n return {\n ...prevState,\n chosenNextState: undefined,\n };\n case 'choose-next-state':\n return {\n ...prevState,\n chosenNextState: action.payload.state,\n };\n case 'update-next-state-input':\n return {\n ...prevState,\n stateInput: action.payload,\n };\n default:\n throw new Error(\"Unexpected state\");\n }\n}\n\nexport interface TransitionOptions<C extends CR.SomeCR> {\n cr: C\n transitions: PossibleTransitionForCR<C>[]\n stakeholder?: RegisterStakeholder\n className?: string\n}\n\n//export const TransitionOptions: C extends CR.Base ? C[\"state\"] extends keyof CR.Transitions ? React.FC<{ cr: CR.Base }> : never : never = function ({ cr }) {\nfunction TransitionOptions<C extends CR.SomeCR>\n({ cr, transitions, stakeholder, className }: TransitionOptions<C>) {\n const { subregisters, alterApprovedCR } = useContext(BrowserCtx);\n const {\n getObjectData,\n getMapReducedData,\n updateObjects,\n performOperation,\n operationKey,\n usePersistentDatasetStateReducer,\n } = useContext(DatasetContext);\n\n const isBusy = operationKey !== undefined;\n\n const initialState: State = useMemo((() => ({\n // Pre-select next state to first available transition\n chosenNextState: transitions.length > 0\n ? transitions[0][0]\n : undefined,\n stateInput: {},\n })), [transitions]);\n\n // Set to a number of milliseconds to wait for, e.g. after selecting a new action,\n // to avoid accidental transitions.\n const [ waitingForCooldown, setWaitingForCooldown ] = useState(0);\n\n const [ state, dispatch, stateRecalled ] =\n (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n `${cr.id}-${cr.state}`,\n undefined,\n undefined,\n reducer,\n initialState,\n null);\n\n const selectedTransitionCfg = useMemo((() =>\n (\n stateRecalled && state.chosenNextState\n ? transitions.find(([t, ]) => t === state.chosenNextState)?.[1]\n : undefined\n ) ?? undefined\n ), [stateRecalled, state.chosenNextState, transitions]);\n\n useEffect((() => setWaitingForCooldown(2000)), [state.chosenNextState]);\n\n useEffect(() => {\n if (stateRecalled) {\n // Don’t pre-select the next state checkbox.\n // Persisting the state is still useful, since this remembers state input\n // (such as register manager notes)\n dispatch({ type: 'unset-next-state' });\n }\n }, [stateRecalled]);\n\n //useEffect(() => {\n // if (stateRecalled && state.chosenNextState) {\n // if (!selectedTransitionCfg) {\n // dispatch({ type: 'unset-next-state' });\n // }\n // }\n //}, [\n // stateRecalled,\n // state.chosenNextState,\n // selectedTransitionCfg,\n //]);\n\n const [validatedStateInput, stateInputValidationErrors]:\n [CR.StateInput, undefined] | [undefined, string] =\n useMemo(() => {\n if (cr && selectedTransitionCfg) {\n try {\n selectedTransitionCfg.func(cr, state.stateInput);\n } catch (e) {\n return [undefined, (e as any).message ?? `${e}`];\n }\n return [state.stateInput as CR.StateInput, undefined];\n } else {\n return [undefined, \"no CR or no transition selected\"];\n }\n }, [JSON.stringify(cr), selectedTransitionCfg, state.stateInput]);\n\n const handleSetStateInput = useCallback((payload: any) => {\n dispatch({\n type: 'update-next-state-input',\n payload,\n });\n setWaitingForCooldown(5000);\n }, [dispatch, setWaitingForCooldown]);\n\n useEffect(() => {\n if (waitingForCooldown) {\n const timeout = setTimeout(\n (() => setWaitingForCooldown(v => v > 0 ? (v - 100) : v)),\n 100);\n return function cleanUp() { clearTimeout(timeout) };\n }\n return function noop() {};\n }, [waitingForCooldown, setWaitingForCooldown]);\n\n const getItemChangesetAsApproved = useCallback(\n async function (cr: CR.Accepted | CR.AcceptedOnAppeal): Promise<ObjectChangeset> {\n const origItemData = (await getObjectData({\n objectPaths: [\n ...Object.entries(cr.items).\n filter(([, prop]) => prop.type !== 'addition').\n map(([itemPath, ]) => itemPath),\n ...Object.values(cr.items).\n filter(prop => prop.type === 'amendment' && prop.amendmentType === 'supersession').\n flatMap(prop => (prop as Supersession).supersedingItemIDs),\n ],\n })).data as Record<string, RegisterItem<any> | null>;\n //console.debug(\"Got orig item data\", origItemData);\n const newItemData = (await getObjectData({\n objectPaths: Object.entries(cr.items).\n filter(([, prop]) => prop.type === 'clarification' || prop.type === 'addition').\n map(([itemPath, ]) => itemPathInCR(itemPath, cr.id)),\n })).data as Record<string, RegisterItem<any> | null>;\n //console.debug(\"Got new item data\", newItemData);\n const maybeAlteredCR = alterApprovedCR\n ? await alterApprovedCR(\n cr.id,\n cr.items,\n origItemData,\n newItemData,\n { getMapReducedData })\n : { proposals: cr.items, origItemData, newItemData };\n //console.debug(\"Got altered item data\", newItemData);\n return await proposalsToObjectChangeset(\n cr.id,\n subregisters !== undefined,\n maybeAlteredCR.proposals,\n maybeAlteredCR.origItemData,\n maybeAlteredCR.newItemData);\n }, [cr.id, JSON.stringify(cr.items), subregisters === undefined, getObjectData, getMapReducedData, alterApprovedCR]);\n\n const handleTransition = useCallback(\n async function (transitionCfg: typeof selectedTransitionCfg, stateInput: CR.StateInput) {\n if (transitionCfg && updateObjects && stakeholder && transitionCfg.canBeTransitionedBy(stakeholder, cr)) {\n const newCR = {\n ...(transitionCfg.func(cr, stateInput) as Omit<CR.SomeCR, 'state'>),\n state: transitionCfg.targetState,\n };\n newCR.pastTransitions = [\n ...(newCR.pastTransitions ?? []),\n {\n label: transitionCfg.title,\n timestamp: new Date(),\n fromState: cr.state,\n toState: newCR.state,\n stakeholder,\n input: stateInput,\n },\n ];\n //console.debug(\"Transitioning CR\", JSON.stringify(cr), JSON.stringify(newCR));\n const changeset: ObjectChangeset = {\n [crIDToCRPath(cr.id)]: {\n oldValue: cr,\n newValue: newCR,\n },\n };\n if (CR.isAccepted(newCR) || CR.isAcceptedOnAppeal(newCR)) {\n Object.assign(changeset, await getItemChangesetAsApproved(newCR));\n }\n await updateObjects({\n commitMessage: `${transitionCfg.title} CR`,\n objectChangeset: changeset,\n });\n } else {\n throw new Error(\"Either transition is not specified or dataset is read-only\");\n }\n }, [updateObjects, JSON.stringify(stakeholder), JSON.stringify(cr)]);\n\n const canTransition = (\n selectedTransitionCfg !== undefined\n && !isBusy\n && validatedStateInput !== undefined\n && !waitingForCooldown\n );\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className}>\n {transitions.length > 0\n ? <RadioGroup\n selectedValue={state.chosenNextState}\n onChange={(evt) => CR.isState(evt.currentTarget.value)\n ? dispatch({\n type: 'choose-next-state',\n payload: { state: evt.currentTarget.value },\n })\n : void 0}>\n {transitions.map(([state, cfg]) =>\n <Radio\n key={state}\n label={cfg.title}\n value={state}\n disabled={isBusy}\n large\n />\n )}\n </RadioGroup>\n : null}\n {selectedTransitionCfg?.Widget\n ? <Tooltip\n isOpen={stateInputValidationErrors !== undefined}\n placement='bottom'\n targetTagName='div'\n intent='warning'\n css={css`flex: 1;`}\n content={<>{stateInputValidationErrors}</>}>\n <selectedTransitionCfg.Widget\n value={Object.keys(state.stateInput).length > 0\n ? state.stateInput\n : cr}\n onChange={!isBusy\n ? handleSetStateInput\n : undefined}\n />\n </Tooltip>\n : null}\n {selectedTransitionCfg\n ? <Button\n disabled={!canTransition}\n intent={canTransition ? 'primary' : undefined}\n onClick={() =>\n validatedStateInput\n ? performOperation('transitioning CR state', handleTransition)(\n selectedTransitionCfg,\n validatedStateInput,\n )\n : void 0\n }>\n {waitingForCooldown\n ? <>Almost ready{Array(Math.floor(3 - (3 / 5000 * waitingForCooldown) + 1)).fill(undefined).map(() => <>.</>)}</>\n : selectedTransitionCfg.title}\n </Button>\n : null}\n </div>\n );\n};\n\n\ntype PossibleTransitionForCR<CR extends CR.Base> = [\n targetState: CR.StateType,\n cfg: CR.TransitionConfig<CR, CR.SomeCR, any>,\n];\n\n/**\n * Returns a list of transitions\n * that can be performed on given CR by given stakeholder.\n */\nexport function getTransitions<CR extends CR.Base>(\n cr: CR,\n stakeholder: RegisterStakeholder,\n): PossibleTransitionForCR<CR>[] {\n const possibleTransitions = TRANSITIONS[cr.state as keyof CR.Transitions];\n if (possibleTransitions) {\n return (\n (Object.entries(possibleTransitions) as PossibleTransitionForCR<CR>[]).\n filter(([, t]) => t.canBeTransitionedBy(stakeholder, cr))\n );\n } else {\n return [];\n }\n}\n\n\n/**\n * Returns true if given CR can be transitioned\n * *and* given stakeholder is eligible to transition it.\n */\nexport function canBeTransitionedBy(stakeholder: RegisterStakeholder, cr: CR.SomeCR) {\n return getTransitions(cr, stakeholder).length > 0;\n}\n\n\n/**\n * Returns True if there is no possible transition for given state.\n */\nexport function isFinalState(state: CR.StateType): boolean {\n return (Object.keys(TRANSITIONS[state as keyof CR.Transitions] ?? {})).length < 1;\n}\n\n\nconst applyRegisterManagerDecision: CR.Transition<\n CR.Proposed,\n CR.SubmittedForControlBodyReview\n| CR.ReturnedForClarificationByManager,\n CR.RegisterManagerInput> =\nfunction applyRegisterManagerDecision (cr, { registerManagerNotes }) {\n return {\n ...cr,\n registerManagerNotes: registerManagerNotes ?? '',\n };\n}\n\n\nconst applyControlBodyDecision: CR.Transition<\n CR.SubmittedForControlBodyReview,\n CR.Accepted\n| CR.Rejected\n| CR.ReturnedForClarificationByControlBody,\n CR.ControlBodyInput> =\nfunction applyControlBodyDecision (cr, { controlBodyDecisionEvent }) {\n //if (!controlBodyNotes?.trim()) {\n // throw new Error(\"Control body decision is required.\");\n //}\n return {\n ...cr,\n //controlBodyNotes,\n controlBodyDecisionEvent,\n };\n}\n\n\nconst applyAppeal: CR.Transition<\n CR.Rejected,\n CR.Appealed,\n CR.AppealRequest> =\nfunction applyAppeal (cr, { appealReason }) {\n if (!appealReason?.trim()) {\n throw new Error(\"Appeal reason is required.\");\n }\n return {\n ...cr,\n appealReason,\n timeDisposed: undefined,\n };\n}\n\n\nconst applyRegisterOwnerDecision: CR.Transition<\n CR.Appealed,\n CR.AcceptedOnAppeal\n| CR.RejectionUpheld,\n CR.RegisterOwnerInput> =\nfunction applyRegisterOwnerDecision (cr, { registerOwnerNotes }) {\n if (!registerOwnerNotes?.trim()) {\n throw new Error(\"Register owner note is required.\");\n }\n return {\n ...cr,\n registerOwnerNotes,\n timeDisposed: new Date(),\n };\n}\n\n\nconst WITHDRAWAL_TRANSITION:\nCR.TransitionConfig<CR.Withdrawable, CR.Withdrawn, null> = {\n title: \"Withdraw\",\n targetState: CR.State.WITHDRAWN,\n Widget: null,\n canBeTransitionedBy: (stakeholder, cr) => cr.timeProposed && CR.isSubmittedBy(stakeholder, cr),\n func: (cr: CR.Withdrawable) => ({\n ...cr,\n timeDisposed: new Date(),\n }),\n} as const;\n\n\nconst SubmitterInputWidget: React.FC<{\n value: CR.SubmitterInput\n onChange?: (newVal: CR.SubmitterInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Justification:\">\n <TransitionInputTextArea\n required\n value={value.justification}\n onChange={(evt) =>\n onChange?.({ justification: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst TransitionInputTextArea: React.FC<TextAreaProps> = function (props) {\n return <TextArea\n fill\n css={css`resize: vertical;`}\n readOnly={!props.onChange}\n {...props}\n />;\n};\n\n\nconst PROPOSAL_TRANSITION:\nCR.TransitionConfig<CR.Proposable, CR.Proposed, CR.SubmitterInput> = {\n title: \"Propose\",\n targetState: CR.State.PROPOSED,\n canBeTransitionedBy: ((stakeholder, cr) =>\n CR.isSubmittedBy(stakeholder, cr) && Object.keys(cr.items).length > 0\n ),\n Widget: SubmitterInputWidget,\n func: (cr, submitterInput) => {\n if (!submitterInput?.justification?.trim()) {\n throw new Error(\"Justification is required.\");\n }\n return {\n ...cr,\n ...submitterInput,\n timeProposed: new Date(),\n }\n },\n}\n\n\nconst RegisterManagerNotesWidget: React.FC<{\n value: CR.RegisterManagerInput\n onChange?: (newVal: CR.RegisterManagerInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Register manager notes:\">\n <TransitionInputTextArea\n value={value.registerManagerNotes}\n required\n onChange={evt =>\n onChange?.({ registerManagerNotes: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst ControlBodyDecisionWidget: React.FC<{\n value: CR.ControlBodyInput\n onChange?: (newVal: CR.ControlBodyInput) => void\n}> = function ({ value, onChange }) {\n return (\n <>\n {/*\n <ControlBodyNotesWidget\n value={value}\n onChange={onChange}\n />*/}\n <FormGroup label=\"Control Body decision event:\">\n <TransitionInputTextArea\n value={value.controlBodyDecisionEvent}\n required\n onChange={evt =>\n onChange?.({\n //controlBodyNotes: value.controlBodyNotes,\n controlBodyDecisionEvent: evt.currentTarget.value,\n })\n }\n />\n </FormGroup>\n </>\n );\n};\n\n\nconst AppealRequestWidget: React.FC<{\n value: CR.AppealRequest\n onChange?: (newVal: CR.AppealRequest) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Appeal reasoning:\">\n <TransitionInputTextArea\n value={value.appealReason}\n required\n onChange={evt =>\n onChange?.({ appealReason: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nconst RegisterOwnerNotesWidget: React.FC<{\n value: CR.RegisterOwnerInput\n onChange?: (newVal: CR.RegisterOwnerInput) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Register owner notes:\">\n <TransitionInputTextArea\n value={value.registerOwnerNotes}\n required\n onChange={evt =>\n onChange?.({ registerOwnerNotes: evt.currentTarget.value })\n }\n />\n </FormGroup>\n );\n};\n\n\nexport const STATE_INTENT: { [key in CR.StateType]?: Intent } = {\n [CR.State.PROPOSED]: 'primary',\n [CR.State.RETURNED_FOR_CLARIFICATION]: 'primary',\n [CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]: 'primary',\n [CR.State.APPEALED]: 'warning',\n};\n\n\nexport const STATE_COLOR: { [key in CR.StateType]?: typeof Colors[keyof typeof Colors] } = {\n [CR.State.PROPOSED]: Colors.BLUE2,\n [CR.State.RETURNED_FOR_CLARIFICATION]: Colors.ORANGE3,\n [CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]: Colors.BLUE2,\n\n [CR.State.APPEALED]: Colors.ORANGE3,\n [CR.State.REJECTED]: Colors.RED2,\n [CR.State.REJECTION_UPHELD_ON_APPEAL]: Colors.RED2,\n\n [CR.State.ACCEPTED]: Colors.GREEN2,\n [CR.State.ACCEPTED_ON_APPEAL]: Colors.GREEN2,\n};\n\n\n\n/** Associates transition implementation with source/target states. */\nconst TRANSITIONS: CR.Transitions = {\n [CR.State.DRAFT]: {\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n [CR.State.PROPOSED]: PROPOSAL_TRANSITION,\n },\n [CR.State.PROPOSED]: {\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n [CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]: {\n title: \"Submit for control body review\",\n targetState: CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW,\n canBeTransitionedBy: (s) => isOwner(s) || isManager(s),\n Widget: RegisterManagerNotesWidget,\n func: applyRegisterManagerDecision,\n },\n [CR.State.RETURNED_FOR_CLARIFICATION]: {\n title: \"Return for clarification\",\n targetState: CR.State.RETURNED_FOR_CLARIFICATION,\n canBeTransitionedBy: (s) => isOwner(s) || isManager(s),\n Widget: RegisterManagerNotesWidget,\n func: function applyRegisterManagerReturnDecision(cr, payload) {\n if ((payload.registerManagerNotes ?? '').trim() === '') {\n throw new Error(\"Register manager notes are required if returning for clarification\");\n }\n return applyRegisterManagerDecision(cr, payload);\n },\n },\n },\n [CR.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW]: {\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n [CR.State.RETURNED_FOR_CLARIFICATION]: {\n title: \"Return for clarification\",\n targetState: CR.State.RETURNED_FOR_CLARIFICATION,\n canBeTransitionedBy: (s) => isOwner(s) || isControlBody(s),\n Widget: ControlBodyDecisionWidget,\n func: applyControlBodyDecision,\n },\n [CR.State.ACCEPTED]: {\n title: \"Accept\",\n targetState: CR.State.ACCEPTED,\n canBeTransitionedBy: (s) => isOwner(s) || isControlBody(s),\n Widget: ControlBodyDecisionWidget,\n func: (cr, controlBodyInput) => ({\n ...applyControlBodyDecision(cr, controlBodyInput),\n timeDisposed: new Date(),\n }),\n },\n [CR.State.REJECTED]: {\n title: \"Reject\",\n targetState: CR.State.REJECTED,\n canBeTransitionedBy: (s) => isOwner(s) || isControlBody(s),\n Widget: ControlBodyDecisionWidget,\n func: (cr, controlBodyInput) => ({\n ...applyControlBodyDecision(cr, controlBodyInput),\n timeDisposed: new Date(),\n }),\n },\n },\n [CR.State.RETURNED_FOR_CLARIFICATION]: {\n [CR.State.PROPOSED]: PROPOSAL_TRANSITION,\n [CR.State.WITHDRAWN]: WITHDRAWAL_TRANSITION,\n },\n [CR.State.REJECTED]: {\n [CR.State.APPEALED]: {\n title: \"Appeal\",\n targetState: CR.State.APPEALED,\n canBeTransitionedBy: CR.isSubmittedBy,\n Widget: AppealRequestWidget,\n func: applyAppeal,\n },\n },\n [CR.State.APPEALED]: {\n [CR.State.APPEAL_WITHDRAWN]: {\n title: \"Withdraw appeal\",\n targetState: CR.State.APPEAL_WITHDRAWN,\n canBeTransitionedBy: CR.isSubmittedBy,\n Widget: null,\n func: (cr) => ({\n ...cr,\n timeDisposed: new Date(),\n }),\n },\n [CR.State.ACCEPTED_ON_APPEAL]: {\n title: \"Accept on appeal\",\n targetState: CR.State.ACCEPTED_ON_APPEAL,\n canBeTransitionedBy: isOwner,\n Widget: RegisterOwnerNotesWidget,\n func: applyRegisterOwnerDecision,\n },\n [CR.State.REJECTION_UPHELD_ON_APPEAL]: {\n title: \"Uphold rejection\",\n targetState: CR.State.REJECTION_UPHELD_ON_APPEAL,\n canBeTransitionedBy: isOwner,\n Widget: RegisterOwnerNotesWidget,\n func: applyRegisterOwnerDecision,\n },\n },\n} as const;\n\n\nexport default TransitionOptions;\n"]}
@@ -0,0 +1,7 @@
1
+ /** @jsx jsx */
2
+ /** @jsxFrag React.Fragment */
3
+ import React from 'react';
4
+ declare const ActionableCRTree: React.FC<{
5
+ className?: string;
6
+ }>;
7
+ export default ActionableCRTree;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tree.js","sourceRoot":"","sources":["../../../src/proposals/actionableGroups/Tree.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useCallback, useMemo } from 'react';\nimport update from 'immutability-helper';\nimport { jsx, css } from '@emotion/react';\nimport { Colors, Tree } from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport type { SomeCR as CR } from '../types';\nimport { ChangeRequestContext } from '../ChangeRequestContext';\nimport { BrowserCtx } from '../../views/BrowserCtx';\nimport { getActionableProposalGroupsForRoles } from './queries';\nimport { Protocols } from '../../views/protocolRegistry';\nimport {\n type ActionableProposalTreeNode,\n getMapReduceChainsForActionableProposalGroups,\n getActionableProposalGroupsAsTreeNodes,\n} from './treeNodes';\n\n\ninterface State {\n //selectedFolderID: string | null\n selectedItemID: string | null\n expandedFolderIDs: readonly string[]\n}\n\nconst initialState: State = {\n //selectedFolderID: null,\n selectedItemID: null,\n expandedFolderIDs: [],\n} as const;\n\ntype Action =\n | { type: 'select-folder'; payload: { folderID: string | null; }; }\n | { type: 'enter-folder'; payload: { folderID: string; }; }\n | { type: 'exit-folder'; payload: { folderID: string; }; }\n | { type: 'select-item'; payload: { itemID: string | null; }; }\n\n\nconst ActionableCRTree: React.FC<{\n className?: string\n}> =\nfunction ({ className }) {\n const { changeRequest: activeCR } = useContext(ChangeRequestContext);\n const { setActiveChangeRequestID, stakeholder } = useContext(BrowserCtx);\n const { usePersistentDatasetStateReducer, useMapReducedData } = useContext(DatasetContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n\n const [ state, dispatch, ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n 'actionable-proposals',\n undefined,\n undefined,\n (prevState, action) => {\n switch (action.type) {\n case 'select-folder':\n if (prevState.selectedItemID !== action.payload.folderID) {\n return {\n ...prevState,\n selectedItemID: action.payload.folderID,\n };\n } else {\n return prevState;\n }\n case 'enter-folder':\n if (!prevState.expandedFolderIDs.includes(action.payload.folderID)) {\n return {\n ...prevState,\n selectedItemID: action.payload.folderID,\n expandedFolderIDs: update(\n prevState.expandedFolderIDs,\n { $push: [action.payload.folderID] }),\n };\n } else {\n return prevState;\n }\n case 'exit-folder':\n const idx = prevState.expandedFolderIDs.indexOf(action.payload.folderID);\n if (idx >= 0) {\n return {\n ...prevState,\n selectedItemID: action.payload.folderID,\n expandedFolderIDs: update(\n prevState.expandedFolderIDs,\n { $splice: [[idx, 1]] }),\n };\n } else {\n return prevState;\n }\n case 'select-item':\n if (prevState.selectedItemID !== action.payload.itemID) {\n return {\n ...prevState,\n selectedItemID: action.payload.itemID,\n };\n } else {\n return prevState;\n }\n default:\n throw new Error(\"Unexpected browse state\");\n }\n },\n initialState,\n null);\n\n const groups = getActionableProposalGroupsForRoles(stakeholder?.roles ?? []);\n\n const chains = stakeholder\n ? getMapReduceChainsForActionableProposalGroups(groups, stakeholder)\n : {};\n\n const actionableProposalsResult = useMapReducedData({ chains });\n\n const actionableProposals = useMemo(\n (() =>\n Object.entries(actionableProposalsResult.value).\n map(([chainID, chainResult]) => ({\n groupLabel: chainID,\n proposals: (Array.isArray(chainResult)\n // TODO: Validate results\n ? (chainResult as CR[])\n : undefined) || undefined\n }))\n ),\n [actionableProposalsResult.value]);\n\n const nodes = useMemo(\n (() =>\n getActionableProposalGroupsAsTreeNodes(actionableProposals, {\n activeCRID: activeCR?.id,\n expandedGroupLabels: new Set(state.expandedFolderIDs),\n onActivateCR: setActiveChangeRequestID,\n selectedGroup: state.selectedItemID\n ? actionableProposals.\n find(({ groupLabel }) => groupLabel === state.selectedItemID)\n ? state.selectedItemID\n : undefined\n : undefined,\n selectedCRID: state.selectedItemID\n ? actionableProposals.\n flatMap(({ proposals }) => proposals ?? []).\n find(p => p.id === state.selectedItemID)\n ? state.selectedItemID\n : undefined\n : undefined,\n })\n ),\n [activeCR?.id, setActiveChangeRequestID, actionableProposals, state.selectedItemID, state.expandedFolderIDs.join(',')]);\n\n const activate = useCallback(((proposalID: string) => {\n if (proposalID !== activeCR?.id) {\n setActiveChangeRequestID?.(proposalID as string)\n }\n // open proposal dashboard regardless\n spawnTab(Protocols.PROPOSAL_WORK, { atIdx: 0 });\n }), [activeCR?.id, setActiveChangeRequestID, spawnTab]);\n\n const eventHandlers = useMemo((() => ({\n onNodeClick: (node: ActionableProposalTreeNode) =>\n node.nodeData?.type === 'group'\n ? dispatch({\n type: 'select-folder',\n payload: { folderID: node.id as string },\n })\n : dispatch({\n type: 'select-item',\n payload: { itemID: node.id as string },\n }),\n onNodeExpand: (node: ActionableProposalTreeNode) =>\n node.nodeData?.type === 'group'\n ? dispatch({\n type: 'enter-folder',\n payload: { folderID: node.id as string },\n })\n : void 0,\n onNodeCollapse: (node: ActionableProposalTreeNode) =>\n node.nodeData?.type === 'group'\n ? dispatch({\n type: 'exit-folder',\n payload: { folderID: node.id as string },\n })\n : void 0,\n onNodeDoubleClick: (node: ActionableProposalTreeNode) =>\n node.nodeData?.type === 'group'\n ? dispatch({\n type: 'enter-folder',\n payload: { folderID: node.id as string },\n })\n : activate(node.id as string),\n })), [dispatch, activate]);\n\n return <Tree\n className={className}\n contents={nodes}\n css={css`\n .bp4-tree-node {\n &.tree-node-active-proposal, &.tree-node-proposal-group-with-active-proposal:not(.bp4-tree-node-expanded) {\n > .bp4-tree-node-content {\n background: ${Colors.RED5};\n .bp4-dark & {\n background: ${Colors.RED2};\n }\n }\n &.bp4-tree-node-selected > .bp4-tree-node-content {\n background: ${Colors.RED3};\n }\n }\n }\n `}\n {...eventHandlers}\n />;\n}\n\nexport default ActionableCRTree;\n"]}
@@ -0,0 +1,4 @@
1
+ import type { StakeholderRoleType } from '../../types';
2
+ import type { ActionableProposalGroup } from './types';
3
+ export declare function getActionableProposalGroupsForRole(role: StakeholderRoleType): readonly ActionableProposalGroup[];
4
+ export declare function getActionableProposalGroupsForRoles(roles: readonly StakeholderRoleType[]): readonly ActionableProposalGroup[];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/proposals/actionableGroups/queries.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StakeholderRoleType } from '../../types';\nimport { State } from '../types';\nimport type { ActionableProposalGroup } from './types';\n\n\nexport function getActionableProposalGroupsForRole(role: StakeholderRoleType): readonly ActionableProposalGroup[] {\n return CR_QUERIES_FOR_ROLES.filter(([, roles]) => roles.has(role));\n}\n\nexport function getActionableProposalGroupsForRoles(roles: readonly StakeholderRoleType[]): readonly ActionableProposalGroup[] {\n return roles.flatMap(getActionableProposalGroupsForRole);\n}\n\n\nconst CR_QUERIES_FOR_ROLES: readonly ActionableProposalGroup[] =\n[\n ['My Drafts', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n if (stakeholder && stakeholder.gitServerUsername) {\n const stakeholderCondition = `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n const query = `(obj.state === \"${State.DRAFT}\" || obj.state === \"${State.RETURNED_FOR_CLARIFICATION}\") && (${stakeholderCondition})`;\n return query;\n } else {\n return 'false';\n }\n }],\n ['My Rejected', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n // Rejections are actionable because they can be appealed by the submitter.\n if (stakeholder && stakeholder.gitServerUsername) {\n const stakeholderCondition = `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n const query = `(obj.state === \"${State.REJECTED}\") && (${stakeholderCondition})`;\n return query;\n } else {\n return 'false';\n }\n }],\n ['Everyone’s Drafts or Returned', new Set(['manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n if (stakeholder && stakeholder.gitServerUsername) {\n const stakeholderCondition = `obj.submittingStakeholderGitServerUsername !== \"${stakeholder.gitServerUsername}\"`;\n const query = `(obj.state === \"${State.DRAFT}\" || obj.state === \"${State.RETURNED_FOR_CLARIFICATION}\") && (${stakeholderCondition})`;\n return query;\n } else {\n return 'false';\n }\n }],\n // ['latest reviewed', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n // // TODO: Should filter only rejected perhaps?\n // // Approved/accepted proposals can be shown in another (public) area.\n // if (stakeholder && stakeholder.gitServerUsername) {\n // const stakeholderCondition = stakeholder?.role !== 'submitter'\n // ? 'true'\n // : `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n // // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.\n // const query = `(obj.state === \"${State.ACCEPTED} || obj.state === \"${State.REJECTED} || obj.state === \"${State.REJECTION_UPHELD_ON_APPEAL}\"\") && ${stakeholderCondition}`;\n // return query;\n // } else {\n // return 'false';\n // }\n // // TODO: Implement limit\n // }],\n // ['latest withdrawn', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n // if (stakeholder && stakeholder.gitServerUsername) {\n // const stakeholderCondition = stakeholder?.role !== 'submitter'\n // ? 'true'\n // : `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n // // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.\n // const query = `(obj.state === \"${State.WITHDRAWN}\" || obj.state === \"${State.APPEAL_WITHDRAWN}\") && ${stakeholderCondition}`;\n // return query;\n // } else {\n // return 'false';\n // }\n // // TODO: Implement limit\n // }],\n ['Pending Owner Appeal Review', new Set(['owner']), function ownerProposals() {\n return `obj.state === \"${State.APPEALED}\"`;\n }],\n ['Pending Control Body Review', new Set(['control-body', 'owner']), function cbProposals() {\n return `obj.state === \"${State.SUBMITTED_FOR_CONTROL_BODY_REVIEW}\"`;\n }],\n ['Pending Manager Review', new Set(['manager', 'control-body', 'owner']), function managerProposals() {\n return `obj.state === \"${State.PROPOSED}\"`;\n }],\n] as const;\n"]}
@@ -0,0 +1,27 @@
1
+ /** @jsx jsx */
2
+ /** @jsxFrag React.Fragment */
3
+ import type { TreeNodeInfo } from '@blueprintjs/core';
4
+ import type { RegisterStakeholder } from '../../types';
5
+ import type { SomeCR as CR } from '../types';
6
+ import type { ActionableProposalGroup } from './types';
7
+ export declare type ActionableProposalTreeNode = TreeNodeInfo<{
8
+ type: 'group' | 'item';
9
+ }>;
10
+ interface ActionableProposalGroupResult {
11
+ groupLabel: string;
12
+ proposals: CR[] | undefined;
13
+ }
14
+ export declare function getActionableProposalGroupsAsTreeNodes(groups: readonly ActionableProposalGroupResult[], opts?: {
15
+ expandedGroupLabels?: Set<string>;
16
+ selectedGroup?: string;
17
+ selectedCRID?: string;
18
+ activeCRID?: string;
19
+ onActivateCR?: (crID: string | null) => void | Promise<void>;
20
+ }): ActionableProposalTreeNode[];
21
+ export declare function getMapReduceChainsForActionableProposalGroups(proposalGroups: readonly ActionableProposalGroup[], stakeholder: RegisterStakeholder): {
22
+ [x: string]: {
23
+ mapFunc: string;
24
+ predicateFunc: string;
25
+ };
26
+ };
27
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treeNodes.js","sourceRoot":"","sources":["../../../src/proposals/actionableGroups/treeNodes.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\n/**\n * Tools for rendering proposal groups as tree nodes.\n * Each proposal group is top-level node, with proposals as nested nodes.\n */\n\nimport React, { useCallback } from 'react';\nimport { jsx } from '@emotion/react';\n\nimport { Button, Tag } from '@blueprintjs/core';\nimport type { IconName, TreeNodeInfo } from '@blueprintjs/core';\nimport type { RegisterStakeholder } from '../../types';\nimport type { SomeCR as CR } from '../types';\nimport type { ActionableProposalGroup } from './types';\nimport { CR_BASE_QUERY } from '../queries';\n\n\nexport type ActionableProposalTreeNode = TreeNodeInfo<{ type: 'group' | 'item' }>;\n\n\ninterface ActionableProposalGroupResult {\n groupLabel: string\n proposals: CR[] | undefined\n}\nexport function getActionableProposalGroupsAsTreeNodes(\n groups: readonly ActionableProposalGroupResult[],\n opts?: {\n expandedGroupLabels?: Set<string>\n selectedGroup?: string\n selectedCRID?: string\n activeCRID?: string\n onActivateCR?: (crID: string | null) => void | Promise<void>\n },\n): ActionableProposalTreeNode[] {\n return groups.\n //filter(({ proposals }) => proposals && proposals.length > 0).\n map(({ groupLabel, proposals }) => {\n const hasProposals = proposals && proposals.length > 0;\n const hasActiveProposal = hasProposals\n && opts?.activeCRID && proposals.find(p => p.id === opts.activeCRID);\n const hasSelectedProposal = hasProposals\n && opts?.selectedCRID && proposals.find(p => p.id === opts.selectedCRID);\n const isExpanded =\n groups.length === 1\n || opts?.expandedGroupLabels?.has(groupLabel)\n || hasSelectedProposal\n ? true\n : false;\n\n return {\n id: groupLabel,\n label: groupLabel,\n hasCaret: true,\n className: hasActiveProposal\n ? 'tree-node-proposal-group-with-active-proposal'\n : undefined,\n secondaryLabel:\n hasActiveProposal && !isExpanded\n ? <ActiveMarker\n isActive\n title=\"A proposal in this group is currently active, expand group to see it\"\n />\n : <Tag\n minimal={!hasProposals}\n intent={hasProposals ? 'warning' : undefined}>\n {hasProposals ? proposals.length : 0}\n </Tag>,\n icon: isExpanded\n ? 'folder-open'\n : 'folder-close' as IconName,\n isExpanded,\n isSelected: groupLabel === opts?.selectedGroup,\n nodeData: { type: 'group' },\n childNodes: hasProposals && isExpanded\n ? proposals.map(p => getActionableProposalTreeNode(p, {\n isSelected: p.id === opts?.selectedCRID,\n isActive: p.id === opts?.activeCRID,\n onActivateCR: opts?.onActivateCR,\n }))\n : [],\n };\n });\n}\n\nconst ActiveMarker: React.FC<{\n isActive?: boolean\n onToggle?: () => void\n title?: string\n}> = function ({ onToggle, title, isActive }) {\n const handleClick = useCallback(\n ((evt: React.MouseEvent<any>) => {\n evt.stopPropagation();\n onToggle?.();\n }),\n [onToggle]);\n return <Button\n icon=\"eye-open\"\n small\n title={title ?? (onToggle\n ? isActive\n ? \"Click to deactivate (exit) this proposal\"\n : \"Click to activate this proposal\"\n : undefined)}\n active={isActive}\n intent={isActive ? 'danger' : 'primary'}\n disabled={!onToggle}\n onClick={handleClick}\n />\n};\n\n\nfunction getActionableProposalTreeNode(\n proposal: CR,\n opts?: {\n isSelected?: boolean\n isActive?: boolean\n onActivateCR?: (crID: string | null) => void\n },\n): ActionableProposalTreeNode {\n return {\n id: proposal.id,\n label: <span title={`“${proposal.justification}” — double-click to open & activate this proposal`}>\n {proposal.justification}\n </span>,\n isSelected: opts?.isSelected ?? false,\n icon: 'lightbulb',\n className: opts?.isActive\n ? 'tree-node-active-proposal'\n : undefined,\n secondaryLabel: opts?.isActive\n ? <ActiveMarker isActive onToggle={opts.onActivateCR ? () => opts?.onActivateCR?.(null) : undefined} />\n : <ActiveMarker onToggle={opts?.onActivateCR ? () => opts?.onActivateCR?.(proposal.id) : undefined} />,\n nodeData: { type: 'item' },\n };\n}\n\n\nexport function getMapReduceChainsForActionableProposalGroups(\n proposalGroups: readonly ActionableProposalGroup[],\n stakeholder: RegisterStakeholder,\n) {\n return proposalGroups.map(([label, , queryGetter]) => {\n const query = queryGetter(stakeholder);\n const predicateFunc = `\n const objPath = key, obj = value;\n return ((${CR_BASE_QUERY}) && (${query}));\n `;\n const mapFunc = `emit(value);`;\n return { [label]: { mapFunc, predicateFunc } };\n }).reduce((prev, curr) => ({ ...prev, ...curr }), {});\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { RegisterStakeholder, StakeholderRoleType } from '../../types';
2
+ export declare type ActionableProposalGroup = readonly [
3
+ label: string,
4
+ roles: Set<StakeholderRoleType>,
5
+ queryGetter: (stakeholder?: RegisterStakeholder) => string
6
+ ];
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/proposals/actionableGroups/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { RegisterStakeholder, StakeholderRoleType } from '../../types';\n\n\nexport type ActionableProposalGroup = readonly [\n label: string,\n roles: Set<StakeholderRoleType>,\n queryGetter: (stakeholder?: RegisterStakeholder) => string,\n];\n"]}
@@ -0,0 +1,6 @@
1
+ export * from './ChangeRequestContext';
2
+ export * from './objectChangeset';
3
+ export * from './types';
4
+ export * from './ProposalBrowser';
5
+ export * from './queries';
6
+ export * from './actionableGroups/queries';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proposals/index.tsx"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,4BAA4B,CAAC","sourcesContent":["export * from './ChangeRequestContext';\nexport * from './objectChangeset';\nexport * from './types';\nexport * from './ProposalBrowser';\nexport * from './queries';\nexport * from './actionableGroups/queries';\n"]}
@@ -0,0 +1,72 @@
1
+ import type { ObjectDataset, ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';
2
+ import type { InternalItemReference, RegisterItem, ItemClassConfigurationSet } from '../types';
3
+ import type { ProposalSet, ChangeProposal } from './types';
4
+ import { type Drafted, type ReturnedForClarificationByManager, type ReturnedForClarificationByControlBody, ImportableCR } from './types';
5
+ /** Takes a justification and ID, returns an object changeset. */
6
+ export declare function newCRObjectChangeset(id: string, justification: string, registerVersion: string, stakeholderGitServerUsername: string): ObjectChangeset;
7
+ /**
8
+ * Returns an object changeset given an importable proposal,
9
+ * item class definitions for register to import it to,
10
+ * and a function to fetch register item data.
11
+ *
12
+ * Throws an error if importable proposal data isn’t compatible
13
+ * with item class definitions or existing register data.
14
+ */
15
+ export declare function importedProposalToCRObjectChangeset(importableCR: ImportableCR,
16
+ /** Available item classes per register configuration. */
17
+ itemClasses: ItemClassConfigurationSet,
18
+ /** VCS username of the person performing the import. */
19
+ importingStakeholderGitServerUsername: string, getObjectData: (opts: {
20
+ objectPaths: string[];
21
+ }) => Promise<{
22
+ data: ObjectDataset;
23
+ }>, resolvePredicates?: (predicates: Set<string>) => Promise<ResolvedPredicates>): Promise<[changeset: ObjectChangeset, id: string]>;
24
+ /**
25
+ * When importable CR wants to link to preexisting register items,
26
+ * and it does not know their exact UUIDs but knows some other properties,
27
+ * it can provide this structure in place of a reference.
28
+ *
29
+ * `resolvePredicates()` will resolve any such placeholders to item UUIDs
30
+ * at import time.
31
+ *
32
+ * `mode` should specify whether the predicate should be replaced with
33
+ * only a UUID string ('id', used when classID is already known)
34
+ * or full `InternalItemReference` instance ('generic').
35
+ */
36
+ export interface Predicate {
37
+ __isPredicate: true;
38
+ /**
39
+ * Predicate expression to resolve.
40
+ * Example: `data.identifier && parseInt(data.identifier, 10) === 123`.
41
+ */
42
+ predicate: string;
43
+ mode: 'generic' | 'id';
44
+ }
45
+ /** Maps found predicates to resolved item references. */
46
+ declare type ResolvedPredicates = Record<string, InternalItemReference>;
47
+ /**
48
+ * Returns an object changeset to update CR with new given proposal items.
49
+ * Only applicable to CR at draft edit stage.
50
+ */
51
+ export declare function updateCRObjectChangeset(
52
+ /**
53
+ * Change request data.
54
+ */
55
+ cr: Drafted | ReturnedForClarificationByManager | ReturnedForClarificationByControlBody,
56
+ /**
57
+ * Proposals by item path.
58
+ * Will be merged with those already existing in `cr`.
59
+ * If a proposal is undefined, it will be removed.
60
+ */
61
+ proposalItems: Record<string, ChangeProposal | null>,
62
+ /**
63
+ * New item data must be provided for additions and clarifications,
64
+ * keyed by item path.
65
+ */
66
+ itemData?: Record<string, RegisterItem<any>>): ObjectChangeset;
67
+ /**
68
+ * Given change proposals, returns applicable changes
69
+ * to objects in the dataset.
70
+ */
71
+ export declare function proposalsToObjectChangeset(crID: string, hasSubregisters: boolean, proposals: ProposalSet, itemData: Record<string, RegisterItem<any> | null>, newItemData: Record<string, RegisterItem<any> | null>): Promise<ObjectChangeset>;
72
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectChangeset.js","sourceRoot":"","sources":["../../src/proposals/objectChangeset.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAQ1C,OAAO,EACL,KAAK,GAKN,MAAM,SAAS,CAAC;AAGjB,iEAAiE;AACjE,MAAM,UAAU,oBAAoB,CAClC,EAAU,EACV,aAAqB,EACrB,eAAuB,EACvB,4BAAoC;IAGpC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAY;QAClB,EAAE;QACF,WAAW;QACX,UAAU,EAAE,WAAW;QACvB,aAAa;QACb,sCAAsC,EAAE,4BAA4B;QACpE,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,eAAe;KAChB,CAAC;IACF,MAAM,YAAY,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IACtC,OAAO;QACL,CAAC,YAAY,CAAC,EAAE;YACd,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,EAAE;SACb;KACF,CAAA;AACH,CAAC;AAGD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,YAA0B;AAC1B,yDAAyD;AACzD,WAAsC;AACtC,wDAAwD;AACxD,qCAA6C,EAC7C,aAAoF,EACpF,iBAA4E;;IAG5E,MAAM,aAAa,GAAY,YAAY,CAAC,aAAa,CAAC;IAC1D,aAAa,CAAC,sCAAsC,GAAG,qCAAqC,CAAC;IAC7F,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAEnD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,uDAAuD,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;SAC3F;KACF;IAED,uDAAuD;IACvD,0DAA0D;IAC1D,6EAA6E;IAC7E,IAAI;IAEJ,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;QAC7D,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;QAC9C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,aAAa,GAAG,CAAC,MAAM,aAAa,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;QACtD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;KACnF;IAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC;QACnD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,cAAc,GAAG,CAAC,MAAM,aAAa,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;QACvD,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;KACnG;IAED,MAAM,SAAS,GAAoB;QACjC,CAAC,MAAM,CAAC,EAAE;YACR,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,aAAa;SACxB;KACF,CAAC;IAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAA,YAAY,CAAC,YAAY,mCAAI,EAAE,CAAC,EAAE;QACrF,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,0BAA0B,CAAC,CAAC;SACtF;QACD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;SAC9D;QACD,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE;YACvB,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG;gBACxC,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,WAAW;aACtB,CAAC;SACH;aAAM;YACL,IAAI,CAAC,iBAAiB,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;aACxE;YACD,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG;gBACxC,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,iBAAiB,CAAC,WAAW,EAAE,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;aAC9E,CAAC;SACH;KACF;IAED,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC;AA2BD,SAAS,WAAW,CAAC,GAAQ;IAC3B,OAAO,GAAG,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI,CAAC;AAC3C,CAAC;AAKD;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,KAAQ,EACR,kBAAgD;IAEhD,4FAA4F;IAC5F,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QACtB,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;SACrE;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;YAC5B,OAAO,GAAmB,CAAC;SAC5B;aAAM;YACL,OAAO,GAAG,CAAC,MAAsB,CAAC;SACnC;KACF;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAQ,CAAC;SAC/E;aAAM;YACL,iCAAiC;YACjC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC5C,KAAK,CAAC,GAAyB,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;aAC7E;YACD,OAAO,KAAY,CAAC;SACrB;KACF;SAAM;QACL,OAAO,KAAY,CAAC;KACrB;AACH,CAAC;AAED,SAAS,iBAAiB;AACxB;;;GAGG;AACH,KAA0B;AAE1B,+CAA+C;AAC/C,MAAoB;IAEpB,MAAM,SAAS,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,GAAG,EAAU,CAAC;IAE9C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QACtB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;KAChC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;aACpC;YACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;SACxD;aAAM;YACL,iCAAiC;YACjC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBACpC,iBAAiB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;aACjC;SACF;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAGD;;;GAGG;AACH,MAAM,UAAU,uBAAuB;AACrC;;GAEG;AACH,EAAuF;AAEvF;;;;GAIG;AACH,aAAoD;AAEpD;;;GAGG;AACH,WAA8C,EAAE;IAEhD,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QAChE,yBAAyB;QACzB,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;SAC/B;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC7B,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAC3B;QACD,uBAAuB;QACvB,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,UAAU,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,eAAe,EAAE;YACvE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,gBAAgB,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE;gBAClE,OAAO,CAAC,KAAK,CAAC,gFAAgF,EAAE,QAAQ,CAAC,CAAC;gBAC1G,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;aACnG;YACD,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;gBACzC,sCAAsC;gBACtC,4DAA4D;gBAC5D,QAAQ,EAAE,gBAAgB;aAC3B,CAAC;SACH;aAAM;YACL,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;gBACzC,sCAAsC;gBACtC,4DAA4D;gBAC5D,QAAQ,EAAE,IAAI;aACf,CAAC;SACH;KACF;IACD,sBAAsB;IACtB,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,SAAS,CAAC,MAAM,CAAC,GAAG;QAClB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE;KAC7D,CAAC;IACF,OAAO,SAAS,CAAC;AACnB,CAAC;AAGD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAY,EACZ,eAAwB,EACxB,SAAsB,EACtB,QAAkD,EAClD,WAAqD;IAErD,MAAM,EAAE,GAAoB,EAAE,CAAC;IAE/B,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC5D,wFAAwF;QACxF,MAAM,OAAO,GAAG,iBAAiB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE7D,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;YAChC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;gBACpC,OAAO,CAAC,KAAK,CAAC,gFAAgF,EAAE,QAAQ,CAAC,CAAC;gBAC1G,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;aACnG;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,aAAa,KAAK,cAAc,EAAE;gBAC9E,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;aAC9G;iBAAM;gBACL,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;aAC9G;SACF;aAAM;YACL,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;SAC9G;KACF;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,8DAA8D;AAC9D;;;;;;GAMG;AACH,KAAK,UAAU,yBAAyB,CACtC,IAAY,EACZ,QAAwB,EACxB,OAA8B,EAC9B,QAAgB,EAChB,QAAkD,EAClD,WAAqD;;IAErD,IAAI,WAA8B,CAAC;IACnC,MAAM,SAAS,GAAyC,EAAE,CAAC;IAE3D,MAAM,QAAQ,GAAG,MAAA,QAAQ,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAA,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,mCAAI,IAAI,CAAC;IAElE,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;QAChC,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;SAC9F;QAED,WAAW,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAE9B,QAAQ,QAAQ,CAAC,IAAI,EAAE;YACrB,KAAK,eAAe;gBAClB,IAAI,OAAO,KAAK,IAAI,EAAE;oBACpB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;iBAC1F;gBACD,kDAAkD;gBAClD,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA,CAAC,wBAAwB;gBACxD,MAAM;YACR,KAAK,WAAW;gBACd,MAAM,SAAS,GAAG,QAAqB,CAAC;gBACxC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;gBAE/B,QAAQ,SAAS,CAAC,aAAa,EAAE;oBAC/B,KAAK,YAAY;wBACf,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;wBAC/B,MAAM;oBACR,KAAK,cAAc;wBACjB,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;wBAC/B,MAAM;oBACR,KAAK,cAAc;wBACjB,MAAM,YAAY,GAAG,QAAwB,CAAC;wBAC9C,WAAW,CAAC,MAAM,GAAG,YAAY,CAAC;wBAClC,WAAW,CAAC,YAAY,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;4BACxE,MAAM;4BACN,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,aAAa,EAAE,OAAO,CAAC,aAAa;yBACrC,CAAC,CAAC,CAAC;wBACJ,KAAK,MAAM,mBAAmB,IAAI,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE;4BAC3F,MAAM,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;4BAC1D,IAAI,mBAAmB,EAAE;gCACvB,SAAS,CAAC,mBAAmB,CAAC,GAAG;oCAC/B,QAAQ,EAAE,mBAAmB;oCAC7B,QAAQ,EAAE;wCACR,GAAG,mBAAmB;wCACtB,UAAU,EAAE,CAAE,GAAG,CAAC,MAAA,mBAAmB,CAAC,UAAU,mCAAI,EAAE,CAAC,EAAE,OAAO,CAAE;qCACnE;iCACF,CAAC;6BACH;yBACF;wBACD,MAAM;iBACT;gBACD,MAAM;SACT;KACF;SAAM;QACL,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;SACrF;QACD,WAAW,GAAG;YACZ,EAAE,EAAE,OAAO,CAAC,MAAM;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO;YACf,YAAY,EAAE,IAAI,IAAI,EAAE;SACzB,CAAC;KACH;IAED,SAAS,CAAC,QAAQ,CAAC,GAAG;QACpB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,WAAW;KACtB,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import type { Change, Changeset } from '@riboseinc/paneron-extension-kit/types/changes';\nimport type { ObjectDataset, ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\n\nimport {\n crIDToCRPath,\n itemPathInCR,\n itemPathToItemRef,\n itemRefToItemPath,\n} from '../views/itemPathUtils';\nimport type {\n InternalItemReference,\n RegisterItem,\n ItemClassConfigurationSet,\n} from '../types';\nimport { isRegisterItem } from '../types';\n\nimport type {\n ProposalSet,\n ChangeProposal,\n Amendment,\n Supersession,\n} from './types';\nimport {\n State,\n type Drafted,\n type ReturnedForClarificationByManager,\n type ReturnedForClarificationByControlBody,\n ImportableCR,\n} from './types';\n\n\n/** Takes a justification and ID, returns an object changeset. */\nexport function newCRObjectChangeset(\n id: string,\n justification: string,\n registerVersion: string,\n stakeholderGitServerUsername: string,\n): ObjectChangeset {\n\n const timeStarted = new Date();\n const cr: Drafted = {\n id,\n timeStarted,\n timeEdited: timeStarted,\n justification,\n submittingStakeholderGitServerUsername: stakeholderGitServerUsername,\n items: {},\n state: State.DRAFT,\n registerVersion,\n };\n const crObjectPath = crIDToCRPath(id);\n return {\n [crObjectPath]: {\n oldValue: null,\n newValue: cr,\n },\n }\n}\n\n\n/**\n * Returns an object changeset given an importable proposal,\n * item class definitions for register to import it to,\n * and a function to fetch register item data.\n *\n * Throws an error if importable proposal data isn’t compatible\n * with item class definitions or existing register data.\n */\nexport async function importedProposalToCRObjectChangeset(\n importableCR: ImportableCR,\n /** Available item classes per register configuration. */\n itemClasses: ItemClassConfigurationSet,\n /** VCS username of the person performing the import. */\n importingStakeholderGitServerUsername: string,\n getObjectData: (opts: { objectPaths: string[] }) => Promise<{ data: ObjectDataset }>,\n resolvePredicates?: (predicates: Set<string>) => Promise<ResolvedPredicates>,\n //findObjects: (predicate: string) => Promise<any[]>,\n): Promise<[changeset: ObjectChangeset, id: string]> {\n const proposalDraft: Drafted = importableCR.proposalDraft;\n proposalDraft.submittingStakeholderGitServerUsername = importingStakeholderGitServerUsername;\n const crID = proposalDraft.id;\n const crPath = crIDToCRPath(crID);\n\n const itemPaths = Object.keys(proposalDraft.items);\n\n for (const itemPath of itemPaths) {\n const itemRef = itemPathToItemRef(false, itemPath);\n if (!itemClasses[itemRef.classID]) {\n throw new Error(`Imported proposal contains item(s) of unknown class ${itemRef.classID}`);\n }\n }\n\n //const proposals = Object.values(proposalDraft.items);\n // if (proposals.find(prop => prop.type !== 'addition')) {\n // throw new Error(\"Only addition proposals can be imported at this time\");\n // }\n\n const additionalItemPaths = Object.entries(proposalDraft.items).\n filter(([, prop]) => prop.type === 'addition').\n map(([path, ]) => path);\n const existingItems = (await getObjectData({ objectPaths: additionalItemPaths })).data;\n if (Object.values(existingItems).find(v => v !== null)) {\n throw new Error(\"Register already contains item(s) being added in this proposal\");\n }\n\n const clarifiedItemPaths = Object.entries(proposalDraft.items).\n filter(([, prop]) => prop.type === 'clarification').\n map(([path, ]) => path);\n const clarifiedItems = (await getObjectData({ objectPaths: clarifiedItemPaths })).data;\n if (Object.values(clarifiedItems).find(v => v === null)) {\n throw new Error(\"Register does not contain some of the item(s) being clarified in this proposal\");\n }\n\n const changeset: ObjectChangeset = {\n [crPath]: {\n oldValue: null,\n newValue: proposalDraft,\n },\n };\n\n for (const [itemPath, itemPayload] of Object.entries(importableCR.itemPayloads ?? {})) {\n if (itemPaths.indexOf(itemPath) < 0) {\n throw new Error(`No proposal found for item at ${itemPath}, but item data is given`);\n }\n if (!isRegisterItem(itemPayload)) {\n throw new Error(`Invalid register item data at ${itemPath}`);\n }\n const predicates = collectPredicates(itemPayload);\n if (predicates.size < 1) {\n changeset[itemPathInCR(itemPath, crID)] = {\n oldValue: null,\n newValue: itemPayload,\n };\n } else {\n if (!resolvePredicates) {\n throw new Error(\"Cannot resolve some predicates in imported proposal\");\n }\n changeset[itemPathInCR(itemPath, crID)] = {\n oldValue: null,\n newValue: replacePredicates(itemPayload, await resolvePredicates(predicates)),\n };\n }\n }\n\n return [changeset, crID];\n}\n\n\n/**\n * When importable CR wants to link to preexisting register items,\n * and it does not know their exact UUIDs but knows some other properties,\n * it can provide this structure in place of a reference.\n *\n * `resolvePredicates()` will resolve any such placeholders to item UUIDs\n * at import time.\n *\n * `mode` should specify whether the predicate should be replaced with\n * only a UUID string ('id', used when classID is already known)\n * or full `InternalItemReference` instance ('generic').\n */\nexport interface Predicate {\n __isPredicate: true\n /**\n * Predicate expression to resolve.\n * Example: `data.identifier && parseInt(data.identifier, 10) === 123`.\n */\n predicate: string\n // TODO: Specify different subtypes for generic and ID?\n mode: 'generic' | 'id'\n}\n\n\nfunction isPredicate(val: any): val is Predicate {\n return val && val.__isPredicate === true;\n}\n\n/** Maps found predicates to resolved item references. */\ntype ResolvedPredicates = Record<string, InternalItemReference>;\n\n/**\n * Resolves any properties that should reference register item UUIDs,\n * but have predicates instead, using a map of found predicates\n * and item references they already were resolved to.\n */\nfunction replacePredicates<T>(\n value: T,\n resolvedPredicates: Readonly<ResolvedPredicates>,\n): T /*extends Predicate ? (string | InternalItemReference) : WithPredicatesResolved<T>*/ {\n // NOTE: Return types are cast because https://github.com/microsoft/TypeScript/issues/33912.\n if (isPredicate(value)) {\n const ref = resolvedPredicates[value.predicate];\n if (!ref) {\n throw new Error(`Could not resolve predicate “${value.predicate}”`);\n }\n if (value.mode === 'generic') {\n return ref as unknown as T;\n } else {\n return ref.itemID as unknown as T;\n }\n } else if (value && typeof value === 'object') {\n if (Array.isArray(value)) {\n return value.map((v: any) => replacePredicates(v, resolvedPredicates)) as any;\n } else {\n // Assume plain non-array object.\n for (const [key, v] of Object.entries(value)) {\n value[key as keyof typeof value] = replacePredicates(v, resolvedPredicates);\n }\n return value as any;\n }\n } else {\n return value as any;\n }\n}\n\nfunction collectPredicates(\n /**\n * Imported register item data with possibly some predicates\n * instead of related item references.\n */\n value: unknown | unknown[],\n\n /** Cache for recursive calls, don’t supply. */\n _cache?: Set<string>,\n): Set<string> {\n const collected = _cache ?? new Set<string>();\n\n if (isPredicate(value)) {\n collected.add(value.predicate);\n } else if (value && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (const item in value) {\n collectPredicates(item, collected);\n }\n value.map((v: any) => collectPredicates(v, collected));\n } else {\n // Assume plain non-array object.\n for (const v of Object.values(value)) {\n collectPredicates(v, collected);\n }\n }\n }\n\n return collected;\n}\n\n\n/**\n * Returns an object changeset to update CR with new given proposal items.\n * Only applicable to CR at draft edit stage.\n */\nexport function updateCRObjectChangeset(\n /**\n * Change request data.\n */\n cr: Drafted | ReturnedForClarificationByManager | ReturnedForClarificationByControlBody,\n\n /**\n * Proposals by item path.\n * Will be merged with those already existing in `cr`.\n * If a proposal is undefined, it will be removed.\n */\n proposalItems: Record<string, ChangeProposal | null>,\n\n /**\n * New item data must be provided for additions and clarifications,\n * keyed by item path.\n */\n itemData: Record<string, RegisterItem<any>> = {},\n): ObjectChangeset {\n const changeset: ObjectChangeset = {};\n const newItems = { ...cr.items };\n for (const [itemPath, proposal] of Object.entries(proposalItems)) {\n // Update proposals on CR\n if (proposal !== null) {\n newItems[itemPath] = proposal;\n } else if (newItems[itemPath]) {\n delete newItems[itemPath];\n }\n // Add/remove item data\n if (proposal?.type === 'addition' || proposal?.type === 'clarification') {\n const proposedItemData = itemData[itemPath];\n if (proposedItemData === null || !isRegisterItem(proposedItemData)) {\n console.error(\"Unable to convert proposals to object changeset: original item data is missing\", itemPath);\n throw new Error(\"Unable to convert proposals to object changeset: original item data is missing\");\n }\n changeset[itemPathInCR(itemPath, cr.id)] = {\n // When editing a draft, we don’t care\n // about overwriting proposed item data so we omit oldValue.\n newValue: proposedItemData,\n };\n } else {\n changeset[itemPathInCR(itemPath, cr.id)] = {\n // When editing a draft, we don’t care\n // about overwriting proposed item data so we omit oldValue.\n newValue: null,\n };\n }\n }\n // Update main CR data\n const crPath = crIDToCRPath(cr.id);\n changeset[crPath] = {\n oldValue: cr,\n newValue: { ...cr, items: newItems, timeEdited: new Date() },\n };\n return changeset;\n}\n\n\n/**\n * Given change proposals, returns applicable changes\n * to objects in the dataset.\n */\nexport async function proposalsToObjectChangeset(\n crID: string,\n hasSubregisters: boolean,\n proposals: ProposalSet,\n itemData: Record<string, RegisterItem<any> | null>,\n newItemData: Record<string, RegisterItem<any> | null>,\n): Promise<ObjectChangeset> {\n const cs: ObjectChangeset = {};\n\n for (const [itemPath, proposal] of Object.entries(proposals)) {\n //const originalItem: RegisterItem<any> | undefined = (itemData[itemPath] ?? undefined);\n const itemRef = itemPathToItemRef(hasSubregisters, itemPath);\n\n if (proposal.type !== 'addition') {\n if (itemData[itemPath] === undefined) {\n console.error(\"Unable to convert proposals to object changeset: original item data is missing\", itemPath);\n throw new Error(\"Unable to convert proposals to object changeset: original item data is missing\");\n }\n if (proposal.type === 'amendment' && proposal.amendmentType === 'supersession') {\n Object.assign(cs, await proposalToObjectChangeset(crID, proposal, itemRef, itemPath, itemData, newItemData));\n } else {\n Object.assign(cs, await proposalToObjectChangeset(crID, proposal, itemRef, itemPath, itemData, newItemData));\n }\n } else {\n Object.assign(cs, await proposalToObjectChangeset(crID, proposal, itemRef, itemPath, itemData, newItemData));\n }\n }\n\n return cs;\n}\n\n// TODO: Refactor out the business logic of proposal approval.\n/**\n * Given a change proposal, returns applicable changes\n * to objects in the dataset.\n * Core logic of approving a proposal.\n * Takes a proposal and extra options (depending on proposal type).\n * Returns a Changeset containing register items at appropriate paths.\n */\nasync function proposalToObjectChangeset(\n crID: string,\n proposal: ChangeProposal,\n itemRef: InternalItemReference,\n itemPath: string,\n itemData: Record<string, RegisterItem<any> | null>,\n newItemData: Record<string, RegisterItem<any> | null>,\n): Promise<Changeset<Change<RegisterItem<any>>>> {\n let updatedItem: RegisterItem<any>;\n const changeset: Changeset<Change<RegisterItem<any>>> = {};\n\n const origItem = itemData[itemPath] ?? null;\n const newItem = newItemData[itemPathInCR(itemPath, crID)] ?? null;\n\n if (proposal.type !== 'addition') {\n if (origItem === null) {\n throw new Error(\"proposalToObjectChangeset() requires original item data for non-additions\");\n }\n\n updatedItem = { ...origItem };\n\n switch (proposal.type) {\n case 'clarification':\n if (newItem === null) {\n throw new Error(\"proposalToObjectChangeset() requires new item data for clarifications\");\n }\n //const clarification = proposal as Clarification;\n updatedItem.data = newItem.data //clarification.payload;\n break;\n case 'amendment':\n const amendment = proposal as Amendment;\n updatedItem.amendedInCR = crID;\n\n switch (amendment.amendmentType) {\n case 'retirement':\n updatedItem.status = 'retired';\n break;\n case 'invalidation':\n updatedItem.status = 'invalid';\n break;\n case 'supersession':\n const supersession = proposal as Supersession;\n updatedItem.status = 'superseded';\n updatedItem.supersededBy = supersession.supersedingItemIDs.map(itemID => ({\n itemID,\n classID: itemRef.classID,\n subregisterID: itemRef.subregisterID,\n }));\n for (const supersedingItemPath of updatedItem.supersededBy.map(ip => itemRefToItemPath(ip))) {\n const supersedingItemData = itemData[supersedingItemPath];\n if (supersedingItemData) {\n changeset[supersedingItemPath] = {\n oldValue: supersedingItemData,\n newValue: {\n ...supersedingItemData,\n supersedes: [ ...(supersedingItemData.supersedes ?? []), itemRef ],\n },\n };\n }\n }\n break;\n }\n break;\n }\n } else {\n if (newItem === null) {\n throw new Error(\"proposalToObjectChangeset() requires new item data for additions\");\n }\n updatedItem = {\n id: itemRef.itemID,\n data: newItem.data,\n status: 'valid',\n dateAccepted: new Date(),\n };\n }\n\n changeset[itemPath] = {\n oldValue: origItem,\n newValue: updatedItem,\n };\n\n return changeset;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ /** Basic predicate/query to get just group proposal entry points (main.yaml) */
2
+ export declare const CR_BASE_QUERY = "objPath.indexOf(\"/proposals/\") === 0 && objPath.endsWith(\"main.yaml\")";
3
+ /** Predicate/query to get only disposed group proposals */
4
+ export declare const DISPOSED_CR_QUERY = "obj.timeDisposed !== undefined && obj.timeDisposed !== null";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/proposals/queries.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,CAAC,MAAM,aAAa,GAAG,uEAAuE,CAAC;AAErG,2DAA2D;AAC3D,MAAM,CAAC,MAAM,iBAAiB,GAAG,6DAA6D,CAAC","sourcesContent":["/** Basic predicate/query to get just group proposal entry points (main.yaml) */\nexport const CR_BASE_QUERY = 'objPath.indexOf(\"/proposals/\") === 0 && objPath.endsWith(\"main.yaml\")';\n\n/** Predicate/query to get only disposed group proposals */\nexport const DISPOSED_CR_QUERY = 'obj.timeDisposed !== undefined && obj.timeDisposed !== null';\n"]}