pith-ui 0.1.1 → 0.2.0-app.1

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 (140) hide show
  1. package/AI.md +33 -8
  2. package/API.md +424 -268
  3. package/APP-API.md +2019 -0
  4. package/APP.md +137 -0
  5. package/README.md +37 -4
  6. package/dist/app/files.d.ts +68 -0
  7. package/dist/app/files.d.ts.map +1 -0
  8. package/dist/app/files.js +177 -0
  9. package/dist/app/files.js.map +1 -0
  10. package/dist/app/index.d.ts +57 -0
  11. package/dist/app/index.d.ts.map +1 -0
  12. package/dist/app/index.js +300 -0
  13. package/dist/app/index.js.map +1 -0
  14. package/dist/app/internal.d.ts +31 -0
  15. package/dist/app/internal.d.ts.map +1 -0
  16. package/dist/app/internal.js +2 -0
  17. package/dist/app/internal.js.map +1 -0
  18. package/dist/app/resources.d.ts +89 -0
  19. package/dist/app/resources.d.ts.map +1 -0
  20. package/dist/app/resources.js +190 -0
  21. package/dist/app/resources.js.map +1 -0
  22. package/dist/app/session.d.ts +14 -0
  23. package/dist/app/session.d.ts.map +1 -0
  24. package/dist/app/session.js +12 -0
  25. package/dist/app/session.js.map +1 -0
  26. package/dist/app/settings.d.ts +109 -0
  27. package/dist/app/settings.d.ts.map +1 -0
  28. package/dist/app/settings.js +279 -0
  29. package/dist/app/settings.js.map +1 -0
  30. package/dist/app/workspace.d.ts +228 -0
  31. package/dist/app/workspace.d.ts.map +1 -0
  32. package/dist/app/workspace.js +402 -0
  33. package/dist/app/workspace.js.map +1 -0
  34. package/dist/composer.d.ts.map +1 -1
  35. package/dist/composer.js +37 -27
  36. package/dist/composer.js.map +1 -1
  37. package/dist/content/conversation-reader.d.ts.map +1 -1
  38. package/dist/content/conversation-reader.js +8 -1
  39. package/dist/content/conversation-reader.js.map +1 -1
  40. package/dist/content/conversation-view.d.ts.map +1 -1
  41. package/dist/content/conversation-view.js +34 -8
  42. package/dist/content/conversation-view.js.map +1 -1
  43. package/dist/content/image-viewer.d.ts.map +1 -1
  44. package/dist/content/image-viewer.js +11 -3
  45. package/dist/content/image-viewer.js.map +1 -1
  46. package/dist/content/paged-preview.d.ts +1 -1
  47. package/dist/content/paged-preview.d.ts.map +1 -1
  48. package/dist/content/paged-preview.js +4 -2
  49. package/dist/content/paged-preview.js.map +1 -1
  50. package/dist/content/views.d.ts +3 -0
  51. package/dist/content/views.d.ts.map +1 -1
  52. package/dist/content/views.js +110 -41
  53. package/dist/content/views.js.map +1 -1
  54. package/dist/content/welcome.d.ts.map +1 -1
  55. package/dist/content/welcome.js +5 -2
  56. package/dist/content/welcome.js.map +1 -1
  57. package/dist/dom.js +1 -1
  58. package/dist/dom.js.map +1 -1
  59. package/dist/files/panels.d.ts +2 -0
  60. package/dist/files/panels.d.ts.map +1 -1
  61. package/dist/files/panels.js +202 -128
  62. package/dist/files/panels.js.map +1 -1
  63. package/dist/files/systems.d.ts.map +1 -1
  64. package/dist/files/systems.js +37 -64
  65. package/dist/files/systems.js.map +1 -1
  66. package/dist/forms/actions.d.ts +24 -2
  67. package/dist/forms/actions.d.ts.map +1 -1
  68. package/dist/forms/actions.js +54 -25
  69. package/dist/forms/actions.js.map +1 -1
  70. package/dist/forms/custom-connection.d.ts.map +1 -1
  71. package/dist/forms/custom-connection.js +3 -2
  72. package/dist/forms/custom-connection.js.map +1 -1
  73. package/dist/forms/history.d.ts +1 -1
  74. package/dist/forms/history.d.ts.map +1 -1
  75. package/dist/forms/history.js +78 -15
  76. package/dist/forms/history.js.map +1 -1
  77. package/dist/forms/identity.d.ts.map +1 -1
  78. package/dist/forms/identity.js +9 -25
  79. package/dist/forms/identity.js.map +1 -1
  80. package/dist/forms/model-editor.js +3 -3
  81. package/dist/forms/model-editor.js.map +1 -1
  82. package/dist/forms/panels.d.ts +9 -2
  83. package/dist/forms/panels.d.ts.map +1 -1
  84. package/dist/forms/panels.js +79 -88
  85. package/dist/forms/panels.js.map +1 -1
  86. package/dist/forms/provider-login.d.ts.map +1 -1
  87. package/dist/forms/provider-login.js +20 -36
  88. package/dist/forms/provider-login.js.map +1 -1
  89. package/dist/forms/resource-editor.js +5 -4
  90. package/dist/forms/resource-editor.js.map +1 -1
  91. package/dist/foundations.d.ts +1 -1
  92. package/dist/foundations.d.ts.map +1 -1
  93. package/dist/foundations.js +22 -38
  94. package/dist/foundations.js.map +1 -1
  95. package/dist/navigation/context-menu.d.ts +7 -1
  96. package/dist/navigation/context-menu.d.ts.map +1 -1
  97. package/dist/navigation/context-menu.js +60 -57
  98. package/dist/navigation/context-menu.js.map +1 -1
  99. package/dist/navigation/navigation.d.ts +13 -0
  100. package/dist/navigation/navigation.d.ts.map +1 -1
  101. package/dist/navigation/navigation.js +96 -130
  102. package/dist/navigation/navigation.js.map +1 -1
  103. package/dist/operation.d.ts +12 -0
  104. package/dist/operation.d.ts.map +1 -0
  105. package/dist/operation.js +49 -0
  106. package/dist/operation.js.map +1 -0
  107. package/dist/primitives.d.ts +8 -1
  108. package/dist/primitives.d.ts.map +1 -1
  109. package/dist/primitives.js +114 -143
  110. package/dist/primitives.js.map +1 -1
  111. package/dist/reconcile.d.ts +11 -0
  112. package/dist/reconcile.d.ts.map +1 -0
  113. package/dist/reconcile.js +36 -0
  114. package/dist/reconcile.js.map +1 -0
  115. package/dist/select.d.ts +14 -0
  116. package/dist/select.d.ts.map +1 -0
  117. package/dist/select.js +304 -0
  118. package/dist/select.js.map +1 -0
  119. package/dist/styles.css +439 -370
  120. package/dist/surface.d.ts +31 -0
  121. package/dist/surface.d.ts.map +1 -1
  122. package/dist/surface.js +193 -3
  123. package/dist/surface.js.map +1 -1
  124. package/dist/tasks/approval.d.ts.map +1 -1
  125. package/dist/tasks/approval.js +83 -45
  126. package/dist/tasks/approval.js.map +1 -1
  127. package/dist/tasks/permission-element.d.ts +3 -0
  128. package/dist/tasks/permission-element.d.ts.map +1 -0
  129. package/dist/tasks/permission-element.js +10 -0
  130. package/dist/tasks/permission-element.js.map +1 -0
  131. package/dist/tasks/permission.d.ts.map +1 -1
  132. package/dist/tasks/permission.js +37 -18
  133. package/dist/tasks/permission.js.map +1 -1
  134. package/dist/tasks/runtime.d.ts.map +1 -1
  135. package/dist/tasks/runtime.js +32 -15
  136. package/dist/tasks/runtime.js.map +1 -1
  137. package/dist/workspace.d.ts.map +1 -1
  138. package/dist/workspace.js +93 -40
  139. package/dist/workspace.js.map +1 -1
  140. package/package.json +42 -8
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC7H,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAoB7E,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACpG,MAAM,MAAM,GAAG,CAAC,IAA2B,EAAQ,EAAE;QACnD,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ;YAC1F,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;YAClG,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAyC;IACxE,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;QACrB,MAAM,CAAC,KAAK,CAAC,CAAC;QACd,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/C,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACpE,CAAC,CAAC;IACF,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,MAAM,UAAU,UAAU,CAAC,KAAgB;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAAC,IAAI,WAAW,GAAG,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,CAAC,IAAyB,EAAQ,EAAE;QACjD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;YAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC;QACzG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAAC,CAAC;aAClI,CAAC;YAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;IACtH,CAAC,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAI,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAA4B,EAAE;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,CAAC,IAAkC,EAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK;QAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;;QAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAClM,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAI,CAAC,EAAE,CAAC;AAChE,CAAC;AAGD,MAAM,UAAU,cAAc,CAAC,OAAsB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyE,CAAC;IAC3I,MAAM,MAAM,GAAG,CAAC,KAA8B,EAAQ,EAAE;QACtD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;QAC3F,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;gBAAC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAAC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAAC,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAAC,CAAC;YAChK,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxF,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACjF,CAAC;AAGD,MAAM,UAAU,aAAa,CAAC,OAAsD;IAClF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,CAAC,KAA6B,EAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7H,MAAM,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAAC,OAA4C;IAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxH,MAAM,MAAM,GAAG,CAAC,KAAgC,EAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzJ,MAAM,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAI,CAAC,EAAE,CAAC;AAClE,CAAC;AAaD,MAAM,UAAU,WAAW,CAAC,OAAwD;IAClF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,CAAC,KAA2B,EAAQ,EAAE;QACnD,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3E,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5H,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC;AAuBD,SAAS,WAAW,CAAC,OAAqB,EAAE,IAA4D;IACtG,MAAM,OAAO,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7E,IAAI,OAAO,YAAY,gBAAgB,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,OAAO,CAAC,YAAY;QAAE,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACrF,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpG,MAAM,MAAM,GAAG,CAAC,KAA2B,EAAQ,EAAE;QACnD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IACvE,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;QACtC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC;AACD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAqB,EAAc,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACnG,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAqB,EAAc,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvG,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAqB,EAAc,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAqB,EAAc,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAEtG,MAAM,UAAU,iBAAiB,CAAC,OAAqB;IACrD,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;IACnG,MAAM,OAAO,GAAG,KAAK,CAAC,OAA2B,CAAC;IAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ;YACvD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC;YACzC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7E,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC,EAAE,CAAC,CAAC;IACL,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACrD,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9I,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC;AACf,CAAC;AAWD,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtC,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjG,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,MAAM,MAAM,GAAG,CAAC,KAA4B,EAAQ,EAAE;QACpD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,SAAS,GAAG,IAAI,CAAC;YACjB,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,aAAa,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;QAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IACzD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9F,CAAC;AASD,MAAM,UAAU,cAAc,CAAC,OAAmF;IAChH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC;IAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACjG,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAAC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAClG,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,CAAC,KAA8B,EAAQ,EAAE;QACtD,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAAC,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;QAChH,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU;QACjE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAGD,MAAM,UAAU,YAAY,CAAC,KAAkB;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,MAAM,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAkB;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,CAAC,IAA2B,EAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnH,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAAC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,CAAC,IAA6B,EAAQ,EAAE;QACrD,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACpF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;;YAAM,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAChI,CAAC,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAI,CAAC,EAAE,CAAC;AAChE,CAAC;AAGD,MAAM,UAAU,iBAAiB,CAAC,OAA8C;IAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,CAAC,KAAiC,EAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/K,MAAM,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAI,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAyD,EAAE;IACvF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,CAAC,KAA6B,EAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5G,MAAM,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAAC,OAAgG;IAC/H,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAAC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAAC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrH,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACvK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC3F,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAkB,CAAC,CAAC;IACpF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,QAAQ;QAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;IACrG,MAAM,MAAM,GAAG,CAAC,KAAgC,EAAQ,EAAE;QACxD,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAAC,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;QAC9G,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAChI,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAA0C;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAAC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChJ,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IAClH,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,MAAM,MAAM,GAAG,CAAC,KAA6B,EAAQ,EAAE;QACrD,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAAC,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;QAC9G,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAAC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9G,IAAI,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;YAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAC9I,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7B,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAI,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAiE;IACrG,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAAC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IACxG,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,IAAI,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAChG,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAG,CAAC,KAAgC,EAAQ,EAAE;QACxD,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;QAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC;QACtG,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACvN,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC;QAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC/G,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvG,CAAC;AAUD,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACrH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,GAAG,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IACnG,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,KAAK,EAAE,SAAS,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3I,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,oBAAoB,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACxH,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAAC,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAAC,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvF,IAAI,KAAK,GAAgB,OAAO,CAAC;IAAC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACvD,MAAM,MAAM,GAAG,CAAC,IAA2B,EAAQ,EAAE;QACnD,KAAK,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QACzL,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;;YAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;QAC3H,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM;QACzG,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;QAClC,IAAI,KAAK,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,KAAK,IAAI,QAAQ;YAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/H,CAAC;AAqBD,MAAM,UAAU,oBAAoB,CAAC,UAA2B,EAAE;IAChE,+EAA+E;IAC/E,kFAAkF;IAClF,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IACrE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;IAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;IAC1G,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAAC,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzG,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3F,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,IAAI,GAAG,EAAE,IAAI;QAAE,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAClC,IAAI,GAAG,EAAE,MAAM;QAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAChD,IAAI,GAAG,EAAE,KAAK;QAAE,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;IAC7C,IAAI,GAAG,EAAE,MAAM;QAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAAC,IAAI,OAAO,GAAG,KAAK,CAAC;IACtF,IAAI,KAAK,GAAkB,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;IAClF,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9K,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC;QAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAE,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;QAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IAClI,MAAM,MAAM,GAAG,CAAC,IAA6B,EAAQ,EAAE;QACrD,KAAK,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACtF,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9J,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;QACnC,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO;QACvG,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAAC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAAC,OAAO,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1F,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACxE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;gBAAE,OAAO;YAC7D,IAAI,MAAM,CAAC,EAAE;gBAAE,MAAM,CAAC,KAAK,EAAE,CAAC;iBAAM,CAAC;gBAAC,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;QACpF,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAe,EAAE,EAAE;YAC3B,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACtH,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,OAAO,GAAG,KAAK,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC,CAAkB,CAAC,CAAC;IACrB,MAAM,CAAC,KAAK,CAAC,CAAC;IACd,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM;QAC7E,IAAI,CAAC,MAAM;YACT,UAAU,CAAC,UAAU,EAAE,CAAC;YAAC,OAAO,GAAG,KAAK,CAAC;YACzC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,cAAc,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACnL,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1D,CAAC,EAAE,KAAK,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;QACrG,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACjI,CAAC;AAID,MAAM,UAAU,mBAAmB,CAAC,OAA0O;IAC5Q,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAAC,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAAC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACpM,IAAI,KAAK,GAAiB,OAAO,CAAC;IAAC,IAAI,OAAO,GAAG,KAAK,CAAC;IACvD,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,IAAI,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5G,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,KAAK,IAAmB,EAAE;QACpC,IAAI,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE;YAAE,OAAO;QAC9G,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAAC,OAAO,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;gBAAE,OAAO;YAC7D,IAAI,MAAM,CAAC,EAAE;gBAAE,MAAM,CAAC,KAAK,EAAE,CAAC;;gBAAM,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACtH,CAAC;gBAAS,CAAC;YAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAC,OAAO,GAAG,KAAK,CAAC;gBAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;QAAC,CAAC;IAChF,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI;QAAE,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAClD,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK;QAAE,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7D,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM;QAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;IAChE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI;QACrD,OAAO,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjG,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;QAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAE,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IAC1J,IAAI,cAAyC,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,IAA4B,EAAQ,EAAE;QACpD,KAAK,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;YAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC;YAAC,IAAI,IAAI,CAAC,OAAO,YAAY,IAAI;gBAAE,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBAAM,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACrL,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACnD,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3K,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;IACjG,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChP,KAAK,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACjN,CAAC;AAUD,MAAM,UAAU,aAAa,CAAC,OAA6E;IACzG,IAAI,IAAI,GAAG,KAAK,CAAC;IAAC,IAAI,KAAK,GAAiB,OAAO,CAAC;IACpD,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,IAAI;YAAE,KAAK,EAAE,CAAC;;YAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC5H,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtF,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAChH,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAChG,SAAS,KAAK,CAAC,YAAY,GAAG,KAAK;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO;QAAC,IAAI,GAAG,KAAK,CAAC;QAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;QACxI,IAAI,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW;YAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC3E,CAAC;IACD,SAAS,IAAI;QACX,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI;YAAE,OAAO;QAAC,IAAI,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IACzJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;IACzJ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,IAAI,IAAK,KAAuB,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;IACvL,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;IACpJ,MAAM,MAAM,GAAG,CAAC,IAA4B,EAAQ,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ;QAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACzK,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;QACpG,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAChE,CAAC;AAID,MAAM,UAAU,UAAU,CAAC,OAAkB;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAAC,IAAI,KAAK,GAAwB,OAAO,CAAC,KAAK,CAAC;IAC9F,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7F,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,CAAC,KAA0B,EAAQ,EAAE;QAClD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QACpH,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;wBACnD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;wBAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ;4BAAE,OAAO;wBAC5G,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;wBAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE;4BAAE,OAAO,CAAC,KAAK,EAAE,CAAC;wBAAC,OAAO,MAAM,CAAC;oBACpG,CAAC,EAAE,CAAC,CAAC;gBACL,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAC/G,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;gBAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;;gBAAM,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC/I,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE;QAC/C,MAAM,GAAG,GAAI,KAAuB,CAAC,GAAG,CAAC;QACzC,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;IACnJ,CAAC,CAAkB,CAAC,CAAC;IACrB,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM;QAClG,SAAS,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,YAAY;YAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7F,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;YAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9J,CAAC","sourcesContent":["import { Generation, Lifetime } from './core.js';\nimport type { ActionResult, Density, Intent, UIAction, UIBlock } from './core.js';\nimport { element, iconElement, setText, uniqueId } from './dom.js';\nimport { adoptAction, adoptActionLayout, adoptFeedback, adoptNativeControl, reconcileSelectOptions } from './foundations.js';\nimport { installDialogLifecycle, installMenuNavigation } from './surface.js';\n\nexport interface ButtonState {\n label: string;\n intent?: Intent;\n density?: Density;\n disabled?: boolean;\n pending?: boolean;\n icon?: string;\n title?: string;\n /** Secondary product action, including the accepted compact application style. */\n appearance?: 'standard' | 'secondary';\n}\nexport interface ButtonOptions extends ButtonState {\n type?: 'button' | 'submit' | 'reset';\n onAction?: UIAction;\n onError?: (message: string) => void;\n}\nexport interface ButtonBlock extends UIBlock<ButtonState> { readonly element: HTMLButtonElement; }\n\nexport function createButton(options: ButtonOptions): ButtonBlock {\n const node = element('button', 'pui-button');\n node.type = options.type ?? 'button';\n const caption = element('span');\n node.append(caption);\n const action = adoptAction(node, { caption, onAction: options.onAction, onError: options.onError });\n const update = (next: Readonly<ButtonState>): void => {\n action.update({ ...next, intent: next.intent ?? 'neutral', density: next.density ?? 'normal',\n disabled: !!next.disabled, pending: !!next.pending, title: next.title ?? '', icon: next.icon ?? '',\n appearance: next.appearance ?? 'standard' });\n };\n update(options);\n return { element: node, update, destroy() { action.destroy(); } };\n}\n\nexport function createIconButton(options: ButtonOptions & { icon: string }): ButtonBlock {\n const block = createButton(options);\n const update = block.update;\n block.update = state => {\n update(state);\n block.element.classList.add('pui-icon-button');\n block.element.setAttribute('aria-label', state.label);\n block.element.querySelector('span')?.classList.add('pui-sr-only');\n };\n block.update(options);\n return block;\n}\n\nexport function createTextAction(options: ButtonOptions): ButtonBlock {\n const block = createButton(options);\n const update = block.update;\n block.update = state => { update(state); block.element.classList.add('pui-text-action'); };\n block.update(options);\n return block;\n}\n\nexport interface IconState { name: string; label?: string; size?: 'small' | 'normal'; }\nexport function createIcon(state: IconState): UIBlock<IconState> {\n const root = element('span', 'pui-icon-display'); let currentName = '';\n const update = (next: Readonly<IconState>): void => {\n if (next.name !== currentName) { currentName = next.name; root.replaceChildren(iconElement(next.name)); }\n root.classList.toggle('pui-icon-small', next.size === 'small');\n if (next.label) { root.setAttribute('role', 'img'); root.setAttribute('aria-label', next.label); root.removeAttribute('aria-hidden'); }\n else { root.removeAttribute('role'); root.removeAttribute('aria-label'); root.setAttribute('aria-hidden', 'true'); }\n };\n update(state); return { element: root, update, destroy() {} };\n}\n\nexport function createDivider(state: { label?: string } = {}): UIBlock<{ label?: string }> {\n const root = element('div', 'pui-divider'); root.setAttribute('role', 'separator');\n const update = (next: Readonly<{ label?: string }>): void => { setText(root, next.label); if (next.label) root.setAttribute('aria-label', next.label); else root.removeAttribute('aria-label'); };\n update(state); return { element: root, update, destroy() {} };\n}\n\nexport interface KeyValueState { items: readonly { key: string; label: string; value: string }[]; }\nexport function createKeyValue(options: KeyValueState): UIBlock<KeyValueState> {\n const root = element('dl', 'pui-key-value'); const rows = new Map<string, { node: HTMLElement; label: HTMLElement; value: HTMLElement }>();\n const update = (state: Readonly<KeyValueState>): void => {\n const keep = new Set(state.items.map(item => item.key));\n for (const [key, row] of rows) if (!keep.has(key)) { row.node.remove(); rows.delete(key); }\n for (const item of state.items) {\n let row = rows.get(item.key);\n if (!row) { const label = element('dt'); const value = element('dd'); row = { node: element('div', '', label, value), label, value }; rows.set(item.key, row); }\n setText(row.label, item.label); setText(row.value, item.value); root.append(row.node);\n }\n };\n update(options); return { element: root, update, destroy() { rows.clear(); } };\n}\n\nexport interface ToolbarState { label: string; density?: Density; }\nexport function createToolbar(options: ToolbarState & { children?: readonly Node[] }): UIBlock<ToolbarState> {\n const root = element('div', 'pui-toolbar'); root.append(...(options.children ?? []));\n const layout = adoptActionLayout(root, 'toolbar');\n const update = (state: Readonly<ToolbarState>): void => { layout.update({ ...state, density: state.density ?? 'normal' }); };\n update(options); return { element: root, update, destroy() { layout.destroy(); } };\n}\n\nexport interface ScrollAreaState { label: string; size?: 'small' | 'medium' | 'fill'; }\nexport function createScrollArea(options: ScrollAreaState & { content: Node }): UIBlock<ScrollAreaState> {\n const root = element('div', 'pui-scroll-area', options.content); root.tabIndex = 0; root.setAttribute('role', 'region');\n const update = (state: Readonly<ScrollAreaState>): void => { root.setAttribute('aria-label', state.label); root.dataset.size = state.size ?? 'medium'; };\n update(options); return { element: root, update, destroy() {} };\n}\n\nexport interface FieldState {\n label: string;\n description?: string;\n error?: string;\n required?: boolean;\n disabled?: boolean;\n}\nexport interface FieldBlock extends UIBlock<FieldState> {\n readonly control: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n}\n\nexport function createField(options: FieldState & { control: FieldBlock['control'] }): FieldBlock {\n const root = element('div', 'pui-field');\n const label = element('label', 'pui-field-label');\n const description = element('div', 'pui-field-description');\n const error = element('div', 'pui-field-error');\n const control = options.control;\n description.id = uniqueId('pui-description');\n error.id = uniqueId('pui-error');\n control.classList.add('pui-control');\n root.append(label, control, description, error);\n const field = adoptNativeControl(control, { label, description, error });\n const update = (state: Readonly<FieldState>): void => {\n field.update({ ...state, label: `${state.label}${state.required ? ' *' : ''}`,\n description: state.description ?? '', error: state.error ?? '', disabled: !!state.disabled, required: !!state.required });\n label.hidden = !state.label;\n root.classList.toggle('pui-invalid', !!state.error);\n };\n update(options);\n return { element: root, control, update, destroy() { field.destroy(); } };\n}\n\nexport interface InputState extends FieldState {\n placeholder?: string;\n readOnly?: boolean;\n density?: Density;\n}\nexport interface InputOptions extends InputState {\n value?: string;\n onInput?: (value: string, event: Event) => void;\n onChange?: (value: string, event: Event) => void;\n autocomplete?: string;\n min?: number;\n max?: number;\n step?: number | 'any';\n}\nexport interface InputBlock extends UIBlock<InputState> {\n readonly control: HTMLInputElement | HTMLTextAreaElement;\n getValue(): string;\n reset(value: string): void;\n focus(): void;\n}\n\nfunction textControl(options: InputOptions, type: 'text' | 'search' | 'password' | 'number' | 'textarea'): InputBlock {\n const control = type === 'textarea' ? element('textarea') : element('input');\n if (control instanceof HTMLInputElement) {\n control.type = type === 'textarea' ? 'text' : type;\n if (options.min != null) control.min = String(options.min);\n if (options.max != null) control.max = String(options.max);\n if (options.step != null) control.step = String(options.step);\n }\n if (options.autocomplete) control.setAttribute('autocomplete', options.autocomplete);\n control.value = options.value ?? '';\n const field = createField({ ...options, control });\n const input = adoptNativeControl(control, { onInput: options.onInput, onChange: options.onChange });\n const update = (state: Readonly<InputState>): void => {\n field.update(state);\n input.update({ placeholder: state.placeholder ?? '', readOnly: !!state.readOnly });\n control.classList.toggle('pui-compact', state.density === 'compact');\n };\n update(options);\n return { element: field.element, control, update, getValue: input.getValue,\n reset: input.reset, focus: input.focus,\n destroy() { input.destroy(); field.destroy(); } };\n}\nexport const createTextInput = (options: InputOptions): InputBlock => textControl(options, 'text');\nexport const createSearchInput = (options: InputOptions): InputBlock => textControl(options, 'search');\nexport const createNumberInput = (options: InputOptions): InputBlock => textControl(options, 'number');\nexport const createTextArea = (options: InputOptions): InputBlock => textControl(options, 'textarea');\n\nexport function createSecretInput(options: InputOptions): InputBlock {\n const block = textControl({ ...options, autocomplete: options.autocomplete ?? 'off' }, 'password');\n const control = block.control as HTMLInputElement;\n const toggle = createTextAction({ label: 'Show', onAction() {\n const show = control.type === 'password';\n control.type = show ? 'text' : 'password';\n toggle.update({ label: show ? 'Hide' : 'Show', disabled: control.disabled });\n toggle.element.setAttribute('aria-pressed', String(show));\n } });\n toggle.element.setAttribute('aria-controls', control.id);\n toggle.element.setAttribute('aria-pressed', 'false');\n block.element.append(toggle.element);\n const update = block.update;\n block.update = state => { update(state); toggle.update({ label: control.type === 'password' ? 'Show' : 'Hide', disabled: state.disabled }); };\n const destroy = block.destroy;\n block.destroy = () => { destroy(); toggle.destroy(); };\n return block;\n}\n\nexport interface SelectOption { value: string; label: string; disabled?: boolean; }\nexport interface SelectState extends FieldState { options: readonly SelectOption[]; density?: Density; }\nexport interface SelectOptions extends SelectState { value?: string; onChange?: (value: string) => void; multiple?: boolean; size?: number; }\nexport interface SelectBlock extends UIBlock<SelectState> {\n readonly control: HTMLSelectElement;\n getValue(): string;\n reset(value: string): void;\n focus(): void;\n}\nexport function createSelect(options: SelectOptions): SelectBlock {\n const control = element('select');\n control.multiple = !!options.multiple;\n if (options.size) control.size = options.size;\n const field = createField({ ...options, control });\n const input = adoptNativeControl(control, { onChange: () => options.onChange?.(control.value) });\n let signature = '';\n const update = (state: Readonly<SelectState>): void => {\n field.update(state);\n control.classList.toggle('pui-compact', state.density === 'compact');\n const next = JSON.stringify(state.options);\n if (next !== signature) {\n signature = next;\n reconcileSelectOptions(control, state.options);\n if (!control.multiple && control.selectedIndex < 0 && control.options.length) control.selectedIndex = 0;\n }\n };\n update(options);\n if (options.value != null) control.value = options.value;\n return { element: field.element, control, update, getValue: input.getValue,\n reset: input.reset, focus: input.focus, destroy() { input.destroy(); field.destroy(); } };\n}\n\nexport interface CheckboxState { label: string; description?: string; disabled?: boolean; }\nexport interface CheckboxBlock extends UIBlock<CheckboxState> {\n readonly control: HTMLInputElement;\n getValue(): boolean;\n reset(value: boolean): void;\n focus(): void;\n}\nexport function createCheckbox(options: CheckboxState & { checked?: boolean; onChange?: (value: boolean) => void }): CheckboxBlock {\n const control = element('input'); control.type = 'checkbox'; control.checked = !!options.checked;\n const caption = element('span'); const description = element('small');\n const root = element('label', 'pui-checkbox', control, element('span', '', caption, description));\n const input = adoptNativeControl(control, { onChange: () => options.onChange?.(control.checked) });\n const update = (state: Readonly<CheckboxState>): void => {\n setText(caption, state.label); setText(description, state.description); description.hidden = !state.description;\n input.update({ disabled: !!state.disabled });\n };\n update(options);\n return { element: root, control, update, getValue: input.getChecked,\n reset: input.reset, focus: input.focus, destroy() { input.destroy(); } };\n}\n\nexport interface NoticeState { message: string; tone?: 'info' | 'success' | 'warning' | 'error'; }\nexport function createNotice(state: NoticeState): UIBlock<NoticeState> {\n const root = element('div', 'pui-notice');\n const notice = adoptFeedback(root, { presentation: 'notice' });\n notice.update(state); return notice;\n}\nexport interface StatusState { label: string; tone?: 'neutral' | 'success' | 'warning' | 'error'; }\nexport function createStatus(state: StatusState): UIBlock<StatusState> {\n const root = element('span', 'pui-status');\n const status = adoptFeedback(root, { presentation: 'status', autoHide: false });\n const update = (next: Readonly<StatusState>): void => { status.update({ message: next.label, tone: next.tone }); };\n update(state); return { element: root, update, destroy() { status.destroy(); } };\n}\nexport interface ProgressState { label: string; value?: number; max?: number; }\nexport function createProgress(state: ProgressState): UIBlock<ProgressState> {\n const control = element('progress'); const label = element('span');\n const root = element('label', 'pui-progress', label, control);\n const update = (next: Readonly<ProgressState>): void => {\n setText(label, next.label); control.max = next.max && next.max > 0 ? next.max : 100;\n if (next.value == null) control.removeAttribute('value'); else control.value = Math.max(0, Math.min(next.value, control.max));\n };\n update(state); return { element: root, update, destroy() {} };\n}\n\nexport interface FormSectionState { title: string; description?: string; }\nexport function createFormSection(options: FormSectionState & { content?: Node }): UIBlock<FormSectionState> {\n const title = element('h3'); const description = element('p', 'pui-muted');\n const root = element('section', 'pui-form-section', title, description);\n if (options.content) root.append(options.content);\n const update = (state: Readonly<FormSectionState>): void => { setText(title, state.title); setText(description, state.description); description.hidden = !state.description; };\n update(options); return { element: root, update, destroy() {} };\n}\nexport interface ActionsState { align?: 'start' | 'end' | 'between'; }\nexport function createActions(options: ActionsState & { children?: readonly Node[] } = {}): UIBlock<ActionsState> {\n const root = element('div', 'pui-actions'); root.append(...(options.children ?? []));\n const layout = adoptActionLayout(root, 'actions');\n const update = (state: Readonly<ActionsState>): void => { layout.update({ align: state.align ?? 'end' }); };\n update(options); return { element: root, update, destroy() { layout.destroy(); } };\n}\nexport interface DisclosureState { title: string; description?: string; disabled?: boolean; }\nexport interface DisclosureBlock extends UIBlock<DisclosureState> { setOpen(open: boolean): void; isOpen(): boolean; }\nexport function createDisclosure(options: DisclosureState & { content: Node; open?: boolean; onToggle?: (open: boolean) => void }): DisclosureBlock {\n const root = element('details', 'pui-disclosure'); const summary = element('summary'); const title = element('span');\n const description = element('small', 'pui-muted'); summary.append(title, description); root.append(summary, element('div', 'pui-disclosure-content', options.content));\n root.open = !!options.open; let disabled = !!options.disabled; const life = new Lifetime();\n life.listen(root, 'toggle', (() => options.onToggle?.(root.open)) as EventListener);\n life.listen(summary, 'click', (event => { if (disabled) event.preventDefault(); }) as EventListener);\n const update = (state: Readonly<DisclosureState>): void => {\n setText(title, state.title); setText(description, state.description); description.hidden = !state.description;\n disabled = !!state.disabled; summary.setAttribute('aria-disabled', String(disabled));\n };\n update(options);\n return { element: root, update, setOpen(open) { root.open = open; }, isOpen: () => root.open, destroy() { life.destroy(); } };\n}\nexport interface ListRowState { title: string; description?: string; meta?: string; selected?: boolean; icon?: string; }\nexport function createListRow(options: ListRowState & { actions?: Node }): UIBlock<ListRowState> {\n const title = element('div', 'pui-list-row-title'); const description = element('div', 'pui-muted'); const meta = element('small', 'pui-muted');\n const glyph = element('span', 'pui-list-row-icon');\n const root = element('div', 'pui-list-row', glyph, element('div', 'pui-list-row-body', title, description), meta);\n if (options.actions) root.append(options.actions);\n let iconName = '';\n const update = (state: Readonly<ListRowState>): void => {\n setText(title, state.title); setText(description, state.description); description.hidden = !state.description;\n setText(meta, state.meta); meta.hidden = !state.meta; root.classList.toggle('pui-selected', !!state.selected);\n if (iconName !== (state.icon ?? '')) { iconName = state.icon ?? ''; glyph.replaceChildren(...(state.icon ? [iconElement(state.icon)] : [])); }\n glyph.hidden = !state.icon;\n };\n update(options); return { element: root, update, destroy() {} };\n}\nexport interface CollectionState { status: 'ready' | 'loading' | 'empty' | 'error'; message?: string; retryLabel?: string; }\nexport function createCollectionState(options: CollectionState & { content?: Node; onRetry?: UIAction }): UIBlock<CollectionState> {\n const message = createNotice({ message: '' }); const content = element('div', 'pui-collection-content');\n if (options.content) content.append(options.content);\n const retry = createButton({ label: options.retryLabel ?? 'Retry', onAction: options.onRetry });\n const root = element('section', 'pui-collection', message.element, retry.element, content);\n const update = (state: Readonly<CollectionState>): void => {\n root.dataset.state = state.status; root.setAttribute('aria-busy', String(state.status === 'loading'));\n message.update({ message: state.message ?? ({ ready: '', loading: 'Loading…', empty: 'Nothing here yet.', error: 'Could not load this content.' }[state.status]), tone: state.status === 'error' ? 'error' : 'info' });\n content.hidden = state.status !== 'ready'; retry.element.hidden = state.status !== 'error' || !options.onRetry;\n retry.update({ label: state.retryLabel ?? 'Retry' });\n };\n update(options); return { element: root, update, destroy() { retry.destroy(); message.destroy(); } };\n}\n\nexport interface DialogState { title: string; description?: string; eyebrow?: string; closeDisabled?: boolean; }\nexport interface DialogOptions extends DialogState { dialog?: HTMLDialogElement; content?: Node; actions?: Node; closeOnBackdrop?: boolean; onClose?: () => void; }\nexport interface DialogBlock extends UIBlock<DialogState> {\n readonly element: HTMLDialogElement;\n readonly body: HTMLElement;\n open(): void;\n close(): void;\n}\nexport function createDialog(options: DialogOptions): DialogBlock {\n const root = options.dialog ?? element('dialog'); root.classList.add('pui-dialog');\n const title = element('h2'); title.id = uniqueId('pui-dialog-title'); root.setAttribute('aria-labelledby', title.id);\n const description = element('p', 'pui-muted'); description.id = uniqueId('pui-dialog-description');\n const eyebrow = element('span', 'pui-eyebrow');\n const close = createIconButton({ label: `Close ${options.title}`, icon: 'close', onAction() { if (!state.closeDisabled) root.close(); } });\n const heading = element('header', 'pui-dialog-heading', element('div', '', eyebrow, title, description), close.element);\n const body = element('div', 'pui-dialog-body'); if (options.content) body.append(options.content);\n root.replaceChildren(heading, body); if (options.actions) root.append(options.actions);\n let state: DialogState = options; let disposed = false;\n const update = (next: Readonly<DialogState>): void => {\n state = next; setText(title, next.title); setText(description, next.description); description.hidden = !next.description; setText(eyebrow, next.eyebrow); eyebrow.hidden = !next.eyebrow;\n if (next.description) root.setAttribute('aria-describedby', description.id); else root.removeAttribute('aria-describedby');\n close.update({ label: `Close ${next.title}`, icon: 'close', disabled: next.closeDisabled });\n };\n const surface = installDialogLifecycle(root, { closeOnBackdrop: options.closeOnBackdrop ?? !!options.dialog,\n canClose: () => !state.closeDisabled, onClose: options.onClose });\n update(options);\n return { element: root, body, update,\n open() { if (!disposed) surface.open(); }, close() { surface.close(); },\n destroy() { if (disposed) return; disposed = true; surface.close(); surface.destroy(); close.destroy(); root.remove(); } };\n}\n\nexport interface TextEditState extends DialogState { error?: string; disabled?: boolean; pending?: boolean; inputDisabled?: boolean; note?: string; submitLabel?: string; }\nexport interface TextEditInput { value: string; title?: string; description?: string; note?: string; }\nexport interface TextEditOptions extends Partial<TextEditState> {\n dialog?: HTMLDialogElement;\n ids?: { form?: string; control?: string; submit?: string; error?: string; title?: string; cancel?: string };\n label?: string;\n onInput?: (value: string) => void;\n onSubmit?: (text: string) => Promise<ActionResult> | ActionResult;\n onClose?: () => void;\n}\nexport interface TextEditBlock extends Omit<UIBlock<TextEditState>, 'element'> {\n readonly element: HTMLDialogElement;\n readonly control: HTMLTextAreaElement;\n readonly submitButton: HTMLButtonElement;\n open(input: TextEditInput): void;\n close(): void;\n getValue(): string;\n focus(): void;\n}\nexport function createTextEditDialog(options: TextEditOptions = {}): TextEditBlock {\n // The editor has one form-level error, so it does not need the general field's\n // description/error/number/secret machinery. Both paths use the same control CSS.\n const control = element('textarea', 'pui-control'); control.rows = 8;\n control.id = options.ids?.control ?? uniqueId('pui-input');\n const label = element('label', 'pui-field-label', options.label ?? 'Message'); label.htmlFor = control.id;\n const input = adoptNativeControl(control, { label, onInput: value => options.onInput?.(value) });\n const field = element('div', 'pui-field', label, control);\n const note = element('p', 'pui-muted'); const error = createNotice({ message: '', tone: 'error' });\n const cancel = createButton({ label: 'Cancel', onAction() { dialog.close(); } });\n const submit = createButton({ label: options.submitLabel ?? 'Save', intent: 'primary', type: 'submit' });\n const actions = createActions({ children: [cancel.element, submit.element] });\n const form = element('form', 'pui-text-edit', field, note, error.element, actions.element);\n const ids = options.ids;\n if (ids?.form) form.id = ids.form;\n if (ids?.submit) submit.element.id = ids.submit;\n if (ids?.error) error.element.id = ids.error;\n if (ids?.cancel) cancel.element.id = ids.cancel;\n const generation = new Generation(); const life = new Lifetime(); let pending = false;\n let state: TextEditState = { title: options.title ?? 'Edit message', ...options };\n const dialog = createDialog({ ...state, dialog: options.dialog, content: form, onClose() { generation.invalidate(); pending = false; update(state); options.onClose?.(); } });\n if (ids?.title) { dialog.element.querySelector('h2')!.id = ids.title; dialog.element.setAttribute('aria-labelledby', ids.title); }\n const update = (next: Readonly<TextEditState>): void => {\n state = next; dialog.update(next); setText(note, next.note); note.hidden = !next.note;\n error.update({ message: next.error ?? '', tone: 'error' });\n submit.update({ label: next.submitLabel ?? options.submitLabel ?? 'Save', intent: 'primary', disabled: next.disabled, pending: !!(next.pending || pending) });\n input.update({ disabled: !!next.inputDisabled });\n };\n life.listen(form, 'submit', (event => {\n event.preventDefault();\n if (pending || state.pending || state.disabled || submit.element.disabled || !options.onSubmit) return;\n const seq = generation.next(); const value = control.value; pending = true; update(state);\n void Promise.resolve().then(() => options.onSubmit!(value)).then(result => {\n if (!generation.current(seq) || !dialog.element.open) return;\n if (result.ok) dialog.close(); else { state = { ...state, error: result.error }; }\n }).catch((reason: unknown) => {\n if (generation.current(seq)) state = { ...state, error: reason instanceof Error ? reason.message : String(reason) };\n }).finally(() => { if (generation.current(seq)) { pending = false; update(state); } });\n }) as EventListener);\n update(state);\n return { element: dialog.element, control, submitButton: submit.element, update,\n open(target) {\n generation.invalidate(); pending = false;\n update({ ...state, error: '', title: target.title ?? options.title ?? 'Edit message', description: target.description ?? options.description, note: target.note ?? options.note });\n input.reset(target.value); dialog.open(); input.focus();\n }, close() { generation.invalidate(); dialog.close(); }, getValue: input.getValue, focus: input.focus,\n destroy() { generation.destroy(); life.destroy(); input.destroy(); dialog.destroy(); cancel.destroy(); submit.destroy(); } };\n}\n\nexport interface ConfirmState extends DialogState { message?: string | Node; hint?: string; error?: string; disabled?: boolean; pending?: boolean; confirmLabel?: string; }\nexport interface ConfirmBlock extends UIBlock<ConfirmState> { readonly element: HTMLDialogElement; readonly confirmButton: HTMLButtonElement; readonly cancelButton: HTMLButtonElement; open(state?: ConfirmState): void; close(): void; refreshAvailability(): void; }\nexport function createConfirmDialog(options: ConfirmState & { dialog?: HTMLDialogElement; ids?: { form?: string; error?: string; title?: string; cancel?: string }; unavailable?: () => boolean; onConfirm: () => Promise<ActionResult> | ActionResult; onClose?: () => void }): ConfirmBlock {\n const message = element('p', 'pui-modal-description'); const hint = element('p', 'pui-field-hint'); const error = createNotice({ message: '', tone: 'error' }); const generation = new Generation();\n let state: ConfirmState = options; let pending = false;\n const cancel = createButton({ label: 'Cancel', onAction() { dialog.close(); } });\n const confirm = createButton({ label: options.confirmLabel ?? 'Remove', intent: 'danger', type: 'submit' });\n const life = new Lifetime();\n const run = async (): Promise<void> => {\n if (pending || state.disabled || state.pending || confirm.element.disabled || options.unavailable?.()) return;\n const seq = generation.next(); pending = true; update(state);\n try {\n const result = await options.onConfirm();\n if (!generation.current(seq) || !dialog.element.open) return;\n if (result.ok) dialog.close(); else state = { ...state, error: result.error };\n } catch (reason) {\n if (generation.current(seq)) state = { ...state, error: reason instanceof Error ? reason.message : String(reason) };\n } finally { if (generation.current(seq)) { pending = false; update(state); } }\n };\n const actions = createActions({ children: [cancel.element, confirm.element] });\n const form = element('form', 'pui-confirm', message, hint, error.element, actions.element);\n if (options.ids?.form) form.id = options.ids.form;\n if (options.ids?.error) error.element.id = options.ids.error;\n if (options.ids?.cancel) cancel.element.id = options.ids.cancel;\n const dialog = createDialog({ ...options, content: form,\n onClose() { generation.invalidate(); pending = false; update(state); options.onClose?.(); } });\n if (options.ids?.title) { dialog.element.querySelector('h2')!.id = options.ids.title; dialog.element.setAttribute('aria-labelledby', options.ids.title); }\n let currentMessage: string | Node | undefined;\n const update = (next: Readonly<ConfirmState>): void => {\n state = next; dialog.update(next);\n if (next.message !== currentMessage) { currentMessage = next.message; if (next.message instanceof Node) message.replaceChildren(next.message); else setText(message, next.message); }\n setText(hint, next.hint); hint.hidden = !next.hint;\n error.update({ message: next.error ?? '', tone: 'error' });\n confirm.update({ label: next.confirmLabel ?? 'Remove', intent: 'danger', disabled: !!(next.disabled || options.unavailable?.()), pending: !!(next.pending || pending) });\n };\n life.listen(form, 'submit', (event => { event.preventDefault(); void run(); }) as EventListener);\n update(options);\n return { element: dialog.element, confirmButton: confirm.element, cancelButton: cancel.element, update, open(next) { generation.invalidate(); pending = false; update({ ...(next ?? state), error: '' }); dialog.open(); cancel.element.focus(); },\n close() { generation.invalidate(); dialog.close(); }, refreshAvailability() { update(state); }, destroy() { generation.destroy(); life.destroy(); dialog.destroy(); confirm.destroy(); cancel.destroy(); } };\n}\n\nexport interface PopoverState { label: string; disabled?: boolean; }\nexport interface PopoverBlock extends UIBlock<PopoverState> {\n readonly trigger: HTMLButtonElement;\n readonly panel: HTMLElement;\n open(): void;\n close(): void;\n isOpen(): boolean;\n}\nexport function createPopover(options: PopoverState & { content: Node; onToggle?: (open: boolean) => void }): PopoverBlock {\n let open = false; let state: PopoverState = options;\n const trigger = createButton({ label: options.label, onAction() { if (open) close(); else show(); } });\n const panel = element('div', 'pui-popover-panel', options.content); panel.hidden = true; panel.id = uniqueId('pui-popover');\n panel.setAttribute('role', 'region'); panel.setAttribute('aria-label', options.label);\n trigger.element.setAttribute('aria-controls', panel.id); trigger.element.setAttribute('aria-expanded', 'false');\n const root = element('div', 'pui-popover', trigger.element, panel); const life = new Lifetime();\n function close(restoreFocus = false): void {\n if (!open) return; open = false; panel.hidden = true; trigger.element.setAttribute('aria-expanded', 'false'); options.onToggle?.(false);\n if (restoreFocus && trigger.element.isConnected) trigger.element.focus();\n }\n function show(): void {\n if (state.disabled || open) return; open = true; panel.hidden = false; trigger.element.setAttribute('aria-expanded', 'true'); options.onToggle?.(true);\n }\n life.listen(document, 'pointerdown', (event => { if (open && event.target instanceof Node && !root.contains(event.target)) close(); }) as EventListener);\n life.listen(root, 'keydown', (event => { if (open && (event as KeyboardEvent).key === 'Escape') { event.preventDefault(); event.stopPropagation(); close(true); } }) as EventListener);\n life.listen(root, 'focusout', (() => { queueMicrotask(() => { if (open && !root.contains(document.activeElement)) close(); }); }) as EventListener);\n const update = (next: Readonly<PopoverState>): void => { state = next; trigger.update(next); panel.setAttribute('aria-label', next.label); if (next.disabled) close(); };\n update(options);\n return { element: root, trigger: trigger.element, panel, update, open: show, close, isOpen: () => open,\n destroy() { close(); life.destroy(); trigger.destroy(); } };\n}\n\nexport interface MenuItem { id: string; label: string; disabled?: boolean; intent?: Intent; checked?: boolean; onAction: UIAction; }\nexport interface MenuState extends PopoverState { items: readonly MenuItem[]; }\nexport function createMenu(options: MenuState): PopoverBlock & UIBlock<MenuState> {\n const content = element('div', 'pui-menu'); content.setAttribute('role', 'menu');\n const blocks = new Map<string, ButtonBlock>(); let items: readonly MenuItem[] = options.items;\n const popover = createPopover({ label: options.label, content, disabled: options.disabled });\n popover.trigger.setAttribute('aria-haspopup', 'menu'); const life = new Lifetime();\n const update = (state: Readonly<MenuState>): void => {\n items = state.items; popover.update(state);\n const keep = new Set(state.items.map(item => item.id));\n for (const [id, block] of blocks) if (!keep.has(id)) { block.destroy(); block.element.remove(); blocks.delete(id); }\n for (const item of state.items) {\n let block = blocks.get(item.id);\n if (!block) {\n block = createButton({ ...item, onAction: async () => {\n const current = items.find(candidate => candidate.id === item.id); if (!current || current.disabled) return;\n const result = await current.onAction(); if (!result || result.ok) popover.close(); return result;\n } });\n blocks.set(item.id, block);\n }\n block.update(item); block.element.setAttribute('role', item.checked == null ? 'menuitem' : 'menuitemcheckbox');\n if (item.checked != null) block.element.setAttribute('aria-checked', String(item.checked)); else block.element.removeAttribute('aria-checked');\n content.append(block.element);\n }\n };\n life.listen(popover.trigger, 'keydown', (event => {\n const key = (event as KeyboardEvent).key;\n if (key === 'ArrowDown' || key === 'ArrowUp') { event.preventDefault(); popover.open(); navigation.focus(key === 'ArrowUp' ? 'last' : 'first'); }\n }) as EventListener);\n const navigation = installMenuNavigation(content, { trigger: popover.trigger, isOpen: popover.isOpen,\n onDismiss(restoreFocus) { popover.close(); if (restoreFocus) popover.trigger.focus(); } });\n update(options);\n return { ...popover, update, destroy() { navigation.destroy(); life.destroy(); popover.destroy(); for (const block of blocks.values()) block.destroy(); } };\n}\n"]}
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"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","sourcesContent":["import { Generation, Lifetime } from './core.js';\nimport type { ActionResult, Density, Intent, UIAction, UIBlock } from './core.js';\nimport { element, iconElement, setText, uniqueId } from './dom.js';\nimport { adoptAction, adoptActionLayout, adoptFeedback, adoptNativeControl, reconcileSelectOptions } from './foundations.js';\nimport { installAnchoredSurface, installDialogLifecycle, installMenuNavigation } from './surface.js';\nimport { reconcileKeyed } from './reconcile.js';\nimport { createOperation } from './operation.js';\n\nexport interface ButtonState {\n label: string;\n intent?: Intent;\n density?: Density;\n disabled?: boolean;\n pending?: boolean;\n icon?: string;\n title?: string;\n /** Secondary product action, including the accepted compact application style. */\n appearance?: 'standard' | 'secondary';\n}\nexport interface ButtonOptions extends ButtonState {\n type?: 'button' | 'submit' | 'reset';\n onAction?: UIAction;\n onError?: (message: string) => void;\n}\nexport interface ButtonBlock extends UIBlock<ButtonState> { readonly element: HTMLButtonElement; }\n\nexport function createButton(options: ButtonOptions): ButtonBlock {\n const node = element('button', 'pui-button');\n node.type = options.type ?? 'button';\n const caption = element('span');\n node.append(caption);\n const action = adoptAction(node, { caption, onAction: options.onAction, onError: options.onError });\n const update = (next: Readonly<ButtonState>): void => {\n action.update({ ...next, intent: next.intent ?? 'neutral', density: next.density ?? 'normal',\n disabled: !!next.disabled, pending: !!next.pending, title: next.title ?? '', icon: next.icon ?? '',\n appearance: next.appearance ?? 'standard' });\n };\n update(options);\n return { element: node, update, destroy() { action.destroy(); } };\n}\n\nexport function createIconButton(options: ButtonOptions & { icon: string }): ButtonBlock {\n const block = createButton(options);\n const update = block.update;\n block.update = state => {\n update(state);\n block.element.classList.add('pui-icon-button');\n block.element.setAttribute('aria-label', state.label);\n block.element.querySelector('span')?.classList.add('pui-sr-only');\n };\n block.update(options);\n return block;\n}\n\nexport function createTextAction(options: ButtonOptions): ButtonBlock {\n const block = createButton(options);\n const update = block.update;\n block.update = state => { update(state); block.element.classList.add('pui-text-action'); };\n block.update(options);\n return block;\n}\n\nexport interface IconState { name: string; label?: string; size?: 'small' | 'normal'; }\nexport function createIcon(state: IconState): UIBlock<IconState> {\n const root = element('span', 'pui-icon-display'); let currentName = '';\n const update = (next: Readonly<IconState>): void => {\n if (next.name !== currentName) { currentName = next.name; root.replaceChildren(iconElement(next.name)); }\n root.classList.toggle('pui-icon-small', next.size === 'small');\n if (next.label) { root.setAttribute('role', 'img'); root.setAttribute('aria-label', next.label); root.removeAttribute('aria-hidden'); }\n else { root.removeAttribute('role'); root.removeAttribute('aria-label'); root.setAttribute('aria-hidden', 'true'); }\n };\n update(state); return { element: root, update, destroy() {} };\n}\n\nexport function createDivider(state: { label?: string } = {}): UIBlock<{ label?: string }> {\n const root = element('div', 'pui-divider'); root.setAttribute('role', 'separator');\n const update = (next: Readonly<{ label?: string }>): void => { setText(root, next.label); if (next.label) root.setAttribute('aria-label', next.label); else root.removeAttribute('aria-label'); };\n update(state); return { element: root, update, destroy() {} };\n}\n\nexport interface KeyValueState { items: readonly { key: string; label: string; value: string }[]; }\nexport function createKeyValue(options: KeyValueState): UIBlock<KeyValueState> {\n const root = element('dl', 'pui-key-value'); const rows = new Map<string, { node: HTMLElement; label: HTMLElement; value: HTMLElement }>();\n const update = (state: Readonly<KeyValueState>): void => {\n reconcileKeyed(root, rows, state.items, { key: item => item.key, element: row => row.node,\n create() { const label = element('dt'), value = element('dd'); return { node: element('div', '', label, value), label, value }; },\n update(row, item) { setText(row.label, item.label); setText(row.value, item.value); }, destroy() {},\n });\n };\n update(options); return { element: root, update, destroy() { rows.clear(); } };\n}\n\nexport interface ToolbarState { label: string; density?: Density; }\nexport function createToolbar(options: ToolbarState & { children?: readonly Node[] }): UIBlock<ToolbarState> {\n const root = element('div', 'pui-toolbar'); root.append(...(options.children ?? []));\n const layout = adoptActionLayout(root, 'toolbar');\n const update = (state: Readonly<ToolbarState>): void => { layout.update({ ...state, density: state.density ?? 'normal' }); };\n update(options); return { element: root, update, destroy() { layout.destroy(); } };\n}\n\nexport interface ScrollAreaState { label: string; size?: 'small' | 'medium' | 'fill'; }\nexport function createScrollArea(options: ScrollAreaState & { content: Node }): UIBlock<ScrollAreaState> {\n const root = element('div', 'pui-scroll-area', options.content); root.tabIndex = 0; root.setAttribute('role', 'region');\n const update = (state: Readonly<ScrollAreaState>): void => { root.setAttribute('aria-label', state.label); root.dataset.size = state.size ?? 'medium'; };\n update(options); return { element: root, update, destroy() {} };\n}\n\nexport interface FieldState {\n label: string;\n description?: string;\n error?: string;\n required?: boolean;\n disabled?: boolean;\n}\nexport interface FieldBlock extends UIBlock<FieldState> {\n readonly control: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n}\n\nexport function createField(options: FieldState & { control: FieldBlock['control'] }): FieldBlock {\n const root = element('div', 'pui-field');\n const label = element('label', 'pui-field-label');\n const description = element('div', 'pui-field-description');\n const error = element('div', 'pui-field-error');\n const control = options.control;\n description.id = uniqueId('pui-description');\n error.id = uniqueId('pui-error');\n control.classList.add('pui-control');\n root.append(label, control, description, error);\n const field = adoptNativeControl(control, { label, description, error });\n const update = (state: Readonly<FieldState>): void => {\n field.update({ ...state, label: `${state.label}${state.required ? ' *' : ''}`,\n description: state.description ?? '', error: state.error ?? '', disabled: !!state.disabled, required: !!state.required });\n label.hidden = !state.label;\n root.classList.toggle('pui-invalid', !!state.error);\n };\n update(options);\n return { element: root, control, update, destroy() { field.destroy(); } };\n}\n\nexport interface InputState extends FieldState {\n placeholder?: string;\n readOnly?: boolean;\n density?: Density;\n}\nexport interface InputOptions extends InputState {\n value?: string;\n onInput?: (value: string, event: Event) => void;\n onChange?: (value: string, event: Event) => void;\n autocomplete?: string;\n min?: number;\n max?: number;\n step?: number | 'any';\n}\nexport interface InputBlock extends UIBlock<InputState> {\n readonly control: HTMLInputElement | HTMLTextAreaElement;\n getValue(): string;\n reset(value: string): void;\n focus(): void;\n}\n\nfunction textControl(options: InputOptions, type: 'text' | 'search' | 'password' | 'number' | 'textarea'): InputBlock {\n const control = type === 'textarea' ? element('textarea') : element('input');\n if (control instanceof HTMLInputElement) {\n control.type = type === 'textarea' ? 'text' : type;\n if (options.min != null) control.min = String(options.min);\n if (options.max != null) control.max = String(options.max);\n if (options.step != null) control.step = String(options.step);\n }\n if (options.autocomplete) control.setAttribute('autocomplete', options.autocomplete);\n control.defaultValue = options.value ?? ''; control.value = options.value ?? '';\n const field = createField({ ...options, control });\n const input = adoptNativeControl(control, { onInput: options.onInput, onChange: options.onChange });\n const update = (state: Readonly<InputState>): void => {\n field.update(state);\n input.update({ placeholder: state.placeholder ?? '', readOnly: !!state.readOnly });\n control.classList.toggle('pui-compact', state.density === 'compact');\n };\n update(options);\n return { element: field.element, control, update, getValue: input.getValue,\n reset: input.reset, focus: input.focus,\n destroy() { input.destroy(); field.destroy(); } };\n}\nexport const createTextInput = (options: InputOptions): InputBlock => textControl(options, 'text');\nexport const createSearchInput = (options: InputOptions): InputBlock => textControl(options, 'search');\nexport const createNumberInput = (options: InputOptions): InputBlock => textControl(options, 'number');\nexport const createTextArea = (options: InputOptions): InputBlock => textControl(options, 'textarea');\n\nexport function createSecretInput(options: InputOptions): InputBlock {\n const block = textControl({ ...options, autocomplete: options.autocomplete ?? 'off' }, 'password');\n const control = block.control as HTMLInputElement;\n const toggle = createTextAction({ label: 'Show', onAction() {\n const show = control.type === 'password';\n control.type = show ? 'text' : 'password';\n toggle.update({ label: show ? 'Hide' : 'Show', disabled: control.disabled });\n toggle.element.setAttribute('aria-pressed', String(show));\n } });\n toggle.element.setAttribute('aria-controls', control.id);\n toggle.element.setAttribute('aria-pressed', 'false');\n block.element.append(toggle.element);\n const update = block.update;\n block.update = state => { update(state); toggle.update({ label: control.type === 'password' ? 'Show' : 'Hide', disabled: state.disabled }); };\n const destroy = block.destroy;\n block.destroy = () => { destroy(); toggle.destroy(); };\n block.update(options);\n return block;\n}\n\nexport interface SelectOption { value: string; label: string; disabled?: boolean; }\nexport interface SelectState extends FieldState { options: readonly SelectOption[]; density?: Density; }\nexport interface SelectOptions extends SelectState {\n value?: string;\n values?: readonly string[];\n onChange?: (value: string) => void;\n onValuesChange?: (values: readonly string[]) => void;\n multiple?: boolean;\n size?: number;\n}\nexport interface SelectBlock extends UIBlock<SelectState> {\n readonly control: HTMLSelectElement;\n getValue(): string;\n getValues(): string[];\n reset(value: string): void;\n resetValues(values: readonly string[]): void;\n focus(): void;\n}\nexport function createSelect(options: SelectOptions): SelectBlock {\n const control = element('select');\n control.multiple = !!options.multiple;\n if (options.size) control.size = options.size;\n const field = createField({ ...options, control });\n let disposed = false;\n const getValues = (): string[] => [...control.selectedOptions].map(option => option.value);\n const input = adoptNativeControl(control, { onChange: () => { options.onChange?.(control.value); options.onValuesChange?.(getValues()); } });\n const resetValues = (values: readonly string[]): void => {\n if (disposed) return;\n if (!control.multiple) { input.reset(values[0] ?? ''); return; }\n const selected = new Set(values);\n for (const option of control.options) option.selected = selected.has(option.value);\n input.update({});\n };\n let signature = '';\n const update = (state: Readonly<SelectState>): void => {\n if (disposed) return;\n field.update(state);\n control.classList.toggle('pui-compact', state.density === 'compact');\n const next = JSON.stringify(state.options);\n if (next !== signature) {\n signature = next;\n reconcileSelectOptions(control, state.options);\n if (!control.multiple && control.selectedIndex < 0) control.selectedIndex = [...control.options].findIndex(option => !option.disabled);\n }\n input.update({});\n };\n update(options);\n const initial = options.values ?? (options.value == null ? undefined : [options.value]);\n if (initial) {\n const selected = new Set(control.multiple ? initial : initial.slice(0, 1));\n for (const option of control.options) option.defaultSelected = selected.has(option.value);\n resetValues(initial);\n }\n return { element: field.element, control, update, getValue: input.getValue, getValues,\n reset: input.reset, resetValues, focus: input.focus, destroy() { if (disposed) return; disposed = true; input.destroy(); field.destroy(); } };\n}\n\nexport interface CheckboxState { label: string; description?: string; disabled?: boolean; }\nexport interface CheckboxBlock extends UIBlock<CheckboxState> {\n readonly control: HTMLInputElement;\n getValue(): boolean;\n reset(value: boolean): void;\n focus(): void;\n}\nexport function createCheckbox(options: CheckboxState & { checked?: boolean; onChange?: (value: boolean) => void }): CheckboxBlock {\n const control = element('input'); control.type = 'checkbox'; control.defaultChecked = !!options.checked; control.checked = !!options.checked;\n const caption = element('span'); const description = element('small');\n const root = element('label', 'pui-checkbox', control, element('span', '', caption, description));\n const input = adoptNativeControl(control, { onChange: () => options.onChange?.(control.checked) });\n const update = (state: Readonly<CheckboxState>): void => {\n setText(caption, state.label); setText(description, state.description); description.hidden = !state.description;\n input.update({ disabled: !!state.disabled });\n };\n update(options);\n return { element: root, control, update, getValue: input.getChecked,\n reset: input.reset, focus: input.focus, destroy() { input.destroy(); } };\n}\n\nexport interface NoticeState { message: string; tone?: 'info' | 'success' | 'warning' | 'error'; }\nexport function createNotice(state: NoticeState): UIBlock<NoticeState> {\n const root = element('div', 'pui-notice');\n const notice = adoptFeedback(root, { presentation: 'notice' });\n notice.update(state); return notice;\n}\nexport interface StatusState { label: string; tone?: 'neutral' | 'success' | 'warning' | 'error'; }\nexport function createStatus(state: StatusState): UIBlock<StatusState> {\n const root = element('span', 'pui-status');\n const status = adoptFeedback(root, { presentation: 'status', autoHide: false });\n const update = (next: Readonly<StatusState>): void => { status.update({ message: next.label, tone: next.tone }); };\n update(state); return { element: root, update, destroy() { status.destroy(); } };\n}\nexport interface ProgressState { label: string; value?: number; max?: number; }\nexport function createProgress(state: ProgressState): UIBlock<ProgressState> {\n const control = element('progress'); const label = element('span');\n const root = element('label', 'pui-progress', label, control);\n const update = (next: Readonly<ProgressState>): void => {\n setText(label, next.label); control.max = next.max && next.max > 0 ? next.max : 100;\n if (next.value == null) control.removeAttribute('value'); else control.value = Math.max(0, Math.min(next.value, control.max));\n };\n update(state); return { element: root, update, destroy() {} };\n}\n\nexport interface FormSectionState { title: string; description?: string; }\nexport function createFormSection(options: FormSectionState & { content?: Node }): UIBlock<FormSectionState> {\n const title = element('h3'); const description = element('p', 'pui-muted');\n const root = element('section', 'pui-form-section', title, description);\n if (options.content) root.append(options.content);\n const update = (state: Readonly<FormSectionState>): void => { setText(title, state.title); setText(description, state.description); description.hidden = !state.description; };\n update(options); return { element: root, update, destroy() {} };\n}\nexport interface ActionsState { align?: 'start' | 'end' | 'between'; }\nexport function createActions(options: ActionsState & { children?: readonly Node[] } = {}): UIBlock<ActionsState> {\n const root = element('div', 'pui-actions'); root.append(...(options.children ?? []));\n const layout = adoptActionLayout(root, 'actions');\n const update = (state: Readonly<ActionsState>): void => { layout.update({ align: state.align ?? 'end' }); };\n update(options); return { element: root, update, destroy() { layout.destroy(); } };\n}\nexport interface DisclosureState { title: string; description?: string; disabled?: boolean; }\nexport interface DisclosureBlock extends UIBlock<DisclosureState> { setOpen(open: boolean): void; isOpen(): boolean; }\nexport function createDisclosure(options: DisclosureState & { content: Node; open?: boolean; onToggle?: (open: boolean) => void }): DisclosureBlock {\n const root = element('details', 'pui-disclosure'); const summary = element('summary'); const title = element('span');\n const description = element('small', 'pui-muted'); summary.append(title, description); root.append(summary, element('div', 'pui-disclosure-content', options.content));\n root.open = !!options.open; let disabled = !!options.disabled; const life = new Lifetime();\n life.listen(root, 'toggle', (() => options.onToggle?.(root.open)) as EventListener);\n life.listen(summary, 'click', (event => { if (disabled) event.preventDefault(); }) as EventListener);\n const update = (state: Readonly<DisclosureState>): void => {\n setText(title, state.title); setText(description, state.description); description.hidden = !state.description;\n disabled = !!state.disabled; summary.setAttribute('aria-disabled', String(disabled));\n };\n update(options);\n return { element: root, update, setOpen(open) { root.open = open; }, isOpen: () => root.open, destroy() { life.destroy(); } };\n}\nexport interface ListRowState { title: string; description?: string; meta?: string; selected?: boolean; icon?: string; }\nexport function createListRow(options: ListRowState & { actions?: Node }): UIBlock<ListRowState> {\n const title = element('div', 'pui-list-row-title'); const description = element('div', 'pui-muted'); const meta = element('small', 'pui-muted');\n const glyph = element('span', 'pui-list-row-icon');\n const root = element('div', 'pui-list-row', glyph, element('div', 'pui-list-row-body', title, description), meta);\n if (options.actions) root.append(options.actions);\n let iconName = '';\n const update = (state: Readonly<ListRowState>): void => {\n setText(title, state.title); setText(description, state.description); description.hidden = !state.description;\n setText(meta, state.meta); meta.hidden = !state.meta; root.classList.toggle('pui-selected', !!state.selected);\n if (iconName !== (state.icon ?? '')) { iconName = state.icon ?? ''; glyph.replaceChildren(...(state.icon ? [iconElement(state.icon)] : [])); }\n glyph.hidden = !state.icon;\n };\n update(options); return { element: root, update, destroy() {} };\n}\nexport interface CollectionState { status: 'ready' | 'loading' | 'empty' | 'error'; message?: string; retryLabel?: string; }\nexport function createCollectionState(options: CollectionState & { content?: Node; onRetry?: UIAction }): UIBlock<CollectionState> {\n const message = createNotice({ message: '' }); const content = element('div', 'pui-collection-content');\n if (options.content) content.append(options.content);\n const retry = createButton({ label: options.retryLabel ?? 'Retry', onAction: options.onRetry });\n const root = element('section', 'pui-collection', message.element, retry.element, content);\n const update = (state: Readonly<CollectionState>): void => {\n root.dataset.state = state.status; root.setAttribute('aria-busy', String(state.status === 'loading'));\n message.update({ message: state.message ?? ({ ready: '', loading: 'Loading…', empty: 'Nothing here yet.', error: 'Could not load this content.' }[state.status]), tone: state.status === 'error' ? 'error' : 'info' });\n content.hidden = state.status !== 'ready'; retry.element.hidden = state.status !== 'error' || !options.onRetry;\n retry.update({ label: state.retryLabel ?? 'Retry' });\n };\n update(options); return { element: root, update, destroy() { retry.destroy(); message.destroy(); } };\n}\n\nexport interface DialogState { title: string; description?: string; eyebrow?: string; closeDisabled?: boolean; }\nexport interface DialogOptions extends DialogState { dialog?: HTMLDialogElement; content?: Node; actions?: Node; closeOnBackdrop?: boolean; onClose?: () => void; }\nexport interface DialogBlock extends UIBlock<DialogState> {\n readonly element: HTMLDialogElement;\n readonly body: HTMLElement;\n open(): void;\n close(): void;\n}\nexport function createDialog(options: DialogOptions): DialogBlock {\n const root = options.dialog ?? element('dialog'); root.classList.add('pui-dialog');\n const title = element('h2'); title.id = uniqueId('pui-dialog-title'); root.setAttribute('aria-labelledby', title.id);\n const description = element('p', 'pui-muted'); description.id = uniqueId('pui-dialog-description');\n const eyebrow = element('span', 'pui-eyebrow');\n const close = createIconButton({ label: `Close ${options.title}`, icon: 'close', onAction() { if (!state.closeDisabled) root.close(); } });\n const heading = element('header', 'pui-dialog-heading', element('div', '', eyebrow, title, description), close.element);\n const body = element('div', 'pui-dialog-body'); if (options.content) body.append(options.content);\n root.replaceChildren(heading, body); if (options.actions) root.append(options.actions);\n let state: DialogState = options; let disposed = false;\n const update = (next: Readonly<DialogState>): void => {\n state = next; setText(title, next.title); setText(description, next.description); description.hidden = !next.description; setText(eyebrow, next.eyebrow); eyebrow.hidden = !next.eyebrow;\n if (next.description) root.setAttribute('aria-describedby', description.id); else root.removeAttribute('aria-describedby');\n close.update({ label: `Close ${next.title}`, icon: 'close', disabled: next.closeDisabled });\n };\n const surface = installDialogLifecycle(root, { closeOnBackdrop: options.closeOnBackdrop ?? !!options.dialog,\n canClose: () => !state.closeDisabled, onClose: options.onClose });\n update(options);\n return { element: root, body, update,\n open() { if (!disposed) surface.open(); }, close() { surface.close(); },\n destroy() { if (disposed) return; disposed = true; surface.close(); surface.destroy(); close.destroy(); root.remove(); } };\n}\n\nexport interface TextEditState extends DialogState { error?: string; disabled?: boolean; pending?: boolean; inputDisabled?: boolean; note?: string; submitLabel?: string; }\nexport interface TextEditInput { value: string; title?: string; description?: string; note?: string; }\nexport interface TextEditOptions extends Partial<TextEditState> {\n dialog?: HTMLDialogElement;\n ids?: { form?: string; control?: string; submit?: string; error?: string; title?: string; cancel?: string };\n label?: string;\n onInput?: (value: string) => void;\n onSubmit?: (text: string) => Promise<ActionResult> | ActionResult;\n onClose?: () => void;\n}\nexport interface TextEditBlock extends Omit<UIBlock<TextEditState>, 'element'> {\n readonly element: HTMLDialogElement;\n readonly control: HTMLTextAreaElement;\n readonly submitButton: HTMLButtonElement;\n open(input: TextEditInput): void;\n close(): void;\n getValue(): string;\n focus(): void;\n}\nexport function createTextEditDialog(options: TextEditOptions = {}): TextEditBlock {\n // The editor has one form-level error, so it does not need the general field's\n // description/error/number/secret machinery. Both paths use the same control CSS.\n const control = element('textarea', 'pui-control'); control.rows = 8;\n control.id = options.ids?.control ?? uniqueId('pui-input');\n const label = element('label', 'pui-field-label', options.label ?? 'Message'); label.htmlFor = control.id;\n const input = adoptNativeControl(control, { label, onInput: value => options.onInput?.(value) });\n const field = element('div', 'pui-field', label, control);\n const note = element('p', 'pui-muted'); const error = createNotice({ message: '', tone: 'error' });\n const cancel = createButton({ label: 'Cancel', onAction() { if (!state.closeDisabled) dialog.close(); } });\n const submit = createButton({ label: options.submitLabel ?? 'Save', intent: 'primary', type: 'submit' });\n const actions = createActions({ children: [cancel.element, submit.element] });\n const form = element('form', 'pui-text-edit', field, note, error.element, actions.element);\n const ids = options.ids;\n if (ids?.form) form.id = ids.form;\n if (ids?.submit) submit.element.id = ids.submit;\n if (ids?.error) error.element.id = ids.error;\n if (ids?.cancel) cancel.element.id = ids.cancel;\n const life = new Lifetime(); let pending = false;\n let state: TextEditState = { title: options.title ?? 'Edit message', ...options };\n const dialog = createDialog({ ...state, dialog: options.dialog, content: form, onClose() { operation.invalidate(); options.onClose?.(); } });\n if (ids?.title) { dialog.element.querySelector('h2')!.id = ids.title; dialog.element.setAttribute('aria-labelledby', ids.title); }\n const update = (next: Readonly<TextEditState>): void => {\n state = next; dialog.update(next); setText(note, next.note); note.hidden = !next.note;\n cancel.update({ label: 'Cancel', disabled: !!next.closeDisabled });\n error.update({ message: next.error ?? '', tone: 'error' });\n submit.update({ label: next.submitLabel ?? options.submitLabel ?? 'Save', intent: 'primary', disabled: next.disabled, pending: !!(next.pending || pending) });\n input.update({ disabled: !!next.inputDisabled });\n };\n const operation = createOperation({\n unavailable: () => !!(state.pending || state.disabled || submit.element.disabled || !dialog.element.open),\n onPending(value) { pending = value; update(state); },\n onError(error) { if (dialog.element.open) update({ ...state, error }); },\n });\n life.listen(form, 'submit', (event => {\n event.preventDefault();\n if (!options.onSubmit) return;\n const value = control.value;\n operation.run(() => options.onSubmit!(value), result => { if (dialog.element.open) { if (result.ok) dialog.close(); else update({ ...state, error: result.error }); } });\n }) as EventListener);\n update(state);\n return { element: dialog.element, control, submitButton: submit.element, update,\n open(target) {\n operation.invalidate();\n update({ ...state, error: '', title: target.title ?? options.title ?? 'Edit message', description: target.description ?? options.description, note: target.note ?? options.note });\n input.reset(target.value); dialog.open(); input.focus();\n }, close() { operation.invalidate(); dialog.close(); }, getValue: input.getValue, focus: input.focus,\n destroy() { operation.destroy(); life.destroy(); input.destroy(); dialog.destroy(); cancel.destroy(); submit.destroy(); } };\n}\n\nexport interface ConfirmState extends DialogState { message?: string | Node; hint?: string; error?: string; disabled?: boolean; pending?: boolean; confirmLabel?: string; }\nexport interface ConfirmBlock extends UIBlock<ConfirmState> { readonly element: HTMLDialogElement; readonly confirmButton: HTMLButtonElement; readonly cancelButton: HTMLButtonElement; open(state?: ConfirmState): void; close(): void; refreshAvailability(): void; }\nexport function createConfirmDialog(options: ConfirmState & { dialog?: HTMLDialogElement; ids?: { form?: string; error?: string; title?: string; cancel?: string }; unavailable?: () => boolean; onConfirm: () => Promise<ActionResult> | ActionResult; onClose?: () => void }): ConfirmBlock {\n const message = element('p', 'pui-modal-description'); const hint = element('p', 'pui-field-hint'); const error = createNotice({ message: '', tone: 'error' });\n let state: ConfirmState = options; let pending = false;\n const cancel = createButton({ label: 'Cancel', onAction() { if (!state.closeDisabled) dialog.close(); } });\n const confirm = createButton({ label: options.confirmLabel ?? 'Remove', intent: 'danger', type: 'submit' });\n const life = new Lifetime();\n const actions = createActions({ children: [cancel.element, confirm.element] });\n const form = element('form', 'pui-confirm', message, hint, error.element, actions.element);\n if (options.ids?.form) form.id = options.ids.form;\n if (options.ids?.error) error.element.id = options.ids.error;\n if (options.ids?.cancel) cancel.element.id = options.ids.cancel;\n const dialog = createDialog({ ...options, content: form,\n onClose() { operation.invalidate(); options.onClose?.(); } });\n if (options.ids?.title) { dialog.element.querySelector('h2')!.id = options.ids.title; dialog.element.setAttribute('aria-labelledby', options.ids.title); }\n let currentMessage: string | Node | undefined;\n const update = (next: Readonly<ConfirmState>): void => {\n state = next; dialog.update(next);\n cancel.update({ label: 'Cancel', disabled: !!next.closeDisabled });\n if (next.message !== currentMessage) { currentMessage = next.message; if (next.message instanceof Node) message.replaceChildren(next.message); else setText(message, next.message); }\n setText(hint, next.hint); hint.hidden = !next.hint;\n error.update({ message: next.error ?? '', tone: 'error' });\n confirm.update({ label: next.confirmLabel ?? 'Remove', intent: 'danger', disabled: !!(next.disabled || options.unavailable?.()), pending: !!(next.pending || pending) });\n };\n const operation = createOperation({\n unavailable: () => !!(state.disabled || state.pending || confirm.element.disabled || options.unavailable?.() || !dialog.element.open),\n onPending(value) { pending = value; update(state); },\n onError(error) { if (dialog.element.open) update({ ...state, error }); },\n });\n life.listen(form, 'submit', (event => { event.preventDefault(); operation.run(options.onConfirm, result => { if (dialog.element.open) { if (result.ok) dialog.close(); else update({ ...state, error: result.error }); } }); }) as EventListener);\n update(options);\n return { element: dialog.element, confirmButton: confirm.element, cancelButton: cancel.element, update, open(next) { operation.invalidate(); update({ ...(next ?? state), error: '' }); dialog.open(); cancel.element.focus(); },\n close() { operation.invalidate(); dialog.close(); }, refreshAvailability() { update(state); }, destroy() { operation.destroy(); life.destroy(); dialog.destroy(); confirm.destroy(); cancel.destroy(); } };\n}\n\nexport interface PopoverState { label: string; disabled?: boolean; }\nexport interface PopoverBlock extends UIBlock<PopoverState> {\n readonly trigger: HTMLButtonElement;\n readonly panel: HTMLElement;\n open(): void;\n close(): void;\n isOpen(): boolean;\n}\nexport function createPopover(options: PopoverState & { content: Node; onToggle?: (open: boolean) => void }): PopoverBlock {\n let state: PopoverState = options;\n const trigger = createButton({ label: options.label, onAction() { if (surface.isOpen()) surface.close(); else surface.open(); } });\n const panel = element('div', 'pui-popover-panel', options.content); panel.hidden = true; panel.id = uniqueId('pui-popover');\n panel.setAttribute('role', 'region'); panel.setAttribute('aria-label', options.label);\n trigger.element.setAttribute('aria-controls', panel.id); trigger.element.setAttribute('aria-expanded', 'false');\n const root = element('div', 'pui-popover', trigger.element, panel);\n const surface = installAnchoredSurface({ trigger: trigger.element, panel, canOpen: () => !state.disabled, onToggle: options.onToggle });\n const update = (next: Readonly<PopoverState>): void => { state = next; trigger.update(next); panel.setAttribute('aria-label', next.label); if (next.disabled) surface.close(); };\n update(options);\n return { element: root, trigger: trigger.element, panel, update, open: surface.open, close: surface.close, isOpen: surface.isOpen,\n destroy() { surface.destroy(); trigger.destroy(); } };\n}\n\nexport interface MenuItem { id: string; label: string; disabled?: boolean; intent?: Intent; checked?: boolean; onAction: UIAction; }\nexport interface MenuState extends PopoverState { items: readonly MenuItem[]; }\nexport interface MenuOptions extends MenuState { onError?: (message: string) => void; }\nexport function createMenu(options: MenuOptions): PopoverBlock & UIBlock<MenuState> {\n const content = element('div', 'pui-menu'); content.setAttribute('role', 'menu'); content.tabIndex = -1;\n const blocks = new Map<string, ButtonBlock>(); let items: readonly MenuItem[] = options.items;\n const session = new Generation();\n const feedback = createNotice({ message: '', tone: 'error' });\n const menuBody = element('div', '', content, feedback.element);\n const popover = createPopover({ label: options.label, content: menuBody, disabled: options.disabled, onToggle() { session.invalidate(); feedback.update({ message: '', tone: 'error' }); } });\n popover.trigger.setAttribute('aria-haspopup', 'menu'); const life = new Lifetime();\n const update = (state: Readonly<MenuState>): void => {\n items = state.items; popover.update(state);\n reconcileKeyed(content, blocks, state.items, { key: item => item.id, element: block => block.element,\n create(item) {\n let sequence = 0;\n return createButton({ ...item, onAction: async () => {\n const current = items.find(candidate => candidate.id === item.id); if (!current || current.disabled || !popover.isOpen()) return;\n // Pending disables the action button. Keep focus inside its menu so\n // focus-out dismissal cannot discard the eventual result feedback.\n content.focus({ preventScroll: true });\n sequence = session.next(); feedback.update({ message: '', tone: 'error' });\n const result = await current.onAction();\n if (session.current(sequence) && blocks.has(item.id) && popover.isOpen() && (!result || result.ok)) popover.close();\n return result;\n }, onError(message) { if (session.current(sequence) && popover.isOpen()) { feedback.update({ message, tone: 'error' }); options.onError?.(message); } } });\n },\n update(block, item) { block.update(item); block.element.setAttribute('role', item.checked == null ? 'menuitem' : 'menuitemcheckbox');\n if (item.checked != null) block.element.setAttribute('aria-checked', String(item.checked)); else block.element.removeAttribute('aria-checked');\n }, destroy: block => block.destroy(),\n });\n };\n life.listen(popover.trigger, 'keydown', (event => {\n const key = (event as KeyboardEvent).key;\n if (key === 'ArrowDown' || key === 'ArrowUp') { event.preventDefault(); popover.open(); navigation.focus(key === 'ArrowUp' ? 'last' : 'first'); }\n }) as EventListener);\n const navigation = installMenuNavigation(content, { trigger: popover.trigger, isOpen: popover.isOpen,\n onDismiss(restoreFocus) { popover.close(); if (restoreFocus) popover.trigger.focus(); } });\n update(options);\n return { ...popover, update, destroy() { session.destroy(); navigation.destroy(); life.destroy(); popover.destroy(); feedback.destroy(); for (const block of blocks.values()) block.destroy(); blocks.clear(); } };\n}\n"]}
@@ -0,0 +1,11 @@
1
+ /** Reconcile owned keyed rows without moving unchanged nodes. Row rendering and
2
+ * child ownership stay with the block; this helper owns ordering and focus only.
3
+ */
4
+ export declare function reconcileKeyed<Value, Key, Row>(parent: HTMLElement, rows: Map<Key, Row>, values: readonly Value[], options: {
5
+ key(value: Value): Key;
6
+ element(row: Row): HTMLElement;
7
+ create(value: Value): Row;
8
+ update(row: Row, value: Value): void;
9
+ destroy(row: Row): void;
10
+ }): void;
11
+ //# sourceMappingURL=reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../src/reconcile.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,EAAE,OAAO,EAAE;IAC3H,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC;IACvB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACrC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;CACzB,GAAG,IAAI,CAoBP"}
@@ -0,0 +1,36 @@
1
+ /** Reconcile owned keyed rows without moving unchanged nodes. Row rendering and
2
+ * child ownership stay with the block; this helper owns ordering and focus only.
3
+ */
4
+ export function reconcileKeyed(parent, rows, values, options) {
5
+ const active = parent.ownerDocument.activeElement;
6
+ const focused = active instanceof HTMLElement && parent.contains(active) ? active : null;
7
+ const keep = new Set(values.map(options.key));
8
+ for (const [key, row] of rows)
9
+ if (!keep.has(key)) {
10
+ options.destroy(row);
11
+ options.element(row).remove();
12
+ rows.delete(key);
13
+ }
14
+ let cursor = parent.firstElementChild;
15
+ for (const value of values) {
16
+ const key = options.key(value);
17
+ let row = rows.get(key);
18
+ if (!row) {
19
+ row = options.create(value);
20
+ rows.set(key, row);
21
+ }
22
+ const previousNode = options.element(row), nextSibling = previousNode.nextElementSibling;
23
+ options.update(row, value);
24
+ const node = options.element(row);
25
+ // A view may change its semantic root (for example article to paragraph).
26
+ // The insertion cursor must follow that replacement, not a detached node.
27
+ if (cursor === previousNode && node !== previousNode)
28
+ cursor = node.parentElement === parent ? node : nextSibling;
29
+ if (node !== cursor)
30
+ parent.insertBefore(node, cursor);
31
+ cursor = node.nextElementSibling;
32
+ }
33
+ if (focused?.isConnected && parent.contains(focused) && parent.ownerDocument.activeElement !== focused)
34
+ focused.focus({ preventScroll: true });
35
+ }
36
+ //# sourceMappingURL=reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../src/reconcile.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,cAAc,CAAkB,MAAmB,EAAE,IAAmB,EAAE,MAAwB,EAAE,OAMnH;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,YAAY,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACzF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IAC7H,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,EAAE,CAAC;YAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC,kBAAkB,CAAC;QACzF,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,0EAA0E;QAC1E,0EAA0E;QAC1E,IAAI,MAAM,KAAK,YAAY,IAAI,IAAI,KAAK,YAAY;YAAE,MAAM,GAAG,IAAI,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;QAClH,IAAI,IAAI,KAAK,MAAM;YAAE,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,EAAE,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,aAAa,KAAK,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AACjJ,CAAC","sourcesContent":["/** Reconcile owned keyed rows without moving unchanged nodes. Row rendering and\n * child ownership stay with the block; this helper owns ordering and focus only.\n */\nexport function reconcileKeyed<Value, Key, Row>(parent: HTMLElement, rows: Map<Key, Row>, values: readonly Value[], options: {\n key(value: Value): Key;\n element(row: Row): HTMLElement;\n create(value: Value): Row;\n update(row: Row, value: Value): void;\n destroy(row: Row): void;\n}): void {\n const active = parent.ownerDocument.activeElement;\n const focused = active instanceof HTMLElement && parent.contains(active) ? active : null;\n const keep = new Set(values.map(options.key));\n for (const [key, row] of rows) if (!keep.has(key)) { options.destroy(row); options.element(row).remove(); rows.delete(key); }\n let cursor = parent.firstElementChild;\n for (const value of values) {\n const key = options.key(value);\n let row = rows.get(key);\n if (!row) { row = options.create(value); rows.set(key, row); }\n const previousNode = options.element(row), nextSibling = previousNode.nextElementSibling;\n options.update(row, value);\n const node = options.element(row);\n // A view may change its semantic root (for example article to paragraph).\n // The insertion cursor must follow that replacement, not a detached node.\n if (cursor === previousNode && node !== previousNode) cursor = node.parentElement === parent ? node : nextSibling;\n if (node !== cursor) parent.insertBefore(node, cursor);\n cursor = node.nextElementSibling;\n }\n if (focused?.isConnected && parent.contains(focused) && parent.ownerDocument.activeElement !== focused) focused.focus({ preventScroll: true });\n}\n"]}
@@ -0,0 +1,14 @@
1
+ interface SelectController {
2
+ readonly trigger: HTMLButtonElement;
3
+ refresh(): void;
4
+ focus(): void;
5
+ destroy(): void;
6
+ }
7
+ /** A native select remains the form/value contract. Only its single-choice
8
+ * presentation is enhanced; multiple and multi-row lists retain native behavior.
9
+ */
10
+ export declare function adoptSelect(control: HTMLSelectElement): SelectController | undefined;
11
+ /** Used after an explicit option reconciliation, without a second controller. */
12
+ export declare function refreshSelect(control: HTMLSelectElement): void;
13
+ export {};
14
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACxB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,OAAO,IAAI,IAAI,CAAC;IAChB,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;CACjB;AAID;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,SAAS,CAWpF;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAgD"}