@riboseinc/paneron-registry-kit 2.0.0-dev9 → 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 (179) 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 -19
  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 +13 -1
  38. package/views/FilterCriteria/CRITERIA_CONFIGURATION.js +178 -85
  39. package/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -1
  40. package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +4 -0
  41. package/views/FilterCriteria/criteriaGroupToQueryExpression.js +10 -3
  42. package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -1
  43. package/views/FilterCriteria/criteriaGroupToSummary.js +7 -7
  44. package/views/FilterCriteria/criteriaGroupToSummary.js.map +1 -1
  45. package/views/FilterCriteria/criteriaToNodes.d.ts +9 -0
  46. package/views/FilterCriteria/criteriaToNodes.js +42 -28
  47. package/views/FilterCriteria/criteriaToNodes.js.map +1 -1
  48. package/views/FilterCriteria/index.d.ts +1 -0
  49. package/views/FilterCriteria/index.js +29 -21
  50. package/views/FilterCriteria/index.js.map +1 -1
  51. package/views/FilterCriteria/models.d.ts +29 -2
  52. package/views/FilterCriteria/models.js +17 -10
  53. package/views/FilterCriteria/models.js.map +1 -1
  54. package/views/FilterCriteria/mutateGroup.d.ts +4 -1
  55. package/views/FilterCriteria/mutateGroup.js +4 -3
  56. package/views/FilterCriteria/mutateGroup.js.map +1 -1
  57. package/views/GenericRelatedItemView.d.ts +1 -1
  58. package/views/GenericRelatedItemView.js +142 -102
  59. package/views/GenericRelatedItemView.js.map +1 -1
  60. package/views/RegisterStakeholder.d.ts +9 -0
  61. package/views/RegisterStakeholder.js +40 -0
  62. package/views/RegisterStakeholder.js.map +1 -0
  63. package/views/RegisterVersion.d.ts +9 -0
  64. package/views/RegisterVersion.js +41 -0
  65. package/views/RegisterVersion.js.map +1 -0
  66. package/views/SearchQuery.d.ts +13 -0
  67. package/views/SearchQuery.js +137 -0
  68. package/views/SearchQuery.js.map +1 -0
  69. package/views/change-request/ChangeRequestContext.d.ts +20 -0
  70. package/views/change-request/ChangeRequestContext.js +56 -0
  71. package/views/change-request/ChangeRequestContext.js.map +1 -0
  72. package/views/change-request/Proposals.d.ts +21 -0
  73. package/views/change-request/Proposals.js +331 -0
  74. package/views/change-request/Proposals.js.map +1 -0
  75. package/views/change-request/objectChangeset.d.ts +31 -0
  76. package/views/change-request/objectChangeset.js +229 -0
  77. package/views/change-request/objectChangeset.js.map +1 -0
  78. package/views/detail/ChangeRequest/Proposal.d.ts +0 -0
  79. package/views/detail/ChangeRequest/Proposal.js +142 -0
  80. package/views/detail/ChangeRequest/Proposal.js.map +1 -0
  81. package/views/detail/ChangeRequest/index.d.ts +13 -0
  82. package/views/detail/ChangeRequest/index.js +207 -0
  83. package/views/detail/ChangeRequest/index.js.map +1 -0
  84. package/views/detail/ChangeRequest/transitions.d.ts +28 -0
  85. package/views/detail/ChangeRequest/transitions.js +530 -0
  86. package/views/detail/ChangeRequest/transitions.js.map +1 -0
  87. package/views/detail/CustomView/index.d.ts +13 -0
  88. package/views/detail/CustomView/index.js +68 -0
  89. package/views/detail/CustomView/index.js.map +1 -0
  90. package/views/detail/RegisterHome/index.d.ts +5 -0
  91. package/views/detail/RegisterHome/index.js +128 -0
  92. package/views/detail/RegisterHome/index.js.map +1 -0
  93. package/views/detail/RegisterItem/RelatedItems.d.ts +13 -0
  94. package/views/detail/RegisterItem/RelatedItems.js +61 -0
  95. package/views/detail/RegisterItem/RelatedItems.js.map +1 -0
  96. package/views/detail/RegisterItem/SupersedingItemMenu.d.ts +13 -0
  97. package/views/detail/RegisterItem/SupersedingItemMenu.js +56 -0
  98. package/views/detail/RegisterItem/SupersedingItemMenu.js.map +1 -0
  99. package/views/detail/RegisterItem/index.d.ts +13 -0
  100. package/views/detail/RegisterItem/index.js +356 -0
  101. package/views/detail/RegisterItem/index.js.map +1 -0
  102. package/views/detail/RegisterMeta/RegisterMetaForm.d.ts +10 -0
  103. package/views/detail/RegisterMeta/RegisterMetaForm.js +331 -0
  104. package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -0
  105. package/views/detail/RegisterMeta/index.d.ts +10 -0
  106. package/views/detail/RegisterMeta/index.js +111 -0
  107. package/views/detail/RegisterMeta/index.js.map +1 -0
  108. package/views/detail/index.d.ts +1 -0
  109. package/views/detail/index.js +24 -0
  110. package/views/detail/index.js.map +1 -0
  111. package/views/diffing/InlineDiff.d.ts +12 -0
  112. package/views/diffing/InlineDiff.js +58 -0
  113. package/views/diffing/InlineDiff.js.map +1 -0
  114. package/views/diffing/StructuredDiff.d.ts +11 -0
  115. package/views/diffing/StructuredDiff.js +65 -0
  116. package/views/diffing/StructuredDiff.js.map +1 -0
  117. package/views/hooks/useCustomView.d.ts +3 -0
  118. package/views/hooks/useCustomView.js +24 -0
  119. package/views/hooks/useCustomView.js.map +1 -0
  120. package/views/hooks/useItemClassConfig.d.ts +3 -0
  121. package/views/hooks/useItemClassConfig.js +24 -0
  122. package/views/hooks/useItemClassConfig.js.map +1 -0
  123. package/views/hooks/useItemRef.d.ts +3 -0
  124. package/views/hooks/useItemRef.js +39 -0
  125. package/views/hooks/useItemRef.js.map +1 -0
  126. package/views/hooks/useSingleRegisterItemData.d.ts +3 -0
  127. package/views/hooks/useSingleRegisterItemData.js +32 -0
  128. package/views/hooks/useSingleRegisterItemData.js.map +1 -0
  129. package/views/index.d.ts +2 -2
  130. package/views/index.js +161 -130
  131. package/views/index.js.map +1 -1
  132. package/views/itemPathUtils.d.ts +45 -2
  133. package/views/itemPathUtils.js +101 -14
  134. package/views/itemPathUtils.js.map +1 -1
  135. package/views/itemQueryUtils.d.ts +11 -0
  136. package/views/itemQueryUtils.js +48 -0
  137. package/views/itemQueryUtils.js.map +1 -0
  138. package/views/protocolRegistry.d.ts +12 -0
  139. package/views/protocolRegistry.js +42 -0
  140. package/views/protocolRegistry.js.map +1 -0
  141. package/views/sidebar/Browse/index.d.ts +11 -0
  142. package/views/sidebar/Browse/index.js +453 -0
  143. package/views/sidebar/Browse/index.js.map +1 -0
  144. package/views/sidebar/Export/index.d.ts +5 -0
  145. package/views/sidebar/Export/index.js +94 -0
  146. package/views/sidebar/Export/index.js.map +1 -0
  147. package/views/sidebar/ListItem.d.ts +10 -0
  148. package/views/sidebar/ListItem.js +43 -0
  149. package/views/sidebar/ListItem.js.map +1 -0
  150. package/views/sidebar/Registration/index.d.ts +5 -0
  151. package/views/sidebar/Registration/index.js +163 -0
  152. package/views/sidebar/Registration/index.js.map +1 -0
  153. package/views/sidebar/Search/index.d.ts +18 -0
  154. package/views/sidebar/Search/index.js +177 -0
  155. package/views/sidebar/Search/index.js.map +1 -0
  156. package/views/sidebar/index.d.ts +6 -0
  157. package/views/sidebar/index.js +104 -0
  158. package/views/sidebar/index.js.map +1 -0
  159. package/views/util.d.ts +29 -5
  160. package/views/util.js +92 -6
  161. package/views/util.js.map +1 -1
  162. package/views/ChangeRequest.d.ts +0 -12
  163. package/views/ChangeRequest.js +0 -689
  164. package/views/ChangeRequest.js.map +0 -1
  165. package/views/ItemBrowser.d.ts +0 -12
  166. package/views/ItemBrowser.js +0 -258
  167. package/views/ItemBrowser.js.map +0 -1
  168. package/views/ItemDetails.d.ts +0 -14
  169. package/views/ItemDetails.js +0 -128
  170. package/views/ItemDetails.js.map +0 -1
  171. package/views/MainView.d.ts +0 -8
  172. package/views/MainView.js +0 -34
  173. package/views/MainView.js.map +0 -1
  174. package/views/RegisterInformation.d.ts +0 -7
  175. package/views/RegisterInformation.js +0 -264
  176. package/views/RegisterInformation.js.map +0 -1
  177. package/views/RegisterItemGrid.d.ts +0 -25
  178. package/views/RegisterItemGrid.js +0 -276
  179. 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,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;
@@ -1,258 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = exports.RegisterItemBrowser = void 0;
7
-
8
- var _react = require("react");
9
-
10
- var _core = require("@emotion/core");
11
-
12
- var _core2 = require("@blueprintjs/core");
13
-
14
- var _context = require("@riboseinc/paneron-extension-kit/context");
15
-
16
- var _util = require("./util");
17
-
18
- var _BrowserCtx = require("./BrowserCtx");
19
-
20
- var _ItemDetails = _interopRequireDefault(require("./ItemDetails"));
21
-
22
- var _RegisterItemGrid = _interopRequireWildcard(require("./RegisterItemGrid"));
23
-
24
- var _itemPathUtils = require("./itemPathUtils");
25
-
26
- var _criteriaGroupToQueryExpression = _interopRequireDefault(require("./FilterCriteria/criteriaGroupToQueryExpression"));
27
-
28
- var _models = require("./FilterCriteria/models");
29
-
30
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
31
-
32
- 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; }
33
-
34
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
-
36
- /** @jsx jsx */
37
-
38
- /** @jsxFrag React.Fragment */
39
- //import { debounce } from 'throttle-debounce';
40
- //import log from 'electron-log';
41
- //import { FixedSizeList as List } from 'react-window';
42
- const RegisterItemBrowser = function ({
43
- availableClassIDs,
44
- subregisters,
45
- itemClassConfiguration,
46
- useRegisterItemData,
47
- itemActions,
48
- className,
49
- style
50
- }) {
51
- var _a;
52
-
53
- const ctx = (0, _react.useContext)(_context.DatasetContext); //const { useObjectPaths } = useContext(DatasetContext);
54
-
55
- const {
56
- usePersistentDatasetStateReducer
57
- } = ctx;
58
- const [state, dispatch] = usePersistentDatasetStateReducer((prevState, action) => {
59
- switch (action.type) {
60
- case 'select-item':
61
- const selectedItemPath = action.payload.itemPath;
62
-
63
- if (selectedItemPath) {
64
- return Object.assign(Object.assign({}, prevState), {
65
- selectedItemPath
66
- });
67
- } else {
68
- return Object.assign(Object.assign({}, prevState), {
69
- view: 'grid',
70
- selectedItemPath
71
- });
72
- }
73
-
74
- case 'open-item':
75
- return Object.assign(Object.assign({}, prevState), {
76
- view: 'item',
77
- selectedItemPath: action.payload.itemPath
78
- });
79
-
80
- case 'update-query':
81
- return Object.assign(Object.assign({}, prevState), {
82
- view: 'grid',
83
- query: action.payload.query
84
- });
85
-
86
- case 'exit-item':
87
- return Object.assign(Object.assign({}, prevState), {
88
- view: 'grid'
89
- });
90
-
91
- default:
92
- throw new Error("Unexpected register item browser state");
93
- }
94
- }, {
95
- view: 'grid',
96
- selectedItemPath: undefined,
97
- query: {
98
- criteria: (0, _models.makeBlankCriteria)()
99
- }
100
- }, null, 'item-browser'); //const subregisterIsSelected = subregisters !== undefined && selectedItemPathComponents.length === 3;
101
-
102
- const {
103
- subregisterID,
104
- classID,
105
- itemID
106
- } = (0, _itemPathUtils.itemPathToItemRefLike)(subregisters !== undefined, (_a = state.selectedItemPath) !== null && _a !== void 0 ? _a : '');
107
- const itemClasses = availableClassIDs !== null && availableClassIDs !== void 0 ? availableClassIDs : Object.keys(itemClassConfiguration); //const classConfiguration: ItemClassConfigurationSet =
108
- // itemClasses.reduce((o: typeof itemClassConfiguration, k: keyof typeof itemClassConfiguration) =>
109
- // { o[k] = itemClassConfiguration[k]; return o; }, {});
110
-
111
- const jumpToItem = (classID, itemID, subregisterID) => {
112
- if (subregisters === undefined && subregisterID !== undefined) {
113
- console.error("Unable to jump to register item: indicates subregister, but register does not have any", subregisterID);
114
- throw new Error("Unable to jump to register item: indicates subregister, but register does not have any");
115
- } else if (subregisters !== undefined && subregisterID === undefined) {
116
- console.error("Unable to jump to register item: subregister is required");
117
- throw new Error("Unable to jump to register item: subregister is required");
118
- }
119
-
120
- if (subregisterID) {
121
- if (subregisters[subregisterID] === undefined) {
122
- console.error("Unable to jump to register item: requested subregister does not exist", subregisterID);
123
- throw new Error("Unable to jump to register item: requested subregister does not exist");
124
- } else if (itemClasses.indexOf(classID) < 0) {
125
- console.error("Unable to jump to register item: requested item class is not allowed", classID);
126
- throw new Error("Unable to jump to register item: requested item class is not allowed");
127
- }
128
- }
129
-
130
- const itemPath = subregisterID ? `/${subregisterID}/${classID}/${itemID}.yaml` : `/${classID}/${itemID}.yaml`;
131
- dispatch({
132
- type: 'select-item',
133
- payload: {
134
- itemPath
135
- }
136
- });
137
- };
138
-
139
- const getRelatedClass = (0, _util._getRelatedClass)(itemClassConfiguration); // useEffect(() => {
140
- // if ((selectedClass === undefined && itemClasses.length > 0) ||
141
- // (selectedClass && itemClasses.indexOf(selectedClass) < 0)) {
142
- // selectClass(itemClasses[0]);
143
- // }
144
- // }, [JSON.stringify(itemClasses)]);
145
- // XXX: QUERY EXPRESSION HANDLING IS HERE
146
- // const itemClassPath: string = selectedSubregisterID
147
- // ? `/subregisters/${selectedSubregisterID}/${selectedClass ?? 'NONEXISTENT_CLASS'}/`
148
- // : `/${selectedClass ?? 'NONEXISTENT_CLASS'}/`;
149
- // const queryExpression: string = `return objPath.indexOf("${itemClassPath}") === 0`;
150
- // const normalizedQueryExp = state.queryExpression.trim() || 'return objPath.';
151
- // const indexReq = useFilteredIndex({ queryExpression: state.queryExpression });
152
- // const indexID: string = indexReq.value.indexID ?? '';
153
- // END XXX
154
- //const objectPathsQuery = useObjectPaths({ pathPrefix });
155
- //const registerItemQuery = objectPathsQuery.value.
156
- // filter(path => path !== '.DS_Store').
157
- // map(path => ({ [path.replace('.yaml', '')]: 'utf-8' as const })).
158
- // reduce((prev, curr) => ({ ...prev, ...curr }), {})
159
- //const items = useRegisterItemData(registerItemQuery);
160
- // if (selectedClass === undefined) {
161
- // return <NonIdealState title="Please select item class" />;
162
- // }
163
- //class ErrorBoundary extends React.Component<Record<never, never>, { error?: string }> {
164
- // constructor(props: any) {
165
- // super(props);
166
- // this.state = { error: undefined };
167
- // }
168
- // componentDidCatch(error: Error, info: any) {
169
- // log.error("Error rendering item details", error, info);
170
- // this.setState({ error: `${error.name}: ${error.message}` });
171
- // }
172
- // render() {
173
- // if (this.state.error !== undefined) {
174
- // return <NonIdealState
175
- // icon="heart-broken"
176
- // title="Error rendering view"
177
- // description={
178
- // <>
179
- // <p>
180
- // This could be caused by invalid register&nbsp;item&nbsp;data&nbsp;format.
181
- // </p>
182
- // <Callout style={{ textAlign: 'left', transform: 'scale(0.9)' }} title="Technical details">
183
- // <pre style={{ overflow: 'auto', paddingBottom: '1em' }}>
184
- // {this.state.error}
185
- // </pre>
186
- // </Callout>
187
- // </>
188
- // }
189
- // />;
190
- // }
191
- // return this.props.children;
192
- // }
193
- //}
194
-
195
- const queryExpression = `return (objPath.startsWith("/subregisters/") || objPath.split("/").length >= 3) && ${(0, _criteriaGroupToQueryExpression.default)(state.query.criteria)}`;
196
- let view;
197
-
198
- if (state.view === 'grid') {
199
- view = (0, _core.jsx)(_RegisterItemGrid.default, {
200
- selectedItem: state.selectedItemPath ? (0, _itemPathUtils.itemPathToItemRef)(subregisters !== undefined, state.selectedItemPath) : undefined,
201
- onSelectItem: itemRef => dispatch({
202
- type: 'select-item',
203
- payload: {
204
- itemPath: (0, _itemPathUtils.itemRefToItemPath)(itemRef)
205
- }
206
- }),
207
- queryExpression: queryExpression,
208
- toolbar: (0, _core.jsx)(_RegisterItemGrid.SearchQuery, {
209
- rootCriteria: state.query.criteria,
210
- itemClasses: itemClassConfiguration,
211
- availableClassIDs: availableClassIDs,
212
- subregisters: subregisters,
213
- onChange: criteria => dispatch({
214
- type: 'update-query',
215
- payload: {
216
- query: {
217
- criteria
218
- }
219
- }
220
- })
221
- }),
222
- getRelatedClassConfig: getRelatedClass,
223
- useRegisterItemData: useRegisterItemData
224
- });
225
- } else if (state.view === 'item' && classID && itemID) {
226
- view = (0, _core.jsx)(_ItemDetails.default, {
227
- useRegisterItemData: useRegisterItemData,
228
- getRelatedClass: (0, _util._getRelatedClass)(itemClassConfiguration),
229
- // TODO: convert class, subregister and ID combo into a single string item path?
230
- itemClass: itemClassConfiguration[classID],
231
- subregisterID: subregisterID,
232
- itemID: itemID,
233
- itemActions: itemActions
234
- });
235
- } else {
236
- // If item view is requested, but item or class ID is missing,
237
- // we can’t show any details because the only details view we have for now
238
- // is regsiter item details view, which requires those.
239
- view = (0, _core.jsx)(_core2.NonIdealState, {
240
- icon: "heart-broken",
241
- title: "Not sure what to show",
242
- description: "Sorry! (Error code: 724A)"
243
- });
244
- }
245
-
246
- return (0, _core.jsx)(_BrowserCtx.BrowserCtx.Provider, {
247
- value: {
248
- jumpToItem,
249
- itemClasses: itemClassConfiguration,
250
- subregisters,
251
- useRegisterItemData
252
- }
253
- }, view);
254
- };
255
-
256
- exports.RegisterItemBrowser = RegisterItemBrowser;
257
- var _default = RegisterItemBrowser;
258
- exports.default = _default;
@@ -1 +0,0 @@
1
- {"version":3,"file":"ItemBrowser.js","sourceRoot":"","sources":["../../src/views/ItemBrowser.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\n//import { debounce } from 'throttle-debounce';\n//import log from 'electron-log';\n\nimport React, { useContext } from 'react';\nimport { jsx } from '@emotion/core';\n//import { FixedSizeList as List } from 'react-window';\nimport {\n NonIdealState,\n} from '@blueprintjs/core';\n\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport {\n ItemAction,\n RegisterItemDataHook,\n RegistryViewProps,\n} from '../types';\nimport { _getRelatedClass } from './util';\nimport { BrowserCtx } from './BrowserCtx';\nimport ItemDetails from './ItemDetails';\nimport RegisterItemGrid, { SearchQuery } from './RegisterItemGrid';\nimport { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport { itemPathToItemRefLike, itemPathToItemRef, itemRefToItemPath } from './itemPathUtils';\nimport criteriaGroupToQueryExpression from './FilterCriteria/criteriaGroupToQueryExpression';\nimport { CriteriaGroup, makeBlankCriteria } from './FilterCriteria/models';\n\n\ninterface Query {\n criteria: CriteriaGroup;\n}\ntype Action =\n | { type: 'select-item'; payload: { itemPath: string | undefined; }; }\n | { type: 'open-item'; payload: { itemPath: string; }; }\n //| { type: 'select-class', payload: { classID: string | undefined } }\n //| { type: 'open-class', payload: { classID: string } }\n //| { type: 'select-subregister', payload: { subregisterID: string | undefined } }\n //| { type: 'open-subregister', payload: { subregisterID: string } }\n | { type: 'update-query'; payload: { query: Query; }; }\n | { type: 'exit-item'; };\n\ninterface BaseState {\n view: 'item' | 'grid';\n selectedItemPath: string | undefined;\n query: Query;\n}\ninterface ItemState extends BaseState {\n view: 'item';\n selectedItemPath: string;\n query: Query;\n}\ninterface GridState extends BaseState {\n view: 'grid';\n selectedItemPath: string | undefined;\n query: Query;\n}\ntype State = ItemState |\n GridState;\n\n\nexport const RegisterItemBrowser: React.FC<\n Pick<RegistryViewProps, 'itemClassConfiguration' | 'subregisters'> & {\n availableClassIDs?: string[]\n useRegisterItemData: RegisterItemDataHook\n itemActions?: ItemAction[]\n className?: string\n style?: React.CSSProperties\n}> = function ({\n availableClassIDs,\n subregisters,\n itemClassConfiguration,\n useRegisterItemData,\n itemActions,\n className,\n style,\n}) {\n\n const ctx = useContext(DatasetContext);\n //const { useObjectPaths } = useContext(DatasetContext);\n const { usePersistentDatasetStateReducer } = ctx;\n const [ state, dispatch ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n (prevState, action) => {\n switch (action.type) {\n case 'select-item':\n const selectedItemPath = action.payload.itemPath;\n if (selectedItemPath) {\n return {\n ...prevState,\n selectedItemPath,\n };\n } else {\n return {\n ...prevState,\n view: 'grid',\n selectedItemPath,\n };\n }\n case 'open-item':\n return {\n ...prevState,\n view: 'item',\n selectedItemPath: action.payload.itemPath,\n };\n case 'update-query':\n return {\n ...prevState,\n view: 'grid',\n query: action.payload.query,\n };\n case 'exit-item':\n return {\n ...prevState,\n view: 'grid',\n };\n default:\n throw new Error(\"Unexpected register item browser state\");\n }\n }, {\n view: 'grid',\n selectedItemPath: undefined,\n query: { criteria: makeBlankCriteria() },\n }, null, 'item-browser');\n\n //const subregisterIsSelected = subregisters !== undefined && selectedItemPathComponents.length === 3;\n\n const { subregisterID, classID, itemID } = itemPathToItemRefLike(subregisters !== undefined, state.selectedItemPath ?? '');\n\n const itemClasses = availableClassIDs ?? Object.keys(itemClassConfiguration);\n //const classConfiguration: ItemClassConfigurationSet =\n // itemClasses.reduce((o: typeof itemClassConfiguration, k: keyof typeof itemClassConfiguration) =>\n // { o[k] = itemClassConfiguration[k]; return o; }, {});\n\n const jumpToItem = (classID: string, itemID: string, subregisterID?: string) => {\n if (subregisters === undefined && subregisterID !== undefined) {\n console.error(\"Unable to jump to register item: indicates subregister, but register does not have any\", subregisterID);\n throw new Error(\"Unable to jump to register item: indicates subregister, but register does not have any\");\n } else if (subregisters !== undefined && subregisterID === undefined) {\n console.error(\"Unable to jump to register item: subregister is required\");\n throw new Error(\"Unable to jump to register item: subregister is required\");\n }\n if (subregisterID) {\n if (subregisters![subregisterID] === undefined) {\n console.error(\"Unable to jump to register item: requested subregister does not exist\", subregisterID);\n throw new Error(\"Unable to jump to register item: requested subregister does not exist\");\n } else if (itemClasses.indexOf(classID) < 0) {\n console.error(\"Unable to jump to register item: requested item class is not allowed\", classID);\n throw new Error(\"Unable to jump to register item: requested item class is not allowed\");\n }\n }\n\n const itemPath: string = subregisterID\n ? `/${subregisterID}/${classID}/${itemID}.yaml`\n : `/${classID}/${itemID}.yaml`;\n\n dispatch({ type: 'select-item', payload: { itemPath } });\n }\n\n const getRelatedClass = _getRelatedClass(itemClassConfiguration);\n\n // useEffect(() => {\n // if ((selectedClass === undefined && itemClasses.length > 0) ||\n // (selectedClass && itemClasses.indexOf(selectedClass) < 0)) {\n // selectClass(itemClasses[0]);\n // }\n // }, [JSON.stringify(itemClasses)]);\n\n\n // XXX: QUERY EXPRESSION HANDLING IS HERE\n // const itemClassPath: string = selectedSubregisterID\n // ? `/subregisters/${selectedSubregisterID}/${selectedClass ?? 'NONEXISTENT_CLASS'}/`\n // : `/${selectedClass ?? 'NONEXISTENT_CLASS'}/`;\n\n // const queryExpression: string = `return objPath.indexOf(\"${itemClassPath}\") === 0`;\n\n // const normalizedQueryExp = state.queryExpression.trim() || 'return objPath.';\n // const indexReq = useFilteredIndex({ queryExpression: state.queryExpression });\n // const indexID: string = indexReq.value.indexID ?? '';\n // END XXX\n\n\n //const objectPathsQuery = useObjectPaths({ pathPrefix });\n\n //const registerItemQuery = objectPathsQuery.value.\n // filter(path => path !== '.DS_Store').\n // map(path => ({ [path.replace('.yaml', '')]: 'utf-8' as const })).\n // reduce((prev, curr) => ({ ...prev, ...curr }), {})\n\n //const items = useRegisterItemData(registerItemQuery);\n\n // if (selectedClass === undefined) {\n // return <NonIdealState title=\"Please select item class\" />;\n // }\n\n //class ErrorBoundary extends React.Component<Record<never, never>, { error?: string }> {\n // constructor(props: any) {\n // super(props);\n // this.state = { error: undefined };\n // }\n // componentDidCatch(error: Error, info: any) {\n // log.error(\"Error rendering item details\", error, info);\n // this.setState({ error: `${error.name}: ${error.message}` });\n // }\n // render() {\n // if (this.state.error !== undefined) {\n // return <NonIdealState\n // icon=\"heart-broken\"\n // title=\"Error rendering view\"\n // description={\n // <>\n // <p>\n // This could be caused by invalid register&nbsp;item&nbsp;data&nbsp;format.\n // </p>\n // <Callout style={{ textAlign: 'left', transform: 'scale(0.9)' }} title=\"Technical details\">\n // <pre style={{ overflow: 'auto', paddingBottom: '1em' }}>\n // {this.state.error}\n // </pre>\n // </Callout>\n // </>\n // }\n // />;\n // }\n // return this.props.children;\n // }\n //}\n\n const queryExpression =\n `return (objPath.startsWith(\"/subregisters/\") || objPath.split(\"/\").length >= 3) && ${criteriaGroupToQueryExpression(state.query.criteria)}`;\n\n let view: JSX.Element;\n if (state.view === 'grid') {\n view = <RegisterItemGrid\n selectedItem={state.selectedItemPath\n ? itemPathToItemRef(subregisters !== undefined, state.selectedItemPath)\n : undefined}\n onSelectItem={(itemRef) => dispatch({\n type: 'select-item',\n payload: { itemPath: itemRefToItemPath(itemRef) },\n })}\n queryExpression={queryExpression}\n toolbar={<SearchQuery\n rootCriteria={state.query.criteria}\n itemClasses={itemClassConfiguration}\n availableClassIDs={availableClassIDs}\n subregisters={subregisters}\n onChange={(criteria) => dispatch({ type: 'update-query', payload: { query: { criteria } } })}\n />}\n getRelatedClassConfig={getRelatedClass}\n useRegisterItemData={useRegisterItemData}\n />;\n } else if (state.view === 'item' && classID && itemID) {\n view = <ItemDetails\n useRegisterItemData={useRegisterItemData}\n getRelatedClass={_getRelatedClass(itemClassConfiguration)}\n // TODO: convert class, subregister and ID combo into a single string item path?\n itemClass={itemClassConfiguration[classID]}\n subregisterID={subregisterID}\n itemID={itemID}\n itemActions={itemActions}\n />\n } else {\n // If item view is requested, but item or class ID is missing,\n // we can’t show any details because the only details view we have for now\n // is regsiter item details view, which requires those.\n view = <NonIdealState icon=\"heart-broken\" title=\"Not sure what to show\" description=\"Sorry! (Error code: 724A)\" />;\n }\n\n return (\n <BrowserCtx.Provider\n value={{\n jumpToItem,\n itemClasses: itemClassConfiguration,\n subregisters,\n useRegisterItemData,\n }}>\n {view}\n </BrowserCtx.Provider>\n );\n};\n\n\nexport default RegisterItemBrowser;\n"]}
@@ -1,14 +0,0 @@
1
- /** @jsx jsx */
2
- /** @jsxFrag React.Fragment */
3
- import React from 'react';
4
- import { ItemAction, ItemClassConfiguration, RegisterItemDataHook, RelatedItemClassConfiguration } from '../types';
5
- export declare const ItemDetails: React.FC<{
6
- itemID?: string;
7
- itemClass: ItemClassConfiguration<any>;
8
- subregisterID?: string;
9
- useRegisterItemData: RegisterItemDataHook;
10
- getRelatedClass: (clsID: string) => RelatedItemClassConfiguration;
11
- itemActions?: ItemAction[];
12
- }>;
13
- export declare const ItemDetailsWrapperDiv: import("@emotion/styled-base").StyledComponent<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, Pick<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement>>, object>;
14
- export default ItemDetails;
@@ -1,128 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = exports.ItemDetailsWrapperDiv = exports.ItemDetails = void 0;
7
-
8
- var _core = require("@emotion/core");
9
-
10
- var _styled = _interopRequireDefault(require("@emotion/styled"));
11
-
12
- var _core2 = require("@blueprintjs/core");
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- /** @jsx jsx */
17
-
18
- /** @jsxFrag React.Fragment */
19
- const ItemDetails = function ({
20
- itemID,
21
- itemClass,
22
- subregisterID,
23
- getRelatedClass,
24
- useRegisterItemData,
25
- itemActions
26
- }) {
27
- var _a, _b, _c, _d, _e, _f, _g, _h;
28
-
29
- let details; //const itemPath = `${itemClass.meta.id}/${itemID}`;
30
-
31
- const _itemPath = `/${(_b = (_a = itemClass === null || itemClass === void 0 ? void 0 : itemClass.meta) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : 'NONEXISTENT_CLASS'}/${itemID}.yaml`;
32
- const itemPath = subregisterID ? `/subregisters/${subregisterID}/${_itemPath}` : _itemPath;
33
- const itemResponse = useRegisterItemData({
34
- itemPaths: [itemPath]
35
- });
36
- const item = itemResponse.value[itemPath];
37
- const ItemTitle = (_c = itemClass === null || itemClass === void 0 ? void 0 : itemClass.views) === null || _c === void 0 ? void 0 : _c.listItemView;
38
-
39
- if (itemID === undefined) {
40
- return (0, _core.jsx)(_core2.NonIdealState, {
41
- title: "No item is selected"
42
- });
43
- } else if (!itemClass) {
44
- return (0, _core.jsx)(_core2.NonIdealState, {
45
- icon: "heart-broken",
46
- title: "Item class not found",
47
- description: "This may be an issue with registry extension configuration"
48
- });
49
- } else if (itemResponse.isUpdating) {
50
- details = (0, _core.jsx)("div", {
51
- className: _core2.Classes.SKELETON
52
- }, "Loading\u2026");
53
- } else if (item) {
54
- const DetailView = (_d = itemClass.views.detailView) !== null && _d !== void 0 ? _d : itemClass.views.editView;
55
- details = (0, _core.jsx)(DetailView, {
56
- getRelatedItemClassConfiguration: getRelatedClass,
57
- subregisterID: subregisterID,
58
- useRegisterItemData: useRegisterItemData,
59
- itemData: item.data
60
- });
61
- } else {
62
- details = (0, _core.jsx)("div", {
63
- className: _core2.Classes.SKELETON
64
- }, "Loading\u2026");
65
- }
66
-
67
- function StyledTitle(props) {
68
- const Component = itemResponse.isUpdating || !itemID ? props => (0, _core.jsx)("span", {
69
- className: props.className
70
- }, (0, _core.jsx)("span", {
71
- className: _core2.Classes.SKELETON
72
- }, "Loading\u2026"), "\u2003") : ItemTitle;
73
- return (0, _core.jsx)(Component, Object.assign({
74
- css: (0, _core.css)`
75
- margin-top: 1em; font-weight: bold; font-size: 110%;
76
- line-height: 1;
77
- white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
78
- `,
79
- itemID: itemID
80
- }, props));
81
- }
82
-
83
- return (0, _core.jsx)("div", {
84
- css: (0, _core.css)`flex: 1; display: flex; flex-flow: column nowrap; padding: 1rem; overflow: hidden;`
85
- }, itemID ? (0, _core.jsx)("div", {
86
- css: (0, _core.css)`flex-shrink: 0; margin-bottom: 1rem; display: flex; flex-flow: column nowrap;`
87
- }, (0, _core.jsx)(_core2.ControlGroup, null, (0, _core.jsx)(_core2.Tooltip, {
88
- content: "Internal unique item ID"
89
- }, (0, _core.jsx)(_core2.InputGroup, {
90
- disabled: true,
91
- value: (item === null || item === void 0 ? void 0 : item.id) || itemID || '',
92
- fill: true
93
- })), (0, _core.jsx)(_core2.Button, {
94
- disabled: true,
95
- intent: (item === null || item === void 0 ? void 0 : item.status) === 'valid' ? 'success' : undefined,
96
- title: "Item status",
97
- icon: (item === null || item === void 0 ? void 0 : item.status) === 'valid' ? 'tick-circle' : 'blank'
98
- }, item === null || item === void 0 ? void 0 : item.status), (0, _core.jsx)(_core2.InputGroup, {
99
- disabled: true,
100
- leftIcon: "calendar",
101
- value: `accepted ${(_g = (_f = (_e = item === null || item === void 0 ? void 0 : item.dateAccepted) === null || _e === void 0 ? void 0 : _e.toLocaleDateString) === null || _f === void 0 ? void 0 : _f.call(_e)) !== null && _g !== void 0 ? _g : '—'}`
102
- })), (0, _core.jsx)(StyledTitle, {
103
- itemData: (_h = item === null || item === void 0 ? void 0 : item.data) !== null && _h !== void 0 ? _h : {},
104
- useRegisterItemData: useRegisterItemData,
105
- getRelatedItemClassConfiguration: getRelatedClass
106
- })) : null, (0, _core.jsx)(ItemDetailsWrapperDiv, {
107
- className: _core2.Classes.ELEVATION_3
108
- }, details), item && (itemActions !== null && itemActions !== void 0 ? itemActions : []).length > 0 ? (0, _core.jsx)("div", {
109
- css: (0, _core.css)`flex-shrink: 0; margin-top: 1rem; display: flex; flex-flow: row nowrap; align-items: center;`
110
- }, (0, _core.jsx)(_core2.FormGroup, {
111
- css: (0, _core.css)`margin-bottom: 0;`
112
- }, itemActions.map((action, idx) => (0, _core.jsx)(_core2.Button, Object.assign({
113
- css: (0, _core.css)`${idx !== itemActions.length - 1 ? 'margin-right: .5rem;' : ''}`
114
- }, action.getButtonProps(item, itemClass)))))) : null);
115
- };
116
-
117
- exports.ItemDetails = ItemDetails;
118
- const ItemDetailsWrapperDiv = _styled.default.div`
119
- flex: 1;
120
- overflow-y: auto;
121
- padding: 1rem;
122
- border-radius: .5rem;
123
- background: ${_core2.Colors.WHITE};
124
- position: relative;
125
- `;
126
- exports.ItemDetailsWrapperDiv = ItemDetailsWrapperDiv;
127
- var _default = ItemDetails;
128
- exports.default = _default;
@@ -1 +0,0 @@
1
- {"version":3,"file":"ItemDetails.js","sourceRoot":"","sources":["../../src/views/ItemDetails.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React from 'react';\nimport { jsx, css } from '@emotion/core';\nimport styled from '@emotion/styled';\n\nimport {\n Button, /*Callout,*/ Classes, Colors, ControlGroup,\n FormGroup,\n InputGroup, NonIdealState, Tooltip\n} from '@blueprintjs/core';\n\nimport {\n ItemAction,\n ItemClassConfiguration, RegisterItemDataHook,\n RegistryItemViewProps,\n RelatedItemClassConfiguration\n} from '../types';\n\n\nexport const ItemDetails: React.FC<{\n itemID?: string;\n itemClass: ItemClassConfiguration<any>;\n subregisterID?: string;\n useRegisterItemData: RegisterItemDataHook;\n getRelatedClass: (clsID: string) => RelatedItemClassConfiguration;\n itemActions?: ItemAction[];\n}> = function ({ itemID, itemClass, subregisterID, getRelatedClass, useRegisterItemData, itemActions }) {\n let details: JSX.Element;\n\n //const itemPath = `${itemClass.meta.id}/${itemID}`;\n const _itemPath = `/${itemClass?.meta?.id ?? 'NONEXISTENT_CLASS'}/${itemID}.yaml`;\n const itemPath = subregisterID ? `/subregisters/${subregisterID}/${_itemPath}` : _itemPath;\n\n const itemResponse = useRegisterItemData({ itemPaths: [itemPath] });\n const item = itemResponse.value[itemPath];\n\n const ItemTitle = itemClass?.views?.listItemView;\n\n if (itemID === undefined) {\n return <NonIdealState title=\"No item is selected\" />;\n\n } else if (!itemClass) {\n return <NonIdealState\n icon=\"heart-broken\"\n title=\"Item class not found\"\n description=\"This may be an issue with registry extension configuration\" />\n\n } else if (itemResponse.isUpdating) {\n details = <div className={Classes.SKELETON}>Loading…</div>;\n\n } else if (item) {\n const DetailView = itemClass.views.detailView ?? itemClass.views.editView;\n\n details = (\n <DetailView\n getRelatedItemClassConfiguration={getRelatedClass}\n subregisterID={subregisterID}\n useRegisterItemData={useRegisterItemData}\n itemData={item.data} />\n );\n\n } else {\n details = <div className={Classes.SKELETON}>Loading…</div>;\n }\n\n function StyledTitle(props: RegistryItemViewProps<any>) {\n const Component = itemResponse.isUpdating || !itemID\n ? (props: { className?: string; }) => (\n <span className={props.className}>\n <span className={Classes.SKELETON}>Loading…</span>\n &emsp;\n </span>\n )\n : ItemTitle;\n\n return (\n <Component\n css={css`\n margin-top: 1em; font-weight: bold; font-size: 110%;\n line-height: 1;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n `}\n itemID={itemID!}\n {...props} />\n );\n }\n\n return (\n <div css={css`flex: 1; display: flex; flex-flow: column nowrap; padding: 1rem; overflow: hidden;`}>\n {itemID\n ? <div css={css`flex-shrink: 0; margin-bottom: 1rem; display: flex; flex-flow: column nowrap;`}>\n <ControlGroup>\n <Tooltip content=\"Internal unique item ID\">\n <InputGroup disabled value={item?.id || itemID || ''} fill />\n </Tooltip>\n <Button\n disabled\n intent={item?.status === 'valid' ? 'success' : undefined}\n title=\"Item status\"\n icon={item?.status === 'valid' ? 'tick-circle' : 'blank'}>\n {item?.status}\n </Button>\n <InputGroup\n disabled\n leftIcon=\"calendar\"\n value={`accepted ${item?.dateAccepted?.toLocaleDateString?.() ?? '—'}`} />\n </ControlGroup>\n <StyledTitle\n itemData={item?.data ?? {}}\n useRegisterItemData={useRegisterItemData}\n getRelatedItemClassConfiguration={getRelatedClass} />\n </div>\n : null}\n\n <ItemDetailsWrapperDiv className={Classes.ELEVATION_3}>\n {details}\n </ItemDetailsWrapperDiv>\n\n {item && ((itemActions ?? []).length > 0)\n ? <div css={css`flex-shrink: 0; margin-top: 1rem; display: flex; flex-flow: row nowrap; align-items: center;`}>\n <FormGroup css={css`margin-bottom: 0;`}>\n {itemActions!.map((action, idx) =>\n <Button\n css={css`${idx !== itemActions!.length - 1 ? 'margin-right: .5rem;' : ''}`}\n {...action.getButtonProps(item, itemClass)} />\n )}\n </FormGroup>\n </div>\n : null}\n </div>\n );\n};\n\n\nexport const ItemDetailsWrapperDiv = styled.div`\n flex: 1;\n overflow-y: auto;\n padding: 1rem;\n border-radius: .5rem;\n background: ${Colors.WHITE};\n position: relative;\n`;\n\n\nexport default ItemDetails;\n"]}
@@ -1,8 +0,0 @@
1
- /** @jsx jsx */
2
- /** @jsxFrag React.Fragment */
3
- /// <reference types="react" />
4
- export declare const MainView: React.FC<{
5
- actions?: JSX.Element;
6
- wrapperClassName?: string;
7
- style?: React.CSSProperties;
8
- }>;
package/views/MainView.js DELETED
@@ -1,34 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.MainView = void 0;
7
-
8
- var _core = require("@blueprintjs/core");
9
-
10
- var _core2 = require("@emotion/core");
11
-
12
- /** @jsx jsx */
13
-
14
- /** @jsxFrag React.Fragment */
15
- const MainView = function ({
16
- actions,
17
- children,
18
- wrapperClassName,
19
- style
20
- }) {
21
- return (0, _core2.jsx)("div", {
22
- css: (0, _core2.css)`flex: 1; display: flex; flex-flow: column nowrap; overflow: hidden;`,
23
- className: wrapperClassName,
24
- style: style
25
- }, (0, _core2.jsx)("main", {
26
- css: (0, _core2.css)`flex: 1; display: flex; flex-flow: row nowrap; align-items: stretch; overflow: hidden;`
27
- }, children), actions ? (0, _core2.jsx)(_core.Navbar, null, (0, _core2.jsx)(_core.Navbar.Group, {
28
- style: {
29
- float: 'unset'
30
- }
31
- }, actions)) : null);
32
- };
33
-
34
- exports.MainView = MainView;
@@ -1 +0,0 @@
1
- {"version":3,"file":"MainView.js","sourceRoot":"","sources":["../../src/views/MainView.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,CAAC,MAAM,QAAQ,GAIhB,UAAU,EACb,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,KAAK,GACN;IACC,OAAO,CACL,aAAK,GAAG,EAAE,GAAG,CAAA,qEAAqE,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK;QAC3H,cAAM,GAAG,EAAE,GAAG,CAAA,wFAAwF,IACnG,QAAQ,CACJ;QACN,OAAO;YACN,CAAC,CAAC,IAAC,MAAM;gBACL,IAAC,MAAM,CAAC,KAAK,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IACpC,OAAO,CACK,CACR;YACX,CAAC,CAAC,IAAI,CACJ,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { Navbar } from '@blueprintjs/core';\n\nimport { css, jsx } from '@emotion/core';\n\n\nexport const MainView: React.FC<{\n actions?: JSX.Element\n wrapperClassName?: string\n style?: React.CSSProperties\n}> = function ({\n actions,\n children,\n wrapperClassName,\n style,\n}) {\n return (\n <div css={css`flex: 1; display: flex; flex-flow: column nowrap; overflow: hidden;`} className={wrapperClassName} style={style}>\n <main css={css`flex: 1; display: flex; flex-flow: row nowrap; align-items: stretch; overflow: hidden;`}>\n {children}\n </main>\n {actions\n ? <Navbar>\n <Navbar.Group style={{ float: 'unset' }}>\n {actions}\n </Navbar.Group>\n </Navbar>\n : null}\n </div>\n );\n};\n"]}
@@ -1,7 +0,0 @@
1
- /** @jsx jsx */
2
- /// <reference types="react" />
3
- import { Register } from '../types';
4
- export declare const RegisterInformation: React.FC<{
5
- register: Partial<Register> | null;
6
- onSave?: (value: Partial<Register>, oldValue: Partial<Register> | null) => void;
7
- }>;