@teaui/core 1.7.8 → 1.9.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 (118) hide show
  1. package/.dist/Buffer.d.ts +5 -0
  2. package/.dist/Buffer.js +23 -0
  3. package/.dist/Buffer.js.map +1 -1
  4. package/.dist/Color.js.map +1 -1
  5. package/.dist/Screen.d.ts +2 -1
  6. package/.dist/Screen.js +24 -10
  7. package/.dist/Screen.js.map +1 -1
  8. package/.dist/Theme.d.ts +7 -3
  9. package/.dist/Theme.js +42 -25
  10. package/.dist/Theme.js.map +1 -1
  11. package/.dist/UI.js +3 -1
  12. package/.dist/UI.js.map +1 -1
  13. package/.dist/View.d.ts +29 -0
  14. package/.dist/View.js +40 -2
  15. package/.dist/View.js.map +1 -1
  16. package/.dist/Viewport.d.ts +17 -3
  17. package/.dist/Viewport.js +21 -11
  18. package/.dist/Viewport.js.map +1 -1
  19. package/.dist/components/Alert.d.ts +76 -0
  20. package/.dist/components/Alert.js +133 -0
  21. package/.dist/components/Alert.js.map +1 -0
  22. package/.dist/components/Box.d.ts +6 -2
  23. package/.dist/components/Box.js +51 -14
  24. package/.dist/components/Box.js.map +1 -1
  25. package/.dist/components/Button.d.ts +5 -2
  26. package/.dist/components/Button.js +44 -13
  27. package/.dist/components/Button.js.map +1 -1
  28. package/.dist/components/Calendar.d.ts +4 -1
  29. package/.dist/components/Calendar.js +371 -137
  30. package/.dist/components/Calendar.js.map +1 -1
  31. package/.dist/components/Callout.d.ts +12 -0
  32. package/.dist/components/Callout.js +82 -0
  33. package/.dist/components/Callout.js.map +1 -0
  34. package/.dist/components/Checkbox.js +1 -1
  35. package/.dist/components/Checkbox.js.map +1 -1
  36. package/.dist/components/Drawer.d.ts +3 -0
  37. package/.dist/components/Drawer.js +71 -2
  38. package/.dist/components/Drawer.js.map +1 -1
  39. package/.dist/components/Dropdown.js +20 -12
  40. package/.dist/components/Dropdown.js.map +1 -1
  41. package/.dist/components/Header.d.ts +1 -1
  42. package/.dist/components/Header.js +12 -10
  43. package/.dist/components/Header.js.map +1 -1
  44. package/.dist/components/Input.d.ts +1 -0
  45. package/.dist/components/Input.js +39 -15
  46. package/.dist/components/Input.js.map +1 -1
  47. package/.dist/components/Legend.d.ts +20 -0
  48. package/.dist/components/Legend.js +180 -0
  49. package/.dist/components/Legend.js.map +1 -0
  50. package/.dist/components/Log.js +3 -4
  51. package/.dist/components/Log.js.map +1 -1
  52. package/.dist/components/Modal.js +1 -1
  53. package/.dist/components/Modal.js.map +1 -1
  54. package/.dist/components/Notification.d.ts +35 -0
  55. package/.dist/components/Notification.js +120 -0
  56. package/.dist/components/Notification.js.map +1 -0
  57. package/.dist/components/Page.d.ts +55 -0
  58. package/.dist/components/Page.js +374 -0
  59. package/.dist/components/Page.js.map +1 -0
  60. package/.dist/components/Progress.d.ts +15 -0
  61. package/.dist/components/Progress.js +62 -16
  62. package/.dist/components/Progress.js.map +1 -1
  63. package/.dist/components/Scrollable.d.ts +60 -15
  64. package/.dist/components/Scrollable.js +209 -58
  65. package/.dist/components/Scrollable.js.map +1 -1
  66. package/.dist/components/ScrollableList.d.ts +16 -9
  67. package/.dist/components/ScrollableList.js +50 -19
  68. package/.dist/components/ScrollableList.js.map +1 -1
  69. package/.dist/components/Slider.d.ts +2 -1
  70. package/.dist/components/Slider.js +151 -46
  71. package/.dist/components/Slider.js.map +1 -1
  72. package/.dist/components/Space.d.ts +0 -3
  73. package/.dist/components/Space.js +0 -1
  74. package/.dist/components/Space.js.map +1 -1
  75. package/.dist/components/Spinner.js +1 -1
  76. package/.dist/components/Spinner.js.map +1 -1
  77. package/.dist/components/Stack.js +33 -2
  78. package/.dist/components/Stack.js.map +1 -1
  79. package/.dist/components/Table.js +43 -60
  80. package/.dist/components/Table.js.map +1 -1
  81. package/.dist/components/Tabs.d.ts +8 -0
  82. package/.dist/components/Tabs.js +22 -5
  83. package/.dist/components/Tabs.js.map +1 -1
  84. package/.dist/components/ToggleGroup.js +1 -1
  85. package/.dist/components/ToggleGroup.js.map +1 -1
  86. package/.dist/components/ZStack.d.ts +9 -0
  87. package/.dist/components/ZStack.js +68 -5
  88. package/.dist/components/ZStack.js.map +1 -1
  89. package/.dist/components/index.d.ts +5 -2
  90. package/.dist/components/index.js +4 -1
  91. package/.dist/components/index.js.map +1 -1
  92. package/.dist/events/index.d.ts +6 -2
  93. package/.dist/events/key.d.ts +18 -4
  94. package/.dist/events/key.js +42 -6
  95. package/.dist/events/key.js.map +1 -1
  96. package/.dist/events/mouse.d.ts +1 -0
  97. package/.dist/events/mouse.js.map +1 -1
  98. package/.dist/events/translate.js +17 -4
  99. package/.dist/events/translate.js.map +1 -1
  100. package/.dist/index.d.ts +1 -1
  101. package/.dist/index.js.map +1 -1
  102. package/.dist/inspect.js +3 -0
  103. package/.dist/inspect.js.map +1 -1
  104. package/.dist/managers/FocusManager.d.ts +2 -1
  105. package/.dist/managers/FocusManager.js +39 -4
  106. package/.dist/managers/FocusManager.js.map +1 -1
  107. package/.dist/managers/MouseManager.js +2 -0
  108. package/.dist/managers/MouseManager.js.map +1 -1
  109. package/.dist/renderToAnsi.js +1 -1
  110. package/.dist/renderToAnsi.js.map +1 -1
  111. package/.dist/terminal.d.ts +1 -0
  112. package/.dist/testing.d.ts +29 -2
  113. package/.dist/testing.js +34 -27
  114. package/.dist/testing.js.map +1 -1
  115. package/package.json +5 -4
  116. package/.dist/components/Pin.d.ts +0 -25
  117. package/.dist/components/Pin.js +0 -80
  118. package/.dist/components/Pin.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Legend.js","sourceRoot":"","sources":["../../lib/components/Legend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,aAAa,CAAA;AAItC,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAA;AAC/B,OAAO,EAAC,KAAK,EAAE,IAAI,EAAC,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAYvC,SAAS,UAAU,CAAC,GAAsB;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACjC,CAAC;IAED,gCAAgC;IAChC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,GAAG;aACP,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aAC1B,IAAI,CAAC,EAAE,CAAC,CAAA;IACb,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;AACpB,CAAC;AAUD,MAAM,OAAO,MAAO,SAAQ,IAAI;IAC9B,MAAM,GAAiB,EAAE,CAAA;IACzB,UAAU,GAAW,IAAI,CAAA;IAEzB,YAAY,KAAY;QACtB,KAAK,CAAC,KAAK,CAAC,CAAA;QACZ,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,KAAK,EAAE,SAAS,EAAQ;QAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAA;QACzB,IAAI,CAAC,UAAU,GAAG,SAAS,IAAI,IAAI,CAAA;IACrC,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChD,OAAO;gBACL,OAAO;gBACP,QAAQ;gBACR,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU;gBACV,UAAU,EAAE,QAAQ,GAAG,CAAC,GAAG,UAAU,EAAE,sBAAsB;aAC9D,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACH,OAAO,CACL,QAAwB,EACxB,cAAsB;QAEtB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAC,CAAA;QACrD,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEnD,+CAA+C;QAC/C,MAAM,IAAI,GAAe,EAAE,CAAA;QAC3B,IAAI,UAAU,GAAa,EAAE,CAAA;QAC7B,IAAI,YAAY,GAAG,CAAC,CAAA;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,WAAW,GACf,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAA;YAExE,IACE,UAAU,CAAC,MAAM,GAAG,CAAC;gBACrB,YAAY,GAAG,WAAW,GAAG,cAAc,EAC3C,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBACrB,UAAU,GAAG,CAAC,CAAC,CAAC,CAAA;gBAChB,YAAY,GAAG,IAAI,CAAC,UAAU,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAClB,YAAY,IAAI,WAAW,CAAA;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvB,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;YAClE,OAAO,EAAC,IAAI,EAAE,WAAW,EAAE,aAAa,EAAC,CAAA;QAC3C,CAAC;QAED,sDAAsD;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QAEpD,gDAAgD;QAChD,IAAI,WAAW,GAAG,CAAC,CAAA;QACnB,IAAI,aAAa,GAAG,CAAC,CAAA;QACrB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBACtB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;gBAC3D,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAA;YACnE,CAAC;QACH,CAAC;QAED,OAAO,EAAC,IAAI,EAAE,WAAW,EAAE,aAAa,EAAC,CAAA;IAC3C,CAAC;IAED,WAAW,CAAC,SAAe;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QAED,MAAM,EAAC,IAAI,EAAE,WAAW,EAAE,aAAa,EAAC,GAAG,IAAI,CAAC,OAAO,CACrD,QAAQ,EACR,SAAS,CAAC,KAAK,CAChB,CAAA;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACrB,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACnD,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,IAAI,CAAC,GAAG,CAAC;oBAAE,KAAK,IAAI,QAAQ,CAAA;gBAC5B,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;YACjC,CAAC;YACD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QACtD,CAAC;QAED,sCAAsC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,WAAW,GAAG,CAAC,GAAG,aAAa,CAAA;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QACpD,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAA;QAC3D,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAC,QAAkB;QACvB,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAM;QACR,CAAC;QAED,MAAM,EAAC,IAAI,EAAE,WAAW,EAAE,aAAa,EAAC,GAAG,IAAI,CAAC,OAAO,CACrD,QAAQ,EACR,QAAQ,CAAC,WAAW,CAAC,KAAK,CAC3B,CAAA;QAED,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC;YACzB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;YACxC,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;QACF,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC;YAC3B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;SACpC,CAAC,CAAA;QACF,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC;YACzB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;SACpC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QAE/D,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;YACpD,IAAI,MAAM,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM;gBAAE,MAAK;YAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;YACxB,IAAI,CAAC,GAAG,CAAC,CAAA;YAET,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;gBAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;gBAE9B,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;oBACf,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAA;oBAC/D,CAAC,IAAI,QAAQ,CAAA;gBACf,CAAC;gBAED,6DAA6D;gBAC7D,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAA;oBACvC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAA;oBAClE,CAAC,IAAI,WAAW,CAAA;gBAClB,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAA;oBAC5D,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAA;gBACpB,CAAC;gBAED,8BAA8B;gBAC9B,CAAC,IAAI,CAAC,CAAA;gBAEN,cAAc;gBACd,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAA;gBAE5D,IAAI,QAAQ,EAAE,CAAC;oBACb,CAAC,IAAI,aAAa,CAAA;gBACpB,CAAC;qBAAM,CAAC;oBACN,CAAC,IAAI,IAAI,CAAC,UAAU,CAAA;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -9,8 +9,7 @@ import { Stack } from './Stack.js';
9
9
  export class Log extends Container {
10
10
  #logs = [];
11
11
  #scrollableList = new ScrollableList({
12
- scrollHeight: 10,
13
- items: this.#logs,
12
+ data: this.#logs,
14
13
  renderItem: log => {
15
14
  return new LogLineView(log);
16
15
  },
@@ -22,14 +21,14 @@ export class Log extends Container {
22
21
  }
23
22
  setLogs(logs) {
24
23
  this.#logs = logs;
25
- this.#scrollableList.updateItems(logs);
24
+ this.#scrollableList.updateData(logs);
26
25
  }
27
26
  appendLog(log) {
28
27
  this.#logs.push(log);
29
28
  }
30
29
  clear() {
31
30
  this.#logs = [];
32
- this.#scrollableList.updateItems(this.#logs);
31
+ this.#scrollableList.updateData(this.#logs);
33
32
  }
34
33
  }
35
34
  class LogLineView extends Container {
@@ -1 +1 @@
1
- {"version":3,"file":"Log.js","sourceRoot":"","sources":["../../lib/components/Log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Log.js","sourceRoot":"","sources":["../../lib/components/Log.ts"],"names":[],"mappings":"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"}
@@ -99,7 +99,7 @@ export class Modal extends Container {
99
99
  foreground: this.theme.dimTextColor,
100
100
  background: this.theme.dimBackgroundColor,
101
101
  });
102
- viewport.paint(style);
102
+ viewport.restyle(style);
103
103
  }
104
104
  if (this.#dismissOnClick) {
105
105
  viewport.registerMouse('mouse.button.left');
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../lib/components/Modal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../lib/components/Modal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { type Props as ContainerProps, Container } from '../Container.js';
2
+ import { type Purpose } from '../Theme.js';
3
+ import type { View } from '../View.js';
4
+ import { Stack } from './Stack.js';
5
+ import { type Direction } from './types.js';
6
+ export interface Props extends ContainerProps {
7
+ title?: string;
8
+ purpose?: Purpose;
9
+ direction?: Direction;
10
+ }
11
+ /**
12
+ * Internal base class for Alert and Callout. Not exported.
13
+ *
14
+ * Owns a managed Stack for child layout. Subclasses must call
15
+ * `this.addDirect(view)` to add views to the Container directly
16
+ * (bypassing the stack-forwarding `add()` override), and use
17
+ * `this.contentStack` to place the stack in their view hierarchy.
18
+ */
19
+ export declare class Notification extends Container {
20
+ #private;
21
+ constructor({ title, purpose, direction, children, child, ...props }: Props);
22
+ /**
23
+ * The managed Stack that holds title + children.
24
+ * Subclasses use this to place the stack in their view hierarchy.
25
+ */
26
+ protected get contentStack(): Stack;
27
+ /**
28
+ * Add a view directly to the Container, bypassing the stack-forwarding
29
+ * `add()` override. Used by subclasses to set up their view hierarchy.
30
+ */
31
+ protected addDirect(child: View, at?: number): void;
32
+ update(props: Props): void;
33
+ add(child: View, at?: number): void;
34
+ removeChild(child: View): void;
35
+ }
@@ -0,0 +1,120 @@
1
+ import { Container } from '../Container.js';
2
+ import { Style } from '../Style.js';
3
+ import { Theme } from '../Theme.js';
4
+ import { Stack } from './Stack.js';
5
+ import { Separator } from './Separator.js';
6
+ import { Text } from './Text.js';
7
+ /**
8
+ * Internal base class for Alert and Callout. Not exported.
9
+ *
10
+ * Owns a managed Stack for child layout. Subclasses must call
11
+ * `this.addDirect(view)` to add views to the Container directly
12
+ * (bypassing the stack-forwarding `add()` override), and use
13
+ * `this.contentStack` to place the stack in their view hierarchy.
14
+ */
15
+ export class Notification extends Container {
16
+ #stack;
17
+ #title;
18
+ #titleStyle;
19
+ #titleView;
20
+ #separator;
21
+ constructor({ title, purpose, direction, children, child, ...props }) {
22
+ super(props);
23
+ this.#title = title;
24
+ this.#titleStyle = new Style({ bold: true });
25
+ this.#stack = new Stack({ direction: direction ?? 'down' });
26
+ if (purpose) {
27
+ this.theme = Theme[purpose];
28
+ }
29
+ if (child) {
30
+ this.add(child);
31
+ }
32
+ else if (children) {
33
+ for (const c of children) {
34
+ this.add(c);
35
+ }
36
+ }
37
+ // Resolve title after children are added so we can fall back to child heading
38
+ this.#syncTitle();
39
+ }
40
+ /**
41
+ * The managed Stack that holds title + children.
42
+ * Subclasses use this to place the stack in their view hierarchy.
43
+ */
44
+ get contentStack() {
45
+ return this.#stack;
46
+ }
47
+ /**
48
+ * Add a view directly to the Container, bypassing the stack-forwarding
49
+ * `add()` override. Used by subclasses to set up their view hierarchy.
50
+ */
51
+ addDirect(child, at) {
52
+ super.add(child, at);
53
+ }
54
+ update(props) {
55
+ this.#updateNotification(props);
56
+ super.update(props);
57
+ }
58
+ #updateNotification({ title, purpose, direction }) {
59
+ this.#title = title;
60
+ this.#stack.direction = direction ?? 'down';
61
+ this.#syncTitle();
62
+ if (purpose) {
63
+ this.theme = Theme[purpose];
64
+ }
65
+ }
66
+ /**
67
+ * The resolved title: explicit `title` prop, or the first user child's
68
+ * `heading`.
69
+ */
70
+ #resolvedTitle() {
71
+ if (this.#title !== undefined)
72
+ return this.#title;
73
+ return this.#firstUserChild()?.heading;
74
+ }
75
+ /**
76
+ * Returns the first child that isn't the internal title/separator views.
77
+ */
78
+ #firstUserChild() {
79
+ for (const child of this.#stack.children) {
80
+ if (child !== this.#titleView && child !== this.#separator) {
81
+ return child;
82
+ }
83
+ }
84
+ return undefined;
85
+ }
86
+ /**
87
+ * Syncs the title view in the stack with the resolved title.
88
+ */
89
+ #syncTitle() {
90
+ const resolved = this.#resolvedTitle();
91
+ if (resolved) {
92
+ if (this.#titleView) {
93
+ this.#titleView.text = resolved;
94
+ }
95
+ else if (!this.#titleView) {
96
+ this.#titleView = new Text({
97
+ text: resolved,
98
+ style: this.#titleStyle,
99
+ wrap: true,
100
+ });
101
+ this.#separator = Separator.horizontal();
102
+ this.#stack.add(this.#titleView, 0);
103
+ this.#stack.add(this.#separator, 1);
104
+ }
105
+ }
106
+ else if (!resolved && this.#titleView) {
107
+ this.#stack.removeChild(this.#titleView);
108
+ this.#stack.removeChild(this.#separator);
109
+ this.#titleView = undefined;
110
+ this.#separator = undefined;
111
+ }
112
+ }
113
+ add(child, at) {
114
+ this.#stack.add(child, at);
115
+ }
116
+ removeChild(child) {
117
+ this.#stack.removeChild(child);
118
+ }
119
+ }
120
+ //# sourceMappingURL=Notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Notification.js","sourceRoot":"","sources":["../../lib/components/Notification.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAC,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,EAAC,KAAK,EAAe,MAAM,aAAa,CAAA;AAE/C,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAChC,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAS9B;;;;;;;GAOG;AACH,MAAM,OAAO,YAAa,SAAQ,SAAS;IACzC,MAAM,CAAO;IACb,MAAM,CAAoB;IAC1B,WAAW,CAAO;IAClB,UAAU,CAAkB;IAC5B,UAAU,CAAuB;IAEjC,YAAY,EAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,EAAQ;QACvE,KAAK,CAAC,KAAK,CAAC,CAAA;QAEZ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,KAAK,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,EAAC,SAAS,EAAE,SAAS,IAAI,MAAM,EAAC,CAAC,CAAA;QAEzD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;QAC7B,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACb,CAAC;QACH,CAAC;QAED,8EAA8E;QAC9E,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAED;;;OAGG;IACH,IAAc,YAAY;QACxB,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED;;;OAGG;IACO,SAAS,CAAC,KAAW,EAAE,EAAW;QAC1C,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACtB,CAAC;IAED,MAAM,CAAC,KAAY;QACjB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;QAC/B,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,mBAAmB,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAQ;QACpD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,IAAI,MAAM,CAAA;QAC3C,IAAI,CAAC,UAAU,EAAE,CAAA;QAEjB,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM,CAAA;QACjD,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,CAAA;IACxC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3D,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QAEtC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAA;YACjC,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC;oBACzB,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,IAAI,CAAC,WAAW;oBACvB,IAAI,EAAE,IAAI;iBACX,CAAC,CAAA;gBACF,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,CAAA;gBACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;gBACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAW,EAAE,CAAC,CAAC,CAAA;YACtC,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAW,CAAC,CAAA;YACzC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;YAC3B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,GAAG,CAAC,KAAW,EAAE,EAAW;QAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,WAAW,CAAC,KAAW;QACrB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ import { Container, type Props as ContainerProps } from '../Container.js';
2
+ import { Size } from '../geometry.js';
3
+ import { View } from '../View.js';
4
+ import { Viewport } from '../Viewport.js';
5
+ import { System } from '../System.js';
6
+ import { type MouseEvent, type KeyEvent } from '../events/index.js';
7
+ interface Props extends ContainerProps {
8
+ activeIndex?: number;
9
+ onChange?: (index: number) => void;
10
+ }
11
+ interface SectionProps extends ContainerProps {
12
+ title?: string;
13
+ }
14
+ export declare class Page extends Container {
15
+ #private;
16
+ static Section: typeof Section;
17
+ static create(sections: ([string, View] | Section)[], extraProps?: Props): Page;
18
+ constructor(props?: Props);
19
+ update(props: Props): void;
20
+ get sections(): SectionLike[];
21
+ get activeIndex(): number;
22
+ set activeIndex(value: number);
23
+ addSection(title: string, view: View): void;
24
+ addSection(section: Section): void;
25
+ naturalSize(available: Size): Size;
26
+ receiveKey(event: KeyEvent): void;
27
+ receiveMouse(event: MouseEvent, system: System): void;
28
+ receiveTick(dt: number): boolean;
29
+ render(viewport: Viewport): void;
30
+ }
31
+ declare class Section extends Container {
32
+ #private;
33
+ static create(title: string, child: View, extraProps?: Omit<SectionProps, 'title'>): Section;
34
+ constructor({ title, ...props }: SectionProps);
35
+ /**
36
+ * Returns the explicit title if set, otherwise falls back to the first
37
+ * child's `heading` property.
38
+ */
39
+ get title(): string;
40
+ set title(value: string);
41
+ update({ title, ...props }: SectionProps): void;
42
+ }
43
+ /**
44
+ * Lightweight wrapper so non-Section children can be treated uniformly.
45
+ * Delegates rendering and sizing to the underlying view.
46
+ */
47
+ declare class ImplicitSection {
48
+ #private;
49
+ constructor(view: View);
50
+ get title(): string;
51
+ naturalSize(available: Size): Size;
52
+ render(viewport: Viewport): void;
53
+ }
54
+ type SectionLike = Section | ImplicitSection;
55
+ export {};
@@ -0,0 +1,374 @@
1
+ import { Container } from '../Container.js';
2
+ import { Point, Rect, Size } from '../geometry.js';
3
+ import { isMouseClicked, isMouseExit, isMouseWheel, } from '../events/index.js';
4
+ import { Style } from '../Style.js';
5
+ import { define } from '../util.js';
6
+ export class Page extends Container {
7
+ static Section;
8
+ #activeIndex = 0;
9
+ #onChange;
10
+ // Animation state
11
+ #animating = false;
12
+ #animationElapsed = 0; // elapsed time in ms
13
+ #animationDirection = 0; // -1 = sliding left (going forward), +1 = sliding right (going backward)
14
+ #outgoingIndex = -1; // section index of the outgoing page
15
+ #incomingIndex = -1; // section index of the incoming page
16
+ // Mouse scroll state
17
+ #scrollDx = 0;
18
+ #scrollTimeout = 0;
19
+ #disableScrollTimeout = 0;
20
+ // Dot layout (computed during render, used for mouse hit-testing)
21
+ #dotRects = [];
22
+ #hoveredDot = -1;
23
+ #dotsY = 0;
24
+ static create(sections, extraProps = {}) {
25
+ const page = new Page(extraProps);
26
+ for (const section of sections) {
27
+ if (section instanceof Section) {
28
+ page.addSection(section);
29
+ }
30
+ else {
31
+ const [title, view] = section;
32
+ page.addSection(title, view);
33
+ }
34
+ }
35
+ return page;
36
+ }
37
+ constructor(props = {}) {
38
+ super(props);
39
+ this.#update(props);
40
+ }
41
+ update(props) {
42
+ this.#update(props);
43
+ super.update(props);
44
+ }
45
+ #update({ activeIndex, onChange }) {
46
+ if (activeIndex !== undefined && activeIndex !== this.#activeIndex) {
47
+ this.#navigateTo(activeIndex);
48
+ }
49
+ this.#onChange = onChange;
50
+ }
51
+ get sections() {
52
+ return this.children.map(view => view instanceof Section ? view : new ImplicitSection(view));
53
+ }
54
+ get activeIndex() {
55
+ return this.#activeIndex;
56
+ }
57
+ set activeIndex(value) {
58
+ if (value === this.#activeIndex)
59
+ return;
60
+ this.#navigateTo(value);
61
+ }
62
+ addSection(titleOrSection, view) {
63
+ let sectionView;
64
+ if (titleOrSection instanceof Section) {
65
+ sectionView = titleOrSection;
66
+ }
67
+ else {
68
+ sectionView = Section.create(titleOrSection, view);
69
+ }
70
+ this.add(sectionView);
71
+ }
72
+ #navigateTo(index) {
73
+ const sections = this.sections;
74
+ if (sections.length === 0)
75
+ return;
76
+ index = Math.max(0, Math.min(sections.length - 1, index));
77
+ if (index === this.#activeIndex && !this.#animating)
78
+ return;
79
+ const prevIndex = this.#animating ? this.#incomingIndex : this.#activeIndex;
80
+ if (index === prevIndex)
81
+ return;
82
+ this.#outgoingIndex = prevIndex;
83
+ this.#incomingIndex = index;
84
+ this.#animationDirection = index > prevIndex ? -1 : 1;
85
+ this.#animationElapsed = 0;
86
+ this.#animating = true;
87
+ this.#activeIndex = index;
88
+ this.#onChange?.(index);
89
+ this.invalidateSize();
90
+ }
91
+ #hasTitles() {
92
+ return this.sections.some(s => s.title.length > 0);
93
+ }
94
+ #indicatorHeight() {
95
+ return 1 + (this.#hasTitles() ? 1 : 0);
96
+ }
97
+ naturalSize(available) {
98
+ const indicatorHeight = this.#indicatorHeight();
99
+ const childAvailable = available.shrink(0, indicatorHeight);
100
+ let maxWidth = 0, maxHeight = 0;
101
+ for (const section of this.sections) {
102
+ const size = section.naturalSize(childAvailable);
103
+ maxWidth = Math.max(maxWidth, size.width);
104
+ maxHeight = Math.max(maxHeight, size.height);
105
+ }
106
+ return new Size(maxWidth, maxHeight + indicatorHeight);
107
+ }
108
+ receiveKey(event) {
109
+ const sections = this.sections;
110
+ if (sections.length === 0)
111
+ return;
112
+ switch (event.name) {
113
+ case 'pagedown':
114
+ this.#navigateTo(this.#activeIndex + 1);
115
+ break;
116
+ case 'pageup':
117
+ this.#navigateTo(this.#activeIndex - 1);
118
+ break;
119
+ case 'home':
120
+ this.#navigateTo(0);
121
+ break;
122
+ case 'end':
123
+ this.#navigateTo(sections.length - 1);
124
+ break;
125
+ }
126
+ }
127
+ receiveMouse(event, system) {
128
+ super.receiveMouse(event, system);
129
+ if (isMouseWheel(event)) {
130
+ if (this.#disableScrollTimeout > 0)
131
+ return;
132
+ if (event.name === 'mouse.wheel.up' ||
133
+ event.name === 'mouse.wheel.left') {
134
+ this.#scrollDx -= 1;
135
+ }
136
+ else if (event.name === 'mouse.wheel.down' ||
137
+ event.name === 'mouse.wheel.right') {
138
+ this.#scrollDx += 1;
139
+ }
140
+ if (this.#scrollDx <= -SCROLL_THRESHOLD) {
141
+ this.#scrollDx = 0;
142
+ this.#scrollTimeout = 0;
143
+ this.#disableScrollTimeout = DISABLE_TIMEOUT;
144
+ this.#navigateTo(this.#activeIndex - 1);
145
+ }
146
+ else if (this.#scrollDx >= SCROLL_THRESHOLD) {
147
+ this.#scrollDx = 0;
148
+ this.#scrollTimeout = 0;
149
+ this.#disableScrollTimeout = DISABLE_TIMEOUT;
150
+ this.#navigateTo(this.#activeIndex + 1);
151
+ }
152
+ else {
153
+ this.#scrollTimeout = SCROLL_TIMEOUT;
154
+ this.invalidateSize();
155
+ }
156
+ return;
157
+ }
158
+ // Update dot hover based on mouse position
159
+ if (isMouseExit(event)) {
160
+ this.#hoveredDot = -1;
161
+ }
162
+ else {
163
+ this.#hoveredDot = this.#dotIndexAt(event.position);
164
+ }
165
+ if (isMouseClicked(event)) {
166
+ const dotIndex = this.#dotIndexAt(event.position);
167
+ if (dotIndex >= 0) {
168
+ this.#navigateTo(dotIndex);
169
+ }
170
+ }
171
+ }
172
+ #dotIndexAt(position) {
173
+ for (let i = 0; i < this.#dotRects.length; i++) {
174
+ if (this.#dotRects[i].includes(position)) {
175
+ return i;
176
+ }
177
+ }
178
+ return -1;
179
+ }
180
+ receiveTick(dt) {
181
+ let needsTick = false;
182
+ if (this.#disableScrollTimeout > 0) {
183
+ this.#disableScrollTimeout -= dt;
184
+ if (this.#disableScrollTimeout <= 0) {
185
+ this.#disableScrollTimeout = 0;
186
+ }
187
+ else {
188
+ needsTick = true;
189
+ }
190
+ }
191
+ if (this.#scrollDx !== 0) {
192
+ this.#scrollTimeout -= dt;
193
+ if (this.#scrollTimeout <= 0) {
194
+ this.#scrollDx = 0;
195
+ this.#scrollTimeout = 0;
196
+ }
197
+ else {
198
+ needsTick = true;
199
+ }
200
+ }
201
+ if (!this.#animating)
202
+ return needsTick;
203
+ this.#animationElapsed += dt;
204
+ if (this.#animationElapsed >= ANIMATION_DURATION) {
205
+ this.#animating = false;
206
+ this.#animationElapsed = 0;
207
+ this.#outgoingIndex = -1;
208
+ this.#incomingIndex = -1;
209
+ this.invalidateSize();
210
+ return false;
211
+ }
212
+ this.invalidateSize();
213
+ return true;
214
+ }
215
+ render(viewport) {
216
+ const sections = this.sections;
217
+ if (sections.length === 0)
218
+ return;
219
+ viewport.registerFocus();
220
+ viewport.registerMouse(['mouse.button.left', 'mouse.move', 'mouse.wheel']);
221
+ if (this.#animating ||
222
+ this.#scrollDx !== 0 ||
223
+ this.#disableScrollTimeout > 0) {
224
+ viewport.registerTick();
225
+ }
226
+ const indicatorHeight = this.#indicatorHeight();
227
+ const contentHeight = viewport.contentSize.height - indicatorHeight;
228
+ const contentWidth = viewport.contentSize.width;
229
+ if (contentHeight > 0) {
230
+ const contentRect = new Rect([0, 0], [contentWidth, contentHeight]);
231
+ if (this.#animating && this.#outgoingIndex >= 0) {
232
+ const t = Math.min(1, this.#animationElapsed / ANIMATION_DURATION);
233
+ const eased = easeInOut(t);
234
+ const offset = Math.round(eased * contentWidth);
235
+ // Both pages slide in the same direction:
236
+ // forward (direction = -1): both slide left
237
+ // backward (direction = +1): both slide right
238
+ const outX = this.#animationDirection * offset;
239
+ const inX = this.#animationDirection * (offset - contentWidth);
240
+ const outgoing = sections[this.#outgoingIndex];
241
+ const incoming = sections[this.#incomingIndex];
242
+ viewport.clipped(contentRect, inner => {
243
+ if (outgoing) {
244
+ inner.clipped(new Rect([outX, 0], [contentWidth, contentHeight]), inner2 => outgoing.render(inner2));
245
+ }
246
+ if (incoming) {
247
+ inner.clipped(new Rect([inX, 0], [contentWidth, contentHeight]), inner2 => incoming.render(inner2));
248
+ }
249
+ });
250
+ }
251
+ else {
252
+ const active = sections[this.#activeIndex];
253
+ if (active) {
254
+ viewport.clipped(contentRect, inner => {
255
+ active.render(inner);
256
+ });
257
+ }
258
+ }
259
+ }
260
+ // Render indicator area
261
+ this.#renderIndicator(viewport, sections, contentHeight);
262
+ }
263
+ #renderIndicator(viewport, sections, contentY) {
264
+ const textStyle = this.theme.text();
265
+ const totalDotsWidth = sections.length * DOT_WIDTH;
266
+ const startX = Math.max(0, Math.floor((viewport.contentSize.width - totalDotsWidth) / 2));
267
+ const hasTitles = this.#hasTitles();
268
+ const indicatorHeight = this.#indicatorHeight();
269
+ const dotsY = contentY + (hasTitles ? 1 : 0);
270
+ // Paint subtle background across the indicator area
271
+ const bgStyle = this.#controlsBackground();
272
+ viewport.paint(bgStyle, new Rect([0, contentY], [viewport.contentSize.width, indicatorHeight]));
273
+ // Render title if any section has a title
274
+ if (hasTitles) {
275
+ const titleY = contentY;
276
+ // Show hovered dot's title, or active section's title
277
+ const titleIndex = this.#hoveredDot >= 0 ? this.#hoveredDot : this.#activeIndex;
278
+ const title = sections[titleIndex]?.title ?? '';
279
+ if (title.length > 0) {
280
+ const titleX = Math.max(0, Math.floor((viewport.contentSize.width - title.length) / 2));
281
+ viewport.write(title, new Point(titleX, titleY), textStyle.merge(bgStyle));
282
+ }
283
+ }
284
+ // Render dots and store rects for hit-testing
285
+ this.#dotRects = [];
286
+ this.#dotsY = dotsY;
287
+ for (let i = 0; i < sections.length; i++) {
288
+ const dotX = startX + i * DOT_WIDTH;
289
+ const dotChar = i === this.#activeIndex ? DOT_ACTIVE : DOT_INACTIVE;
290
+ // DOT_WIDTH = 3: [pad] [dot] [pad]
291
+ const dotRect = new Rect([dotX, dotsY], [DOT_WIDTH, 1]);
292
+ this.#dotRects.push(dotRect);
293
+ const isHover = this.#hoveredDot === i;
294
+ const style = this.#dotStyle(i === this.#activeIndex, isHover);
295
+ if (isHover) {
296
+ viewport.paint(style, dotRect);
297
+ }
298
+ viewport.write(dotChar, new Point(dotX + 1, dotsY), style);
299
+ }
300
+ }
301
+ #controlsBackground() {
302
+ return new Style({ background: this.theme.ui().background });
303
+ }
304
+ #dotStyle(isActive, isHover) {
305
+ if (isHover) {
306
+ const { foreground, background } = this.theme.ui({ isHover: true });
307
+ return new Style({ bold: true, foreground, background });
308
+ }
309
+ const background = this.theme.ui().background;
310
+ if (isActive) {
311
+ return new Style({ bold: true, background });
312
+ }
313
+ return new Style({ dim: true, background });
314
+ }
315
+ }
316
+ class Section extends Container {
317
+ #title;
318
+ static create(title, child, extraProps = {}) {
319
+ return new Section({ title, child, ...extraProps });
320
+ }
321
+ constructor({ title, ...props }) {
322
+ super(props);
323
+ this.#title = title;
324
+ define(this, 'title', { enumerable: true });
325
+ }
326
+ /**
327
+ * Returns the explicit title if set, otherwise falls back to the first
328
+ * child's `heading` property.
329
+ */
330
+ get title() {
331
+ return this.#title ?? this.children[0]?.heading ?? '';
332
+ }
333
+ set title(value) {
334
+ this.#title = value;
335
+ this.invalidateSize();
336
+ }
337
+ update({ title, ...props }) {
338
+ if (title !== undefined) {
339
+ this.title = title;
340
+ }
341
+ super.update(props);
342
+ }
343
+ }
344
+ /**
345
+ * Lightweight wrapper so non-Section children can be treated uniformly.
346
+ * Delegates rendering and sizing to the underlying view.
347
+ */
348
+ class ImplicitSection {
349
+ #view;
350
+ constructor(view) {
351
+ this.#view = view;
352
+ }
353
+ get title() {
354
+ return this.#view.heading ?? '';
355
+ }
356
+ naturalSize(available) {
357
+ return this.#view.naturalSize(available);
358
+ }
359
+ render(viewport) {
360
+ this.#view.render(viewport);
361
+ }
362
+ }
363
+ Page.Section = Section;
364
+ const DOT_ACTIVE = '●';
365
+ const DOT_INACTIVE = '○';
366
+ const DOT_WIDTH = 3;
367
+ const SCROLL_THRESHOLD = 3;
368
+ const SCROLL_TIMEOUT = 3000; // ms to accrue scroll events before resetting
369
+ const DISABLE_TIMEOUT = 300; // ms to ignore scroll events after a page change
370
+ const ANIMATION_DURATION = 400; // ms
371
+ function easeInOut(t) {
372
+ return t < 0.5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2;
373
+ }
374
+ //# sourceMappingURL=Page.js.map