@riboseinc/paneron-registry-kit 2.0.0-dev8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/common.d.ts +1 -1
  2. package/common.js +1 -1
  3. package/common.js.map +1 -1
  4. package/index.d.ts +3 -3
  5. package/index.js +3 -3
  6. package/index.js.map +1 -1
  7. package/package.json +26 -18
  8. package/types/cr.d.ts +216 -0
  9. package/types/cr.js +175 -0
  10. package/types/cr.js.map +1 -0
  11. package/types/index.d.ts +1 -0
  12. package/types/index.js +19 -0
  13. package/types/index.js.map +1 -1
  14. package/types/item.d.ts +13 -3
  15. package/types/item.js +11 -1
  16. package/types/item.js.map +1 -1
  17. package/types/proposal.d.ts +31 -14
  18. package/types/proposal.js +1 -1
  19. package/types/proposal.js.map +1 -1
  20. package/types/register.d.ts +6 -5
  21. package/types/register.js +19 -1
  22. package/types/register.js.map +1 -1
  23. package/types/registry.d.ts +8 -3
  24. package/types/registry.js +8 -1
  25. package/types/registry.js.map +1 -1
  26. package/types/stakeholder.d.ts +40 -16
  27. package/types/stakeholder.js +47 -3
  28. package/types/stakeholder.js.map +1 -1
  29. package/types/views.d.ts +98 -24
  30. package/types/views.js.map +1 -1
  31. package/views/AnnotatedChange.d.ts +7 -0
  32. package/views/AnnotatedChange.js +91 -0
  33. package/views/AnnotatedChange.js.map +1 -0
  34. package/views/BrowserCtx.d.ts +66 -2
  35. package/views/BrowserCtx.js +13 -2
  36. package/views/BrowserCtx.js.map +1 -1
  37. package/views/FilterCriteria/CRITERIA_CONFIGURATION.d.ts +17 -0
  38. package/views/FilterCriteria/CRITERIA_CONFIGURATION.js +202 -0
  39. package/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -0
  40. package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +6 -0
  41. package/views/FilterCriteria/criteriaGroupToQueryExpression.js +50 -0
  42. package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -0
  43. package/views/FilterCriteria/criteriaGroupToSummary.d.ts +5 -0
  44. package/views/FilterCriteria/criteriaGroupToSummary.js +62 -0
  45. package/views/FilterCriteria/criteriaGroupToSummary.js.map +1 -0
  46. package/views/FilterCriteria/criteriaToNodes.d.ts +24 -0
  47. package/views/FilterCriteria/criteriaToNodes.js +159 -0
  48. package/views/FilterCriteria/criteriaToNodes.js.map +1 -0
  49. package/views/FilterCriteria/index.d.ts +23 -0
  50. package/views/FilterCriteria/index.js +130 -0
  51. package/views/FilterCriteria/index.js.map +1 -0
  52. package/views/FilterCriteria/models.d.ts +68 -0
  53. package/views/FilterCriteria/models.js +34 -0
  54. package/views/FilterCriteria/models.js.map +1 -0
  55. package/views/FilterCriteria/mutateGroup.d.ts +17 -0
  56. package/views/FilterCriteria/mutateGroup.js +59 -0
  57. package/views/FilterCriteria/mutateGroup.js.map +1 -0
  58. package/views/GenericRelatedItemView.d.ts +1 -1
  59. package/views/GenericRelatedItemView.js +143 -101
  60. package/views/GenericRelatedItemView.js.map +1 -1
  61. package/views/RegisterStakeholder.d.ts +9 -0
  62. package/views/RegisterStakeholder.js +40 -0
  63. package/views/RegisterStakeholder.js.map +1 -0
  64. package/views/RegisterVersion.d.ts +9 -0
  65. package/views/RegisterVersion.js +41 -0
  66. package/views/RegisterVersion.js.map +1 -0
  67. package/views/SearchQuery.d.ts +13 -0
  68. package/views/SearchQuery.js +137 -0
  69. package/views/SearchQuery.js.map +1 -0
  70. package/views/change-request/ChangeRequestContext.d.ts +20 -0
  71. package/views/change-request/ChangeRequestContext.js +56 -0
  72. package/views/change-request/ChangeRequestContext.js.map +1 -0
  73. package/views/change-request/Proposals.d.ts +21 -0
  74. package/views/change-request/Proposals.js +331 -0
  75. package/views/change-request/Proposals.js.map +1 -0
  76. package/views/change-request/objectChangeset.d.ts +31 -0
  77. package/views/change-request/objectChangeset.js +229 -0
  78. package/views/change-request/objectChangeset.js.map +1 -0
  79. package/views/detail/ChangeRequest/Proposal.d.ts +0 -0
  80. package/views/detail/ChangeRequest/Proposal.js +142 -0
  81. package/views/detail/ChangeRequest/Proposal.js.map +1 -0
  82. package/views/detail/ChangeRequest/index.d.ts +13 -0
  83. package/views/detail/ChangeRequest/index.js +207 -0
  84. package/views/detail/ChangeRequest/index.js.map +1 -0
  85. package/views/detail/ChangeRequest/transitions.d.ts +28 -0
  86. package/views/detail/ChangeRequest/transitions.js +530 -0
  87. package/views/detail/ChangeRequest/transitions.js.map +1 -0
  88. package/views/detail/CustomView/index.d.ts +13 -0
  89. package/views/detail/CustomView/index.js +68 -0
  90. package/views/detail/CustomView/index.js.map +1 -0
  91. package/views/detail/RegisterHome/index.d.ts +5 -0
  92. package/views/detail/RegisterHome/index.js +128 -0
  93. package/views/detail/RegisterHome/index.js.map +1 -0
  94. package/views/detail/RegisterItem/RelatedItems.d.ts +13 -0
  95. package/views/detail/RegisterItem/RelatedItems.js +61 -0
  96. package/views/detail/RegisterItem/RelatedItems.js.map +1 -0
  97. package/views/detail/RegisterItem/SupersedingItemMenu.d.ts +13 -0
  98. package/views/detail/RegisterItem/SupersedingItemMenu.js +56 -0
  99. package/views/detail/RegisterItem/SupersedingItemMenu.js.map +1 -0
  100. package/views/detail/RegisterItem/index.d.ts +13 -0
  101. package/views/detail/RegisterItem/index.js +356 -0
  102. package/views/detail/RegisterItem/index.js.map +1 -0
  103. package/views/detail/RegisterMeta/RegisterMetaForm.d.ts +10 -0
  104. package/views/detail/RegisterMeta/RegisterMetaForm.js +331 -0
  105. package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -0
  106. package/views/detail/RegisterMeta/index.d.ts +10 -0
  107. package/views/detail/RegisterMeta/index.js +111 -0
  108. package/views/detail/RegisterMeta/index.js.map +1 -0
  109. package/views/detail/index.d.ts +1 -0
  110. package/views/detail/index.js +24 -0
  111. package/views/detail/index.js.map +1 -0
  112. package/views/diffing/InlineDiff.d.ts +12 -0
  113. package/views/diffing/InlineDiff.js +58 -0
  114. package/views/diffing/InlineDiff.js.map +1 -0
  115. package/views/diffing/StructuredDiff.d.ts +11 -0
  116. package/views/diffing/StructuredDiff.js +65 -0
  117. package/views/diffing/StructuredDiff.js.map +1 -0
  118. package/views/hooks/useCustomView.d.ts +3 -0
  119. package/views/hooks/useCustomView.js +24 -0
  120. package/views/hooks/useCustomView.js.map +1 -0
  121. package/views/hooks/useItemClassConfig.d.ts +3 -0
  122. package/views/hooks/useItemClassConfig.js +24 -0
  123. package/views/hooks/useItemClassConfig.js.map +1 -0
  124. package/views/hooks/useItemRef.d.ts +3 -0
  125. package/views/hooks/useItemRef.js +39 -0
  126. package/views/hooks/useItemRef.js.map +1 -0
  127. package/views/hooks/useSingleRegisterItemData.d.ts +3 -0
  128. package/views/hooks/useSingleRegisterItemData.js +32 -0
  129. package/views/hooks/useSingleRegisterItemData.js.map +1 -0
  130. package/views/index.d.ts +2 -2
  131. package/views/index.js +161 -130
  132. package/views/index.js.map +1 -1
  133. package/views/itemPathUtils.d.ts +45 -2
  134. package/views/itemPathUtils.js +101 -14
  135. package/views/itemPathUtils.js.map +1 -1
  136. package/views/itemQueryUtils.d.ts +11 -0
  137. package/views/itemQueryUtils.js +48 -0
  138. package/views/itemQueryUtils.js.map +1 -0
  139. package/views/protocolRegistry.d.ts +12 -0
  140. package/views/protocolRegistry.js +42 -0
  141. package/views/protocolRegistry.js.map +1 -0
  142. package/views/sidebar/Browse/index.d.ts +11 -0
  143. package/views/sidebar/Browse/index.js +453 -0
  144. package/views/sidebar/Browse/index.js.map +1 -0
  145. package/views/sidebar/Export/index.d.ts +5 -0
  146. package/views/sidebar/Export/index.js +94 -0
  147. package/views/sidebar/Export/index.js.map +1 -0
  148. package/views/sidebar/ListItem.d.ts +10 -0
  149. package/views/sidebar/ListItem.js +43 -0
  150. package/views/sidebar/ListItem.js.map +1 -0
  151. package/views/sidebar/Registration/index.d.ts +5 -0
  152. package/views/sidebar/Registration/index.js +163 -0
  153. package/views/sidebar/Registration/index.js.map +1 -0
  154. package/views/sidebar/Search/index.d.ts +18 -0
  155. package/views/sidebar/Search/index.js +177 -0
  156. package/views/sidebar/Search/index.js.map +1 -0
  157. package/views/sidebar/index.d.ts +6 -0
  158. package/views/sidebar/index.js +104 -0
  159. package/views/sidebar/index.js.map +1 -0
  160. package/views/util.d.ts +29 -5
  161. package/views/util.js +92 -6
  162. package/views/util.js.map +1 -1
  163. package/views/ChangeRequest.d.ts +0 -12
  164. package/views/ChangeRequest.js +0 -689
  165. package/views/ChangeRequest.js.map +0 -1
  166. package/views/FilterCriteria.d.ts +0 -27
  167. package/views/FilterCriteria.js +0 -410
  168. package/views/FilterCriteria.js.map +0 -1
  169. package/views/ItemBrowser.d.ts +0 -12
  170. package/views/ItemBrowser.js +0 -255
  171. package/views/ItemBrowser.js.map +0 -1
  172. package/views/ItemDetails.d.ts +0 -14
  173. package/views/ItemDetails.js +0 -128
  174. package/views/ItemDetails.js.map +0 -1
  175. package/views/MainView.d.ts +0 -8
  176. package/views/MainView.js +0 -34
  177. package/views/MainView.js.map +0 -1
  178. package/views/RegisterInformation.d.ts +0 -7
  179. package/views/RegisterInformation.js +0 -264
  180. package/views/RegisterInformation.js.map +0 -1
  181. package/views/RegisterItemGrid.d.ts +0 -25
  182. package/views/RegisterItemGrid.js +0 -248
  183. package/views/RegisterItemGrid.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChangeRequest.js","sourceRoot":"","sources":["../../src/views/ChangeRequest.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,GAAG,MAAM,cAAc,CAAC;AAE/B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAEzC,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EACrC,MAAM,EACN,SAAS,EAAE,EAAE,EAAE,UAAU,EAAY,UAAU,EACpC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAC7D,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAE0D,cAAc,EAI9E,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAG1C,MAAM,aAAa,GAAoD;IACrE,QAAQ,EAAE,KAAK;IACf,aAAa,EAAE,MAAM;IACrB,SAAS,EAAE,QAAQ;CACpB,CAAA;AAGD,MAAM,CAAC,MAAM,sBAAsB,GAAiC;IAClE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE;CAC3C,CAAC;AAGX,MAAM,CAAC,MAAM,iBAAiB,GAMzB,UAAU,EACX,sBAAsB,EAAE,EAAE,EAC1B,mBAAmB,EACnB,MAAM,EAAE,QAAQ,EAAE;;IAEpB,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAElF,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAS,eAAe,CAAC,CAAC;IAErE,MAAM,UAAU,GAAG,mBAAmB,EAAE,OAAO,CAAC;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,MAAA,MAAA,MAAA,MAAM,CAAC,KAAK,CAAC,IAAI,0CAAG,UAAU,CAAC,0CAAE,KAAK,mCAAI,SAAS,CAAC;IACzE,MAAM,OAAO,GACX,YAAY,KAAK,SAAS;QACxB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAsB,CAAC;QACnC,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA,MAAC,OAAyB,0CAAE,SAAS,KAAI,EAAE,CAAC,CAAC;IAE3E,kDAAkD;IAClD,wDAAwD;IAExD,MAAM,QAAQ,GACZ,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;IAE3C,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAC;IAEpE,IAAI,EAAe,CAAC;IAEpB,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,EAAE,GAAG,IAAC,aAAa,IAAC,KAAK,EAAE,IAAC,OAAO,OAAG,GAAI,CAAC;KAE5C;SAAM,IAAK,OAAyB,CAAC,EAAE,EAAE;QACxC,MAAM,UAAU,GAAG,OAAwB,CAAC;QAC5C,MAAM,EAAE,GAAG,MAAM,IAAI,UAAU,CAAC;QAEhC,KAAK,UAAU,UAAU;YACvB,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO;aAAE;YACxB,IAAI,MAAM,KAAK,IAAI,EAAE;gBAAE,OAAO;aAAE;YAChC,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,SAAS,aAAa;YACpB,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO;aAAE;YACxB,IAAI,MAAM,KAAK,IAAI,EAAE;gBAAE,OAAO;aAAE;YAChC,MAAM,CAAC,UAAU,CAAC,EAAE,kCAAO,EAAE,KAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,KAAI,UAAU,CAAC,CAAC;QACpH,CAAC;QAED,SAAS,iBAAiB,CACtB,SAA2C,EAC3C,cAA8D;YAChE,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO;aAAE;YACxB,IAAI,MAAM,KAAK,IAAI,EAAE;gBAAE,OAAO;aAAE;YAChC,IAAI,UAAkC,CAAC;YAEvC,IAAI,SAAS,KAAK,OAAO,EAAE;gBACzB,UAAU,GAAG,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;aAC3C;iBAAM;gBACL,IAAI,cAAc,KAAK,WAAW,EAAE;oBAClC,UAAU,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;iBAC1C;qBAAM;oBACL,UAAU,GAAG,EAAE,CAAC;iBACjB;aACF;YACD,MAAM,CAAC,UAAU,CAAC,EAAE,gDAAO,EAAE,KAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,KAAK,UAAU,GAAI,UAAU,CAAC,CAAC;QAC9G,CAAC;QAED,KAAK,UAAU,iBAAiB,CAAC,EAAU,EAAE,QAA6B;YACxE,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE;oBACnC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;iBACxD,EAAE,CAAC,CAAC,CAAA;QACP,CAAC;QAED,KAAK,UAAU,oBAAoB,CAAC,MAAc,EAAE,KAAa,EAAE,QAAwB;;YACzF,IAAI,CAAC,aAAa,EAAE;gBAClB,OAAO;aACR;YAED,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;YACtC,MAAM,YAAY,GAAG,GAAG,QAAQ,OAAO,CAAC;YAExC,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAExC,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;gBAChC,IAAI,YAAY,EAAE;oBAChB,GAAG,CAAC,KAAK,CAAC,sDAAsD,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;oBACjF,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;iBACzE;gBACD,MAAM,OAAO,GAAsB;oBACjC,EAAE,EAAE,MAAM;oBACV,MAAM,EAAE,OAAO;oBACf,YAAY,EAAE,IAAI,IAAI,EAAE;oBACxB,IAAI,EAAE,QAAQ,CAAC,OAAO;iBACvB,CAAC;gBACF,MAAM,aAAa,CAAC;oBAClB,aAAa,EAAE,4BAA4B,KAAK,IAAI,MAAM,YAAY,EAAE,GAAG;oBAC3E,eAAe,EAAE;wBACf,CAAC,YAAY,CAAC,EAAE;4BACd,QAAQ,EAAE,OAAO;4BACjB,QAAQ,EAAE,IAAI;yBACf;qBACF;iBACF,CAAG,CAAC;aAEN;iBAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe,EAAE;gBAC5C,IAAI,CAAC,YAAY,EAAE;oBACjB,GAAG,CAAC,KAAK,CAAC,2DAA2D,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;oBACtF,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;iBAC9E;gBACD,MAAM,aAAa,mCACd,YAAY,KACf,IAAI,EAAE,QAAQ,CAAC,OAAO,GACvB,CAAC;gBACF,MAAM,aAAa,CAAC;oBAClB,aAAa,EAAE,iCAAiC,KAAK,IAAI,MAAM,YAAY,EAAE,GAAG;oBAChF,eAAe,EAAE;wBACf,CAAC,QAAQ,CAAC,EAAE;4BACV,QAAQ,EAAE,aAAa;4BACvB,QAAQ,EAAE,YAAY;yBACvB;qBACF;iBACF,CAAG,CAAC;aAEN;iBAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE;gBACxC,IAAI,CAAC,YAAY,EAAE;oBACjB,GAAG,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;oBAClF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;iBAC1E;gBACD,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,EAAE;oBACnC,GAAG,CAAC,KAAK,CAAC,qDAAqD,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;oBAChF,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;iBACxE;gBACD,MAAM,WAAW,mCACZ,YAAY,KACf,MAAM,EAAE,QAAQ,CAAC,aAAa,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,GAC3E,CAAC;gBACF,IAAI,QAAQ,CAAC,aAAa,KAAK,cAAc,EAAE;oBAC7C,IAAI,CAAA,MAAA,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC,0CAAE,IAAI,MAAK,UAAU,EAAE;wBAC/E,GAAG,CAAC,KAAK,CAAC,wFAAwF,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;wBACnH,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;qBAC3G;iBACF;gBACD,MAAM,aAAa,CAAC;oBAClB,aAAa,EAAE,6BAA6B,KAAK,IAAI,MAAM,YAAY,EAAE,GAAG;oBAC5E,eAAe,EAAE;wBACf,CAAC,QAAQ,CAAC,EAAE;4BACV,QAAQ,EAAE,WAAW;4BACrB,QAAQ,EAAE,YAAY;yBACvB;qBACF;iBACF,CAAG,CAAC;aACN;QACH,CAAC;QAED,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,KAAK,WAAW,IAAI,EAAE,CAAC,WAAW,KAAK,UAAU,CAAC;QACvF,MAAM,sBAAsB,GAAG,EAAE,CAAC,MAAM,KAAK,WAAW,IAAI,EAAE,CAAC,WAAW,KAAK,aAAa,CAAC;QAE7F,MAAM,OAAO,GAAG,aAAa,KAAK,SAAS;YACzC,CAAC,CAAC,IAAC,WAAW;gBACV,IAAC,MAAM,IAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE,OAAO,EAAE,UAAU,WAAe;gBAErE,IAAC,MAAM,IAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE,OAAO,EAAE,QAAQ;wBAClE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC;wBAC3C,CAAC,CAAC,KAAK,CAAC,aAAiB;gBAEzB,IAAC,MAAM,IAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,EAAC,SAAS,EACjD,OAAO,EAAE,aAAa,cAAkB;gBAE1C,IAAC,MAAM,IAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,EAAC,SAAS,EACjD,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,eAAmB;gBAE7E,IAAC,KAAK,CAAC,QAAQ;oBACZ,CAAC,sBAAsB;wBACtB,CAAC,CAAC,IAAC,MAAM,IACH,QAAQ,EAAE,MAAM,KAAK,IAAI,EACzB,MAAM,EAAE,EAAE,CAAC,WAAW,KAAK,UAAU,EACrC,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,aAEpD;wBACX,CAAC,CAAC,IAAI;oBACP,mBAAmB;wBAClB,CAAC,CAAC,IAAC,MAAM,IACH,QAAQ,EAAE,MAAM,KAAK,IAAI,EACzB,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,OAAO,EAAE,IAAI,EAAC,aAAa,EACjD,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,YAEhD;wBACX,CAAC,CAAC,IAAI;oBACP,CAAC,mBAAmB;wBACnB,CAAC,CAAC,IAAC,MAAM,IACH,QAAQ,EAAE,MAAM,KAAK,IAAI,EACzB,MAAM,EAAE,EAAE,CAAC,WAAW,KAAK,aAAa,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,oBAEvD;wBACX,CAAC,CAAC,IAAI;oBACP,sBAAsB;wBACrB,CAAC,CAAC,IAAC,MAAM,IACH,QAAQ,EAAE,MAAM,KAAK,IAAI,EACzB,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,OAAO,EAAE,IAAI,EAAC,aAAa,EACjD,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,aAAa,CAAC,YAEnD;wBACX,CAAC,CAAC,IAAI,CACO,CACP;YAChB,CAAC,CAAC,IAAC,KAAK,CAAC,QAAQ;;gBACL,gBAAK,EAAE,CAAC,MAAM,IAAI,GAAG,CAAM;;gBAEtB,gBAAK,EAAE,CAAC,WAAW,IAAI,GAAG,CAAM,CAC9B,CAAC;QAEtB,IAAI,UAAuB,CAAC;QAC5B,IAAI,YAAY,KAAK,eAAe,EAAE;YACpC,UAAU,GAAG,IAAC,eAAe,IAC3B,KAAK,EAAE,EAAE,CAAC,aAAa,EACvB,QAAQ,EAAE,aAAa;oBACrB,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,YAAY,iCAAM,EAAE,KAAE,aAAa,IAAG;oBAC3D,CAAC,CAAC,SAAS,GACb,CAAC;SACJ;aAAM,IAAI,YAAY,KAAK,cAAc,EAAE;YAC1C,UAAU,GAAG,IAAC,kBAAkB,IAC9B,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC,wBAAwB,EAAE,EACzE,QAAQ,EAAE,aAAa;oBACrB,CAAC,CAAC,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,EAAE,CAC/C,YAAY,iCAAM,EAAE,KAAE,gBAAgB,EAAE,wBAAwB,IAAG;oBACrE,CAAC,CAAC,SAAS,GACb,CAAC;SACJ;aAAM,IAAI,YAAY,KAAK,SAAS,EAAE;YACrC,UAAU,GAAG,IAAC,cAAc,IAC1B,KAAK,EAAE,EAAE,CAAC,oBAAoB,EAC9B,QAAQ,EAAE,aAAa;oBACrB,CAAC,CAAC,CAAC,oBAAoB,EAAE,EAAE,CAAC,YAAY,iCAAM,EAAE,KAAE,oBAAoB,IAAG;oBACzE,CAAC,CAAC,SAAS,GACb,CAAC;SACJ;aAAM,IAAI,YAAY,KAAK,WAAW,EAAE;YACvC,UAAU,GAAG,IAAC,aAAa,IACzB,WAAW,EACT,aAAa;oBACb,CAAC,CAAC;wBACE,IAAC,OAAO,IAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,KAAK,EAAC,yBAAyB,EAAC,MAAM,EAAC,SAAS;4BAC3G,yFAEI;4BACJ,iKAEI;4BACJ,gGAEI,CACI;wBACV,IAAC,IAAI,IAAC,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE;4BACnE,IAAC,IAAI,CAAC,OAAO,IAAC,KAAK,EAAC,UAAU,GAAG;4BAChC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,CAClE,IAAC,IAAI,CAAC,IAAI,IACR,GAAG,EAAE,OAAO,EACZ,IAAI,EAAC,KAAK,EACV,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EACzB,QAAQ,EAAE,CAAC,YAAY,EACvB,OAAO,EAAE,YAAY;oCACnB,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAC7B,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,YAAa,EAAE,EAAE,EAC9C,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;oCAC1B,CAAC,CAAC,SAAS,GACb,CACH,CACI,CACN;oBACL,CAAC,CAAC,IAAC,OAAO,IAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAC,4BAA4B,EAAC,MAAM,EAAC,SAAS,oDAEhF,GAEd,CAAC;SACJ;aAAM,IAAI,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE;YACnH,MAAM,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;YAC/F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YAChD,MAAM,eAAe,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;YACjE,IAAI,WAAW,IAAI,CAAC,gBAAgB,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE;gBACrE,IAAI;oBACF,UAAU,GAAG,IAAC,eAAe,IAC3B,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,IAAI,SAAS,EAC/C,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,mBAAmB,EACxC,QAAQ,EAAE,aAAa;4BACrB,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC;4BAClE,CAAC,CAAC,SAAS,EACb,QAAQ,EAAE,CAAC,aAAa,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC;4BACxD,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ;4BAC5B,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAChC,QAAQ,EAAE,aAAa;4BACrB,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;4BAC/F,CAAC,CAAC,SAAS,EACb,QAAQ,EAAE,aAAa;4BACrB,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;4BAC3E,CAAC,CAAC,SAAS,GACb,CAAC;iBACJ;gBAAC,OAAO,CAAC,EAAE;oBACV,UAAU,GAAG,IAAC,aAAa,IACzB,IAAI,EAAC,cAAc,EACnB,KAAK,EAAC,mCAAmC,GAAG,CAAC;iBAChD;aACF;iBAAM;gBACL,UAAU,GAAG,IAAC,aAAa,IACzB,IAAI,EAAC,cAAc,EACnB,KAAK,EAAC,0CAA0C,GAAG,CAAC;aACvD;SACF;aAAM;YACL,UAAU,GAAG,IAAC,aAAa,IACzB,IAAI,EAAC,cAAc,EACnB,KAAK,EAAC,0BAA0B,EAChC,WAAW,EAAE,iCAAiC,YAAY,GAAG,GAAI,CAAC;SACrE;QAED,EAAE,GAAG,CACH,IAAC,QAAQ,IAAC,OAAO,EAAE,OAAO;YACxB,aAAK,GAAG,EAAE,GAAG,CAAA,qFAAqF,MAAM,CAAC,KAAK,EAAE;gBAC9G,IAAC,YAAY,IACX,sBAAsB,EAAE,sBAAsB,EAC9C,mBAAmB,EAAE,mBAAmB,EACxC,SAAS,EAAE,EAAE,CAAC,SAAS,EACvB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,EAC1B,sBAAsB,EACpB,aAAa,KAAK,SAAS;wBAC3B,EAAE,CAAC,wBAAwB,KAAK,SAAS;wBACzC,EAAE,CAAC,gBAAgB,KAAK,SAAS,EACnC,kBAAkB,EAChB,aAAa,KAAK,SAAS;wBAC3B,EAAE,CAAC,oBAAoB,KAAK,SAAS,GACvC,CACE;YAEN,aAAK,GAAG,EAAE,GAAG,CAAA,yBAAyB,EAAE,SAAS,EAAE,OAAO,CAAC,WAAW,IACnE,UAAU,CACP,CACG,CACZ,CAAC;KAEH;SAAM;QACL,EAAE,GAAG,IAAC,aAAa,IAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,wCAAwC,GAAG,CAAC;KAC3F;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAGF,MAAM,YAAY,GAUlB,UAAU,EACN,QAAQ,EAAE,SAAS,EAAE,sBAAsB,EAC3C,mBAAmB,EACnB,QAAQ,EACR,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE;IAE5D,SAAS,YAAY,CAAC,IAAe;QACnC,QAAQ,CAAC,IAAI,CAAC,EAAY,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,eAAe,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IAEjE,MAAM,KAAK,GAAgB,CAAC;YAC1B,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,eAAe;YACtB,UAAU,EAAE,YAAY,KAAK,eAAe;SAC7C,EAAE;YACD,EAAE,EAAE,cAAc;YAClB,QAAQ,EAAE,CAAC,sBAAsB;YACjC,KAAK,EAAE,oBAAoB;YAC3B,UAAU,EAAE,YAAY,KAAK,cAAc;SAC5C,EAAE;YACD,EAAE,EAAE,SAAS;YACb,QAAQ,EAAE,CAAC,kBAAkB;YAC7B,KAAK,EAAE,eAAe;YACtB,UAAU,EAAE,YAAY,KAAK,SAAS;SACvC,EAAE;YACD,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,WAAW;YAClB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,YAAY,KAAK,WAAW;YACxC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;YAC3C,UAAU,EAAE,CAAE,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,EAAE;;oBAC7E,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACrD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;oBAC7F,MAAM,IAAI,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,YAAY,CAAC;oBAC3C,MAAM,IAAI,GAAG,CAAA,MAAA,QAAQ,CAAC,eAAe,CAAC,0CAAE,IAAI,KAAI,SAAS,CAAC;oBAE1D,IAAI,KAAkB,CAAC;oBAEvB,IAAI,CAAC,IAAI,EAAE;wBACT,KAAK,GAAG,kBAAO,eAAe,CAAQ,CAAC;qBACxC;yBAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;wBACvC,KAAK,GAAG,IAAC,IAAI,IACX,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,CAAA,sBAAsB,EAC9B,gCAAgC,EAAE,eAAe,EACjD,mBAAmB,EAAE,mBAAmB,EACxC,QAAQ,EAAE,QAAQ,CAAC,OAAO,GAAI,CAAC;qBAClC;yBAAM,IAAI,IAAI,KAAK,SAAS,EAAE;wBAC7B,KAAK,GAAG,IAAC,IAAI,IACX,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,CAAA,sBAAsB,EAC9B,mBAAmB,EAAE,mBAAmB,EACxC,gCAAgC,EAAE,eAAe,EACjD,QAAQ,EAAE,IAAI,GAAI,CAAC;qBACtB;yBAAM;wBACL,KAAK,GAAG,wCAAgC,CAAC;qBAC1C;oBAED,OAAO;wBACL,UAAU,EAAE,YAAY,KAAK,eAAe;wBAC5C,EAAE,EAAE,eAAe;wBACnB,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAa;wBAC9C,cAAc,EAAE,IAAC,GAAG,IAChB,OAAO,QAAC,GAAG,EAAE,GAAG,CAAA,sBAAsB,EACtC,KAAK,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,CAAC,KAAK,IAC7B,CAAA,MAAA,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC;4BACrC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,0CAAG,CAAC,CAAC;6BAChD,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,CAAC,KAAK,CAAA,CACnB;wBACN,KAAK;qBACN,CAAC;gBACJ,CAAC,CAAC,CAAC;SACJ,CAAC,CAAC;IAEH,OAAO,CACL,IAAC,IAAI,IACH,QAAQ,EAAE,KAAK,EACf,WAAW,EAAE,YAAY,GACzB,CACH,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,eAAe,GAGhB,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,gBAAgB;QAC/B,IAAC,QAAQ,IAAC,IAAI,QACZ,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EACjC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAI,CACpE,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,kBAAkB,GAGnB,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,SAAS,iBAAiB,CAAC,GAAyC;QAClE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IACD,SAAS,iBAAiB,CAAC,GAAyC;QAClE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,CACL;QACE,IAAC,SAAS,IAAC,KAAK,EAAC,oBAAoB;YACnC,IAAC,QAAQ,IAAC,IAAI,QACZ,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAC7C,QAAQ,EAAE,iBAAiB,GAAI,CACvB;QACZ,IAAC,SAAS,IAAC,KAAK,EAAC,6BAA6B;YAC5C,IAAC,QAAQ,IAAC,IAAI,QACZ,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAC7C,QAAQ,EAAE,iBAAiB,GAAI,CACvB,CACX,CACJ,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,cAAc,GAGf,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,OAAO,CACL,IAAC,SAAS,IAAC,KAAK,EAAC,gBAAgB;QAC/B,IAAC,QAAQ,IAAC,IAAI,QACZ,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EACvC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAI,CACjF,CACb,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,eAAe,GAahB,UAAU,EACX,KAAK,EAAE,QAAQ,EAAE,QAAQ,EACzB,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAC9C,mBAAmB,EAAE;IACvB,IAAI,QAAqB,CAAC;IAC1B,IAAI,kBAAsC,CAAC;IAE3C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;QAC9B,kBAAkB,GAAG,CACnB,IAAC,SAAS,IAAC,MAAM,QAAC,KAAK,EAAC,iBAAiB;YACvC,IAAC,UAAU,IACT,KAAK,EAAE,KAAK,CAAC,aAAa,KAAK,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAC5E,QAAQ,EAAE,CAAC,QAAQ,EACnB,WAAW,EAAC,SAAS,EACrB,QAAQ,EAAE,QAAQ;oBAChB,CAAC,CAAC,CAAC,GAAsC,EAAE,EAAE;wBACzC,IAAI,CAAC,QAAQ,EAAE;4BAAE,OAAO;yBAAE;wBAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;wBACvC,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;4BACxB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;4BAChE,QAAQ,iCAAM,MAAM,KAAE,aAAa,EAAE,YAAY,IAAG,CAAC;yBACtD;6BAAM;4BACL,QAAQ,iCAAM,KAAK,KAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,IAAG,CAAC;yBAClF;oBACH,CAAC;oBACH,CAAC,CAAC,SAAS,GAAG,CACR,CACb,CAAC;KACH;SAAM;QACL,kBAAkB,GAAG,IAAI,CAAC;KAC3B;IAED,MAAM,QAAQ,GAAwB,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAEnG,IAAI,QAAQ,KAAK,SAAS,EAAE;QAC1B,QAAQ,GAAG,IAAC,aAAa,IAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,6BAA6B,GAAG,CAAC;KACtF;SAAM,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;QACjD,MAAM,IAAI,GAAG,QAA6B,CAAC;QAC3C,QAAQ,GAAG,IAAC,IAAI,IACd,QAAQ,EAAE,QAAQ,EAClB,gCAAgC,EAAE,eAAe,EACjD,mBAAmB,EAAE,mBAAmB,EACxC,QAAQ,EAAE,QAAQ;gBAChB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,iCAAM,KAAK,KAAE,OAAO,IAAG,CAAC,CAAC,CAAC,KAAK,CAAC;gBAClE,CAAC,CAAC,SAAS,GAAI,CAAC;KACrB;SAAM;QACL,MAAM,IAAI,GAAG,QAA+B,CAAC;QAC7C,QAAQ,GAAG,IAAC,IAAI,IACd,mBAAmB,EAAE,mBAAmB,EACxC,gCAAgC,EAAE,eAAe,EACjD,QAAQ,EAAE,QAAQ,GAAI,CAAC;KAC1B;IAED,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;IAExD,SAAS,gBAAgB,CAAC,IAAY;QACpC,MAAM,EAAE,GAAG,IAAqC,CAAC;QAEjD,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO;SAAE;QAC/C,IAAI,CAAC,QAAQ,IAAI,CAAC,qBAAqB,IAAI,EAAE,KAAK,UAAU,IAAI,gBAAgB,KAAK,SAAS,EAAE;YAAE,OAAO;SAAE;QAE3G,IAAI,EAAE,KAAK,WAAW,EAAE;YACtB,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE;gBACrB,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;gBAClB,aAAa,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;gBACrC,MAAM,EAAE,CAAC,SAAS,CAAC;aACpB,CAAC,CAAC,CAAC;SACL;aAAM;YACL,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE;gBACrB,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;gBAClB,OAAO,EAAE,gBAAgB;aAC1B,CAAC,CAAC,CAAC;SACL;IACH,CAAC;IAED,OAAO,CACL,aAAK,GAAG,EAAE,GAAG,CAAA,mDAAmD;QAC9D,aAAK,GAAG,EAAE,GAAG,CAAA,iGAAiG;YAC5G,IAAC,UAAU,IACT,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAC7D,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAC9C,KAAK,EAAE,KAAK,CAAC,IAAI,EACjB,QAAQ,EAAE,CAAC,QAAQ,IAAI,CAAC,qBAAqB,IAAI,gBAAgB,KAAK,SAAS,EAC/E,QAAQ,EAAE,CAAC,QAAQ,IAAI,qBAAqB,IAAI,gBAAgB,KAAK,SAAS,CAAC;oBAC7E,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;oBACpD,CAAC,CAAC,SAAS,GAAI;;YAInB,IAAC,EAAE,IAAC,GAAG,EAAE,GAAG,CAAA,YAAY,IAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAM;YACtD,kBAAkB,CACf;QAEN,aAAK,GAAG,EAAE,GAAG,CAAA,4BAA4B,IACtC,QAAQ,CACL,CACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport log from 'electron-log';\n\nimport yaml from 'js-yaml';\nimport update from 'immutability-helper';\n\nimport React, { useContext, useState } from 'react';\n\nimport { jsx, css } from '@emotion/core';\n\nimport {\n Button, ButtonGroup, Callout, Classes,\n Colors,\n FormGroup, H4, HTMLSelect, IconName, InputGroup, IOptionProps,\n ITreeNode, Menu, NonIdealState, Spinner, Tag, TextArea, Tree\n} from '@blueprintjs/core';\n\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport {\n ChangeProposal, ChangeRequest, DECISION_STATUSES, DISPOSITION_OPTIONS,\n ItemClassConfiguration, ItemDetailView, ItemEditView, Payload, PROPOSAL_TYPES,\n RegisterItem,\n RegisterItemDataHook,\n RegistryViewProps, RelatedItemClassConfiguration\n} from '../types';\nimport { MainView } from './MainView';\nimport { _getRelatedClass } from './util';\n\n\nconst PROPOSAL_ICON: Record<typeof PROPOSAL_TYPES[number], IconName> = {\n addition: 'add',\n clarification: 'edit',\n amendment: 'remove',\n}\n\n\nexport const CHANGE_REQUEST_OPTIONS: Record<string, IOptionProps> = {\n new: { value: 'new', label: \"New change request…\" },\n} as const;\n\n\nexport const ChangeRequestView: React.FC<\n Pick<RegistryViewProps, 'itemClassConfiguration'> & {\n id: string\n useRegisterItemData: RegisterItemDataHook\n onSave?: (crID: string, newValue: ChangeRequest, oldValue: ChangeRequest) => Promise<void>\n onDelete?: (crID: string, oldValue: ChangeRequest) => Promise<void>\n}> = function ({\n itemClassConfiguration, id,\n useRegisterItemData,\n onSave, onDelete }) {\n\n const { useObjectData, makeRandomID, updateObjects } = useContext(DatasetContext);\n\n const [selectedItem, selectItem] = useState<string>('justification');\n\n const objectPath = `change-requests/${id}.yaml`;\n const crData = useObjectData({ objectPaths: [objectPath] });\n const dataAsString = crData.value.data?.[objectPath]?.value ?? undefined;\n const maybeCR: ChangeRequest | Record<never, never> | undefined =\n dataAsString !== undefined\n ? yaml.load(dataAsString as string)\n : undefined;\n\n const itemPaths = Object.keys((maybeCR as ChangeRequest)?.proposals || {});\n\n //log.debug(\"Item data request\", itemDataRequest);\n //const itemData = useObjectData(itemDataRequest).value;\n\n const itemData: Record<string, RegisterItem<any> | null> =\n useRegisterItemData({ itemPaths }).value;\n\n const [edited, updateEdited] = useState<ChangeRequest | null>(null);\n\n let el: JSX.Element;\n\n if (maybeCR === undefined) {\n el = <NonIdealState title={<Spinner />} />;\n\n } else if ((maybeCR as ChangeRequest).id) {\n const originalCR = maybeCR as ChangeRequest;\n const cr = edited || originalCR;\n\n async function handleSave() {\n if (!onSave) { return; }\n if (edited === null) { return; }\n await onSave(originalCR.id, edited, originalCR);\n updateEdited(null);\n }\n\n function handlePropose() {\n if (!onSave) { return; }\n if (edited !== null) { return; }\n onSave(originalCR.id, { ...cr, status: 'pending', disposition: undefined, timeProposed: new Date() }, originalCR);\n }\n\n function handleUpdateState(\n newStatus: typeof DECISION_STATUSES[number],\n newDisposition: typeof DISPOSITION_OPTIONS[number] | undefined) {\n if (!onSave) { return; }\n if (edited !== null) { return; }\n let extraProps: Partial<ChangeRequest>;\n\n if (newStatus === 'final') {\n extraProps = { timeDisposed: new Date() };\n } else {\n if (newDisposition === 'withdrawn') {\n extraProps = { timeProposed: undefined };\n } else {\n extraProps = {};\n }\n }\n onSave(originalCR.id, { ...cr, status: newStatus, disposition: newDisposition, ...extraProps }, originalCR);\n }\n\n async function handleAddProposal(id: string, defaults: Record<string, any>) {\n updateEdited(update(cr, { proposals: {\n [id]: { $set: { type: 'addition', payload: defaults } },\n } }))\n }\n\n async function handleAcceptProposal(itemID: string, clsID: string, proposal: ChangeProposal) {\n if (!updateObjects) {\n return;\n }\n\n const itemPath = `${clsID}/${itemID}`;\n const itemFilePath = `${itemPath}.yaml`;\n\n const existingItem = itemData[itemPath];\n\n if (proposal.type === 'addition') {\n if (existingItem) {\n log.error(\"Cannot accept proposed addition: item already exists\", clsID, itemID);\n throw new Error(\"Cannot accept proposed addition: item already exists\");\n }\n const newItem: RegisterItem<any> = {\n id: itemID,\n status: 'valid',\n dateAccepted: new Date(),\n data: proposal.payload,\n };\n await updateObjects({\n commitMessage: `CR: Accepted addition of ${clsID}/${itemID} (per CR ${id})`,\n objectChangeset: {\n [itemFilePath]: {\n newValue: newItem,\n oldValue: null,\n },\n },\n }, );\n\n } else if (proposal.type === 'clarification') {\n if (!existingItem) {\n log.error(\"Cannot accept proposed clarification: item does not exist\", clsID, itemID);\n throw new Error(\"Cannot accept proposed clarification: item does not exist\");\n }\n const clarifiedItem: RegisterItem<any> = {\n ...existingItem,\n data: proposal.payload,\n };\n await updateObjects({\n commitMessage: `CR: Accepted clarification of ${clsID}/${itemID} (per CR ${id})`,\n objectChangeset: {\n [itemPath]: {\n newValue: clarifiedItem,\n oldValue: existingItem,\n },\n },\n }, );\n\n } else if (proposal.type === 'amendment') {\n if (!existingItem) {\n log.error(\"Cannot accept proposed amendment: item does not exist\", clsID, itemID);\n throw new Error(\"Cannot accept proposed amendment: item does not exist\");\n }\n if (existingItem.status !== 'valid') {\n log.error(\"Cannot accept proposed amendment: item is not valid\", clsID, itemID);\n throw new Error(\"Cannot accept proposed amendment: item is not valid\");\n }\n const amendedItem = {\n ...existingItem,\n status: proposal.amendmentType === 'retirement' ? 'retired' : 'superseded',\n };\n if (proposal.amendmentType === 'supersession') {\n if (cr.proposals[`${clsID}/${proposal.supersedingItemID}`]?.type !== 'addition') {\n log.error(\"Cannot accept proposed amendment: superseding item is not specified or cannot be found\", clsID, itemID);\n throw new Error(\"Cannot accept proposed amendment: superseding item is not specified or cannot be found\");\n }\n }\n await updateObjects({\n commitMessage: `CR: Accepted amendment of ${clsID}/${itemID} (per CR ${id})`,\n objectChangeset: {\n [itemPath]: {\n newValue: amendedItem,\n oldValue: existingItem,\n },\n },\n }, );\n }\n }\n\n const tentativelyAccepted = cr.status === 'tentative' && cr.disposition === 'accepted';\n const tentativelyNotAccepted = cr.status === 'tentative' && cr.disposition === 'notAccepted';\n\n const actions = updateObjects !== undefined\n ? <ButtonGroup>\n <Button disabled={edited === null} onClick={handleSave}>Save</Button>\n\n <Button intent=\"danger\" disabled={edited !== null} onClick={onDelete\n ? () => onDelete(originalCR.id, originalCR)\n : void 0}>Delete</Button>\n\n <Button disabled={edited !== null} intent=\"success\"\n onClick={handlePropose}>Propose</Button>\n\n <Button disabled={edited !== null} intent=\"warning\"\n onClick={() => handleUpdateState('pending', 'withdrawn')}>Withdraw</Button>\n\n <React.Fragment>\n {!tentativelyNotAccepted\n ? <Button\n disabled={edited !== null}\n active={cr.disposition === 'accepted'}\n onClick={() => handleUpdateState('tentative', 'accepted')}>\n Accept\n </Button>\n : null}\n {tentativelyAccepted\n ? <Button\n disabled={edited !== null}\n active={cr.status === 'final'} icon=\"take-action\"\n onClick={() => handleUpdateState('final', 'accepted')}>\n Final\n </Button>\n : null}\n {!tentativelyAccepted\n ? <Button\n disabled={edited !== null}\n active={cr.disposition === 'notAccepted'}\n onClick={() => handleUpdateState('tentative', 'notAccepted')}>\n Do not accept\n </Button>\n : null}\n {tentativelyNotAccepted\n ? <Button\n disabled={edited !== null}\n active={cr.status === 'final'} icon=\"take-action\"\n onClick={() => handleUpdateState('final', 'notAccepted')}>\n Final\n </Button>\n : null}\n </React.Fragment>\n </ButtonGroup>\n : <React.Fragment>\n Status: <em>{cr.status || '—'}</em>\n &emsp;•&emsp;\n Disposition: <em>{cr.disposition || '—'}</em>\n </React.Fragment>;\n\n let detailView: JSX.Element;\n if (selectedItem === 'justification') {\n detailView = <CRJustification\n value={cr.justification}\n onChange={updateObjects\n ? (justification) => updateEdited({ ...cr, justification })\n : undefined}\n />;\n } else if (selectedItem === 'control-body') {\n detailView = <CRControlBodyInput\n value={{ notes: cr.controlBodyNotes, event: cr.controlBodyDecisionEvent }}\n onChange={updateObjects\n ? (controlBodyNotes, controlBodyDecisionEvent) =>\n updateEdited({ ...cr, controlBodyNotes, controlBodyDecisionEvent })\n : undefined}\n />;\n } else if (selectedItem === 'manager') {\n detailView = <CRManagerNotes\n value={cr.registerManagerNotes}\n onChange={updateObjects\n ? (registerManagerNotes) => updateEdited({ ...cr, registerManagerNotes })\n : undefined}\n />;\n } else if (selectedItem === 'proposals') {\n detailView = <NonIdealState\n description={\n updateObjects\n ? <>\n <Callout style={{ textAlign: 'left', marginBottom: '1rem' }} title=\"Managing your proposals\" intent=\"primary\">\n <p>\n Select a proposed change on the left to&nbsp;view or&nbsp;edit&nbsp;it.\n </p>\n <p>\n To propose a change, close this CR, navigate to an item you want to change in item list, and&nbsp;click “Propose&nbsp;a&nbsp;change”.\n </p>\n <p>\n You won’t be able to edit your change request once you have submitted it.\n </p>\n </Callout>\n <Menu className={Classes.ELEVATION_1} style={{ marginBottom: '1rem' }}>\n <Menu.Divider title=\"New item\" />\n {Object.entries(itemClassConfiguration).map(([classID, classCfg]) =>\n <Menu.Item\n key={classID}\n icon=\"add\"\n text={classCfg.meta.title}\n disabled={!makeRandomID}\n onClick={makeRandomID\n ? async () => handleAddProposal(\n `${classCfg.meta.id}/${await makeRandomID!()}`,\n classCfg.defaults || {})\n : undefined}\n />\n )}\n </Menu>\n </>\n : <Callout style={{ textAlign: 'left' }} title=\"Reviewing proposed changes\" intent=\"primary\">\n Select a proposed change on the left to view.\n </Callout>\n }\n />;\n } else if (cr.proposals[selectedItem] && (itemData[selectedItem] || cr.proposals[selectedItem].type === 'addition')) {\n const proposal = cr.proposals[selectedItem];\n const classID = selectedItem.split('/')[0];\n const classConfig = Object.values(itemClassConfiguration).find(cls => cls.meta.id === classID);\n const existingItemData = itemData[selectedItem];\n const getRelatedClass = _getRelatedClass(itemClassConfiguration);\n if (classConfig && (existingItemData || proposal.type === 'addition')) {\n try {\n detailView = <ProposalDetails\n value={proposal}\n classConfig={classConfig}\n existingItemData={existingItemData || undefined}\n getRelatedClass={getRelatedClass}\n useRegisterItemData={useRegisterItemData}\n onAccept={updateObjects\n ? (itemID, clsID) => handleAcceptProposal(itemID, clsID, proposal)\n : undefined}\n ItemView={(updateObjects && proposal.type !== 'amendment')\n ? classConfig.views.editView\n : classConfig.views.detailView}\n onChange={updateObjects\n ? (proposal) => updateEdited(update(cr, { proposals: { [selectedItem]: { $set: proposal } } }))\n : undefined}\n onDelete={updateObjects\n ? () => updateEdited(update(cr, { proposals: { $unset: [selectedItem] } }))\n : undefined}\n />;\n } catch (e) {\n detailView = <NonIdealState\n icon=\"heart-broken\"\n title=\"Unable to load existing item data\" />;\n }\n } else {\n detailView = <NonIdealState\n icon=\"heart-broken\"\n title=\"Unknown item class or missing item data!\" />;\n }\n } else {\n detailView = <NonIdealState\n icon=\"heart-broken\"\n title=\"A strange thing happened\"\n description={`Unable to find selected item “${selectedItem}”`} />;\n }\n\n el = (\n <MainView actions={actions}>\n <div css={css`flex-shrink: 0; width: 30vw; display: flex; flex-flow: column nowrap; background: ${Colors.WHITE}`}>\n <CRNavigation\n itemClassConfiguration={itemClassConfiguration}\n useRegisterItemData={useRegisterItemData}\n proposals={cr.proposals}\n itemData={itemData}\n onSelect={selectItem}\n selectedItem={selectedItem}\n enableControlBodyInput={\n updateObjects !== undefined ||\n cr.controlBodyDecisionEvent !== undefined ||\n cr.controlBodyNotes !== undefined}\n enableManagerNotes={\n updateObjects !== undefined ||\n cr.registerManagerNotes !== undefined}\n />\n </div>\n\n <div css={css`flex: 1; padding: 1rem;`} className={Classes.ELEVATION_1}>\n {detailView}\n </div>\n </MainView>\n );\n\n } else {\n el = <NonIdealState icon=\"heart-broken\" title=\"Failed to load selected change request\" />;\n }\n\n return el;\n};\n\n\nconst CRNavigation: React.FC<\n Pick<RegistryViewProps, 'itemClassConfiguration'> & {\n useRegisterItemData: RegisterItemDataHook\n proposals: ChangeRequest[\"proposals\"]\n enableControlBodyInput: boolean\n enableManagerNotes: boolean\n itemData: Record<string, RegisterItem<any> | null>\n selectedItem: string\n onSelect: (item: string) => void\n}> =\nfunction ({\n itemData, proposals, itemClassConfiguration,\n useRegisterItemData,\n onSelect,\n selectedItem, enableControlBodyInput, enableManagerNotes }) {\n\n function handleSelect(node: ITreeNode) {\n onSelect(node.id as string);\n }\n\n const getRelatedClass = _getRelatedClass(itemClassConfiguration);\n\n const nodes: ITreeNode[] = [{\n id: 'justification',\n label: \"Justification\",\n isSelected: selectedItem === 'justification',\n }, {\n id: 'control-body',\n disabled: !enableControlBodyInput,\n label: \"Control body input\",\n isSelected: selectedItem === 'control-body',\n }, {\n id: 'manager',\n disabled: !enableManagerNotes,\n label: \"Manager notes\",\n isSelected: selectedItem === 'manager',\n }, {\n id: 'proposals',\n label: \"Proposals\",\n isExpanded: true,\n isSelected: selectedItem === 'proposals',\n hasCaret: Object.keys(proposals).length > 0,\n childNodes: [ ...Object.entries(proposals).map(([itemIDWithClass, proposal]) => {\n const [classID, itemID] = itemIDWithClass.split('/');\n const clsConfig = Object.values(itemClassConfiguration).find(cls => cls.meta.id === classID);\n const View = clsConfig?.views.listItemView;\n const data = itemData[itemIDWithClass]?.data || undefined;\n\n let label: JSX.Element;\n\n if (!View) {\n label = <span>{itemIDWithClass}</span>;\n } else if (proposal.type === 'addition') {\n label = <View\n itemID={itemID}\n css={css`white-space: nowrap;`}\n getRelatedItemClassConfiguration={getRelatedClass}\n useRegisterItemData={useRegisterItemData}\n itemData={proposal.payload} />;\n } else if (data !== undefined) {\n label = <View\n itemID={itemID}\n css={css`white-space: nowrap;`}\n useRegisterItemData={useRegisterItemData}\n getRelatedItemClassConfiguration={getRelatedClass}\n itemData={data} />;\n } else {\n label = <span>Unable to read item</span>;\n }\n\n return {\n isSelected: selectedItem === itemIDWithClass,\n id: itemIDWithClass,\n icon: PROPOSAL_ICON[proposal.type] as IconName,\n secondaryLabel: <Tag\n minimal css={css`white-space: nowrap;`}\n title={clsConfig?.meta.title}>\n {Object.entries(itemClassConfiguration).\n find(([_, cfg]) => cfg.meta.id === classID)?.[0] ||\n clsConfig?.meta.title}\n </Tag>,\n label,\n };\n })],\n }];\n\n return (\n <Tree\n contents={nodes}\n onNodeClick={handleSelect}\n />\n );\n};\n\n\nconst CRJustification: React.FC<{\n value: string\n onChange?: (val: string) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Justification:\">\n <TextArea fill\n disabled={!onChange} value={value}\n onChange={(evt) => onChange ? onChange(evt.currentTarget.value) : void 0} />\n </FormGroup>\n );\n};\n\n\nconst CRControlBodyInput: React.FC<{\n value: { notes: string | undefined, event: string | undefined }\n onChange?: (notes: string | undefined, event: string | undefined) => void\n}> = function ({ value, onChange }) {\n function handleNotesChange(evt: React.FormEvent<HTMLTextAreaElement>) {\n onChange ? onChange(evt.currentTarget.value || undefined, value.event) : void 0;\n }\n function handleEventChange(evt: React.FormEvent<HTMLTextAreaElement>) {\n onChange ? onChange(value.notes, evt.currentTarget.value || undefined) : void 0;\n }\n return (\n <>\n <FormGroup label=\"Control body notes\">\n <TextArea fill\n disabled={!onChange} value={value.notes || ''}\n onChange={handleNotesChange} />\n </FormGroup>\n <FormGroup label=\"Control body decision event\">\n <TextArea fill\n disabled={!onChange} value={value.event || ''}\n onChange={handleEventChange} />\n </FormGroup>\n </>\n );\n};\n\n\nconst CRManagerNotes: React.FC<{\n value: string | undefined\n onChange?: (val: string | undefined) => void\n}> = function ({ value, onChange }) {\n return (\n <FormGroup label=\"Manager notes:\">\n <TextArea fill\n disabled={!onChange} value={value || ''}\n onChange={(evt) => onChange ? onChange(evt.currentTarget.value || undefined) : void 0} />\n </FormGroup>\n );\n};\n\n\nconst ProposalDetails: React.FC<{\n value: ChangeProposal\n classConfig: ItemClassConfiguration<any>\n\n getRelatedClass: (clsID: string) => RelatedItemClassConfiguration\n useRegisterItemData: RegisterItemDataHook\n\n existingItemData?: Payload\n ItemView?: ItemEditView<any> | ItemDetailView<any>\n\n onAccept?: (itemID: string, clsID: string) => void\n onChange?: (val: ChangeProposal) => void\n onDelete?: () => void\n}> = function ({\n value, onChange, ItemView,\n existingItemData, classConfig, getRelatedClass,\n useRegisterItemData }) {\n let itemView: JSX.Element;\n let proposalProperties: JSX.Element | null;\n\n if (value.type === 'amendment') {\n proposalProperties = (\n <FormGroup inline label=\"Supersede with:\">\n <InputGroup\n value={value.amendmentType === 'supersession' ? value.supersedingItemID : ''}\n disabled={!onChange}\n placeholder=\"Item ID\"\n onChange={onChange\n ? (evt: React.FormEvent<HTMLInputElement>) => {\n if (!onChange) { return; }\n const itemID = evt.currentTarget.value;\n if (itemID.trim() === '') {\n const newVal = update(value, { $unset: ['supersedingItemID'] });\n onChange({ ...newVal, amendmentType: 'retirement' });\n } else {\n onChange({ ...value, amendmentType: 'supersession', supersedingItemID: itemID });\n }\n }\n : undefined}/>\n </FormGroup>\n );\n } else {\n proposalProperties = null;\n }\n\n const itemData: Payload | undefined = value.type === 'addition' ? value.payload : existingItemData;\n\n if (itemData === undefined) {\n itemView = <NonIdealState icon=\"heart-broken\" title=\"Unable to display this item\" />;\n } else if (onChange && value.type !== 'amendment') {\n const View = ItemView as ItemEditView<any>;\n itemView = <View\n itemData={itemData}\n getRelatedItemClassConfiguration={getRelatedClass}\n useRegisterItemData={useRegisterItemData}\n onChange={onChange\n ? (payload) => onChange ? onChange({ ...value, payload }) : void 0\n : undefined} />;\n } else {\n const View = ItemView as ItemDetailView<any>;\n itemView = <View\n useRegisterItemData={useRegisterItemData}\n getRelatedItemClassConfiguration={getRelatedClass}\n itemData={itemData} />;\n }\n\n const canChangeProposalType = value.type !== 'addition';\n\n function handleTypeChange(type: string) {\n const pt = type as typeof PROPOSAL_TYPES[number];\n\n if (PROPOSAL_TYPES.indexOf(pt) < 0) { return; }\n if (!onChange || !canChangeProposalType || pt === 'addition' || existingItemData === undefined) { return; }\n\n if (pt === 'amendment') {\n onChange(update(value, {\n type: { $set: pt },\n amendmentType: { $set: 'retirement' },\n $unset: ['payload'],\n }));\n } else {\n onChange(update(value, {\n type: { $set: pt },\n payload: existingItemData,\n }));\n }\n }\n\n return (\n <div css={css`flex: 1; display: flex; flex-flow: column nowrap;`}>\n <div css={css`flex-shrink: 0; display: flex; flex-flow: row nowrap; align-items: center; margin-bottom: 1rem;`}>\n <HTMLSelect\n options={PROPOSAL_TYPES.map(pt => ({ value: pt, label: pt }))}\n iconProps={{ icon: PROPOSAL_ICON[value.type] }}\n value={value.type}\n disabled={!onChange || !canChangeProposalType || existingItemData === undefined}\n onChange={(onChange && canChangeProposalType && existingItemData !== undefined)\n ? (evt) => handleTypeChange(evt.currentTarget.value)\n : undefined} />\n &ensp;\n of a\n &ensp;\n <H4 css={css`margin: 0;`}>{classConfig.meta.title}</H4>\n {proposalProperties}\n </div>\n\n <div css={css`flex: 1; overflow-y: auto;`}>\n {itemView}\n </div>\n </div>\n );\n};\n"]}
@@ -1,27 +0,0 @@
1
- /** @jsx jsx */
2
- /** @jsxFrag React.Fragment */
3
- import React from 'react';
4
- import { ItemClassConfigurationSet, Subregisters } from '../types';
5
- declare const CRITERIA_KEYS: readonly ["item-class", "custom"];
6
- declare type CriterionKey = typeof CRITERIA_KEYS[number];
7
- interface Criterion {
8
- key: CriterionKey;
9
- query: string;
10
- }
11
- export interface CriteriaGroup {
12
- require: 'all' | 'any' | 'none';
13
- criteria: (CriteriaGroup | Criterion)[];
14
- }
15
- export declare function makeBlankCriteria(): CriteriaGroup;
16
- interface CriteriaProps {
17
- impliedCriteria?: CriteriaGroup;
18
- criteria: CriteriaGroup;
19
- onChange?: (criteria: CriteriaGroup) => void;
20
- className?: string;
21
- availableClassIDs: string[];
22
- itemClasses: ItemClassConfigurationSet;
23
- subregisters?: Subregisters;
24
- }
25
- export declare const CriteriaTree: React.FC<CriteriaProps>;
26
- export default CriteriaTree;
27
- export declare function criteriaGroupToQueryExpression(cg: CriteriaGroup): string;
@@ -1,410 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.makeBlankCriteria = makeBlankCriteria;
7
- exports.criteriaGroupToQueryExpression = criteriaGroupToQueryExpression;
8
- exports.default = exports.CriteriaTree = void 0;
9
-
10
- var _core = require("@emotion/core");
11
-
12
- var _react = _interopRequireWildcard(require("react"));
13
-
14
- var _core2 = require("@blueprintjs/core");
15
-
16
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
17
-
18
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
-
20
- /** @jsx jsx */
21
-
22
- /** @jsxFrag React.Fragment */
23
- const COMPOSITION_OPERATORS = ['all', 'any', 'none'];
24
- const CRITERIA_KEYS = ['item-class', 'custom'];
25
-
26
- function isCriteriaKey(val) {
27
- return CRITERIA_KEYS.indexOf(val) >= 0;
28
- }
29
-
30
- const SUBREGISTER_PATH_PREFIX = '/subregisters/';
31
- const CRITERIA_CONFIGURATION = {
32
- 'item-class': {
33
- label: "Item class",
34
- toQuery: ({
35
- classID
36
- }, {
37
- subregisters
38
- }) => `objPath.indexOf("/${classID}/") === ${subregisters ? SUBREGISTER_PATH_PREFIX.length : 0}`,
39
- fromQuery: query => ({
40
- classID: query.split('/')[1]
41
- }),
42
- toSummary: ({
43
- classID
44
- }, {
45
- itemClasses
46
- }) => {
47
- var _a, _b;
48
-
49
- if (classID) {
50
- return (_b = (_a = itemClasses[classID]) === null || _a === void 0 ? void 0 : _a.meta.title) !== null && _b !== void 0 ? _b : classID;
51
- } else {
52
- return "No class selected";
53
- }
54
- },
55
- widget: ({
56
- data,
57
- onChange,
58
- itemClasses,
59
- className,
60
- style
61
- }) => {
62
- var _a;
63
-
64
- const itemClassChoices = Object.entries(itemClasses).map(([classID, classData]) => {
65
- var _a, _b;
66
-
67
- return {
68
- value: classID,
69
- label: (_b = (_a = classData === null || classData === void 0 ? void 0 : classData.meta) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : "Unknown class"
70
- };
71
- });
72
- return (0, _core.jsx)(_core2.HTMLSelect, {
73
- className: className,
74
- style: style,
75
- fill: true,
76
- minimal: true,
77
- options: itemClassChoices,
78
- value: (_a = data.classID) !== null && _a !== void 0 ? _a : '—',
79
- disabled: !onChange,
80
- onChange: onChange ? evt => onChange({
81
- classID: evt.currentTarget.value
82
- }) : undefined
83
- });
84
- }
85
- },
86
- 'custom': {
87
- label: "Custom query",
88
- toQuery: ({
89
- customExpression
90
- }) => `return ${customExpression}`,
91
- fromQuery: query => ({
92
- customExpression: query
93
- }),
94
- toSummary: ({
95
- customExpression
96
- }) => (0, _core.jsx)("code", null, customExpression),
97
- widget: ({
98
- data,
99
- onChange,
100
- className
101
- }) => {
102
- var _a;
103
-
104
- return (0, _core.jsx)(_core2.EditableText, {
105
- className: className,
106
- value: (_a = data.customExpression) !== null && _a !== void 0 ? _a : 'true',
107
- placeholder: "Enter a valid query expression\u2026",
108
- disabled: !onChange,
109
- onChange: onChange ? val => onChange({
110
- customExpression: val
111
- }) : undefined,
112
- onConfirm: val => val.trim() !== '' ? onChange({
113
- customExpression: val.trim()
114
- }) : void 0
115
- });
116
- }
117
- }
118
- };
119
-
120
- function isCriteriaGroup(val) {
121
- return val.hasOwnProperty('require');
122
- }
123
-
124
- function makeBlankCriteria() {
125
- return {
126
- require: 'all',
127
- criteria: []
128
- };
129
- }
130
-
131
- ;
132
-
133
- const CriteriaTree = function ({
134
- criteria,
135
- impliedCriteria,
136
- onChange,
137
- availableClassIDs,
138
- itemClasses,
139
- subregisters,
140
- className
141
- }) {
142
- const [crit, updateCriteria] = (0, _react.useState)(criteria);
143
- (0, _react.useEffect)(() => {
144
- updateCriteria(criteria);
145
- }, [JSON.stringify(criteria)]);
146
-
147
- function onAddGroup(parent) {
148
- var p = JSON.parse(JSON.stringify(parent));
149
- p.reverse();
150
- var newCriteria = JSON.parse(JSON.stringify([crit]));
151
- const newGroup = makeBlankCriteria();
152
- mutateGroup(newCriteria, p, {
153
- action: 'insert',
154
- item: newGroup
155
- });
156
- updateCriteria(newCriteria[0]);
157
- onChange(newCriteria[0]);
158
- }
159
-
160
- function onDelete(parent, idx) {
161
- var p = JSON.parse(JSON.stringify(parent));
162
- p.reverse();
163
- var newCriteria = JSON.parse(JSON.stringify([crit]));
164
- mutateGroup(newCriteria, p, {
165
- action: 'delete',
166
- idx
167
- });
168
- updateCriteria(newCriteria[0]);
169
- onChange(newCriteria[0]);
170
- }
171
-
172
- function onEditItem(parent, idx, newItem, commit) {
173
- var p = JSON.parse(JSON.stringify(parent));
174
- p.reverse();
175
- var newCriteria = JSON.parse(JSON.stringify([crit]));
176
- mutateGroup(newCriteria, p, {
177
- action: 'edit',
178
- idx,
179
- item: newItem
180
- });
181
- updateCriteria(newCriteria[0]);
182
-
183
- if (commit) {
184
- onChange(newCriteria[0]);
185
- }
186
- }
187
-
188
- const nodes = criteriaToNodes([crit], {
189
- onEditItem: onChange ? onEditItem : undefined,
190
- onAddGroup: onChange ? onAddGroup : undefined,
191
- onDeleteItem: onChange ? onDelete : undefined,
192
- itemClasses,
193
- subregisters,
194
- availableClassIDs
195
- });
196
- const implied = impliedCriteria !== undefined ? criteriaToNodes([impliedCriteria], {
197
- implied: true,
198
- itemClasses,
199
- subregisters,
200
- availableClassIDs
201
- }) : [];
202
- return (0, _core.jsx)(_core2.Tree, {
203
- className: className,
204
- contents: [...implied, ...nodes]
205
- });
206
- };
207
-
208
- exports.CriteriaTree = CriteriaTree;
209
- var _default = CriteriaTree;
210
- exports.default = _default;
211
-
212
- const CriteriaGroupLabel = function ({
213
- criteriaGroup,
214
- onUpdate
215
- }) {
216
- return (0, _core.jsx)(_react.default.Fragment, null, onUpdate ? (0, _core.jsx)(_core2.ButtonGroup, null, COMPOSITION_OPERATORS.map(op => (0, _core.jsx)(_core2.Button, {
217
- key: op,
218
- small: true,
219
- onClick: () => onUpdate ? onUpdate(op) : void 0,
220
- active: criteriaGroup.require === op
221
- }, op))) : (0, _core.jsx)("strong", null, criteriaGroup.require), " ", "of:");
222
- };
223
- /* Building query expression */
224
- // function criteriaToQueryExpression(cs: (CriteriaGroup | Criteria)[], prefix = 'return '): string {
225
- // return [ ...cs.entries() ].map(([idx, c]): string => {
226
- // if (isCriteriaGroup(c)) {
227
- // const cg = c as CriteriaGroup;
228
- // return `${prefix} ${criteriaToQueryExpression(cg.criteria, )}`;
229
- // } else {
230
- // const ci = c as Criteria;
231
- // }
232
- // };
233
- // }
234
-
235
-
236
- function criteriaGroupToQueryExpression(cg) {
237
- const exps = [];
238
-
239
- for (const c of cg.criteria) {
240
- if (isCriteriaGroup(c)) {
241
- exps.push(`${criteriaGroupToQueryExpression(c)}`);
242
- } else {
243
- exps.push(c.query);
244
- }
245
- }
246
-
247
- let result;
248
-
249
- if (exps.length < 1) {
250
- result = `true;`;
251
- } else {
252
- switch (cg.require) {
253
- case 'all':
254
- result = exps.join(' && ');
255
- break;
256
-
257
- case 'any':
258
- result = exps.join(' || ');
259
- break;
260
-
261
- case 'none':
262
- result = exps.map(exp => `${exp} === false`).join(' && ');
263
- break;
264
- }
265
- }
266
-
267
- return `return (objPath.startsWith("/subregisters/") || objPath.split("/").length >= 3) && ${result}`;
268
- }
269
- /* Building tree nodes */
270
-
271
-
272
- function criteriaToNodes(cs, opts) {
273
- var _a;
274
-
275
- const path = (_a = opts.path) !== null && _a !== void 0 ? _a : [];
276
- return [...cs.entries()].map(([idx, c]) => {
277
- const isRoot = path.length < 1;
278
- const icon = isRoot && opts.implied === true ? 'manual' : undefined;
279
- const disabled = opts.implied === true;
280
- const deleteButton = idx < cs.length - 1 && opts.onDeleteItem && !isRoot ? (0, _core.jsx)(_core2.Button, {
281
- minimal: true,
282
- small: true,
283
- onClick: () => opts.onDeleteItem(path, idx),
284
- icon: "cross"
285
- }) : null;
286
-
287
- if (isCriteriaGroup(c)) {
288
- const cg = c;
289
- return {
290
- id: `${path.join('-')}-${idx}-${opts.implied}`,
291
- disabled,
292
- hasCaret: true,
293
- isExpanded: true,
294
- icon,
295
- label: (0, _core.jsx)(CriteriaGroupLabel, {
296
- criteriaGroup: cg,
297
- onUpdate: opts.onEditItem ? op => opts.onEditItem(path, idx, Object.assign(Object.assign({}, cg), {
298
- require: op
299
- }), true) : undefined
300
- }),
301
- secondaryLabel: (0, _core.jsx)(_core2.ButtonGroup, null, opts.implied && isRoot ? (0, _core.jsx)(_react.default.Fragment, null, "(implied from plan)") : null, opts.onAddGroup ? (0, _core.jsx)(_core2.Button, {
302
- minimal: true,
303
- small: true,
304
- onClick: () => opts.onAddGroup([...path, idx]),
305
- icon: "more"
306
- }) : null, deleteButton),
307
- childNodes: criteriaToNodes(opts.onEditItem ? [...cg.criteria, {
308
- key: 'custom',
309
- query: 'return true;'
310
- }] : cg.criteria, Object.assign(Object.assign({}, opts), {
311
- path: [...path, idx]
312
- }))
313
- };
314
- } else {
315
- const ci = c;
316
- const {
317
- subregisters,
318
- itemClasses
319
- } = opts;
320
-
321
- if (!isCriteriaKey(ci.key)) {
322
- console.error("Invalid criteria key encountered", ci.key);
323
- throw new Error("Invalid criteria key encountered");
324
- }
325
-
326
- const cfg = CRITERIA_CONFIGURATION[ci.key];
327
-
328
- if (!cfg) {
329
- console.error("Missing criterion configuration for key", ci.key);
330
- throw new Error("Missing criterion configuration");
331
- }
332
-
333
- const Widget = cfg.widget;
334
- const data = cfg.fromQuery(ci.query, {
335
- subregisters,
336
- itemClasses
337
- });
338
- return {
339
- id: `${path.join('-')}-${idx}-${opts.implied ? 'implied' : ''}`,
340
- disabled,
341
- icon,
342
- label: (0, _core.jsx)(Widget, {
343
- itemClasses: opts.itemClasses,
344
- availableClassIDs: opts.availableClassIDs,
345
- subregisters: opts.subregisters,
346
- data: data,
347
- onChange: val => opts.onEditItem(path, idx, {
348
- key: ci.key,
349
- query: cfg.toQuery(val, {
350
- subregisters,
351
- itemClasses
352
- })
353
- }, true)
354
- }),
355
- secondaryLabel: (0, _core.jsx)(_core2.ButtonGroup, null, deleteButton)
356
- };
357
- }
358
- });
359
- }
360
-
361
- function mutateGroup(criteria, path, // Here path must be parent node path in reverse (top-level index coming last).
362
- mutation) {
363
- if (path.length < 1 && mutation.action === 'edit') {
364
- criteria[0].require = mutation.item.require;
365
- }
366
-
367
- for (const [curIdx, c] of criteria.entries()) {
368
- if (curIdx === path[path.length - 1]) {
369
- path.pop();
370
- let cg;
371
-
372
- if (c.hasOwnProperty('criteria')) {
373
- // This item is a group, let’s go in and delete descendants
374
- cg = c;
375
- } else {
376
- // This item is a predicate string, can’t go in and delete descendants
377
- throw new Error(`Cannot enter item: not a group at path ${path.join('/')}/${curIdx}: ${c}`);
378
- }
379
-
380
- if (path.length > 0) {
381
- mutateGroup(cg.criteria, path, mutation);
382
- } else {
383
- if (mutation.action === 'delete') {
384
- cg.criteria.splice(mutation.idx, 1);
385
- } else if (mutation.action === 'insert') {
386
- cg.criteria.push(mutation.item);
387
- } else if (mutation.action === 'edit') {
388
- if (cg.criteria[mutation.idx] === undefined && mutation.idx === cg.criteria.length) {
389
- if (mutation.item.hasOwnProperty('require')) {
390
- console.error(cg.criteria, mutation);
391
- throw new Error("Won’t auto-insert new group");
392
- } // It may be that a new item is being appended
393
-
394
-
395
- cg.criteria.push(mutation.item);
396
- }
397
-
398
- const isGroup = cg.criteria[mutation.idx].hasOwnProperty('require');
399
-
400
- if (isGroup) {
401
- // If it’s a group, only change the predicate operator to preserve nested items:
402
- cg.criteria[mutation.idx].require = mutation.item.require;
403
- } else {
404
- cg.criteria[mutation.idx] = mutation.item;
405
- }
406
- }
407
- }
408
- }
409
- }
410
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"FilterCriteria.js","sourceRoot":"","sources":["../../src/views/FilterCriteria.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/core';\nimport React, { useEffect, useState } from 'react';\nimport { Button, ButtonGroup, EditableText, HTMLSelect, IOptionProps, ITreeNode, Tree } from '@blueprintjs/core';\nimport { ItemClassConfigurationSet, Subregisters } from '../types';\n\n\nconst COMPOSITION_OPERATORS = [\n 'all',\n 'any',\n 'none',\n] as const;\n\ntype CompositionOperator = typeof COMPOSITION_OPERATORS[number];\n\n\nconst CRITERIA_KEYS = [\n 'item-class',\n 'custom',\n] as const;\n\ntype CriterionKey = typeof CRITERIA_KEYS[number];\n\nfunction isCriteriaKey(val: string): val is CriterionKey {\n return CRITERIA_KEYS.indexOf(val as CriterionKey) >= 0;\n}\n\ntype CriteriaWidget<T extends Record<string, any>> = React.FC<{\n data: T\n onChange?: (newData: T) => void\n availableClassIDs: string[]\n itemClasses: ItemClassConfigurationSet\n subregisters?: Subregisters\n className?: string\n style?: React.CSSProperties\n}>\ninterface Criterion {\n key: CriterionKey\n query: string\n}\n\ninterface CommonOpts {\n subregisters?: Subregisters\n itemClasses: ItemClassConfigurationSet\n}\n\ninterface CriterionConfiguration<T extends Record<string, any>> {\n label: JSX.Element | string\n widget: CriteriaWidget<T>\n toSummary: (data: T, opts: CommonOpts) => string | JSX.Element\n toQuery: (data: T, opts: CommonOpts) => string\n fromQuery: (query: string, opts: CommonOpts) => T\n}\n\ntype CriteriaConfiguration = {\n [key in CriterionKey]: CriterionConfiguration<Record<string, unknown>>\n}\n\nconst SUBREGISTER_PATH_PREFIX = '/subregisters/';\n\nconst CRITERIA_CONFIGURATION: CriteriaConfiguration = {\n 'item-class': {\n label: \"Item class\",\n toQuery: ({ classID }, { subregisters }) =>\n `objPath.indexOf(\"/${classID}/\") === ${subregisters ? SUBREGISTER_PATH_PREFIX.length : 0}`,\n fromQuery: (query) => ({\n classID: query.split('/')[1],\n }),\n toSummary: ({ classID }, { itemClasses }) => {\n if (classID) {\n return itemClasses[classID]?.meta.title ?? classID;\n } else {\n return \"No class selected\";\n }\n },\n widget: ({ data, onChange, itemClasses, className, style }) => {\n const itemClassChoices: IOptionProps[] = Object.entries(itemClasses).\n map(([classID, classData]) => {\n return { value: classID, label: classData?.meta?.title ?? \"Unknown class\" };\n });\n return (\n <HTMLSelect\n className={className}\n style={style}\n fill\n minimal\n options={itemClassChoices}\n value={data.classID ?? '—'}\n disabled={!onChange}\n onChange={onChange\n ? (evt) => onChange!({ classID: evt.currentTarget.value })\n : undefined} />\n );\n },\n } as CriterionConfiguration<{ classID?: string }>,\n 'custom': {\n label: \"Custom query\",\n toQuery: ({ customExpression }) =>\n `return ${customExpression}`,\n fromQuery: (query) => ({\n customExpression: query,\n }),\n toSummary: ({ customExpression }) =>\n <code>{customExpression}</code>,\n widget: ({ data, onChange, className }) => {\n return (\n <EditableText\n className={className}\n value={data.customExpression ?? 'true'}\n placeholder=\"Enter a valid query expression…\"\n disabled={!onChange}\n onChange={onChange ? (val) => onChange!({ customExpression: val }) : undefined}\n onConfirm={(val) => val.trim() !== ''\n ? onChange!({ customExpression: val.trim() })\n : void 0} />\n );\n },\n } as CriterionConfiguration<{ customExpression?: string }>,\n}\n\nexport interface CriteriaGroup {\n require: 'all' | 'any' | 'none'\n criteria: (CriteriaGroup | Criterion)[]\n}\n\nfunction isCriteriaGroup(val: any): val is CriteriaGroup {\n return val.hasOwnProperty('require');\n}\n\nexport function makeBlankCriteria(): CriteriaGroup {\n return { require: 'all', criteria: [] }\n};\n\n\ninterface CriteriaProps {\n impliedCriteria?: CriteriaGroup\n criteria: CriteriaGroup\n onChange?: (criteria: CriteriaGroup) => void\n className?: string\n availableClassIDs: string[]\n\n // TODO: move to context\n itemClasses: ItemClassConfigurationSet\n subregisters?: Subregisters\n}\n\n\nexport const CriteriaTree: React.FC<CriteriaProps> =\nfunction ({ criteria, impliedCriteria, onChange, availableClassIDs, itemClasses, subregisters, className }) {\n const [crit, updateCriteria] = useState<CriteriaGroup>(criteria);\n\n useEffect(() => {\n updateCriteria(criteria);\n }, [JSON.stringify(criteria)]);\n\n function onAddGroup(parent: number[]) {\n var p = JSON.parse(JSON.stringify(parent));\n p.reverse();\n var newCriteria = JSON.parse(JSON.stringify([crit]));\n const newGroup: CriteriaGroup = makeBlankCriteria();\n mutateGroup(newCriteria, p, { action: 'insert', item: newGroup });\n updateCriteria(newCriteria[0]);\n onChange!(newCriteria[0]);\n }\n\n function onDelete(parent: number[], idx: number) {\n var p = JSON.parse(JSON.stringify(parent));\n p.reverse();\n var newCriteria = JSON.parse(JSON.stringify([crit]));\n mutateGroup(newCriteria, p, { action: 'delete', idx });\n updateCriteria(newCriteria[0]);\n onChange!(newCriteria[0]);\n }\n\n function onEditItem(parent: number[], idx: number, newItem: CriteriaGroup | Criterion, commit?: true) {\n var p = JSON.parse(JSON.stringify(parent));\n p.reverse();\n var newCriteria = JSON.parse(JSON.stringify([crit]));\n mutateGroup(newCriteria, p, { action: 'edit', idx, item: newItem });\n updateCriteria(newCriteria[0]);\n if (commit) {\n onChange!(newCriteria[0]);\n }\n }\n\n const nodes: ITreeNode[] = criteriaToNodes([crit], {\n onEditItem: onChange ? onEditItem : undefined,\n onAddGroup: onChange ? onAddGroup : undefined,\n onDeleteItem: onChange ? onDelete : undefined,\n itemClasses,\n subregisters,\n availableClassIDs,\n });\n\n const implied: ITreeNode[] = impliedCriteria !== undefined\n ? criteriaToNodes([impliedCriteria], {\n implied: true,\n itemClasses,\n subregisters,\n availableClassIDs,\n })\n : [];\n\n return (\n <Tree className={className} contents={[ ...implied, ...nodes ]} />\n );\n}\n\nexport default CriteriaTree;\n\n\n/* Displaying criteria group labels */\n\ninterface CriteriaGroupLabelProps {\n criteriaGroup: CriteriaGroup\n onUpdate?: (op: CompositionOperator) => void\n}\nconst CriteriaGroupLabel: React.FC<CriteriaGroupLabelProps> = function ({ criteriaGroup, onUpdate }) {\n return <>\n {onUpdate\n ? <ButtonGroup>\n {COMPOSITION_OPERATORS.map(op =>\n <Button\n key={op}\n small\n onClick={() => onUpdate ? onUpdate(op) : void 0}\n active={criteriaGroup.require === op}>\n {op}\n </Button>\n )}\n </ButtonGroup>\n : <strong>{criteriaGroup.require}</strong>}\n {\" \"}\n of:\n </>;\n}\n\n\n/* Building query expression */\n\n// function criteriaToQueryExpression(cs: (CriteriaGroup | Criteria)[], prefix = 'return '): string {\n// return [ ...cs.entries() ].map(([idx, c]): string => {\n// if (isCriteriaGroup(c)) {\n// const cg = c as CriteriaGroup;\n// return `${prefix} ${criteriaToQueryExpression(cg.criteria, )}`;\n// } else {\n// const ci = c as Criteria;\n// }\n// };\n// }\n\nexport function criteriaGroupToQueryExpression(cg: CriteriaGroup): string {\n const exps: string[] = [];\n\n for (const c of cg.criteria) {\n if (isCriteriaGroup(c)) {\n exps.push(`${criteriaGroupToQueryExpression(c)}`);\n } else {\n exps.push(c.query);\n }\n }\n\n let result: string;\n if (exps.length < 1) {\n result = `true;`\n } else {\n switch (cg.require) {\n case 'all':\n result = exps.join(' && ');\n break;\n case 'any':\n result = exps.join(' || ');\n break;\n case 'none':\n result = exps.map(exp => `${exp} === false`).join(' && ');\n break;\n }\n }\n\n return `return (objPath.startsWith(\"/subregisters/\") || objPath.split(\"/\").length >= 3) && ${result}`;\n}\n\n\n/* Building tree nodes */\n\nfunction criteriaToNodes(\n cs: (CriteriaGroup | Criterion)[],\n opts: {\n path?: number[],\n implied?: true,\n onEditItem?: (parent: number[], idx: number, newItem: CriteriaGroup | Criterion, commit?: true) => void,\n onDeleteItem?: (parent: number[], idx: number) => void,\n onAddGroup?: (parent: number[]) => void\n\n itemClasses: ItemClassConfigurationSet\n availableClassIDs: string[]\n subregisters?: Subregisters\n },\n): ITreeNode[] {\n const path = opts.path ?? [];\n\n return [ ...cs.entries() ].map(([idx, c]): ITreeNode => {\n const isRoot = path.length < 1;\n const icon = isRoot && opts.implied === true ? 'manual' : undefined;\n const disabled = opts.implied === true;\n const deleteButton: JSX.Element | null =\n idx < (cs.length - 1) &&\n opts.onDeleteItem &&\n !isRoot\n ? <Button minimal small\n onClick={() => opts.onDeleteItem!(path, idx)}\n icon=\"cross\" />\n : null;\n\n if (isCriteriaGroup(c)) {\n const cg = c as CriteriaGroup;\n return {\n id: `${path.join('-')}-${idx}-${opts.implied}`,\n disabled,\n hasCaret: true,\n isExpanded: true,\n icon,\n label: <CriteriaGroupLabel\n criteriaGroup={cg}\n onUpdate={opts.onEditItem\n ? ((op) => opts.onEditItem!(path, idx, { ...cg, require: op }, true))\n : undefined} />,\n secondaryLabel: <ButtonGroup>\n {opts.implied && isRoot ? <>(implied from plan)</> : null}\n {opts.onAddGroup\n ? <Button minimal small\n onClick={() => opts.onAddGroup!([...path, idx])}\n icon=\"more\" />\n : null}\n {deleteButton}\n </ButtonGroup>,\n childNodes: criteriaToNodes(\n opts.onEditItem ? [ ...cg.criteria, { key: 'custom', query: 'return true;' } ] : cg.criteria,\n { ...opts, path: [ ...path, idx ] }),\n };\n } else {\n const ci = c as Criterion;\n const { subregisters, itemClasses } = opts;\n if (!isCriteriaKey(ci.key)) {\n console.error(\"Invalid criteria key encountered\", ci.key);\n throw new Error(\"Invalid criteria key encountered\");\n }\n const cfg = CRITERIA_CONFIGURATION[ci.key];\n if (!cfg) {\n console.error(\"Missing criterion configuration for key\", ci.key)\n throw new Error(\"Missing criterion configuration\");\n }\n const Widget = cfg.widget;\n const data = cfg.fromQuery(ci.query, { subregisters, itemClasses });\n return {\n id: `${path.join('-')}-${idx}-${opts.implied ? 'implied' : ''}`,\n disabled,\n icon,\n label: <Widget\n itemClasses={opts.itemClasses}\n availableClassIDs={opts.availableClassIDs}\n subregisters={opts.subregisters}\n data={data}\n onChange={(val) => opts.onEditItem!(\n path,\n idx,\n { key: ci.key, query: cfg.toQuery(val, { subregisters, itemClasses }) },\n true)}\n />,\n secondaryLabel: <ButtonGroup>\n {deleteButton}\n </ButtonGroup>,\n };\n }\n });\n}\n\n\n/* Mutating criteria tree */\n\ntype TreeMutation<T> =\n { action: 'delete', idx: number } |\n { action: 'insert', item: T } |\n { action: 'edit', idx: number, item: T };\n\nfunction mutateGroup(\n criteria: (CriteriaGroup | Criterion)[],\n path: number[],\n // Here path must be parent node path in reverse (top-level index coming last).\n mutation: TreeMutation<CriteriaGroup | Criterion>) {\n\n if (path.length < 1 && mutation.action === 'edit') {\n (criteria[0] as CriteriaGroup).require = (mutation.item as CriteriaGroup).require;\n }\n for (const [curIdx, c] of criteria.entries()) {\n if (curIdx === path[path.length - 1]) {\n path.pop();\n\n let cg: CriteriaGroup;\n if (c.hasOwnProperty('criteria')) {\n // This item is a group, let’s go in and delete descendants\n cg = c as CriteriaGroup;\n } else {\n // This item is a predicate string, can’t go in and delete descendants\n throw new Error(`Cannot enter item: not a group at path ${path.join('/')}/${curIdx}: ${c}`);\n }\n\n if (path.length > 0) {\n mutateGroup(cg.criteria, path, mutation);\n } else {\n if (mutation.action === 'delete') {\n cg.criteria.splice(mutation.idx, 1);\n } else if (mutation.action === 'insert') {\n cg.criteria.push(mutation.item);\n } else if (mutation.action === 'edit') {\n if (cg.criteria[mutation.idx] === undefined && mutation.idx === cg.criteria.length) {\n if (mutation.item.hasOwnProperty('require')) {\n console.error(cg.criteria, mutation);\n throw new Error(\"Won’t auto-insert new group\");\n }\n // It may be that a new item is being appended\n cg.criteria.push(mutation.item);\n }\n const isGroup = cg.criteria[mutation.idx].hasOwnProperty('require');\n if (isGroup) {\n // If it’s a group, only change the predicate operator to preserve nested items:\n (cg.criteria[mutation.idx] as CriteriaGroup).require =\n (mutation.item as CriteriaGroup).require;\n } else {\n cg.criteria[mutation.idx] = mutation.item;\n }\n }\n }\n }\n }\n}\n"]}
@@ -1,12 +0,0 @@
1
- /** @jsx jsx */
2
- /** @jsxFrag React.Fragment */
3
- import React from 'react';
4
- import { ItemAction, RegisterItemDataHook, RegistryViewProps } from '../types';
5
- export declare const RegisterItemBrowser: React.FC<Pick<RegistryViewProps, 'itemClassConfiguration' | 'subregisters'> & {
6
- availableClassIDs?: string[];
7
- useRegisterItemData: RegisterItemDataHook;
8
- itemActions?: ItemAction[];
9
- className?: string;
10
- style?: React.CSSProperties;
11
- }>;
12
- export default RegisterItemBrowser;