@gjermundgaraba-designs/pixel-paper 0.26.0 → 0.27.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 (940) hide show
  1. package/DESIGN.md +28 -3
  2. package/dist/src/adapters/diagram.d.ts +38 -0
  3. package/dist/src/adapters/diagram.d.ts.map +1 -0
  4. package/dist/src/adapters/diagram.js +206 -0
  5. package/dist/src/adapters/mermaid.d.ts +2 -20
  6. package/dist/src/adapters/mermaid.d.ts.map +1 -1
  7. package/dist/src/adapters/mermaid.js +9 -229
  8. package/dist/src/announcer/announcer.d.ts +0 -4
  9. package/dist/src/announcer/announcer.d.ts.map +1 -1
  10. package/dist/src/announcer/announcer.js +19 -18
  11. package/dist/src/attributes/attributes.d.ts.map +1 -1
  12. package/dist/src/{audioFrame/audioFrame.d.ts → audio-frame/audio-frame.d.ts} +1 -1
  13. package/dist/src/audio-frame/audio-frame.d.ts.map +1 -0
  14. package/dist/src/{audioFrame/audioFrame.js → audio-frame/audio-frame.js} +1 -1
  15. package/dist/src/audio-frame/index.d.ts +3 -0
  16. package/dist/src/audio-frame/index.d.ts.map +1 -0
  17. package/dist/src/audio-frame/index.js +1 -0
  18. package/dist/src/banner/banner.d.ts.map +1 -1
  19. package/dist/src/banner/index.d.ts.map +1 -1
  20. package/dist/src/{barChart/barChart.d.ts → bar-chart/bar-chart.d.ts} +2 -2
  21. package/dist/src/bar-chart/bar-chart.d.ts.map +1 -0
  22. package/dist/src/{barChart/barChart.js → bar-chart/bar-chart.js} +40 -35
  23. package/dist/src/bar-chart/index.d.ts +3 -0
  24. package/dist/src/bar-chart/index.d.ts.map +1 -0
  25. package/dist/src/bar-chart/index.js +1 -0
  26. package/dist/src/bench/bench.d.ts.map +1 -1
  27. package/dist/src/bench/index.d.ts.map +1 -1
  28. package/dist/src/board/board.d.ts +45 -46
  29. package/dist/src/board/board.d.ts.map +1 -1
  30. package/dist/src/board/board.js +76 -102
  31. package/dist/src/board/index.d.ts +1 -1
  32. package/dist/src/board/index.d.ts.map +1 -1
  33. package/dist/src/button/button.d.ts +1 -2
  34. package/dist/src/button/button.d.ts.map +1 -1
  35. package/dist/src/button/button.js +7 -5
  36. package/dist/src/button/index.d.ts +1 -1
  37. package/dist/src/button/index.d.ts.map +1 -1
  38. package/dist/src/card/card.d.ts.map +1 -1
  39. package/dist/src/card/card.js +4 -2
  40. package/dist/src/card/index.d.ts.map +1 -1
  41. package/dist/src/{chartTable/chartTable.d.ts → chart-table/chart-table.d.ts} +4 -14
  42. package/dist/src/chart-table/chart-table.d.ts.map +1 -0
  43. package/dist/src/{chartTable/chartTable.js → chart-table/chart-table.js} +9 -16
  44. package/dist/src/chip/chip.d.ts.map +1 -1
  45. package/dist/src/chip/chip.js +4 -2
  46. package/dist/src/chip/index.d.ts.map +1 -1
  47. package/dist/src/choice/choice.d.ts.map +1 -1
  48. package/dist/src/choice/choice.js +3 -1
  49. package/dist/src/choice/index.d.ts.map +1 -1
  50. package/dist/src/choices/choices.d.ts.map +1 -1
  51. package/dist/src/choices/index.d.ts.map +1 -1
  52. package/dist/src/{codeEditor/codeEditor.d.ts → code-editor/code-editor.d.ts} +1 -1
  53. package/dist/src/code-editor/code-editor.d.ts.map +1 -0
  54. package/dist/src/{codeEditor/codeEditor.js → code-editor/code-editor.js} +2 -2
  55. package/dist/src/code-editor/index.d.ts +3 -0
  56. package/dist/src/code-editor/index.d.ts.map +1 -0
  57. package/dist/src/code-editor/index.js +1 -0
  58. package/dist/src/{codeSurface/codeSurface.d.ts → code-surface/code-surface.d.ts} +1 -1
  59. package/dist/src/code-surface/code-surface.d.ts.map +1 -0
  60. package/dist/src/{codeSurface/codeSurface.js → code-surface/code-surface.js} +6 -1
  61. package/dist/src/code-surface/index.d.ts +3 -0
  62. package/dist/src/code-surface/index.d.ts.map +1 -0
  63. package/dist/src/code-surface/index.js +1 -0
  64. package/dist/src/{commandPalette/commandPalette.d.ts → command-palette/command-palette.d.ts} +85 -77
  65. package/dist/src/command-palette/command-palette.d.ts.map +1 -0
  66. package/dist/src/command-palette/command-palette.js +625 -0
  67. package/dist/src/{commandPalette → command-palette}/index.d.ts +2 -2
  68. package/dist/src/command-palette/index.d.ts.map +1 -0
  69. package/dist/src/{commandPalette → command-palette}/index.js +1 -1
  70. package/dist/src/{commandPalette → command-palette}/keys.d.ts +0 -21
  71. package/dist/src/command-palette/keys.d.ts.map +1 -0
  72. package/dist/src/command-palette/keys.js +85 -0
  73. package/dist/src/{commandPalette → command-palette}/match.d.ts +5 -11
  74. package/dist/src/command-palette/match.d.ts.map +1 -0
  75. package/dist/src/{commandPalette → command-palette}/match.js +20 -24
  76. package/dist/src/{commandPalette → command-palette}/message.d.ts +37 -26
  77. package/dist/src/command-palette/message.d.ts.map +1 -0
  78. package/dist/src/{commandPalette → command-palette}/message.js +8 -20
  79. package/dist/src/{confirmDialog/confirmDialog.d.ts → confirm-dialog/confirm-dialog.d.ts} +1 -1
  80. package/dist/src/confirm-dialog/confirm-dialog.d.ts.map +1 -0
  81. package/dist/src/{confirmDialog/confirmDialog.js → confirm-dialog/confirm-dialog.js} +18 -23
  82. package/dist/src/confirm-dialog/index.d.ts +3 -0
  83. package/dist/src/confirm-dialog/index.d.ts.map +1 -0
  84. package/dist/src/{confirmDialog → confirm-dialog}/index.js +1 -1
  85. package/dist/src/{contextMenu/contextMenu.d.ts → context-menu/context-menu.d.ts} +18 -21
  86. package/dist/src/context-menu/context-menu.d.ts.map +1 -0
  87. package/dist/src/{contextMenu/contextMenu.js → context-menu/context-menu.js} +45 -57
  88. package/dist/src/{contextMenu → context-menu}/index.d.ts +2 -2
  89. package/dist/src/context-menu/index.d.ts.map +1 -0
  90. package/dist/src/{contextMenu → context-menu}/index.js +1 -1
  91. package/dist/src/{copyButton/copyButton.d.ts → copy-button/copy-button.d.ts} +5 -7
  92. package/dist/src/copy-button/copy-button.d.ts.map +1 -0
  93. package/dist/src/{copyButton/copyButton.js → copy-button/copy-button.js} +18 -27
  94. package/dist/src/copy-button/index.d.ts +3 -0
  95. package/dist/src/copy-button/index.d.ts.map +1 -0
  96. package/dist/src/copy-button/index.js +1 -0
  97. package/dist/src/crumbs/crumbs.d.ts +1 -1
  98. package/dist/src/crumbs/crumbs.d.ts.map +1 -1
  99. package/dist/src/crumbs/index.d.ts.map +1 -1
  100. package/dist/src/deck/deck.d.ts.map +1 -1
  101. package/dist/src/deck/index.d.ts.map +1 -1
  102. package/dist/src/dialog/dialog.d.ts +6 -14
  103. package/dist/src/dialog/dialog.d.ts.map +1 -1
  104. package/dist/src/dialog/dialog.js +29 -36
  105. package/dist/src/dialog/fold.d.ts +3 -3
  106. package/dist/src/dialog/fold.d.ts.map +1 -1
  107. package/dist/src/dialog/fold.js +5 -4
  108. package/dist/src/dialog/index.d.ts +1 -1
  109. package/dist/src/dialog/index.d.ts.map +1 -1
  110. package/dist/src/disclosure/disclosure.d.ts.map +1 -1
  111. package/dist/src/disclosure/disclosure.js +3 -1
  112. package/dist/src/disclosure/index.d.ts.map +1 -1
  113. package/dist/src/dom/html-element.d.ts +3 -0
  114. package/dist/src/dom/html-element.d.ts.map +1 -0
  115. package/dist/src/dom/html-element.js +6 -0
  116. package/dist/src/drag/drag.d.ts +0 -34
  117. package/dist/src/drag/drag.d.ts.map +1 -1
  118. package/dist/src/drag/drag.js +27 -73
  119. package/dist/src/{dropZone/dropZone.d.ts → drop-zone/drop-zone.d.ts} +3 -3
  120. package/dist/src/drop-zone/drop-zone.d.ts.map +1 -0
  121. package/dist/src/{dropZone/dropZone.js → drop-zone/drop-zone.js} +13 -19
  122. package/dist/src/drop-zone/index.d.ts +3 -0
  123. package/dist/src/drop-zone/index.d.ts.map +1 -0
  124. package/dist/src/drop-zone/index.js +1 -0
  125. package/dist/src/{editableTitle/editableTitle.d.ts → editable-title/editable-title.d.ts} +14 -12
  126. package/dist/src/editable-title/editable-title.d.ts.map +1 -0
  127. package/dist/src/{editableTitle/editableTitle.js → editable-title/editable-title.js} +33 -39
  128. package/dist/src/editable-title/index.d.ts +4 -0
  129. package/dist/src/editable-title/index.d.ts.map +1 -0
  130. package/dist/src/{editableTitle → editable-title}/index.js +1 -1
  131. package/dist/src/{emptyState/emptyState.d.ts → empty-state/empty-state.d.ts} +1 -1
  132. package/dist/src/empty-state/empty-state.d.ts.map +1 -0
  133. package/dist/src/{emptyState/emptyState.js → empty-state/empty-state.js} +5 -2
  134. package/dist/src/empty-state/index.d.ts +3 -0
  135. package/dist/src/empty-state/index.d.ts.map +1 -0
  136. package/dist/src/empty-state/index.js +1 -0
  137. package/dist/src/{errorSummary/errorSummary.d.ts → error-summary/error-summary.d.ts} +2 -2
  138. package/dist/src/error-summary/error-summary.d.ts.map +1 -0
  139. package/dist/src/{errorSummary/errorSummary.js → error-summary/error-summary.js} +7 -5
  140. package/dist/src/error-summary/index.d.ts +3 -0
  141. package/dist/src/error-summary/index.d.ts.map +1 -0
  142. package/dist/src/error-summary/index.js +1 -0
  143. package/dist/src/field/field.d.ts +2 -7
  144. package/dist/src/field/field.d.ts.map +1 -1
  145. package/dist/src/field/field.js +12 -13
  146. package/dist/src/field/index.d.ts.map +1 -1
  147. package/dist/src/{fieldGrid/fieldGrid.d.ts → field-grid/field-grid.d.ts} +1 -1
  148. package/dist/src/field-grid/field-grid.d.ts.map +1 -0
  149. package/dist/src/{fieldGrid/fieldGrid.js → field-grid/field-grid.js} +1 -1
  150. package/dist/src/field-grid/index.d.ts +3 -0
  151. package/dist/src/field-grid/index.d.ts.map +1 -0
  152. package/dist/src/field-grid/index.js +1 -0
  153. package/dist/src/fields/fields.d.ts.map +1 -1
  154. package/dist/src/fields/fields.js +4 -1
  155. package/dist/src/fields/index.d.ts.map +1 -1
  156. package/dist/src/fieldset/fieldset.d.ts.map +1 -1
  157. package/dist/src/fieldset/index.d.ts.map +1 -1
  158. package/dist/src/{fileTree/fileTree.d.ts → file-tree/file-tree.d.ts} +5 -5
  159. package/dist/src/file-tree/file-tree.d.ts.map +1 -0
  160. package/dist/src/file-tree/file-tree.js +242 -0
  161. package/dist/src/file-tree/index.d.ts +3 -0
  162. package/dist/src/file-tree/index.d.ts.map +1 -0
  163. package/dist/src/{fileTree → file-tree}/index.js +1 -1
  164. package/dist/src/{filterChip/filterChip.d.ts → filter-chip/filter-chip.d.ts} +1 -1
  165. package/dist/src/filter-chip/filter-chip.d.ts.map +1 -0
  166. package/dist/src/{filterChip/filterChip.js → filter-chip/filter-chip.js} +11 -7
  167. package/dist/src/filter-chip/index.d.ts +3 -0
  168. package/dist/src/filter-chip/index.d.ts.map +1 -0
  169. package/dist/src/filter-chip/index.js +1 -0
  170. package/dist/src/{filterStrip/filterStrip.d.ts → filter-strip/filter-strip.d.ts} +1 -1
  171. package/dist/src/filter-strip/filter-strip.d.ts.map +1 -0
  172. package/dist/src/{filterStrip/filterStrip.js → filter-strip/filter-strip.js} +1 -1
  173. package/dist/src/filter-strip/index.d.ts +3 -0
  174. package/dist/src/filter-strip/index.d.ts.map +1 -0
  175. package/dist/src/filter-strip/index.js +1 -0
  176. package/dist/src/{flashWord/flashWord.d.ts → flash-word/flash-word.d.ts} +2 -2
  177. package/dist/src/flash-word/flash-word.d.ts.map +1 -0
  178. package/dist/src/{flashWord/flashWord.js → flash-word/flash-word.js} +2 -3
  179. package/dist/src/flash-word/index.d.ts +3 -0
  180. package/dist/src/flash-word/index.d.ts.map +1 -0
  181. package/dist/src/flash-word/index.js +1 -0
  182. package/dist/src/focus/focus.d.ts.map +1 -1
  183. package/dist/src/focus/focus.js +0 -2
  184. package/dist/src/format/format.d.ts +0 -7
  185. package/dist/src/format/format.d.ts.map +1 -1
  186. package/dist/src/format/format.js +7 -16
  187. package/dist/src/format/index.d.ts.map +1 -1
  188. package/dist/src/glyph/glyph.d.ts +1 -2
  189. package/dist/src/glyph/glyph.d.ts.map +1 -1
  190. package/dist/src/glyph/glyph.js +0 -2
  191. package/dist/src/glyph/glyphs.d.ts +19 -4
  192. package/dist/src/glyph/glyphs.d.ts.map +1 -1
  193. package/dist/src/glyph/glyphs.js +2577 -2594
  194. package/dist/src/glyph/index.d.ts.map +1 -1
  195. package/dist/src/group/group.d.ts.map +1 -1
  196. package/dist/src/group/index.d.ts.map +1 -1
  197. package/dist/src/history/history.d.ts +1 -1
  198. package/dist/src/history/history.d.ts.map +1 -1
  199. package/dist/src/history/history.js +6 -3
  200. package/dist/src/history/index.d.ts.map +1 -1
  201. package/dist/src/{iconButton/iconButton.d.ts → icon-button/icon-button.d.ts} +1 -1
  202. package/dist/src/icon-button/icon-button.d.ts.map +1 -0
  203. package/dist/src/{iconButton/iconButton.js → icon-button/icon-button.js} +6 -4
  204. package/dist/src/icon-button/index.d.ts +3 -0
  205. package/dist/src/icon-button/index.d.ts.map +1 -0
  206. package/dist/src/icon-button/index.js +1 -0
  207. package/dist/src/identity/identity.d.ts.map +1 -1
  208. package/dist/src/identity/index.d.ts.map +1 -1
  209. package/dist/src/{imageFrame/imageFrame.d.ts → image-frame/image-frame.d.ts} +1 -1
  210. package/dist/src/image-frame/image-frame.d.ts.map +1 -0
  211. package/dist/src/{imageFrame/imageFrame.js → image-frame/image-frame.js} +19 -12
  212. package/dist/src/image-frame/index.d.ts +3 -0
  213. package/dist/src/image-frame/index.d.ts.map +1 -0
  214. package/dist/src/image-frame/index.js +1 -0
  215. package/dist/src/index.d.ts +41 -41
  216. package/dist/src/index.d.ts.map +1 -1
  217. package/dist/src/index.js +41 -41
  218. package/dist/src/inline-input/index.d.ts +3 -0
  219. package/dist/src/inline-input/index.d.ts.map +1 -0
  220. package/dist/src/{inlineInput → inline-input}/index.js +1 -1
  221. package/dist/src/{inlineInput/inlineInput.d.ts → inline-input/inline-input.d.ts} +8 -12
  222. package/dist/src/inline-input/inline-input.d.ts.map +1 -0
  223. package/dist/src/{inlineInput/inlineInput.js → inline-input/inline-input.js} +60 -75
  224. package/dist/src/key-help/index.d.ts +3 -0
  225. package/dist/src/key-help/index.d.ts.map +1 -0
  226. package/dist/src/{keyHelp → key-help}/index.js +1 -1
  227. package/dist/src/{keyHelp/keyHelp.d.ts → key-help/key-help.d.ts} +7 -7
  228. package/dist/src/key-help/key-help.d.ts.map +1 -0
  229. package/dist/src/{keyHelp/keyHelp.js → key-help/key-help.js} +48 -47
  230. package/dist/src/key-hint/index.d.ts +4 -0
  231. package/dist/src/key-hint/index.d.ts.map +1 -0
  232. package/dist/src/key-hint/index.js +2 -0
  233. package/dist/src/{keyHint/keyHint.d.ts → key-hint/key-hint.d.ts} +2 -2
  234. package/dist/src/key-hint/key-hint.d.ts.map +1 -0
  235. package/dist/src/{keyHint/keyHint.js → key-hint/key-hint.js} +2 -2
  236. package/dist/src/{keyHint/keyLabel.d.ts → key-hint/key-label.d.ts} +2 -3
  237. package/dist/src/key-hint/key-label.d.ts.map +1 -0
  238. package/dist/src/{keyHint/keyLabel.js → key-hint/key-label.js} +29 -24
  239. package/dist/src/keymap/index.d.ts.map +1 -1
  240. package/dist/src/keymap/keymap.d.ts +2 -2
  241. package/dist/src/keymap/keymap.d.ts.map +1 -1
  242. package/dist/src/keymap/keymap.js +3 -1
  243. package/dist/src/keys/keys.d.ts +0 -2
  244. package/dist/src/keys/keys.d.ts.map +1 -1
  245. package/dist/src/keys/keys.js +0 -2
  246. package/dist/src/line-chart/index.d.ts +3 -0
  247. package/dist/src/line-chart/index.d.ts.map +1 -0
  248. package/dist/src/line-chart/index.js +1 -0
  249. package/dist/src/{lineChart/lineChart.d.ts → line-chart/line-chart.d.ts} +2 -2
  250. package/dist/src/line-chart/line-chart.d.ts.map +1 -0
  251. package/dist/src/{lineChart/lineChart.js → line-chart/line-chart.js} +52 -44
  252. package/dist/src/line-diff/diff.d.ts +29 -0
  253. package/dist/src/line-diff/diff.d.ts.map +1 -0
  254. package/dist/src/line-diff/diff.js +85 -0
  255. package/dist/src/line-diff/index.d.ts +5 -0
  256. package/dist/src/line-diff/index.d.ts.map +1 -0
  257. package/dist/src/line-diff/index.js +2 -0
  258. package/dist/src/{lineDiff/lineDiff.d.ts → line-diff/line-diff.d.ts} +1 -1
  259. package/dist/src/line-diff/line-diff.d.ts.map +1 -0
  260. package/dist/src/{lineDiff/lineDiff.js → line-diff/line-diff.js} +26 -19
  261. package/dist/src/{lineDiff → line-diff}/patch.d.ts +5 -9
  262. package/dist/src/line-diff/patch.d.ts.map +1 -0
  263. package/dist/src/{lineDiff → line-diff}/patch.js +54 -62
  264. package/dist/src/link-button/index.d.ts +3 -0
  265. package/dist/src/link-button/index.d.ts.map +1 -0
  266. package/dist/src/link-button/index.js +1 -0
  267. package/dist/src/{linkButton/linkButton.d.ts → link-button/link-button.d.ts} +2 -2
  268. package/dist/src/link-button/link-button.d.ts.map +1 -0
  269. package/dist/src/{linkButton/linkButton.js → link-button/link-button.js} +1 -1
  270. package/dist/src/link-state/index.d.ts +3 -0
  271. package/dist/src/link-state/index.d.ts.map +1 -0
  272. package/dist/src/link-state/index.js +1 -0
  273. package/dist/src/{linkState/linkState.d.ts → link-state/link-state.d.ts} +1 -1
  274. package/dist/src/link-state/link-state.d.ts.map +1 -0
  275. package/dist/src/link-state/link-state.js +24 -0
  276. package/dist/src/live-region/index.d.ts +3 -0
  277. package/dist/src/live-region/index.d.ts.map +1 -0
  278. package/dist/src/live-region/index.js +1 -0
  279. package/dist/src/{liveRegion/liveRegion.d.ts → live-region/live-region.d.ts} +6 -3
  280. package/dist/src/live-region/live-region.d.ts.map +1 -0
  281. package/dist/src/{liveRegion/liveRegion.js → live-region/live-region.js} +7 -5
  282. package/dist/src/loading/index.d.ts.map +1 -1
  283. package/dist/src/loading/loading.d.ts.map +1 -1
  284. package/dist/src/loading/loading.js +5 -1
  285. package/dist/src/mark/index.d.ts.map +1 -1
  286. package/dist/src/mark/mark.d.ts +0 -4
  287. package/dist/src/mark/mark.d.ts.map +1 -1
  288. package/dist/src/mark/mark.js +6 -3
  289. package/dist/src/media/index.d.ts.map +1 -1
  290. package/dist/src/media/media.d.ts +17 -42
  291. package/dist/src/media/media.d.ts.map +1 -1
  292. package/dist/src/media/media.js +106 -104
  293. package/dist/src/menu/index.d.ts.map +1 -1
  294. package/dist/src/menu/item.d.ts +8 -8
  295. package/dist/src/menu/item.d.ts.map +1 -1
  296. package/dist/src/menu/menu.d.ts +2 -5
  297. package/dist/src/menu/menu.d.ts.map +1 -1
  298. package/dist/src/menu/menu.js +19 -30
  299. package/dist/src/menu/slip.d.ts +4 -18
  300. package/dist/src/menu/slip.d.ts.map +1 -1
  301. package/dist/src/menu/slip.js +36 -36
  302. package/dist/src/meter/index.d.ts.map +1 -1
  303. package/dist/src/meter/meter.d.ts +1 -1
  304. package/dist/src/meter/meter.d.ts.map +1 -1
  305. package/dist/src/meter/meter.js +12 -15
  306. package/dist/src/monogram/index.d.ts.map +1 -1
  307. package/dist/src/monogram/monogram.d.ts.map +1 -1
  308. package/dist/src/monogram/monogram.js +9 -8
  309. package/dist/src/nav-strip/index.d.ts +3 -0
  310. package/dist/src/nav-strip/index.d.ts.map +1 -0
  311. package/dist/src/nav-strip/index.js +1 -0
  312. package/dist/src/{navStrip/navStrip.d.ts → nav-strip/nav-strip.d.ts} +3 -6
  313. package/dist/src/nav-strip/nav-strip.d.ts.map +1 -0
  314. package/dist/src/nav-strip/nav-strip.js +25 -0
  315. package/dist/src/notice/index.d.ts.map +1 -1
  316. package/dist/src/notice/notice.d.ts +0 -4
  317. package/dist/src/notice/notice.d.ts.map +1 -1
  318. package/dist/src/notice/notice.js +1 -4
  319. package/dist/src/outcome/index.d.ts.map +1 -1
  320. package/dist/src/outcome/outcome.d.ts.map +1 -1
  321. package/dist/src/outcome/outcome.js +1 -1
  322. package/dist/src/page-head/index.d.ts +3 -0
  323. package/dist/src/page-head/index.d.ts.map +1 -0
  324. package/dist/src/page-head/index.js +1 -0
  325. package/dist/src/{pageHead/pageHead.d.ts → page-head/page-head.d.ts} +1 -1
  326. package/dist/src/page-head/page-head.d.ts.map +1 -0
  327. package/dist/src/{pageHead/pageHead.js → page-head/page-head.js} +1 -1
  328. package/dist/src/panel/index.d.ts.map +1 -1
  329. package/dist/src/panel/panel.d.ts +0 -1
  330. package/dist/src/panel/panel.d.ts.map +1 -1
  331. package/dist/src/panel/panel.js +0 -1
  332. package/dist/src/password-field/index.d.ts +3 -0
  333. package/dist/src/password-field/index.d.ts.map +1 -0
  334. package/dist/src/password-field/index.js +1 -0
  335. package/dist/src/{passwordField/passwordField.d.ts → password-field/password-field.d.ts} +1 -1
  336. package/dist/src/password-field/password-field.d.ts.map +1 -0
  337. package/dist/src/{passwordField/passwordField.js → password-field/password-field.js} +4 -5
  338. package/dist/src/places/index.d.ts.map +1 -1
  339. package/dist/src/places/places.d.ts +3 -4
  340. package/dist/src/places/places.d.ts.map +1 -1
  341. package/dist/src/places/places.js +8 -2
  342. package/dist/src/props-list/index.d.ts +3 -0
  343. package/dist/src/props-list/index.d.ts.map +1 -0
  344. package/dist/src/props-list/index.js +1 -0
  345. package/dist/src/{propsList/propsList.d.ts → props-list/props-list.d.ts} +2 -2
  346. package/dist/src/props-list/props-list.d.ts.map +1 -0
  347. package/dist/src/{propsList/propsList.js → props-list/props-list.js} +2 -2
  348. package/dist/src/prose/index.d.ts.map +1 -1
  349. package/dist/src/prose/prose.d.ts.map +1 -1
  350. package/dist/src/query-chip/index.d.ts +3 -0
  351. package/dist/src/query-chip/index.d.ts.map +1 -0
  352. package/dist/src/query-chip/index.js +1 -0
  353. package/dist/src/{queryChip/queryChip.d.ts → query-chip/query-chip.d.ts} +1 -1
  354. package/dist/src/query-chip/query-chip.d.ts.map +1 -0
  355. package/dist/src/{queryChip/queryChip.js → query-chip/query-chip.js} +7 -4
  356. package/dist/src/{radioChoices → radio-choices}/index.d.ts +2 -2
  357. package/dist/src/radio-choices/index.d.ts.map +1 -0
  358. package/dist/src/{radioChoices → radio-choices}/index.js +1 -1
  359. package/dist/src/{radioChoices/radioChoices.d.ts → radio-choices/radio-choices.d.ts} +3 -3
  360. package/dist/src/radio-choices/radio-choices.d.ts.map +1 -0
  361. package/dist/src/{radioChoices/radioChoices.js → radio-choices/radio-choices.js} +25 -24
  362. package/dist/src/rail/index.d.ts.map +1 -1
  363. package/dist/src/rail/rail.d.ts +16 -32
  364. package/dist/src/rail/rail.d.ts.map +1 -1
  365. package/dist/src/rail/rail.js +97 -65
  366. package/dist/src/reel/index.d.ts +1 -1
  367. package/dist/src/reel/index.d.ts.map +1 -1
  368. package/dist/src/reel/layout.d.ts +12 -54
  369. package/dist/src/reel/layout.d.ts.map +1 -1
  370. package/dist/src/reel/layout.js +120 -145
  371. package/dist/src/reel/reel.d.ts +35 -34
  372. package/dist/src/reel/reel.d.ts.map +1 -1
  373. package/dist/src/reel/reel.js +253 -233
  374. package/dist/src/remote/index.d.ts.map +1 -1
  375. package/dist/src/remote/remote.d.ts +2 -2
  376. package/dist/src/remote/remote.d.ts.map +1 -1
  377. package/dist/src/remote/remote.js +6 -2
  378. package/dist/src/rows/index.d.ts.map +1 -1
  379. package/dist/src/rows/rows.d.ts +2 -2
  380. package/dist/src/rows/rows.d.ts.map +1 -1
  381. package/dist/src/rows/rows.js +16 -7
  382. package/dist/src/scheme/index.d.ts +1 -1
  383. package/dist/src/scheme/index.d.ts.map +1 -1
  384. package/dist/src/scheme/index.js +1 -1
  385. package/dist/src/scheme/{schemeSwitch.d.ts → scheme-switch.d.ts} +2 -2
  386. package/dist/src/scheme/scheme-switch.d.ts.map +1 -0
  387. package/dist/src/scheme/{schemeSwitch.js → scheme-switch.js} +33 -38
  388. package/dist/src/scheme/scheme.d.ts +0 -2
  389. package/dist/src/scheme/scheme.d.ts.map +1 -1
  390. package/dist/src/scheme/scheme.js +0 -2
  391. package/dist/src/secret/index.d.ts.map +1 -1
  392. package/dist/src/secret/secret.d.ts.map +1 -1
  393. package/dist/src/segmented/index.d.ts.map +1 -1
  394. package/dist/src/segmented/segmented.d.ts.map +1 -1
  395. package/dist/src/segmented/segmented.js +14 -3
  396. package/dist/src/select-all/index.d.ts +3 -0
  397. package/dist/src/select-all/index.d.ts.map +1 -0
  398. package/dist/src/select-all/index.js +1 -0
  399. package/dist/src/{selectAll/selectAll.d.ts → select-all/select-all.d.ts} +1 -1
  400. package/dist/src/select-all/select-all.d.ts.map +1 -0
  401. package/dist/src/{selectAll/selectAll.js → select-all/select-all.js} +2 -2
  402. package/dist/src/select-field/index.d.ts +3 -0
  403. package/dist/src/select-field/index.d.ts.map +1 -0
  404. package/dist/src/select-field/index.js +1 -0
  405. package/dist/src/{selectField/selectField.d.ts → select-field/select-field.d.ts} +2 -2
  406. package/dist/src/select-field/select-field.d.ts.map +1 -0
  407. package/dist/src/{selectField/selectField.js → select-field/select-field.js} +10 -7
  408. package/dist/src/sheet/index.d.ts.map +1 -1
  409. package/dist/src/sheet/sheet.d.ts.map +1 -1
  410. package/dist/src/sheet/sheet.js +4 -1
  411. package/dist/src/skip-link/index.d.ts +2 -0
  412. package/dist/src/skip-link/index.d.ts.map +1 -0
  413. package/dist/src/skip-link/index.js +1 -0
  414. package/dist/src/{skipLink/skipLink.d.ts → skip-link/skip-link.d.ts} +1 -3
  415. package/dist/src/skip-link/skip-link.d.ts.map +1 -0
  416. package/dist/src/{skipLink/skipLink.js → skip-link/skip-link.js} +7 -11
  417. package/dist/src/slot/slot.d.ts +1 -4
  418. package/dist/src/slot/slot.d.ts.map +1 -1
  419. package/dist/src/slot/slot.js +3 -3
  420. package/dist/src/sortable/index.d.ts.map +1 -1
  421. package/dist/src/sortable/sortable.d.ts +44 -44
  422. package/dist/src/sortable/sortable.d.ts.map +1 -1
  423. package/dist/src/sortable/sortable.js +60 -93
  424. package/dist/src/stack/index.d.ts.map +1 -1
  425. package/dist/src/stack/stack.d.ts.map +1 -1
  426. package/dist/src/stack/stack.js +0 -2
  427. package/dist/src/stage/index.d.ts.map +1 -1
  428. package/dist/src/stage/stage.d.ts +1 -1
  429. package/dist/src/stage/stage.d.ts.map +1 -1
  430. package/dist/src/stage/stage.js +4 -1
  431. package/dist/src/stat/index.d.ts.map +1 -1
  432. package/dist/src/stat/stat.d.ts +1 -1
  433. package/dist/src/stat/stat.d.ts.map +1 -1
  434. package/dist/src/stat/stat.js +17 -8
  435. package/dist/src/status-bar/index.d.ts +4 -0
  436. package/dist/src/status-bar/index.d.ts.map +1 -0
  437. package/dist/src/status-bar/index.js +2 -0
  438. package/dist/src/{statusBar/statusBar.d.ts → status-bar/status-bar.d.ts} +4 -4
  439. package/dist/src/status-bar/status-bar.d.ts.map +1 -0
  440. package/dist/src/{statusBar/statusBar.js → status-bar/status-bar.js} +5 -6
  441. package/dist/src/subscription/{prefixKeys.d.ts → prefix-keys.d.ts} +1 -2
  442. package/dist/src/subscription/prefix-keys.d.ts.map +1 -0
  443. package/dist/src/subscription/{prefixKeys.js → prefix-keys.js} +2 -5
  444. package/dist/src/table/index.d.ts.map +1 -1
  445. package/dist/src/table/table.d.ts +1 -1
  446. package/dist/src/table/table.d.ts.map +1 -1
  447. package/dist/src/table/table.js +19 -7
  448. package/dist/src/tabs/index.d.ts.map +1 -1
  449. package/dist/src/tabs/tabs.d.ts +4 -4
  450. package/dist/src/tabs/tabs.d.ts.map +1 -1
  451. package/dist/src/tabs/tabs.js +1 -6
  452. package/dist/src/tag/index.d.ts.map +1 -1
  453. package/dist/src/tag/tag.d.ts.map +1 -1
  454. package/dist/src/tag/tag.js +4 -1
  455. package/dist/src/text-button/index.d.ts +3 -0
  456. package/dist/src/text-button/index.d.ts.map +1 -0
  457. package/dist/src/text-button/index.js +1 -0
  458. package/dist/src/{textButton/textButton.d.ts → text-button/text-button.d.ts} +1 -1
  459. package/dist/src/text-button/text-button.d.ts.map +1 -0
  460. package/dist/src/{textButton/textButton.js → text-button/text-button.js} +2 -2
  461. package/dist/src/textarea-field/index.d.ts +3 -0
  462. package/dist/src/textarea-field/index.d.ts.map +1 -0
  463. package/dist/src/textarea-field/index.js +1 -0
  464. package/dist/src/{textareaField/textareaField.d.ts → textarea-field/textarea-field.d.ts} +1 -1
  465. package/dist/src/textarea-field/textarea-field.d.ts.map +1 -0
  466. package/dist/src/{textareaField/textareaField.js → textarea-field/textarea-field.js} +2 -2
  467. package/dist/src/time/index.d.ts.map +1 -1
  468. package/dist/src/time/time.d.ts.map +1 -1
  469. package/dist/src/time/time.js +16 -9
  470. package/dist/src/tips/index.d.ts.map +1 -1
  471. package/dist/src/tips/tips.d.ts +7 -18
  472. package/dist/src/tips/tips.d.ts.map +1 -1
  473. package/dist/src/tips/tips.js +67 -65
  474. package/dist/src/toast/index.d.ts.map +1 -1
  475. package/dist/src/toast/stack.d.ts +1 -8
  476. package/dist/src/toast/stack.d.ts.map +1 -1
  477. package/dist/src/toast/stack.js +5 -18
  478. package/dist/src/toast/toast.d.ts +3 -5
  479. package/dist/src/toast/toast.d.ts.map +1 -1
  480. package/dist/src/toast/toast.js +42 -39
  481. package/dist/src/toc/index.d.ts.map +1 -1
  482. package/dist/src/toc/toc.d.ts +3 -3
  483. package/dist/src/toc/toc.d.ts.map +1 -1
  484. package/dist/src/toc/toc.js +10 -7
  485. package/dist/src/toolbar/index.d.ts.map +1 -1
  486. package/dist/src/toolbar/toolbar.d.ts +1 -1
  487. package/dist/src/toolbar/toolbar.d.ts.map +1 -1
  488. package/dist/src/toolbar/toolbar.js +27 -24
  489. package/dist/src/{topBar/barHeight.d.ts → top-bar/bar-height.d.ts} +1 -2
  490. package/dist/src/top-bar/bar-height.d.ts.map +1 -0
  491. package/dist/src/{topBar/barHeight.js → top-bar/bar-height.js} +20 -13
  492. package/dist/src/top-bar/index.d.ts +4 -0
  493. package/dist/src/top-bar/index.d.ts.map +1 -0
  494. package/dist/src/top-bar/index.js +2 -0
  495. package/dist/src/{topBar/topBar.d.ts → top-bar/top-bar.d.ts} +3 -3
  496. package/dist/src/top-bar/top-bar.d.ts.map +1 -0
  497. package/dist/src/{topBar/topBar.js → top-bar/top-bar.js} +2 -2
  498. package/dist/src/video-frame/index.d.ts +3 -0
  499. package/dist/src/video-frame/index.d.ts.map +1 -0
  500. package/dist/src/video-frame/index.js +1 -0
  501. package/dist/src/{videoFrame/videoFrame.d.ts → video-frame/video-frame.d.ts} +1 -1
  502. package/dist/src/video-frame/video-frame.d.ts.map +1 -0
  503. package/dist/src/{videoFrame/videoFrame.js → video-frame/video-frame.js} +11 -7
  504. package/dist/src/wall/index.d.ts.map +1 -1
  505. package/dist/src/wall/wall.d.ts.map +1 -1
  506. package/dist/src/window/index.d.ts.map +1 -1
  507. package/dist/src/window/window.d.ts +2 -2
  508. package/dist/src/window/window.d.ts.map +1 -1
  509. package/dist/src/window/window.js +4 -2
  510. package/dist/src/wordmark/index.d.ts.map +1 -1
  511. package/dist/src/wordmark/wordmark.d.ts.map +1 -1
  512. package/dist/src/wrap/index.d.ts.map +1 -1
  513. package/dist/src/wrap/wrap.d.ts.map +1 -1
  514. package/package.json +6 -6
  515. package/src/adapters/diagram.ts +278 -0
  516. package/src/adapters/mermaid.ts +13 -273
  517. package/src/announcer/announcer.ts +54 -35
  518. package/src/attributes/attributes.ts +3 -1
  519. package/src/{audioFrame/audioFrame.ts → audio-frame/audio-frame.ts} +4 -6
  520. package/src/audio-frame/index.ts +3 -0
  521. package/src/banner/banner.ts +5 -4
  522. package/src/banner/index.ts +1 -0
  523. package/src/{barChart/barChart.ts → bar-chart/bar-chart.ts} +81 -43
  524. package/src/bar-chart/index.ts +3 -0
  525. package/src/bench/bench.ts +5 -4
  526. package/src/bench/index.ts +1 -0
  527. package/src/board/board.ts +338 -243
  528. package/src/board/index.ts +8 -1
  529. package/src/button/button.ts +24 -16
  530. package/src/button/index.ts +8 -1
  531. package/src/card/card.ts +23 -21
  532. package/src/card/index.ts +1 -0
  533. package/src/chart-table/chart-table.ts +87 -0
  534. package/src/chip/chip.ts +13 -9
  535. package/src/chip/index.ts +1 -0
  536. package/src/choice/choice.ts +13 -7
  537. package/src/choice/index.ts +1 -0
  538. package/src/choices/choices.ts +4 -3
  539. package/src/choices/index.ts +1 -0
  540. package/src/{codeEditor/codeEditor.ts → code-editor/code-editor.ts} +5 -4
  541. package/src/code-editor/index.ts +3 -0
  542. package/src/{codeSurface/codeSurface.ts → code-surface/code-surface.ts} +11 -5
  543. package/src/code-surface/index.ts +3 -0
  544. package/src/{commandPalette/commandPalette.ts → command-palette/command-palette.ts} +470 -295
  545. package/src/{commandPalette → command-palette}/index.ts +12 -2
  546. package/src/{commandPalette → command-palette}/keys.ts +44 -43
  547. package/src/{commandPalette → command-palette}/match.ts +42 -30
  548. package/src/{commandPalette → command-palette}/message.ts +13 -20
  549. package/src/{confirmDialog/confirmDialog.ts → confirm-dialog/confirm-dialog.ts} +51 -46
  550. package/src/{confirmDialog → confirm-dialog}/index.ts +3 -2
  551. package/src/{contextMenu/contextMenu.ts → context-menu/context-menu.ts} +71 -70
  552. package/src/{contextMenu → context-menu}/index.ts +4 -2
  553. package/src/{copyButton/copyButton.ts → copy-button/copy-button.ts} +51 -54
  554. package/src/{copyButton → copy-button}/index.ts +3 -2
  555. package/src/crumbs/crumbs.ts +7 -6
  556. package/src/crumbs/index.ts +1 -0
  557. package/src/deck/deck.ts +4 -3
  558. package/src/deck/index.ts +1 -0
  559. package/src/dialog/dialog.ts +135 -113
  560. package/src/dialog/fold.ts +44 -25
  561. package/src/dialog/index.ts +9 -1
  562. package/src/disclosure/disclosure.ts +14 -8
  563. package/src/disclosure/index.ts +1 -0
  564. package/src/dom/html-element.ts +10 -0
  565. package/src/drag/drag.ts +102 -119
  566. package/src/{dropZone/dropZone.ts → drop-zone/drop-zone.ts} +43 -43
  567. package/src/drop-zone/index.ts +11 -0
  568. package/src/{editableTitle/editableTitle.ts → editable-title/editable-title.ts} +29 -32
  569. package/src/{editableTitle → editable-title}/index.ts +4 -2
  570. package/src/{emptyState/emptyState.ts → empty-state/empty-state.ts} +9 -5
  571. package/src/empty-state/index.ts +3 -0
  572. package/src/{errorSummary/errorSummary.ts → error-summary/error-summary.ts} +16 -7
  573. package/src/error-summary/index.ts +3 -0
  574. package/src/field/field.ts +38 -28
  575. package/src/field/index.ts +1 -0
  576. package/src/{fieldGrid/fieldGrid.ts → field-grid/field-grid.ts} +4 -3
  577. package/src/field-grid/index.ts +3 -0
  578. package/src/fields/fields.ts +9 -5
  579. package/src/fields/index.ts +1 -0
  580. package/src/fieldset/fieldset.ts +6 -5
  581. package/src/fieldset/index.ts +1 -0
  582. package/src/{fileTree/fileTree.ts → file-tree/file-tree.ts} +241 -166
  583. package/src/file-tree/index.ts +12 -0
  584. package/src/{filterChip/filterChip.ts → filter-chip/filter-chip.ts} +32 -13
  585. package/src/filter-chip/index.ts +3 -0
  586. package/src/{filterStrip/filterStrip.ts → filter-strip/filter-strip.ts} +4 -3
  587. package/src/filter-strip/index.ts +3 -0
  588. package/src/{flashWord/flashWord.ts → flash-word/flash-word.ts} +9 -7
  589. package/src/flash-word/index.ts +3 -0
  590. package/src/focus/focus.ts +5 -5
  591. package/src/format/format.ts +37 -31
  592. package/src/format/index.ts +1 -0
  593. package/src/glyph/glyph.ts +7 -6
  594. package/src/glyph/glyphs.ts +2601 -2611
  595. package/src/glyph/index.ts +3 -0
  596. package/src/group/group.ts +4 -3
  597. package/src/group/index.ts +1 -0
  598. package/src/history/history.ts +18 -10
  599. package/src/history/index.ts +1 -0
  600. package/src/{iconButton/iconButton.ts → icon-button/icon-button.ts} +13 -7
  601. package/src/icon-button/index.ts +3 -0
  602. package/src/identity/identity.ts +7 -6
  603. package/src/identity/index.ts +1 -0
  604. package/src/{imageFrame/imageFrame.ts → image-frame/image-frame.ts} +43 -25
  605. package/src/image-frame/index.ts +3 -0
  606. package/src/index.ts +139 -41
  607. package/src/{inlineInput → inline-input}/index.ts +3 -2
  608. package/src/{inlineInput/inlineInput.ts → inline-input/inline-input.ts} +97 -88
  609. package/src/{keyHelp → key-help}/index.ts +3 -2
  610. package/src/{keyHelp/keyHelp.ts → key-help/key-help.ts} +74 -62
  611. package/src/key-hint/index.ts +5 -0
  612. package/src/{keyHint/keyHint.ts → key-hint/key-hint.ts} +10 -5
  613. package/src/{keyHint/keyLabel.ts → key-hint/key-label.ts} +43 -22
  614. package/src/keymap/index.ts +1 -0
  615. package/src/keymap/keymap.ts +23 -9
  616. package/src/keys/keys.ts +0 -2
  617. package/src/line-chart/index.ts +3 -0
  618. package/src/{lineChart/lineChart.ts → line-chart/line-chart.ts} +71 -49
  619. package/src/line-diff/diff.ts +196 -0
  620. package/src/line-diff/index.ts +7 -0
  621. package/src/{lineDiff/lineDiff.ts → line-diff/line-diff.ts} +45 -23
  622. package/src/{lineDiff → line-diff}/patch.ts +104 -76
  623. package/src/link-button/index.ts +3 -0
  624. package/src/{linkButton/linkButton.ts → link-button/link-button.ts} +7 -5
  625. package/src/link-state/index.ts +3 -0
  626. package/src/{linkState/linkState.ts → link-state/link-state.ts} +20 -9
  627. package/src/live-region/index.ts +3 -0
  628. package/src/{liveRegion/liveRegion.ts → live-region/live-region.ts} +15 -11
  629. package/src/loading/index.ts +1 -0
  630. package/src/loading/loading.ts +10 -5
  631. package/src/mark/index.ts +1 -0
  632. package/src/mark/mark.ts +17 -15
  633. package/src/media/index.ts +1 -0
  634. package/src/media/media.ts +255 -157
  635. package/src/menu/index.ts +4 -0
  636. package/src/menu/item.ts +10 -11
  637. package/src/menu/menu.ts +110 -97
  638. package/src/menu/slip.ts +129 -92
  639. package/src/meter/index.ts +1 -0
  640. package/src/meter/meter.ts +52 -33
  641. package/src/monogram/index.ts +1 -0
  642. package/src/monogram/monogram.ts +27 -19
  643. package/src/nav-strip/index.ts +3 -0
  644. package/src/{navStrip/navStrip.ts → nav-strip/nav-strip.ts} +21 -13
  645. package/src/notice/index.ts +1 -0
  646. package/src/notice/notice.ts +24 -16
  647. package/src/outcome/index.ts +1 -0
  648. package/src/outcome/outcome.ts +14 -6
  649. package/src/page-head/index.ts +3 -0
  650. package/src/{pageHead/pageHead.ts → page-head/page-head.ts} +6 -5
  651. package/src/panel/index.ts +1 -0
  652. package/src/panel/panel.ts +6 -6
  653. package/src/password-field/index.ts +3 -0
  654. package/src/{passwordField/passwordField.ts → password-field/password-field.ts} +13 -13
  655. package/src/pixel-paper.css +26 -508
  656. package/src/places/index.ts +1 -0
  657. package/src/places/places.ts +22 -11
  658. package/src/props-list/index.ts +3 -0
  659. package/src/{propsList/propsList.ts → props-list/props-list.ts} +6 -6
  660. package/src/prose/index.ts +1 -0
  661. package/src/prose/prose.ts +4 -4
  662. package/src/query-chip/index.ts +3 -0
  663. package/src/{queryChip/queryChip.ts → query-chip/query-chip.ts} +18 -7
  664. package/src/{radioChoices → radio-choices}/index.ts +3 -2
  665. package/src/{radioChoices/radioChoices.ts → radio-choices/radio-choices.ts} +79 -65
  666. package/src/rail/index.ts +1 -0
  667. package/src/rail/rail.ts +291 -225
  668. package/src/reel/index.ts +8 -1
  669. package/src/reel/layout.ts +393 -238
  670. package/src/reel/reel.ts +750 -452
  671. package/src/remote/index.ts +1 -0
  672. package/src/remote/remote.ts +18 -11
  673. package/src/rows/index.ts +1 -0
  674. package/src/rows/rows.ts +83 -47
  675. package/src/scheme/index.ts +3 -1
  676. package/src/scheme/{schemeSwitch.ts → scheme-switch.ts} +24 -35
  677. package/src/scheme/scheme.ts +4 -4
  678. package/src/secret/index.ts +1 -0
  679. package/src/secret/secret.ts +5 -4
  680. package/src/segmented/index.ts +1 -0
  681. package/src/segmented/segmented.ts +22 -10
  682. package/src/select-all/index.ts +3 -0
  683. package/src/{selectAll/selectAll.ts → select-all/select-all.ts} +9 -8
  684. package/src/{selectField → select-field}/index.ts +3 -2
  685. package/src/{selectField/selectField.ts → select-field/select-field.ts} +25 -11
  686. package/src/sheet/index.ts +1 -0
  687. package/src/sheet/sheet.ts +9 -5
  688. package/src/skip-link/index.ts +1 -0
  689. package/src/{skipLink/skipLink.ts → skip-link/skip-link.ts} +9 -15
  690. package/src/slot/slot.ts +5 -6
  691. package/src/sortable/index.ts +1 -0
  692. package/src/sortable/sortable.ts +287 -206
  693. package/src/stack/index.ts +1 -0
  694. package/src/stack/stack.ts +6 -7
  695. package/src/stage/index.ts +1 -0
  696. package/src/stage/stage.ts +12 -8
  697. package/src/stat/index.ts +1 -0
  698. package/src/stat/stat.ts +39 -20
  699. package/src/status-bar/index.ts +5 -0
  700. package/src/{statusBar/statusBar.ts → status-bar/status-bar.ts} +18 -11
  701. package/src/subscription/{prefixKeys.ts → prefix-keys.ts} +5 -6
  702. package/src/table/index.ts +1 -0
  703. package/src/table/table.ts +49 -24
  704. package/src/tabs/index.ts +1 -0
  705. package/src/tabs/tabs.ts +58 -60
  706. package/src/tag/index.ts +1 -0
  707. package/src/tag/tag.ts +14 -7
  708. package/src/text-button/index.ts +3 -0
  709. package/src/{textButton/textButton.ts → text-button/text-button.ts} +7 -5
  710. package/src/textarea-field/index.ts +3 -0
  711. package/src/{textareaField/textareaField.ts → textarea-field/textarea-field.ts} +15 -7
  712. package/src/time/index.ts +1 -0
  713. package/src/time/time.ts +58 -25
  714. package/src/tips/index.ts +1 -0
  715. package/src/tips/tips.ts +183 -127
  716. package/src/toast/index.ts +3 -0
  717. package/src/toast/stack.ts +22 -23
  718. package/src/toast/toast.ts +168 -100
  719. package/src/toc/index.ts +1 -0
  720. package/src/toc/toc.ts +42 -27
  721. package/src/tokens.css +7 -24
  722. package/src/toolbar/index.ts +1 -0
  723. package/src/toolbar/toolbar.ts +78 -40
  724. package/src/{topBar/barHeight.ts → top-bar/bar-height.ts} +26 -12
  725. package/src/top-bar/index.ts +5 -0
  726. package/src/{topBar/topBar.ts → top-bar/top-bar.ts} +13 -7
  727. package/src/video-frame/index.ts +3 -0
  728. package/src/{videoFrame/videoFrame.ts → video-frame/video-frame.ts} +31 -18
  729. package/src/wall/index.ts +1 -0
  730. package/src/wall/wall.ts +13 -10
  731. package/src/window/index.ts +1 -0
  732. package/src/window/window.ts +15 -9
  733. package/src/wordmark/index.ts +1 -0
  734. package/src/wordmark/wordmark.ts +4 -3
  735. package/src/wrap/index.ts +1 -0
  736. package/src/wrap/wrap.ts +4 -3
  737. package/dist/src/audioFrame/audioFrame.d.ts.map +0 -1
  738. package/dist/src/audioFrame/index.d.ts +0 -3
  739. package/dist/src/audioFrame/index.d.ts.map +0 -1
  740. package/dist/src/audioFrame/index.js +0 -1
  741. package/dist/src/barChart/barChart.d.ts.map +0 -1
  742. package/dist/src/barChart/index.d.ts +0 -3
  743. package/dist/src/barChart/index.d.ts.map +0 -1
  744. package/dist/src/barChart/index.js +0 -1
  745. package/dist/src/chartTable/chartTable.d.ts.map +0 -1
  746. package/dist/src/codeEditor/codeEditor.d.ts.map +0 -1
  747. package/dist/src/codeEditor/index.d.ts +0 -3
  748. package/dist/src/codeEditor/index.d.ts.map +0 -1
  749. package/dist/src/codeEditor/index.js +0 -1
  750. package/dist/src/codeSurface/codeSurface.d.ts.map +0 -1
  751. package/dist/src/codeSurface/index.d.ts +0 -3
  752. package/dist/src/codeSurface/index.d.ts.map +0 -1
  753. package/dist/src/codeSurface/index.js +0 -1
  754. package/dist/src/commandPalette/commandPalette.d.ts.map +0 -1
  755. package/dist/src/commandPalette/commandPalette.js +0 -611
  756. package/dist/src/commandPalette/index.d.ts.map +0 -1
  757. package/dist/src/commandPalette/keys.d.ts.map +0 -1
  758. package/dist/src/commandPalette/keys.js +0 -102
  759. package/dist/src/commandPalette/match.d.ts.map +0 -1
  760. package/dist/src/commandPalette/message.d.ts.map +0 -1
  761. package/dist/src/confirmDialog/confirmDialog.d.ts.map +0 -1
  762. package/dist/src/confirmDialog/index.d.ts +0 -3
  763. package/dist/src/confirmDialog/index.d.ts.map +0 -1
  764. package/dist/src/contextMenu/contextMenu.d.ts.map +0 -1
  765. package/dist/src/contextMenu/index.d.ts.map +0 -1
  766. package/dist/src/copyButton/copyButton.d.ts.map +0 -1
  767. package/dist/src/copyButton/index.d.ts +0 -3
  768. package/dist/src/copyButton/index.d.ts.map +0 -1
  769. package/dist/src/copyButton/index.js +0 -1
  770. package/dist/src/dropZone/dropZone.d.ts.map +0 -1
  771. package/dist/src/dropZone/index.d.ts +0 -3
  772. package/dist/src/dropZone/index.d.ts.map +0 -1
  773. package/dist/src/dropZone/index.js +0 -1
  774. package/dist/src/editableTitle/editableTitle.d.ts.map +0 -1
  775. package/dist/src/editableTitle/index.d.ts +0 -4
  776. package/dist/src/editableTitle/index.d.ts.map +0 -1
  777. package/dist/src/emptyState/emptyState.d.ts.map +0 -1
  778. package/dist/src/emptyState/index.d.ts +0 -3
  779. package/dist/src/emptyState/index.d.ts.map +0 -1
  780. package/dist/src/emptyState/index.js +0 -1
  781. package/dist/src/errorSummary/errorSummary.d.ts.map +0 -1
  782. package/dist/src/errorSummary/index.d.ts +0 -3
  783. package/dist/src/errorSummary/index.d.ts.map +0 -1
  784. package/dist/src/errorSummary/index.js +0 -1
  785. package/dist/src/fieldGrid/fieldGrid.d.ts.map +0 -1
  786. package/dist/src/fieldGrid/index.d.ts +0 -3
  787. package/dist/src/fieldGrid/index.d.ts.map +0 -1
  788. package/dist/src/fieldGrid/index.js +0 -1
  789. package/dist/src/fileTree/fileTree.d.ts.map +0 -1
  790. package/dist/src/fileTree/fileTree.js +0 -230
  791. package/dist/src/fileTree/index.d.ts +0 -3
  792. package/dist/src/fileTree/index.d.ts.map +0 -1
  793. package/dist/src/filterChip/filterChip.d.ts.map +0 -1
  794. package/dist/src/filterChip/index.d.ts +0 -3
  795. package/dist/src/filterChip/index.d.ts.map +0 -1
  796. package/dist/src/filterChip/index.js +0 -1
  797. package/dist/src/filterStrip/filterStrip.d.ts.map +0 -1
  798. package/dist/src/filterStrip/index.d.ts +0 -3
  799. package/dist/src/filterStrip/index.d.ts.map +0 -1
  800. package/dist/src/filterStrip/index.js +0 -1
  801. package/dist/src/flashWord/flashWord.d.ts.map +0 -1
  802. package/dist/src/flashWord/index.d.ts +0 -3
  803. package/dist/src/flashWord/index.d.ts.map +0 -1
  804. package/dist/src/flashWord/index.js +0 -1
  805. package/dist/src/iconButton/iconButton.d.ts.map +0 -1
  806. package/dist/src/iconButton/index.d.ts +0 -3
  807. package/dist/src/iconButton/index.d.ts.map +0 -1
  808. package/dist/src/iconButton/index.js +0 -1
  809. package/dist/src/imageFrame/imageFrame.d.ts.map +0 -1
  810. package/dist/src/imageFrame/index.d.ts +0 -3
  811. package/dist/src/imageFrame/index.d.ts.map +0 -1
  812. package/dist/src/imageFrame/index.js +0 -1
  813. package/dist/src/inlineInput/index.d.ts +0 -3
  814. package/dist/src/inlineInput/index.d.ts.map +0 -1
  815. package/dist/src/inlineInput/inlineInput.d.ts.map +0 -1
  816. package/dist/src/keyHelp/index.d.ts +0 -3
  817. package/dist/src/keyHelp/index.d.ts.map +0 -1
  818. package/dist/src/keyHelp/keyHelp.d.ts.map +0 -1
  819. package/dist/src/keyHint/index.d.ts +0 -4
  820. package/dist/src/keyHint/index.d.ts.map +0 -1
  821. package/dist/src/keyHint/index.js +0 -2
  822. package/dist/src/keyHint/keyHint.d.ts.map +0 -1
  823. package/dist/src/keyHint/keyLabel.d.ts.map +0 -1
  824. package/dist/src/lineChart/index.d.ts +0 -3
  825. package/dist/src/lineChart/index.d.ts.map +0 -1
  826. package/dist/src/lineChart/index.js +0 -1
  827. package/dist/src/lineChart/lineChart.d.ts.map +0 -1
  828. package/dist/src/lineDiff/diff.d.ts +0 -41
  829. package/dist/src/lineDiff/diff.d.ts.map +0 -1
  830. package/dist/src/lineDiff/diff.js +0 -92
  831. package/dist/src/lineDiff/index.d.ts +0 -5
  832. package/dist/src/lineDiff/index.d.ts.map +0 -1
  833. package/dist/src/lineDiff/index.js +0 -2
  834. package/dist/src/lineDiff/lineDiff.d.ts.map +0 -1
  835. package/dist/src/lineDiff/patch.d.ts.map +0 -1
  836. package/dist/src/linkButton/index.d.ts +0 -3
  837. package/dist/src/linkButton/index.d.ts.map +0 -1
  838. package/dist/src/linkButton/index.js +0 -1
  839. package/dist/src/linkButton/linkButton.d.ts.map +0 -1
  840. package/dist/src/linkState/index.d.ts +0 -3
  841. package/dist/src/linkState/index.d.ts.map +0 -1
  842. package/dist/src/linkState/index.js +0 -1
  843. package/dist/src/linkState/linkState.d.ts.map +0 -1
  844. package/dist/src/linkState/linkState.js +0 -14
  845. package/dist/src/liveRegion/index.d.ts +0 -3
  846. package/dist/src/liveRegion/index.d.ts.map +0 -1
  847. package/dist/src/liveRegion/index.js +0 -1
  848. package/dist/src/liveRegion/liveRegion.d.ts.map +0 -1
  849. package/dist/src/navStrip/index.d.ts +0 -3
  850. package/dist/src/navStrip/index.d.ts.map +0 -1
  851. package/dist/src/navStrip/index.js +0 -1
  852. package/dist/src/navStrip/navStrip.d.ts.map +0 -1
  853. package/dist/src/navStrip/navStrip.js +0 -27
  854. package/dist/src/pageHead/index.d.ts +0 -3
  855. package/dist/src/pageHead/index.d.ts.map +0 -1
  856. package/dist/src/pageHead/index.js +0 -1
  857. package/dist/src/pageHead/pageHead.d.ts.map +0 -1
  858. package/dist/src/passwordField/index.d.ts +0 -3
  859. package/dist/src/passwordField/index.d.ts.map +0 -1
  860. package/dist/src/passwordField/index.js +0 -1
  861. package/dist/src/passwordField/passwordField.d.ts.map +0 -1
  862. package/dist/src/propsList/index.d.ts +0 -3
  863. package/dist/src/propsList/index.d.ts.map +0 -1
  864. package/dist/src/propsList/index.js +0 -1
  865. package/dist/src/propsList/propsList.d.ts.map +0 -1
  866. package/dist/src/queryChip/index.d.ts +0 -3
  867. package/dist/src/queryChip/index.d.ts.map +0 -1
  868. package/dist/src/queryChip/index.js +0 -1
  869. package/dist/src/queryChip/queryChip.d.ts.map +0 -1
  870. package/dist/src/radioChoices/index.d.ts.map +0 -1
  871. package/dist/src/radioChoices/radioChoices.d.ts.map +0 -1
  872. package/dist/src/scheme/schemeSwitch.d.ts.map +0 -1
  873. package/dist/src/selectAll/index.d.ts +0 -3
  874. package/dist/src/selectAll/index.d.ts.map +0 -1
  875. package/dist/src/selectAll/index.js +0 -1
  876. package/dist/src/selectAll/selectAll.d.ts.map +0 -1
  877. package/dist/src/selectField/index.d.ts +0 -3
  878. package/dist/src/selectField/index.d.ts.map +0 -1
  879. package/dist/src/selectField/index.js +0 -1
  880. package/dist/src/selectField/selectField.d.ts.map +0 -1
  881. package/dist/src/skipLink/index.d.ts +0 -2
  882. package/dist/src/skipLink/index.d.ts.map +0 -1
  883. package/dist/src/skipLink/index.js +0 -1
  884. package/dist/src/skipLink/skipLink.d.ts.map +0 -1
  885. package/dist/src/statusBar/index.d.ts +0 -4
  886. package/dist/src/statusBar/index.d.ts.map +0 -1
  887. package/dist/src/statusBar/index.js +0 -2
  888. package/dist/src/statusBar/statusBar.d.ts.map +0 -1
  889. package/dist/src/subscription/prefixKeys.d.ts.map +0 -1
  890. package/dist/src/textButton/index.d.ts +0 -3
  891. package/dist/src/textButton/index.d.ts.map +0 -1
  892. package/dist/src/textButton/index.js +0 -1
  893. package/dist/src/textButton/textButton.d.ts.map +0 -1
  894. package/dist/src/textareaField/index.d.ts +0 -3
  895. package/dist/src/textareaField/index.d.ts.map +0 -1
  896. package/dist/src/textareaField/index.js +0 -1
  897. package/dist/src/textareaField/textareaField.d.ts.map +0 -1
  898. package/dist/src/topBar/barHeight.d.ts.map +0 -1
  899. package/dist/src/topBar/index.d.ts +0 -4
  900. package/dist/src/topBar/index.d.ts.map +0 -1
  901. package/dist/src/topBar/index.js +0 -2
  902. package/dist/src/topBar/topBar.d.ts.map +0 -1
  903. package/dist/src/videoFrame/index.d.ts +0 -3
  904. package/dist/src/videoFrame/index.d.ts.map +0 -1
  905. package/dist/src/videoFrame/index.js +0 -1
  906. package/dist/src/videoFrame/videoFrame.d.ts.map +0 -1
  907. package/src/audioFrame/index.ts +0 -2
  908. package/src/barChart/index.ts +0 -2
  909. package/src/chartTable/chartTable.ts +0 -88
  910. package/src/codeEditor/index.ts +0 -2
  911. package/src/codeSurface/index.ts +0 -2
  912. package/src/dropZone/index.ts +0 -2
  913. package/src/emptyState/index.ts +0 -2
  914. package/src/errorSummary/index.ts +0 -2
  915. package/src/fieldGrid/index.ts +0 -2
  916. package/src/fileTree/index.ts +0 -2
  917. package/src/filterChip/index.ts +0 -2
  918. package/src/filterStrip/index.ts +0 -2
  919. package/src/flashWord/index.ts +0 -2
  920. package/src/iconButton/index.ts +0 -2
  921. package/src/imageFrame/index.ts +0 -2
  922. package/src/keyHint/index.ts +0 -3
  923. package/src/lineChart/index.ts +0 -2
  924. package/src/lineDiff/diff.ts +0 -182
  925. package/src/lineDiff/index.ts +0 -4
  926. package/src/linkButton/index.ts +0 -2
  927. package/src/linkState/index.ts +0 -2
  928. package/src/liveRegion/index.ts +0 -2
  929. package/src/navStrip/index.ts +0 -2
  930. package/src/pageHead/index.ts +0 -2
  931. package/src/passwordField/index.ts +0 -2
  932. package/src/propsList/index.ts +0 -2
  933. package/src/queryChip/index.ts +0 -2
  934. package/src/selectAll/index.ts +0 -2
  935. package/src/skipLink/index.ts +0 -1
  936. package/src/statusBar/index.ts +0 -3
  937. package/src/textButton/index.ts +0 -2
  938. package/src/textareaField/index.ts +0 -2
  939. package/src/topBar/index.ts +0 -3
  940. package/src/videoFrame/index.ts +0 -2
@@ -1,55 +1,56 @@
1
- // The reel's layout, apart from its Model: the panes, columns and requests the application
2
- // holds and applies, where a held pane may land, and how places are said.
3
-
4
- import { Array, Equal, Match, Number, Option, Predicate, Record, Schema, pipe } from "effect";
1
+ import {
2
+ Array,
3
+ Equal,
4
+ Match,
5
+ Number,
6
+ Option,
7
+ Predicate,
8
+ Record,
9
+ Schema,
10
+ pipe,
11
+ } from "effect";
5
12
  import { defineMessageUnion } from "foldkit/message";
6
13
  import { defineTaggedUnion } from "foldkit/schema";
7
14
 
8
15
  import { LOCALE } from "../locale/locale.ts";
9
16
 
10
- // LAYOUT SCHEMAS
11
-
12
17
  /** Schema for one pane as the reel knows it: its id, unique in the reel and the application's
13
18
  * to keep, its name in words (its grip, its splitter and what screen readers hear), and its
14
19
  * share of its column's height, a weight against its neighbours'. */
15
20
  export const Pane = Schema.Struct({
16
21
  id: Schema.String,
17
22
  label: Schema.String,
18
- weight: Schema.Number,
23
+ weight: Schema.Finite,
19
24
  });
25
+
20
26
  export type Pane = typeof Pane.Type;
21
27
 
22
- /** Schema for one column: its id, unique among the reel's columns and the application's to
23
- * keep, its width, a fraction of the reel's visible width (1 fills it), and its panes, top
24
- * to bottom. A column `apply` makes for a pane pulled out takes the pane's id (`notes`, or
25
- * `notes/2` where a column has it), so pane and column ids share one namespace. */
26
28
  export const Column = Schema.Struct({
27
29
  id: Schema.String,
28
- width: Schema.Number,
30
+ width: Schema.Finite,
29
31
  panes: Schema.NonEmptyArray(Pane),
30
32
  });
33
+
31
34
  export type Column = typeof Column.Type;
32
35
 
33
36
  /** Schema for a reel's layout: its columns, left to right. The application's to keep. */
34
37
  export const Layout = Schema.Array(Column);
38
+
35
39
  export type Layout = typeof Layout.Type;
36
40
 
37
- /** What a move is said of: a pane, or a column (a key moves one), by its id. */
38
41
  export const Subject = defineTaggedUnion({
39
42
  Pane: { paneId: Schema.String },
40
43
  Column: { columnId: Schema.String },
41
44
  });
45
+
42
46
  export type Subject = typeof Subject.Type;
43
47
 
44
- /** Where a held pane would land: into a column, at a place among its other panes, or in the
45
- * gap before a column (none: after the last), as a column of its own. */
46
48
  export const Target = defineTaggedUnion({
47
- Into: { columnId: Schema.String, index: Schema.Number },
49
+ Into: { columnId: Schema.String, index: Schema.Finite },
48
50
  Gap: { maybeBeforeColumnId: Schema.Option(Schema.String) },
49
51
  });
50
- export type Target = typeof Target.Type;
51
52
 
52
- // REQUEST
53
+ export type Target = typeof Target.Type;
53
54
 
54
55
  /** Union of what a reel asks the application to do to its layout, which the application
55
56
  * applies (`apply` does it) or not, by id, so a request still means what it meant after the
@@ -58,131 +59,189 @@ export type Target = typeof Target.Type;
58
59
  * (none: after the last). `MovedColumn`: a column to before another (none: last).
59
60
  * `ResizedColumn`: a column's width. `ResizedPanes`: a column's panes' weights, by pane id. */
60
61
  export const OutMessage = defineMessageUnion({
61
- MovedPane: { paneId: Schema.String, toColumnId: Schema.String, toIndex: Schema.Number },
62
- PulledOutPane: { paneId: Schema.String, maybeBeforeColumnId: Schema.Option(Schema.String) },
63
- MovedColumn: { columnId: Schema.String, maybeBeforeColumnId: Schema.Option(Schema.String) },
64
- ResizedColumn: { columnId: Schema.String, width: Schema.Number },
62
+ MovedPane: {
63
+ paneId: Schema.String,
64
+ toColumnId: Schema.String,
65
+ toIndex: Schema.Finite,
66
+ },
67
+ PulledOutPane: {
68
+ paneId: Schema.String,
69
+ maybeBeforeColumnId: Schema.Option(Schema.String),
70
+ },
71
+ MovedColumn: {
72
+ columnId: Schema.String,
73
+ maybeBeforeColumnId: Schema.Option(Schema.String),
74
+ },
75
+ ResizedColumn: { columnId: Schema.String, width: Schema.Finite },
65
76
  ResizedPanes: {
66
77
  columnId: Schema.String,
67
- weights: Schema.Record(Schema.String, Schema.Number),
78
+ weights: Schema.Record(Schema.String, Schema.Finite),
68
79
  },
69
80
  });
81
+
70
82
  export type OutMessage = typeof OutMessage.Type;
71
83
 
72
- /** A splitter: the one after a column, which sizes its width, or the one below a pane, which
73
- * shares the height between it and the pane under it. */
74
84
  export const Splitter = defineTaggedUnion({
75
85
  Width: { columnId: Schema.String },
76
86
  Split: { abovePaneId: Schema.String },
77
87
  });
88
+
78
89
  export type Splitter = typeof Splitter.Type;
79
90
 
80
- /** A resize: a column's width, or its panes' weights. */
81
- export const Resize = Schema.Union([OutMessage.ResizedColumn, OutMessage.ResizedPanes]);
82
- export type Resize = typeof Resize.Type;
91
+ export const Resize = Schema.Union([
92
+ OutMessage.ResizedColumn,
93
+ OutMessage.ResizedPanes,
94
+ ]);
83
95
 
84
- // LAYOUT
96
+ export type Resize = typeof Resize.Type;
85
97
 
86
- /** A pane where it sits: its column (and that column's index) and its row. */
87
- export type Place = Readonly<{ column: Column; columnIndex: number; row: number; pane: Pane }>;
98
+ export type Place = Readonly<{
99
+ column: Column;
100
+ columnIndex: number;
101
+ row: number;
102
+ pane: Pane;
103
+ }>;
88
104
 
89
- const placesOf = (layout: Layout): ReadonlyArray<Place> =>
105
+ const placesOf = (layout: Layout): readonly Place[] =>
90
106
  Array.flatMap(layout, (column, columnIndex) =>
91
- Array.map(column.panes, (pane, row) => ({ column, columnIndex, row, pane })),
107
+ Array.map(column.panes, (pane, row) => ({ column, columnIndex, row, pane }))
92
108
  );
93
109
 
94
110
  export const placeOf = (layout: Layout, paneId: string): Option.Option<Place> =>
95
111
  Array.findFirst(placesOf(layout), (place) => place.pane.id === paneId);
96
112
 
97
- export const placeAt = (layout: Layout, columnIndex: number, row: number): Option.Option<Place> =>
113
+ export const placeAt = (
114
+ layout: Layout,
115
+ columnIndex: number,
116
+ row: number
117
+ ): Option.Option<Place> =>
98
118
  Option.flatMap(Array.get(layout, columnIndex), (column) =>
99
- Option.map(Array.get(column.panes, row), (pane) => ({ column, columnIndex, row, pane })),
119
+ Option.map(Array.get(column.panes, row), (pane) => ({
120
+ column,
121
+ columnIndex,
122
+ row,
123
+ pane,
124
+ }))
100
125
  );
101
126
 
102
- export const firstPlace = (layout: Layout): Option.Option<Place> => placeAt(layout, 0, 0);
127
+ export const firstPlace = (layout: Layout): Option.Option<Place> =>
128
+ placeAt(layout, 0, 0);
103
129
 
104
- const columnIndexOf = (layout: Layout, columnId: string): Option.Option<number> =>
130
+ const columnIndexOf = (
131
+ layout: Layout,
132
+ columnId: string
133
+ ): Option.Option<number> =>
105
134
  Array.findFirstIndex(layout, (column) => column.id === columnId);
106
135
 
107
136
  const columnOf = (layout: Layout, columnId: string): Option.Option<Column> =>
108
137
  Array.findFirst(layout, (column) => column.id === columnId);
109
138
 
110
- /** The id of the column after the one at `columnIndex`: none after the last. */
111
- const nextColumnId = (layout: Layout, columnIndex: number): Option.Option<string> =>
139
+ const nextColumnId = (
140
+ layout: Layout,
141
+ columnIndex: number
142
+ ): Option.Option<string> =>
112
143
  Option.map(Array.get(layout, columnIndex + 1), (column) => column.id);
113
144
 
114
- // a running mean, which never passes the largest weight, where the weights' sum may overflow
115
- const meanWeight = (panes: ReadonlyArray<Pane>): number =>
145
+ const meanWeight = (panes: readonly Pane[]): number =>
116
146
  Array.match(panes, {
117
147
  onEmpty: () => 1,
118
148
  onNonEmpty: (some) =>
119
- Array.reduce(some, 0, (mean, pane, index) => mean + (pane.weight - mean) / (index + 1)),
149
+ Array.reduce(
150
+ some,
151
+ 0,
152
+ (mean, pane, index) => mean + (pane.weight - mean) / (index + 1)
153
+ ),
120
154
  });
121
155
 
122
- const othersIn = (column: Column, paneId: string): ReadonlyArray<Pane> =>
156
+ const othersIn = (column: Column, paneId: string): readonly Pane[] =>
123
157
  Array.filter(column.panes, (pane) => pane.id !== paneId);
124
158
 
125
- const insertAt = <A>(items: ReadonlyArray<A>, index: number, item: A): Array.NonEmptyArray<A> => {
159
+ const insertAt = <A>(
160
+ items: readonly A[],
161
+ index: number,
162
+ item: A
163
+ ): Array.NonEmptyArray<A> => {
126
164
  const [before, after] = Array.splitAt(
127
165
  items,
128
- Number.clamp(index, { minimum: 0, maximum: items.length }),
166
+ Number.clamp(index, { minimum: 0, maximum: items.length })
129
167
  );
168
+
130
169
  return Array.appendAll(Array.append(before, item), after);
131
170
  };
132
171
 
133
- /** `layout` with the pane `paneId` taken out, and any column it leaves empty gone. */
134
172
  const without = (layout: Layout, paneId: string): Layout =>
135
173
  Array.flatMap(layout, (column) => {
136
174
  const others = othersIn(column, paneId);
137
- return Array.isReadonlyArrayNonEmpty(others) ? [{ ...column, panes: others }] : [];
175
+
176
+ return Array.isReadonlyArrayNonEmpty(others)
177
+ ? [{ ...column, panes: others }]
178
+ : [];
138
179
  });
139
180
 
140
- /** Where a column goes when it is put before `maybeBeforeColumnId`: none when that column is
141
- * not in `layout`. */
142
181
  const gapIndex = (
143
182
  layout: Layout,
144
- maybeBeforeColumnId: Option.Option<string>,
183
+ maybeBeforeColumnId: Option.Option<string>
145
184
  ): Option.Option<number> =>
146
185
  Option.match(maybeBeforeColumnId, {
147
186
  onNone: () => Option.some(layout.length),
148
187
  onSome: (columnId) => columnIndexOf(layout, columnId),
149
188
  });
150
189
 
151
- /** A column id for a column made for `paneId`: the pane's own id, or the first `id/2`,
152
- * `id/3`… no column in `layout` has. */
153
190
  const freshColumnId = (layout: Layout, paneId: string, suffix = 1): string => {
154
191
  const candidate = suffix === 1 ? paneId : `${paneId}/${suffix}`;
192
+
155
193
  return Array.some(layout, (column) => column.id === candidate)
156
194
  ? freshColumnId(layout, paneId, suffix + 1)
157
195
  : candidate;
158
196
  };
159
197
 
160
- const movePane = (layout: Layout, paneId: string, toColumnId: string, toIndex: number): Layout =>
161
- Option.match(Option.all({ from: placeOf(layout, paneId), to: columnOf(layout, toColumnId) }), {
162
- onNone: () => layout,
163
- onSome: ({ from, to }) => {
164
- const others = othersIn(to, paneId);
165
- const weight = to.id === from.column.id ? from.pane.weight : meanWeight(others);
166
- const panes = insertAt(others, toIndex, { ...from.pane, weight });
167
- // the target column keeps its place even when the pane was alone in it
168
- return Array.flatMap(layout, (column) =>
169
- column.id === toColumnId ? [{ ...column, panes }] : without([column], paneId),
170
- );
171
- },
172
- });
198
+ const movePane = (
199
+ layout: Layout,
200
+ paneId: string,
201
+ toColumnId: string,
202
+ toIndex: number
203
+ ): Layout =>
204
+ Option.match(
205
+ Option.all({
206
+ from: placeOf(layout, paneId),
207
+ to: columnOf(layout, toColumnId),
208
+ }),
209
+ {
210
+ onNone: () => layout,
211
+ onSome: ({ from, to }) => {
212
+ const others = othersIn(to, paneId);
213
+
214
+ const weight =
215
+ to.id === from.column.id ? from.pane.weight : meanWeight(others);
216
+
217
+ const panes = insertAt(others, toIndex, { ...from.pane, weight });
218
+
219
+ return Array.flatMap(layout, (column) =>
220
+ column.id === toColumnId
221
+ ? [{ ...column, panes }]
222
+ : without([column], paneId)
223
+ );
224
+ },
225
+ }
226
+ );
173
227
 
174
228
  const pullOutPane = (
175
229
  layout: Layout,
176
230
  paneId: string,
177
- maybeBeforeColumnId: Option.Option<string>,
231
+ maybeBeforeColumnId: Option.Option<string>
178
232
  ): Layout =>
179
233
  Option.match(placeOf(layout, paneId), {
180
234
  onNone: () => layout,
181
235
  onSome: (from) => {
182
236
  const isAlone = from.column.panes.length === 1;
237
+
183
238
  const isWhereItIs =
184
239
  Equal.equals(maybeBeforeColumnId, Option.some(from.column.id)) ||
185
- Equal.equals(maybeBeforeColumnId, nextColumnId(layout, from.columnIndex));
240
+ Equal.equals(
241
+ maybeBeforeColumnId,
242
+ nextColumnId(layout, from.columnIndex)
243
+ );
244
+
186
245
  const rest = without(layout, paneId);
187
246
 
188
247
  if (isAlone && isWhereItIs) {
@@ -204,9 +263,10 @@ const pullOutPane = (
204
263
  const moveColumn = (
205
264
  layout: Layout,
206
265
  columnId: string,
207
- maybeBeforeColumnId: Option.Option<string>,
266
+ maybeBeforeColumnId: Option.Option<string>
208
267
  ): Layout => {
209
268
  const rest = Array.filter(layout, (column) => column.id !== columnId);
269
+
210
270
  return Option.match(
211
271
  Option.all({
212
272
  column: columnOf(layout, columnId),
@@ -215,11 +275,15 @@ const moveColumn = (
215
275
  {
216
276
  onNone: () => layout,
217
277
  onSome: ({ column, gap }) => insertAt(rest, gap, column),
218
- },
278
+ }
219
279
  );
220
280
  };
221
281
 
222
- const modifyColumn = (layout: Layout, columnId: string, f: (column: Column) => Column): Layout =>
282
+ const modifyColumn = (
283
+ layout: Layout,
284
+ columnId: string,
285
+ f: (column: Column) => Column
286
+ ): Layout =>
223
287
  Array.map(layout, (column) => (column.id === columnId ? f(column) : column));
224
288
 
225
289
  /**
@@ -230,7 +294,8 @@ const modifyColumn = (layout: Layout, columnId: string, f: (column: Column) => C
230
294
  */
231
295
  export const apply = (layout: Layout, request: OutMessage): Layout =>
232
296
  OutMessage.match(request, {
233
- MovedPane: ({ paneId, toColumnId, toIndex }) => movePane(layout, paneId, toColumnId, toIndex),
297
+ MovedPane: ({ paneId, toColumnId, toIndex }) =>
298
+ movePane(layout, paneId, toColumnId, toIndex),
234
299
  PulledOutPane: ({ paneId, maybeBeforeColumnId }) =>
235
300
  pullOutPane(layout, paneId, maybeBeforeColumnId),
236
301
  MovedColumn: ({ columnId, maybeBeforeColumnId }) =>
@@ -242,25 +307,22 @@ export const apply = (layout: Layout, request: OutMessage): Layout =>
242
307
  ...column,
243
308
  panes: Array.map(column.panes, (pane) => ({
244
309
  ...pane,
245
- weight: Option.getOrElse(Record.get(weights, pane.id), () => pane.weight),
310
+ weight: Option.getOrElse(
311
+ Record.get(weights, pane.id),
312
+ () => pane.weight
313
+ ),
246
314
  })),
247
315
  })),
248
316
  });
249
317
 
250
- /** Whether `request` changes `layout`: a move, a drop or a stop that would leave it as it is
251
- * is passed over. */
252
318
  export const isChange = (layout: Layout, request: OutMessage): boolean =>
253
319
  !Equal.equals(apply(layout, request), layout);
254
320
 
255
- // WIDTHS
256
-
257
- /** How close a width is to a preset to count as it. */
258
321
  const PRESET_TOLERANCE = 0.01;
259
322
 
260
- /** The widths a column cycles through, as fractions of the reel's visible width, with the
261
- * words they are said in. They live here, not in the tokens, because they are words as much
262
- * as sizes. */
263
- const PRESETS: Array.NonEmptyReadonlyArray<Readonly<{ width: number; words: string }>> = [
323
+ const PRESETS: Array.NonEmptyReadonlyArray<
324
+ Readonly<{ width: number; words: string }>
325
+ > = [
264
326
  { width: 1 / 3, words: "a third of the width" },
265
327
  { width: 1 / 2, words: "half the width" },
266
328
  { width: 2 / 3, words: "two thirds of the width" },
@@ -268,9 +330,13 @@ const PRESETS: Array.NonEmptyReadonlyArray<Readonly<{ width: number; words: stri
268
330
  ];
269
331
 
270
332
  const presetOf = (width: number) =>
271
- Array.findFirst(PRESETS, (preset) => Math.abs(preset.width - width) < PRESET_TOLERANCE);
333
+ Array.findFirst(
334
+ PRESETS,
335
+ (preset) => Math.abs(preset.width - width) < PRESET_TOLERANCE
336
+ );
272
337
 
273
- const percent = (width: number): string => Math.round(width * 100).toLocaleString(LOCALE);
338
+ const percent = (width: number): string =>
339
+ Math.round(width * 100).toLocaleString(LOCALE);
274
340
 
275
341
  export const widthWords = (width: number): string =>
276
342
  Option.match(presetOf(width), {
@@ -278,146 +344,192 @@ export const widthWords = (width: number): string =>
278
344
  onSome: ({ words }) => words,
279
345
  });
280
346
 
281
- /** The next preset wider than `width`, or the narrowest past the widest. */
282
347
  export const nextPreset = (width: number): number =>
283
348
  Option.getOrElse(
284
- Array.findFirst(PRESETS, (preset) => preset.width > width + PRESET_TOLERANCE),
285
- () => Array.headNonEmpty(PRESETS),
349
+ Array.findFirst(
350
+ PRESETS,
351
+ (preset) => preset.width > width + PRESET_TOLERANCE
352
+ ),
353
+ () => Array.headNonEmpty(PRESETS)
286
354
  ).width;
287
355
 
288
- // WORDS
289
-
290
- /** The words a place is said in. `{pane}` is a pane's label and `{column}` a column's
291
- * number, counted from one. */
292
356
  const WORDS = {
293
357
  columnSubject: "column with {pane}",
294
358
  place: "column {column} of {columns}",
295
359
  stackedPlace: "{row} of {rows} in column {column} of {columns}",
296
360
  };
297
361
 
298
- /** What a place is called when a drop or a move would leave the pane or column where it is. */
299
362
  export const WHERE_IT_WAS = "where it was";
300
363
 
301
- export const fill = (template: string, fields: Readonly<Record<string, string | number>>): string =>
364
+ export const fill = (
365
+ template: string,
366
+ fields: Readonly<Record<string, string | number>>
367
+ ): string =>
302
368
  Array.reduce(Object.entries(fields), template, (text, [key, value]) =>
303
- text.replaceAll(`{${key}}`, Predicate.isNumber(value) ? value.toLocaleString(LOCALE) : value),
369
+ text.replaceAll(
370
+ `{${key}}`,
371
+ Predicate.isNumber(value) ? value.toLocaleString(LOCALE) : value
372
+ )
304
373
  );
305
374
 
306
- export const subjectWords = (layout: Layout, subject: Subject): Option.Option<string> =>
375
+ export const subjectWords = (
376
+ layout: Layout,
377
+ subject: Subject
378
+ ): Option.Option<string> =>
307
379
  Subject.match(subject, {
308
- Pane: ({ paneId }) => Option.map(placeOf(layout, paneId), ({ pane }) => pane.label),
380
+ Pane: ({ paneId }) =>
381
+ Option.map(placeOf(layout, paneId), ({ pane }) => pane.label),
309
382
  Column: ({ columnId }) =>
310
383
  Option.map(columnOf(layout, columnId), (column) =>
311
- fill(WORDS.columnSubject, { pane: Array.headNonEmpty(column.panes).label }),
384
+ fill(WORDS.columnSubject, {
385
+ pane: Array.headNonEmpty(column.panes).label,
386
+ })
312
387
  ),
313
388
  });
314
389
 
315
390
  export const placeWords = (layout: Layout, place: Place): string => {
316
391
  const rows = place.column.panes.length;
392
+
317
393
  const fields = {
318
394
  column: place.columnIndex + 1,
319
395
  columns: layout.length,
320
396
  row: place.row + 1,
321
397
  rows,
322
398
  };
323
- return rows > 1 ? fill(WORDS.stackedPlace, fields) : fill(WORDS.place, fields);
399
+
400
+ return rows > 1
401
+ ? fill(WORDS.stackedPlace, fields)
402
+ : fill(WORDS.place, fields);
324
403
  };
325
404
 
326
- /** Where `subject` sits in `layout`, in words. */
327
- export const whereWords = (layout: Layout, subject: Subject): Option.Option<string> =>
405
+ export const whereWords = (
406
+ layout: Layout,
407
+ subject: Subject
408
+ ): Option.Option<string> =>
328
409
  Subject.match(subject, {
329
- Pane: ({ paneId }) => Option.map(placeOf(layout, paneId), (place) => placeWords(layout, place)),
410
+ Pane: ({ paneId }) =>
411
+ Option.map(placeOf(layout, paneId), (place) => placeWords(layout, place)),
330
412
  Column: ({ columnId }) =>
331
413
  Option.map(columnIndexOf(layout, columnId), (column) =>
332
- fill(WORDS.place, { column: column + 1, columns: layout.length }),
414
+ fill(WORDS.place, { column: column + 1, columns: layout.length })
333
415
  ),
334
416
  });
335
417
 
336
- // TARGETS
337
-
338
- /** Where the pane `paneId` is now, as a target. */
339
- export const originOf = (layout: Layout, paneId: string): Option.Option<Target> =>
418
+ export const originOf = (
419
+ layout: Layout,
420
+ paneId: string
421
+ ): Option.Option<Target> =>
340
422
  Option.map(placeOf(layout, paneId), ({ column, row }) =>
341
- Target.Into({ columnId: column.id, index: row }),
423
+ Target.Into({ columnId: column.id, index: row })
342
424
  );
343
425
 
344
- /** What dropping the pane `paneId` at `target` asks of the layout: none where it would
345
- * change nothing (where it is, or a target whose column is gone). */
346
426
  export const requestOf = (
347
427
  layout: Layout,
348
428
  paneId: string,
349
- target: Target,
429
+ target: Target
350
430
  ): Option.Option<OutMessage> =>
351
431
  Option.liftPredicate(
352
432
  Target.match(target, {
353
433
  Into: ({ columnId, index }) =>
354
434
  OutMessage.MovedPane({ paneId, toColumnId: columnId, toIndex: index }),
355
- Gap: ({ maybeBeforeColumnId }) => OutMessage.PulledOutPane({ paneId, maybeBeforeColumnId }),
435
+ Gap: ({ maybeBeforeColumnId }) =>
436
+ OutMessage.PulledOutPane({ paneId, maybeBeforeColumnId }),
356
437
  }),
357
- (request) => isChange(layout, request),
438
+ (request) => isChange(layout, request)
358
439
  );
359
440
 
360
- /** Where the pane `paneId` would be once dropped at `target`, in words. */
361
- export const landingWords = (layout: Layout, paneId: string, target: Target): string =>
441
+ export const landingWords = (
442
+ layout: Layout,
443
+ paneId: string,
444
+ target: Target
445
+ ): string =>
362
446
  Option.match(requestOf(layout, paneId, target), {
363
447
  onNone: () => WHERE_IT_WAS,
364
448
  onSome: (request) =>
365
449
  Option.getOrElse(
366
450
  whereWords(apply(layout, request), Subject.Pane({ paneId })),
367
- () => WHERE_IT_WAS,
451
+ () => WHERE_IT_WAS
368
452
  ),
369
453
  });
370
454
 
371
- /** The column a target sits in or before (the last, for the gap after it), which a keyboard
372
- * step scrolls to. */
373
- export const columnOfTarget = (layout: Layout, target: Target): Option.Option<string> =>
455
+ export const columnOfTarget = (
456
+ layout: Layout,
457
+ target: Target
458
+ ): Option.Option<string> =>
374
459
  Target.match(target, {
375
460
  Into: ({ columnId }) => Option.some(columnId),
376
461
  Gap: ({ maybeBeforeColumnId }) =>
377
- Option.orElse(maybeBeforeColumnId, () => Option.map(Array.last(layout), ({ id }) => id)),
462
+ Option.orElse(maybeBeforeColumnId, () =>
463
+ Option.map(Array.last(layout), ({ id }) => id)
464
+ ),
378
465
  });
379
466
 
380
467
  export const Step = Schema.Literals(["Up", "Down", "Left", "Right"]);
468
+
381
469
  export type Step = typeof Step.Type;
382
470
 
383
- // A keyboard step reads the layout as a row of stops: the gap before each column (even), then
384
- // the column itself (odd), and the gap after the last.
385
471
  const stopOf = (layout: Layout, target: Target): Option.Option<number> =>
386
472
  Target.match(target, {
387
- Into: ({ columnId }) => Option.map(columnIndexOf(layout, columnId), (column) => column * 2 + 1),
473
+ Into: ({ columnId }) =>
474
+ Option.map(columnIndexOf(layout, columnId), (column) => column * 2 + 1),
388
475
  Gap: ({ maybeBeforeColumnId }) =>
389
476
  Option.map(gapIndex(layout, maybeBeforeColumnId), (gap) => gap * 2),
390
477
  });
391
478
 
392
- /** Whether the column `target` names (into it, or the gap before it) is still in `layout`. */
393
479
  export const isTargetPresent = (layout: Layout, target: Target): boolean =>
394
480
  Option.isSome(stopOf(layout, target));
395
481
 
396
- const targetAtStop = (layout: Layout, paneId: string, stop: number, row: number): Target =>
482
+ const roomIn = (column: Column, paneId: string): number =>
483
+ othersIn(column, paneId).length;
484
+
485
+ const targetAtStop = (
486
+ layout: Layout,
487
+ paneId: string,
488
+ stop: number,
489
+ row: number
490
+ ): Target =>
397
491
  stop % 2 === 0
398
492
  ? Target.Gap({
399
- maybeBeforeColumnId: Option.map(Array.get(layout, stop / 2), ({ id }) => id),
493
+ maybeBeforeColumnId: Option.map(
494
+ Array.get(layout, stop / 2),
495
+ ({ id }) => id
496
+ ),
400
497
  })
401
498
  : Option.match(Array.get(layout, (stop - 1) / 2), {
402
499
  onNone: () => Target.Gap({ maybeBeforeColumnId: Option.none() }),
403
500
  onSome: (column) =>
404
- Target.Into({ columnId: column.id, index: Math.min(row, roomIn(column, paneId)) }),
501
+ Target.Into({
502
+ columnId: column.id,
503
+ index: Math.min(row, roomIn(column, paneId)),
504
+ }),
405
505
  });
406
506
 
407
- /** The last index the pane `paneId` may take among a column's panes. */
408
- const roomIn = (column: Column, paneId: string): number => othersIn(column, paneId).length;
409
-
410
- const stepOnce = (layout: Layout, paneId: string, target: Target, step: Step): Target => {
411
- const row = Target.match(target, { Into: ({ index }) => index, Gap: () => 0 });
507
+ const stepOnce = (
508
+ layout: Layout,
509
+ paneId: string,
510
+ target: Target,
511
+ step: Step
512
+ ): Target => {
513
+ const row = Target.match(target, {
514
+ Into: ({ index }) => index,
515
+ Gap: () => 0,
516
+ });
412
517
 
413
518
  return Option.match(stopOf(layout, target), {
414
519
  onNone: () => target,
415
520
  onSome: (stop) =>
416
521
  Match.value(step).pipe(
417
522
  Match.withReturnType<Target>(),
418
- Match.when("Left", () => targetAtStop(layout, paneId, Math.max(stop - 1, 0), row)),
523
+ Match.when("Left", () =>
524
+ targetAtStop(layout, paneId, Math.max(stop - 1, 0), row)
525
+ ),
419
526
  Match.when("Right", () =>
420
- targetAtStop(layout, paneId, Math.min(stop + 1, layout.length * 2), row),
527
+ targetAtStop(
528
+ layout,
529
+ paneId,
530
+ Math.min(stop + 1, layout.length * 2),
531
+ row
532
+ )
421
533
  ),
422
534
  Match.whenOr("Up", "Down", () =>
423
535
  Target.match(target, {
@@ -434,157 +546,200 @@ const stepOnce = (layout: Layout, paneId: string, target: Target, step: Step): T
434
546
  }),
435
547
  }),
436
548
  }),
437
- }),
549
+ })
438
550
  ),
439
- Match.exhaustive,
551
+ Match.exhaustive
440
552
  ),
441
553
  });
442
554
  };
443
555
 
444
- /** A keyboard step of the pane `paneId` from `target`: left and right cross from a column to
445
- * the gap beside it and on to the next column, up and down move among a column's panes. A
446
- * stop where the drop would change nothing is passed over, but for where the pane started;
447
- * with nothing further that way, it stays (where the pane started, if the target's column has
448
- * gone). */
556
+ const presentOrOrigin = (
557
+ layout: Layout,
558
+ target: Target,
559
+ origin: Option.Option<Target>
560
+ ): Target =>
561
+ isTargetPresent(layout, target)
562
+ ? target
563
+ : Option.getOrElse(origin, () => target);
564
+
565
+ const isChangingDropOrOrigin = (
566
+ layout: Layout,
567
+ paneId: string,
568
+ origin: Option.Option<Target>,
569
+ candidate: Target
570
+ ): boolean =>
571
+ Option.isSome(requestOf(layout, paneId, candidate)) ||
572
+ Option.exists(origin, (place) => Equal.equals(place, candidate));
573
+
574
+ const stopAndRowCount = (layout: Layout): number =>
575
+ layout.length * 2 + Array.length(placesOf(layout));
576
+
449
577
  export const steppedTarget = (
450
578
  layout: Layout,
451
579
  paneId: string,
452
580
  target: Target,
453
- step: Step,
581
+ step: Step
454
582
  ): Target => {
455
583
  const origin = originOf(layout, paneId);
456
- // a target whose column has gone steps from where the pane started instead
457
- const start = isTargetPresent(layout, target) ? target : Option.getOrElse(origin, () => target);
458
- const isStop = (candidate: Target): boolean =>
459
- Option.isSome(requestOf(layout, paneId, candidate)) ||
460
- Option.exists(origin, (place) => Equal.equals(place, candidate));
461
- const walk = (from: Target, left: number): Target => {
584
+ const start = presentOrOrigin(layout, target, origin);
585
+
586
+ const walkPastUnchangingStops = (from: Target, left: number): Target => {
462
587
  const next = stepOnce(layout, paneId, from, step);
588
+
463
589
  if (Equal.equals(next, from) || left === 0) {
464
590
  return start;
465
591
  }
466
- return isStop(next) ? next : walk(next, left - 1);
592
+
593
+ return isChangingDropOrOrigin(layout, paneId, origin, next)
594
+ ? next
595
+ : walkPastUnchangingStops(next, left - 1);
467
596
  };
468
- return walk(start, layout.length * 2 + Array.length(placesOf(layout)));
597
+
598
+ return walkPastUnchangingStops(start, stopAndRowCount(layout));
469
599
  };
470
600
 
471
- /** The share of a column's width, from either edge, where a pointer over it means the gap
472
- * beside it (a column of its own) rather than a place among its panes, up to `EDGE_MAX`
473
- * pixels. */
474
- const EDGE_SHARE = 0.2;
475
- const EDGE_MAX = 48;
601
+ const GAP_BAND_SHARE = 0.2;
602
+ const GAP_BAND_MAX = 48;
476
603
 
477
- /** A column as a pointer reads it: its id and its left and right edges. */
478
604
  export type ColumnBox = Readonly<{
479
605
  id: string;
480
606
  left: number;
481
607
  right: number;
482
608
  }>;
483
609
 
484
- const gapBefore = (columns: ReadonlyArray<ColumnBox>, gap: number): Target =>
485
- Target.Gap({ maybeBeforeColumnId: Option.map(Array.get(columns, gap), ({ id }) => id) });
610
+ const gapBefore = (columns: readonly ColumnBox[], gap: number): Target =>
611
+ Target.Gap({
612
+ maybeBeforeColumnId: Option.map(Array.get(columns, gap), ({ id }) => id),
613
+ });
614
+
615
+ const gapBandOf = ({ left, right }: ColumnBox): number =>
616
+ Math.min((right - left) * GAP_BAND_SHARE, GAP_BAND_MAX);
617
+
618
+ const columnUnderOrRightOf = (
619
+ columns: readonly ColumnBox[],
620
+ clientX: number
621
+ ): Option.Option<Readonly<{ index: number; box: ColumnBox }>> =>
622
+ pipe(
623
+ Array.findFirstIndex(columns, ({ right }) => clientX <= right),
624
+ Option.flatMap((index) =>
625
+ Option.map(Array.get(columns, index), (box) => ({ index, box }))
626
+ )
627
+ );
628
+
629
+ const slotsAbove = (slotMiddles: readonly number[], clientY: number): number =>
630
+ Array.filter(slotMiddles, (middle) => middle < clientY).length;
486
631
 
487
- /** Where a pointer at (`clientX`, `clientY`) over a reel whose columns sit at `columns`, left
488
- * to right, would drop a pane. Over a column's edge band (or over a gap, or past the last
489
- * column) it lands in that gap, as a column of its own; over the rest of a column it lands
490
- * among that column's other panes, after each whose middle is above the pointer.
491
- * `slotMiddlesOf` gives the vertical middles of a column's slots, by its index, the held
492
- * pane's left out: it is asked for the column the pointer is over alone, and only when the
493
- * pointer is among its panes. */
494
632
  export const targetAtPoint = (
495
- columns: ReadonlyArray<ColumnBox>,
633
+ columns: readonly ColumnBox[],
496
634
  clientX: number,
497
635
  clientY: number,
498
- slotMiddlesOf: (index: number) => ReadonlyArray<number>,
636
+ slotMiddlesOf: (index: number) => readonly number[]
499
637
  ): Target =>
500
- pipe(
501
- Array.findFirstIndex(columns, ({ right }) => clientX <= right),
502
- Option.flatMap((index) => Option.map(Array.get(columns, index), (box) => ({ index, box }))),
503
- Option.match({
504
- onNone: () => gapBefore(columns, columns.length),
505
- onSome: ({ index, box: { id, left, right } }) => {
506
- const band = Math.min((right - left) * EDGE_SHARE, EDGE_MAX);
507
- if (clientX < left + band) {
508
- return gapBefore(columns, index);
509
- } else if (clientX > right - band) {
510
- return gapBefore(columns, index + 1);
511
- } else {
512
- return Target.Into({
513
- columnId: id,
514
- index: Array.filter(slotMiddlesOf(index), (middle) => middle < clientY).length,
515
- });
516
- }
517
- },
518
- }),
519
- );
638
+ Option.match(columnUnderOrRightOf(columns, clientX), {
639
+ onNone: () => gapBefore(columns, columns.length),
640
+ onSome: ({ index, box }) => {
641
+ const band = gapBandOf(box);
642
+
643
+ if (clientX < box.left + band) {
644
+ return gapBefore(columns, index);
645
+ } else if (clientX > box.right - band) {
646
+ return gapBefore(columns, index + 1);
647
+ }
520
648
 
521
- // RESIZE
649
+ return Target.Into({
650
+ columnId: box.id,
651
+ index: slotsAbove(slotMiddlesOf(index), clientY),
652
+ });
653
+ },
654
+ });
522
655
 
523
- /** The narrowest a column's width goes by a splitter, and the least share of its column a pane
524
- * keeps: the stylesheet keeps both on screen at their minimums, so these only keep a stored
525
- * size from reaching nothing. */
526
- const WIDTH_FLOOR = 0.1;
527
- const SHARE_FLOOR = 0.05;
656
+ const COLUMN_WIDTH_FLOOR = 0.1;
657
+ const PANE_SHARE_FLOOR = 0.05;
528
658
  const PRECISION = 10_000;
529
659
 
530
- const rounded = (value: number): number => Math.round(value * PRECISION) / PRECISION;
660
+ const rounded = (value: number): number =>
661
+ Math.round(value * PRECISION) / PRECISION;
662
+
663
+ const precisionFinerThan = (floor: number): number =>
664
+ Math.max(PRECISION, 10 ** Math.ceil(-Math.log10(floor)));
531
665
 
532
- /** `weight`, at least `floor`, to four decimals, or, where a step of four decimals is more than
533
- * `floor` (a column whose weights total under a five-hundredth, or two panes that small), to
534
- * the first power of ten no more than it, so that it never rounds to nothing. A weight too
535
- * large or a floor too small to scale by that power is left as it is. */
536
666
  const roundedOver = (weight: number, floor: number): number => {
537
- const precision = Math.max(PRECISION, 10 ** Math.ceil(-Math.log10(floor)));
667
+ const precision = precisionFinerThan(floor);
538
668
  const scaled = weight * precision;
539
- return globalThis.Number.isFinite(scaled) ? Math.round(scaled) / precision : weight;
669
+ const isScalable = globalThis.Number.isFinite(scaled);
670
+
671
+ return isScalable ? Math.round(scaled) / precision : weight;
672
+ };
673
+
674
+ const resizedColumn = (
675
+ layout: Layout,
676
+ columnId: string,
677
+ share: number
678
+ ): Option.Option<Resize> =>
679
+ Option.map(columnOf(layout, columnId), (column) =>
680
+ OutMessage.ResizedColumn({
681
+ columnId,
682
+ width: rounded(
683
+ Number.clamp(column.width + share, {
684
+ minimum: COLUMN_WIDTH_FLOOR,
685
+ maximum: 1,
686
+ })
687
+ ),
688
+ })
689
+ );
690
+
691
+ const paneWeightFloor = (total: number, pair: number): number =>
692
+ Math.max(
693
+ Math.min(total * PANE_SHARE_FLOOR, pair / 2),
694
+ globalThis.Number.MIN_VALUE
695
+ );
696
+
697
+ const sharedPair = (
698
+ column: Column,
699
+ above: Pane,
700
+ below: Pane,
701
+ share: number
702
+ ): Resize => {
703
+ const total = Number.sumAll(Array.map(column.panes, ({ weight }) => weight));
704
+ const pair = above.weight + below.weight;
705
+ const floor = paneWeightFloor(total, pair);
706
+
707
+ const nextAbove = Number.clamp(above.weight + share * total, {
708
+ minimum: floor,
709
+ maximum: pair - floor,
710
+ });
711
+
712
+ const isShareMovable = globalThis.Number.isFinite(total);
713
+
714
+ return OutMessage.ResizedPanes({
715
+ columnId: column.id,
716
+ weights: isShareMovable
717
+ ? {
718
+ [above.id]: roundedOver(nextAbove, floor),
719
+ [below.id]: roundedOver(pair - nextAbove, floor),
720
+ }
721
+ : { [above.id]: above.weight, [below.id]: below.weight },
722
+ });
540
723
  };
541
724
 
542
- /** What moving `splitter` by `share` asks of the layout, from the sizes the layout holds (not
543
- * the sizes printed, which the stylesheet may hold at a minimum): a width splitter adds
544
- * `share` to its column's width; a pane splitter moves `share` of its column's height from
545
- * the pane below it to the pane above, leaving each a weight above nothing however small the
546
- * column. None when what it sizes is gone. */
547
725
  export const resizeOf = (
548
726
  layout: Layout,
549
727
  splitter: Splitter,
550
- share: number,
728
+ share: number
551
729
  ): Option.Option<Resize> =>
552
730
  Splitter.match(splitter, {
553
- Width: ({ columnId }) =>
554
- Option.map(columnOf(layout, columnId), (column) =>
555
- OutMessage.ResizedColumn({
556
- columnId,
557
- width: rounded(Number.clamp(column.width + share, { minimum: WIDTH_FLOOR, maximum: 1 })),
558
- }),
559
- ),
731
+ Width: ({ columnId }) => resizedColumn(layout, columnId, share),
560
732
  Split: ({ abovePaneId }) =>
561
- Option.flatMap(placeOf(layout, abovePaneId), ({ column, row, pane: above }) =>
562
- Option.map(Array.get(column.panes, row + 1), (below) => {
563
- const total = Number.sumAll(Array.map(column.panes, ({ weight }) => weight));
564
- const pair = above.weight + below.weight;
565
- // a column so small that a twentieth of it is no number keeps the least there is
566
- const floor = Math.max(
567
- Math.min(total * SHARE_FLOOR, pair / 2),
568
- globalThis.Number.MIN_VALUE,
569
- );
570
- const nextAbove = Number.clamp(above.weight + share * total, {
571
- minimum: floor,
572
- maximum: pair - floor,
573
- });
574
- return OutMessage.ResizedPanes({
575
- columnId: column.id,
576
- weights: globalThis.Number.isFinite(total)
577
- ? {
578
- [above.id]: roundedOver(nextAbove, floor),
579
- [below.id]: roundedOver(pair - nextAbove, floor),
580
- }
581
- : // weights that total past the largest number have no share to move: they stay
582
- { [above.id]: above.weight, [below.id]: below.weight },
583
- });
584
- }),
733
+ Option.flatMap(
734
+ placeOf(layout, abovePaneId),
735
+ ({ column, row, pane: above }) =>
736
+ Option.map(Array.get(column.panes, row + 1), (below) =>
737
+ sharedPair(column, above, below, share)
738
+ )
585
739
  ),
586
740
  });
587
741
 
588
- /** Whether what `splitter` sizes is still in `layout`. */
589
- export const isSplitterPresent = (layout: Layout, splitter: Splitter): boolean =>
590
- Option.isSome(resizeOf(layout, splitter, 0));
742
+ export const isSplitterPresent = (
743
+ layout: Layout,
744
+ splitter: Splitter
745
+ ): boolean => Option.isSome(resizeOf(layout, splitter, 0));