@agimon-ai/po-web-components 0.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (737) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +165 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  4. package/dist/_virtual/_rolldown/runtime.mjs +1 -0
  5. package/dist/index.cjs +1 -0
  6. package/dist/index.d.mts +69 -0
  7. package/dist/index.mjs +1 -0
  8. package/dist/mcpWidget.cjs +1 -0
  9. package/dist/mcpWidget.d.mts +3 -0
  10. package/dist/mcpWidget.mjs +1 -0
  11. package/dist/nativeTheme.cjs +1 -0
  12. package/dist/nativeTheme.d.mts +3 -0
  13. package/dist/nativeTheme.mjs +1 -0
  14. package/dist/node_modules/.pnpm/@modelcontextprotocol_server@2.2.0/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CfX6zgs1.d.mts +27 -0
  15. package/dist/node_modules/.pnpm/@modelcontextprotocol_server@2.2.0/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CfX6zgs1.d.mts.map +1 -0
  16. package/dist/node_modules/.pnpm/@modelcontextprotocol_server@2.2.0/node_modules/@modelcontextprotocol/server/dist/index.d.mts +2 -0
  17. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/coerce.d.mts +20 -0
  18. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/coerce.d.mts.map +1 -0
  19. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/compat.d.mts +50 -0
  20. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/compat.d.mts.map +1 -0
  21. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/deep-partial.d.mts +10 -0
  22. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/deep-partial.d.mts.map +1 -0
  23. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/errors.d.mts +33 -0
  24. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/errors.d.mts.map +1 -0
  25. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/external.d.mts +28 -0
  26. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/external.d.mts.map +1 -0
  27. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/from-json-schema.d.mts +14 -0
  28. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/from-json-schema.d.mts.map +1 -0
  29. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/in-out.d.mts +13 -0
  30. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/in-out.d.mts.map +1 -0
  31. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/iso.d.mts +13 -0
  32. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/iso.d.mts.map +1 -0
  33. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/parse.d.mts +54 -0
  34. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/parse.d.mts.map +1 -0
  35. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/schemas.d.mts +775 -0
  36. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/schemas.d.mts.map +1 -0
  37. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/api.d.mts +331 -0
  38. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/api.d.mts.map +1 -0
  39. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/checks.d.mts +296 -0
  40. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/checks.d.mts.map +1 -0
  41. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/compile.d.mts +67 -0
  42. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/compile.d.mts.map +1 -0
  43. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/core.d.mts +85 -0
  44. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/core.d.mts.map +1 -0
  45. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/doc.d.mts +18 -0
  46. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/doc.d.mts.map +1 -0
  47. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/errors.d.mts +219 -0
  48. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/errors.d.mts.map +1 -0
  49. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/index.d.mts +24 -0
  50. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/index.d.mts.map +1 -0
  51. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/json-schema-generator.d.mts +67 -0
  52. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/json-schema-generator.d.mts.map +1 -0
  53. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/json-schema-processors.d.mts +12 -0
  54. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/json-schema-processors.d.mts.map +1 -0
  55. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/json-schema.d.mts +95 -0
  56. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/json-schema.d.mts.map +1 -0
  57. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/memoizer.d.mts +18 -0
  58. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/memoizer.d.mts.map +1 -0
  59. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/parse.d.mts +54 -0
  60. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/parse.d.mts.map +1 -0
  61. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/regexes.d.mts +94 -0
  62. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/regexes.d.mts.map +1 -0
  63. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/registries.d.mts +35 -0
  64. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/registries.d.mts.map +1 -0
  65. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/schemas.d.mts +1201 -0
  66. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/schemas.d.mts.map +1 -0
  67. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/standard-schema.d.mts +120 -0
  68. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/standard-schema.d.mts.map +1 -0
  69. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/to-json-schema.d.mts +157 -0
  70. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/to-json-schema.d.mts.map +1 -0
  71. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/util.d.mts +237 -0
  72. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/util.d.mts.map +1 -0
  73. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/versions.d.mts +8 -0
  74. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/versions.d.mts.map +1 -0
  75. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/index.d.mts +29 -0
  76. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/index.d.mts.map +1 -0
  77. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ar.d.mts +8 -0
  78. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ar.d.mts.map +1 -0
  79. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/az.d.mts +8 -0
  80. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/az.d.mts.map +1 -0
  81. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/be.d.mts +8 -0
  82. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/be.d.mts.map +1 -0
  83. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/bg.d.mts +8 -0
  84. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/bg.d.mts.map +1 -0
  85. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/bn.d.mts +8 -0
  86. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/bn.d.mts.map +1 -0
  87. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ca.d.mts +8 -0
  88. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ca.d.mts.map +1 -0
  89. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ckb.d.mts +8 -0
  90. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ckb.d.mts.map +1 -0
  91. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/cs.d.mts +8 -0
  92. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/cs.d.mts.map +1 -0
  93. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/da.d.mts +8 -0
  94. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/da.d.mts.map +1 -0
  95. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/de.d.mts +8 -0
  96. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/de.d.mts.map +1 -0
  97. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/el.d.mts +8 -0
  98. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/el.d.mts.map +1 -0
  99. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/en.d.mts +8 -0
  100. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/en.d.mts.map +1 -0
  101. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/eo.d.mts +8 -0
  102. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/eo.d.mts.map +1 -0
  103. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/es.d.mts +8 -0
  104. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/es.d.mts.map +1 -0
  105. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fa.d.mts +8 -0
  106. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fa.d.mts.map +1 -0
  107. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fi.d.mts +8 -0
  108. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fi.d.mts.map +1 -0
  109. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fr-CA.d.mts +8 -0
  110. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fr-CA.d.mts.map +1 -0
  111. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fr.d.mts +8 -0
  112. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fr.d.mts.map +1 -0
  113. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/gu.d.mts +8 -0
  114. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/gu.d.mts.map +1 -0
  115. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/he.d.mts +8 -0
  116. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/he.d.mts.map +1 -0
  117. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hi.d.mts +8 -0
  118. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hi.d.mts.map +1 -0
  119. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hr.d.mts +8 -0
  120. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hr.d.mts.map +1 -0
  121. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hu.d.mts +8 -0
  122. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hu.d.mts.map +1 -0
  123. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hy.d.mts +8 -0
  124. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hy.d.mts.map +1 -0
  125. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/id.d.mts +8 -0
  126. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/id.d.mts.map +1 -0
  127. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/index.d.mts +69 -0
  128. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/index.d.mts.map +1 -0
  129. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/is.d.mts +8 -0
  130. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/is.d.mts.map +1 -0
  131. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/it.d.mts +8 -0
  132. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/it.d.mts.map +1 -0
  133. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ja.d.mts +8 -0
  134. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ja.d.mts.map +1 -0
  135. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ka.d.mts +8 -0
  136. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ka.d.mts.map +1 -0
  137. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/kh.d.mts +8 -0
  138. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/kh.d.mts.map +1 -0
  139. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/km.d.mts +8 -0
  140. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/km.d.mts.map +1 -0
  141. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/kn.d.mts +8 -0
  142. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/kn.d.mts.map +1 -0
  143. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ko.d.mts +8 -0
  144. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ko.d.mts.map +1 -0
  145. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/lt.d.mts +8 -0
  146. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/lt.d.mts.map +1 -0
  147. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/mk.d.mts +8 -0
  148. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/mk.d.mts.map +1 -0
  149. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ms.d.mts +8 -0
  150. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ms.d.mts.map +1 -0
  151. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ne.d.mts +8 -0
  152. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ne.d.mts.map +1 -0
  153. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/nl.d.mts +8 -0
  154. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/nl.d.mts.map +1 -0
  155. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/nn.d.mts +8 -0
  156. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/nn.d.mts.map +1 -0
  157. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/no.d.mts +8 -0
  158. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/no.d.mts.map +1 -0
  159. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ota.d.mts +8 -0
  160. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ota.d.mts.map +1 -0
  161. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/pl.d.mts +8 -0
  162. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/pl.d.mts.map +1 -0
  163. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ps.d.mts +8 -0
  164. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ps.d.mts.map +1 -0
  165. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/pt-BR.d.mts +8 -0
  166. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/pt-BR.d.mts.map +1 -0
  167. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/pt.d.mts +8 -0
  168. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/pt.d.mts.map +1 -0
  169. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ro.d.mts +8 -0
  170. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ro.d.mts.map +1 -0
  171. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ru.d.mts +8 -0
  172. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ru.d.mts.map +1 -0
  173. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/sk.d.mts +8 -0
  174. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/sk.d.mts.map +1 -0
  175. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/sl.d.mts +8 -0
  176. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/sl.d.mts.map +1 -0
  177. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/sv.d.mts +8 -0
  178. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/sv.d.mts.map +1 -0
  179. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ta.d.mts +8 -0
  180. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ta.d.mts.map +1 -0
  181. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/tg.d.mts +8 -0
  182. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/tg.d.mts.map +1 -0
  183. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/th.d.mts +8 -0
  184. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/th.d.mts.map +1 -0
  185. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/tk.d.mts +8 -0
  186. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/tk.d.mts.map +1 -0
  187. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/tr.d.mts +8 -0
  188. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/tr.d.mts.map +1 -0
  189. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ua.d.mts +8 -0
  190. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ua.d.mts.map +1 -0
  191. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/uk.d.mts +8 -0
  192. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/uk.d.mts.map +1 -0
  193. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ur.d.mts +8 -0
  194. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ur.d.mts.map +1 -0
  195. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/uz.d.mts +8 -0
  196. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/uz.d.mts.map +1 -0
  197. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/vi.d.mts +8 -0
  198. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/vi.d.mts.map +1 -0
  199. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/yo.d.mts +8 -0
  200. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/yo.d.mts.map +1 -0
  201. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/zh-CN.d.mts +8 -0
  202. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/zh-CN.d.mts.map +1 -0
  203. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/zh-TW.d.mts +8 -0
  204. package/dist/node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/zh-TW.d.mts.map +1 -0
  205. package/dist/packages/core/po-core/dist/mcpWidget.d.mts +2 -0
  206. package/dist/packages/core/po-core/dist/src/extensions/webPlugin.d.mts +2 -0
  207. package/dist/packages/core/po-core/dist/src/web/models/globalStore.d.mts +1 -0
  208. package/dist/packages/core/po-core/dist/src/web/models/sessionStore.d.mts +1 -0
  209. package/dist/packages/core/po-core/dist/src/web/models/workspaceStore.d.mts +1 -0
  210. package/dist/packages/core/po-core/dist/src/web/schemas/template.d.mts +2 -0
  211. package/dist/packages/core/po-core/dist/src/web/services/mcpWidget.d.mts +1 -0
  212. package/dist/packages/core/po-core/dist/src/web/types/extensionFile.d.mts +3 -0
  213. package/dist/packages/core/po-core/dist/src/web/types/mcpWidget.d.mts +17 -0
  214. package/dist/packages/core/po-core/dist/src/web/types/mcpWidget.d.mts.map +1 -0
  215. package/dist/packages/core/po-core/dist/src/web/types/nativeTemplate.d.mts +2 -0
  216. package/dist/packages/core/po-core/dist/src/web/types/template.d.mts +1 -0
  217. package/dist/packages/core/po-core/dist/src/web/types/webPlugin.d.mts +3 -0
  218. package/dist/packages/core/po-core/dist/web.d.mts +12 -0
  219. package/dist/packages/core/po-web-components/src/components/Accordion.d.mts +11 -0
  220. package/dist/packages/core/po-web-components/src/components/Accordion.d.mts.map +1 -0
  221. package/dist/packages/core/po-web-components/src/components/Accordion.mjs +2 -0
  222. package/dist/packages/core/po-web-components/src/components/Accordion.mjs.map +1 -0
  223. package/dist/packages/core/po-web-components/src/components/AnsiText.d.mts +16 -0
  224. package/dist/packages/core/po-web-components/src/components/AnsiText.d.mts.map +1 -0
  225. package/dist/packages/core/po-web-components/src/components/AnsiText.mjs +4 -0
  226. package/dist/packages/core/po-web-components/src/components/AnsiText.mjs.map +1 -0
  227. package/dist/packages/core/po-web-components/src/components/Avatar.d.mts +10 -0
  228. package/dist/packages/core/po-web-components/src/components/Avatar.d.mts.map +1 -0
  229. package/dist/packages/core/po-web-components/src/components/Avatar.mjs +2 -0
  230. package/dist/packages/core/po-web-components/src/components/Avatar.mjs.map +1 -0
  231. package/dist/packages/core/po-web-components/src/components/Badge.d.mts +17 -0
  232. package/dist/packages/core/po-web-components/src/components/Badge.d.mts.map +1 -0
  233. package/dist/packages/core/po-web-components/src/components/Badge.mjs +2 -0
  234. package/dist/packages/core/po-web-components/src/components/Badge.mjs.map +1 -0
  235. package/dist/packages/core/po-web-components/src/components/Breadcrumb.d.mts +36 -0
  236. package/dist/packages/core/po-web-components/src/components/Breadcrumb.d.mts.map +1 -0
  237. package/dist/packages/core/po-web-components/src/components/Breadcrumb.mjs +2 -0
  238. package/dist/packages/core/po-web-components/src/components/Breadcrumb.mjs.map +1 -0
  239. package/dist/packages/core/po-web-components/src/components/Button.d.mts +24 -0
  240. package/dist/packages/core/po-web-components/src/components/Button.d.mts.map +1 -0
  241. package/dist/packages/core/po-web-components/src/components/Button.mjs +2 -0
  242. package/dist/packages/core/po-web-components/src/components/Button.mjs.map +1 -0
  243. package/dist/packages/core/po-web-components/src/components/Checkbox.d.mts +8 -0
  244. package/dist/packages/core/po-web-components/src/components/Checkbox.d.mts.map +1 -0
  245. package/dist/packages/core/po-web-components/src/components/Checkbox.mjs +2 -0
  246. package/dist/packages/core/po-web-components/src/components/Checkbox.mjs.map +1 -0
  247. package/dist/packages/core/po-web-components/src/components/CodeBlock.d.mts +23 -0
  248. package/dist/packages/core/po-web-components/src/components/CodeBlock.d.mts.map +1 -0
  249. package/dist/packages/core/po-web-components/src/components/CodeBlock.mjs +2 -0
  250. package/dist/packages/core/po-web-components/src/components/CodeBlock.mjs.map +1 -0
  251. package/dist/packages/core/po-web-components/src/components/CodeEditor.d.mts +5 -0
  252. package/dist/packages/core/po-web-components/src/components/CodeEditor.d.mts.map +1 -0
  253. package/dist/packages/core/po-web-components/src/components/CodeEditor.mjs +2 -0
  254. package/dist/packages/core/po-web-components/src/components/CodeEditor.mjs.map +1 -0
  255. package/dist/packages/core/po-web-components/src/components/CodeEditorView.mjs +2 -0
  256. package/dist/packages/core/po-web-components/src/components/CodeEditorView.mjs.map +1 -0
  257. package/dist/packages/core/po-web-components/src/components/Collapsible.d.mts +10 -0
  258. package/dist/packages/core/po-web-components/src/components/Collapsible.d.mts.map +1 -0
  259. package/dist/packages/core/po-web-components/src/components/Collapsible.mjs +2 -0
  260. package/dist/packages/core/po-web-components/src/components/Collapsible.mjs.map +1 -0
  261. package/dist/packages/core/po-web-components/src/components/Command.d.mts +41 -0
  262. package/dist/packages/core/po-web-components/src/components/Command.d.mts.map +1 -0
  263. package/dist/packages/core/po-web-components/src/components/Command.mjs +2 -0
  264. package/dist/packages/core/po-web-components/src/components/Command.mjs.map +1 -0
  265. package/dist/packages/core/po-web-components/src/components/CopyButton.mjs +2 -0
  266. package/dist/packages/core/po-web-components/src/components/CopyButton.mjs.map +1 -0
  267. package/dist/packages/core/po-web-components/src/components/Dialog.d.mts +39 -0
  268. package/dist/packages/core/po-web-components/src/components/Dialog.d.mts.map +1 -0
  269. package/dist/packages/core/po-web-components/src/components/Dialog.mjs +2 -0
  270. package/dist/packages/core/po-web-components/src/components/Dialog.mjs.map +1 -0
  271. package/dist/packages/core/po-web-components/src/components/DiffView.d.mts +16 -0
  272. package/dist/packages/core/po-web-components/src/components/DiffView.d.mts.map +1 -0
  273. package/dist/packages/core/po-web-components/src/components/DiffView.mjs +2 -0
  274. package/dist/packages/core/po-web-components/src/components/DiffView.mjs.map +1 -0
  275. package/dist/packages/core/po-web-components/src/components/Dot.d.mts +15 -0
  276. package/dist/packages/core/po-web-components/src/components/Dot.d.mts.map +1 -0
  277. package/dist/packages/core/po-web-components/src/components/Dot.mjs +2 -0
  278. package/dist/packages/core/po-web-components/src/components/Dot.mjs.map +1 -0
  279. package/dist/packages/core/po-web-components/src/components/Drawer.d.mts +17 -0
  280. package/dist/packages/core/po-web-components/src/components/Drawer.d.mts.map +1 -0
  281. package/dist/packages/core/po-web-components/src/components/Drawer.mjs +2 -0
  282. package/dist/packages/core/po-web-components/src/components/Drawer.mjs.map +1 -0
  283. package/dist/packages/core/po-web-components/src/components/DropdownMenu.d.mts +34 -0
  284. package/dist/packages/core/po-web-components/src/components/DropdownMenu.d.mts.map +1 -0
  285. package/dist/packages/core/po-web-components/src/components/DropdownMenu.mjs +2 -0
  286. package/dist/packages/core/po-web-components/src/components/DropdownMenu.mjs.map +1 -0
  287. package/dist/packages/core/po-web-components/src/components/EmptyState.d.mts +17 -0
  288. package/dist/packages/core/po-web-components/src/components/EmptyState.d.mts.map +1 -0
  289. package/dist/packages/core/po-web-components/src/components/EmptyState.mjs +2 -0
  290. package/dist/packages/core/po-web-components/src/components/EmptyState.mjs.map +1 -0
  291. package/dist/packages/core/po-web-components/src/components/HashlineLines.d.mts +23 -0
  292. package/dist/packages/core/po-web-components/src/components/HashlineLines.d.mts.map +1 -0
  293. package/dist/packages/core/po-web-components/src/components/HashlineLines.mjs +2 -0
  294. package/dist/packages/core/po-web-components/src/components/HashlineLines.mjs.map +1 -0
  295. package/dist/packages/core/po-web-components/src/components/Input.d.mts +19 -0
  296. package/dist/packages/core/po-web-components/src/components/Input.d.mts.map +1 -0
  297. package/dist/packages/core/po-web-components/src/components/Input.mjs +2 -0
  298. package/dist/packages/core/po-web-components/src/components/Input.mjs.map +1 -0
  299. package/dist/packages/core/po-web-components/src/components/Kbd.d.mts +6 -0
  300. package/dist/packages/core/po-web-components/src/components/Kbd.d.mts.map +1 -0
  301. package/dist/packages/core/po-web-components/src/components/Kbd.mjs +2 -0
  302. package/dist/packages/core/po-web-components/src/components/Kbd.mjs.map +1 -0
  303. package/dist/packages/core/po-web-components/src/components/Label.d.mts +8 -0
  304. package/dist/packages/core/po-web-components/src/components/Label.d.mts.map +1 -0
  305. package/dist/packages/core/po-web-components/src/components/Label.mjs +2 -0
  306. package/dist/packages/core/po-web-components/src/components/Label.mjs.map +1 -0
  307. package/dist/packages/core/po-web-components/src/components/Markdown.d.mts +22 -0
  308. package/dist/packages/core/po-web-components/src/components/Markdown.d.mts.map +1 -0
  309. package/dist/packages/core/po-web-components/src/components/Markdown.mjs +3 -0
  310. package/dist/packages/core/po-web-components/src/components/Markdown.mjs.map +1 -0
  311. package/dist/packages/core/po-web-components/src/components/McpApp.d.mts +18 -0
  312. package/dist/packages/core/po-web-components/src/components/McpApp.d.mts.map +1 -0
  313. package/dist/packages/core/po-web-components/src/components/McpApp.mjs +2 -0
  314. package/dist/packages/core/po-web-components/src/components/McpApp.mjs.map +1 -0
  315. package/dist/packages/core/po-web-components/src/components/McpToolWidget.d.mts +15 -0
  316. package/dist/packages/core/po-web-components/src/components/McpToolWidget.d.mts.map +1 -0
  317. package/dist/packages/core/po-web-components/src/components/McpToolWidget.mjs +3 -0
  318. package/dist/packages/core/po-web-components/src/components/McpToolWidget.mjs.map +1 -0
  319. package/dist/packages/core/po-web-components/src/components/MediaPreview.d.mts +63 -0
  320. package/dist/packages/core/po-web-components/src/components/MediaPreview.d.mts.map +1 -0
  321. package/dist/packages/core/po-web-components/src/components/MediaPreview.mjs +2 -0
  322. package/dist/packages/core/po-web-components/src/components/MediaPreview.mjs.map +1 -0
  323. package/dist/packages/core/po-web-components/src/components/MermaidDiagram.mjs +2 -0
  324. package/dist/packages/core/po-web-components/src/components/MermaidDiagram.mjs.map +1 -0
  325. package/dist/packages/core/po-web-components/src/components/MessageItem.d.mts +108 -0
  326. package/dist/packages/core/po-web-components/src/components/MessageItem.d.mts.map +1 -0
  327. package/dist/packages/core/po-web-components/src/components/MessageItem.mjs +2 -0
  328. package/dist/packages/core/po-web-components/src/components/MessageItem.mjs.map +1 -0
  329. package/dist/packages/core/po-web-components/src/components/MessageLines.d.mts +23 -0
  330. package/dist/packages/core/po-web-components/src/components/MessageLines.d.mts.map +1 -0
  331. package/dist/packages/core/po-web-components/src/components/MessageLines.mjs +2 -0
  332. package/dist/packages/core/po-web-components/src/components/MessageLines.mjs.map +1 -0
  333. package/dist/packages/core/po-web-components/src/components/OptionList.d.mts +49 -0
  334. package/dist/packages/core/po-web-components/src/components/OptionList.d.mts.map +1 -0
  335. package/dist/packages/core/po-web-components/src/components/OptionList.mjs +2 -0
  336. package/dist/packages/core/po-web-components/src/components/OptionList.mjs.map +1 -0
  337. package/dist/packages/core/po-web-components/src/components/Panel.d.mts +14 -0
  338. package/dist/packages/core/po-web-components/src/components/Panel.d.mts.map +1 -0
  339. package/dist/packages/core/po-web-components/src/components/Panel.mjs +2 -0
  340. package/dist/packages/core/po-web-components/src/components/Panel.mjs.map +1 -0
  341. package/dist/packages/core/po-web-components/src/components/PdfPreview.d.mts +52 -0
  342. package/dist/packages/core/po-web-components/src/components/PdfPreview.d.mts.map +1 -0
  343. package/dist/packages/core/po-web-components/src/components/PdfPreview.mjs +2 -0
  344. package/dist/packages/core/po-web-components/src/components/PdfPreview.mjs.map +1 -0
  345. package/dist/packages/core/po-web-components/src/components/Picker.d.mts +52 -0
  346. package/dist/packages/core/po-web-components/src/components/Picker.d.mts.map +1 -0
  347. package/dist/packages/core/po-web-components/src/components/Picker.mjs +2 -0
  348. package/dist/packages/core/po-web-components/src/components/Picker.mjs.map +1 -0
  349. package/dist/packages/core/po-web-components/src/components/Popover.d.mts +19 -0
  350. package/dist/packages/core/po-web-components/src/components/Popover.d.mts.map +1 -0
  351. package/dist/packages/core/po-web-components/src/components/Popover.mjs +2 -0
  352. package/dist/packages/core/po-web-components/src/components/Popover.mjs.map +1 -0
  353. package/dist/packages/core/po-web-components/src/components/Progress.d.mts +8 -0
  354. package/dist/packages/core/po-web-components/src/components/Progress.d.mts.map +1 -0
  355. package/dist/packages/core/po-web-components/src/components/Progress.mjs +2 -0
  356. package/dist/packages/core/po-web-components/src/components/Progress.mjs.map +1 -0
  357. package/dist/packages/core/po-web-components/src/components/RadioGroup.d.mts +15 -0
  358. package/dist/packages/core/po-web-components/src/components/RadioGroup.d.mts.map +1 -0
  359. package/dist/packages/core/po-web-components/src/components/RadioGroup.mjs +2 -0
  360. package/dist/packages/core/po-web-components/src/components/RadioGroup.mjs.map +1 -0
  361. package/dist/packages/core/po-web-components/src/components/ReviewCommentDraft.d.mts +24 -0
  362. package/dist/packages/core/po-web-components/src/components/ReviewCommentDraft.d.mts.map +1 -0
  363. package/dist/packages/core/po-web-components/src/components/ReviewCommentDraft.mjs +2 -0
  364. package/dist/packages/core/po-web-components/src/components/ReviewCommentDraft.mjs.map +1 -0
  365. package/dist/packages/core/po-web-components/src/components/ScrollArea.d.mts +13 -0
  366. package/dist/packages/core/po-web-components/src/components/ScrollArea.d.mts.map +1 -0
  367. package/dist/packages/core/po-web-components/src/components/ScrollArea.mjs +2 -0
  368. package/dist/packages/core/po-web-components/src/components/ScrollArea.mjs.map +1 -0
  369. package/dist/packages/core/po-web-components/src/components/SectionLabel.d.mts +6 -0
  370. package/dist/packages/core/po-web-components/src/components/SectionLabel.d.mts.map +1 -0
  371. package/dist/packages/core/po-web-components/src/components/SectionLabel.mjs +2 -0
  372. package/dist/packages/core/po-web-components/src/components/SectionLabel.mjs.map +1 -0
  373. package/dist/packages/core/po-web-components/src/components/Select.d.mts +19 -0
  374. package/dist/packages/core/po-web-components/src/components/Select.d.mts.map +1 -0
  375. package/dist/packages/core/po-web-components/src/components/Select.mjs +2 -0
  376. package/dist/packages/core/po-web-components/src/components/Select.mjs.map +1 -0
  377. package/dist/packages/core/po-web-components/src/components/Separator.d.mts +13 -0
  378. package/dist/packages/core/po-web-components/src/components/Separator.d.mts.map +1 -0
  379. package/dist/packages/core/po-web-components/src/components/Separator.mjs +2 -0
  380. package/dist/packages/core/po-web-components/src/components/Separator.mjs.map +1 -0
  381. package/dist/packages/core/po-web-components/src/components/Settings.d.mts +56 -0
  382. package/dist/packages/core/po-web-components/src/components/Settings.d.mts.map +1 -0
  383. package/dist/packages/core/po-web-components/src/components/Settings.mjs +2 -0
  384. package/dist/packages/core/po-web-components/src/components/Settings.mjs.map +1 -0
  385. package/dist/packages/core/po-web-components/src/components/Sheet.d.mts +35 -0
  386. package/dist/packages/core/po-web-components/src/components/Sheet.d.mts.map +1 -0
  387. package/dist/packages/core/po-web-components/src/components/Sheet.mjs +2 -0
  388. package/dist/packages/core/po-web-components/src/components/Sheet.mjs.map +1 -0
  389. package/dist/packages/core/po-web-components/src/components/Skeleton.d.mts +10 -0
  390. package/dist/packages/core/po-web-components/src/components/Skeleton.d.mts.map +1 -0
  391. package/dist/packages/core/po-web-components/src/components/Skeleton.mjs +2 -0
  392. package/dist/packages/core/po-web-components/src/components/Skeleton.mjs.map +1 -0
  393. package/dist/packages/core/po-web-components/src/components/Spinner.d.mts +14 -0
  394. package/dist/packages/core/po-web-components/src/components/Spinner.d.mts.map +1 -0
  395. package/dist/packages/core/po-web-components/src/components/Spinner.mjs +2 -0
  396. package/dist/packages/core/po-web-components/src/components/Spinner.mjs.map +1 -0
  397. package/dist/packages/core/po-web-components/src/components/StatusBadge.d.mts +23 -0
  398. package/dist/packages/core/po-web-components/src/components/StatusBadge.d.mts.map +1 -0
  399. package/dist/packages/core/po-web-components/src/components/StatusBadge.mjs +2 -0
  400. package/dist/packages/core/po-web-components/src/components/StatusBadge.mjs.map +1 -0
  401. package/dist/packages/core/po-web-components/src/components/StreamCursor.d.mts +6 -0
  402. package/dist/packages/core/po-web-components/src/components/StreamCursor.d.mts.map +1 -0
  403. package/dist/packages/core/po-web-components/src/components/StreamCursor.mjs +2 -0
  404. package/dist/packages/core/po-web-components/src/components/StreamCursor.mjs.map +1 -0
  405. package/dist/packages/core/po-web-components/src/components/Switch.d.mts +8 -0
  406. package/dist/packages/core/po-web-components/src/components/Switch.d.mts.map +1 -0
  407. package/dist/packages/core/po-web-components/src/components/Switch.mjs +2 -0
  408. package/dist/packages/core/po-web-components/src/components/Switch.mjs.map +1 -0
  409. package/dist/packages/core/po-web-components/src/components/SyntaxText.d.mts +50 -0
  410. package/dist/packages/core/po-web-components/src/components/SyntaxText.d.mts.map +1 -0
  411. package/dist/packages/core/po-web-components/src/components/SyntaxText.mjs +4 -0
  412. package/dist/packages/core/po-web-components/src/components/SyntaxText.mjs.map +1 -0
  413. package/dist/packages/core/po-web-components/src/components/Tabs.d.mts +36 -0
  414. package/dist/packages/core/po-web-components/src/components/Tabs.d.mts.map +1 -0
  415. package/dist/packages/core/po-web-components/src/components/Tabs.mjs +2 -0
  416. package/dist/packages/core/po-web-components/src/components/Tabs.mjs.map +1 -0
  417. package/dist/packages/core/po-web-components/src/components/TerminalView.d.mts +31 -0
  418. package/dist/packages/core/po-web-components/src/components/TerminalView.d.mts.map +1 -0
  419. package/dist/packages/core/po-web-components/src/components/TerminalView.mjs +2 -0
  420. package/dist/packages/core/po-web-components/src/components/TerminalView.mjs.map +1 -0
  421. package/dist/packages/core/po-web-components/src/components/Textarea.d.mts +9 -0
  422. package/dist/packages/core/po-web-components/src/components/Textarea.d.mts.map +1 -0
  423. package/dist/packages/core/po-web-components/src/components/Textarea.mjs +2 -0
  424. package/dist/packages/core/po-web-components/src/components/Textarea.mjs.map +1 -0
  425. package/dist/packages/core/po-web-components/src/components/Toast.d.mts +24 -0
  426. package/dist/packages/core/po-web-components/src/components/Toast.d.mts.map +1 -0
  427. package/dist/packages/core/po-web-components/src/components/Toast.mjs +2 -0
  428. package/dist/packages/core/po-web-components/src/components/Toast.mjs.map +1 -0
  429. package/dist/packages/core/po-web-components/src/components/ToolPathLink.d.mts +22 -0
  430. package/dist/packages/core/po-web-components/src/components/ToolPathLink.d.mts.map +1 -0
  431. package/dist/packages/core/po-web-components/src/components/ToolPathLink.mjs +2 -0
  432. package/dist/packages/core/po-web-components/src/components/ToolPathLink.mjs.map +1 -0
  433. package/dist/packages/core/po-web-components/src/components/Tooltip.d.mts +11 -0
  434. package/dist/packages/core/po-web-components/src/components/Tooltip.d.mts.map +1 -0
  435. package/dist/packages/core/po-web-components/src/components/Tooltip.mjs +2 -0
  436. package/dist/packages/core/po-web-components/src/components/Tooltip.mjs.map +1 -0
  437. package/dist/packages/core/po-web-components/src/icons/icons.d.mts +2 -0
  438. package/dist/packages/core/po-web-components/src/icons/icons.mjs +1 -0
  439. package/dist/packages/core/po-web-components/src/lib/ansiSpans.d.mts +42 -0
  440. package/dist/packages/core/po-web-components/src/lib/ansiSpans.d.mts.map +1 -0
  441. package/dist/packages/core/po-web-components/src/lib/ansiSpans.mjs +2 -0
  442. package/dist/packages/core/po-web-components/src/lib/ansiSpans.mjs.map +1 -0
  443. package/dist/packages/core/po-web-components/src/lib/cn.d.mts +6 -0
  444. package/dist/packages/core/po-web-components/src/lib/cn.d.mts.map +1 -0
  445. package/dist/packages/core/po-web-components/src/lib/cn.mjs +2 -0
  446. package/dist/packages/core/po-web-components/src/lib/cn.mjs.map +1 -0
  447. package/dist/packages/core/po-web-components/src/lib/collapse.d.mts +14 -0
  448. package/dist/packages/core/po-web-components/src/lib/collapse.d.mts.map +1 -0
  449. package/dist/packages/core/po-web-components/src/lib/collapse.mjs +2 -0
  450. package/dist/packages/core/po-web-components/src/lib/collapse.mjs.map +1 -0
  451. package/dist/packages/core/po-web-components/src/lib/editorController.mjs +2 -0
  452. package/dist/packages/core/po-web-components/src/lib/editorController.mjs.map +1 -0
  453. package/dist/packages/core/po-web-components/src/lib/editorLanguage.d.mts +21 -0
  454. package/dist/packages/core/po-web-components/src/lib/editorLanguage.d.mts.map +1 -0
  455. package/dist/packages/core/po-web-components/src/lib/editorLanguage.mjs +2 -0
  456. package/dist/packages/core/po-web-components/src/lib/editorLanguage.mjs.map +1 -0
  457. package/dist/packages/core/po-web-components/src/lib/editorTheme.d.mts +76 -0
  458. package/dist/packages/core/po-web-components/src/lib/editorTheme.d.mts.map +1 -0
  459. package/dist/packages/core/po-web-components/src/lib/editorTheme.mjs +2 -0
  460. package/dist/packages/core/po-web-components/src/lib/editorTheme.mjs.map +1 -0
  461. package/dist/packages/core/po-web-components/src/lib/fenceGrammar.mjs +2 -0
  462. package/dist/packages/core/po-web-components/src/lib/fenceGrammar.mjs.map +1 -0
  463. package/dist/packages/core/po-web-components/src/lib/hashlineHighlight.d.mts +30 -0
  464. package/dist/packages/core/po-web-components/src/lib/hashlineHighlight.d.mts.map +1 -0
  465. package/dist/packages/core/po-web-components/src/lib/hashlineHighlight.mjs +3 -0
  466. package/dist/packages/core/po-web-components/src/lib/hashlineHighlight.mjs.map +1 -0
  467. package/dist/packages/core/po-web-components/src/lib/hashlineView.d.mts +60 -0
  468. package/dist/packages/core/po-web-components/src/lib/hashlineView.d.mts.map +1 -0
  469. package/dist/packages/core/po-web-components/src/lib/hashlineView.mjs +6 -0
  470. package/dist/packages/core/po-web-components/src/lib/hashlineView.mjs.map +1 -0
  471. package/dist/packages/core/po-web-components/src/lib/media.d.mts +11 -0
  472. package/dist/packages/core/po-web-components/src/lib/media.d.mts.map +1 -0
  473. package/dist/packages/core/po-web-components/src/lib/media.mjs +2 -0
  474. package/dist/packages/core/po-web-components/src/lib/media.mjs.map +1 -0
  475. package/dist/packages/core/po-web-components/src/lib/mediaPlayback.mjs +2 -0
  476. package/dist/packages/core/po-web-components/src/lib/mediaPlayback.mjs.map +1 -0
  477. package/dist/packages/core/po-web-components/src/lib/mermaidDiagram.mjs +2 -0
  478. package/dist/packages/core/po-web-components/src/lib/mermaidDiagram.mjs.map +1 -0
  479. package/dist/packages/core/po-web-components/src/lib/optionList.d.mts +21 -0
  480. package/dist/packages/core/po-web-components/src/lib/optionList.d.mts.map +1 -0
  481. package/dist/packages/core/po-web-components/src/lib/optionList.mjs +2 -0
  482. package/dist/packages/core/po-web-components/src/lib/optionList.mjs.map +1 -0
  483. package/dist/packages/core/po-web-components/src/lib/pathGroups.d.mts +23 -0
  484. package/dist/packages/core/po-web-components/src/lib/pathGroups.d.mts.map +1 -0
  485. package/dist/packages/core/po-web-components/src/lib/pathGroups.mjs +2 -0
  486. package/dist/packages/core/po-web-components/src/lib/pathGroups.mjs.map +1 -0
  487. package/dist/packages/core/po-web-components/src/lib/picker.d.mts +10 -0
  488. package/dist/packages/core/po-web-components/src/lib/picker.d.mts.map +1 -0
  489. package/dist/packages/core/po-web-components/src/lib/picker.mjs +2 -0
  490. package/dist/packages/core/po-web-components/src/lib/picker.mjs.map +1 -0
  491. package/dist/packages/core/po-web-components/src/lib/review.d.mts +40 -0
  492. package/dist/packages/core/po-web-components/src/lib/review.d.mts.map +1 -0
  493. package/dist/packages/core/po-web-components/src/lib/review.mjs +8 -0
  494. package/dist/packages/core/po-web-components/src/lib/review.mjs.map +1 -0
  495. package/dist/packages/core/po-web-components/src/lib/syntaxHighlight.d.mts +54 -0
  496. package/dist/packages/core/po-web-components/src/lib/syntaxHighlight.d.mts.map +1 -0
  497. package/dist/packages/core/po-web-components/src/lib/syntaxHighlight.mjs +3 -0
  498. package/dist/packages/core/po-web-components/src/lib/syntaxHighlight.mjs.map +1 -0
  499. package/dist/packages/core/po-web-components/src/lib/tone.d.mts +25 -0
  500. package/dist/packages/core/po-web-components/src/lib/tone.d.mts.map +1 -0
  501. package/dist/packages/core/po-web-components/src/lib/tone.mjs +2 -0
  502. package/dist/packages/core/po-web-components/src/lib/tone.mjs.map +1 -0
  503. package/dist/packages/core/po-web-components/src/theme/apply.d.mts +25 -0
  504. package/dist/packages/core/po-web-components/src/theme/apply.d.mts.map +1 -0
  505. package/dist/packages/core/po-web-components/src/theme/apply.mjs +3 -0
  506. package/dist/packages/core/po-web-components/src/theme/apply.mjs.map +1 -0
  507. package/dist/packages/core/po-web-components/src/theme/builtinThemes.d.mts +11 -0
  508. package/dist/packages/core/po-web-components/src/theme/builtinThemes.d.mts.map +1 -0
  509. package/dist/packages/core/po-web-components/src/theme/builtinThemes.mjs +2 -0
  510. package/dist/packages/core/po-web-components/src/theme/builtinThemes.mjs.map +1 -0
  511. package/dist/packages/core/po-web-components/src/theme/derive.d.mts +14 -0
  512. package/dist/packages/core/po-web-components/src/theme/derive.d.mts.map +1 -0
  513. package/dist/packages/core/po-web-components/src/theme/derive.mjs +2 -0
  514. package/dist/packages/core/po-web-components/src/theme/derive.mjs.map +1 -0
  515. package/dist/packages/core/po-web-components/src/theme/nativeTheme.d.mts +131 -0
  516. package/dist/packages/core/po-web-components/src/theme/nativeTheme.d.mts.map +1 -0
  517. package/dist/packages/core/po-web-components/src/theme/nativeTheme.mjs +2 -0
  518. package/dist/packages/core/po-web-components/src/theme/nativeTheme.mjs.map +1 -0
  519. package/dist/packages/core/po-web-components/src/theme/parse.d.mts +10 -0
  520. package/dist/packages/core/po-web-components/src/theme/parse.d.mts.map +1 -0
  521. package/dist/packages/core/po-web-components/src/theme/parse.mjs +2 -0
  522. package/dist/packages/core/po-web-components/src/theme/parse.mjs.map +1 -0
  523. package/dist/packages/core/po-web-components/src/theme/piTheme.d.mts +19 -0
  524. package/dist/packages/core/po-web-components/src/theme/piTheme.d.mts.map +1 -0
  525. package/dist/packages/core/po-web-components/src/theme/piTheme.mjs +2 -0
  526. package/dist/packages/core/po-web-components/src/theme/piTheme.mjs.map +1 -0
  527. package/dist/packages/core/po-web-components/src/theme/preference.d.mts +15 -0
  528. package/dist/packages/core/po-web-components/src/theme/preference.d.mts.map +1 -0
  529. package/dist/packages/core/po-web-components/src/theme/preference.mjs +2 -0
  530. package/dist/packages/core/po-web-components/src/theme/preference.mjs.map +1 -0
  531. package/dist/packages/core/po-web-components/src/types/diff.d.mts +46 -0
  532. package/dist/packages/core/po-web-components/src/types/diff.d.mts.map +1 -0
  533. package/dist/packages/core/po-web-components/src/types/editor.d.mts +78 -0
  534. package/dist/packages/core/po-web-components/src/types/editor.d.mts.map +1 -0
  535. package/dist/packages/core/po-web-components/src/types/editor.mjs +2 -0
  536. package/dist/packages/core/po-web-components/src/types/editor.mjs.map +1 -0
  537. package/dist/packages/core/po-web-components/src/types/theme.d.mts +38 -0
  538. package/dist/packages/core/po-web-components/src/types/theme.d.mts.map +1 -0
  539. package/dist/packages/core/po-web-components/src/types/theme.mjs +2 -0
  540. package/dist/packages/core/po-web-components/src/types/theme.mjs.map +1 -0
  541. package/dist/packages/core/po-web-components/src/types/tone.d.mts +28 -0
  542. package/dist/packages/core/po-web-components/src/types/tone.d.mts.map +1 -0
  543. package/dist/packages/core/po-web-components/src/types/tone.mjs +2 -0
  544. package/dist/packages/core/po-web-components/src/types/tone.mjs.map +1 -0
  545. package/dist/packages/core/po-web-components/themes/doom-nord-dark.mjs +2 -0
  546. package/dist/packages/core/po-web-components/themes/doom-nord-dark.mjs.map +1 -0
  547. package/dist/packages/core/po-web-components/themes/doom-one-dark.mjs +2 -0
  548. package/dist/packages/core/po-web-components/themes/doom-one-dark.mjs.map +1 -0
  549. package/dist/packages/core/po-web-components/themes/doom-one-light.mjs +2 -0
  550. package/dist/packages/core/po-web-components/themes/doom-one-light.mjs.map +1 -0
  551. package/dist/src/components/Accordion.cjs +2 -0
  552. package/dist/src/components/Accordion.cjs.map +1 -0
  553. package/dist/src/components/AnsiText.cjs +4 -0
  554. package/dist/src/components/AnsiText.cjs.map +1 -0
  555. package/dist/src/components/Avatar.cjs +2 -0
  556. package/dist/src/components/Avatar.cjs.map +1 -0
  557. package/dist/src/components/Badge.cjs +2 -0
  558. package/dist/src/components/Badge.cjs.map +1 -0
  559. package/dist/src/components/Breadcrumb.cjs +2 -0
  560. package/dist/src/components/Breadcrumb.cjs.map +1 -0
  561. package/dist/src/components/Button.cjs +2 -0
  562. package/dist/src/components/Button.cjs.map +1 -0
  563. package/dist/src/components/Checkbox.cjs +2 -0
  564. package/dist/src/components/Checkbox.cjs.map +1 -0
  565. package/dist/src/components/CodeBlock.cjs +2 -0
  566. package/dist/src/components/CodeBlock.cjs.map +1 -0
  567. package/dist/src/components/CodeEditor.cjs +2 -0
  568. package/dist/src/components/CodeEditor.cjs.map +1 -0
  569. package/dist/src/components/CodeEditorView.cjs +2 -0
  570. package/dist/src/components/CodeEditorView.cjs.map +1 -0
  571. package/dist/src/components/Collapsible.cjs +2 -0
  572. package/dist/src/components/Collapsible.cjs.map +1 -0
  573. package/dist/src/components/Command.cjs +2 -0
  574. package/dist/src/components/Command.cjs.map +1 -0
  575. package/dist/src/components/CopyButton.cjs +2 -0
  576. package/dist/src/components/CopyButton.cjs.map +1 -0
  577. package/dist/src/components/Dialog.cjs +2 -0
  578. package/dist/src/components/Dialog.cjs.map +1 -0
  579. package/dist/src/components/DiffView.cjs +2 -0
  580. package/dist/src/components/DiffView.cjs.map +1 -0
  581. package/dist/src/components/Dot.cjs +2 -0
  582. package/dist/src/components/Dot.cjs.map +1 -0
  583. package/dist/src/components/Drawer.cjs +2 -0
  584. package/dist/src/components/Drawer.cjs.map +1 -0
  585. package/dist/src/components/DropdownMenu.cjs +2 -0
  586. package/dist/src/components/DropdownMenu.cjs.map +1 -0
  587. package/dist/src/components/EmptyState.cjs +2 -0
  588. package/dist/src/components/EmptyState.cjs.map +1 -0
  589. package/dist/src/components/HashlineLines.cjs +2 -0
  590. package/dist/src/components/HashlineLines.cjs.map +1 -0
  591. package/dist/src/components/Input.cjs +2 -0
  592. package/dist/src/components/Input.cjs.map +1 -0
  593. package/dist/src/components/Kbd.cjs +2 -0
  594. package/dist/src/components/Kbd.cjs.map +1 -0
  595. package/dist/src/components/Label.cjs +2 -0
  596. package/dist/src/components/Label.cjs.map +1 -0
  597. package/dist/src/components/Markdown.cjs +3 -0
  598. package/dist/src/components/Markdown.cjs.map +1 -0
  599. package/dist/src/components/McpApp.cjs +2 -0
  600. package/dist/src/components/McpApp.cjs.map +1 -0
  601. package/dist/src/components/McpToolWidget.cjs +3 -0
  602. package/dist/src/components/McpToolWidget.cjs.map +1 -0
  603. package/dist/src/components/MediaPreview.cjs +2 -0
  604. package/dist/src/components/MediaPreview.cjs.map +1 -0
  605. package/dist/src/components/MermaidDiagram.cjs +2 -0
  606. package/dist/src/components/MermaidDiagram.cjs.map +1 -0
  607. package/dist/src/components/MessageItem.cjs +2 -0
  608. package/dist/src/components/MessageItem.cjs.map +1 -0
  609. package/dist/src/components/MessageLines.cjs +2 -0
  610. package/dist/src/components/MessageLines.cjs.map +1 -0
  611. package/dist/src/components/OptionList.cjs +2 -0
  612. package/dist/src/components/OptionList.cjs.map +1 -0
  613. package/dist/src/components/Panel.cjs +2 -0
  614. package/dist/src/components/Panel.cjs.map +1 -0
  615. package/dist/src/components/PdfPreview.cjs +2 -0
  616. package/dist/src/components/PdfPreview.cjs.map +1 -0
  617. package/dist/src/components/Picker.cjs +2 -0
  618. package/dist/src/components/Picker.cjs.map +1 -0
  619. package/dist/src/components/Popover.cjs +2 -0
  620. package/dist/src/components/Popover.cjs.map +1 -0
  621. package/dist/src/components/Progress.cjs +2 -0
  622. package/dist/src/components/Progress.cjs.map +1 -0
  623. package/dist/src/components/RadioGroup.cjs +2 -0
  624. package/dist/src/components/RadioGroup.cjs.map +1 -0
  625. package/dist/src/components/ReviewCommentDraft.cjs +2 -0
  626. package/dist/src/components/ReviewCommentDraft.cjs.map +1 -0
  627. package/dist/src/components/ScrollArea.cjs +2 -0
  628. package/dist/src/components/ScrollArea.cjs.map +1 -0
  629. package/dist/src/components/SectionLabel.cjs +2 -0
  630. package/dist/src/components/SectionLabel.cjs.map +1 -0
  631. package/dist/src/components/Select.cjs +2 -0
  632. package/dist/src/components/Select.cjs.map +1 -0
  633. package/dist/src/components/Separator.cjs +2 -0
  634. package/dist/src/components/Separator.cjs.map +1 -0
  635. package/dist/src/components/Settings.cjs +2 -0
  636. package/dist/src/components/Settings.cjs.map +1 -0
  637. package/dist/src/components/Sheet.cjs +2 -0
  638. package/dist/src/components/Sheet.cjs.map +1 -0
  639. package/dist/src/components/Skeleton.cjs +2 -0
  640. package/dist/src/components/Skeleton.cjs.map +1 -0
  641. package/dist/src/components/Spinner.cjs +2 -0
  642. package/dist/src/components/Spinner.cjs.map +1 -0
  643. package/dist/src/components/StatusBadge.cjs +2 -0
  644. package/dist/src/components/StatusBadge.cjs.map +1 -0
  645. package/dist/src/components/StreamCursor.cjs +2 -0
  646. package/dist/src/components/StreamCursor.cjs.map +1 -0
  647. package/dist/src/components/Switch.cjs +2 -0
  648. package/dist/src/components/Switch.cjs.map +1 -0
  649. package/dist/src/components/SyntaxText.cjs +4 -0
  650. package/dist/src/components/SyntaxText.cjs.map +1 -0
  651. package/dist/src/components/Tabs.cjs +2 -0
  652. package/dist/src/components/Tabs.cjs.map +1 -0
  653. package/dist/src/components/TerminalView.cjs +2 -0
  654. package/dist/src/components/TerminalView.cjs.map +1 -0
  655. package/dist/src/components/Textarea.cjs +2 -0
  656. package/dist/src/components/Textarea.cjs.map +1 -0
  657. package/dist/src/components/Toast.cjs +2 -0
  658. package/dist/src/components/Toast.cjs.map +1 -0
  659. package/dist/src/components/ToolPathLink.cjs +2 -0
  660. package/dist/src/components/ToolPathLink.cjs.map +1 -0
  661. package/dist/src/components/Tooltip.cjs +2 -0
  662. package/dist/src/components/Tooltip.cjs.map +1 -0
  663. package/dist/src/icons/icons.cjs +1 -0
  664. package/dist/src/lib/ansiSpans.cjs +2 -0
  665. package/dist/src/lib/ansiSpans.cjs.map +1 -0
  666. package/dist/src/lib/cn.cjs +2 -0
  667. package/dist/src/lib/cn.cjs.map +1 -0
  668. package/dist/src/lib/collapse.cjs +2 -0
  669. package/dist/src/lib/collapse.cjs.map +1 -0
  670. package/dist/src/lib/editorController.cjs +2 -0
  671. package/dist/src/lib/editorController.cjs.map +1 -0
  672. package/dist/src/lib/editorLanguage.cjs +2 -0
  673. package/dist/src/lib/editorLanguage.cjs.map +1 -0
  674. package/dist/src/lib/editorTheme.cjs +2 -0
  675. package/dist/src/lib/editorTheme.cjs.map +1 -0
  676. package/dist/src/lib/fenceGrammar.cjs +2 -0
  677. package/dist/src/lib/fenceGrammar.cjs.map +1 -0
  678. package/dist/src/lib/hashlineHighlight.cjs +3 -0
  679. package/dist/src/lib/hashlineHighlight.cjs.map +1 -0
  680. package/dist/src/lib/hashlineView.cjs +6 -0
  681. package/dist/src/lib/hashlineView.cjs.map +1 -0
  682. package/dist/src/lib/media.cjs +2 -0
  683. package/dist/src/lib/media.cjs.map +1 -0
  684. package/dist/src/lib/mediaPlayback.cjs +2 -0
  685. package/dist/src/lib/mediaPlayback.cjs.map +1 -0
  686. package/dist/src/lib/mermaidDiagram.cjs +2 -0
  687. package/dist/src/lib/mermaidDiagram.cjs.map +1 -0
  688. package/dist/src/lib/optionList.cjs +2 -0
  689. package/dist/src/lib/optionList.cjs.map +1 -0
  690. package/dist/src/lib/pathGroups.cjs +2 -0
  691. package/dist/src/lib/pathGroups.cjs.map +1 -0
  692. package/dist/src/lib/picker.cjs +2 -0
  693. package/dist/src/lib/picker.cjs.map +1 -0
  694. package/dist/src/lib/review.cjs +8 -0
  695. package/dist/src/lib/review.cjs.map +1 -0
  696. package/dist/src/lib/syntaxHighlight.cjs +3 -0
  697. package/dist/src/lib/syntaxHighlight.cjs.map +1 -0
  698. package/dist/src/lib/tone.cjs +2 -0
  699. package/dist/src/lib/tone.cjs.map +1 -0
  700. package/dist/src/theme/apply.cjs +3 -0
  701. package/dist/src/theme/apply.cjs.map +1 -0
  702. package/dist/src/theme/builtinThemes.cjs +2 -0
  703. package/dist/src/theme/builtinThemes.cjs.map +1 -0
  704. package/dist/src/theme/derive.cjs +2 -0
  705. package/dist/src/theme/derive.cjs.map +1 -0
  706. package/dist/src/theme/nativeTheme.cjs +2 -0
  707. package/dist/src/theme/nativeTheme.cjs.map +1 -0
  708. package/dist/src/theme/parse.cjs +2 -0
  709. package/dist/src/theme/parse.cjs.map +1 -0
  710. package/dist/src/theme/piTheme.cjs +2 -0
  711. package/dist/src/theme/piTheme.cjs.map +1 -0
  712. package/dist/src/theme/preference.cjs +2 -0
  713. package/dist/src/theme/preference.cjs.map +1 -0
  714. package/dist/src/types/editor.cjs +2 -0
  715. package/dist/src/types/editor.cjs.map +1 -0
  716. package/dist/src/types/theme.cjs +2 -0
  717. package/dist/src/types/theme.cjs.map +1 -0
  718. package/dist/src/types/tone.cjs +2 -0
  719. package/dist/src/types/tone.cjs.map +1 -0
  720. package/dist/theme.cjs +1 -0
  721. package/dist/theme.d.mts +8 -0
  722. package/dist/theme.mjs +1 -0
  723. package/dist/themes/doom-nord-dark.cjs +2 -0
  724. package/dist/themes/doom-nord-dark.cjs.map +1 -0
  725. package/dist/themes/doom-one-dark.cjs +2 -0
  726. package/dist/themes/doom-one-dark.cjs.map +1 -0
  727. package/dist/themes/doom-one-light.cjs +2 -0
  728. package/dist/themes/doom-one-light.cjs.map +1 -0
  729. package/llms.txt +8 -0
  730. package/package.json +130 -0
  731. package/styles/mcp.css +22 -0
  732. package/styles/preview.css +17 -0
  733. package/styles/theme.css +311 -0
  734. package/styles/tokens.css +15 -0
  735. package/themes/doom-nord-dark.json +27 -0
  736. package/themes/doom-one-dark.json +30 -0
  737. package/themes/doom-one-light.json +28 -0
@@ -0,0 +1,2 @@
1
+ const e=/\x1b\[([0-9;:]*)([A-Za-z])|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b[()][A-Za-z0-9]|\x1b[A-Za-z]/g,t={30:`text-doom-faint`,31:`text-doom-red`,32:`text-doom-green`,33:`text-doom-yellow`,34:`text-doom-blue`,35:`text-doom-magenta`,36:`text-doom-cyan`,37:`text-doom-text`,90:`text-doom-dim`,91:`text-doom-red`,92:`text-doom-green`,93:`text-doom-orange`,94:`text-doom-blue`,95:`text-doom-violet`,96:`text-doom-cyan`,97:`text-doom-hi`};function n(){return{bold:!1,faint:!1,italic:!1,underline:!1,inverse:!1}}function r(e){if(e<0||e>=256||e<16)return;if(e>=232){let t=(e-232)*10+8;return i(t,t,t)}let t=e-16,n=e=>e===0?0:e*40+55;return i(n(Math.floor(t/36)%6),n(Math.floor(t/6)%6),n(t%6))}function i(e,t,n){let r=e=>Math.max(0,Math.min(255,Math.round(e)));return`rgb(${r(e)} ${r(t)} ${r(n)})`}function a(e,t){let n=e[t+1];if(n===2){let[n,r,a]=e.slice(t+2,t+2+3);return n===void 0||r===void 0||a===void 0?{consumed:e.length}:{color:i(n,r,a),consumed:5}}if(n===5){let n=e[t+2];return{...n===void 0?{}:{color:r(n)},consumed:3}}return{consumed:1}}function o(e,r){let i=r===``?[0]:r.split(/[;:]/).map(e=>Number(e)||0),o={...e};for(let e=0;e<i.length;e+=1){let r=i[e];if(r===0)o=n();else if(r===1)o.bold=!0;else if(r===2)o.faint=!0;else if(r===3)o.italic=!0;else if(r===4)o.underline=!0;else if(r===7)o.inverse=!0;else if(r===22)o.bold=!1,o.faint=!1;else if(r===23)o.italic=!1;else if(r===24)o.underline=!1;else if(r===27)o.inverse=!1;else if(r===39)delete o.className,delete o.color;else if(r===38){let{color:t,consumed:n}=a(i,e);delete o.className,t===void 0?delete o.color:o.color=t,e+=n-1}else if(r===48)e+=a(i,e).consumed-1;else if(r>=30&&r<=37||r>=90&&r<=97){let e=t[r];delete o.color,e===void 0?delete o.className:o.className=e}else(r>=40&&r<=49||r>=100&&r<=107)&&(o.inverse=!1)}return o}function s(e,t){return{text:e,...t.className===void 0?{}:{className:t.className},...t.color===void 0?{}:{color:t.color},...t.bold?{bold:!0}:{},...t.faint?{faint:!0}:{},...t.italic?{italic:!0}:{},...t.underline?{underline:!0}:{},...t.inverse?{inverse:!0}:{}}}function c(t){let r=[],i=n(),a=0;e.lastIndex=0;let c=e.exec(t);for(;c!==null;)c.index>a&&r.push(s(t.slice(a,c.index),i)),c[2]===`m`&&(i=o(i,c[1]??``)),a=c.index+c[0].length,c=e.exec(t);return a<t.length&&r.push(s(t.slice(a),i)),r}export{c as ansiSpans};
2
+ //# sourceMappingURL=ansiSpans.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansiSpans.mjs","names":["ANSI_PATTERN","FOREGROUND_CLASS","blank","paletteColor","index","level","rgb","offset","channel","value","clamp","red","green","blue","extendedColor","selector","codes","entry","applySgr","parameters","part","next","current","code","color","consumed","className","spanOf","attributes","ansiSpans","spans","cursor","match","line"],"sources":["../../../../../../src/lib/ansiSpans.ts"],"sourcesContent":["/**\n * The escapes a captured terminal screen carries, turned into spans.\n *\n * WHY THIS EXISTS:\n * Two kinds of output reach the cockpit with a terminal's colour still in it.\n * A workflow captures a tmux pane with `-e`, and a runner's log file keeps the\n * palette on purpose, stripping only cursor moves and redraws. The browser has\n * no terminal, and the cockpit carries no terminal emulator, so the sequences\n * are read here and rendered as ordinary spans. It lives in the component\n * library because both readers need it and neither may import the other.\n *\n * WHAT IT UNDERSTANDS:\n * SGR (`ESC [ … m`) only: the eight base colours and their bright forms, 256\n * colour and truecolour, and bold, faint, italic, underline and inverse. Every\n * other sequence is dropped rather than printed, because a cursor move or a\n * clear that arrives as visible junk is worse than one that arrives as\n * nothing: the screen is a snapshot, and the next one repaints it anyway.\n *\n * The named colours become theme tokens rather than the child's own palette,\n * so a run's output sits in the cockpit's colours instead of fighting them.\n * Only 256-colour and truecolour, which name a colour no token can stand in\n * for, are rendered as themselves.\n */\n\n/** One run of text with the attributes in force when it was printed. */\nexport interface AnsiSpan {\n text: string;\n /** Theme class for a named colour, absent when the colour is the default. */\n className?: string;\n /** An exact colour the child asked for, as `rgb(r g b)`; only 256/truecolour set this. */\n color?: string;\n bold?: boolean;\n faint?: boolean;\n italic?: boolean;\n underline?: boolean;\n /** Foreground and background swapped, which a TUI uses for selection and cursors. */\n inverse?: boolean;\n}\n\n// oxlint-disable-next-line no-control-regex -- reading terminal escapes is the point\nconst ANSI_PATTERN = /\\x1b\\[([0-9;:]*)([A-Za-z])|\\x1b\\][^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)|\\x1b[()][A-Za-z0-9]|\\x1b[A-Za-z]/g;\nconst SGR_FINAL = 'm';\nconst RESET_CODE = 0;\nconst DEFAULT_FOREGROUND = 39;\nconst EXTENDED_FOREGROUND = 38;\nconst EXTENDED_BACKGROUND = 48;\nconst TRUECOLOR_SELECTOR = 2;\nconst PALETTE_SELECTOR = 5;\nconst BASE_FOREGROUND_START = 30;\nconst BASE_FOREGROUND_END = 37;\nconst BRIGHT_FOREGROUND_START = 90;\nconst BRIGHT_FOREGROUND_END = 97;\nconst BACKGROUND_START = 40;\nconst BACKGROUND_END = 49;\nconst BRIGHT_BACKGROUND_START = 100;\nconst BRIGHT_BACKGROUND_END = 107;\nconst RGB_CHANNELS = 3;\nconst PALETTE_SIZE = 256;\nconst PALETTE_CUBE_START = 16;\nconst PALETTE_GREY_START = 232;\nconst CUBE_SIDE = 6;\nconst CUBE_STEP = 40;\nconst CUBE_OFFSET = 55;\nconst GREY_STEP = 10;\nconst GREY_OFFSET = 8;\nconst MAX_CHANNEL = 255;\n\nconst BOLD = 1;\nconst FAINT = 2;\nconst ITALIC = 3;\nconst UNDERLINE = 4;\nconst INVERSE = 7;\nconst NOT_BOLD = 22;\nconst NOT_ITALIC = 23;\nconst NOT_UNDERLINE = 24;\nconst NOT_INVERSE = 27;\n\n/**\n * The eight terminal colours as theme tokens, listed as whole class strings so\n * the host's class scanner can see them.\n */\nconst FOREGROUND_CLASS: Readonly<Record<number, string>> = {\n 30: 'text-doom-faint',\n 31: 'text-doom-red',\n 32: 'text-doom-green',\n 33: 'text-doom-yellow',\n 34: 'text-doom-blue',\n 35: 'text-doom-magenta',\n 36: 'text-doom-cyan',\n 37: 'text-doom-text',\n 90: 'text-doom-dim',\n 91: 'text-doom-red',\n 92: 'text-doom-green',\n 93: 'text-doom-orange',\n 94: 'text-doom-blue',\n 95: 'text-doom-violet',\n 96: 'text-doom-cyan',\n 97: 'text-doom-hi',\n};\n\ninterface Attributes {\n className?: string;\n color?: string;\n bold: boolean;\n faint: boolean;\n italic: boolean;\n underline: boolean;\n inverse: boolean;\n}\n\nfunction blank(): Attributes {\n return { bold: false, faint: false, italic: false, underline: false, inverse: false };\n}\n\n/** One of the 256 palette entries as an exact colour, since no token stands for it. */\nfunction paletteColor(index: number): string | undefined {\n if (index < 0 || index >= PALETTE_SIZE) return undefined;\n if (index < PALETTE_CUBE_START) return undefined; // The first sixteen are the named ones.\n if (index >= PALETTE_GREY_START) {\n const level = (index - PALETTE_GREY_START) * GREY_STEP + GREY_OFFSET;\n return rgb(level, level, level);\n }\n const offset = index - PALETTE_CUBE_START;\n const channel = (value: number): number => (value === 0 ? 0 : value * CUBE_STEP + CUBE_OFFSET);\n return rgb(\n channel(Math.floor(offset / (CUBE_SIDE * CUBE_SIDE)) % CUBE_SIDE),\n channel(Math.floor(offset / CUBE_SIDE) % CUBE_SIDE),\n channel(offset % CUBE_SIDE),\n );\n}\n\nfunction rgb(red: number, green: number, blue: number): string {\n const clamp = (value: number): number => Math.max(0, Math.min(MAX_CHANNEL, Math.round(value)));\n return `rgb(${clamp(red)} ${clamp(green)} ${clamp(blue)})`;\n}\n\n/** Reads one extended-colour run (`38;5;n` or `38;2;r;g;b`), answering how many codes it ate. */\nfunction extendedColor(codes: readonly number[], index: number): { color?: string; consumed: number } {\n const selector = codes[index + 1];\n if (selector === TRUECOLOR_SELECTOR) {\n const [red, green, blue] = codes.slice(index + 2, index + 2 + RGB_CHANNELS);\n if (red === undefined || green === undefined || blue === undefined) return { consumed: codes.length };\n return { color: rgb(red, green, blue), consumed: 1 + 1 + RGB_CHANNELS };\n }\n if (selector === PALETTE_SELECTOR) {\n const entry = codes[index + 2];\n return { ...(entry === undefined ? {} : { color: paletteColor(entry) }), consumed: 3 };\n }\n return { consumed: 1 };\n}\n\nfunction applySgr(current: Attributes, parameters: string): Attributes {\n // An empty parameter list is a reset, which is what a bare `ESC[m` means.\n const codes = parameters === '' ? [RESET_CODE] : parameters.split(/[;:]/).map((part) => Number(part) || 0);\n let next = { ...current };\n for (let index = 0; index < codes.length; index += 1) {\n const code = codes[index] as number;\n if (code === RESET_CODE) {\n next = blank();\n } else if (code === BOLD) next.bold = true;\n else if (code === FAINT) next.faint = true;\n else if (code === ITALIC) next.italic = true;\n else if (code === UNDERLINE) next.underline = true;\n else if (code === INVERSE) next.inverse = true;\n else if (code === NOT_BOLD) {\n next.bold = false;\n next.faint = false;\n } else if (code === NOT_ITALIC) next.italic = false;\n else if (code === NOT_UNDERLINE) next.underline = false;\n else if (code === NOT_INVERSE) next.inverse = false;\n else if (code === DEFAULT_FOREGROUND) {\n delete next.className;\n delete next.color;\n } else if (code === EXTENDED_FOREGROUND) {\n const { color, consumed } = extendedColor(codes, index);\n delete next.className;\n if (color === undefined) delete next.color;\n else next.color = color;\n index += consumed - 1;\n } else if (code === EXTENDED_BACKGROUND) {\n // Backgrounds are dropped: a child painting its own background over the\n // cockpit's panel is what makes captured output unreadable in a theme.\n index += extendedColor(codes, index).consumed - 1;\n } else if (\n (code >= BASE_FOREGROUND_START && code <= BASE_FOREGROUND_END) ||\n (code >= BRIGHT_FOREGROUND_START && code <= BRIGHT_FOREGROUND_END)\n ) {\n const className = FOREGROUND_CLASS[code];\n delete next.color;\n if (className === undefined) delete next.className;\n else next.className = className;\n }\n // Background and everything else is read and dropped.\n else if (\n (code >= BACKGROUND_START && code <= BACKGROUND_END) ||\n (code >= BRIGHT_BACKGROUND_START && code <= BRIGHT_BACKGROUND_END)\n ) {\n next.inverse = false;\n }\n }\n return next;\n}\n\nfunction spanOf(text: string, attributes: Attributes): AnsiSpan {\n return {\n text,\n ...(attributes.className === undefined ? {} : { className: attributes.className }),\n ...(attributes.color === undefined ? {} : { color: attributes.color }),\n ...(attributes.bold ? { bold: true } : {}),\n ...(attributes.faint ? { faint: true } : {}),\n ...(attributes.italic ? { italic: true } : {}),\n ...(attributes.underline ? { underline: true } : {}),\n ...(attributes.inverse ? { inverse: true } : {}),\n };\n}\n\n/** One line of captured screen as spans, with every unreadable sequence dropped. */\nexport function ansiSpans(line: string): AnsiSpan[] {\n const spans: AnsiSpan[] = [];\n let attributes = blank();\n let cursor = 0;\n ANSI_PATTERN.lastIndex = 0;\n let match = ANSI_PATTERN.exec(line);\n while (match !== null) {\n if (match.index > cursor) spans.push(spanOf(line.slice(cursor, match.index), attributes));\n if (match[2] === SGR_FINAL) attributes = applySgr(attributes, match[1] ?? '');\n cursor = match.index + match[0].length;\n match = ANSI_PATTERN.exec(line);\n }\n if (cursor < line.length) spans.push(spanOf(line.slice(cursor), attributes));\n return spans;\n}\n"],"mappings":"AAwCA,MAAMA,EAAe,iGAyCfC,EAAqD,CACzD,GAAI,kBACJ,GAAI,gBACJ,GAAI,kBACJ,GAAI,mBACJ,GAAI,iBACJ,GAAI,oBACJ,GAAI,iBACJ,GAAI,iBACJ,GAAI,gBACJ,GAAI,gBACJ,GAAI,kBACJ,GAAI,mBACJ,GAAI,iBACJ,GAAI,mBACJ,GAAI,iBACJ,GAAI,cACN,EAYA,SAASC,GAAoB,CAC3B,MAAO,CAAE,KAAM,GAAO,MAAO,GAAO,OAAQ,GAAO,UAAW,GAAO,QAAS,EAAM,CACtF,CAGA,SAASC,EAAa,EAAmC,CAEvD,GADIC,EAAQ,GAAKA,GAAS,KACtBA,EAAQ,GAAoB,OAChC,GAAIA,GAAS,IAAoB,CAC/B,IAAMC,GAASD,EAAQ,KAAsB,GAAY,EACzD,OAAOE,EAAID,EAAOA,EAAOA,CAAK,CAChC,CACA,IAAME,EAASH,EAAQ,GACjBI,EAAW,GAA2BC,IAAU,EAAI,EAAIA,EAAQ,GAAY,GAClF,OAAOH,EACLE,EAAQ,KAAK,MAAMD,EAAU,EAAsB,EAAI,CAAS,EAChEC,EAAQ,KAAK,MAAMD,EAAS,CAAS,EAAI,CAAS,EAClDC,EAAQD,EAAS,CAAS,CAC5B,CACF,CAEA,SAASD,EAAI,EAAa,EAAe,EAAsB,CAC7D,IAAMI,EAAS,GAA0B,KAAK,IAAI,EAAG,KAAK,IAAI,IAAa,KAAK,MAAMD,CAAK,CAAC,CAAC,EAC7F,MAAO,OAAOC,EAAMC,CAAG,EAAE,GAAGD,EAAME,CAAK,EAAE,GAAGF,EAAMG,CAAI,EAAE,EAC1D,CAGA,SAASC,EAAc,EAA0B,EAAqD,CACpG,IAAMC,EAAWC,EAAMZ,EAAQ,GAC/B,GAAIW,IAAa,EAAoB,CACnC,GAAM,CAACJ,EAAKC,EAAOC,GAAQG,EAAM,MAAMZ,EAAQ,EAAGA,EAAQ,EAAI,CAAY,EAE1E,OADIO,IAAQ,IAAA,IAAaC,IAAU,IAAA,IAAaC,IAAS,IAAA,GAAkB,CAAE,SAAUG,EAAM,MAAO,EAC7F,CAAE,MAAOV,EAAIK,EAAKC,EAAOC,CAAI,EAAG,SAAU,CAAqB,CACxE,CACA,GAAIE,IAAa,EAAkB,CACjC,IAAME,EAAQD,EAAMZ,EAAQ,GAC5B,MAAO,CAAE,GAAIa,IAAU,IAAA,GAAY,CAAC,EAAI,CAAE,MAAOd,EAAac,CAAK,CAAE,EAAI,SAAU,CAAE,CACvF,CACA,MAAO,CAAE,SAAU,CAAE,CACvB,CAEA,SAASC,EAAS,EAAqB,EAAgC,CAErE,IAAMF,EAAQG,IAAe,GAAK,CAAC,CAAU,EAAIA,EAAW,MAAM,MAAM,CAAC,CAAC,IAAK,GAAS,OAAOC,CAAI,GAAK,CAAC,EACrGC,EAAO,CAAE,GAAGC,CAAQ,EACxB,IAAK,IAAIlB,EAAQ,EAAGA,EAAQY,EAAM,OAAQ,GAAS,EAAG,CACpD,IAAMO,EAAOP,EAAMZ,GACnB,GAAImB,IAAS,EACX,EAAOrB,EAAM,OACR,GAAIqB,IAAS,EAAM,EAAK,KAAO,QACjC,GAAIA,IAAS,EAAO,EAAK,MAAQ,QACjC,GAAIA,IAAS,EAAQ,EAAK,OAAS,QACnC,GAAIA,IAAS,EAAW,EAAK,UAAY,QACzC,GAAIA,IAAS,EAAS,EAAK,QAAU,QACrC,GAAIA,IAAS,GAChB,EAAK,KAAO,GACZ,EAAK,MAAQ,QACR,GAAIA,IAAS,GAAY,EAAK,OAAS,QACzC,GAAIA,IAAS,GAAe,EAAK,UAAY,QAC7C,GAAIA,IAAS,GAAa,EAAK,QAAU,QACzC,GAAIA,IAAS,GAChB,OAAOF,EAAK,UACZ,OAAOA,EAAK,WACP,GAAIE,IAAS,GAAqB,CACvC,GAAM,CAAE,QAAO,YAAaT,EAAcE,EAAOZ,CAAK,EACtD,OAAOiB,EAAK,UACRG,IAAU,IAAA,GAAW,OAAOH,EAAK,MAChC,EAAK,MAAQG,EAClB,GAASC,EAAW,CACtB,MAAO,GAAIF,IAAS,GAGlB,GAAST,EAAcE,EAAOZ,CAAK,CAAC,CAAC,SAAW,OAC3C,GACJmB,GAAQ,IAAyBA,GAAQ,IACzCA,GAAQ,IAA2BA,GAAQ,GAC5C,CACA,IAAMG,EAAYzB,EAAiBsB,GACnC,OAAOF,EAAK,MACRK,IAAc,IAAA,GAAW,OAAOL,EAAK,UACpC,EAAK,UAAYK,CACxB,MAGGH,GAAQ,IAAoBA,GAAQ,IACpCA,GAAQ,KAA2BA,GAAQ,OAE5C,EAAK,QAAU,GAEnB,CACA,OAAOF,CACT,CAEA,SAASM,EAAO,EAAc,EAAkC,CAC9D,MAAO,CACL,OACA,GAAIC,EAAW,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAWA,EAAW,SAAU,EAChF,GAAIA,EAAW,QAAU,IAAA,GAAY,CAAC,EAAI,CAAE,MAAOA,EAAW,KAAM,EACpE,GAAIA,EAAW,KAAO,CAAE,KAAM,EAAK,EAAI,CAAC,EACxC,GAAIA,EAAW,MAAQ,CAAE,MAAO,EAAK,EAAI,CAAC,EAC1C,GAAIA,EAAW,OAAS,CAAE,OAAQ,EAAK,EAAI,CAAC,EAC5C,GAAIA,EAAW,UAAY,CAAE,UAAW,EAAK,EAAI,CAAC,EAClD,GAAIA,EAAW,QAAU,CAAE,QAAS,EAAK,EAAI,CAAC,CAChD,CACF,CAGA,SAAgBC,EAAU,EAA0B,CAClD,IAAMC,EAAoB,CAAC,EACvBF,EAAa1B,EAAM,EACnB6B,EAAS,EACb,EAAa,UAAY,EACzB,IAAIC,EAAQhC,EAAa,KAAKiC,CAAI,EAClC,KAAOD,IAAU,MACXA,EAAM,MAAQD,GAAQD,EAAM,KAAKH,EAAOM,EAAK,MAAMF,EAAQC,EAAM,KAAK,EAAGJ,CAAU,CAAC,EACpFI,EAAM,KAAO,MAAW,EAAad,EAASU,EAAYI,EAAM,IAAM,EAAE,GAC5E,EAASA,EAAM,MAAQA,EAAM,EAAE,CAAC,OAChC,EAAQhC,EAAa,KAAKiC,CAAI,EAGhC,OADIF,EAASE,EAAK,QAAQH,EAAM,KAAKH,EAAOM,EAAK,MAAMF,CAAM,EAAGH,CAAU,CAAC,EACpEE,CACT"}
@@ -0,0 +1,6 @@
1
+ import { ClassValue } from "clsx";
2
+ //#region src/lib/cn.d.ts
3
+ /** Merges class lists the shadcn way: conditional joins, then Tailwind conflict resolution. */
4
+ export declare function cn(...inputs: ClassValue[]): string;
5
+ //#endregion
6
+ //# sourceMappingURL=cn.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.d.mts","names":[],"sources":["../../../../../../src/lib/cn.ts"],"mappings":";;;wBAIgB,MAAM,QAAQ"}
@@ -0,0 +1,2 @@
1
+ import{clsx as e}from"clsx";import{twMerge as t}from"tailwind-merge";function n(...n){return t(e(n))}export{n as cn};
2
+ //# sourceMappingURL=cn.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.mjs","names":["cn","inputs","twMerge","clsx"],"sources":["../../../../../../src/lib/cn.ts"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/** Merges class lists the shadcn way: conditional joins, then Tailwind conflict resolution. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"],"mappings":"qEAIA,SAAgBA,EAAG,GAAGC,EAA8B,CAClD,OAAOC,EAAQC,EAAKF,CAAM,CAAC,CAC7B"}
@@ -0,0 +1,14 @@
1
+ //#region src/lib/collapse.d.ts
2
+ export interface CollapsedLines<T> {
3
+ shown: T[];
4
+ /** How many lines the collapse holds back; 0 once expanded or when nothing was clipped. */
5
+ hidden: number;
6
+ }
7
+ /**
8
+ * The first `limit` lines until expanded. Head-only on purpose: a card that
9
+ * shows the tail (a running command) keeps its own slice and reports the
10
+ * count it hid.
11
+ */
12
+ export declare function collapseLines<T>(lines: readonly T[], limit: number, expanded: boolean): CollapsedLines<T>;
13
+ //#endregion
14
+ //# sourceMappingURL=collapse.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collapse.d.mts","names":[],"sources":["../../../../../../src/lib/collapse.ts"],"mappings":";iBAAiB,eAAe;EAC9B,OAAO;;EAEP;;;;;;;wBAQc,cAAc,GAAG,gBAAgB,KAAK,eAAe,oBAAoB,eAAe"}
@@ -0,0 +1,2 @@
1
+ function e(e,t,n){return n||e.length<=t?{shown:[...e],hidden:0}:{shown:e.slice(0,t),hidden:e.length-t}}export{e as collapseLines};
2
+ //# sourceMappingURL=collapse.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collapse.mjs","names":["collapseLines","expanded","lines","limit"],"sources":["../../../../../../src/lib/collapse.ts"],"sourcesContent":["export interface CollapsedLines<T> {\n shown: T[];\n /** How many lines the collapse holds back; 0 once expanded or when nothing was clipped. */\n hidden: number;\n}\n\n/**\n * The first `limit` lines until expanded. Head-only on purpose: a card that\n * shows the tail (a running command) keeps its own slice and reports the\n * count it hid.\n */\nexport function collapseLines<T>(lines: readonly T[], limit: number, expanded: boolean): CollapsedLines<T> {\n if (expanded || lines.length <= limit) return { shown: [...lines], hidden: 0 };\n return { shown: lines.slice(0, limit), hidden: lines.length - limit };\n}\n"],"mappings":"AAWA,SAAgBA,EAAiB,EAAqB,EAAe,EAAsC,CAEzG,OADIC,GAAYC,EAAM,QAAUC,EAAc,CAAE,MAAO,CAAC,GAAGD,CAAK,EAAG,OAAQ,CAAE,EACtE,CAAE,MAAOA,EAAM,MAAM,EAAGC,CAAK,EAAG,OAAQD,EAAM,OAASC,CAAM,CACtE"}
@@ -0,0 +1,2 @@
1
+ function e(e,t){let n=[...t].sort((e,t)=>e.from-t.from||e.to-t.to),r=0;for(let[t,i]of n.entries()){if(!Number.isInteger(i.from)||!Number.isInteger(i.to))throw RangeError(`Editor ranges must use integer offsets`);if(i.from<0||i.to<i.from||i.to>e)throw RangeError(`Editor range ${t} is outside the document`);if(t>0&&i.from<r)throw RangeError(`Editor ranges must not overlap`);r=Math.max(r,i.to)}return n}function t(t,n){return e(t,n)}export{t as boundedEditorEdits,e as boundedEditorRanges};
2
+ //# sourceMappingURL=editorController.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorController.mjs","names":["boundedEditorRanges","ordered","ranges","left","right","previousEnd","index","range","documentLength","boundedEditorEdits","edits"],"sources":["../../../../../../src/lib/editorController.ts"],"sourcesContent":["import type { EditorEdit, EditorTextRange } from '../types/editor';\n\n/** Validate and order offset ranges before they reach CodeMirror. */\nexport function boundedEditorRanges<T extends EditorTextRange>(\n documentLength: number,\n ranges: readonly T[],\n): readonly T[] {\n const ordered = [...ranges].sort((left, right) => left.from - right.from || left.to - right.to);\n let previousEnd = 0;\n\n for (const [index, range] of ordered.entries()) {\n if (!Number.isInteger(range.from) || !Number.isInteger(range.to)) {\n throw new RangeError('Editor ranges must use integer offsets');\n }\n if (range.from < 0 || range.to < range.from || range.to > documentLength) {\n throw new RangeError(`Editor range ${index} is outside the document`);\n }\n if (index > 0 && range.from < previousEnd) {\n throw new RangeError('Editor ranges must not overlap');\n }\n previousEnd = Math.max(previousEnd, range.to);\n }\n\n return ordered;\n}\n\n/** Convert caller edits to the bounded, ordered shape accepted by one transaction. */\nexport function boundedEditorEdits(documentLength: number, edits: readonly EditorEdit[]): readonly EditorEdit[] {\n return boundedEditorRanges(documentLength, edits);\n}\n"],"mappings":"AAGA,SAAgBA,EACd,EACA,EACc,CACd,IAAMC,EAAU,CAAC,GAAGC,CAAM,CAAC,CAAC,MAAM,EAAM,IAAUC,EAAK,KAAOC,EAAM,MAAQD,EAAK,GAAKC,EAAM,EAAE,EAC1FC,EAAc,EAElB,IAAK,GAAM,CAACC,EAAOC,KAAUN,EAAQ,QAAQ,EAAG,CAC9C,GAAI,CAAC,OAAO,UAAUM,EAAM,IAAI,GAAK,CAAC,OAAO,UAAUA,EAAM,EAAE,EAC7D,MAAU,WAAW,wCAAwC,EAE/D,GAAIA,EAAM,KAAO,GAAKA,EAAM,GAAKA,EAAM,MAAQA,EAAM,GAAKC,EACxD,MAAU,WAAW,gBAAgBF,EAAM,yBAAyB,EAEtE,GAAIA,EAAQ,GAAKC,EAAM,KAAOF,EAC5B,MAAU,WAAW,gCAAgC,EAEvD,EAAc,KAAK,IAAIA,EAAaE,EAAM,EAAE,CAC9C,CAEA,OAAON,CACT,CAGA,SAAgBQ,EAAmB,EAAwB,EAAqD,CAC9G,OAAOT,EAAoBQ,EAAgBE,CAAK,CAClD"}
@@ -0,0 +1,21 @@
1
+ import "@codemirror/state";
2
+ //#region src/lib/editorLanguage.d.ts
3
+ /**
4
+ * Which grammar a file gets, and how it arrives.
5
+ *
6
+ * The two halves are apart on purpose. Naming the grammar is a pure lookup a
7
+ * caller can run before deciding anything, and loading it is a dynamic import
8
+ * so a session that only ever opens Markdown never downloads the JavaScript
9
+ * parser. Nothing here imports CodeMirror at runtime: every specifier below is
10
+ * either a type, which erases, or inside an `import()` the bundler splits into
11
+ * its own chunk.
12
+ */
13
+ export type GrammarKey = 'javascript' | 'jsx' | 'typescript' | 'tsx' | 'json' | 'markdown' | 'html' | 'css' | 'python' | 'yaml' | 'shell' | 'toml' | 'dockerfile';
14
+ /**
15
+ * The grammar for a path, or undefined for a file the editor shows as plain
16
+ * text. A name is tried whole before it is tried as a suffix, so
17
+ * `Dockerfile.dev` is a Dockerfile and not a file with a `dev` extension.
18
+ */
19
+ export declare function grammarKeyOf(filePath: string): GrammarKey | undefined;
20
+ //#endregion
21
+ //# sourceMappingURL=editorLanguage.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorLanguage.d.mts","names":[],"sources":["../../../../../../src/lib/editorLanguage.ts"],"mappings":";;;;;;;;;;;;YAcY;;;;;;wBA6DI,aAAa,mBAAmB"}
@@ -0,0 +1,2 @@
1
+ const e={cjs:`javascript`,js:`javascript`,mjs:`javascript`,jsx:`jsx`,cts:`typescript`,mts:`typescript`,ts:`typescript`,tsx:`tsx`,json:`json`,jsonc:`json`,markdown:`markdown`,md:`markdown`,htm:`html`,html:`html`,xhtml:`html`,css:`css`,py:`python`,pyi:`python`,yaml:`yaml`,yml:`yaml`,bash:`shell`,sh:`shell`,zsh:`shell`,toml:`toml`},t={".bashrc":`shell`,".zshrc":`shell`,containerfile:`dockerfile`,dockerfile:`dockerfile`};function n(e){return(e.split(`/`).at(-1)??``).toLowerCase()}function r(r){let i=n(r),a=t[i];if(a!==void 0)return a;let o=i.lastIndexOf(`.`);if(!(o<1))return e[i.slice(o+1)]}async function i(e){let[{StreamLanguage:t},n]=await Promise.all([import(`@codemirror/language`),e()]);return t.define(n)}async function a(e){switch(e){case`javascript`:return(await import(`@codemirror/lang-javascript`)).javascript();case`jsx`:return(await import(`@codemirror/lang-javascript`)).javascript({jsx:!0});case`typescript`:return(await import(`@codemirror/lang-javascript`)).javascript({typescript:!0});case`tsx`:return(await import(`@codemirror/lang-javascript`)).javascript({jsx:!0,typescript:!0});case`json`:return(await import(`@codemirror/lang-json`)).json();case`markdown`:return(await import(`@codemirror/lang-markdown`)).markdown();case`html`:return(await import(`@codemirror/lang-html`)).html();case`css`:return(await import(`@codemirror/lang-css`)).css();case`python`:return(await import(`@codemirror/lang-python`)).python();case`yaml`:return(await import(`@codemirror/lang-yaml`)).yaml();case`shell`:return i(async()=>(await import(`@codemirror/legacy-modes/mode/shell`)).shell);case`toml`:return i(async()=>(await import(`@codemirror/legacy-modes/mode/toml`)).toml);case`dockerfile`:return i(async()=>(await import(`@codemirror/legacy-modes/mode/dockerfile`)).dockerFile)}}export{r as grammarKeyOf,a as loadGrammar};
2
+ //# sourceMappingURL=editorLanguage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorLanguage.mjs","names":["GRAMMAR_BY_EXTENSION","GRAMMAR_BY_FILENAME","basenameOf","filePath","grammarKeyOf","name","named","dot","streamMode","parser","load","StreamLanguage","loadGrammar","key"],"sources":["../../../../../../src/lib/editorLanguage.ts"],"sourcesContent":["import type { StreamParser } from '@codemirror/language';\nimport type { Extension } from '@codemirror/state';\n\n/**\n * Which grammar a file gets, and how it arrives.\n *\n * The two halves are apart on purpose. Naming the grammar is a pure lookup a\n * caller can run before deciding anything, and loading it is a dynamic import\n * so a session that only ever opens Markdown never downloads the JavaScript\n * parser. Nothing here imports CodeMirror at runtime: every specifier below is\n * either a type, which erases, or inside an `import()` the bundler splits into\n * its own chunk.\n */\n\nexport type GrammarKey =\n | 'javascript'\n | 'jsx'\n | 'typescript'\n | 'tsx'\n | 'json'\n | 'markdown'\n | 'html'\n | 'css'\n | 'python'\n | 'yaml'\n | 'shell'\n | 'toml'\n | 'dockerfile';\n\n/** Keyed by lower-case extension without the dot. */\nconst GRAMMAR_BY_EXTENSION: Readonly<Record<string, GrammarKey>> = {\n cjs: 'javascript',\n js: 'javascript',\n mjs: 'javascript',\n jsx: 'jsx',\n cts: 'typescript',\n mts: 'typescript',\n ts: 'typescript',\n tsx: 'tsx',\n json: 'json',\n jsonc: 'json',\n markdown: 'markdown',\n md: 'markdown',\n htm: 'html',\n html: 'html',\n xhtml: 'html',\n css: 'css',\n py: 'python',\n pyi: 'python',\n yaml: 'yaml',\n yml: 'yaml',\n bash: 'shell',\n sh: 'shell',\n zsh: 'shell',\n toml: 'toml',\n};\n\n/** Files a project names rather than suffixes, matched on the whole lower-cased basename. */\nconst GRAMMAR_BY_FILENAME: Readonly<Record<string, GrammarKey>> = {\n '.bashrc': 'shell',\n '.zshrc': 'shell',\n containerfile: 'dockerfile',\n dockerfile: 'dockerfile',\n};\n\n/** The last segment of a path, lower-cased. */\nfunction basenameOf(filePath: string): string {\n return (filePath.split('/').at(-1) ?? '').toLowerCase();\n}\n\n/**\n * The grammar for a path, or undefined for a file the editor shows as plain\n * text. A name is tried whole before it is tried as a suffix, so\n * `Dockerfile.dev` is a Dockerfile and not a file with a `dev` extension.\n */\nexport function grammarKeyOf(filePath: string): GrammarKey | undefined {\n const name = basenameOf(filePath);\n const named = GRAMMAR_BY_FILENAME[name];\n if (named !== undefined) return named;\n const dot = name.lastIndexOf('.');\n if (dot < 1) return undefined;\n return GRAMMAR_BY_EXTENSION[name.slice(dot + 1)];\n}\n\n/** A legacy stream mode wrapped as a language; the modes predate Lezer and ship as tokenizers. */\nasync function streamMode(load: () => Promise<StreamParser<unknown>>): Promise<Extension> {\n const [{ StreamLanguage }, parser] = await Promise.all([import('@codemirror/language'), load()]);\n return StreamLanguage.define(parser);\n}\n\n/** Downloads one grammar. Each arm is its own chunk, so the cost is the languages actually opened. */\nexport async function loadGrammar(key: GrammarKey): Promise<Extension> {\n switch (key) {\n case 'javascript':\n return (await import('@codemirror/lang-javascript')).javascript();\n case 'jsx':\n return (await import('@codemirror/lang-javascript')).javascript({ jsx: true });\n case 'typescript':\n return (await import('@codemirror/lang-javascript')).javascript({ typescript: true });\n case 'tsx':\n return (await import('@codemirror/lang-javascript')).javascript({ jsx: true, typescript: true });\n case 'json':\n return (await import('@codemirror/lang-json')).json();\n case 'markdown':\n return (await import('@codemirror/lang-markdown')).markdown();\n case 'html':\n return (await import('@codemirror/lang-html')).html();\n case 'css':\n return (await import('@codemirror/lang-css')).css();\n case 'python':\n return (await import('@codemirror/lang-python')).python();\n case 'yaml':\n return (await import('@codemirror/lang-yaml')).yaml();\n case 'shell':\n return streamMode(async () => (await import('@codemirror/legacy-modes/mode/shell')).shell);\n case 'toml':\n return streamMode(async () => (await import('@codemirror/legacy-modes/mode/toml')).toml);\n case 'dockerfile':\n return streamMode(async () => (await import('@codemirror/legacy-modes/mode/dockerfile')).dockerFile);\n }\n}\n"],"mappings":"AA8BA,MAAMA,EAA6D,CACjE,IAAK,aACL,GAAI,aACJ,IAAK,aACL,IAAK,MACL,IAAK,aACL,IAAK,aACL,GAAI,aACJ,IAAK,MACL,KAAM,OACN,MAAO,OACP,SAAU,WACV,GAAI,WACJ,IAAK,OACL,KAAM,OACN,MAAO,OACP,IAAK,MACL,GAAI,SACJ,IAAK,SACL,KAAM,OACN,IAAK,OACL,KAAM,QACN,GAAI,QACJ,IAAK,QACL,KAAM,MACR,EAGMC,EAA4D,CAChE,UAAW,QACX,SAAU,QACV,cAAe,aACf,WAAY,YACd,EAGA,SAASC,EAAW,EAA0B,CAC5C,OAAQC,EAAS,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAK,GAAA,CAAI,YAAY,CACxD,CAOA,SAAgBC,EAAa,EAA0C,CACrE,IAAMC,EAAOH,EAAWC,CAAQ,EAC1BG,EAAQL,EAAoBI,GAClC,GAAIC,IAAU,IAAA,GAAW,OAAOA,EAChC,IAAMC,EAAMF,EAAK,YAAY,GAAG,EAChC,GAAI,IAAM,GACV,OAAOL,EAAqBK,EAAK,MAAME,EAAM,CAAC,EAChD,CAGA,eAAeC,EAAW,EAAgE,CACxF,GAAM,CAAC,CAAE,kBAAkBC,GAAU,MAAM,QAAQ,IAAI,CAAC,OAAO,wBAAyBC,EAAK,CAAC,CAAC,EAC/F,OAAOC,EAAe,OAAOF,CAAM,CACrC,CAGA,eAAsBG,EAAY,EAAqC,CACrE,OAAQC,EAAR,CACE,IAAK,aACH,OAAQ,MAAM,OAAO,+BAAA,CAAgC,WAAW,EAClE,IAAK,MACH,OAAQ,MAAM,OAAO,+BAAA,CAAgC,WAAW,CAAE,IAAK,EAAK,CAAC,EAC/E,IAAK,aACH,OAAQ,MAAM,OAAO,+BAAA,CAAgC,WAAW,CAAE,WAAY,EAAK,CAAC,EACtF,IAAK,MACH,OAAQ,MAAM,OAAO,+BAAA,CAAgC,WAAW,CAAE,IAAK,GAAM,WAAY,EAAK,CAAC,EACjG,IAAK,OACH,OAAQ,MAAM,OAAO,yBAAA,CAA0B,KAAK,EACtD,IAAK,WACH,OAAQ,MAAM,OAAO,6BAAA,CAA8B,SAAS,EAC9D,IAAK,OACH,OAAQ,MAAM,OAAO,yBAAA,CAA0B,KAAK,EACtD,IAAK,MACH,OAAQ,MAAM,OAAO,wBAAA,CAAyB,IAAI,EACpD,IAAK,SACH,OAAQ,MAAM,OAAO,2BAAA,CAA4B,OAAO,EAC1D,IAAK,OACH,OAAQ,MAAM,OAAO,yBAAA,CAA0B,KAAK,EACtD,IAAK,QACH,OAAOL,EAAW,UAAa,MAAM,OAAO,uCAAA,CAAwC,KAAK,EAC3F,IAAK,OACH,OAAOA,EAAW,UAAa,MAAM,OAAO,sCAAA,CAAuC,IAAI,EACzF,IAAK,aACH,OAAOA,EAAW,UAAa,MAAM,OAAO,4CAAA,CAA6C,UAAU,CACvG,CACF"}
@@ -0,0 +1,76 @@
1
+ //#region src/lib/editorTheme.d.ts
2
+ /**
3
+ * The syntax colours, named by what they mark rather than by tag, so the
4
+ * pairing with Lezer's tags stays next to the editor that imports them and
5
+ * this table can be read as a palette.
6
+ */
7
+ export declare const DOOM_SYNTAX_STYLES: {
8
+ readonly comment: {
9
+ readonly color: 'var(--doom-faint)';
10
+ readonly fontStyle: 'italic';
11
+ };
12
+ readonly keyword: {
13
+ readonly color: 'var(--doom-magenta)';
14
+ };
15
+ readonly constant: {
16
+ readonly color: 'var(--doom-violet)';
17
+ };
18
+ readonly literal: {
19
+ readonly color: 'var(--doom-orange)';
20
+ };
21
+ readonly string: {
22
+ readonly color: 'var(--doom-green)';
23
+ };
24
+ readonly regexp: {
25
+ readonly color: 'var(--doom-teal)';
26
+ };
27
+ readonly operator: {
28
+ readonly color: 'var(--doom-blue)';
29
+ };
30
+ readonly punctuation: {
31
+ readonly color: 'var(--doom-dim)';
32
+ };
33
+ readonly variable: {
34
+ readonly color: 'var(--doom-text)';
35
+ };
36
+ readonly property: {
37
+ readonly color: 'var(--doom-cyan)';
38
+ };
39
+ readonly callable: {
40
+ readonly color: 'var(--doom-blue)';
41
+ };
42
+ readonly type: {
43
+ readonly color: 'var(--doom-yellow)';
44
+ };
45
+ readonly tag: {
46
+ readonly color: 'var(--doom-red)';
47
+ };
48
+ readonly attribute: {
49
+ readonly color: 'var(--doom-yellow)';
50
+ };
51
+ readonly meta: {
52
+ readonly color: 'var(--doom-faint)';
53
+ };
54
+ readonly heading: {
55
+ readonly color: 'var(--doom-hi)';
56
+ readonly fontWeight: 'bold';
57
+ };
58
+ readonly link: {
59
+ readonly color: 'var(--doom-cyan)';
60
+ readonly textDecoration: 'underline';
61
+ };
62
+ readonly emphasis: {
63
+ readonly fontStyle: 'italic';
64
+ };
65
+ readonly strong: {
66
+ readonly fontWeight: 'bold';
67
+ };
68
+ readonly strikethrough: {
69
+ readonly textDecoration: 'line-through';
70
+ };
71
+ readonly invalid: {
72
+ readonly color: 'var(--doom-red)';
73
+ };
74
+ };
75
+ //#endregion
76
+ //# sourceMappingURL=editorTheme.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorTheme.d.mts","names":[],"sources":["../../../../../../src/lib/editorTheme.ts"],"mappings":";;;;;;qBA8Ga;WACX;aAAW;aAA4B;;WACvC;aAAW;;WACX;aAAY;;WACZ;aAAW;;WACX;aAAU;;WACV;aAAU;;WACV;aAAY;;WACZ;aAAe;;WACf;aAAY;;WACZ;aAAY;;WACZ;aAAY;;WACZ;aAAQ;;WACR;aAAO;;WACP;aAAa;;WACb;aAAQ;;WACR;aAAW;aAAyB;;WACpC;aAAQ;aAA2B;;WACnC;aAAY;;WACZ;aAAU;;WACV;aAAiB;;WACjB;aAAW"}
@@ -0,0 +1,2 @@
1
+ const e={"&":{color:`var(--doom-text)`,backgroundColor:`var(--doom-deep)`,fontSize:`12px`,height:`100%`},".cm-scroller":{fontFamily:`var(--doom-font-mono)`,lineHeight:`1.5`},".cm-content":{caretColor:`var(--doom-blue)`,padding:`8px 0`},".cm-cursor, .cm-dropCursor":{borderLeftColor:`var(--doom-blue)`,borderLeftWidth:`2px`},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:`var(--doom-selected)`},".cm-gutters":{backgroundColor:`var(--doom-deep)`,color:`var(--doom-faint)`,borderRight:`1px solid var(--doom-border-soft)`},".cm-activeLine":{backgroundColor:`var(--doom-panel)`},".cm-activeLineGutter":{backgroundColor:`var(--doom-panel)`,color:`var(--doom-dim)`},".cm-foldPlaceholder":{backgroundColor:`var(--doom-panel)`,border:`1px solid var(--doom-border)`,color:`var(--doom-dim)`},".cm-searchMatch":{backgroundColor:`var(--doom-tint-yellow)`,outline:`1px solid var(--doom-edge-yellow)`},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:`var(--doom-tint-orange)`},".cm-selectionMatch":{backgroundColor:`var(--doom-tint-blue)`},".cm-closed-tone":{backgroundColor:`var(--doom-tint-green)`,textDecoration:`line-through`,textDecorationColor:`var(--doom-edge-green)`},".cm-matchingBracket, &.cm-focused .cm-matchingBracket":{backgroundColor:`var(--doom-tint-green)`,outline:`1px solid var(--doom-edge-green)`},".cm-nonmatchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:`var(--doom-tint-red)`},".cm-panels":{backgroundColor:`var(--doom-panel)`,color:`var(--doom-text)`,fontFamily:`var(--font-sans)`,fontSize:`12px`},".cm-panels.cm-panels-bottom":{borderTop:`1px solid var(--doom-border)`},".cm-panels.cm-panels-top":{borderBottom:`1px solid var(--doom-border)`},".cm-panel input, .cm-panel button, .cm-panel select":{backgroundColor:`var(--doom-deep)`,color:`var(--doom-text)`,border:`1px solid var(--doom-border)`,borderRadius:`2px`,fontSize:`12px`},".cm-panel input":{fontFamily:`var(--doom-font-mono)`},".cm-tooltip":{backgroundColor:`var(--doom-panel)`,border:`1px solid var(--doom-border)`,color:`var(--doom-text)`}},t={comment:{color:`var(--doom-faint)`,fontStyle:`italic`},keyword:{color:`var(--doom-magenta)`},constant:{color:`var(--doom-violet)`},literal:{color:`var(--doom-orange)`},string:{color:`var(--doom-green)`},regexp:{color:`var(--doom-teal)`},operator:{color:`var(--doom-blue)`},punctuation:{color:`var(--doom-dim)`},variable:{color:`var(--doom-text)`},property:{color:`var(--doom-cyan)`},callable:{color:`var(--doom-blue)`},type:{color:`var(--doom-yellow)`},tag:{color:`var(--doom-red)`},attribute:{color:`var(--doom-yellow)`},meta:{color:`var(--doom-faint)`},heading:{color:`var(--doom-hi)`,fontWeight:`bold`},link:{color:`var(--doom-cyan)`,textDecoration:`underline`},emphasis:{fontStyle:`italic`},strong:{fontWeight:`bold`},strikethrough:{textDecoration:`line-through`},invalid:{color:`var(--doom-red)`}};export{e as DOOM_EDITOR_STYLES,t as DOOM_SYNTAX_STYLES};
2
+ //# sourceMappingURL=editorTheme.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorTheme.mjs","names":["DOOM_EDITOR_STYLES","DOOM_SYNTAX_STYLES"],"sources":["../../../../../../src/lib/editorTheme.ts"],"sourcesContent":["/**\n * The editor's colours, as plain data.\n *\n * Every value is a CSS custom property rather than a resolved colour, which is\n * what lets a theme swap recolour a mounted editor by rewriting `:root`\n * instead of tearing the editor down and rebuilding it. It is also why this is\n * data and not a built CodeMirror extension: nothing here imports an editor,\n * so a caller pays for the styles only inside the chunk that draws them.\n */\n\n/** The chrome: the surface, the gutter, the cursor, the selection, and the search panel. */\nexport const DOOM_EDITOR_STYLES: Readonly<Record<string, Readonly<Record<string, string>>>> = {\n '&': {\n color: 'var(--doom-text)',\n backgroundColor: 'var(--doom-deep)',\n fontSize: '12px',\n height: '100%',\n },\n '.cm-scroller': {\n fontFamily: 'var(--doom-font-mono)',\n lineHeight: '1.5',\n },\n '.cm-content': {\n caretColor: 'var(--doom-blue)',\n padding: '8px 0',\n },\n '.cm-cursor, .cm-dropCursor': {\n borderLeftColor: 'var(--doom-blue)',\n borderLeftWidth: '2px',\n },\n // CodeMirror draws its own selection layer when the editor has focus and\n // leans on the native one when it does not, so both need saying or a\n // selection vanishes the moment a reader clicks the comment box.\n '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: 'var(--doom-selected)',\n },\n '.cm-gutters': {\n backgroundColor: 'var(--doom-deep)',\n color: 'var(--doom-faint)',\n borderRight: '1px solid var(--doom-border-soft)',\n },\n '.cm-activeLine': {\n backgroundColor: 'var(--doom-panel)',\n },\n '.cm-activeLineGutter': {\n backgroundColor: 'var(--doom-panel)',\n color: 'var(--doom-dim)',\n },\n '.cm-foldPlaceholder': {\n backgroundColor: 'var(--doom-panel)',\n border: '1px solid var(--doom-border)',\n color: 'var(--doom-dim)',\n },\n '.cm-searchMatch': {\n backgroundColor: 'var(--doom-tint-yellow)',\n outline: '1px solid var(--doom-edge-yellow)',\n },\n '.cm-searchMatch.cm-searchMatch-selected': {\n backgroundColor: 'var(--doom-tint-orange)',\n },\n '.cm-selectionMatch': {\n backgroundColor: 'var(--doom-tint-blue)',\n },\n '.cm-closed-tone': {\n backgroundColor: 'var(--doom-tint-green)',\n textDecoration: 'line-through',\n textDecorationColor: 'var(--doom-edge-green)',\n },\n '.cm-matchingBracket, &.cm-focused .cm-matchingBracket': {\n backgroundColor: 'var(--doom-tint-green)',\n outline: '1px solid var(--doom-edge-green)',\n },\n '.cm-nonmatchingBracket, &.cm-focused .cm-nonmatchingBracket': {\n backgroundColor: 'var(--doom-tint-red)',\n },\n // Search and replace chrome reads as UI; only what is typed into it is literal.\n '.cm-panels': {\n backgroundColor: 'var(--doom-panel)',\n color: 'var(--doom-text)',\n fontFamily: 'var(--font-sans)',\n fontSize: '12px',\n },\n '.cm-panels.cm-panels-bottom': {\n borderTop: '1px solid var(--doom-border)',\n },\n '.cm-panels.cm-panels-top': {\n borderBottom: '1px solid var(--doom-border)',\n },\n '.cm-panel input, .cm-panel button, .cm-panel select': {\n backgroundColor: 'var(--doom-deep)',\n color: 'var(--doom-text)',\n border: '1px solid var(--doom-border)',\n borderRadius: '2px',\n fontSize: '12px',\n },\n '.cm-panel input': {\n fontFamily: 'var(--doom-font-mono)',\n },\n '.cm-tooltip': {\n backgroundColor: 'var(--doom-panel)',\n border: '1px solid var(--doom-border)',\n color: 'var(--doom-text)',\n },\n};\n\n/**\n * The syntax colours, named by what they mark rather than by tag, so the\n * pairing with Lezer's tags stays next to the editor that imports them and\n * this table can be read as a palette.\n */\nexport const DOOM_SYNTAX_STYLES = {\n comment: { color: 'var(--doom-faint)', fontStyle: 'italic' },\n keyword: { color: 'var(--doom-magenta)' },\n constant: { color: 'var(--doom-violet)' },\n literal: { color: 'var(--doom-orange)' },\n string: { color: 'var(--doom-green)' },\n regexp: { color: 'var(--doom-teal)' },\n operator: { color: 'var(--doom-blue)' },\n punctuation: { color: 'var(--doom-dim)' },\n variable: { color: 'var(--doom-text)' },\n property: { color: 'var(--doom-cyan)' },\n callable: { color: 'var(--doom-blue)' },\n type: { color: 'var(--doom-yellow)' },\n tag: { color: 'var(--doom-red)' },\n attribute: { color: 'var(--doom-yellow)' },\n meta: { color: 'var(--doom-faint)' },\n heading: { color: 'var(--doom-hi)', fontWeight: 'bold' },\n link: { color: 'var(--doom-cyan)', textDecoration: 'underline' },\n emphasis: { fontStyle: 'italic' },\n strong: { fontWeight: 'bold' },\n strikethrough: { textDecoration: 'line-through' },\n invalid: { color: 'var(--doom-red)' },\n} as const;\n"],"mappings":"AAWA,MAAaA,EAAiF,CAC5F,IAAK,CACH,MAAO,mBACP,gBAAiB,mBACjB,SAAU,OACV,OAAQ,MACV,EACA,eAAgB,CACd,WAAY,wBACZ,WAAY,KACd,EACA,cAAe,CACb,WAAY,mBACZ,QAAS,OACX,EACA,6BAA8B,CAC5B,gBAAiB,mBACjB,gBAAiB,KACnB,EAIA,yFAA0F,CACxF,gBAAiB,sBACnB,EACA,cAAe,CACb,gBAAiB,mBACjB,MAAO,oBACP,YAAa,mCACf,EACA,iBAAkB,CAChB,gBAAiB,mBACnB,EACA,uBAAwB,CACtB,gBAAiB,oBACjB,MAAO,iBACT,EACA,sBAAuB,CACrB,gBAAiB,oBACjB,OAAQ,+BACR,MAAO,iBACT,EACA,kBAAmB,CACjB,gBAAiB,0BACjB,QAAS,mCACX,EACA,0CAA2C,CACzC,gBAAiB,yBACnB,EACA,qBAAsB,CACpB,gBAAiB,uBACnB,EACA,kBAAmB,CACjB,gBAAiB,yBACjB,eAAgB,eAChB,oBAAqB,wBACvB,EACA,wDAAyD,CACvD,gBAAiB,yBACjB,QAAS,kCACX,EACA,8DAA+D,CAC7D,gBAAiB,sBACnB,EAEA,aAAc,CACZ,gBAAiB,oBACjB,MAAO,mBACP,WAAY,mBACZ,SAAU,MACZ,EACA,8BAA+B,CAC7B,UAAW,8BACb,EACA,2BAA4B,CAC1B,aAAc,8BAChB,EACA,sDAAuD,CACrD,gBAAiB,mBACjB,MAAO,mBACP,OAAQ,+BACR,aAAc,MACd,SAAU,MACZ,EACA,kBAAmB,CACjB,WAAY,uBACd,EACA,cAAe,CACb,gBAAiB,oBACjB,OAAQ,+BACR,MAAO,kBACT,CACF,EAOaC,EAAqB,CAChC,QAAS,CAAE,MAAO,oBAAqB,UAAW,QAAS,EAC3D,QAAS,CAAE,MAAO,qBAAsB,EACxC,SAAU,CAAE,MAAO,oBAAqB,EACxC,QAAS,CAAE,MAAO,oBAAqB,EACvC,OAAQ,CAAE,MAAO,mBAAoB,EACrC,OAAQ,CAAE,MAAO,kBAAmB,EACpC,SAAU,CAAE,MAAO,kBAAmB,EACtC,YAAa,CAAE,MAAO,iBAAkB,EACxC,SAAU,CAAE,MAAO,kBAAmB,EACtC,SAAU,CAAE,MAAO,kBAAmB,EACtC,SAAU,CAAE,MAAO,kBAAmB,EACtC,KAAM,CAAE,MAAO,oBAAqB,EACpC,IAAK,CAAE,MAAO,iBAAkB,EAChC,UAAW,CAAE,MAAO,oBAAqB,EACzC,KAAM,CAAE,MAAO,mBAAoB,EACnC,QAAS,CAAE,MAAO,iBAAkB,WAAY,MAAO,EACvD,KAAM,CAAE,MAAO,mBAAoB,eAAgB,WAAY,EAC/D,SAAU,CAAE,UAAW,QAAS,EAChC,OAAQ,CAAE,WAAY,MAAO,EAC7B,cAAe,CAAE,eAAgB,cAAe,EAChD,QAAS,CAAE,MAAO,iBAAkB,CACtC"}
@@ -0,0 +1,2 @@
1
+ import{grammarKeyOf as e}from"./editorLanguage.mjs";const t=`mermaid`,n={javascript:`javascript`,typescript:`typescript`,python:`python`,shell:`shell`,console:`shell`,docker:`dockerfile`};function r(e){return/(?:^|\s)language-(\S+)/.exec(e??``)?.[1]?.toLowerCase()}function i(t){if(t===void 0||t.length===0)return;let r=n[t];return r===void 0?e(t)??e(`fence.${t}`):r}export{t as MERMAID_LANGUAGE,i as fenceGrammarOf,r as fenceLanguageOf};
2
+ //# sourceMappingURL=fenceGrammar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fenceGrammar.mjs","names":["MERMAID_LANGUAGE","GRAMMAR_BY_WORD","fenceLanguageOf","className","fenceGrammarOf","language","word","grammarKeyOf"],"sources":["../../../../../../src/lib/fenceGrammar.ts"],"sourcesContent":["import { type GrammarKey, grammarKeyOf } from './editorLanguage';\n\n/**\n * What a fenced code block's info string means.\n *\n * A fence names its language the way a person writes it in a message, so\n * `ts`, `typescript` and `tsx` all arrive and all mean something. The file\n * lookup in `editorLanguage.ts` already answers for every spelling that is\n * also an extension, so this module only carries the words that are not one\n * and leaves the rest to it. A name with no grammar is not an error: the block\n * renders as plain text, which is what it would have done anyway.\n */\n\n/** The one fence that is a picture rather than code. */\nexport const MERMAID_LANGUAGE = 'mermaid';\n\n/** Spellings a fence uses that no filename would. */\nconst GRAMMAR_BY_WORD: Readonly<Record<string, GrammarKey>> = {\n javascript: 'javascript',\n typescript: 'typescript',\n python: 'python',\n shell: 'shell',\n console: 'shell',\n docker: 'dockerfile',\n};\n\n/**\n * The language a fence declares, lower-cased, or undefined for a bare fence.\n *\n * react-markdown hands the info string down as a `language-*` class, and a\n * fence may carry metadata after the language (```` ```ts title=x ````), which\n * is not part of the name.\n */\nexport function fenceLanguageOf(className: string | undefined): string | undefined {\n const match = /(?:^|\\s)language-(\\S+)/.exec(className ?? '');\n return match?.[1]?.toLowerCase();\n}\n\n/** The grammar to colour a fence with, or undefined to leave it plain. */\nexport function fenceGrammarOf(language: string | undefined): GrammarKey | undefined {\n if (language === undefined || language.length === 0) return undefined;\n const word = GRAMMAR_BY_WORD[language];\n if (word !== undefined) return word;\n // A fence that names an extension is the same lookup a file gets, and one\n // that names a whole file, like `dockerfile`, is tried as that name first.\n return grammarKeyOf(language) ?? grammarKeyOf(`fence.${language}`);\n}\n"],"mappings":"oDAcA,MAAaA,EAAmB,UAG1BC,EAAwD,CAC5D,WAAY,aACZ,WAAY,aACZ,OAAQ,SACR,MAAO,QACP,QAAS,QACT,OAAQ,YACV,EASA,SAAgBC,EAAgB,EAAmD,CAEjF,MADc,yBAAyB,KAAKC,GAAa,EAC9C,CAAC,GAAG,EAAE,EAAE,YAAY,CACjC,CAGA,SAAgBC,EAAe,EAAsD,CACnF,GAAIC,IAAa,IAAA,IAAaA,EAAS,SAAW,EAAG,OACrD,IAAMC,EAAOL,EAAgBI,GAI7B,OAHIC,IAAS,IAAA,GAGNC,EAAaF,CAAQ,GAAKE,EAAa,SAASF,GAAU,EAHlCC,CAIjC"}
@@ -0,0 +1,30 @@
1
+ import { PresentedLine } from "./hashlineView.mjs";
2
+ //#region src/lib/hashlineHighlight.d.ts
3
+ /**
4
+ * Grouping for highlighted hashline bodies.
5
+ *
6
+ * A read result is one file and a grep result is many, so the lines a card
7
+ * shows have to be cut into runs that belong to the same file before any of
8
+ * them can be parsed. A run is parsed whole because a string or a comment
9
+ * spans lines, and grep's gaps between context blocks are accepted: an excerpt
10
+ * is not the file, and colouring it as if it were is close enough to be worth
11
+ * far more than colouring nothing.
12
+ */
13
+ export interface HashlineGroup {
14
+ /** The file the run came from, when the body named one. */
15
+ readonly path: string | undefined;
16
+ /** Indices into the presented lines, in order, that this run covers. */
17
+ readonly indices: readonly number[];
18
+ /** The run's content, newline-joined, ready to parse. */
19
+ readonly text: string;
20
+ }
21
+ /**
22
+ * Consecutive anchored lines, cut at every file heading and at anything that
23
+ * is not code. `fallbackPath` names the file for a body that never states one,
24
+ * which is how a read result arrives.
25
+ */
26
+ export declare function hashlineGroups(lines: readonly PresentedLine[], fallbackPath: string | undefined): readonly HashlineGroup[];
27
+ /** One string that changes whenever the groups would highlight differently. */
28
+ export declare function hashlineGroupsKey(groups: readonly HashlineGroup[]): string;
29
+ //#endregion
30
+ //# sourceMappingURL=hashlineHighlight.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashlineHighlight.d.mts","names":[],"sources":["../../../../../../src/lib/hashlineHighlight.ts"],"mappings":";;;;;;;;;;;;iBAaiB;;WAEN;;WAEA;;WAEA;;;;;;;wBAQK,eACd,gBAAgB,iBAChB,4CACU;;wBA2BI,kBAAkB,iBAAiB"}
@@ -0,0 +1,3 @@
1
+ function e(e,t){let n=[],r=t,i=[],a=[],o=()=>{i.length>0&&n.push({path:r,indices:i,text:a.join(`
2
+ `)}),i=[],a=[]};for(let[t,n]of e.entries()){if(n.type===`tagged`){i.push(t),a.push(n.value.content);continue}o(),n.type===`file`&&(r=n.path)}return o(),n}function t(e){return e.map(e=>`${e.path??``}\u0000${e.text}`).join(``)}export{e as hashlineGroups,t as hashlineGroupsKey};
3
+ //# sourceMappingURL=hashlineHighlight.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashlineHighlight.mjs","names":["hashlineGroups","groups","path","fallbackPath","indices","texts","flush","index","line","lines","hashlineGroupsKey","group"],"sources":["../../../../../../src/lib/hashlineHighlight.ts"],"sourcesContent":["import type { PresentedLine } from './hashlineView';\n\n/**\n * Grouping for highlighted hashline bodies.\n *\n * A read result is one file and a grep result is many, so the lines a card\n * shows have to be cut into runs that belong to the same file before any of\n * them can be parsed. A run is parsed whole because a string or a comment\n * spans lines, and grep's gaps between context blocks are accepted: an excerpt\n * is not the file, and colouring it as if it were is close enough to be worth\n * far more than colouring nothing.\n */\n\nexport interface HashlineGroup {\n /** The file the run came from, when the body named one. */\n readonly path: string | undefined;\n /** Indices into the presented lines, in order, that this run covers. */\n readonly indices: readonly number[];\n /** The run's content, newline-joined, ready to parse. */\n readonly text: string;\n}\n\n/**\n * Consecutive anchored lines, cut at every file heading and at anything that\n * is not code. `fallbackPath` names the file for a body that never states one,\n * which is how a read result arrives.\n */\nexport function hashlineGroups(\n lines: readonly PresentedLine[],\n fallbackPath: string | undefined,\n): readonly HashlineGroup[] {\n const groups: HashlineGroup[] = [];\n let path = fallbackPath;\n let indices: number[] = [];\n let texts: string[] = [];\n\n const flush = (): void => {\n if (indices.length > 0) groups.push({ path, indices, text: texts.join('\\n') });\n indices = [];\n texts = [];\n };\n\n for (const [index, line] of lines.entries()) {\n if (line.type === 'tagged') {\n indices.push(index);\n texts.push(line.value.content);\n continue;\n }\n flush();\n // A heading opens the next file; a plain line is prose between runs.\n if (line.type === 'file') path = line.path;\n }\n flush();\n return groups;\n}\n\n/** One string that changes whenever the groups would highlight differently. */\nexport function hashlineGroupsKey(groups: readonly HashlineGroup[]): string {\n return groups.map((group) => `${group.path ?? ''}\\u0000${group.text}`).join('\\u0001');\n}\n"],"mappings":"AA2BA,SAAgBA,EACd,EACA,EAC0B,CAC1B,IAAMC,EAA0B,CAAC,EAC7BC,EAAOC,EACPC,EAAoB,CAAC,EACrBC,EAAkB,CAAC,EAEjBC,MAAoB,CACpBF,EAAQ,OAAS,GAAGH,EAAO,KAAK,CAAE,OAAM,UAAS,KAAMI,EAAM,KAAK;CAAI,CAAE,CAAC,EAC7E,EAAU,CAAC,EACX,EAAQ,CAAC,CACX,EAEA,IAAK,GAAM,CAACE,EAAOC,KAASC,EAAM,QAAQ,EAAG,CAC3C,GAAID,EAAK,OAAS,SAAU,CAC1BJ,EAAQ,KAAKG,CAAK,EAClBF,EAAM,KAAKG,EAAK,MAAM,OAAO,EAC7B,QACF,CACAF,EAAM,EAEFE,EAAK,OAAS,SAAQ,EAAOA,EAAK,KACxC,CAEA,OADAF,EAAM,EACCL,CACT,CAGA,SAAgBS,EAAkB,EAA0C,CAC1E,OAAOT,EAAO,IAAK,GAAU,GAAGU,EAAM,MAAQ,GAAG,QAAQA,EAAM,MAAM,CAAC,CAAC,KAAK,GAAQ,CACtF"}
@@ -0,0 +1,60 @@
1
+ //#region src/lib/hashlineView.d.ts
2
+ export declare const READ_COLLAPSED_LINES = 10;
3
+ export declare const GREP_COLLAPSED_LINES = 15;
4
+ export type HashlineResultKind = 'read' | 'grep';
5
+ export type TaggedLineMarker = 'match' | 'context';
6
+ /**
7
+ * The part of a tool result this parser reads.
8
+ *
9
+ * Named structurally rather than imported: the component library sits below
10
+ * the web contract and must not depend on it, so it states the shape it needs
11
+ * and any `ToolResultView` satisfies it.
12
+ */
13
+ export interface HashlineResult {
14
+ readonly content: readonly unknown[];
15
+ }
16
+ export interface TaggedLine {
17
+ readonly line: number;
18
+ readonly content: string;
19
+ readonly marker: TaggedLineMarker | undefined;
20
+ }
21
+ export type PresentedLine = {
22
+ readonly type: 'file';
23
+ readonly path: string;
24
+ } | {
25
+ readonly type: 'tagged';
26
+ readonly value: TaggedLine;
27
+ } | {
28
+ readonly type: 'plain';
29
+ readonly text: string;
30
+ };
31
+ export interface HashlineBody {
32
+ readonly shown: readonly PresentedLine[];
33
+ /** Lines the collapsed view holds back; zero once expanded. */
34
+ readonly hidden: number;
35
+ /** The bracketed pagination or compaction note the tool appends after its lines. */
36
+ readonly notice: string | undefined;
37
+ /** Widest line number among the shown anchored lines, in characters. */
38
+ readonly gutter: number;
39
+ }
40
+ /**
41
+ * The result's text as lines: tabs widened, CRLF folded, trailing blanks
42
+ * dropped. A result with no text but an image block reads as the TUI's
43
+ * placeholder. The joined `output` stands in when no result view exists.
44
+ */
45
+ export declare function resultTextLines(result: HashlineResult | null, output: string): string[];
46
+ /** Detaches the tool's trailing `[...]` note so the body numbers file content only. */
47
+ export declare function takeTrailingNotice(lines: string[]): string | undefined;
48
+ export declare function parseTaggedLine(value: string): TaggedLine | undefined;
49
+ export declare function parseFileHeader(value: string): string | undefined;
50
+ /**
51
+ * Lines as the card presents them. A read shows one file, so its header is
52
+ * dropped; a grep groups anchored matches under each file's path.
53
+ */
54
+ export declare function presentHashlineLines(lines: readonly string[], kind: HashlineResultKind): PresentedLine[];
55
+ /** The body a card shows for one result, collapsed to the kind's line budget unless expanded. */
56
+ export declare function hashlineBody(result: HashlineResult | null, output: string, kind: HashlineResultKind, expanded: boolean): HashlineBody;
57
+ /** The `key · key` detail list beside a call's primary argument, with absent values dropped. */
58
+ export declare function compactDetails(values: ReadonlyArray<string | undefined>): string[];
59
+ //#endregion
60
+ //# sourceMappingURL=hashlineView.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashlineView.d.mts","names":[],"sources":["../../../../../../src/lib/hashlineView.ts"],"mappings":";qBAoBa;qBACA;YAED;YACA;;;;;;;;iBASK;WACN;;iBAGM;WACN;WACA;WACA,QAAQ;;YAGP;WACG;WAAuB;;WACvB;WAAyB,OAAO;;WAChC;WAAwB;;iBAEtB;WACN,gBAAgB;;WAEhB;;WAEA;;WAEA;;;;;;;wBAiBK,gBAAgB,QAAQ,uBAAuB;;wBAa/C,mBAAmB;wBAQnB,gBAAgB,gBAAgB;wBAYhC,gBAAgB;;;;;wBAQhB,qBAAqB,0BAA0B,MAAM,qBAAqB;;wBAmB1E,aACd,QAAQ,uBACR,gBACA,MAAM,oBACN,oBACC;;wBAca,eAAe,QAAQ"}
@@ -0,0 +1,6 @@
1
+ import{collapseLines as e}from"./collapse.mjs";const t=/^@file (.+)#([A-Za-z0-9_-]{8})$/u,n=/^(>> | {3})?(\d+)#[a-z]{3}\|(.*)$/u,r=10,i=15;function a(e){return typeof e==`object`&&!!e&&typeof e.type==`string`}function o(e,t){let n=e?.content.filter(a)??[],r=e===null?t:n.flatMap(e=>e.type===`text`?[e.text??``]:[]).join(`
2
+ `);if(r.length===0)return n.some(e=>e.type===`image`)?[`[Image attached]`]:[];let i=r.replaceAll(` `,` `).replaceAll(`\r
3
+ `,`
4
+ `).split(`
5
+ `);for(;i.at(-1)===``;)i.pop();return i}function s(e){let t=e.at(-1);if(t!==void 0&&t.startsWith(`[`)&&t.endsWith(`]`)){for(e.pop();e.at(-1)===``;)e.pop();return t}}function c(e){let t=n.exec(e),r=t?.[2],i=t?.[3];if(r===void 0||i===void 0)return;let a=Number.parseInt(r,10);if(!Number.isSafeInteger(a)||a<1)return;let o=t?.[1];return{line:a,content:i,marker:o===`>> `?`match`:o===` `?`context`:void 0}}function l(e){return t.exec(e)?.[1]}function u(e,t){let n=[];for(let r of e){let e=l(r);if(e!==void 0){t!==`read`&&n.push({type:`file`,path:e});continue}let i=c(r);if(i!==void 0){n.push({type:`tagged`,value:i});continue}n.push({type:`plain`,text:r})}return n}function d(t,n,r,i){let a=o(t,n),c=s(a),l=u(a,r),{shown:d,hidden:f}=e(l,r===`read`?10:15,i);return{shown:d,hidden:f,notice:c,gutter:d.reduce((e,t)=>t.type===`tagged`?Math.max(e,String(t.value.line).length):e,1)}}function f(e){return e.filter(e=>e!==void 0&&e.length>0)}export{i as GREP_COLLAPSED_LINES,r as READ_COLLAPSED_LINES,f as compactDetails,d as hashlineBody,l as parseFileHeader,c as parseTaggedLine,u as presentHashlineLines,o as resultTextLines,s as takeTrailingNotice};
6
+ //# sourceMappingURL=hashlineView.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashlineView.mjs","names":["FILE_HEADER_PATTERN","TAGGED_LINE_PATTERN","READ_COLLAPSED_LINES","GREP_COLLAPSED_LINES","isTextBlock","block","resultTextLines","blocks","result","text","output","lines","takeTrailingNotice","last","parseTaggedLine","match","value","lineText","content","line","prefix","parseFileHeader","presentHashlineLines","presented","path","kind","tagged","hashlineBody","notice","collapseLines","expanded","shown","widest","compactDetails","values"],"sources":["../../../../../../src/lib/hashlineView.ts"],"sourcesContent":["import { collapseLines } from './collapse';\n\n/**\n * The hashline wire format, parsed the way the TUI's hashlineRendering does:\n * `@file path#tag` opens a file, `N#abc|content` is an anchored line, and a\n * `>> ` or three-space prefix marks grep matches and their context.\n *\n * It lives here rather than in each tool package because the read and grep\n * cards render the same bytes and had drifted into byte-identical copies of\n * this module. The patterns are still a transcription of po-hashline: a\n * cockpit plugin may import this library and the web contract, but not a\n * runtime package, so the format is stated twice on purpose and only once per\n * side of that line.\n */\nconst FILE_HEADER_PATTERN = /^@file (.+)#([A-Za-z0-9_-]{8})$/u;\nconst TAGGED_LINE_PATTERN = /^(>> | {3})?(\\d+)#[a-z]{3}\\|(.*)$/u;\nconst MATCH_PREFIX = '>> ';\nconst CONTEXT_PREFIX = ' ';\nconst IMAGE_PLACEHOLDER = '[Image attached]';\n\nexport const READ_COLLAPSED_LINES = 10;\nexport const GREP_COLLAPSED_LINES = 15;\n\nexport type HashlineResultKind = 'read' | 'grep';\nexport type TaggedLineMarker = 'match' | 'context';\n\n/**\n * The part of a tool result this parser reads.\n *\n * Named structurally rather than imported: the component library sits below\n * the web contract and must not depend on it, so it states the shape it needs\n * and any `ToolResultView` satisfies it.\n */\nexport interface HashlineResult {\n readonly content: readonly unknown[];\n}\n\nexport interface TaggedLine {\n readonly line: number;\n readonly content: string;\n readonly marker: TaggedLineMarker | undefined;\n}\n\nexport type PresentedLine =\n | { readonly type: 'file'; readonly path: string }\n | { readonly type: 'tagged'; readonly value: TaggedLine }\n | { readonly type: 'plain'; readonly text: string };\n\nexport interface HashlineBody {\n readonly shown: readonly PresentedLine[];\n /** Lines the collapsed view holds back; zero once expanded. */\n readonly hidden: number;\n /** The bracketed pagination or compaction note the tool appends after its lines. */\n readonly notice: string | undefined;\n /** Widest line number among the shown anchored lines, in characters. */\n readonly gutter: number;\n}\n\ninterface TextBlock {\n readonly type: string;\n readonly text?: string;\n}\n\nfunction isTextBlock(block: unknown): block is TextBlock {\n return typeof block === 'object' && block !== null && typeof (block as TextBlock).type === 'string';\n}\n\n/**\n * The result's text as lines: tabs widened, CRLF folded, trailing blanks\n * dropped. A result with no text but an image block reads as the TUI's\n * placeholder. The joined `output` stands in when no result view exists.\n */\nexport function resultTextLines(result: HashlineResult | null, output: string): string[] {\n const blocks = result?.content.filter(isTextBlock) ?? [];\n const text =\n result === null ? output : blocks.flatMap((block) => (block.type === 'text' ? [block.text ?? ''] : [])).join('\\n');\n if (text.length === 0) {\n return blocks.some((block) => block.type === 'image') ? [IMAGE_PLACEHOLDER] : [];\n }\n const lines = text.replaceAll('\\t', ' ').replaceAll('\\r\\n', '\\n').split('\\n');\n while (lines.at(-1) === '') lines.pop();\n return lines;\n}\n\n/** Detaches the tool's trailing `[...]` note so the body numbers file content only. */\nexport function takeTrailingNotice(lines: string[]): string | undefined {\n const last = lines.at(-1);\n if (last === undefined || !last.startsWith('[') || !last.endsWith(']')) return undefined;\n lines.pop();\n while (lines.at(-1) === '') lines.pop();\n return last;\n}\n\nexport function parseTaggedLine(value: string): TaggedLine | undefined {\n const match = TAGGED_LINE_PATTERN.exec(value);\n const lineText = match?.[2];\n const content = match?.[3];\n if (lineText === undefined || content === undefined) return undefined;\n const line = Number.parseInt(lineText, 10);\n if (!Number.isSafeInteger(line) || line < 1) return undefined;\n const prefix = match?.[1];\n const marker = prefix === MATCH_PREFIX ? 'match' : prefix === CONTEXT_PREFIX ? 'context' : undefined;\n return { line, content, marker };\n}\n\nexport function parseFileHeader(value: string): string | undefined {\n return FILE_HEADER_PATTERN.exec(value)?.[1];\n}\n\n/**\n * Lines as the card presents them. A read shows one file, so its header is\n * dropped; a grep groups anchored matches under each file's path.\n */\nexport function presentHashlineLines(lines: readonly string[], kind: HashlineResultKind): PresentedLine[] {\n const presented: PresentedLine[] = [];\n for (const line of lines) {\n const path = parseFileHeader(line);\n if (path !== undefined) {\n if (kind !== 'read') presented.push({ type: 'file', path });\n continue;\n }\n const tagged = parseTaggedLine(line);\n if (tagged !== undefined) {\n presented.push({ type: 'tagged', value: tagged });\n continue;\n }\n presented.push({ type: 'plain', text: line });\n }\n return presented;\n}\n\n/** The body a card shows for one result, collapsed to the kind's line budget unless expanded. */\nexport function hashlineBody(\n result: HashlineResult | null,\n output: string,\n kind: HashlineResultKind,\n expanded: boolean,\n): HashlineBody {\n const lines = resultTextLines(result, output);\n const notice = takeTrailingNotice(lines);\n const presented = presentHashlineLines(lines, kind);\n const budget = kind === 'read' ? READ_COLLAPSED_LINES : GREP_COLLAPSED_LINES;\n const { shown, hidden } = collapseLines(presented, budget, expanded);\n const gutter = shown.reduce(\n (widest, line) => (line.type === 'tagged' ? Math.max(widest, String(line.value.line).length) : widest),\n 1,\n );\n return { shown, hidden, notice, gutter };\n}\n\n/** The `key · key` detail list beside a call's primary argument, with absent values dropped. */\nexport function compactDetails(values: ReadonlyArray<string | undefined>): string[] {\n return values.filter((value): value is string => value !== undefined && value.length > 0);\n}\n"],"mappings":"+CAcA,MAAMA,EAAsB,mCACtBC,EAAsB,qCAKfC,EAAuB,GACvBC,EAAuB,GA0CpC,SAASC,EAAY,EAAoC,CACvD,OAAO,OAAOC,GAAU,YAAYA,GAAkB,OAAQA,EAAoB,MAAS,QAC7F,CAOA,SAAgBC,EAAgB,EAA+B,EAA0B,CACvF,IAAMC,EAASC,GAAQ,QAAQ,OAAOJ,CAAW,GAAK,CAAC,EACjDK,EACJD,IAAW,KAAOE,EAASH,EAAO,QAAS,GAAWF,EAAM,OAAS,OAAS,CAACA,EAAM,MAAQ,EAAE,EAAI,CAAC,CAAE,CAAC,CAAC,KAAK;CAAI,EACnH,GAAII,EAAK,SAAW,EAClB,OAAOF,EAAO,KAAM,GAAUF,EAAM,OAAS,OAAO,EAAI,CAAC,kBAAiB,EAAI,CAAC,EAEjF,IAAMM,EAAQF,EAAK,WAAW,IAAM,IAAI,CAAC,CAAC,WAAW;EAAQ;CAAI,CAAC,CAAC,MAAM;CAAI,EAC7E,KAAOE,EAAM,GAAG,EAAE,IAAM,IAAIA,EAAM,IAAI,EACtC,OAAOA,CACT,CAGA,SAAgBC,EAAmB,EAAqC,CACtE,IAAMC,EAAOF,EAAM,GAAG,EAAE,EACxB,GAAIE,IAAS,IAAA,IAAcA,EAAK,WAAW,GAAG,GAAMA,EAAK,SAAS,GAAG,EAErE,KADAF,EAAM,IAAI,EACHA,EAAM,GAAG,EAAE,IAAM,IAAIA,EAAM,IAAI,EACtC,OAAOE,CAD+B,CAExC,CAEA,SAAgBC,EAAgB,EAAuC,CACrE,IAAMC,EAAQd,EAAoB,KAAKe,CAAK,EACtCC,EAAWF,IAAQ,GACnBG,EAAUH,IAAQ,GACxB,GAAIE,IAAa,IAAA,IAAaC,IAAY,IAAA,GAAW,OACrD,IAAMC,EAAO,OAAO,SAASF,EAAU,EAAE,EACzC,GAAI,CAAC,OAAO,cAAcE,CAAI,GAAKA,EAAO,EAAG,OAC7C,IAAMC,EAASL,IAAQ,GAEvB,MAAO,CAAE,OAAM,UAAS,OADTK,IAAW,MAAe,QAAUA,IAAW,MAAiB,UAAY,IAAA,EAC5D,CACjC,CAEA,SAAgBC,EAAgB,EAAmC,CACjE,OAAOrB,EAAoB,KAAKgB,CAAK,CAAC,GAAG,EAC3C,CAMA,SAAgBM,EAAqB,EAA0B,EAA2C,CACxG,IAAMC,EAA6B,CAAC,EACpC,IAAK,IAAMJ,KAAQR,EAAO,CACxB,IAAMa,EAAOH,EAAgBF,CAAI,EACjC,GAAIK,IAAS,IAAA,GAAW,CAClBC,IAAS,QAAQF,EAAU,KAAK,CAAE,KAAM,OAAQ,MAAK,CAAC,EAC1D,QACF,CACA,IAAMG,EAASZ,EAAgBK,CAAI,EACnC,GAAIO,IAAW,IAAA,GAAW,CACxBH,EAAU,KAAK,CAAE,KAAM,SAAU,MAAOG,CAAO,CAAC,EAChD,QACF,CACAH,EAAU,KAAK,CAAE,KAAM,QAAS,KAAMJ,CAAK,CAAC,CAC9C,CACA,OAAOI,CACT,CAGA,SAAgBI,EACd,EACA,EACA,EACA,EACc,CACd,IAAMhB,EAAQL,EAAgBE,EAAQE,CAAM,EACtCkB,EAAShB,EAAmBD,CAAK,EACjCY,EAAYD,EAAqBX,EAAOc,CAAI,EAE5C,CAAE,QAAO,UAAWI,EAAcN,EADzBE,IAAS,OAAA,GAAA,GACmCK,CAAQ,EAKnE,MAAO,CAAE,QAAO,SAAQ,SAAQ,OAJjBC,EAAM,QAClB,EAAQ,IAAUZ,EAAK,OAAS,SAAW,KAAK,IAAIa,EAAQ,OAAOb,EAAK,MAAM,IAAI,CAAC,CAAC,MAAM,EAAIa,EAC/F,CAEmC,CAAE,CACzC,CAGA,SAAgBC,EAAe,EAAqD,CAClF,OAAOC,EAAO,OAAQ,GAA2BlB,IAAU,IAAA,IAAaA,EAAM,OAAS,CAAC,CAC1F"}
@@ -0,0 +1,11 @@
1
+ import { MediaKind } from "../types/editor.mjs";
2
+ //#region src/lib/media.d.ts
3
+ /**
4
+ * How to show the file at this path. Anything unrecognised is a download,
5
+ * which is the honest answer for a `.docx` or a `.zip`: a browser cannot
6
+ * render it, and pretending otherwise costs a converter that loses the
7
+ * formatting it converted.
8
+ */
9
+ export declare function mediaKindOf(filePath: string): MediaKind;
10
+ //#endregion
11
+ //# sourceMappingURL=media.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.mts","names":[],"sources":["../../../../../../src/lib/media.ts"],"mappings":";;;;;;;;wBAyCgB,YAAY,mBAAmB"}
@@ -0,0 +1,2 @@
1
+ const e={avif:`image`,bmp:`image`,gif:`image`,ico:`image`,jpeg:`image`,jpg:`image`,png:`image`,svg:`image`,webp:`image`,m4v:`video`,mov:`video`,mp4:`video`,webm:`video`,pdf:`pdf`};function t(e){let t=e.split(`/`).at(-1)??``,n=t.lastIndexOf(`.`);return n<1?``:t.slice(n+1).toLowerCase()}function n(n){return e[t(n)]??`download`}export{n as mediaKindOf};
2
+ //# sourceMappingURL=media.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.mjs","names":["MEDIA_KIND_BY_EXTENSION","extensionOf","name","filePath","dot","mediaKindOf"],"sources":["../../../../../../src/lib/media.ts"],"sourcesContent":["import type { MediaKind } from '../types/editor';\n\n/**\n * Which files a browser can show without help.\n *\n * Keyed by lower-case extension without the dot, and deliberately short: an\n * entry here is a promise that the element named by its kind will render the\n * bytes, so a format the browser only sometimes handles belongs in the\n * download fallback instead of on this list.\n */\nconst MEDIA_KIND_BY_EXTENSION: Readonly<Record<string, MediaKind>> = {\n avif: 'image',\n bmp: 'image',\n gif: 'image',\n ico: 'image',\n jpeg: 'image',\n jpg: 'image',\n png: 'image',\n svg: 'image',\n webp: 'image',\n m4v: 'video',\n mov: 'video',\n mp4: 'video',\n webm: 'video',\n pdf: 'pdf',\n};\n\n/** The extension of a path, lower-cased and without the dot; empty when it has none. */\nfunction extensionOf(filePath: string): string {\n const name = filePath.split('/').at(-1) ?? '';\n const dot = name.lastIndexOf('.');\n // A leading dot is the whole name of a dotfile, not the start of a suffix.\n return dot < 1 ? '' : name.slice(dot + 1).toLowerCase();\n}\n\n/**\n * How to show the file at this path. Anything unrecognised is a download,\n * which is the honest answer for a `.docx` or a `.zip`: a browser cannot\n * render it, and pretending otherwise costs a converter that loses the\n * formatting it converted.\n */\nexport function mediaKindOf(filePath: string): MediaKind {\n return MEDIA_KIND_BY_EXTENSION[extensionOf(filePath)] ?? 'download';\n}\n"],"mappings":"AAUA,MAAMA,EAA+D,CACnE,KAAM,QACN,IAAK,QACL,IAAK,QACL,IAAK,QACL,KAAM,QACN,IAAK,QACL,IAAK,QACL,IAAK,QACL,KAAM,QACN,IAAK,QACL,IAAK,QACL,IAAK,QACL,KAAM,QACN,IAAK,KACP,EAGA,SAASC,EAAY,EAA0B,CAC7C,IAAMC,EAAOC,EAAS,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAK,GACrCC,EAAMF,EAAK,YAAY,GAAG,EAEhC,OAAOE,EAAM,EAAI,GAAKF,EAAK,MAAME,EAAM,CAAC,CAAC,CAAC,YAAY,CACxD,CAQA,SAAgBC,EAAY,EAA6B,CACvD,OAAOL,EAAwBC,EAAYE,CAAQ,IAAM,UAC3D"}
@@ -0,0 +1,2 @@
1
+ function e(e,t){if(!Number.isFinite(e))throw RangeError(`Media seek time must be finite`);return Math.min(Math.max(e,0),Number.isFinite(t)&&t>=0?t:1/0)}export{e as boundedMediaTime};
2
+ //# sourceMappingURL=mediaPlayback.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaPlayback.mjs","names":["boundedMediaTime","seconds","duration"],"sources":["../../../../../../src/lib/mediaPlayback.ts"],"sourcesContent":["/** Keep an imperative seek inside the playable part of the current video. */\nexport function boundedMediaTime(seconds: number, duration: number): number {\n if (!Number.isFinite(seconds)) throw new RangeError('Media seek time must be finite');\n const end = Number.isFinite(duration) && duration >= 0 ? duration : Number.POSITIVE_INFINITY;\n return Math.min(Math.max(seconds, 0), end);\n}\n"],"mappings":"AACA,SAAgBA,EAAiB,EAAiB,EAA0B,CAC1E,GAAI,CAAC,OAAO,SAASC,CAAO,EAAG,MAAU,WAAW,gCAAgC,EAEpF,OAAO,KAAK,IAAI,KAAK,IAAIA,EAAS,CAAC,EADvB,OAAO,SAASC,CAAQ,GAAKA,GAAY,EAAIA,EAAW,GAC3B,CAC3C"}
@@ -0,0 +1,2 @@
1
+ let e;async function t(){return e??=import(`mermaid`).then(({default:e})=>(e.initialize({startOnLoad:!1,fontFamily:`inherit`,theme:`dark`,securityLevel:`strict`}),e)),e}async function n(e,n){let{svg:r}=await(await t()).render(e,n);return r}export{n as renderMermaid};
2
+ //# sourceMappingURL=mermaidDiagram.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaidDiagram.mjs","names":["loading","mermaidApi","mermaid","renderMermaid","id","code","svg"],"sources":["../../../../../../src/lib/mermaidDiagram.ts"],"sourcesContent":["/**\n * Mermaid, loaded only for a message that actually draws one.\n *\n * Mermaid is the largest thing this library can pull in, so nothing imports it\n * at module scope: the dynamic import below is its own chunk, fetched the\n * first time a `mermaid` fence renders and reused after that. The renderer\n * needs a document to measure text, so this module is browser-only by nature\n * and every caller is inside an effect.\n */\n\nlet loading: Promise<typeof import('mermaid').default> | undefined;\n\n/** Loads and configures mermaid once per page. */\nasync function mermaidApi(): Promise<typeof import('mermaid').default> {\n loading ??= import('mermaid').then(({ default: mermaid }) => {\n mermaid.initialize({\n startOnLoad: false,\n // Diagram text follows the surface it sits on rather than mermaid's own\n // font stack, and the dark base is the only preset close to the cockpit.\n fontFamily: 'inherit',\n theme: 'dark',\n // Strict is mermaid's default and its sanitiser: labels are escaped and\n // script-carrying markup is stripped before the SVG is handed back,\n // which is what makes rendering diagram text from a model safe.\n securityLevel: 'strict',\n });\n return mermaid;\n });\n return loading;\n}\n\n/**\n * The SVG for one diagram.\n *\n * Rejects on invalid syntax, which for a streaming message is the normal case\n * until the fence closes; the caller shows the source until it resolves.\n */\nexport async function renderMermaid(id: string, code: string): Promise<string> {\n const mermaid = await mermaidApi();\n const { svg } = await mermaid.render(id, code);\n return svg;\n}\n"],"mappings":"AAUA,IAAIA,EAGJ,eAAeC,GAAwD,CAerE,MAdA,KAAY,OAAO,UAAU,CAAC,MAAM,CAAE,QAASC,MAC7CA,EAAQ,WAAW,CACjB,YAAa,GAGb,WAAY,UACZ,MAAO,OAIP,cAAe,QACjB,CAAC,EACMA,EACR,EACMF,CACT,CAQA,eAAsBG,EAAc,EAAY,EAA+B,CAE7E,GAAM,CAAE,OAAQ,MAAM,MADAF,EAAW,EAAA,CACH,OAAOG,EAAIC,CAAI,EAC7C,OAAOC,CACT"}
@@ -0,0 +1,21 @@
1
+ import { KeyboardEvent } from "react";
2
+ //#region src/lib/optionList.d.ts
3
+ /** Digits are a shortcut, not the only way in: only the first nine can have one. */
4
+ export declare const MAX_DIGIT_SHORTCUT = 9;
5
+ /**
6
+ * The keyboard an option list answers to, handled on whichever element the
7
+ * surrounding overlay focuses. Every key it claims is consumed, so a digit
8
+ * that answers the agent never also reaches the rail's session shortcuts.
9
+ */
10
+ export declare function handleOptionListKey(event: KeyboardEvent, input: {
11
+ options: readonly string[];
12
+ cursor: number;
13
+ onCursorChange: (cursor: number) => void;
14
+ onSelect: (option: string) => void;
15
+ }): void;
16
+ /** What the footer should promise, given how many options there are. */
17
+ export declare function optionListHint(count: number): string;
18
+ /** The digit a row answers to, or the bullet that says it has none. */
19
+ export declare function optionMarker(index: number): string;
20
+ //#endregion
21
+ //# sourceMappingURL=optionList.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionList.d.mts","names":[],"sources":["../../../../../../src/lib/optionList.ts"],"mappings":";;;qBAGa;;;;;;wBAOG,oBACd,OAAO,eACP;EACE;EACA;EACA,iBAAiB;EACjB,WAAW;;;wBA8BC,eAAe;;wBAKf,aAAa"}
@@ -0,0 +1,2 @@
1
+ const e=9;function t(e,t){let{options:n,cursor:r,onCursorChange:i,onSelect:a}=t,o=n.length;if(o===0)return;if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault(),e.stopPropagation(),i((r+(e.key===`ArrowDown`?1:-1)+o)%o);return}if(e.key===`Enter`){let t=n[r];if(t===void 0)return;e.preventDefault(),e.stopPropagation(),a(t);return}let s=Number.parseInt(e.key,10)-1,c=Number.isInteger(s)&&s<9?n[s]:void 0;c!==void 0&&(e.preventDefault(),e.stopPropagation(),a(c))}function n(e){return e>9?`up/down move · enter select · 1-9 jump`:`1-9 select · enter confirm`}function r(e){return e<9?String(e+1):`·`}export{e as MAX_DIGIT_SHORTCUT,t as handleOptionListKey,n as optionListHint,r as optionMarker};
2
+ //# sourceMappingURL=optionList.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionList.mjs","names":["MAX_DIGIT_SHORTCUT","handleOptionListKey","input","count","options","event","onCursorChange","cursor","option","onSelect","index","optionListHint","optionMarker"],"sources":["../../../../../../src/lib/optionList.ts"],"sourcesContent":["import type { KeyboardEvent } from 'react';\n\n/** Digits are a shortcut, not the only way in: only the first nine can have one. */\nexport const MAX_DIGIT_SHORTCUT = 9;\n\n/**\n * The keyboard an option list answers to, handled on whichever element the\n * surrounding overlay focuses. Every key it claims is consumed, so a digit\n * that answers the agent never also reaches the rail's session shortcuts.\n */\nexport function handleOptionListKey(\n event: KeyboardEvent,\n input: {\n options: readonly string[];\n cursor: number;\n onCursorChange: (cursor: number) => void;\n onSelect: (option: string) => void;\n },\n): void {\n const { options, cursor, onCursorChange, onSelect } = input;\n const count = options.length;\n if (count === 0) return;\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n event.stopPropagation();\n onCursorChange((cursor + (event.key === 'ArrowDown' ? 1 : -1) + count) % count);\n return;\n }\n if (event.key === 'Enter') {\n const option = options[cursor];\n if (option === undefined) return;\n event.preventDefault();\n event.stopPropagation();\n onSelect(option);\n return;\n }\n const index = Number.parseInt(event.key, 10) - 1;\n const option = Number.isInteger(index) && index < MAX_DIGIT_SHORTCUT ? options[index] : undefined;\n if (option === undefined) return;\n event.preventDefault();\n event.stopPropagation();\n onSelect(option);\n}\n\n/** What the footer should promise, given how many options there are. */\nexport function optionListHint(count: number): string {\n return count > MAX_DIGIT_SHORTCUT ? 'up/down move · enter select · 1-9 jump' : '1-9 select · enter confirm';\n}\n\n/** The digit a row answers to, or the bullet that says it has none. */\nexport function optionMarker(index: number): string {\n return index < MAX_DIGIT_SHORTCUT ? String(index + 1) : '·';\n}\n"],"mappings":"AAGA,MAAaA,EAAqB,EAOlC,SAAgBC,EACd,EACA,EAMM,CACN,GAAM,CAAE,UAAS,SAAQ,iBAAgB,YAAaC,EAChDC,EAAQC,EAAQ,OACtB,GAAID,IAAU,EAAG,OAEjB,GAAIE,EAAM,MAAQ,aAAeA,EAAM,MAAQ,UAAW,CACxDA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtBC,GAAgBC,GAAUF,EAAM,MAAQ,YAAc,EAAI,IAAMF,GAASA,CAAK,EAC9E,MACF,CACA,GAAIE,EAAM,MAAQ,QAAS,CACzB,IAAMG,EAASJ,EAAQG,GACvB,GAAIC,IAAW,IAAA,GAAW,OAC1BH,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtBI,EAASD,CAAM,EACf,MACF,CACA,IAAME,EAAQ,OAAO,SAASL,EAAM,IAAK,EAAE,EAAI,EACzCG,EAAS,OAAO,UAAUE,CAAK,GAAKA,EAAA,EAA6BN,EAAQM,GAAS,IAAA,GACpFF,IAAW,IAAA,KACfH,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtBI,EAASD,CAAM,EACjB,CAGA,SAAgBG,EAAe,EAAuB,CACpD,OAAOR,EAAA,EAA6B,yCAA2C,4BACjF,CAGA,SAAgBS,EAAa,EAAuB,CAClD,OAAOF,EAAA,EAA6B,OAAOA,EAAQ,CAAC,EAAI,GAC1D"}
@@ -0,0 +1,23 @@
1
+ //#region src/lib/pathGroups.d.ts
2
+ /**
3
+ * The two-level grouping a changed-file list uses: one header per top-level
4
+ * segment, each naming the deepest directory its files share.
5
+ *
6
+ * Two levels rather than a full tree: paths here run five and six segments
7
+ * deep, so a node per segment spends more rows on directories than on the files
8
+ * someone came to find. The header carries the shared run of directories and
9
+ * each row carries what is left, so a file stays one row and the part that
10
+ * distinguishes it stays readable.
11
+ */
12
+ /** One header row and the items under it. */
13
+ export interface PathGroup<T> {
14
+ /** The shared directory the header names, or empty for files at the root. */
15
+ prefix: string;
16
+ items: T[];
17
+ }
18
+ /** Groups by top-level segment, ordered by path so a header's files sit together under it. */
19
+ export declare function groupByDirectory<T>(items: readonly T[], pathOf: (item: T) => string): PathGroup<T>[];
20
+ /** What one row shows once its group's header has already said the shared part. */
21
+ export declare function groupRowLabel(prefix: string, relPath: string): string;
22
+ //#endregion
23
+ //# sourceMappingURL=pathGroups.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathGroups.d.mts","names":[],"sources":["../../../../../../src/lib/pathGroups.ts"],"mappings":";;;;;;;;;;;;iBAYiB,UAAU;;EAEzB;EACA,OAAO;;;wBAsBO,iBAAiB,GAAG,gBAAgB,KAAK,SAAS,MAAM,eAAe,UAAU;;wBAsBjF,cAAc,gBAAgB"}
@@ -0,0 +1,2 @@
1
+ function e(e){let t=e.lastIndexOf(`/`);return t===-1?``:e.slice(0,t)}function t(e,t){let n=e.split(`/`),r=t.split(`/`),i=[];for(let e=0;e<Math.min(n.length,r.length)&&n[e]===r[e];e+=1)i.push(n[e]);return i.join(`/`)}function n(n,r){let i=/* @__PURE__ */ new Map;for(let e of n){let t=r(e),n=t.indexOf(`/`),a=n===-1?``:t.slice(0,n),o=i.get(a);o===void 0?i.set(a,[e]):o.push(e)}let a=[];for(let[n,o]of i){let i=[...o].sort((e,t)=>r(e).localeCompare(r(t))),s=n===``?``:i.map(t=>e(r(t))).reduce(t);a.push({prefix:s,items:i})}return a.sort((e,t)=>e.prefix.localeCompare(t.prefix))}function r(e,t){return e===``?t:t.slice(e.length+1)}export{n as groupByDirectory,r as groupRowLabel};
2
+ //# sourceMappingURL=pathGroups.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathGroups.mjs","names":["parentDir","cut","relPath","commonDir","leftParts","left","rightParts","right","shared","index","groupByDirectory","buckets","item","items","pathOf","key","bucket","groups","sorted","prefix","groupRowLabel"],"sources":["../../../../../../src/lib/pathGroups.ts"],"sourcesContent":["/**\n * The two-level grouping a changed-file list uses: one header per top-level\n * segment, each naming the deepest directory its files share.\n *\n * Two levels rather than a full tree: paths here run five and six segments\n * deep, so a node per segment spends more rows on directories than on the files\n * someone came to find. The header carries the shared run of directories and\n * each row carries what is left, so a file stays one row and the part that\n * distinguishes it stays readable.\n */\n\n/** One header row and the items under it. */\nexport interface PathGroup<T> {\n /** The shared directory the header names, or empty for files at the root. */\n prefix: string;\n items: T[];\n}\n\n/** The directory part of a relative path, or empty for a file at the root. */\nfunction parentDir(relPath: string): string {\n const cut = relPath.lastIndexOf('/');\n return cut === -1 ? '' : relPath.slice(0, cut);\n}\n\n/** The longest directory two paths share, compared segment by segment rather than character by character. */\nfunction commonDir(left: string, right: string): string {\n const leftParts = left.split('/');\n const rightParts = right.split('/');\n const shared: string[] = [];\n for (let index = 0; index < Math.min(leftParts.length, rightParts.length); index += 1) {\n if (leftParts[index] !== rightParts[index]) break;\n shared.push(leftParts[index]);\n }\n return shared.join('/');\n}\n\n/** Groups by top-level segment, ordered by path so a header's files sit together under it. */\nexport function groupByDirectory<T>(items: readonly T[], pathOf: (item: T) => string): PathGroup<T>[] {\n const buckets = new Map<string, T[]>();\n for (const item of items) {\n const relPath = pathOf(item);\n const cut = relPath.indexOf('/');\n const key = cut === -1 ? '' : relPath.slice(0, cut);\n const bucket = buckets.get(key);\n if (bucket === undefined) buckets.set(key, [item]);\n else bucket.push(item);\n }\n const groups: PathGroup<T>[] = [];\n for (const [key, bucket] of buckets) {\n const sorted = [...bucket].sort((left, right) => pathOf(left).localeCompare(pathOf(right)));\n // Root files have no directory to name, so they keep an empty header and\n // render their own paths in full.\n const prefix = key === '' ? '' : sorted.map((item) => parentDir(pathOf(item))).reduce(commonDir);\n groups.push({ prefix, items: sorted });\n }\n return groups.sort((left, right) => left.prefix.localeCompare(right.prefix));\n}\n\n/** What one row shows once its group's header has already said the shared part. */\nexport function groupRowLabel(prefix: string, relPath: string): string {\n return prefix === '' ? relPath : relPath.slice(prefix.length + 1);\n}\n"],"mappings":"AAmBA,SAASA,EAAU,EAAyB,CAC1C,IAAMC,EAAMC,EAAQ,YAAY,GAAG,EACnC,OAAOD,IAAQ,GAAK,GAAKC,EAAQ,MAAM,EAAGD,CAAG,CAC/C,CAGA,SAASE,EAAU,EAAc,EAAuB,CACtD,IAAMC,EAAYC,EAAK,MAAM,GAAG,EAC1BC,EAAaC,EAAM,MAAM,GAAG,EAC5BC,EAAmB,CAAC,EAC1B,IAAK,IAAIC,EAAQ,EAAGA,EAAQ,KAAK,IAAIL,EAAU,OAAQE,EAAW,MAAM,GAClEF,EAAUK,KAAWH,EAAWG,GADqC,GAAS,EAElFD,EAAO,KAAKJ,EAAUK,EAAM,EAE9B,OAAOD,EAAO,KAAK,GAAG,CACxB,CAGA,SAAgBE,EAAoB,EAAqB,EAA6C,CACpG,IAAMC,kBAAU,IAAI,IACpB,IAAK,IAAMC,KAAQC,EAAO,CACxB,IAAMX,EAAUY,EAAOF,CAAI,EACrBX,EAAMC,EAAQ,QAAQ,GAAG,EACzBa,EAAMd,IAAQ,GAAK,GAAKC,EAAQ,MAAM,EAAGD,CAAG,EAC5Ce,EAASL,EAAQ,IAAII,CAAG,EAC1BC,IAAW,IAAA,GAAWL,EAAQ,IAAII,EAAK,CAACH,CAAI,CAAC,EAC5CI,EAAO,KAAKJ,CAAI,CACvB,CACA,IAAMK,EAAyB,CAAC,EAChC,IAAK,GAAM,CAACF,EAAKC,KAAWL,EAAS,CACnC,IAAMO,EAAS,CAAC,GAAGF,CAAM,CAAC,CAAC,MAAM,EAAM,IAAUF,EAAOT,CAAI,CAAC,CAAC,cAAcS,EAAOP,CAAK,CAAC,CAAC,EAGpFY,EAASJ,IAAQ,GAAK,GAAKG,EAAO,IAAK,GAASlB,EAAUc,EAAOF,CAAI,CAAC,CAAC,CAAC,CAAC,OAAOT,CAAS,EAC/Fc,EAAO,KAAK,CAAE,SAAQ,MAAOC,CAAO,CAAC,CACvC,CACA,OAAOD,EAAO,MAAM,EAAM,IAAUZ,EAAK,OAAO,cAAcE,EAAM,MAAM,CAAC,CAC7E,CAGA,SAAgBa,EAAc,EAAgB,EAAyB,CACrE,OAAOD,IAAW,GAAKjB,EAAUA,EAAQ,MAAMiB,EAAO,OAAS,CAAC,CAClE"}
@@ -0,0 +1,10 @@
1
+ //#region src/lib/picker.d.ts
2
+ /** What a picker row needs for matching and ordering; the view adds its own presentation. */
3
+ export interface PickerChoice {
4
+ value: string;
5
+ title: string;
6
+ subtitle?: string;
7
+ disabledReason?: string;
8
+ }
9
+ //#endregion
10
+ //# sourceMappingURL=picker.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker.d.mts","names":[],"sources":["../../../../../../src/lib/picker.ts"],"mappings":";;iBAGiB;EACf;EACA;EACA;EACA"}
@@ -0,0 +1,2 @@
1
+ import"./optionList.mjs";function e(e,t){let n=t.trim().toLowerCase();return n===``?e:e.filter(e=>`${e.title} ${e.subtitle??``} ${e.value}`.toLowerCase().includes(n))}function t(e,t){return Math.max(0,e.findIndex(e=>t.includes(e.value)))}function n(e,t){let n=new Set(e);return n.delete(t)||n.add(t),n}function r(e,t){return e.size!==t.length||t.some(t=>!e.has(t))}function i(e,t){return e.filter(e=>t.has(e.value)).map(e=>e.value)}function a(e,t){return e?t?`enter toggles · tab to Apply`:`1-9, space or enter toggles · tab to Apply`:t?`type to filter · enter picks`:`1-9 or enter picks`}function o(e,t){let{count:n,cursor:r,multiple:i,filterable:a}=t;if(e===`ArrowDown`||e===`ArrowUp`)return n===0?null:{kind:`move`,cursor:(r+(e===`ArrowDown`?1:-1)+n)%n};if(e===`Enter`)return n===0?null:{kind:`pick`,index:r};if(a)return null;if(e===` `&&i)return n===0?null:{kind:`pick`,index:r};let o=Number.parseInt(e,10)-1;return!Number.isInteger(o)||o<0||o>=Math.min(n,9)?null:{kind:`pick`,index:o}}export{i as appliedValues,r as draftChanged,e as filterPickerItems,t as initialPickerCursor,a as pickerHint,o as pickerKeyAction,n as toggleDraft};
2
+ //# sourceMappingURL=picker.mjs.map