@gjermundgaraba-designs/pixel-paper 0.22.2 → 0.24.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 (176) hide show
  1. package/DESIGN.md +18 -17
  2. package/dist/src/adapters/mermaid.d.ts.map +1 -1
  3. package/dist/src/adapters/mermaid.js +0 -24
  4. package/dist/src/announcer/announcer.d.ts.map +1 -1
  5. package/dist/src/announcer/announcer.js +12 -12
  6. package/dist/src/board/board.d.ts +0 -10
  7. package/dist/src/board/board.d.ts.map +1 -1
  8. package/dist/src/board/board.js +36 -64
  9. package/dist/src/board/index.d.ts +2 -1
  10. package/dist/src/board/index.d.ts.map +1 -1
  11. package/dist/src/board/index.js +2 -1
  12. package/dist/src/button/button.d.ts +1 -1
  13. package/dist/src/button/button.d.ts.map +1 -1
  14. package/dist/src/commandPalette/commandPalette.d.ts.map +1 -1
  15. package/dist/src/commandPalette/commandPalette.js +78 -83
  16. package/dist/src/commandPalette/keys.d.ts +2 -2
  17. package/dist/src/commandPalette/keys.d.ts.map +1 -1
  18. package/dist/src/commandPalette/keys.js +2 -4
  19. package/dist/src/commandPalette/match.d.ts.map +1 -1
  20. package/dist/src/commandPalette/match.js +2 -2
  21. package/dist/src/confirmDialog/confirmDialog.d.ts.map +1 -1
  22. package/dist/src/confirmDialog/confirmDialog.js +1 -2
  23. package/dist/src/copyButton/copyButton.d.ts +0 -5
  24. package/dist/src/copyButton/copyButton.d.ts.map +1 -1
  25. package/dist/src/copyButton/copyButton.js +2 -2
  26. package/dist/src/crumbs/crumbs.d.ts +0 -2
  27. package/dist/src/crumbs/crumbs.d.ts.map +1 -1
  28. package/dist/src/crumbs/crumbs.js +2 -2
  29. package/dist/src/dialog/dialog.d.ts +2 -0
  30. package/dist/src/dialog/dialog.d.ts.map +1 -1
  31. package/dist/src/dialog/dialog.js +3 -2
  32. package/dist/src/drag/drag.d.ts +28 -0
  33. package/dist/src/drag/drag.d.ts.map +1 -1
  34. package/dist/src/drag/drag.js +39 -17
  35. package/dist/src/editableTitle/editableTitle.d.ts +4 -4
  36. package/dist/src/field/field.d.ts +7 -1
  37. package/dist/src/field/field.d.ts.map +1 -1
  38. package/dist/src/field/field.js +14 -6
  39. package/dist/src/fieldset/fieldset.d.ts.map +1 -1
  40. package/dist/src/fieldset/fieldset.js +2 -4
  41. package/dist/src/fileTree/fileTree.d.ts.map +1 -1
  42. package/dist/src/fileTree/fileTree.js +16 -16
  43. package/dist/src/iconButton/iconButton.d.ts +6 -1
  44. package/dist/src/iconButton/iconButton.d.ts.map +1 -1
  45. package/dist/src/iconButton/iconButton.js +7 -2
  46. package/dist/src/inlineInput/inlineInput.d.ts +4 -0
  47. package/dist/src/inlineInput/inlineInput.d.ts.map +1 -1
  48. package/dist/src/inlineInput/inlineInput.js +9 -6
  49. package/dist/src/keyHelp/index.d.ts +1 -1
  50. package/dist/src/keyHelp/index.d.ts.map +1 -1
  51. package/dist/src/keyHelp/index.js +1 -1
  52. package/dist/src/keyHelp/keyHelp.d.ts +1 -3
  53. package/dist/src/keyHelp/keyHelp.d.ts.map +1 -1
  54. package/dist/src/keyHelp/keyHelp.js +3 -6
  55. package/dist/src/keyHint/keyLabel.d.ts +2 -0
  56. package/dist/src/keyHint/keyLabel.d.ts.map +1 -1
  57. package/dist/src/keyHint/keyLabel.js +3 -2
  58. package/dist/src/lineDiff/diff.d.ts +6 -3
  59. package/dist/src/lineDiff/diff.d.ts.map +1 -1
  60. package/dist/src/lineDiff/diff.js +40 -28
  61. package/dist/src/lineDiff/patch.d.ts.map +1 -1
  62. package/dist/src/lineDiff/patch.js +18 -13
  63. package/dist/src/linkState/linkState.d.ts.map +1 -1
  64. package/dist/src/linkState/linkState.js +1 -7
  65. package/dist/src/menu/slip.js +2 -2
  66. package/dist/src/meter/meter.d.ts.map +1 -1
  67. package/dist/src/meter/meter.js +22 -17
  68. package/dist/src/notice/notice.d.ts +2 -0
  69. package/dist/src/notice/notice.d.ts.map +1 -1
  70. package/dist/src/notice/notice.js +2 -1
  71. package/dist/src/panel/panel.d.ts +3 -0
  72. package/dist/src/panel/panel.d.ts.map +1 -1
  73. package/dist/src/panel/panel.js +2 -1
  74. package/dist/src/passwordField/passwordField.d.ts.map +1 -1
  75. package/dist/src/passwordField/passwordField.js +3 -7
  76. package/dist/src/rail/index.d.ts +1 -1
  77. package/dist/src/rail/index.d.ts.map +1 -1
  78. package/dist/src/rail/index.js +1 -1
  79. package/dist/src/rail/rail.d.ts +95 -20
  80. package/dist/src/rail/rail.d.ts.map +1 -1
  81. package/dist/src/rail/rail.js +103 -46
  82. package/dist/src/reel/layout.d.ts +9 -5
  83. package/dist/src/reel/layout.d.ts.map +1 -1
  84. package/dist/src/reel/layout.js +11 -5
  85. package/dist/src/reel/reel.d.ts.map +1 -1
  86. package/dist/src/reel/reel.js +122 -68
  87. package/dist/src/scheme/scheme.d.ts +1 -1
  88. package/dist/src/scheme/scheme.d.ts.map +1 -1
  89. package/dist/src/segmented/segmented.d.ts +0 -3
  90. package/dist/src/segmented/segmented.d.ts.map +1 -1
  91. package/dist/src/segmented/segmented.js +1 -6
  92. package/dist/src/selectField/selectField.d.ts.map +1 -1
  93. package/dist/src/selectField/selectField.js +3 -10
  94. package/dist/src/sortable/index.d.ts +1 -1
  95. package/dist/src/sortable/index.d.ts.map +1 -1
  96. package/dist/src/sortable/index.js +1 -1
  97. package/dist/src/sortable/sortable.d.ts +39 -40
  98. package/dist/src/sortable/sortable.d.ts.map +1 -1
  99. package/dist/src/sortable/sortable.js +14 -31
  100. package/dist/src/stack/stack.d.ts +1 -1
  101. package/dist/src/stack/stack.d.ts.map +1 -1
  102. package/dist/src/stack/stack.js +1 -1
  103. package/dist/src/tabs/tabs.d.ts +1 -1
  104. package/dist/src/tabs/tabs.d.ts.map +1 -1
  105. package/dist/src/tabs/tabs.js +1 -1
  106. package/dist/src/textareaField/textareaField.d.ts.map +1 -1
  107. package/dist/src/textareaField/textareaField.js +3 -7
  108. package/dist/src/time/time.d.ts.map +1 -1
  109. package/dist/src/time/time.js +4 -2
  110. package/dist/src/tips/index.d.ts +1 -1
  111. package/dist/src/tips/index.d.ts.map +1 -1
  112. package/dist/src/tips/tips.d.ts +30 -1
  113. package/dist/src/tips/tips.d.ts.map +1 -1
  114. package/dist/src/tips/tips.js +53 -31
  115. package/dist/src/toast/index.d.ts +1 -1
  116. package/dist/src/toast/index.d.ts.map +1 -1
  117. package/dist/src/toast/toast.d.ts +5 -5
  118. package/dist/src/toast/toast.d.ts.map +1 -1
  119. package/dist/src/toast/toast.js +1 -6
  120. package/dist/src/toolbar/toolbar.d.ts +0 -3
  121. package/dist/src/toolbar/toolbar.d.ts.map +1 -1
  122. package/dist/src/toolbar/toolbar.js +1 -2
  123. package/package.json +1 -1
  124. package/src/adapters/mermaid.ts +0 -24
  125. package/src/announcer/announcer.ts +13 -17
  126. package/src/board/board.ts +32 -80
  127. package/src/board/index.ts +1 -1
  128. package/src/button/button.ts +1 -1
  129. package/src/commandPalette/commandPalette.ts +21 -38
  130. package/src/commandPalette/keys.ts +2 -4
  131. package/src/commandPalette/match.ts +3 -3
  132. package/src/confirmDialog/confirmDialog.ts +5 -3
  133. package/src/copyButton/copyButton.ts +2 -5
  134. package/src/crumbs/crumbs.ts +2 -4
  135. package/src/dialog/dialog.ts +3 -2
  136. package/src/drag/drag.ts +54 -5
  137. package/src/field/field.ts +29 -7
  138. package/src/fieldset/fieldset.ts +2 -4
  139. package/src/fileTree/fileTree.ts +10 -12
  140. package/src/iconButton/iconButton.ts +19 -2
  141. package/src/inlineInput/inlineInput.ts +11 -2
  142. package/src/keyHelp/index.ts +0 -1
  143. package/src/keyHelp/keyHelp.ts +3 -9
  144. package/src/keyHint/keyLabel.ts +5 -2
  145. package/src/lineDiff/diff.ts +70 -54
  146. package/src/lineDiff/patch.ts +27 -14
  147. package/src/linkState/linkState.ts +1 -8
  148. package/src/menu/slip.ts +2 -2
  149. package/src/meter/meter.ts +25 -15
  150. package/src/notice/notice.ts +2 -1
  151. package/src/panel/panel.ts +5 -0
  152. package/src/passwordField/passwordField.ts +3 -7
  153. package/src/pixel-paper.css +200 -134
  154. package/src/rail/index.ts +2 -0
  155. package/src/rail/rail.ts +124 -44
  156. package/src/reel/layout.ts +14 -7
  157. package/src/reel/reel.ts +132 -63
  158. package/src/scheme/scheme.ts +1 -1
  159. package/src/segmented/segmented.ts +1 -9
  160. package/src/selectField/selectField.ts +3 -10
  161. package/src/sortable/index.ts +0 -1
  162. package/src/sortable/sortable.ts +35 -54
  163. package/src/stack/stack.ts +1 -1
  164. package/src/tabs/tabs.ts +1 -1
  165. package/src/textareaField/textareaField.ts +3 -7
  166. package/src/time/time.ts +6 -7
  167. package/src/tips/index.ts +1 -1
  168. package/src/tips/tips.ts +71 -35
  169. package/src/toast/index.ts +1 -1
  170. package/src/toast/toast.ts +2 -8
  171. package/src/tokens.css +7 -0
  172. package/src/toolbar/toolbar.ts +0 -5
  173. package/dist/src/inlineInput/inline.d.ts +0 -6
  174. package/dist/src/inlineInput/inline.d.ts.map +0 -1
  175. package/dist/src/inlineInput/inline.js +0 -7
  176. package/src/inlineInput/inline.ts +0 -13
@@ -6,7 +6,8 @@ import * as Glyph from "../glyph/glyph.js";
6
6
  * change, in ink. `Quiet`: tinted, nothing wrong. */
7
7
  export const Tone = Schema.Literals(["Warn", "Error", "Ok", "Quiet"]);
8
8
  const toneGlyph = (tone) => __foldkitBrandViewResult((Match.value(tone).pipe(Match.withReturnType(), Match.whenOr("Warn", "Error", () => __foldkitBrandViewResult(("bang"), "@gjermundgaraba-designs/pixel-paper/src/notice/notice.js#anonymous")), Match.when("Ok", () => __foldkitBrandViewResult(("check"), "@gjermundgaraba-designs/pixel-paper/src/notice/notice.js#anonymous~2")), Match.when("Quiet", () => __foldkitBrandViewResult(("info"), "@gjermundgaraba-designs/pixel-paper/src/notice/notice.js#anonymous~3")), Match.exhaustive)), "@gjermundgaraba-designs/pixel-paper/src/notice/notice.js#toneGlyph");
9
- const TONE_CLASS = {
9
+ /** The class a tone adds to a notice's, a toast's or a glyph box's own. */
10
+ export const TONE_CLASS = {
10
11
  Warn: "",
11
12
  Error: " error",
12
13
  Ok: " ok",
@@ -21,6 +21,9 @@ export type ViewConfig = Readonly<{
21
21
  /** Small Buttons and IconButtons at the title bar's right end, after the meta. On the ink
22
22
  * bar they print in paper, flat, and ring in their own colour inside their edge. */
23
23
  actions?: ReadonlyArray<Html | string>;
24
+ /** A strip on the head tint between the title bar and the body, for a field that picks what
25
+ * the body shows (an area over its tasks). Its labels print in on-head. */
26
+ shelf?: ReadonlyArray<Html | string>;
24
27
  body: ReadonlyArray<Html | string>;
25
28
  /** A ruled foot under the body: a note line, then actions pushed right. */
26
29
  foot?: ReadonlyArray<Html | string>;
@@ -1 +1 @@
1
- {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../../src/panel/panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMtD,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC;;;;kCAI8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd;;oCAEgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;2DACuD;IACvD,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACpC,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;yFACqF;IACrF,OAAO,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACvC,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACnC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACpC,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,iDAAiD;AACjD,eAAO,MAAM,OAAO,OAAQ,MAAM,KAAG,MAAuB,CAAC;AAE7D;8FAC8F;AAC9F,eAAO,MAAM,IAAI,GAAI,OAAO,UAAU,UAAU,KAAK,WAAW,CAAC,OAAO,CAAC,KAAG,IAkC3E,CAAC"}
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../../src/panel/panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMtD,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC;;;;kCAI8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd;;oCAEgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;2DACuD;IACvD,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACpC,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;yFACqF;IACrF,OAAO,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACvC;gFAC4E;IAC5E,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACrC,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACnC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACpC,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,iDAAiD;AACjD,eAAO,MAAM,OAAO,OAAQ,MAAM,KAAG,MAAuB,CAAC;AAE7D;8FAC8F;AAC9F,eAAO,MAAM,IAAI,GAAI,OAAO,UAAU,UAAU,KAAK,WAAW,CAAC,OAAO,CAAC,KAAG,IAoC3E,CAAC"}
@@ -5,7 +5,7 @@ export const titleId = (id) => __foldkitBrandViewResult((`${id}-title`), "@gjerm
5
5
  /** The unit of the system: paper in a 2px ink box on a 5px print shadow, under a title bar. A
6
6
  * region landmark (`<section>`) named by its `h2` title, or by `name`, keyed by its `id`. */
7
7
  export const view = (config, h) => {
8
- const { id, title, name, lead = [], meta, actions = [], body, foot = [], isFlush = false, } = config;
8
+ const { id, title, name, lead = [], meta, actions = [], shelf = [], body, foot = [], isFlush = false, } = config;
9
9
  return __foldkitBrandViewResult((h.keyed("section")(id, [
10
10
  h.Id(id),
11
11
  name === undefined ? h.AriaLabelledBy(titleId(id)) : h.AriaLabel(name),
@@ -17,6 +17,7 @@ export const view = (config, h) => {
17
17
  ...(meta === undefined ? [] : [h.span([h.Class("meta")], [meta])]),
18
18
  ...slotView("span", "panel-acts", actions, h),
19
19
  ]),
20
+ ...slotView("div", "panel-shelf", shelf, h),
20
21
  ...(isFlush ? body : [h.div([h.Class("panel-body")], body)]),
21
22
  ...slotView("div", "panel-foot", foot, h),
22
23
  ])), "@gjermundgaraba-designs/pixel-paper/src/panel/panel.js#view");
@@ -1 +1 @@
1
- {"version":3,"file":"passwordField.d.ts","sourceRoot":"","sources":["../../../src/passwordField/passwordField.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAStD,wEAAwE;AACxE,eAAO,MAAM,QAAQ,2CAAmC,CAAC;AACzD,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;AAiB5C,gEAAgE;AAChE,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC;gDAC4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,aAAa,EAAE,OAAO,CAAC;IACvB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;uCAEmC;IACnC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,yFAAyF;IACzF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;iDAC6C;IAC7C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gEAAgE;IAChE,YAAY,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAAC;IACnD;uDACmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH;;;;mEAImE;AACnE,eAAO,MAAM,IAAI,GAAI,OAAO,UAAU,UAAU,CAAC,OAAO,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC,KAAG,IAiFpF,CAAC"}
1
+ {"version":3,"file":"passwordField.d.ts","sourceRoot":"","sources":["../../../src/passwordField/passwordField.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAStD,wEAAwE;AACxE,eAAO,MAAM,QAAQ,2CAAmC,CAAC;AACzD,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;AAiB5C,gEAAgE;AAChE,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC;gDAC4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,aAAa,EAAE,OAAO,CAAC;IACvB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;uCAEmC;IACnC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,yFAAyF;IACzF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;iDAC6C;IAC7C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gEAAgE;IAChE,YAAY,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAAC;IACnD;uDACmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH;;;;mEAImE;AACnE,eAAO,MAAM,IAAI,GAAI,OAAO,UAAU,UAAU,CAAC,OAAO,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC,KAAG,IA6EpF,CAAC"}
@@ -2,7 +2,7 @@ import { brandViewResult as __foldkitBrandViewResult } from 'foldkit/brand'
2
2
  import { Input as UiInput } from "@foldkit/ui";
3
3
  import { Match, Schema } from "effect";
4
4
  import { pressedAttribute } from "../button/button.js";
5
- import { describedByError, errorView } from "../field/field.js";
5
+ import { controlAttributes, errorView, helpView } from "../field/field.js";
6
6
  import * as IconButton from "../iconButton/iconButton.js";
7
7
  import * as Meter from "../meter/meter.js";
8
8
  // STRENGTH
@@ -27,12 +27,10 @@ export const view = (config, h) => {
27
27
  toView: (groups) => __foldkitBrandViewResult((h.div([h.Class("field boxed")], [
28
28
  h.label(groups.label, [label]),
29
29
  h.span([h.Class("password")], [
30
- // NOTE: @foldkit/ui gap: Input has no required option, so the wrapper says it.
31
30
  h.input([
32
31
  ...groups.input,
33
32
  h.Autocomplete(autocomplete),
34
- ...describedByError(id, error, help !== undefined, h),
35
- ...(isRequired ? [h.AriaRequired(true)] : []),
33
+ ...controlAttributes(id, error, help, isRequired, h),
36
34
  ]),
37
35
  IconButton.view({
38
36
  glyph: isShown ? "eye-off" : "eye",
@@ -58,9 +56,7 @@ export const view = (config, h) => {
58
56
  h.span([h.Class("age")], [strengthWord(strength)]),
59
57
  ]),
60
58
  ]),
61
- ...(help === undefined
62
- ? []
63
- : [h.p([...groups.description, h.Class("field-help")], [help])]),
59
+ ...helpView(help, groups.description, h),
64
60
  ])), "@gjermundgaraba-designs/pixel-paper/src/passwordField/passwordField.js#toView"),
65
61
  }, h)), "@gjermundgaraba-designs/pixel-paper/src/passwordField/passwordField.js#view");
66
62
  };
@@ -1,3 +1,3 @@
1
- export { FollowRailDrawer, HideRailDrawer, Message, Model, OutMessage, ShowRailDrawer, close, id, init, isOpen, subscriptions, update, view, } from "./rail.ts";
1
+ export { FocusRailToggle, FollowRailDrawer, HideRailDrawer, Message, Model, OutMessage, ShowRailDrawer, close, id, init, isOpen, subscriptions, toggle, update, view, } from "./rail.ts";
2
2
  export type { InitConfig, ViewInputs } from "./rail.ts";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,KAAK,EACL,UAAU,EACV,cAAc,EACd,KAAK,EACL,EAAE,EACF,IAAI,EACJ,MAAM,EACN,aAAa,EACb,MAAM,EACN,IAAI,GACL,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,KAAK,EACL,UAAU,EACV,cAAc,EACd,KAAK,EACL,EAAE,EACF,IAAI,EACJ,MAAM,EACN,aAAa,EACb,MAAM,EACN,MAAM,EACN,IAAI,GACL,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
@@ -1 +1 @@
1
- export { FollowRailDrawer, HideRailDrawer, Message, Model, OutMessage, ShowRailDrawer, close, id, init, isOpen, subscriptions, update, view, } from "./rail.js";
1
+ export { FocusRailToggle, FollowRailDrawer, HideRailDrawer, Message, Model, OutMessage, ShowRailDrawer, close, id, init, isOpen, subscriptions, toggle, update, view, } from "./rail.js";
@@ -4,9 +4,10 @@ import type { Html } from "foldkit/html";
4
4
  import * as Mount from "foldkit/mount";
5
5
  import * as Subscription from "foldkit/subscription";
6
6
  import type * as Update from "foldkit/update";
7
+ import * as Button from "../button/button.ts";
7
8
  /** Schema for a rail: whether it is open as a drawer (at 900px and under; wider, it is always
8
- * in the page and this stays false), and its splitter while a pointer drags it. Its width is
9
- * the parent's. */
9
+ * in the page and this stays false), and its splitter while a pointer drags it. Its width,
10
+ * and whether the reader hid it, are the parent's. */
10
11
  export declare const Model: Schema.Struct<{
11
12
  readonly id: Schema.String;
12
13
  readonly isOpen: Schema.Boolean;
@@ -23,6 +24,7 @@ export type Model = typeof Model.Type;
23
24
  * the window growing past 900px while it is open, where the rail is back in the page. */
24
25
  export declare const Message: import("foldkit/message").MessageUnion<{
25
26
  readonly ClickedOpen: {};
27
+ readonly ClickedToggle: {};
26
28
  readonly PressedSplitter: {
27
29
  pointerId: Schema.Number;
28
30
  clientX: Schema.Number;
@@ -45,15 +47,19 @@ export declare const Message: import("foldkit/message").MessageUnion<{
45
47
  readonly WidenedPastDrawer: {};
46
48
  readonly CompletedShowRailDrawer: {};
47
49
  readonly CompletedHideRailDrawer: {};
50
+ readonly CompletedFocusRailToggle: {};
48
51
  }>;
49
52
  export type Message = typeof Message.Type;
50
53
  /** What a rail asks of its parent. `ResizedRail`: its splitter was let go, or stepped by a
51
54
  * key, at `width` pixels, within the rail's bounds; the parent keeps it (per client) and
52
- * passes it back as the view's `maybeWidth`. */
55
+ * passes it back as the view's `maybeWidth`. `ToggledRail`: its toggle was pressed; the
56
+ * parent flips whether it keeps the rail hidden (per client) and passes it back as the view's
57
+ * `isHidden`. */
53
58
  export declare const OutMessage: import("foldkit/message").MessageUnion<{
54
59
  readonly ResizedRail: {
55
60
  width: Schema.Number;
56
61
  };
62
+ readonly ToggledRail: {};
57
63
  }>;
58
64
  export type OutMessage = typeof OutMessage.Type;
59
65
  /** Configuration for creating a rail with `init`. The `id` is the rail's, unique in the
@@ -63,12 +69,25 @@ export type InitConfig = Readonly<{
63
69
  }>;
64
70
  /** Creates a rail, closed, its splitter at rest. */
65
71
  export declare const init: (config: InitConfig) => Model;
72
+ /** The rail's widths, in pixels: before the reader sizes it (as the stylesheet's `--rail` has
73
+ * it, which the splitter says as its value until a width is given), the least its panels
74
+ * still fit in (a tree's row keeps a glyph, a dot and a few words of its title), the most
75
+ * (which leaves the deck at least 421px of a 901px window, the narrowest one the rail stands
76
+ * in, more than a phone has), and what an arrow on its splitter moves it. The bounds and the
77
+ * step are the component's, not tokens: the splitter says them as its values. */
78
+ export declare const WIDTH: {
79
+ start: number;
80
+ least: number;
81
+ most: number;
82
+ step: number;
83
+ };
66
84
  /** The rail's id, unique in the document. */
67
85
  export declare const id: (model: Model) => string;
68
86
  /** Whether the rail is open as a drawer: a parent pauses its own page keys while it is. */
69
87
  export declare const isOpen: (model: Model) => boolean;
70
88
  /** The drawer's first Tab stop past its head: a control the keyboard reaches, so a tree's
71
- * items other than its one stop (`tabindex="-1"`) are passed over. */
89
+ * items other than its one stop (`tabindex="-1"`) are passed over, and so is the toggle,
90
+ * which the drawer does not print. */
72
91
  export declare const firstTabStop: (rail: Element) => Option.Option<HTMLElement>;
73
92
  /** Opens the rail as a drawer over the page and puts focus on its first control past its
74
93
  * head. */
@@ -85,11 +104,25 @@ export declare const HideRailDrawer: Command.CommandDefinitionWithArgs<"HideRail
85
104
  }, Effect.Effect<{
86
105
  readonly _tag: "CompletedHideRailDrawer";
87
106
  }, never, never>>;
107
+ /** Puts focus on the rail's toggle once the rail has folded or unfolded, if focus was in the
108
+ * rail or on its splitter: folding takes away every control in it but the toggle, which
109
+ * brings it back, and the splitter with them. Focus anywhere else stays where it is. */
110
+ export declare const FocusRailToggle: Command.CommandDefinitionWithArgs<"FocusRailToggle", {
111
+ railId: Schema.String;
112
+ toggleId: Schema.String;
113
+ }, Effect.Effect<{
114
+ readonly _tag: "CompletedFocusRailToggle";
115
+ }, never, never>>;
88
116
  type UpdateReturn = Update.Return<Model, Message>;
89
117
  /** Closes the rail's drawer, focus back on its button. */
90
118
  export declare const close: (model: Model) => UpdateReturn;
119
+ /** Folds or unfolds the rail from a key of the parent's: the parent flips whether it keeps the
120
+ * rail hidden, as it does for `ToggledRail`, and folds this in, which moves focus in the rail
121
+ * onto the toggle. */
122
+ export declare const toggle: (model: Model) => UpdateReturn;
91
123
  /** Processes a rail Message and returns the next Model, Commands and OutMessage: a splitter let
92
- * go where it changes the width, or stepped by a key, asks for the width. */
124
+ * go where it changes the width, or stepped by a key, asks for the width, and the toggle asks
125
+ * to fold or unfold the rail. */
93
126
  export declare const update: (model: Model, message: Message) => Readonly<{
94
127
  model: {
95
128
  readonly id: string;
@@ -111,8 +144,12 @@ export declare const update: (model: Model, message: Message) => Readonly<{
111
144
  readonly _tag: "ClickedClose";
112
145
  } | {
113
146
  readonly _tag: "ClickedOpen";
147
+ } | {
148
+ readonly _tag: "ClickedToggle";
114
149
  } | {
115
150
  readonly _tag: "ClosedDrawer";
151
+ } | {
152
+ readonly _tag: "CompletedFocusRailToggle";
116
153
  } | {
117
154
  readonly _tag: "CompletedHideRailDrawer";
118
155
  } | {
@@ -137,9 +174,13 @@ export declare const update: (model: Model, message: Message) => Readonly<{
137
174
  outMessage?: {
138
175
  readonly _tag: "ResizedRail";
139
176
  readonly width: number;
177
+ } | {
178
+ readonly _tag: "ToggledRail";
140
179
  };
141
180
  }>;
142
181
  type DrawerMessage = typeof Message.ClosedDrawer.Type | typeof Message.BlurredDrawer.Type | typeof Message.WidenedPastDrawer.Type;
182
+ /** The width at and under which the rail is a drawer, as the stylesheet has it. */
183
+ export declare const DRAWER_QUERY = "(max-width: 900px)";
143
184
  /** The window crossing the drawer's width: growing past it while the drawer is open closes
144
185
  * the drawer, since the rail is back in the page there. */
145
186
  export declare const widthChangeMessage: (isDrawerWidth: boolean, isDrawerOpen: boolean) => Option.Option<DrawerMessage>;
@@ -183,8 +224,12 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
183
224
  readonly _tag: "ClickedClose";
184
225
  } | {
185
226
  readonly _tag: "ClickedOpen";
227
+ } | {
228
+ readonly _tag: "ClickedToggle";
186
229
  } | {
187
230
  readonly _tag: "ClosedDrawer";
231
+ } | {
232
+ readonly _tag: "CompletedFocusRailToggle";
188
233
  } | {
189
234
  readonly _tag: "CompletedHideRailDrawer";
190
235
  } | {
@@ -229,8 +274,12 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
229
274
  readonly _tag: "ClickedClose";
230
275
  } | {
231
276
  readonly _tag: "ClickedOpen";
277
+ } | {
278
+ readonly _tag: "ClickedToggle";
232
279
  } | {
233
280
  readonly _tag: "ClosedDrawer";
281
+ } | {
282
+ readonly _tag: "CompletedFocusRailToggle";
234
283
  } | {
235
284
  readonly _tag: "CompletedHideRailDrawer";
236
285
  } | {
@@ -266,20 +315,28 @@ export type ViewInputs = Readonly<{
266
315
  * (for this client: another reader's window is not this one's); none for the stylesheet's.
267
316
  * A width out of the rail's bounds prints at the nearer bound. */
268
317
  maybeWidth: Option.Option<number>;
269
- /** The rail's panels: a tree, places, filters. A function because a Submodel's viewInputs
270
- * may hold functions only at the top level, and Foldkit runs this one in the parent's
271
- * boundary, so the handlers in what it returns dispatch the parent's Messages. */
272
- toAsideView: () => ReadonlyArray<Html>;
318
+ /** Whether the reader folded the rail to its first panel's title bar, as the parent keeps it
319
+ * from `ToggledRail` (for this client, as it keeps the width). The drawer ignores it. */
320
+ isHidden: boolean;
321
+ /** The parent's key for the toggle, which its tip prints after its label; the parent binds
322
+ * it to `toggle`. */
323
+ maybeToggleKeyHint: Option.Option<Button.KeyHintConfig>;
324
+ /** The rail's panels: a tree, places, filters, given the toggle that folds the rail to put in
325
+ * its first panel's `lead`. A function because a Submodel's viewInputs may hold functions
326
+ * only at the top level, and Foldkit runs this one in the parent's boundary, so the
327
+ * handlers in what it returns dispatch the parent's Messages. */
328
+ toAsideView: (toggle: Html) => ReadonlyArray<Html>;
273
329
  /** The page beside the rail, `main.deck#main` or `main.bench#main`, given the button that
274
330
  * opens the drawer to print first in it. A function because it receives that button, and
275
331
  * runs in the parent's boundary like `toAsideView`. */
276
332
  toDeckView: (openButton: Html) => Html;
277
333
  }>;
278
334
  /**
279
- * A column of panels beside the deck, fixed under the top bar and scrolling itself:
280
- * `div.railed >` the deck, then `aside.rail[popover="auto"][aria-label]`, then its splitter,
281
- * `div.rail-resize[role="separator"]`, on its right edge. One element serves both layouts, so
282
- * nothing in it renders twice or loses its state. At 900px and under it leaves the page, and
335
+ * A column of panels beside the deck, fixed under the top bar: `div.railed >` the deck, then
336
+ * `aside.rail[popover="auto"][aria-label]`, then its splitter, `div.rail-resize[role="separator"]`,
337
+ * on its right edge. What comes before its last panel keeps its height, and the last panel
338
+ * shrinks to the room left, its bar and foot staying while its body scrolls. One element
339
+ * serves both layouts, so nothing in it renders twice or loses its state. At 900px and under it leaves the page, and
283
340
  * `span.rail-open > button.btn.small` at the top of the deck opens the same element as a drawer
284
341
  * over a veil, its head (the name and a close glyph) showing. Opening focuses its first
285
342
  * control; Escape, a press on the veil, the close glyph, focus leaving or the window growing
@@ -287,9 +344,16 @@ export type ViewInputs = Readonly<{
287
344
  *
288
345
  * Its splitter sizes it, by a pointer (previewed as it moves) or the side arrows, within its
289
346
  * bounds, and reports the width as `ResizedRail` for the parent to keep and pass back as
290
- * `maybeWidth`, which the view sets as `--rail` on `div.railed`, so the page's padding and the
291
- * rail's width follow it. The drawer keeps its own width. Lift `subscriptions(keyPrefix)` into
292
- * the application's, or a dragged splitter follows nothing.
347
+ * `maybeWidth`, which the view sets as `--railed-width` on `div.railed`, so the page's padding
348
+ * and the rail's width follow it (without one, `--rail`). The drawer keeps its own width. Lift
349
+ * `subscriptions(keyPrefix)` into the application's, or a dragged splitter follows nothing.
350
+ *
351
+ * Its toggle, `span.rail-toggle > button.iconbtn.quiet[aria-expanded]` ("Hide <label>"), comes
352
+ * to `toAsideView` to print as the first panel's `lead`. Pressed, it reports `ToggledRail` for
353
+ * the parent to keep and pass back as `isHidden`: `div.railed.folded` then stands the first
354
+ * panel's title bar on end on the ground (the toggle at its top, "Show <label>"), the rest of
355
+ * the rail and its splitter gone, and the deck takes the width. Focus in the rail lands on the
356
+ * toggle. The drawer, at 900px and under, prints neither the toggle nor the fold.
293
357
  *
294
358
  * Its state is its own, not `@foldkit/ui`'s Popover: that panel is placed by Floating UI and
295
359
  * rendered only while open, and this one is always in the page, placed by the stylesheet, and
@@ -314,8 +378,12 @@ export declare const view: import("foldkit/submodel").View<{
314
378
  readonly _tag: "ClickedClose";
315
379
  } | {
316
380
  readonly _tag: "ClickedOpen";
381
+ } | {
382
+ readonly _tag: "ClickedToggle";
317
383
  } | {
318
384
  readonly _tag: "ClosedDrawer";
385
+ } | {
386
+ readonly _tag: "CompletedFocusRailToggle";
319
387
  } | {
320
388
  readonly _tag: "CompletedHideRailDrawer";
321
389
  } | {
@@ -344,10 +412,17 @@ export declare const view: import("foldkit/submodel").View<{
344
412
  * (for this client: another reader's window is not this one's); none for the stylesheet's.
345
413
  * A width out of the rail's bounds prints at the nearer bound. */
346
414
  maybeWidth: Option.Option<number>;
347
- /** The rail's panels: a tree, places, filters. A function because a Submodel's viewInputs
348
- * may hold functions only at the top level, and Foldkit runs this one in the parent's
349
- * boundary, so the handlers in what it returns dispatch the parent's Messages. */
350
- toAsideView: () => ReadonlyArray<Html>;
415
+ /** Whether the reader folded the rail to its first panel's title bar, as the parent keeps it
416
+ * from `ToggledRail` (for this client, as it keeps the width). The drawer ignores it. */
417
+ isHidden: boolean;
418
+ /** The parent's key for the toggle, which its tip prints after its label; the parent binds
419
+ * it to `toggle`. */
420
+ maybeToggleKeyHint: Option.Option<Button.KeyHintConfig>;
421
+ /** The rail's panels: a tree, places, filters, given the toggle that folds the rail to put in
422
+ * its first panel's `lead`. A function because a Submodel's viewInputs may hold functions
423
+ * only at the top level, and Foldkit runs this one in the parent's boundary, so the
424
+ * handlers in what it returns dispatch the parent's Messages. */
425
+ toAsideView: (toggle: Html) => ReadonlyArray<Html>;
351
426
  /** The page beside the rail, `main.deck#main` or `main.bench#main`, given the button that
352
427
  * opens the drawer to print first in it. A function because it receives that button, and
353
428
  * runs in the parent's boundary like `toAsideView`. */
@@ -1 +1 @@
1
- {"version":3,"file":"rail.d.ts","sourceRoot":"","sources":["../../../src/rail/rail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rail.d.ts","sourceRoot":"","sources":["../../../src/rail/rail.ts"],"names":[],"mappings":"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"}