@teaui/core 1.6.8 → 1.7.8

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 (91) hide show
  1. package/.dist/Screen.d.ts +4 -5
  2. package/.dist/Screen.js +4 -6
  3. package/.dist/Screen.js.map +1 -1
  4. package/.dist/Viewport.d.ts +6 -1
  5. package/.dist/Viewport.js +6 -2
  6. package/.dist/Viewport.js.map +1 -1
  7. package/.dist/components/Accordion.js +1 -1
  8. package/.dist/components/Accordion.js.map +1 -1
  9. package/.dist/components/Breadcrumb.d.ts +93 -0
  10. package/.dist/components/Breadcrumb.js +287 -0
  11. package/.dist/components/Breadcrumb.js.map +1 -0
  12. package/.dist/components/Button.js +23 -11
  13. package/.dist/components/Button.js.map +1 -1
  14. package/.dist/components/Calendar.d.ts +36 -0
  15. package/.dist/components/Calendar.js +721 -0
  16. package/.dist/components/Calendar.js.map +1 -0
  17. package/.dist/components/Canvas.d.ts +48 -0
  18. package/.dist/components/Canvas.js +230 -0
  19. package/.dist/components/Canvas.js.map +1 -0
  20. package/.dist/components/Checkbox.d.ts +3 -2
  21. package/.dist/components/Checkbox.js +31 -9
  22. package/.dist/components/Checkbox.js.map +1 -1
  23. package/.dist/components/Dropdown.d.ts +1 -1
  24. package/.dist/components/Dropdown.js +14 -6
  25. package/.dist/components/Dropdown.js.map +1 -1
  26. package/.dist/components/Geometry.d.ts +29 -0
  27. package/.dist/components/Geometry.js +40 -0
  28. package/.dist/components/Geometry.js.map +1 -0
  29. package/.dist/components/HotKey.js +1 -1
  30. package/.dist/components/HotKey.js.map +1 -1
  31. package/.dist/components/Log.js +1 -1
  32. package/.dist/components/Log.js.map +1 -1
  33. package/.dist/components/Logo.d.ts +19 -0
  34. package/.dist/components/Logo.js +204 -0
  35. package/.dist/components/Logo.js.map +1 -0
  36. package/.dist/components/Modal.d.ts +74 -0
  37. package/.dist/components/Modal.js +113 -0
  38. package/.dist/components/Modal.js.map +1 -0
  39. package/.dist/components/Pane.d.ts +43 -0
  40. package/.dist/components/Pane.js +321 -0
  41. package/.dist/components/Pane.js.map +1 -0
  42. package/.dist/components/Pin.d.ts +25 -0
  43. package/.dist/components/Pin.js +80 -0
  44. package/.dist/components/Pin.js.map +1 -0
  45. package/.dist/components/Plot.d.ts +25 -0
  46. package/.dist/components/Plot.js +171 -0
  47. package/.dist/components/Plot.js.map +1 -0
  48. package/.dist/components/Scrollable.d.ts +6 -0
  49. package/.dist/components/Scrollable.js +14 -2
  50. package/.dist/components/Scrollable.js.map +1 -1
  51. package/.dist/components/ScrollableList.d.ts +2 -2
  52. package/.dist/components/ScrollableList.js +4 -4
  53. package/.dist/components/ScrollableList.js.map +1 -1
  54. package/.dist/components/Slider.d.ts +2 -0
  55. package/.dist/components/Slider.js +11 -1
  56. package/.dist/components/Slider.js.map +1 -1
  57. package/.dist/components/Table.d.ts +79 -0
  58. package/.dist/components/Table.js +603 -0
  59. package/.dist/components/Table.js.map +1 -0
  60. package/.dist/components/Tabs.d.ts +2 -0
  61. package/.dist/components/Tabs.js +14 -1
  62. package/.dist/components/Tabs.js.map +1 -1
  63. package/.dist/components/ZStack.d.ts +19 -0
  64. package/.dist/components/ZStack.js +34 -0
  65. package/.dist/components/ZStack.js.map +1 -0
  66. package/.dist/components/charts/BarChart.d.ts +27 -0
  67. package/.dist/components/charts/BarChart.js +122 -0
  68. package/.dist/components/charts/BarChart.js.map +1 -0
  69. package/.dist/components/charts/Chart.d.ts +43 -0
  70. package/.dist/components/charts/Chart.js +41 -0
  71. package/.dist/components/charts/Chart.js.map +1 -0
  72. package/.dist/components/charts/LineChart.d.ts +23 -0
  73. package/.dist/components/charts/LineChart.js +109 -0
  74. package/.dist/components/charts/LineChart.js.map +1 -0
  75. package/.dist/components/charts/index.d.ts +3 -0
  76. package/.dist/components/charts/index.js +4 -0
  77. package/.dist/components/charts/index.js.map +1 -0
  78. package/.dist/components/index.d.ts +12 -0
  79. package/.dist/components/index.js +12 -0
  80. package/.dist/components/index.js.map +1 -1
  81. package/.dist/iTerm2.js +1 -3
  82. package/.dist/iTerm2.js.map +1 -1
  83. package/.dist/inspect.js +1 -1
  84. package/.dist/inspect.js.map +1 -1
  85. package/.dist/managers/ModalManager.d.ts +2 -1
  86. package/.dist/managers/ModalManager.js +23 -51
  87. package/.dist/managers/ModalManager.js.map +1 -1
  88. package/.dist/testing.d.ts +5 -0
  89. package/.dist/testing.js +19 -3
  90. package/.dist/testing.js.map +1 -1
  91. package/package.json +3 -3
@@ -0,0 +1,40 @@
1
+ import { Container } from '../Container.js';
2
+ import { Size } from '../geometry.js';
3
+ /**
4
+ * A container that reports its available size via onLayout callback. Defaults to
5
+ * filling all available space (width='fill', height='fill') unless explicit
6
+ * dimensions are provided.
7
+ *
8
+ * Useful for:
9
+ * - Measuring available space before deciding what to render
10
+ * - Virtualized lists that need viewport height to calculate visible items
11
+ * - Responsive layouts that change based on available space
12
+ */
13
+ export class Geometry extends Container {
14
+ #onLayout;
15
+ #prevSize = Size.zero;
16
+ constructor({ onLayout, ...props }) {
17
+ super(props);
18
+ this.#onLayout = onLayout;
19
+ }
20
+ update({ onLayout, ...props }) {
21
+ this.#onLayout = onLayout;
22
+ super.update(props);
23
+ }
24
+ naturalSize(available) {
25
+ return available;
26
+ }
27
+ render(viewport) {
28
+ if (viewport.isEmpty) {
29
+ return super.render(viewport);
30
+ }
31
+ const size = viewport.contentSize;
32
+ if (size.width !== this.#prevSize.width ||
33
+ size.height !== this.#prevSize.height) {
34
+ this.#prevSize = size;
35
+ this.#onLayout?.(size);
36
+ }
37
+ super.render(viewport);
38
+ }
39
+ }
40
+ //# sourceMappingURL=Geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Geometry.js","sourceRoot":"","sources":["../../lib/components/Geometry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAA+B,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAC,IAAI,EAAC,MAAM,gBAAgB,CAAA;AAWnC;;;;;;;;;GASG;AACH,MAAM,OAAO,QAAS,SAAQ,SAAS;IACrC,SAAS,CAAmB;IAC5B,SAAS,GAAS,IAAI,CAAC,IAAI,CAAA;IAE3B,YAAY,EAAC,QAAQ,EAAE,GAAG,KAAK,EAAQ;QACrC,KAAK,CAAC,KAAK,CAAC,CAAA;QACZ,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC3B,CAAC;IAED,MAAM,CAAC,EAAC,QAAQ,EAAE,GAAG,KAAK,EAAQ;QAChC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,WAAW,CAAC,SAAe;QACzB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,CAAC,QAAkB;QACvB,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAA;QACjC,IACE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK;YACnC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EACrC,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC;CACF"}
@@ -1,6 +1,6 @@
1
1
  import { Container } from '../Container.js';
2
2
  import { Size } from '../geometry.js';
3
- import { toHotKeyDef } from '../events/index.js';
3
+ import { toHotKeyDef, } from '../events/index.js';
4
4
  export class HotKey extends Container {
5
5
  #hotKey = { char: '' };
6
6
  #onPress;
@@ -1 +1 @@
1
- {"version":3,"file":"HotKey.js","sourceRoot":"","sources":["../../lib/components/HotKey.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,SAAS,EAAC,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAC,IAAI,EAAC,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAsC,WAAW,EAAC,MAAM,oBAAoB,CAAA;AAOnF,MAAM,OAAO,MAAO,SAAQ,SAAS;IACnC,OAAO,GAAe,EAAC,IAAI,EAAE,EAAE,EAAC,CAAA;IAChC,QAAQ,CAA4B;IAEpC,YAAY,KAAY;QACtB,KAAK,CAAC,KAAK,CAAC,CAAA;QAEZ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,KAAY;QACjB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACnB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,OAAO,CAAC,EAAC,MAAM,EAAE,OAAO,EAAQ;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,UAAU,CAAC,KAAe;QACxB,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAED,MAAM,CAAC,QAAkB;QACvB,2EAA2E;QAC3E,uEAAuE;QACvE,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACpD,CAAC;CACF"}
1
+ {"version":3,"file":"HotKey.js","sourceRoot":"","sources":["../../lib/components/HotKey.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,SAAS,EAAC,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAC,IAAI,EAAC,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAGL,WAAW,GACZ,MAAM,oBAAoB,CAAA;AAO3B,MAAM,OAAO,MAAO,SAAQ,SAAS;IACnC,OAAO,GAAe,EAAC,IAAI,EAAE,EAAE,EAAC,CAAA;IAChC,QAAQ,CAA4B;IAEpC,YAAY,KAAY;QACtB,KAAK,CAAC,KAAK,CAAC,CAAA;QAEZ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,KAAY;QACjB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACnB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,OAAO,CAAC,EAAC,MAAM,EAAE,OAAO,EAAQ;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,UAAU,CAAC,KAAe;QACxB,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAED,MAAM,CAAC,QAAkB;QACvB,2EAA2E;QAC3E,uEAAuE;QACvE,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACpD,CAAC;CACF"}
@@ -11,7 +11,7 @@ export class Log extends Container {
11
11
  #scrollableList = new ScrollableList({
12
12
  scrollHeight: 10,
13
13
  items: this.#logs,
14
- cellForItem: log => {
14
+ renderItem: log => {
15
15
  return new LogLineView(log);
16
16
  },
17
17
  keepAtBottom: true,
@@ -1 +1 @@
1
- {"version":3,"file":"Log.js","sourceRoot":"","sources":["../../lib/components/Log.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAGT,WAAW,IAAI,cAAc,EAC7B,cAAc,IAAI,iBAAiB,GACpC,MAAM,WAAW,CAAA;AAClB,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAA;AACpC,OAAO,EAAC,MAAM,EAAC,MAAM,YAAY,CAAA;AAKjC,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAEhC,MAAM,OAAO,GAAI,SAAQ,SAAS;IAChC,KAAK,GAAc,EAAE,CAAA;IACrB,eAAe,GAAG,IAAI,cAAc,CAAC;QACnC,YAAY,EAAE,EAAE;QAChB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,GAAG,CAAC,EAAE;YACjB,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,CAAA;QAC7B,CAAC;QACD,YAAY,EAAE,IAAI;KACnB,CAAC,CAAA;IAEF,YAAY,QAAmB,EAAE;QAC/B,KAAK,CAAC,KAAK,CAAC,CAAA;QAEZ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAChC,CAAC;IAED,OAAO,CAAC,IAAe;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,SAAS,CAAC,GAAY;QACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9C,CAAC;CACF;AAOD,MAAM,WAAY,SAAQ,SAAS;IACjC,YAAY,EAAC,KAAK,EAAE,IAAI,EAAmB;QACzC,KAAK,CAAC,EAAE,CAAC,CAAA;QAET,IAAI,WAAmB,CAAA;QACvB,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO;gBACV,WAAW,GAAG,QAAQ,CAAA;gBACtB,MAAK;YACP,KAAK,MAAM;gBACT,WAAW,GAAG,WAAW,CAAA;gBACzB,MAAK;YACP,KAAK,MAAM;gBACT,WAAW,GAAG,UAAU,CAAA;gBACxB,MAAK;YACP,KAAK,OAAO;gBACV,WAAW,GAAG,UAAU,CAAA;gBACxB,MAAK;YACP;gBACE,WAAW,GAAG,UAAU,CAAA;gBACxB,MAAK;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CACnB,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EACjC,YAAY,WAAW,EAAE,CAC1B,CAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC/B,OAAO,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACrC,QAAQ,KAAK,EAAE,CAAC;oBACd,KAAK,OAAO;wBACV,OAAO,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;oBAC/B,KAAK,MAAM;wBACT,OAAO,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;oBAClC,KAAK,MAAM;wBACT,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;oBACjC,KAAK,OAAO;wBACV,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;oBACjC;wBACE,OAAO,IAAI,CAAA;gBACf,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,IAAI,OAAa,CAAA;QACjB,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;QAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,GAAG,IAAI,WAAW,CAAC;gBACxB,WAAW,EAAE,KAAK;gBAClB,SAAS,EAAE,IAAI,IAAI,CAAC;oBAClB,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,KAAK;iBACZ,CAAC;gBACF,QAAQ,EAAE,IAAI,IAAI,CAAC;oBACjB,KAAK,EAAE,KAAK;oBACZ,IAAI,EAAE,IAAI;iBACX,CAAC;aACH,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,IAAI,CAAC;gBACjB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,IAAI;aACX,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,CAAC,GAAG,CACN,KAAK,CAAC,KAAK,CAAC;YACV,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE;gBACR,IAAI,IAAI,CAAC;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,KAAK;iBACZ,CAAC;gBACF,OAAO;aACR;SACF,CAAC,CACH,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,GAAG;IACjC,MAAM,CAAC,OAAO,CAAwB;IAEtC,YAAY,QAAmB,EAAE;QAC/B,KAAK,CAAC,KAAK,CAAC,CAAA;IACd,CAAC;IAED,QAAQ,CAAC,MAAc;QACrB,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9C,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxB,CAAC;IACD,UAAU,CAAC,MAAc;QACvB,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACjD,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,QAAkB;QACvB,SAAS,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/C,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"Log.js","sourceRoot":"","sources":["../../lib/components/Log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Viewport } from '../Viewport.js';
2
+ import type { Props as ViewProps } from '../View.js';
3
+ import { View } from '../View.js';
4
+ import { Size } from '../geometry.js';
5
+ interface Props extends ViewProps {
6
+ isAnimating?: boolean;
7
+ seed?: number;
8
+ }
9
+ export declare class Logo extends View {
10
+ #private;
11
+ constructor(props?: Props);
12
+ get isAnimating(): boolean;
13
+ set isAnimating(value: boolean);
14
+ update(props: Props): void;
15
+ naturalSize(_available: Size): Size;
16
+ receiveTick(dt: number): boolean;
17
+ render(viewport: Viewport): void;
18
+ }
19
+ export {};
@@ -0,0 +1,204 @@
1
+ import { View } from '../View.js';
2
+ import { Style } from '../Style.js';
3
+ import { Point, Size } from '../geometry.js';
4
+ import { define } from '../util.js';
5
+ const WARM = [240, 223, 175];
6
+ const CYAN = [140, 208, 211];
7
+ const GRAY = [128, 128, 128];
8
+ const BODY_LINES = [
9
+ [
10
+ { text: ' ┌────────┐', fg: WARM },
11
+ { text: '──╮', fg: GRAY },
12
+ ],
13
+ [
14
+ { text: ' │', fg: WARM },
15
+ { text: '╼╼╼╼╼╼╼╼', fg: CYAN },
16
+ { text: '│', fg: WARM },
17
+ { text: ' │', fg: GRAY },
18
+ ],
19
+ [
20
+ { text: ' │', fg: WARM },
21
+ { text: ' TeaUI ', fg: CYAN },
22
+ { text: '│', fg: WARM },
23
+ { text: ' │', fg: GRAY },
24
+ ],
25
+ [
26
+ { text: ' │', fg: WARM },
27
+ { text: '╼╼╼╼╼╼╼╼', fg: CYAN },
28
+ { text: '│', fg: WARM },
29
+ { text: '──╯', fg: GRAY },
30
+ ],
31
+ [{ text: ' ╰▄▄▄▄▄▄▄▄╯ ', fg: WARM }],
32
+ ];
33
+ const WIDTH = 16;
34
+ const HEIGHT = 7;
35
+ // Steam simulation constants
36
+ const STEAM_ROWS = 2; // character rows for steam
37
+ const STEAM_DOT_ROWS = STEAM_ROWS * 4; // braille rows
38
+ const STEAM_DOT_COLS = WIDTH * 2; // braille columns
39
+ const TICK_INTERVAL = 80; // ms per simulation step
40
+ const MAX_PARTICLES = 24;
41
+ const PARTICLE_MAX_LIFE = 10;
42
+ // Spawn zone (dot-columns) — above the mug opening
43
+ const SPAWN_MIN_X = 6;
44
+ const SPAWN_MAX_X = 20;
45
+ // Braille dot offsets: [row][col]
46
+ // Each braille char is 2 dots wide × 4 dots tall
47
+ const BRAILLE_DOT = [
48
+ [0x01, 0x08],
49
+ [0x02, 0x10],
50
+ [0x04, 0x20],
51
+ [0x40, 0x80],
52
+ ];
53
+ function steamToString(particles) {
54
+ // Build a dot grid
55
+ const grid = [];
56
+ for (let r = 0; r < STEAM_DOT_ROWS; r++) {
57
+ grid[r] = new Array(STEAM_DOT_COLS).fill(false);
58
+ }
59
+ for (const p of particles) {
60
+ if (p.x >= 0 && p.x < STEAM_DOT_COLS && p.y >= 0 && p.y < STEAM_DOT_ROWS) {
61
+ grid[p.y][p.x] = true;
62
+ }
63
+ }
64
+ // Convert to braille characters
65
+ const lines = [];
66
+ for (let cy = 0; cy < STEAM_ROWS; cy++) {
67
+ let line = '';
68
+ for (let cx = 0; cx < WIDTH; cx++) {
69
+ let code = 0x2800;
70
+ for (let dr = 0; dr < 4; dr++) {
71
+ for (let dc = 0; dc < 2; dc++) {
72
+ const dotRow = cy * 4 + dr;
73
+ const dotCol = cx * 2 + dc;
74
+ if (dotRow < STEAM_DOT_ROWS &&
75
+ dotCol < STEAM_DOT_COLS &&
76
+ grid[dotRow][dotCol]) {
77
+ code += BRAILLE_DOT[dr][dc];
78
+ }
79
+ }
80
+ }
81
+ line += String.fromCharCode(code);
82
+ }
83
+ lines.push(line);
84
+ }
85
+ return lines.join('\n');
86
+ }
87
+ // Simple seedable RNG (xorshift32) so tests are deterministic when seeded
88
+ function makeRng(seed) {
89
+ let state = seed | 0 || 1;
90
+ return () => {
91
+ state ^= state << 13;
92
+ state ^= state >> 17;
93
+ state ^= state << 5;
94
+ return (state >>> 0) / 0x100000000;
95
+ };
96
+ }
97
+ export class Logo extends View {
98
+ #isAnimating = false;
99
+ #particles = [];
100
+ #elapsed = 0;
101
+ #rng;
102
+ constructor(props = {}) {
103
+ super(props);
104
+ this.#rng = makeRng(props.seed ?? Date.now() ^ (Math.random() * 0x7fffffff));
105
+ this.#update(props);
106
+ define(this, 'isAnimating', { enumerable: true });
107
+ }
108
+ get isAnimating() {
109
+ return this.#isAnimating;
110
+ }
111
+ set isAnimating(value) {
112
+ if (value === this.#isAnimating)
113
+ return;
114
+ this.#isAnimating = value;
115
+ this.invalidateRender();
116
+ }
117
+ update(props) {
118
+ this.#update(props);
119
+ super.update(props);
120
+ }
121
+ #update({ isAnimating }) {
122
+ this.#isAnimating = isAnimating ?? false;
123
+ }
124
+ naturalSize(_available) {
125
+ return new Size(WIDTH, HEIGHT);
126
+ }
127
+ receiveTick(dt) {
128
+ if (!this.#isAnimating)
129
+ return false;
130
+ this.#elapsed += dt;
131
+ let stepped = false;
132
+ while (this.#elapsed >= TICK_INTERVAL) {
133
+ this.#elapsed -= TICK_INTERVAL;
134
+ this.#step();
135
+ stepped = true;
136
+ }
137
+ return stepped;
138
+ }
139
+ #step() {
140
+ const rng = this.#rng;
141
+ // Move existing particles upward with random drift
142
+ for (const p of this.#particles) {
143
+ const r = rng();
144
+ if (r < 0.15) {
145
+ // drift left
146
+ p.x -= 1;
147
+ p.y -= 1;
148
+ }
149
+ else if (r < 0.3) {
150
+ // drift right
151
+ p.x += 1;
152
+ p.y -= 1;
153
+ }
154
+ else if (r < 0.85) {
155
+ // straight up
156
+ p.y -= 1;
157
+ }
158
+ // else: stay (pause for a tick)
159
+ p.life -= 1;
160
+ }
161
+ // Remove dead or out-of-bounds particles
162
+ this.#particles = this.#particles.filter(p => p.life > 0 && p.y >= 0 && p.x >= 0 && p.x < STEAM_DOT_COLS);
163
+ // Spawn new particles at the bottom of the steam area
164
+ if (this.#particles.length < MAX_PARTICLES) {
165
+ const count = 1 + Math.floor(rng() * 2);
166
+ for (let i = 0; i < count; i++) {
167
+ this.#particles.push({
168
+ x: SPAWN_MIN_X + Math.floor(rng() * (SPAWN_MAX_X - SPAWN_MIN_X)),
169
+ y: STEAM_DOT_ROWS - 1,
170
+ life: 3 + Math.floor(rng() * (PARTICLE_MAX_LIFE - 3)),
171
+ });
172
+ }
173
+ }
174
+ }
175
+ render(viewport) {
176
+ if (this.#isAnimating) {
177
+ viewport.registerTick();
178
+ }
179
+ // Render steam
180
+ const steamStyle = new Style({ foreground: GRAY });
181
+ if (this.#isAnimating) {
182
+ const steam = steamToString(this.#particles);
183
+ const steamLines = steam.split('\n');
184
+ for (let y = 0; y < steamLines.length; y++) {
185
+ viewport.write(steamLines[y], new Point(0, y), steamStyle);
186
+ }
187
+ }
188
+ else {
189
+ // Static steam when not animating
190
+ viewport.write(' ) ) ) ', new Point(0, 0), steamStyle);
191
+ viewport.write(' ( ( ( ', new Point(0, 1), steamStyle);
192
+ }
193
+ // Render body
194
+ for (let y = 0; y < BODY_LINES.length; y++) {
195
+ let x = 0;
196
+ for (const span of BODY_LINES[y]) {
197
+ const style = new Style({ foreground: span.fg });
198
+ viewport.write(span.text, new Point(x, y + STEAM_ROWS), style);
199
+ x += span.text.length;
200
+ }
201
+ }
202
+ }
203
+ }
204
+ //# sourceMappingURL=Logo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logo.js","sourceRoot":"","sources":["../../lib/components/Logo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { Viewport } from '../Viewport.js';
2
+ import { type Props as ContainerProps, Container } from '../Container.js';
3
+ import { Style } from '../Style.js';
4
+ import { Rect, Size } from '../geometry.js';
5
+ import { type MouseEvent, type KeyEvent } from '../events/index.js';
6
+ import type { System } from '../System.js';
7
+ export interface Props extends ContainerProps {
8
+ /**
9
+ * If true, paints the entire screen with dimStyle before rendering children.
10
+ * Default: false
11
+ */
12
+ dim?: boolean;
13
+ /**
14
+ * Style used for dimming. Defaults to theme.dimTextColor fg + theme.dimBackgroundColor bg.
15
+ */
16
+ dimStyle?: Style;
17
+ /**
18
+ * If true, clicking outside the modal content dismisses it.
19
+ * Default: true
20
+ */
21
+ dismissOnClick?: boolean;
22
+ /**
23
+ * If true, pressing Escape dismisses the modal.
24
+ * Default: false
25
+ */
26
+ dismissOnEsc?: boolean;
27
+ /**
28
+ * Called when the modal is dismissed (via click-outside or esc).
29
+ */
30
+ onDismiss?: () => void;
31
+ }
32
+ /**
33
+ * A modal overlay that is rendered above the main view tree.
34
+ *
35
+ * Pass a Modal instance to `viewport.requestModal(modal)` to present it.
36
+ * The ModalManager sets `presentedRect` and `windowSize` before rendering.
37
+ *
38
+ * Usage:
39
+ * const modal = new Modal({
40
+ * dim: true,
41
+ * dismissOnClick: true,
42
+ * dismissOnEsc: true,
43
+ * onDismiss: () => { ... },
44
+ * children: [myContent],
45
+ * })
46
+ * viewport.requestModal(modal)
47
+ */
48
+ export declare class Modal extends Container {
49
+ #private;
50
+ /**
51
+ * The rect of the view that called `viewport.requestModal()`, in absolute
52
+ * screen coordinates. Set by ModalManager before rendering.
53
+ */
54
+ presentedRect: Rect;
55
+ /**
56
+ * The full screen/window size. Set by ModalManager before rendering.
57
+ */
58
+ windowSize: Size;
59
+ constructor(props?: Props);
60
+ update(props: Props): void;
61
+ get dim(): boolean;
62
+ set dim(value: boolean);
63
+ get dimStyle(): Style | undefined;
64
+ set dimStyle(value: Style | undefined);
65
+ get dismissOnClick(): boolean;
66
+ set dismissOnClick(value: boolean);
67
+ get dismissOnEsc(): boolean;
68
+ set dismissOnEsc(value: boolean);
69
+ get onDismiss(): (() => void) | undefined;
70
+ set onDismiss(value: (() => void) | undefined);
71
+ receiveMouse(event: MouseEvent, system: System): void;
72
+ receiveKey(event: KeyEvent): void;
73
+ render(viewport: Viewport): void;
74
+ }
@@ -0,0 +1,113 @@
1
+ import { Container } from '../Container.js';
2
+ import { Style } from '../Style.js';
3
+ import { Rect, Size } from '../geometry.js';
4
+ import { isMouseClicked, toHotKeyDef, } from '../events/index.js';
5
+ /**
6
+ * A modal overlay that is rendered above the main view tree.
7
+ *
8
+ * Pass a Modal instance to `viewport.requestModal(modal)` to present it.
9
+ * The ModalManager sets `presentedRect` and `windowSize` before rendering.
10
+ *
11
+ * Usage:
12
+ * const modal = new Modal({
13
+ * dim: true,
14
+ * dismissOnClick: true,
15
+ * dismissOnEsc: true,
16
+ * onDismiss: () => { ... },
17
+ * children: [myContent],
18
+ * })
19
+ * viewport.requestModal(modal)
20
+ */
21
+ export class Modal extends Container {
22
+ #dim;
23
+ #dimStyle;
24
+ #dismissOnClick;
25
+ #dismissOnEsc;
26
+ #onDismiss;
27
+ /**
28
+ * The rect of the view that called `viewport.requestModal()`, in absolute
29
+ * screen coordinates. Set by ModalManager before rendering.
30
+ */
31
+ presentedRect = Rect.zero;
32
+ /**
33
+ * The full screen/window size. Set by ModalManager before rendering.
34
+ */
35
+ windowSize = Size.zero;
36
+ constructor(props = {}) {
37
+ super(props);
38
+ this.#dim = props.dim ?? false;
39
+ this.#dimStyle = props.dimStyle;
40
+ this.#dismissOnClick = props.dismissOnClick ?? true;
41
+ this.#dismissOnEsc = props.dismissOnEsc ?? false;
42
+ this.#onDismiss = props.onDismiss;
43
+ }
44
+ update(props) {
45
+ this.#update(props);
46
+ super.update(props);
47
+ }
48
+ #update(props) {
49
+ this.#dim = props.dim ?? false;
50
+ this.#dimStyle = props.dimStyle;
51
+ this.#dismissOnClick = props.dismissOnClick ?? true;
52
+ this.#dismissOnEsc = props.dismissOnEsc ?? false;
53
+ this.#onDismiss = props.onDismiss;
54
+ }
55
+ get dim() {
56
+ return this.#dim;
57
+ }
58
+ set dim(value) {
59
+ this.#dim = value;
60
+ }
61
+ get dimStyle() {
62
+ return this.#dimStyle;
63
+ }
64
+ set dimStyle(value) {
65
+ this.#dimStyle = value;
66
+ }
67
+ get dismissOnClick() {
68
+ return this.#dismissOnClick;
69
+ }
70
+ set dismissOnClick(value) {
71
+ this.#dismissOnClick = value;
72
+ }
73
+ get dismissOnEsc() {
74
+ return this.#dismissOnEsc;
75
+ }
76
+ set dismissOnEsc(value) {
77
+ this.#dismissOnEsc = value;
78
+ }
79
+ get onDismiss() {
80
+ return this.#onDismiss;
81
+ }
82
+ set onDismiss(value) {
83
+ this.#onDismiss = value;
84
+ }
85
+ receiveMouse(event, system) {
86
+ if (this.#dismissOnClick && isMouseClicked(event)) {
87
+ this.#onDismiss?.();
88
+ }
89
+ }
90
+ receiveKey(event) {
91
+ if (this.#dismissOnEsc && event.name === 'escape') {
92
+ this.#onDismiss?.();
93
+ }
94
+ }
95
+ render(viewport) {
96
+ if (this.#dim) {
97
+ const style = this.#dimStyle ??
98
+ new Style({
99
+ foreground: this.theme.dimTextColor,
100
+ background: this.theme.dimBackgroundColor,
101
+ });
102
+ viewport.paint(style);
103
+ }
104
+ if (this.#dismissOnClick) {
105
+ viewport.registerMouse('mouse.button.left');
106
+ }
107
+ if (this.#dismissOnEsc) {
108
+ viewport.registerHotKey(toHotKeyDef('escape'));
109
+ }
110
+ super.render(viewport);
111
+ }
112
+ }
113
+ //# sourceMappingURL=Modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../lib/components/Modal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { Viewport } from '../Viewport.js';
2
+ import { View } from '../View.js';
3
+ import { Container, type Props as ContainerProps } from '../Container.js';
4
+ import { Size } from '../geometry.js';
5
+ import { type MouseEvent } from '../events/index.js';
6
+ import { System } from '../System.js';
7
+ interface Props extends ContainerProps {
8
+ /**
9
+ * Draw a border around the entire pane.
10
+ * @default false
11
+ */
12
+ border?: boolean;
13
+ /**
14
+ * Whether browser panes can be collapsed by clicking the separator or
15
+ * dragging to a very small width. When false, the minimum pane width is 4.
16
+ * @default true
17
+ */
18
+ collapsible?: boolean;
19
+ }
20
+ /**
21
+ * A split-pane container for index/detail layouts. The first N-1 children are
22
+ * collapsible "browser" panes with draggable separators. The last child is the
23
+ * "detail" pane that takes remaining space.
24
+ */
25
+ export declare class Pane extends Container {
26
+ #private;
27
+ constructor(props?: Props);
28
+ update(props: Props): void;
29
+ get border(): boolean;
30
+ set border(value: boolean);
31
+ /**
32
+ * Returns the browser panes (all children except the last).
33
+ */
34
+ get browserViews(): View[];
35
+ /**
36
+ * Returns the detail pane (the last child).
37
+ */
38
+ get detailView(): View | undefined;
39
+ naturalSize(available: Size): Size;
40
+ receiveMouse(event: MouseEvent, system: System): void;
41
+ render(viewport: Viewport): void;
42
+ }
43
+ export {};