@pstdio/ui 0.14.0 → 0.16.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 (226) hide show
  1. package/dist/{MermaidComponent-CatfVUxA.js → MermaidComponent-BCMQqPqu.js} +11 -11
  2. package/dist/{MermaidComponent-CatfVUxA.js.map → MermaidComponent-BCMQqPqu.js.map} +1 -1
  3. package/dist/browser-storage-BinyFNJX.js +40 -0
  4. package/dist/browser-storage-BinyFNJX.js.map +1 -0
  5. package/dist/chat-ui.js +1160 -1120
  6. package/dist/chat-ui.js.map +1 -1
  7. package/dist/checkbox-D5AzFRlb.js +70 -0
  8. package/dist/checkbox-D5AzFRlb.js.map +1 -0
  9. package/dist/components/chat-ui/components/ai-conversation.d.ts +1 -1
  10. package/dist/components/chat-ui/components/ai-message.d.ts +1 -1
  11. package/dist/components/chat-ui/components/ai-response.d.ts +0 -1
  12. package/dist/components/chat-ui/components/attachment-list.d.ts +1 -1
  13. package/dist/components/chat-ui/components/auto-scroll.d.ts +27 -0
  14. package/dist/components/chat-ui/components/chat-message-animation.d.ts +22 -0
  15. package/dist/components/chat-ui/components/timeline.d.ts +0 -2
  16. package/dist/components/chat-ui/performance/chat-performance-fixtures.d.ts +0 -1
  17. package/dist/components/chat-ui/tool-rendering/build-timeline.d.ts +2 -12
  18. package/dist/components/chat-ui/tool-rendering/shared.d.ts +1 -1
  19. package/dist/components/chat-ui/tool-rendering/types.d.ts +1 -2
  20. package/dist/components/command-palette/index.d.ts +4 -0
  21. package/dist/components/data-renderer/data-renderer-board.d.ts +1 -1
  22. package/dist/components/data-renderer/data-renderer-card.d.ts +1 -1
  23. package/dist/components/data-renderer/data-renderer-enum-helpers.d.ts +3 -3
  24. package/dist/components/data-renderer/data-renderer-helpers.d.ts +2 -0
  25. package/dist/components/data-renderer/data-renderer-list.d.ts +1 -1
  26. package/dist/components/data-renderer/data-renderer.d.ts +1 -1
  27. package/dist/components/data-renderer/index.d.ts +18 -0
  28. package/dist/components/data-renderer/types.d.ts +0 -6
  29. package/dist/components/diff-viewer/diff-card.d.ts +1 -0
  30. package/dist/components/diff-viewer/diff-drawer-scroll.d.ts +0 -19
  31. package/dist/components/diff-viewer/diff-drawer.d.ts +1 -0
  32. package/dist/components/diff-viewer/diff-viewer-options-menu.d.ts +16 -0
  33. package/dist/components/diff-viewer/index.d.ts +2 -0
  34. package/dist/components/diff-viewer/use-selected-diff-scroll.d.ts +7 -3
  35. package/dist/components/internal/style-guide.d.ts +14 -0
  36. package/dist/components/internal/token-editor-controls.d.ts +8 -0
  37. package/dist/components/internal/token-editor-data.d.ts +40 -0
  38. package/dist/components/internal/token-editor-state.d.ts +22 -0
  39. package/dist/components/layout/index.d.ts +6 -0
  40. package/dist/components/list-row/list-row.types.d.ts +1 -1
  41. package/dist/components/notification-center/index.d.ts +2 -0
  42. package/dist/components/notification-center/notification-center.d.ts +2 -0
  43. package/dist/components/notification-center/notification-center.types.d.ts +37 -0
  44. package/dist/components/{bubble-button.d.ts → overlays/bubble-button.d.ts} +1 -1
  45. package/dist/components/overlays/index.d.ts +12 -0
  46. package/dist/components/overlays/search-modal-content.d.ts +20 -0
  47. package/dist/components/{searchable-menu.d.ts → overlays/searchable-menu.d.ts} +1 -1
  48. package/dist/components/param-editor/index.d.ts +23 -0
  49. package/dist/components/param-editor/inputs/action-input.d.ts +13 -0
  50. package/dist/components/param-editor/inputs/anchor-grid-input.d.ts +12 -0
  51. package/dist/components/param-editor/inputs/anchor-grid.d.ts +4 -0
  52. package/dist/components/param-editor/inputs/file-accept.d.ts +22 -0
  53. package/dist/components/param-editor/inputs/file-drop-input.d.ts +14 -0
  54. package/dist/components/param-editor/inputs/numeric-value.d.ts +6 -0
  55. package/dist/components/param-editor/inputs/range-input.d.ts +17 -0
  56. package/dist/components/param-editor/inputs/range-value.d.ts +5 -0
  57. package/dist/components/param-editor/inputs/resource-input-chips.d.ts +15 -0
  58. package/dist/components/param-editor/inputs/resource-input.d.ts +18 -0
  59. package/dist/components/param-editor/inputs/segmented-input.d.ts +14 -0
  60. package/dist/components/param-editor/inputs/slider-marks.d.ts +5 -0
  61. package/dist/components/param-editor/inputs/vector-input.d.ts +17 -0
  62. package/dist/components/param-editor/inputs/vector-value.d.ts +7 -0
  63. package/dist/components/param-editor/param-editor-control-item.d.ts +15 -0
  64. package/dist/components/param-editor/param-editor-control-list.d.ts +5 -0
  65. package/dist/components/param-editor/param-editor-field-label.d.ts +1 -0
  66. package/dist/components/param-editor/param-editor-field.d.ts +11 -0
  67. package/dist/components/param-editor/param-editor-inline-group.d.ts +5 -0
  68. package/dist/components/param-editor/param-editor-section.d.ts +16 -0
  69. package/dist/components/param-editor/param-editor.d.ts +2 -1
  70. package/dist/components/param-editor/param-editor.types.d.ts +101 -19
  71. package/dist/components/{breadcrumb.d.ts → primitives/breadcrumb.d.ts} +1 -1
  72. package/dist/components/{icon-color-picker.d.ts → primitives/icon-color-picker.d.ts} +2 -6
  73. package/dist/components/primitives/index.d.ts +28 -0
  74. package/dist/components/{number-input.d.ts → primitives/number-input.d.ts} +0 -2
  75. package/dist/components/{session-indicator.d.ts → primitives/session-indicator.d.ts} +2 -1
  76. package/dist/components/{tooltip.d.ts → primitives/tooltip.d.ts} +0 -1
  77. package/dist/components/rich-text/prompt-input/commands.d.ts +0 -17
  78. package/dist/components/rich-text/prompt-input/events.d.ts +0 -13
  79. package/dist/components/rich-text/prompt-input/plugins/CommentPlugin/nodes/CommentNode/CommentNode.d.ts +1 -2
  80. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/nodes/ReferenceNode/ReferenceNode.d.ts +1 -2
  81. package/dist/components/rich-text/prompt-input/utils.d.ts +1 -2
  82. package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.d.ts +0 -1
  83. package/dist/components/rich-text/utils/inferResourceType.d.ts +1 -1
  84. package/dist/components/sidebar/sidebar.types.d.ts +1 -1
  85. package/dist/components/tab-strip/tab-visibility-filter.d.ts +5 -3
  86. package/dist/components/tag-editor/tag-editor-row.d.ts +1 -1
  87. package/dist/components/tag-editor/tag-editor.types.d.ts +1 -1
  88. package/dist/components/terminal/bind-session.d.ts +33 -0
  89. package/dist/components/terminal/index.d.ts +6 -0
  90. package/dist/components/terminal/scripted-bridge.d.ts +35 -0
  91. package/dist/components/terminal/terminal-contract.d.ts +22 -0
  92. package/dist/components/terminal/terminal-theme.d.ts +12 -0
  93. package/dist/components/terminal/terminal.d.ts +45 -0
  94. package/dist/components/terminal/types.d.ts +35 -0
  95. package/dist/components/terminal/use-terminal-session.d.ts +21 -0
  96. package/dist/components/tree-list/tree-list-order-filter.d.ts +1 -2
  97. package/dist/components/tree-list/tree-list-visibility-filter.d.ts +12 -4
  98. package/dist/components/tree-list/tree-list.d.ts +1 -1
  99. package/dist/components/tree-list/tree-list.types.d.ts +7 -2
  100. package/dist/data-renderer.js +1669 -0
  101. package/dist/data-renderer.js.map +1 -0
  102. package/dist/diff-editor-BnfV8cYB.js +182 -0
  103. package/dist/diff-editor-BnfV8cYB.js.map +1 -0
  104. package/dist/diff.js +1313 -0
  105. package/dist/diff.js.map +1 -0
  106. package/dist/empty-state-Bo4HVrgr.js +34 -0
  107. package/dist/empty-state-Bo4HVrgr.js.map +1 -0
  108. package/dist/foundations/gallery/gallery-frame.d.ts +21 -0
  109. package/dist/foundations/gallery/sections/badges-section.d.ts +1 -0
  110. package/dist/foundations/gallery/sections/buttons-section.d.ts +1 -0
  111. package/dist/foundations/gallery/sections/composite-chat-section.d.ts +1 -0
  112. package/dist/foundations/gallery/sections/composites-section.d.ts +1 -0
  113. package/dist/foundations/gallery/sections/feedback-section.d.ts +1 -0
  114. package/dist/foundations/gallery/sections/input-authoring-card.d.ts +1 -0
  115. package/dist/foundations/gallery/sections/inputs-section.d.ts +1 -0
  116. package/dist/foundations/gallery/sections/layout-section.d.ts +1 -0
  117. package/dist/foundations/gallery/sections/navigation-identity-section.d.ts +1 -0
  118. package/dist/foundations/gallery/sections/overlays-section.d.ts +1 -0
  119. package/dist/foundations/gallery/sections/panels-section.d.ts +1 -0
  120. package/dist/foundations/gallery/sections/param-editor-composite-card.d.ts +1 -0
  121. package/dist/foundations/gallery/sections/settings-composite-cards.d.ts +1 -0
  122. package/dist/index.d.ts +15 -84
  123. package/dist/index.js +3594 -7450
  124. package/dist/index.js.map +1 -1
  125. package/dist/list-row-mi3Hn-Um.js +740 -0
  126. package/dist/list-row-mi3Hn-Um.js.map +1 -0
  127. package/dist/mermaid-renderer-DZo3qj6D.js +425 -0
  128. package/dist/mermaid-renderer-DZo3qj6D.js.map +1 -0
  129. package/dist/mermaid.js +5 -0
  130. package/dist/mermaid.js.map +1 -0
  131. package/dist/radio-cLMEBBZk.js +76 -0
  132. package/dist/radio-cLMEBBZk.js.map +1 -0
  133. package/dist/resource-badge-qCWHP-wQ.js +99 -0
  134. package/dist/resource-badge-qCWHP-wQ.js.map +1 -0
  135. package/dist/{rich-message-BFtvH9H7.js → rich-message-DBf_5YlW.js} +462 -481
  136. package/dist/rich-message-DBf_5YlW.js.map +1 -0
  137. package/dist/rich-text.js +397 -390
  138. package/dist/rich-text.js.map +1 -1
  139. package/dist/scroll-area-BMbg1WcD.js +91 -0
  140. package/dist/scroll-area-BMbg1WcD.js.map +1 -0
  141. package/dist/style.css +1 -1
  142. package/dist/terminal.js +339 -0
  143. package/dist/terminal.js.map +1 -0
  144. package/dist/theme/global.d.ts +3 -0
  145. package/dist/theme/recipes/badge.d.ts +50 -0
  146. package/dist/theme/recipes/button.d.ts +24 -19
  147. package/dist/theme/recipes/color-picker.d.ts +1 -0
  148. package/dist/theme/recipes/dialog.d.ts +1 -1
  149. package/dist/theme/recipes/drawer.d.ts +1 -1
  150. package/dist/theme/recipes/input.d.ts +55 -0
  151. package/dist/theme/recipes/number-input.d.ts +98 -0
  152. package/dist/theme/recipes/tabs.d.ts +49 -28
  153. package/dist/theme/recipes/textarea.d.ts +62 -1
  154. package/dist/theme/recipes/timeline.d.ts +74 -0
  155. package/dist/theme/shadowless-default-config.d.ts +2 -0
  156. package/dist/theme/tokens/borders.d.ts +0 -3
  157. package/dist/theme/tokens/colors.d.ts +100 -70
  158. package/dist/{theme-C5qHTCU9.js → theme-CJBYBJaA.js} +1264 -415
  159. package/dist/theme-CJBYBJaA.js.map +1 -0
  160. package/dist/theme-preference-DOzHx64J.js +123 -0
  161. package/dist/theme-preference-DOzHx64J.js.map +1 -0
  162. package/dist/theme.js +1 -1
  163. package/dist/tree-list-CcuZMLS5.js +930 -0
  164. package/dist/tree-list-CcuZMLS5.js.map +1 -0
  165. package/dist/workspace-badge-Fuo-1zPj.js +314 -0
  166. package/dist/workspace-badge-Fuo-1zPj.js.map +1 -0
  167. package/package.json +23 -3
  168. package/dist/components/file-tree-helpers.d.ts +0 -8
  169. package/dist/components/open-source-notices-screen.d.ts +0 -20
  170. package/dist/components/param-editor/input-group.d.ts +0 -10
  171. package/dist/components/rich-text/shared/plugins/MermaidPlugin/index.d.ts +0 -1
  172. package/dist/components/rich-text/shared/plugins/TableActionMenuPlugin/TableActionMenuPlugin.d.ts +0 -5
  173. package/dist/components/rich-text/shared/plugins/TableCellResizerPlugin/TableCellResizerPlugin.d.ts +0 -2
  174. package/dist/components/rich-text/theme/report-theme.d.ts +0 -3
  175. package/dist/components/sidebar/sidebar-project-menu.d.ts +0 -7
  176. package/dist/components/style-guide-data.d.ts +0 -46
  177. package/dist/components/style-guide.d.ts +0 -1
  178. package/dist/mermaid-renderer-DYEiYmYQ.js +0 -411
  179. package/dist/mermaid-renderer-DYEiYmYQ.js.map +0 -1
  180. package/dist/radio-DJtQY9po.js +0 -286
  181. package/dist/radio-DJtQY9po.js.map +0 -1
  182. package/dist/resource-badge-D33IFv74.js +0 -188
  183. package/dist/resource-badge-D33IFv74.js.map +0 -1
  184. package/dist/rich-message-BFtvH9H7.js.map +0 -1
  185. package/dist/theme/tokens/shadows.d.ts +0 -64
  186. package/dist/theme-C5qHTCU9.js.map +0 -1
  187. package/dist/utils/formats.d.ts +0 -7
  188. /package/dist/components/{palette-filter.d.ts → command-palette/palette-filter.d.ts} +0 -0
  189. /package/dist/components/{palette-list.d.ts → command-palette/palette-list.d.ts} +0 -0
  190. /package/dist/components/{palette-shortcut.d.ts → command-palette/palette-shortcut.d.ts} +0 -0
  191. /package/dist/components/{palette.d.ts → command-palette/palette.d.ts} +0 -0
  192. /package/dist/components/{code-editor.d.ts → diff-viewer/code-editor.d.ts} +0 -0
  193. /package/dist/components/{column-file-browser.d.ts → file-browser/column-file-browser.d.ts} +0 -0
  194. /package/dist/components/{performance-panel.d.ts → internal/performance-panel.d.ts} +0 -0
  195. /package/dist/components/{header.d.ts → layout/header.d.ts} +0 -0
  196. /package/dist/components/{horizontal-menu-stack.d.ts → layout/horizontal-menu-stack.d.ts} +0 -0
  197. /package/dist/components/{item-section.d.ts → layout/item-section.d.ts} +0 -0
  198. /package/dist/components/{panel-header.constants.d.ts → layout/panel-header.constants.d.ts} +0 -0
  199. /package/dist/components/{resizable-split-layout.d.ts → layout/resizable-split-layout.d.ts} +0 -0
  200. /package/dist/components/{resizable-split-layout.handle.d.ts → layout/resizable-split-layout.handle.d.ts} +0 -0
  201. /package/dist/components/{attached-panel.d.ts → overlays/attached-panel.d.ts} +0 -0
  202. /package/dist/components/{bubble-panel.d.ts → overlays/bubble-panel.d.ts} +0 -0
  203. /package/dist/components/{delete-confirmation-modal.d.ts → overlays/delete-confirmation-modal.d.ts} +0 -0
  204. /package/dist/components/{repo-picker-dialog.d.ts → overlays/repo-picker-dialog.d.ts} +0 -0
  205. /package/dist/components/{resource-context-menu.d.ts → overlays/resource-context-menu.d.ts} +0 -0
  206. /package/dist/components/param-editor/{color-input.d.ts → inputs/color-input.d.ts} +0 -0
  207. /package/dist/components/param-editor/{date-input.d.ts → inputs/date-input.d.ts} +0 -0
  208. /package/dist/components/param-editor/{horizontal-text-input.d.ts → inputs/horizontal-text-input.d.ts} +0 -0
  209. /package/dist/components/param-editor/{number-input.d.ts → inputs/number-input.d.ts} +0 -0
  210. /package/dist/components/param-editor/{selection-input.d.ts → inputs/selection-input.d.ts} +0 -0
  211. /package/dist/components/param-editor/{text-input.d.ts → inputs/text-input.d.ts} +0 -0
  212. /package/dist/components/{alert.d.ts → primitives/alert.d.ts} +0 -0
  213. /package/dist/components/{checkbox.d.ts → primitives/checkbox.d.ts} +0 -0
  214. /package/dist/components/{content-placeholder.d.ts → primitives/content-placeholder.d.ts} +0 -0
  215. /package/dist/components/{empty-state.d.ts → primitives/empty-state.d.ts} +0 -0
  216. /package/dist/components/{error-boundary.d.ts → primitives/error-boundary.d.ts} +0 -0
  217. /package/dist/components/{info-card.d.ts → primitives/info-card.d.ts} +0 -0
  218. /package/dist/components/{integration-card.d.ts → primitives/integration-card.d.ts} +0 -0
  219. /package/dist/components/{radio.d.ts → primitives/radio.d.ts} +0 -0
  220. /package/dist/components/{resource-badge.d.ts → primitives/resource-badge.d.ts} +0 -0
  221. /package/dist/components/{scroll-area.d.ts → primitives/scroll-area.d.ts} +0 -0
  222. /package/dist/components/{simple-card.d.ts → primitives/simple-card.d.ts} +0 -0
  223. /package/dist/components/{slider.d.ts → primitives/slider.d.ts} +0 -0
  224. /package/dist/components/{switch.d.ts → primitives/switch.d.ts} +0 -0
  225. /package/dist/components/{toaster.d.ts → primitives/toaster.d.ts} +0 -0
  226. /package/dist/components/{workspace-badge.d.ts → primitives/workspace-badge.d.ts} +0 -0
@@ -0,0 +1,91 @@
1
+ import { jsx as m, jsxs as j } from "react/jsx-runtime";
2
+ import { c as D } from "react/compiler-runtime";
3
+ import { Tooltip as T, Portal as E, ScrollArea as z } from "@chakra-ui/react";
4
+ import * as V from "react";
5
+ const B = V.forwardRef(function(u, S) {
6
+ const t = D(22);
7
+ let l, e, r, a, o, s, f;
8
+ t[0] !== u ? ({
9
+ children: l,
10
+ disabled: a,
11
+ portalled: f,
12
+ content: e,
13
+ contentProps: r,
14
+ portalRef: o,
15
+ ...s
16
+ } = u, t[0] = u, t[1] = l, t[2] = e, t[3] = r, t[4] = a, t[5] = o, t[6] = s, t[7] = f) : (l = t[1], e = t[2], r = t[3], a = t[4], o = t[5], s = t[6], f = t[7]);
17
+ const b = f === void 0 ? !0 : f;
18
+ if (a || _(e))
19
+ return l;
20
+ let n;
21
+ t[8] !== l ? (n = /* @__PURE__ */ m(T.Trigger, { asChild: !0, children: l }), t[8] = l, t[9] = n) : n = t[9];
22
+ const h = !b;
23
+ let i;
24
+ t[10] !== e || t[11] !== r || t[12] !== S ? (i = /* @__PURE__ */ m(T.Positioner, { children: /* @__PURE__ */ m(T.Content, { ref: S, ...r, children: e }) }), t[10] = e, t[11] = r, t[12] = S, t[13] = i) : i = t[13];
25
+ let d;
26
+ t[14] !== o || t[15] !== h || t[16] !== i ? (d = /* @__PURE__ */ m(E, { disabled: h, container: o, children: i }), t[14] = o, t[15] = h, t[16] = i, t[17] = d) : d = t[17];
27
+ let c;
28
+ return t[18] !== s || t[19] !== n || t[20] !== d ? (c = /* @__PURE__ */ j(T.Root, { openDelay: 100, closeDelay: 100, ...s, children: [
29
+ n,
30
+ d
31
+ ] }), t[18] = s, t[19] = n, t[20] = d, t[21] = c) : c = t[21], c;
32
+ });
33
+ function H(p) {
34
+ return typeof p == "string" ? p.trim().length === 0 : !1;
35
+ }
36
+ function _(p) {
37
+ if (p == null || p === !1)
38
+ return !0;
39
+ const u = V.Children.toArray(p);
40
+ return u.length === 0 ? !0 : u.every(H);
41
+ }
42
+ const F = V.forwardRef(function(u, S) {
43
+ const t = D(40);
44
+ let l, e, r, a, o, s, f, b, w, n, h, i;
45
+ t[0] !== u ? ({
46
+ children: l,
47
+ viewportRef: i,
48
+ contentRef: r,
49
+ viewportProps: h,
50
+ contentProps: e,
51
+ verticalScrollbarProps: n,
52
+ horizontalScrollbarProps: a,
53
+ showVerticalScrollbar: s,
54
+ showHorizontalScrollbar: f,
55
+ showCorner: b,
56
+ size: w,
57
+ ...o
58
+ } = u, t[0] = u, t[1] = l, t[2] = e, t[3] = r, t[4] = a, t[5] = o, t[6] = s, t[7] = f, t[8] = b, t[9] = w, t[10] = n, t[11] = h, t[12] = i) : (l = t[1], e = t[2], r = t[3], a = t[4], o = t[5], s = t[6], f = t[7], b = t[8], w = t[9], n = t[10], h = t[11], i = t[12]);
59
+ const d = s === void 0 ? !0 : s, c = f === void 0 ? !1 : f, A = b === void 0 ? d && c : b, $ = w === void 0 ? "xs" : w;
60
+ let P;
61
+ t[13] !== e || t[14] !== c ? (P = c ? e : {
62
+ ...e,
63
+ style: {
64
+ minWidth: 0,
65
+ ...e?.style
66
+ }
67
+ }, t[13] = e, t[14] = c, t[15] = P) : P = t[15];
68
+ const I = P;
69
+ let v;
70
+ t[16] !== l || t[17] !== r || t[18] !== I ? (v = /* @__PURE__ */ m(z.Content, { ...I, ref: r, children: l }), t[16] = l, t[17] = r, t[18] = I, t[19] = v) : v = t[19];
71
+ let C;
72
+ t[20] !== v || t[21] !== h || t[22] !== i ? (C = /* @__PURE__ */ m(z.Viewport, { ...h, ref: i, children: v }), t[20] = v, t[21] = h, t[22] = i, t[23] = C) : C = t[23];
73
+ let R;
74
+ t[24] !== d || t[25] !== n ? (R = d ? /* @__PURE__ */ m(z.Scrollbar, { zIndex: "2", ...n, borderRadius: "xs" }) : null, t[24] = d, t[25] = n, t[26] = R) : R = t[26];
75
+ let x;
76
+ t[27] !== a || t[28] !== c ? (x = c ? /* @__PURE__ */ m(z.Scrollbar, { orientation: "horizontal", zIndex: "2", ...a, borderRadius: "xs" }) : null, t[27] = a, t[28] = c, t[29] = x) : x = t[29];
77
+ let y;
78
+ t[30] !== A ? (y = A ? /* @__PURE__ */ m(z.Corner, { zIndex: "2" }) : null, t[30] = A, t[31] = y) : y = t[31];
79
+ let g;
80
+ return t[32] !== S || t[33] !== o || t[34] !== $ || t[35] !== C || t[36] !== R || t[37] !== x || t[38] !== y ? (g = /* @__PURE__ */ j(z.Root, { ref: S, size: $, ...o, children: [
81
+ C,
82
+ R,
83
+ x,
84
+ y
85
+ ] }), t[32] = S, t[33] = o, t[34] = $, t[35] = C, t[36] = R, t[37] = x, t[38] = y, t[39] = g) : g = t[39], g;
86
+ });
87
+ export {
88
+ F as S,
89
+ B as T
90
+ };
91
+ //# sourceMappingURL=scroll-area-BMbg1WcD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-area-BMbg1WcD.js","sources":["../src/components/primitives/tooltip.tsx","../src/components/primitives/scroll-area.tsx"],"sourcesContent":["import { Tooltip as ChakraTooltip, Portal } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface TooltipProps extends ChakraTooltip.RootProps {\n children?: React.ReactElement;\n portalled?: boolean;\n portalRef?: React.RefObject<HTMLElement>;\n content: React.ReactNode;\n contentProps?: ChakraTooltip.ContentProps;\n disabled?: boolean;\n}\n\nexport const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(function Tooltip(props, ref) {\n const { children, disabled, portalled = true, content, contentProps, portalRef, ...rest } = props;\n\n const isEmptyContent = (node: React.ReactNode): boolean => {\n if (node === null || node === undefined || node === false) return true;\n const arr = React.Children.toArray(node);\n if (arr.length === 0) return true;\n return arr.every((child) => (typeof child === \"string\" ? child.trim().length === 0 : false));\n };\n\n if (disabled || isEmptyContent(content)) return children;\n\n return (\n <ChakraTooltip.Root openDelay={100} closeDelay={100} {...rest}>\n <ChakraTooltip.Trigger asChild>{children}</ChakraTooltip.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraTooltip.Positioner>\n <ChakraTooltip.Content ref={ref} {...contentProps}>\n {content}\n </ChakraTooltip.Content>\n </ChakraTooltip.Positioner>\n </Portal>\n </ChakraTooltip.Root>\n );\n});\n","import { ScrollArea as ChakraScrollArea } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\ntype VerticalScrollbarProps = Omit<ChakraScrollArea.ScrollbarProps, \"orientation\">;\ntype HorizontalScrollbarProps = Omit<ChakraScrollArea.ScrollbarProps, \"orientation\">;\n\nexport interface ScrollAreaProps extends ChakraScrollArea.RootProps {\n viewportRef?: React.Ref<HTMLDivElement>;\n contentRef?: React.Ref<HTMLDivElement>;\n viewportProps?: ChakraScrollArea.ViewportProps;\n contentProps?: ChakraScrollArea.ContentProps;\n verticalScrollbarProps?: VerticalScrollbarProps;\n horizontalScrollbarProps?: HorizontalScrollbarProps;\n showVerticalScrollbar?: boolean;\n showHorizontalScrollbar?: boolean;\n showCorner?: boolean;\n}\n\nexport const ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(function ScrollArea(props, ref) {\n const {\n children,\n viewportRef,\n contentRef,\n viewportProps,\n contentProps,\n verticalScrollbarProps,\n horizontalScrollbarProps,\n showVerticalScrollbar = true,\n showHorizontalScrollbar = false,\n showCorner = showVerticalScrollbar && showHorizontalScrollbar,\n size = \"xs\",\n ...rest\n } = props;\n\n const mergedContentProps = showHorizontalScrollbar\n ? contentProps\n : { ...contentProps, style: { minWidth: 0, ...contentProps?.style } };\n\n return (\n <ChakraScrollArea.Root ref={ref} size={size} {...rest}>\n <ChakraScrollArea.Viewport {...viewportProps} ref={viewportRef}>\n <ChakraScrollArea.Content {...mergedContentProps} ref={contentRef}>\n {children}\n </ChakraScrollArea.Content>\n </ChakraScrollArea.Viewport>\n {showVerticalScrollbar ? (\n <ChakraScrollArea.Scrollbar zIndex=\"2\" {...verticalScrollbarProps} borderRadius={\"xs\"} />\n ) : null}\n {showHorizontalScrollbar ? (\n <ChakraScrollArea.Scrollbar\n orientation=\"horizontal\"\n zIndex=\"2\"\n {...horizontalScrollbarProps}\n borderRadius={\"xs\"}\n />\n ) : null}\n {showCorner ? <ChakraScrollArea.Corner zIndex=\"2\" /> : null}\n </ChakraScrollArea.Root>\n );\n});\n"],"names":["Tooltip","React","forwardRef","props","ref","$","_c","children","content","contentProps","disabled","portalRef","rest","t0","portalled","undefined","_temp2","t1","ChakraTooltip","t2","t3","jsx","t4","Portal","t5","_temp","child","trim","length","node","arr","Children","toArray","every","ScrollArea","contentRef","horizontalScrollbarProps","verticalScrollbarProps","viewportProps","viewportRef","showVerticalScrollbar","showHorizontalScrollbar","showCorner","size","style","minWidth","mergedContentProps","ChakraScrollArea","t6","t7","t8","t9","t10"],"mappings":"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"}
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .rich-text__ltr{text-align:left}.rich-text__rtl{text-align:right}.rich-text{--rich-text-font-scale: 1;--rich-text-list-indent: 1.5rem;font-size:calc(1rem * var(--rich-text-font-scale))}.rich-text[data-rich-message=true]{--rich-text-font-scale: .9}.rich-text[data-rich-message=true] .rich-text__p:last-child{margin-bottom:0}.rich-text__paragraph{margin:0;position:relative}.rich-text__quote{margin:0;margin-top:var(--chakra-spacing-xl, 1.5rem);margin-left:var(--chakra-spacing-sm, .75rem);margin-bottom:var(--chakra-spacing-xl, 1.5rem);font-size:calc(15px * var(--rich-text-font-scale));color:var(--chakra-colors-fg-muted);border-left:4px solid var(--chakra-colors-border);padding-left:16px}.rich-text__indent{--lexical-indent-base-value: 40px}.rich-text__textBold{font-weight:700}.rich-text__reference{font:inherit;border-bottom:1px dotted currentColor;opacity:.9;white-space:nowrap}.rich-text__textStrikethrough{text-decoration:line-through}.rich-text__textUnderlineStrikethrough{text-decoration:underline line-through}.rich-text__textSubscript{font-size:.8em;vertical-align:sub}.rich-text__textSuperscript{font-size:.8em;vertical-align:super}.rich-text__textCode{background-color:var(--chakra-colors-bg-code);padding:1px .25rem;font-family:var(--chakra-fonts-mono);font-size:.94em}.rich-text__link{color:var(--chakra-colors-blue-600);text-decoration:none;cursor:pointer}.rich-text__link:hover{text-decoration:underline}.rich-text__code{background-color:var(--chakra-colors-bg-code);font-family:var(--chakra-fonts-mono);display:block;padding:8px 8px 8px 52px;line-height:1.53;font-size:calc(13px * var(--rich-text-font-scale));margin:0;margin-top:var(--chakra-spacing-md, 1rem);margin-bottom:var(--chakra-spacing-md, 1rem);overflow-x:auto;position:relative;tab-size:2}.rich-text__code:before{content:attr(data-gutter);position:absolute;background-color:var(--chakra-colors-bg-subtle);left:0;top:0;bottom:0;border-right:1px solid var(--chakra-colors-border);padding:8px;color:var(--chakra-colors-fg-muted);white-space:pre-wrap;text-align:right;min-width:25px}.rich-text__table{border-collapse:collapse;border-spacing:0;color:var(--chakra-colors-fg);font-size:calc(var(--chakra-font-sizes-sm) * var(--rich-text-font-scale));line-height:21px;overflow-y:auto;overflow-x:auto;table-layout:fixed;width:max-content}.rich-text__tableSelection *::selection{background-color:transparent}.rich-text__tableSelected{outline:2px solid var(--chakra-colors-blue-500)}.rich-text__tableCell{border:1px solid var(--chakra-colors-border);vertical-align:top;text-align:start;padding:6px 8px;position:relative;outline:none}.rich-text__tableCellSortedIndicator{display:block;opacity:.5;position:absolute;bottom:0;left:0;width:100%;height:4px;background-color:var(--chakra-colors-bg)}.rich-text__tableCellResizer{position:absolute;right:-4px;height:100%;width:8px;cursor:ew-resize;z-index:10;top:0}.rich-text__tableCellHeader{background-color:var(--chakra-colors-bg-muted);font-weight:400;text-align:start}.rich-text__tableCellSelected{background-color:var(--chakra-colors-blue-100)}.rich-text__tableCellPrimarySelected{border:2px solid var(--chakra-colors-blue-500);display:block;height:calc(100% - 2px);position:absolute;width:calc(100% - 2px);left:-1px;top:-1px;z-index:2}.rich-text__tableCellEditing{box-shadow:var(--chakra-shadows-sm);border-radius:3px}.rich-text__tableAddColumns,.rich-text__tableAddRows{position:absolute;background-color:var(--chakra-colors-bg-muted);animation:table-controls .2s ease;border:0;cursor:pointer}.rich-text__tableAddColumns{top:0;width:20px;height:100%;right:-25px}.rich-text__tableAddColumns:after{background-size:contain;background-position:center;background-repeat:no-repeat;display:block;content:" ";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.4}.rich-text__tableAddRows{bottom:-25px;width:calc(100% - 25px);height:20px;left:0}.rich-text__tableAddRows:after{background-size:contain;background-position:center;background-repeat:no-repeat;display:block;content:" ";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.4}.rich-text__tableAddColumns:hover,.rich-text__tableAddRows:hover{background-color:var(--chakra-colors-blue-100)}@keyframes table-controls{0%{opacity:0}to{opacity:1}}.rich-text__tableCellResizeRuler{display:block;position:absolute;width:1px;background-color:var(--chakra-colors-blue-500);height:100%;top:0}.rich-text__tableCellActionButtonContainer{display:block;right:5px;top:6px;position:absolute;z-index:4;width:20px;height:20px}.rich-text__tableCellActionButton{background-color:var(--chakra-colors-bg-muted);display:block;border:0;border-radius:20px;width:20px;height:20px;color:var(--chakra-colors-fg);cursor:pointer}.rich-text__tableCellActionButton:hover{background-color:var(--chakra-colors-bg-subtle)}.rich-text__characterLimit{display:inline;background-color:var(--chakra-colors-red-100)}ul.rich-text__ul,ul.rich-text__checklist,ol.rich-text__ol,ol.rich-text__ol1,ol.rich-text__ol2,ol.rich-text__ol3,ol.rich-text__ol4,ol.rich-text__ol5{list-style-position:outside;padding-inline-start:var(--rich-text-list-indent);margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}ul.rich-text__ul{list-style-type:disc}ol.rich-text__ol,ol.rich-text__ol1{list-style-type:decimal}ol.rich-text__ol2{list-style-type:upper-alpha}ol.rich-text__ol3{list-style-type:lower-alpha}ol.rich-text__ol4{list-style-type:upper-roman}ol.rich-text__ol5{list-style-type:lower-roman}li.rich-text__listItem{display:list-item;list-style-position:outside;padding-inline-start:var(--chakra-spacing-1, .25rem)}li.rich-text__listItemUnchecked,li.rich-text__listItemChecked{position:relative;list-style-type:none;padding-left:24px;outline:none}li.rich-text__listItemUnchecked:before,li.rich-text__listItemChecked:before{content:"";position:absolute;left:0;top:3px;width:16px;height:16px;border-radius:var(--chakra-radii-xs, 4px);cursor:pointer}li.rich-text__listItemUnchecked:before{border:1px solid var(--chakra-colors-border)}li.rich-text__listItemChecked:before{background:var(--chakra-colors-fg);border:1px solid var(--chakra-colors-fg)}li.rich-text__listItemChecked:after{content:"";position:absolute;left:0;top:3px;width:16px;height:16px;cursor:pointer;background-color:var(--chakra-colors-bg);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");-webkit-mask-size:10px 10px;mask-size:10px 10px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}ul.rich-text__ul :where(ul,ol),ul.rich-text__checklist :where(ul,ol),ol.rich-text__ol :where(ul,ol),ol.rich-text__ol1 :where(ul,ol),ol.rich-text__ol2 :where(ul,ol),ol.rich-text__ol3 :where(ul,ol),ol.rich-text__ol4 :where(ul,ol),ol.rich-text__ol5 :where(ul,ol){padding-inline-start:var(--rich-text-list-indent)}li.rich-text__nestedListItem{list-style-type:none;padding-inline-start:0}.rich-text__nestedListItem:before,.rich-text__nestedListItem:after{display:none}.rich-text__tokenComment{color:var(--chakra-colors-gray-500)}.rich-text__tokenPunctuation{color:var(--chakra-colors-gray-400)}.rich-text__tokenProperty{color:var(--chakra-colors-purple-600)}.rich-text__tokenSelector{color:var(--chakra-colors-green-600)}.rich-text__tokenOperator{color:var(--chakra-colors-orange-600)}.rich-text__tokenAttr{color:var(--chakra-colors-blue-600)}.rich-text__tokenVariable{color:var(--chakra-colors-yellow-600)}.rich-text__tokenFunction{color:var(--chakra-colors-pink-600)}.rich-text__mark{background:var(--chakra-colors-yellow-100);border-bottom:2px solid var(--chakra-colors-yellow-200);padding-bottom:2px}.rich-text__markOverlap{background:var(--chakra-colors-yellow-200);border-bottom:2px solid var(--chakra-colors-yellow-300)}.rich-text__mark.selected{background:var(--chakra-colors-yellow-300);border-bottom:2px solid var(--chakra-colors-yellow-400)}.rich-text__markOverlap.selected{background:var(--chakra-colors-yellow-400);border-bottom:2px solid var(--chakra-colors-yellow-400)}.rich-text__layoutContainer{display:grid;gap:var(--chakra-spacing-2, .5rem)}.rich-text__layoutItem{border-radius:var(--chakra-radii-sm)}.rich-text__layoutItem>:first-child{margin-top:0;margin-bottom:0}.draggable-block-demo__row{display:flex;gap:var(--chakra-spacing-3, .75rem);padding-block:var(--chakra-spacing-2, .5rem);padding-inline:var(--chakra-spacing-4, 1rem);position:relative;transition:box-shadow .14s ease}.rich-text__row{border-radius:var(--chakra-radii-lg)}.draggable-block-demo__row:focus-within{box-shadow:0 0 0 2px var(--chakra-colors-blue-200)}.draggable-block-demo__content,.rich-text__content{position:relative;flex:1 1 0;transition:border-color .14s ease,box-shadow .14s ease,background .14s ease}.draggable-block-demo__content--empty{color:var(--chakra-colors-fg-muted);border-style:dashed;background:var(--chakra-colors-bg-subtle)}.draggable-block-demo__handle-slot{position:absolute;inset:0;width:0;height:0;pointer-events:none}.draggable-block-demo__handle-controls{position:absolute;pointer-events:none;opacity:0;transform:translate(-10000px,-10000px);z-index:11;display:flex;flex-direction:column;align-items:center;gap:8px}.draggable-block-demo__floating-handle,.draggable-block-demo__delete-button{pointer-events:auto}.draggable-block-demo__floating-handle{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--chakra-radii-sm);border:1px solid var(--chakra-colors-border);background:var(--chakra-colors-bg);color:var(--chakra-colors-fg-muted);box-shadow:var(--chakra-shadows-sm);cursor:grab;transition:box-shadow .12s ease,transform .12s ease}.draggable-block-demo__floating-handle:active{cursor:grabbing}.draggable-block-demo__handle-icon{margin-left:-4px;display:inline-block;font-size:calc(12px * var(--rich-text-font-scale));letter-spacing:-4px;-webkit-user-select:none;user-select:none}.draggable-block-demo__delete-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--chakra-radii-sm);border:1px solid var(--chakra-colors-red-200);background:var(--chakra-colors-red-50);color:var(--chakra-colors-red-600);cursor:pointer;box-shadow:var(--chakra-shadows-xs);transition:background .12s ease,border-color .12s ease}.draggable-block-demo__delete-button:hover{background:var(--chakra-colors-red-100);border-color:var(--chakra-colors-red-300)}.draggable-block-demo__delete-icon{font-size:calc(16px * var(--rich-text-font-scale));line-height:1;-webkit-user-select:none;user-select:none}.draggable-block-demo__gap{position:absolute;left:0;width:100%;height:28px;display:flex;justify-content:center;align-items:center;pointer-events:auto;opacity:0;transition:opacity .12s ease}.draggable-block-demo__gap-line{width:100%;border-top:1px dashed var(--chakra-colors-border);position:absolute;top:50%;transform:translateY(-50%)}.draggable-block-demo__gap-button{pointer-events:auto;border:1px solid var(--chakra-colors-border);background:var(--chakra-colors-bg);border-radius:999px;width:20px;height:20px;font-size:calc(18px * var(--rich-text-font-scale));line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--chakra-colors-fg-muted);box-shadow:var(--chakra-shadows-xs);transition:background .12s ease,color .12s ease}.draggable-block-demo__gap:hover,.draggable-block-demo__gap.is-active{opacity:1}.draggable-block-demo__gap-button:hover{background:var(--chakra-colors-bg-subtle);color:var(--chakra-colors-fg)}.draggable-block-demo__indicator{position:absolute;background:var(--chakra-colors-blue-500);pointer-events:none;border-radius:2px;z-index:12}.draggable-block-demo__indicator--horizontal{height:2px}.draggable-block-demo__indicator--vertical{width:2px}.rich-text__h1{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-4xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg);margin-top:2.5rem;margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h1:first-of-type{margin-top:0}.rich-text__h1_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg);margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-2, .5rem)}.rich-text__h2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-lg, 1.5rem);margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h2_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-2xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-2, .5rem);margin-bottom:var(--chakra-spacing-1, .125rem)}.rich-text__h3{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-lg) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:100%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-lg, 1.5rem);margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h3_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-lg) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:100%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-2, .5rem)}.rich-text__p{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-md) * var(--rich-text-font-scale));line-height:171%;letter-spacing:.14px;margin:0;margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text__p:first-child{margin-top:0}.rich-text__p:only-child{margin-bottom:0}.rich-text[data-rich-message=true] .rich-text__quote{margin-top:var(--chakra-spacing-3, .75rem);margin-left:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text[data-rich-message=true] .rich-text__code{margin-top:8px;margin-bottom:8px}.rich-text[data-rich-message=true] .rich-text__h1{font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));margin-top:var(--chakra-spacing-5, 1.5rem);margin-bottom:var(--chakra-spacing-4, 1rem)}.rich-text[data-rich-message=true] .rich-text__h2{font-size:calc(var(--chakra-font-sizes-2xl) * var(--rich-text-font-scale));margin-top:var(--chakra-spacing-4, 1rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text[data-rich-message=true] .rich-text__h3{margin-top:var(--chakra-spacing-4, 1rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text__p2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-md) * var(--rich-text-font-scale));line-height:171%;letter-spacing:.14px;margin:0}.rich-text__textUnderline{text-decoration:underline}.rich-text__textItalic{font-style:italic}span.editor-equation{display:inline-block}.editor-equation span{cursor:inherit}.editor-equation{-webkit-user-select:none;user-select:none}.katex-display{overflow-x:auto;overflow-y:hidden}.code-block-actions{z-index:1001;opacity:.95}.code-block-actions button{box-shadow:var(--chakra-shadows-sm)}.floating-text-format-toolbar{display:flex;position:absolute;top:0;left:0;z-index:1000;opacity:0;pointer-events:none;background-color:var(--chakra-colors-bg);border-radius:8px;border:1px solid var(--chakra-colors-border-muted);box-shadow:0 5px 10px #0000001a;transition:opacity .2s;will-change:transform;padding:4px;gap:2px}.floating-text-format-toolbar.active{opacity:1;pointer-events:auto}.floating-text-format-toolbar button[data-active]{background-color:var(--chakra-colors-bg-accent-primary-medium);color:var(--chakra-colors-text-selectable-primary)}.link-editor{position:absolute;top:0;left:0;z-index:1001;width:320px;opacity:0;pointer-events:none;transition:opacity .2s;will-change:transform}.link-editor.active{opacity:1;pointer-events:auto;background-color:var(--chakra-colors-bg);border-radius:8px;border:1px solid var(--chakra-colors-border-muted);box-shadow:0 5px 10px #0000001a}.link-editor-content{width:100%}.link-editor-url-field{flex:1;min-width:0}.rich-text__p--no-margin{margin:0}
1
+ .pstdio-terminal .xterm-viewport{scrollbar-width:thin;scrollbar-color:rgba(128,128,128,.4) transparent}.pstdio-terminal .xterm-viewport::-webkit-scrollbar{width:10px}.pstdio-terminal .xterm-viewport::-webkit-scrollbar-track{background:transparent}.pstdio-terminal .xterm-viewport::-webkit-scrollbar-thumb{background-color:#80808066;border:3px solid transparent;background-clip:padding-box;border-radius:9999px}.pstdio-terminal .xterm-viewport::-webkit-scrollbar-thumb:hover{background-color:#80808099}.rich-text__ltr{text-align:left}.rich-text__rtl{text-align:right}.rich-text{--rich-text-font-scale: 1;--rich-text-list-indent: 1.5rem;font-size:calc(1rem * var(--rich-text-font-scale))}.rich-text[data-rich-message=true]{--rich-text-font-scale: .9}.rich-text[data-rich-message=true] .rich-text__p:last-child{margin-bottom:0}.rich-text__paragraph{margin:0;position:relative}.rich-text__quote{margin:0;margin-top:var(--chakra-spacing-xl, 1.5rem);margin-left:var(--chakra-spacing-sm, .75rem);margin-bottom:var(--chakra-spacing-xl, 1.5rem);font-size:calc(15px * var(--rich-text-font-scale));color:var(--chakra-colors-fg-muted);border-left:4px solid var(--chakra-colors-border);padding-left:16px}.rich-text__indent{--lexical-indent-base-value: 40px}.rich-text__textBold{font-weight:700}.rich-text__reference{font:inherit;border-bottom:1px dotted currentColor;opacity:.9;white-space:nowrap}.rich-text__textStrikethrough{text-decoration:line-through}.rich-text__textUnderlineStrikethrough{text-decoration:underline line-through}.rich-text__textSubscript{font-size:.8em;vertical-align:sub}.rich-text__textSuperscript{font-size:.8em;vertical-align:super}.rich-text__textCode{background-color:var(--chakra-colors-bg-code);padding:1px .25rem;font-family:var(--chakra-fonts-mono);font-size:.94em}.rich-text__link{color:var(--chakra-colors-blue-600);text-decoration:none;cursor:pointer}.rich-text__link:hover{text-decoration:underline}.rich-text__code{background-color:var(--chakra-colors-bg-code);font-family:var(--chakra-fonts-mono);display:block;padding:8px 8px 8px 52px;line-height:1.53;font-size:calc(13px * var(--rich-text-font-scale));margin:0;margin-top:var(--chakra-spacing-md, 1rem);margin-bottom:var(--chakra-spacing-md, 1rem);overflow-x:auto;position:relative;tab-size:2}.rich-text__code:before{content:attr(data-gutter);position:absolute;background-color:var(--chakra-colors-bg-subtle);left:0;top:0;bottom:0;border-right:1px solid var(--chakra-colors-border);padding:8px;color:var(--chakra-colors-fg-muted);white-space:pre-wrap;text-align:right;min-width:25px}.rich-text__table{border-collapse:collapse;border-spacing:0;color:var(--chakra-colors-fg);font-size:calc(var(--chakra-font-sizes-sm) * var(--rich-text-font-scale));line-height:21px;overflow-y:auto;overflow-x:auto;table-layout:fixed;width:max-content}.rich-text__tableSelection *::selection{background-color:transparent}.rich-text__tableSelected{outline:2px solid var(--chakra-colors-blue-500)}.rich-text__tableCell{border:1px solid var(--chakra-colors-border);vertical-align:top;text-align:start;padding:6px 8px;position:relative;outline:none}.rich-text__tableCellSortedIndicator{display:block;opacity:.5;position:absolute;bottom:0;left:0;width:100%;height:4px;background-color:var(--chakra-colors-bg)}.rich-text__tableCellResizer{position:absolute;right:-4px;height:100%;width:8px;cursor:ew-resize;z-index:10;top:0}.rich-text__tableCellHeader{background-color:var(--chakra-colors-bg-muted);font-weight:400;text-align:start}.rich-text__tableCellSelected{background-color:var(--chakra-colors-blue-100)}.rich-text__tableCellPrimarySelected{border:2px solid var(--chakra-colors-blue-500);display:block;height:calc(100% - 2px);position:absolute;width:calc(100% - 2px);left:-1px;top:-1px;z-index:2}.rich-text__tableCellEditing{outline:1px solid var(--chakra-colors-border-subtle);outline-offset:-1px;border-radius:3px}.rich-text__tableAddColumns,.rich-text__tableAddRows{position:absolute;background-color:var(--chakra-colors-bg-muted);animation:table-controls .2s ease;border:0;cursor:pointer}.rich-text__tableAddColumns{top:0;width:20px;height:100%;right:-25px}.rich-text__tableAddColumns:after{background-size:contain;background-position:center;background-repeat:no-repeat;display:block;content:" ";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.4}.rich-text__tableAddRows{bottom:-25px;width:calc(100% - 25px);height:20px;left:0}.rich-text__tableAddRows:after{background-size:contain;background-position:center;background-repeat:no-repeat;display:block;content:" ";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.4}.rich-text__tableAddColumns:hover,.rich-text__tableAddRows:hover{background-color:var(--chakra-colors-blue-100)}@keyframes table-controls{0%{opacity:0}to{opacity:1}}.rich-text__tableCellResizeRuler{display:block;position:absolute;width:1px;background-color:var(--chakra-colors-blue-500);height:100%;top:0}.rich-text__tableCellActionButtonContainer{display:block;right:5px;top:6px;position:absolute;z-index:4;width:20px;height:20px}.rich-text__tableCellActionButton{background-color:var(--chakra-colors-bg-muted);display:block;border:0;width:20px;height:20px;color:var(--chakra-colors-fg);cursor:pointer}.rich-text__tableCellActionButton:hover{background-color:var(--chakra-colors-bg-subtle)}.rich-text__characterLimit{display:inline;background-color:var(--chakra-colors-red-100)}ul.rich-text__ul,ul.rich-text__checklist,ol.rich-text__ol,ol.rich-text__ol1,ol.rich-text__ol2,ol.rich-text__ol3,ol.rich-text__ol4,ol.rich-text__ol5{list-style-position:outside;padding-inline-start:var(--rich-text-list-indent);margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}ul.rich-text__ul{list-style-type:disc}ol.rich-text__ol,ol.rich-text__ol1{list-style-type:decimal}ol.rich-text__ol2{list-style-type:upper-alpha}ol.rich-text__ol3{list-style-type:lower-alpha}ol.rich-text__ol4{list-style-type:upper-roman}ol.rich-text__ol5{list-style-type:lower-roman}li.rich-text__listItem{display:list-item;list-style-position:outside;padding-inline-start:var(--chakra-spacing-1, .25rem)}li.rich-text__listItemUnchecked,li.rich-text__listItemChecked{position:relative;list-style-type:none;padding-left:24px;outline:none}li.rich-text__listItemUnchecked:before,li.rich-text__listItemChecked:before{content:"";position:absolute;left:0;top:3px;width:16px;height:16px;border-radius:var(--chakra-radii-xs, 4px);cursor:pointer}li.rich-text__listItemUnchecked:before{border:1px solid var(--chakra-colors-border)}li.rich-text__listItemChecked:before{background:var(--chakra-colors-fg);border:1px solid var(--chakra-colors-fg)}li.rich-text__listItemChecked:after{content:"";position:absolute;left:0;top:3px;width:16px;height:16px;cursor:pointer;background-color:var(--chakra-colors-bg);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");-webkit-mask-size:10px 10px;mask-size:10px 10px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}ul.rich-text__ul :where(ul,ol),ul.rich-text__checklist :where(ul,ol),ol.rich-text__ol :where(ul,ol),ol.rich-text__ol1 :where(ul,ol),ol.rich-text__ol2 :where(ul,ol),ol.rich-text__ol3 :where(ul,ol),ol.rich-text__ol4 :where(ul,ol),ol.rich-text__ol5 :where(ul,ol){padding-inline-start:var(--rich-text-list-indent)}li.rich-text__nestedListItem{list-style-type:none;padding-inline-start:0}.rich-text__nestedListItem:before,.rich-text__nestedListItem:after{display:none}.rich-text__tokenComment{color:var(--chakra-colors-gray-500)}.rich-text__tokenPunctuation{color:var(--chakra-colors-gray-400)}.rich-text__tokenProperty{color:var(--chakra-colors-purple-600)}.rich-text__tokenSelector{color:var(--chakra-colors-green-600)}.rich-text__tokenOperator{color:var(--chakra-colors-orange-600)}.rich-text__tokenAttr{color:var(--chakra-colors-blue-600)}.rich-text__tokenVariable{color:var(--chakra-colors-yellow-600)}.rich-text__tokenFunction{color:var(--chakra-colors-pink-600)}.rich-text__mark{background:var(--chakra-colors-yellow-100);border-bottom:2px solid var(--chakra-colors-yellow-200);padding-bottom:2px}.rich-text__markOverlap{background:var(--chakra-colors-yellow-200);border-bottom:2px solid var(--chakra-colors-yellow-300)}.rich-text__mark.selected{background:var(--chakra-colors-yellow-300);border-bottom:2px solid var(--chakra-colors-yellow-400)}.rich-text__markOverlap.selected{background:var(--chakra-colors-yellow-400);border-bottom:2px solid var(--chakra-colors-yellow-400)}.rich-text__layoutContainer{display:grid;gap:var(--chakra-spacing-2, .5rem)}.rich-text__layoutItem{border-radius:var(--chakra-radii-sm)}.rich-text__layoutItem>:first-child{margin-top:0;margin-bottom:0}.draggable-block-demo__row{display:flex;gap:var(--chakra-spacing-3, .75rem);padding-block:var(--chakra-spacing-2, .5rem);padding-inline:var(--chakra-spacing-4, 1rem);position:relative;transition:outline-color .14s ease}.rich-text__row{border-radius:var(--chakra-radii-lg)}.draggable-block-demo__row:focus-within{outline:2px solid var(--chakra-colors-blue-200);outline-offset:2px}.draggable-block-demo__content,.rich-text__content{position:relative;flex:1 1 0;transition:border-color .14s ease,background .14s ease}.draggable-block-demo__content--empty{color:var(--chakra-colors-fg-muted);border-style:dashed;background:var(--chakra-colors-bg-subtle)}.draggable-block-demo__handle-slot{position:absolute;inset:0;width:0;height:0;pointer-events:none}.draggable-block-demo__handle-controls{position:absolute;pointer-events:none;opacity:0;transform:translate(-10000px,-10000px);z-index:11;display:flex;flex-direction:column;align-items:center;gap:8px}.draggable-block-demo__floating-handle,.draggable-block-demo__delete-button{pointer-events:auto}.draggable-block-demo__floating-handle{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:1px solid var(--chakra-colors-border);background:var(--chakra-colors-bg);color:var(--chakra-colors-fg-muted);cursor:grab;transition:border-color .12s ease,transform .12s ease}.draggable-block-demo__floating-handle:active{cursor:grabbing}.draggable-block-demo__handle-icon{margin-left:-4px;display:inline-block;font-size:calc(12px * var(--rich-text-font-scale));letter-spacing:-4px;-webkit-user-select:none;user-select:none}.draggable-block-demo__delete-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:1px solid var(--chakra-colors-red-200);background:var(--chakra-colors-red-50);color:var(--chakra-colors-red-600);cursor:pointer;transition:background .12s ease,border-color .12s ease}.draggable-block-demo__delete-button:hover{background:var(--chakra-colors-red-100);border-color:var(--chakra-colors-red-300)}.draggable-block-demo__delete-icon{font-size:calc(16px * var(--rich-text-font-scale));line-height:1;-webkit-user-select:none;user-select:none}.draggable-block-demo__gap{position:absolute;left:0;width:100%;height:28px;display:flex;justify-content:center;align-items:center;pointer-events:auto;opacity:0;transition:opacity .12s ease}.draggable-block-demo__gap-line{width:100%;border-top:1px dashed var(--chakra-colors-border);position:absolute;top:50%;transform:translateY(-50%)}.draggable-block-demo__gap-button{pointer-events:auto;border:1px solid var(--chakra-colors-border);background:var(--chakra-colors-bg);width:20px;height:20px;font-size:calc(18px * var(--rich-text-font-scale));line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--chakra-colors-fg-muted);transition:background .12s ease,color .12s ease}.draggable-block-demo__gap:hover,.draggable-block-demo__gap.is-active{opacity:1}.draggable-block-demo__gap-button:hover{background:var(--chakra-colors-bg-subtle);color:var(--chakra-colors-fg)}.draggable-block-demo__indicator{position:absolute;background:var(--chakra-colors-blue-500);pointer-events:none;border-radius:2px;z-index:12}.draggable-block-demo__indicator--horizontal{height:2px}.draggable-block-demo__indicator--vertical{width:2px}.rich-text__h1{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-4xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg);margin-top:2.5rem;margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h1:first-of-type{margin-top:0}.rich-text__h1_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg);margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-2, .5rem)}.rich-text__h2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-lg, 1.5rem);margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h2_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-2xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-2, .5rem);margin-bottom:var(--chakra-spacing-1, .125rem)}.rich-text__h3{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-lg) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:100%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-lg, 1.5rem);margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h3_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-lg) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:100%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-2, .5rem)}.rich-text__p{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-md) * var(--rich-text-font-scale));line-height:171%;letter-spacing:.14px;margin:0;margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text__p:first-child{margin-top:0}.rich-text__p:only-child{margin-bottom:0}.rich-text[data-rich-message=true] .rich-text__quote{margin-top:var(--chakra-spacing-3, .75rem);margin-left:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text[data-rich-message=true] .rich-text__code{margin-top:8px;margin-bottom:8px}.rich-text[data-rich-message=true] .rich-text__h1{font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));margin-top:var(--chakra-spacing-5, 1.5rem);margin-bottom:var(--chakra-spacing-4, 1rem)}.rich-text[data-rich-message=true] .rich-text__h2{font-size:calc(var(--chakra-font-sizes-2xl) * var(--rich-text-font-scale));margin-top:var(--chakra-spacing-4, 1rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text[data-rich-message=true] .rich-text__h3{margin-top:var(--chakra-spacing-4, 1rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text__p2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-md) * var(--rich-text-font-scale));line-height:171%;letter-spacing:.14px;margin:0}.rich-text__textUnderline{text-decoration:underline}.rich-text__textItalic{font-style:italic}span.editor-equation{display:inline-block}.editor-equation span{cursor:inherit}.editor-equation{-webkit-user-select:none;user-select:none}.katex-display{overflow-x:auto;overflow-y:hidden}.rich-text__p--no-margin{margin:0}.code-block-actions{z-index:1001;opacity:.95}.code-block-actions button{border:1px solid var(--chakra-colors-border-subtle)}.floating-text-format-toolbar{display:flex;position:absolute;top:0;left:0;z-index:1000;opacity:0;pointer-events:none;background-color:var(--chakra-colors-bg);border-radius:8px;border:1px solid var(--chakra-colors-border-subtle);transition:opacity .2s;will-change:transform;padding:4px;gap:2px}.floating-text-format-toolbar.active{opacity:1;pointer-events:auto}.floating-text-format-toolbar button[data-active]{background-color:var(--chakra-colors-bg-accent-primary-medium);color:var(--chakra-colors-text-selectable-primary)}.link-editor{position:absolute;top:0;left:0;z-index:1001;width:320px;opacity:0;pointer-events:none;transition:opacity .2s;will-change:transform}.link-editor.active{opacity:1;pointer-events:auto;background-color:var(--chakra-colors-bg);border-radius:8px;border:1px solid var(--chakra-colors-border-subtle)}.link-editor-content{width:100%}.link-editor-url-field{flex:1;min-width:0}
@@ -0,0 +1,339 @@
1
+ import { jsx as F } from "react/jsx-runtime";
2
+ import { FitAddon as C } from "@xterm/addon-fit";
3
+ import { Terminal as U } from "@xterm/xterm";
4
+ import "@xterm/xterm/css/xterm.css";
5
+ import { useState as L, useEffect as v, useRef as T } from "react";
6
+ import { c as M } from "react/compiler-runtime";
7
+ const N = (e, n, t = {}) => {
8
+ const o = [];
9
+ return o.push(n.onData((i) => e.write(i))), o.push(e.onInput((i) => {
10
+ n.write(i), t.onInput?.(i);
11
+ })), o.push(e.onResize(({
12
+ cols: i,
13
+ rows: a
14
+ }) => {
15
+ n.resize(i, a);
16
+ })), t.onExit && o.push(n.onExit(t.onExit)), t.onError && o.push(n.onError(t.onError)), () => {
17
+ for (; o.length > 0; ) {
18
+ const i = o.pop();
19
+ try {
20
+ i?.();
21
+ } catch {
22
+ }
23
+ }
24
+ };
25
+ }, q = new TextEncoder(), K = (e) => typeof e == "string" ? q.encode(e) : e, W = (e) => e > 0 ? new Promise((n) => setTimeout(n, e)) : Promise.resolve(), j = (e) => [{
26
+ data: e.replace(/\r/g, `\r
27
+ `)
28
+ }], G = (e, n) => {
29
+ n.data !== void 0 && e.emitData(K(n.data)), n.error !== void 0 && e.emitError({
30
+ message: n.error
31
+ }), n.exit !== void 0 && e.emitExit({
32
+ code: n.exit.code,
33
+ signal: n.exit.signal ?? null
34
+ });
35
+ }, O = async (e, n) => {
36
+ for (const t of n) {
37
+ if (e.isExited() || (await W(t.delayMs ?? 0), e.isExited())) return;
38
+ G(e, t);
39
+ }
40
+ }, H = (e, n) => {
41
+ const t = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set();
42
+ let a = !1, m = !1;
43
+ const u = {
44
+ isExited: () => a,
45
+ emitData(r) {
46
+ for (const s of t) s(r);
47
+ },
48
+ emitExit(r) {
49
+ if (!a) {
50
+ a = !0;
51
+ for (const s of o) s(r);
52
+ }
53
+ },
54
+ emitError(r) {
55
+ for (const s of i) s(r);
56
+ }
57
+ };
58
+ return {
59
+ session: {
60
+ id: crypto.randomUUID(),
61
+ write(r) {
62
+ if (a) return;
63
+ const s = typeof r == "string" ? r : new TextDecoder().decode(r), d = n(s);
64
+ d && O(u, d);
65
+ },
66
+ resize(r, s) {
67
+ e.onResize?.({
68
+ cols: r,
69
+ rows: s
70
+ });
71
+ },
72
+ kill(r) {
73
+ a || (e.onKill?.(r), u.emitExit({
74
+ code: null,
75
+ signal: r ?? null
76
+ }));
77
+ },
78
+ onData(r) {
79
+ return t.add(r), !m && e.initial && (m = !0, O(u, e.initial)), () => t.delete(r);
80
+ },
81
+ onExit(r) {
82
+ return o.add(r), () => o.delete(r);
83
+ },
84
+ onError(r) {
85
+ return i.add(r), () => i.delete(r);
86
+ }
87
+ }
88
+ };
89
+ }, de = (e = {}) => {
90
+ const n = e.onInput ?? j;
91
+ return {
92
+ async openSession(t) {
93
+ const {
94
+ session: o
95
+ } = H(e, n);
96
+ return o;
97
+ }
98
+ };
99
+ }, _ = {
100
+ cursorAccent: "#000000",
101
+ selectionForeground: void 0
102
+ }, J = {
103
+ ..._,
104
+ background: "#f4f4f5",
105
+ foreground: "#171717",
106
+ cursor: "#171717",
107
+ selectionBackground: "#d4d4d8",
108
+ black: "#27272a",
109
+ red: "#dc2626",
110
+ green: "#16a34a",
111
+ yellow: "#ca8a04",
112
+ blue: "#2563eb",
113
+ magenta: "#c026d3",
114
+ cyan: "#0891b2",
115
+ white: "#e4e4e7",
116
+ brightBlack: "#52525b",
117
+ brightRed: "#ef4444",
118
+ brightGreen: "#22c55e",
119
+ brightYellow: "#eab308",
120
+ brightBlue: "#3b82f6",
121
+ brightMagenta: "#d946ef",
122
+ brightCyan: "#06b6d4",
123
+ brightWhite: "#fafafa"
124
+ }, P = {
125
+ ..._,
126
+ background: "#0a0a0a",
127
+ foreground: "#fafafa",
128
+ cursor: "#fafafa",
129
+ selectionBackground: "#3f3f46",
130
+ black: "#27272a",
131
+ red: "#f87171",
132
+ green: "#4ade80",
133
+ yellow: "#facc15",
134
+ blue: "#60a5fa",
135
+ magenta: "#e879f9",
136
+ cyan: "#22d3ee",
137
+ white: "#e4e4e7",
138
+ brightBlack: "#52525b",
139
+ brightRed: "#fca5a5",
140
+ brightGreen: "#86efac",
141
+ brightYellow: "#fde047",
142
+ brightBlue: "#93c5fd",
143
+ brightMagenta: "#f0abfc",
144
+ brightCyan: "#67e8f9",
145
+ brightWhite: "#fafafa"
146
+ }, A = {
147
+ light: J,
148
+ dark: P
149
+ }, Y = (e) => e ? typeof e == "string" ? A[e] : e : A.dark, $ = (e) => JSON.stringify({
150
+ command: e.command,
151
+ cwd: e.cwd,
152
+ env: e.env ? Object.fromEntries(Object.entries(e.env).sort(([n], [t]) => n.localeCompare(t))) : void 0,
153
+ cols: e.cols,
154
+ rows: e.rows
155
+ }), Z = (e) => JSON.parse(e), Q = (e) => {
156
+ const n = M(8), {
157
+ bridge: t,
158
+ request: o,
159
+ killOnUnmount: i
160
+ } = e, a = i === void 0 ? !0 : i;
161
+ let m;
162
+ n[0] !== o ? (m = $(o), n[0] = o, n[1] = m) : m = n[1];
163
+ const u = m;
164
+ let h;
165
+ n[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (h = {
166
+ session: null,
167
+ status: "idle",
168
+ exit: null,
169
+ error: null
170
+ }, n[2] = h) : h = n[2];
171
+ const [r, s] = L(h);
172
+ let d, g;
173
+ return n[3] !== t || n[4] !== a || n[5] !== u ? (d = () => {
174
+ if (!t) {
175
+ s({
176
+ session: null,
177
+ status: "idle",
178
+ exit: null,
179
+ error: null
180
+ });
181
+ return;
182
+ }
183
+ let p = !1, S = null, b = "opening";
184
+ const w = [];
185
+ s({
186
+ session: null,
187
+ status: "opening",
188
+ exit: null,
189
+ error: null
190
+ });
191
+ const x = Z(u);
192
+ return t.openSession(x).then((l) => {
193
+ if (p) {
194
+ l.kill();
195
+ return;
196
+ }
197
+ S = l, w.push(l.onExit((c) => {
198
+ b = "exited", s((f) => ({
199
+ ...f,
200
+ status: "exited",
201
+ exit: c
202
+ }));
203
+ }), l.onError((c) => {
204
+ b = "error", s((f) => ({
205
+ ...f,
206
+ status: "error",
207
+ error: c
208
+ }));
209
+ })), b = "open", s({
210
+ session: l,
211
+ status: "open",
212
+ exit: null,
213
+ error: null
214
+ });
215
+ }).catch((l) => {
216
+ if (p)
217
+ return;
218
+ const c = l instanceof Error ? l.message : String(l);
219
+ b = "error", s({
220
+ session: null,
221
+ status: "error",
222
+ exit: null,
223
+ error: {
224
+ message: c
225
+ }
226
+ });
227
+ }), () => {
228
+ for (p = !0; w.length > 0; )
229
+ w.pop()?.();
230
+ a && S && b !== "exited" && S.kill();
231
+ };
232
+ }, g = [t, u, a], n[3] = t, n[4] = a, n[5] = u, n[6] = d, n[7] = g) : (d = n[6], g = n[7]), v(d, g), r;
233
+ }, V = '"JetBrains Mono", "Fira Code", Menlo, Consolas, monospace', X = 13, z = 80, D = 24, ee = (e) => ({
234
+ ...e,
235
+ cols: e?.cols ?? z,
236
+ rows: e?.rows ?? D
237
+ }), ne = (e) => ({
238
+ write(n) {
239
+ e.write(n);
240
+ },
241
+ onInput(n) {
242
+ const t = e.onData(n);
243
+ return () => t.dispose();
244
+ },
245
+ onResize(n) {
246
+ const t = e.onResize(n);
247
+ return () => t.dispose();
248
+ }
249
+ }), k = (e) => {
250
+ try {
251
+ e?.fit();
252
+ } catch {
253
+ }
254
+ }, te = (e, n) => {
255
+ n.resize(e.cols, e.rows);
256
+ }, re = (e, n, t, o) => {
257
+ const i = N(n, t, {
258
+ onExit: o.onSessionExit
259
+ });
260
+ return te(e, t), o.onSessionOpen?.(t.id), i;
261
+ }, oe = (e, n, t, o) => re(e, n, t, {
262
+ onSessionOpen: (i) => o.onSessionOpen.current?.(i),
263
+ onSessionExit: (i) => o.onSessionExit.current?.(i)
264
+ }), fe = (e) => {
265
+ const {
266
+ bridge: n,
267
+ request: t,
268
+ theme: o,
269
+ fontFamily: i = V,
270
+ fontSize: a = X,
271
+ killOnUnmount: m = !0,
272
+ className: u,
273
+ style: h,
274
+ onSessionOpen: r,
275
+ onSessionExit: s
276
+ } = e, d = T(null), g = T(null), p = T(null), S = T(null), b = T(r), w = T(s);
277
+ b.current = r, w.current = s, S.current || (S.current = ee(t));
278
+ const x = Y(o);
279
+ v(() => {
280
+ const c = d.current;
281
+ if (!c) return;
282
+ const f = new U({
283
+ cols: z,
284
+ rows: D,
285
+ cursorBlink: !0,
286
+ convertEol: !0,
287
+ allowProposedApi: !0
288
+ }), y = new C();
289
+ f.loadAddon(y), f.open(c), g.current = f, p.current = y;
290
+ const E = () => k(y);
291
+ E();
292
+ const I = window.requestAnimationFrame(E), B = window.setTimeout(E, 50), R = new ResizeObserver(E);
293
+ return R.observe(c), () => {
294
+ window.cancelAnimationFrame(I), window.clearTimeout(B), R.disconnect(), f.dispose(), g.current = null, p.current = null;
295
+ };
296
+ }, []), v(() => {
297
+ const c = g.current;
298
+ c && (c.options.theme = x, c.options.fontFamily = i, c.options.fontSize = a, k(p.current));
299
+ }, [x, i, a]);
300
+ const {
301
+ session: l
302
+ } = Q({
303
+ bridge: n,
304
+ request: S.current,
305
+ killOnUnmount: m
306
+ });
307
+ return v(() => {
308
+ const c = g.current;
309
+ if (!c || !l) return;
310
+ k(p.current);
311
+ const f = window.requestAnimationFrame(() => k(p.current)), y = ne(c), E = oe(c, y, l, {
312
+ onSessionOpen: b,
313
+ onSessionExit: w
314
+ });
315
+ return c.focus(), () => {
316
+ window.cancelAnimationFrame(f), E();
317
+ };
318
+ }, [l]), /* @__PURE__ */ F("div", { className: u, style: {
319
+ position: "relative",
320
+ width: "100%",
321
+ height: "100%",
322
+ backgroundColor: typeof x.background == "string" ? x.background : void 0,
323
+ ...h
324
+ }, children: /* @__PURE__ */ F("div", { ref: d, className: "pstdio-terminal", style: {
325
+ position: "absolute",
326
+ inset: 0
327
+ } }) });
328
+ };
329
+ export {
330
+ fe as Terminal,
331
+ N as bindSessionToSink,
332
+ de as createScriptedTerminalBridge,
333
+ P as darkTerminalTheme,
334
+ J as lightTerminalTheme,
335
+ Y as resolveTerminalTheme,
336
+ A as terminalThemes,
337
+ Q as useTerminalSession
338
+ };
339
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sources":["../src/components/terminal/bind-session.ts","../src/components/terminal/scripted-bridge.ts","../src/components/terminal/terminal-theme.ts","../src/components/terminal/use-terminal-session.ts","../src/components/terminal/terminal.tsx"],"sourcesContent":["import type { TerminalSessionAdapter } from \"./types\";\n\n/**\n * Minimal subset of xterm.js that the binding needs. Tests substitute a fake\n * sink so the wire-up logic can be exercised without a DOM.\n */\nexport interface TerminalSink {\n write(data: string | Uint8Array): void;\n onInput(handler: (data: string) => void): () => void;\n onResize(handler: (size: { cols: number; rows: number }) => void): () => void;\n}\n\nexport interface BindSessionOptions {\n /** Forwarded to the session when the user types in the sink. */\n onInput?: (data: string) => void;\n /** Called once the session exits; useful for surfacing status. */\n onExit?: (exit: { code: number | null; signal: string | null }) => void;\n /** Called on transport errors. */\n onError?: (error: { message: string }) => void;\n}\n\n/**\n * Wires a {@link TerminalSink} (typically xterm.js) to a\n * {@link TerminalSessionAdapter}. Returns a disposer that detaches every\n * subscription it created. The session itself is *not* killed — owning the\n * session lifecycle is the caller's responsibility.\n */\nexport const bindSessionToSink = (\n sink: TerminalSink,\n session: TerminalSessionAdapter,\n options: BindSessionOptions = {},\n) => {\n const disposers: Array<() => void> = [];\n\n disposers.push(session.onData((chunk) => sink.write(chunk)));\n\n disposers.push(\n sink.onInput((data) => {\n session.write(data);\n options.onInput?.(data);\n }),\n );\n\n disposers.push(\n sink.onResize(({ cols, rows }) => {\n session.resize(cols, rows);\n }),\n );\n\n if (options.onExit) disposers.push(session.onExit(options.onExit));\n if (options.onError) disposers.push(session.onError(options.onError));\n\n return () => {\n while (disposers.length > 0) {\n const dispose = disposers.pop();\n try {\n dispose?.();\n } catch {\n // Disposer errors during teardown are intentionally swallowed so a\n // partially-bound session still cleans up the remaining subscriptions.\n }\n }\n };\n};\n","import type { TerminalBridge, TerminalSessionAdapter, TerminalSessionError, TerminalSessionExit } from \"./types\";\n\nexport interface ScriptedTerminalStep {\n /** Bytes the host pushes back to the renderer (utf-8 string is encoded for you). */\n data?: string | Uint8Array;\n /** Milliseconds to wait before delivering this step. */\n delayMs?: number;\n /** Marks the session as exited after this step. */\n exit?: { code: number | null; signal?: string | null };\n /** Delivers a transport error after this step. */\n error?: string;\n}\n\nexport interface ScriptedBridgeOptions {\n /** Initial script delivered after the first data subscriber attaches. */\n initial?: ScriptedTerminalStep[];\n /**\n * Responds to user input. Return additional steps to play, or `undefined`\n * to ignore. Defaults to echoing the input followed by a newline.\n */\n onInput?: (input: string) => ScriptedTerminalStep[] | undefined;\n /** Called whenever the renderer requests a resize. */\n onResize?: (size: { cols: number; rows: number }) => void;\n /** Called once when the renderer kills the session. */\n onKill?: (signal?: string) => void;\n}\n\nconst encoder = new TextEncoder();\n\nconst toChunk = (data: string | Uint8Array) => (typeof data === \"string\" ? encoder.encode(data) : data);\n\nconst wait = (ms: number) => (ms > 0 ? new Promise<void>((resolve) => setTimeout(resolve, ms)) : Promise.resolve());\n\nconst defaultEcho = (input: string): ScriptedTerminalStep[] => [{ data: input.replace(/\\r/g, \"\\r\\n\") }];\n\ninterface SessionEmitter {\n isExited(): boolean;\n emitData(chunk: Uint8Array): void;\n emitExit(exit: TerminalSessionExit): void;\n emitError(error: TerminalSessionError): void;\n}\n\nconst runStep = (emitter: SessionEmitter, step: ScriptedTerminalStep) => {\n if (step.data !== undefined) emitter.emitData(toChunk(step.data));\n if (step.error !== undefined) emitter.emitError({ message: step.error });\n if (step.exit !== undefined) emitter.emitExit({ code: step.exit.code, signal: step.exit.signal ?? null });\n};\n\nconst playSteps = async (emitter: SessionEmitter, steps: ScriptedTerminalStep[]) => {\n for (const step of steps) {\n if (emitter.isExited()) return;\n await wait(step.delayMs ?? 0);\n if (emitter.isExited()) return;\n runStep(emitter, step);\n }\n};\n\nconst createScriptedSession = (\n options: ScriptedBridgeOptions,\n onInput: NonNullable<ScriptedBridgeOptions[\"onInput\"]>,\n) => {\n const dataHandlers = new Set<(chunk: Uint8Array) => void>();\n const exitHandlers = new Set<(exit: TerminalSessionExit) => void>();\n const errorHandlers = new Set<(error: TerminalSessionError) => void>();\n let exited = false;\n let startedInitial = false;\n\n const emitter: SessionEmitter = {\n isExited: () => exited,\n emitData(chunk) {\n for (const handler of dataHandlers) handler(chunk);\n },\n emitExit(exit) {\n if (exited) return;\n exited = true;\n for (const handler of exitHandlers) handler(exit);\n },\n emitError(error) {\n for (const handler of errorHandlers) handler(error);\n },\n };\n\n const session: TerminalSessionAdapter = {\n id: crypto.randomUUID(),\n write(data) {\n if (exited) return;\n const text = typeof data === \"string\" ? data : new TextDecoder().decode(data);\n const response = onInput(text);\n if (response) void playSteps(emitter, response);\n },\n resize(cols, rows) {\n options.onResize?.({ cols, rows });\n },\n kill(signal) {\n if (exited) return;\n options.onKill?.(signal);\n emitter.emitExit({ code: null, signal: signal ?? null });\n },\n onData(handler) {\n dataHandlers.add(handler);\n if (!startedInitial && options.initial) {\n startedInitial = true;\n void playSteps(emitter, options.initial);\n }\n return () => dataHandlers.delete(handler);\n },\n onExit(handler) {\n exitHandlers.add(handler);\n return () => exitHandlers.delete(handler);\n },\n onError(handler) {\n errorHandlers.add(handler);\n return () => errorHandlers.delete(handler);\n },\n };\n\n return { session };\n};\n\n/**\n * Deterministic in-memory bridge. Used by stories and tests to exercise the\n * terminal UI without a real PTY supervisor.\n */\nexport const createScriptedTerminalBridge = (options: ScriptedBridgeOptions = {}): TerminalBridge => {\n const onInput = options.onInput ?? defaultEcho;\n\n return {\n async openSession(_request) {\n const { session } = createScriptedSession(options, onInput);\n return session;\n },\n };\n};\n","import type { ITheme } from \"@xterm/xterm\";\n\n/**\n * xterm theme presets aligned with the workbench `bg.inverted` / `fg.inverted`\n * pairings so the terminal blends with the surrounding chrome without the\n * consuming extension touching xterm directly. Consumers can still pass any\n * `ITheme` they like via the `theme` prop.\n */\nexport type TerminalThemeName = \"light\" | \"dark\";\n\nconst baseTheme: Partial<ITheme> = {\n cursorAccent: \"#000000\",\n selectionForeground: undefined,\n};\n\nexport const lightTerminalTheme: ITheme = {\n ...baseTheme,\n background: \"#f4f4f5\",\n foreground: \"#171717\",\n cursor: \"#171717\",\n selectionBackground: \"#d4d4d8\",\n black: \"#27272a\",\n red: \"#dc2626\",\n green: \"#16a34a\",\n yellow: \"#ca8a04\",\n blue: \"#2563eb\",\n magenta: \"#c026d3\",\n cyan: \"#0891b2\",\n white: \"#e4e4e7\",\n brightBlack: \"#52525b\",\n brightRed: \"#ef4444\",\n brightGreen: \"#22c55e\",\n brightYellow: \"#eab308\",\n brightBlue: \"#3b82f6\",\n brightMagenta: \"#d946ef\",\n brightCyan: \"#06b6d4\",\n brightWhite: \"#fafafa\",\n};\n\nexport const darkTerminalTheme: ITheme = {\n ...baseTheme,\n background: \"#0a0a0a\",\n foreground: \"#fafafa\",\n cursor: \"#fafafa\",\n selectionBackground: \"#3f3f46\",\n black: \"#27272a\",\n red: \"#f87171\",\n green: \"#4ade80\",\n yellow: \"#facc15\",\n blue: \"#60a5fa\",\n magenta: \"#e879f9\",\n cyan: \"#22d3ee\",\n white: \"#e4e4e7\",\n brightBlack: \"#52525b\",\n brightRed: \"#fca5a5\",\n brightGreen: \"#86efac\",\n brightYellow: \"#fde047\",\n brightBlue: \"#93c5fd\",\n brightMagenta: \"#f0abfc\",\n brightCyan: \"#67e8f9\",\n brightWhite: \"#fafafa\",\n};\n\nexport const terminalThemes: Record<TerminalThemeName, ITheme> = {\n light: lightTerminalTheme,\n dark: darkTerminalTheme,\n};\n\nexport const resolveTerminalTheme = (theme: TerminalThemeName | ITheme | undefined) => {\n if (!theme) return terminalThemes.dark;\n if (typeof theme === \"string\") return terminalThemes[theme];\n return theme;\n};\n","import { useEffect, useState } from \"react\";\nimport type {\n TerminalBridge,\n TerminalSessionAdapter,\n TerminalSessionError,\n TerminalSessionExit,\n TerminalSessionRequest,\n} from \"./types\";\n\nexport type TerminalSessionStatus = \"idle\" | \"opening\" | \"open\" | \"exited\" | \"error\";\n\nexport interface UseTerminalSessionResult {\n session: TerminalSessionAdapter | null;\n status: TerminalSessionStatus;\n exit: TerminalSessionExit | null;\n error: TerminalSessionError | null;\n}\n\nexport interface UseTerminalSessionOptions {\n bridge: TerminalBridge | null;\n request: TerminalSessionRequest;\n /** Set to false to keep the session alive when the hook unmounts. */\n killOnUnmount?: boolean;\n}\n\nexport const createTerminalSessionRequestKey = (request: TerminalSessionRequest) =>\n JSON.stringify({\n command: request.command,\n cwd: request.cwd,\n env: request.env\n ? Object.fromEntries(Object.entries(request.env).sort(([left], [right]) => left.localeCompare(right)))\n : undefined,\n cols: request.cols,\n rows: request.rows,\n });\n\nconst readTerminalSessionRequestKey = (requestKey: string): TerminalSessionRequest => JSON.parse(requestKey);\n\n/**\n * Opens a terminal session via the provided bridge and surfaces its lifecycle\n * for the renderer. The session is killed on unmount unless explicitly opted\n * out; switching bridges or request contents triggers a fresh open.\n */\nexport const useTerminalSession = ({ bridge, request, killOnUnmount = true }: UseTerminalSessionOptions) => {\n const requestKey = createTerminalSessionRequestKey(request);\n const [state, setState] = useState<UseTerminalSessionResult>({\n session: null,\n status: \"idle\",\n exit: null,\n error: null,\n });\n\n useEffect(() => {\n if (!bridge) {\n setState({ session: null, status: \"idle\", exit: null, error: null });\n return;\n }\n\n let cancelled = false;\n let activeSession: TerminalSessionAdapter | null = null;\n let terminalState: TerminalSessionStatus = \"opening\";\n const disposers: Array<() => void> = [];\n\n setState({ session: null, status: \"opening\", exit: null, error: null });\n const requestSnapshot = readTerminalSessionRequestKey(requestKey);\n\n bridge\n .openSession(requestSnapshot)\n .then((session) => {\n if (cancelled) {\n void session.kill();\n return;\n }\n activeSession = session;\n disposers.push(\n session.onExit((exit) => {\n terminalState = \"exited\";\n setState((prev) => ({ ...prev, status: \"exited\", exit }));\n }),\n session.onError((error) => {\n terminalState = \"error\";\n setState((prev) => ({ ...prev, status: \"error\", error }));\n }),\n );\n terminalState = \"open\";\n setState({ session, status: \"open\", exit: null, error: null });\n })\n .catch((cause: unknown) => {\n if (cancelled) return;\n const message = cause instanceof Error ? cause.message : String(cause);\n terminalState = \"error\";\n setState({ session: null, status: \"error\", exit: null, error: { message } });\n });\n\n return () => {\n cancelled = true;\n while (disposers.length > 0) disposers.pop()?.();\n if (killOnUnmount && activeSession && terminalState !== \"exited\") void activeSession.kill();\n };\n }, [bridge, requestKey, killOnUnmount]);\n\n return state;\n};\n","import { FitAddon } from \"@xterm/addon-fit\";\nimport type { ITheme } from \"@xterm/xterm\";\nimport { Terminal as Xterm } from \"@xterm/xterm\";\nimport \"@xterm/xterm/css/xterm.css\";\nimport \"./terminal.css\";\nimport { useEffect, useRef } from \"react\";\nimport { bindSessionToSink, type TerminalSink } from \"./bind-session\";\nimport { resolveTerminalTheme, type TerminalThemeName } from \"./terminal-theme\";\nimport type { TerminalBridge, TerminalSessionAdapter, TerminalSessionRequest } from \"./types\";\nimport { useTerminalSession } from \"./use-terminal-session\";\n\nconst DEFAULT_FONT_FAMILY = '\"JetBrains Mono\", \"Fira Code\", Menlo, Consolas, monospace';\nconst DEFAULT_FONT_SIZE = 13;\nconst DEFAULT_COLS = 80;\nconst DEFAULT_ROWS = 24;\n\nexport const createInitialTerminalSessionRequest = (\n request?: Partial<TerminalSessionRequest>,\n): TerminalSessionRequest => ({\n ...request,\n cols: request?.cols ?? DEFAULT_COLS,\n rows: request?.rows ?? DEFAULT_ROWS,\n});\n\nconst createSink = (xterm: Xterm): TerminalSink => ({\n write(data) {\n xterm.write(data);\n },\n onInput(handler) {\n const disposable = xterm.onData(handler);\n return () => disposable.dispose();\n },\n onResize(handler) {\n const disposable = xterm.onResize(handler);\n return () => disposable.dispose();\n },\n});\n\nconst fitTerminal = (fit: FitAddon | null) => {\n try {\n fit?.fit();\n } catch {\n // fit() throws if the container has zero size (e.g. hidden via CSS).\n }\n};\n\nexport const resizeSessionToTerminalGeometry = (\n terminal: Pick<Xterm, \"cols\" | \"rows\">,\n session: Pick<TerminalSessionAdapter, \"resize\">,\n) => {\n session.resize(terminal.cols, terminal.rows);\n};\n\nexport const bindTerminalSession = (\n terminal: Pick<Xterm, \"cols\" | \"rows\">,\n sink: TerminalSink,\n session: TerminalSessionAdapter,\n options: Pick<TerminalProps, \"onSessionOpen\" | \"onSessionExit\">,\n) => {\n const unbind = bindSessionToSink(sink, session, {\n onExit: options.onSessionExit,\n });\n resizeSessionToTerminalGeometry(terminal, session);\n options.onSessionOpen?.(session.id);\n return unbind;\n};\n\nexport interface TerminalSessionCallbackRefs {\n onSessionOpen: React.RefObject<TerminalProps[\"onSessionOpen\"]>;\n onSessionExit: React.RefObject<TerminalProps[\"onSessionExit\"]>;\n}\n\nexport const bindTerminalSessionWithCallbackRefs = (\n terminal: Pick<Xterm, \"cols\" | \"rows\">,\n sink: TerminalSink,\n session: TerminalSessionAdapter,\n callbackRefs: TerminalSessionCallbackRefs,\n) =>\n bindTerminalSession(terminal, sink, session, {\n onSessionOpen: (sessionId) => callbackRefs.onSessionOpen.current?.(sessionId),\n onSessionExit: (exit) => callbackRefs.onSessionExit.current?.(exit),\n });\n\nexport interface TerminalProps {\n /** Bridge adapter the component opens its session through. */\n bridge: TerminalBridge;\n /**\n * Optional initial session request overrides. `cols`/`rows` default to\n * 80x24; container resizes are forwarded after the session opens.\n */\n request?: Partial<TerminalSessionRequest>;\n /** Theme preset name or full xterm theme. */\n theme?: TerminalThemeName | ITheme;\n /** Monospace font family. */\n fontFamily?: string;\n fontSize?: number;\n /** Whether to kill the session when the component unmounts. Defaults to true. */\n killOnUnmount?: boolean;\n /** Forwarded to the container element. */\n className?: string;\n style?: React.CSSProperties;\n /** Called once the session is open; useful for imperative refs. */\n onSessionOpen?: (sessionId: string) => void;\n /** Called once the session exits. */\n onSessionExit?: (exit: { code: number | null; signal: string | null }) => void;\n}\n\n/**\n * High-level terminal component. Mounts xterm.js inside a `<div>` and binds it\n * to the session opened from `bridge.openSession(...)`. Resize is driven by\n * `ResizeObserver` so the terminal fills its container and the host PTY\n * geometry stays in sync.\n */\nexport const Terminal = (props: TerminalProps) => {\n const {\n bridge,\n request,\n theme,\n fontFamily = DEFAULT_FONT_FAMILY,\n fontSize = DEFAULT_FONT_SIZE,\n killOnUnmount = true,\n className,\n style,\n onSessionOpen,\n onSessionExit,\n } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const xtermRef = useRef<Xterm | null>(null);\n const fitRef = useRef<FitAddon | null>(null);\n const initialSessionRequestRef = useRef<TerminalSessionRequest | null>(null);\n const onSessionOpenRef = useRef(onSessionOpen);\n const onSessionExitRef = useRef(onSessionExit);\n\n onSessionOpenRef.current = onSessionOpen;\n onSessionExitRef.current = onSessionExit;\n\n if (!initialSessionRequestRef.current) {\n initialSessionRequestRef.current = createInitialTerminalSessionRequest(request);\n }\n\n const resolvedTheme = resolveTerminalTheme(theme);\n\n // Mount xterm once on the container. Theme, font, and size updates flow\n // through the dedicated options-sync effect below to avoid a full remount on\n // every prop change.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const xterm = new Xterm({\n cols: DEFAULT_COLS,\n rows: DEFAULT_ROWS,\n cursorBlink: true,\n convertEol: true,\n allowProposedApi: true,\n });\n const fit = new FitAddon();\n xterm.loadAddon(fit);\n xterm.open(container);\n\n xtermRef.current = xterm;\n fitRef.current = fit;\n\n const measure = () => fitTerminal(fit);\n\n measure();\n const animationFrame = window.requestAnimationFrame(measure);\n const timeout = window.setTimeout(measure, 50);\n const observer = new ResizeObserver(measure);\n observer.observe(container);\n\n return () => {\n window.cancelAnimationFrame(animationFrame);\n window.clearTimeout(timeout);\n observer.disconnect();\n xterm.dispose();\n xtermRef.current = null;\n fitRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n const xterm = xtermRef.current;\n if (!xterm) return;\n xterm.options.theme = resolvedTheme;\n xterm.options.fontFamily = fontFamily;\n xterm.options.fontSize = fontSize;\n fitTerminal(fitRef.current);\n }, [resolvedTheme, fontFamily, fontSize]);\n\n const { session } = useTerminalSession({ bridge, request: initialSessionRequestRef.current, killOnUnmount });\n\n useEffect(() => {\n const xterm = xtermRef.current;\n if (!xterm || !session) return;\n fitTerminal(fitRef.current);\n const animationFrame = window.requestAnimationFrame(() => fitTerminal(fitRef.current));\n const sink = createSink(xterm);\n const unbind = bindTerminalSessionWithCallbackRefs(xterm, sink, session, {\n onSessionOpen: onSessionOpenRef,\n onSessionExit: onSessionExitRef,\n });\n // Opening a terminal is an explicit action; hand it the keyboard so the\n // user can type immediately instead of clicking into it first.\n xterm.focus();\n return () => {\n window.cancelAnimationFrame(animationFrame);\n unbind();\n };\n }, [session]);\n\n // The mount element fills its box absolutely so xterm sizes to the panel\n // rather than growing it: inside a scrollable host, a self-sized terminal\n // would define its own height and never fit, leaving the host to scroll it.\n return (\n <div\n className={className}\n style={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n backgroundColor: typeof resolvedTheme.background === \"string\" ? resolvedTheme.background : undefined,\n ...style,\n }}\n >\n <div ref={containerRef} className=\"pstdio-terminal\" style={{ position: \"absolute\", inset: 0 }} />\n </div>\n );\n};\n"],"names":["bindSessionToSink","sink","session","options","disposers","push","onData","chunk","write","onInput","data","onResize","cols","rows","resize","onExit","onError","length","dispose","pop","encoder","TextEncoder","toChunk","encode","wait","ms","Promise","resolve","setTimeout","defaultEcho","input","replace","runStep","emitter","step","undefined","emitData","error","emitError","message","exit","emitExit","code","signal","playSteps","steps","isExited","delayMs","createScriptedSession","dataHandlers","Set","exitHandlers","errorHandlers","exited","startedInitial","handler","id","crypto","randomUUID","text","TextDecoder","decode","response","kill","onKill","add","initial","delete","createScriptedTerminalBridge","openSession","_request","baseTheme","cursorAccent","selectionForeground","lightTerminalTheme","background","foreground","cursor","selectionBackground","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","darkTerminalTheme","terminalThemes","light","dark","resolveTerminalTheme","theme","createTerminalSessionRequestKey","request","JSON","stringify","command","cwd","env","Object","fromEntries","entries","sort","left","right","localeCompare","readTerminalSessionRequestKey","requestKey","parse","useTerminalSession","t0","$","_c","bridge","killOnUnmount","t1","t2","t3","Symbol","for","status","state","setState","useState","t4","t5","cancelled","activeSession","terminalState","requestSnapshot","then","prev","prev_0","catch","cause","Error","String","useEffect","DEFAULT_FONT_FAMILY","DEFAULT_FONT_SIZE","DEFAULT_COLS","DEFAULT_ROWS","createInitialTerminalSessionRequest","createSink","xterm","disposable","fitTerminal","fit","resizeSessionToTerminalGeometry","terminal","bindTerminalSession","unbind","onSessionExit","onSessionOpen","bindTerminalSessionWithCallbackRefs","callbackRefs","sessionId","current","Terminal","props","fontFamily","fontSize","className","style","containerRef","useRef","xtermRef","fitRef","initialSessionRequestRef","onSessionOpenRef","onSessionExitRef","resolvedTheme","container","Xterm","cursorBlink","convertEol","allowProposedApi","FitAddon","loadAddon","open","measure","animationFrame","window","requestAnimationFrame","timeout","observer","ResizeObserver","observe","cancelAnimationFrame","clearTimeout","disconnect","focus","jsx","position","width","height","backgroundColor","inset"],"mappings":"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"}
@@ -17,6 +17,9 @@ export declare const globalCss: {
17
17
  width: string;
18
18
  overflow: string;
19
19
  };
20
+ hr: {
21
+ borderColor: string;
22
+ };
20
23
  body: {
21
24
  height: string;
22
25
  width: string;