@smwb/ui-solid 2.0.0 → 2.1.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 (207) hide show
  1. package/README.md +115 -0
  2. package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
  3. package/dist/assets/styles/less/components/avatar/avatar.entry.css +1 -1
  4. package/dist/assets/styles/less/components/breadcrumbs/breadcrumbs.entry.css +1 -1
  5. package/dist/assets/styles/less/components/button/button.entry.css +1 -1
  6. package/dist/assets/styles/less/components/buttonGroup/buttonGroup.entry.css +1 -1
  7. package/dist/assets/styles/less/components/dagView/dagView.entry.css +1 -1
  8. package/dist/assets/styles/less/components/meter/meter.entry.css +1 -1
  9. package/dist/assets/styles/less/components/screenDivider/screenDivider.entry.css +1 -1
  10. package/dist/assets/styles/less/components/sheet/sheet.entry.css +1 -1
  11. package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -1
  12. package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -1
  13. package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
  14. package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
  15. package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
  16. package/dist/assets/styles/less/tokens.entry.css +1 -1
  17. package/dist/components/dataDisplay/avatar/avatar.d.ts +5 -2
  18. package/dist/components/dataDisplay/avatar/avatar.js +9 -9
  19. package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
  20. package/dist/components/dataDisplay/chart/chart.d.ts +16 -8
  21. package/dist/components/dataDisplay/chart/chartFull.d.ts +14 -0
  22. package/dist/components/dataDisplay/chart/core.d.ts +19 -0
  23. package/dist/components/dataDisplay/chart/index.d.ts +1 -1
  24. package/dist/components/dataDisplay/dagView/dagView.d.ts +4 -0
  25. package/dist/components/dataDisplay/dagView/dagView.js +124 -123
  26. package/dist/components/dataDisplay/dagView/dagView.js.map +1 -1
  27. package/dist/components/dataDisplay/dagView/index.d.ts +1 -1
  28. package/dist/components/dataDisplay/meter/index.d.ts +1 -1
  29. package/dist/components/dataDisplay/meter/meter.d.ts +14 -0
  30. package/dist/components/dataDisplay/meter/meter.js +32 -30
  31. package/dist/components/dataDisplay/meter/meter.js.map +1 -1
  32. package/dist/components/dataDisplay/statusDot/index.d.ts +1 -1
  33. package/dist/components/dataDisplay/statusDot/statusDot.d.ts +10 -1
  34. package/dist/components/dataDisplay/statusDot/statusDot.js +20 -11
  35. package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -1
  36. package/dist/components/dataDisplay/treeView/treeView.d.ts +18 -2
  37. package/dist/components/dataDisplay/treeView/treeView.js +140 -121
  38. package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
  39. package/dist/components/inputs/button/button.d.ts +7 -0
  40. package/dist/components/inputs/button/button.js +57 -51
  41. package/dist/components/inputs/button/button.js.map +1 -1
  42. package/dist/components/inputs/toggle/toggle.d.ts +6 -0
  43. package/dist/components/inputs/toggle/toggle.js +23 -23
  44. package/dist/components/inputs/toggle/toggle.js.map +1 -1
  45. package/dist/components/layout/appLayout/appLayout.d.ts +6 -1
  46. package/dist/components/layout/appLayout/appLayout.js +49 -42
  47. package/dist/components/layout/appLayout/appLayout.js.map +1 -1
  48. package/dist/components/layout/screenDivider/screenDivider.d.ts +12 -0
  49. package/dist/components/layout/screenDivider/screenDivider.js +87 -46
  50. package/dist/components/layout/screenDivider/screenDivider.js.map +1 -1
  51. package/dist/components/layout/sheet/sheet.d.ts +11 -0
  52. package/dist/components/layout/sheet/sheet.js +122 -102
  53. package/dist/components/layout/sheet/sheet.js.map +1 -1
  54. package/dist/components/layout/tabGroups/index.d.ts +1 -1
  55. package/dist/components/layout/tabGroups/tabGroups.d.ts +44 -1
  56. package/dist/components/layout/tabGroups/tabGroups.js +500 -460
  57. package/dist/components/layout/tabGroups/tabGroups.js.map +1 -1
  58. package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +16 -0
  59. package/dist/components/layout/tabGroups/tabGroupsFocus.js +102 -70
  60. package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -1
  61. package/dist/components/navigation/appBar/appBar.d.ts +12 -0
  62. package/dist/components/navigation/appBar/appBar.js.map +1 -1
  63. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +9 -0
  64. package/dist/components/navigation/breadcrumbs/breadcrumbs.js +47 -31
  65. package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  66. package/dist/components/navigation/tabs/tab/tab.js +71 -68
  67. package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
  68. package/dist/components/navigation/tabs/tabs.d.ts +11 -0
  69. package/dist/components/navigation/tabs/tabs.js +19 -16
  70. package/dist/components/navigation/tabs/tabs.js.map +1 -1
  71. package/dist/components/navigation/tabs/tabsContext.d.ts +2 -0
  72. package/dist/components/navigation/tabs/tabsContext.js.map +1 -1
  73. package/dist/headless/components/dataDisplay/avatar/avatar.js +9 -9
  74. package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
  75. package/dist/headless/components/dataDisplay/dagView/dagView.js +133 -132
  76. package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -1
  77. package/dist/headless/components/dataDisplay/meter/meter.js +32 -30
  78. package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -1
  79. package/dist/headless/components/dataDisplay/statusDot/statusDot.js +19 -10
  80. package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -1
  81. package/dist/headless/components/dataDisplay/treeView/treeView.js +139 -120
  82. package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
  83. package/dist/headless/components/inputs/button/button.js +57 -51
  84. package/dist/headless/components/inputs/button/button.js.map +1 -1
  85. package/dist/headless/components/inputs/toggle/toggle.js +23 -23
  86. package/dist/headless/components/inputs/toggle/toggle.js.map +1 -1
  87. package/dist/headless/components/layout/appLayout/appLayout.js +52 -45
  88. package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
  89. package/dist/headless/components/layout/screenDivider/screenDivider.js +88 -47
  90. package/dist/headless/components/layout/screenDivider/screenDivider.js.map +1 -1
  91. package/dist/headless/components/layout/sheet/sheet.js +124 -104
  92. package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
  93. package/dist/headless/components/layout/tabGroups/tabGroups.js +500 -460
  94. package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -1
  95. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +102 -70
  96. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -1
  97. package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
  98. package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js +46 -30
  99. package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  100. package/dist/headless/components/navigation/tabs/tab/tab.js +70 -67
  101. package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
  102. package/dist/headless/components/navigation/tabs/tabs.js +19 -16
  103. package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
  104. package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -1
  105. package/dist/headless/primitives/publishHeaderOffset.js +19 -0
  106. package/dist/headless/primitives/publishHeaderOffset.js.map +1 -0
  107. package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx +1 -0
  108. package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
  109. package/dist/headless/source/components/dataDisplay/chart/chart.jsx +14 -12
  110. package/dist/headless/source/components/dataDisplay/chart/chart.jsx.map +1 -1
  111. package/dist/headless/source/components/dataDisplay/chart/chartFull.js +12 -0
  112. package/dist/headless/source/components/dataDisplay/chart/chartFull.js.map +7 -0
  113. package/dist/headless/source/components/dataDisplay/chart/core.js +11 -0
  114. package/dist/headless/source/components/dataDisplay/chart/core.js.map +7 -0
  115. package/dist/headless/source/components/dataDisplay/chart/index.js +1 -1
  116. package/dist/headless/source/components/dataDisplay/chart/index.js.map +1 -1
  117. package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx +2 -1
  118. package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
  119. package/dist/headless/source/components/dataDisplay/dagView/index.js.map +2 -2
  120. package/dist/headless/source/components/dataDisplay/meter/index.js.map +1 -1
  121. package/dist/headless/source/components/dataDisplay/meter/meter.jsx +14 -2
  122. package/dist/headless/source/components/dataDisplay/meter/meter.jsx.map +1 -1
  123. package/dist/headless/source/components/dataDisplay/statusDot/index.js.map +1 -1
  124. package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx +13 -1
  125. package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -1
  126. package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx +16 -3
  127. package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  128. package/dist/headless/source/components/inputs/button/button.jsx +26 -1
  129. package/dist/headless/source/components/inputs/button/button.jsx.map +1 -1
  130. package/dist/headless/source/components/inputs/toggle/toggle.jsx +9 -2
  131. package/dist/headless/source/components/inputs/toggle/toggle.jsx.map +1 -1
  132. package/dist/headless/source/components/layout/appLayout/appLayout.jsx +14 -2
  133. package/dist/headless/source/components/layout/appLayout/appLayout.jsx.map +1 -1
  134. package/dist/headless/source/components/layout/screenDivider/screenDivider.jsx +102 -18
  135. package/dist/headless/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
  136. package/dist/headless/source/components/layout/sheet/sheet.jsx +14 -1
  137. package/dist/headless/source/components/layout/sheet/sheet.jsx.map +1 -1
  138. package/dist/headless/source/components/layout/tabGroups/index.js.map +1 -1
  139. package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx +55 -1
  140. package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx.map +1 -1
  141. package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js +42 -0
  142. package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js.map +2 -2
  143. package/dist/headless/source/components/navigation/appBar/appBar.jsx.map +1 -1
  144. package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx +39 -4
  145. package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
  146. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx +7 -1
  147. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  148. package/dist/headless/source/components/navigation/tabs/tabs.jsx +5 -1
  149. package/dist/headless/source/components/navigation/tabs/tabs.jsx.map +1 -1
  150. package/dist/headless/source/components/navigation/tabs/tabsContext.js.map +2 -2
  151. package/dist/headless/source/index.js +8 -1
  152. package/dist/headless/source/index.js.map +2 -2
  153. package/dist/headless/source/primitives/publishHeaderOffset.js +34 -0
  154. package/dist/headless/source/primitives/publishHeaderOffset.js.map +7 -0
  155. package/dist/index.d.ts +5 -5
  156. package/dist/primitives/publishHeaderOffset.d.ts +7 -0
  157. package/dist/primitives/publishHeaderOffset.js +19 -0
  158. package/dist/primitives/publishHeaderOffset.js.map +1 -0
  159. package/dist/source/components/dataDisplay/avatar/avatar.jsx +1 -0
  160. package/dist/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
  161. package/dist/source/components/dataDisplay/chart/chart.jsx +14 -12
  162. package/dist/source/components/dataDisplay/chart/chart.jsx.map +1 -1
  163. package/dist/source/components/dataDisplay/chart/chartFull.js +12 -0
  164. package/dist/source/components/dataDisplay/chart/chartFull.js.map +7 -0
  165. package/dist/source/components/dataDisplay/chart/core.js +11 -0
  166. package/dist/source/components/dataDisplay/chart/core.js.map +7 -0
  167. package/dist/source/components/dataDisplay/chart/index.js +1 -1
  168. package/dist/source/components/dataDisplay/chart/index.js.map +1 -1
  169. package/dist/source/components/dataDisplay/dagView/dagView.jsx +2 -1
  170. package/dist/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
  171. package/dist/source/components/dataDisplay/dagView/index.js.map +2 -2
  172. package/dist/source/components/dataDisplay/meter/index.js.map +1 -1
  173. package/dist/source/components/dataDisplay/meter/meter.jsx +14 -2
  174. package/dist/source/components/dataDisplay/meter/meter.jsx.map +1 -1
  175. package/dist/source/components/dataDisplay/statusDot/index.js.map +1 -1
  176. package/dist/source/components/dataDisplay/statusDot/statusDot.jsx +13 -1
  177. package/dist/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -1
  178. package/dist/source/components/dataDisplay/treeView/treeView.jsx +16 -3
  179. package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  180. package/dist/source/components/inputs/button/button.jsx +26 -1
  181. package/dist/source/components/inputs/button/button.jsx.map +1 -1
  182. package/dist/source/components/inputs/toggle/toggle.jsx +9 -2
  183. package/dist/source/components/inputs/toggle/toggle.jsx.map +1 -1
  184. package/dist/source/components/layout/appLayout/appLayout.jsx +14 -2
  185. package/dist/source/components/layout/appLayout/appLayout.jsx.map +1 -1
  186. package/dist/source/components/layout/screenDivider/screenDivider.jsx +102 -18
  187. package/dist/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
  188. package/dist/source/components/layout/sheet/sheet.jsx +14 -1
  189. package/dist/source/components/layout/sheet/sheet.jsx.map +1 -1
  190. package/dist/source/components/layout/tabGroups/index.js.map +1 -1
  191. package/dist/source/components/layout/tabGroups/tabGroups.jsx +55 -1
  192. package/dist/source/components/layout/tabGroups/tabGroups.jsx.map +1 -1
  193. package/dist/source/components/layout/tabGroups/tabGroupsFocus.js +42 -0
  194. package/dist/source/components/layout/tabGroups/tabGroupsFocus.js.map +2 -2
  195. package/dist/source/components/navigation/appBar/appBar.jsx.map +1 -1
  196. package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx +39 -4
  197. package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
  198. package/dist/source/components/navigation/tabs/tab/tab.jsx +7 -1
  199. package/dist/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  200. package/dist/source/components/navigation/tabs/tabs.jsx +5 -1
  201. package/dist/source/components/navigation/tabs/tabs.jsx.map +1 -1
  202. package/dist/source/components/navigation/tabs/tabsContext.js.map +2 -2
  203. package/dist/source/index.js +8 -1
  204. package/dist/source/index.js.map +2 -2
  205. package/dist/source/primitives/publishHeaderOffset.js +34 -0
  206. package/dist/source/primitives/publishHeaderOffset.js.map +7 -0
  207. package/package.json +9 -3
@@ -1,20 +1,23 @@
1
- import { createComponent as l, Portal as q, use as _, insert as d, effect as x, className as D, isServer as G, template as f, mergeProps as R, spread as J, setAttribute as g, memo as y, delegateEvents as Q } from "solid-js/web";
1
+ import { createComponent as l, Portal as G, use as L, insert as h, effect as k, style as P, className as T, isServer as J, template as y, mergeProps as I, spread as Q, setAttribute as b, memo as _, delegateEvents as Z } from "solid-js/web";
2
2
  import '../../../assets/styles/less/components/sheet/sheet.entry.css';import '../../../assets/styles/less/tokens.entry.css';/* empty css */
3
3
  /* empty css */
4
- import { mergeProps as B, splitProps as M, createSignal as I, createEffect as K, onCleanup as N, Show as w, on as Z } from "solid-js";
5
- import C from "clsx";
6
- import { createCssTransition as W } from "../../../primitives/createCssTransition.js";
7
- import { isTopOverlayLayer as ee } from "../../../primitives/overlayLayer.js";
8
- import { restoreFocus as te } from "../../../primitives/restoreFocus.js";
9
- import { mergeRefs as re } from "../../../primitives/mergeRefs.js";
10
- import { mergeStyle as ne } from "../../../primitives/mergeStyle.js";
11
- import { ClickAwayListener as oe } from "../../clickAwayListener/clickAwayListener.js";
12
- import { Button as H } from "../../inputs/button/button.js";
13
- import { Icon as P } from "../../base/icon/icon.js";
14
- var ae = /* @__PURE__ */ f("<div class=smwb-sheet__drag-handle data-testid=sheet-drag-handle role=separator tabindex=0><span class=smwb-sheet__drag-handle-bar>"), ie = /* @__PURE__ */ f("<div class=smwb-sheet__header>"), se = /* @__PURE__ */ f("<div class=smwb-sheet__inner>"), le = /* @__PURE__ */ f("<div>"), T = /* @__PURE__ */ f("<div data-smwb-overlay-layer>");
15
- const ce = (m) => m === "bottom" || m === "top";
16
- function de(m) {
17
- const z = B({
4
+ import { mergeProps as K, splitProps as N, createSignal as Y, createEffect as W, onCleanup as U, Show as z, on as ee } from "solid-js";
5
+ import $ from "clsx";
6
+ import { createCssTransition as X } from "../../../primitives/createCssTransition.js";
7
+ import { isTopOverlayLayer as te } from "../../../primitives/overlayLayer.js";
8
+ import { restoreFocus as re } from "../../../primitives/restoreFocus.js";
9
+ import { mergeRefs as ne } from "../../../primitives/mergeRefs.js";
10
+ import { mergeStyle as oe } from "../../../primitives/mergeStyle.js";
11
+ import { ClickAwayListener as ie } from "../../clickAwayListener/clickAwayListener.js";
12
+ import { Button as R } from "../../inputs/button/button.js";
13
+ import { Icon as B } from "../../base/icon/icon.js";
14
+ var ae = /* @__PURE__ */ y("<div class=smwb-sheet__drag-handle data-testid=sheet-drag-handle role=separator tabindex=0><span class=smwb-sheet__drag-handle-bar>"), se = /* @__PURE__ */ y("<div class=smwb-sheet__header>"), le = /* @__PURE__ */ y("<div class=smwb-sheet__inner>"), ce = /* @__PURE__ */ y("<div>"), M = /* @__PURE__ */ y("<div data-smwb-overlay-layer>");
15
+ const de = (c, f) => {
16
+ const e = "changedTouches" in c ? c.changedTouches[0]?.clientY : c.clientY;
17
+ return f != null && e !== void 0 && e < f.getBoundingClientRect().top;
18
+ }, me = (c) => c === "bottom" || c === "top";
19
+ function ue(c) {
20
+ const f = K({
18
21
  size: "60%",
19
22
  withSizeToggle: !0,
20
23
  hideHeaderActions: !1,
@@ -27,9 +30,9 @@ function de(m) {
27
30
  minSize: 80,
28
31
  resizeStep: 24,
29
32
  resizeHandleAriaLabel: "Resize sheet"
30
- }, m), [e, A] = M(z, ["isOpen", "placement", "class", "mode", "size", "variant", "onClose", "withSizeToggle", "hideHeaderActions", "reverseHeaderActions", "closeAriaLabel", "expandAriaLabel", "collapseAriaLabel", "restoreAriaLabel", "resizable", "minSize", "maxSize", "resizeStep", "resizeHandleAriaLabel", "onResize", "style", "handleClose", "handleSizeButton", "children", "ref", "data-testid"]);
31
- let h;
32
- const [c, u] = I(null), s = () => ce(e.placement), S = W({
33
+ }, c), [e, x] = N(f, ["isOpen", "placement", "class", "mode", "size", "variant", "onClose", "withSizeToggle", "hideHeaderActions", "reverseHeaderActions", "closeAriaLabel", "expandAriaLabel", "collapseAriaLabel", "restoreAriaLabel", "resizable", "minSize", "maxSize", "resizeStep", "resizeHandleAriaLabel", "onResize", "style", "handleClose", "handleSizeButton", "children", "ref", "data-testid"]);
34
+ let w;
35
+ const [u, p] = Y(null), s = () => me(e.placement), C = X({
33
36
  in: () => e.isOpen,
34
37
  timeout: {
35
38
  enter: 120,
@@ -39,63 +42,63 @@ function de(m) {
39
42
  enterDone: "smwb-sheet_entered"
40
43
  },
41
44
  appear: !0
42
- }), b = (t) => {
43
- const a = s() ? window.innerHeight : window.innerWidth, r = e.maxSize ?? a;
44
- return Math.max(e.minSize, Math.min(r, t));
45
- }, p = () => {
46
- const t = h?.getBoundingClientRect();
45
+ }), A = (t) => {
46
+ const i = s() ? window.innerHeight : window.innerWidth, n = e.maxSize ?? i;
47
+ return Math.max(e.minSize, Math.min(n, t));
48
+ }, g = () => {
49
+ const t = w?.getBoundingClientRect();
47
50
  return t ? s() ? t.height : t.width : e.minSize;
48
- }, n = (t) => {
49
- const a = b(t);
50
- u(a), e.onResize?.(a);
51
+ }, d = (t) => {
52
+ const i = A(t);
53
+ p(i), e.onResize?.(i);
51
54
  };
52
- let o = null;
53
- const U = (t) => {
54
- t.preventDefault(), o = {
55
+ let r = null;
56
+ const o = (t) => {
57
+ t.preventDefault(), r = {
55
58
  start: s() ? t.clientY : t.clientX,
56
- size: p()
59
+ size: g()
57
60
  };
58
61
  try {
59
62
  t.currentTarget.setPointerCapture?.(t.pointerId);
60
63
  } catch {
61
64
  }
62
- }, X = (t) => {
63
- if (!o) return;
64
- const r = (s() ? t.clientY : t.clientX) - o.start, i = e.placement === "bottom" || e.placement === "right" ? -r : r;
65
- n(o.size + i);
66
- }, L = (t) => {
67
- o = null, t.currentTarget.hasPointerCapture?.(t.pointerId) && t.currentTarget.releasePointerCapture?.(t.pointerId);
68
- }, Y = (t) => {
69
- const a = c() ?? p(), r = e.maxSize ?? (s() ? window.innerHeight : window.innerWidth), i = e.placement === "bottom" ? "ArrowUp" : e.placement === "top" ? "ArrowDown" : e.placement === "left" ? "ArrowRight" : "ArrowLeft", v = e.placement === "bottom" ? "ArrowDown" : e.placement === "top" ? "ArrowUp" : e.placement === "left" ? "ArrowLeft" : "ArrowRight";
70
- t.key === i ? (t.preventDefault(), n(a + e.resizeStep)) : t.key === v ? (t.preventDefault(), n(a - e.resizeStep)) : t.key === "Home" ? (t.preventDefault(), n(e.minSize)) : t.key === "End" && (t.preventDefault(), n(r));
65
+ }, v = (t) => {
66
+ if (!r) return;
67
+ const n = (s() ? t.clientY : t.clientX) - r.start, a = e.placement === "bottom" || e.placement === "right" ? -n : n;
68
+ d(r.size + a);
69
+ }, m = (t) => {
70
+ r = null, t.currentTarget.hasPointerCapture?.(t.pointerId) && t.currentTarget.releasePointerCapture?.(t.pointerId);
71
+ }, F = (t) => {
72
+ const i = u() ?? g(), n = e.maxSize ?? (s() ? window.innerHeight : window.innerWidth), a = e.placement === "bottom" ? "ArrowUp" : e.placement === "top" ? "ArrowDown" : e.placement === "left" ? "ArrowRight" : "ArrowLeft", S = e.placement === "bottom" ? "ArrowDown" : e.placement === "top" ? "ArrowUp" : e.placement === "left" ? "ArrowLeft" : "ArrowRight";
73
+ t.key === a ? (t.preventDefault(), d(i + e.resizeStep)) : t.key === S ? (t.preventDefault(), d(i - e.resizeStep)) : t.key === "Home" ? (t.preventDefault(), d(e.minSize)) : t.key === "End" && (t.preventDefault(), d(n));
71
74
  };
72
- K(Z(() => e.isOpen, (t) => {
75
+ W(ee(() => e.isOpen, (t) => {
73
76
  if (!t) {
74
- u(null);
77
+ p(null);
75
78
  return;
76
79
  }
77
- const a = h, r = a?.contains(document.activeElement) ? null : document.activeElement;
78
- a?.focus(), N(() => te(r, a));
80
+ const i = w, n = i?.contains(document.activeElement) ? null : document.activeElement;
81
+ i?.focus(), U(() => re(n, i));
79
82
  }));
80
- const F = () => !e.hideHeaderActions && (!!e.onClose || e.withSizeToggle), V = () => {
83
+ const V = () => !e.hideHeaderActions && (!!e.onClose || e.withSizeToggle), j = () => {
81
84
  const t = [];
82
- return e.withSizeToggle && t.push(l(H, {
85
+ return e.withSizeToggle && t.push(l(R, {
83
86
  variant: "outlined",
84
87
  size: "small",
85
88
  get onClick() {
86
89
  return e.handleSizeButton;
87
90
  },
88
91
  get "aria-label"() {
89
- return y(() => e.mode === "expanded")() ? e.collapseAriaLabel : y(() => e.mode === "small")() ? e.restoreAriaLabel : e.expandAriaLabel;
92
+ return _(() => e.mode === "expanded")() ? e.collapseAriaLabel : _(() => e.mode === "small")() ? e.restoreAriaLabel : e.expandAriaLabel;
90
93
  },
91
94
  get children() {
92
- return l(P, {
95
+ return l(B, {
93
96
  get name() {
94
97
  return e.mode === "expanded" ? "close_fullscreen" : "open_in_full";
95
98
  }
96
99
  });
97
100
  }
98
- })), e.onClose && t.push(l(H, {
101
+ })), e.onClose && t.push(l(R, {
99
102
  variant: "outlined",
100
103
  size: "small",
101
104
  get onClick() {
@@ -105,14 +108,14 @@ function de(m) {
105
108
  return e.closeAriaLabel;
106
109
  },
107
110
  get children() {
108
- return l(P, {
111
+ return l(B, {
109
112
  name: "close"
110
113
  });
111
114
  }
112
115
  })), e.reverseHeaderActions && t.reverse(), t;
113
- }, j = () => {
114
- if (e.resizable && c() !== null) {
115
- const t = `${c()}px`;
116
+ }, q = () => {
117
+ if (e.resizable && u() !== null) {
118
+ const t = `${u()}px`;
116
119
  return {
117
120
  ...s() ? {
118
121
  height: t
@@ -125,8 +128,8 @@ function de(m) {
125
128
  return {};
126
129
  };
127
130
  return (() => {
128
- var t = le(), a = re(e.ref, (r) => h = r);
129
- return typeof a == "function" && _(a, t), J(t, R(A, {
131
+ var t = ce(), i = ne(e.ref, (n) => w = n);
132
+ return typeof i == "function" && L(i, t), Q(t, I(x, {
130
133
  get "data-testid"() {
131
134
  return e["data-testid"] ?? "sheet";
132
135
  },
@@ -136,62 +139,62 @@ function de(m) {
136
139
  return e.variant === "modal" || void 0;
137
140
  },
138
141
  get class() {
139
- return C("smwb-sheet", e.class, `smwb-sheet_${e.variant}`, `smwb-${e.placement}`, S.classes(), {
142
+ return $("smwb-sheet", e.class, `smwb-sheet_${e.variant}`, `smwb-${e.placement}`, C.classes(), {
140
143
  "smwb-expanded": e.mode === "expanded",
141
144
  "smwb-small": e.mode === "small",
142
145
  "smwb-sheet_resizable": e.resizable
143
146
  });
144
147
  },
145
148
  get style() {
146
- return ne({
149
+ return oe({
147
150
  "--sizeProp": e.size,
148
- ...j()
151
+ ...q()
149
152
  }, e.style);
150
153
  }
151
- }), !1, !0), d(t, l(w, {
154
+ }), !1, !0), h(t, l(z, {
152
155
  get when() {
153
156
  return e.resizable;
154
157
  },
155
158
  get children() {
156
- var r = ae();
157
- return r.$$keydown = Y, r.addEventListener("pointercancel", L), r.$$pointerup = L, r.$$pointermove = X, r.$$pointerdown = U, x((i) => {
158
- var v = s() ? "horizontal" : "vertical", $ = e.resizeHandleAriaLabel, k = e.minSize, O = Math.round(e.maxSize ?? (s() ? window.innerHeight : window.innerWidth)), E = Math.round(c() ?? p());
159
- return v !== i.e && g(r, "aria-orientation", i.e = v), $ !== i.t && g(r, "aria-label", i.t = $), k !== i.a && g(r, "aria-valuemin", i.a = k), O !== i.o && g(r, "aria-valuemax", i.o = O), E !== i.i && g(r, "aria-valuenow", i.i = E), i;
159
+ var n = ae();
160
+ return n.$$keydown = F, n.addEventListener("pointercancel", m), n.$$pointerup = m, n.$$pointermove = v, n.$$pointerdown = o, k((a) => {
161
+ var S = s() ? "horizontal" : "vertical", O = e.resizeHandleAriaLabel, E = e.minSize, D = Math.round(e.maxSize ?? (s() ? window.innerHeight : window.innerWidth)), H = Math.round(u() ?? g());
162
+ return S !== a.e && b(n, "aria-orientation", a.e = S), O !== a.t && b(n, "aria-label", a.t = O), E !== a.a && b(n, "aria-valuemin", a.a = E), D !== a.o && b(n, "aria-valuemax", a.o = D), H !== a.i && b(n, "aria-valuenow", a.i = H), a;
160
163
  }, {
161
164
  e: void 0,
162
165
  t: void 0,
163
166
  a: void 0,
164
167
  o: void 0,
165
168
  i: void 0
166
- }), r;
169
+ }), n;
167
170
  }
168
- }), null), d(t, l(w, {
171
+ }), null), h(t, l(z, {
169
172
  get when() {
170
- return F();
173
+ return V();
171
174
  },
172
175
  get children() {
173
- var r = ie();
174
- return d(r, V), r;
176
+ var n = se();
177
+ return h(n, j), n;
175
178
  }
176
- }), null), d(t, l(w, {
179
+ }), null), h(t, l(z, {
177
180
  get when() {
178
- return y(() => !!e.isOpen)() && e.mode !== "small";
181
+ return _(() => !!e.isOpen)() && e.mode !== "small";
179
182
  },
180
183
  get children() {
181
- var r = se();
182
- return d(r, () => e.children), r;
184
+ var n = le();
185
+ return h(n, () => e.children), n;
183
186
  }
184
187
  }), null), t;
185
188
  })();
186
189
  }
187
- function _e(m) {
188
- const z = B({
190
+ function _e(c) {
191
+ const f = K({
189
192
  variant: "default",
190
193
  placement: "bottom",
191
194
  closeOnEsc: !0
192
- }, m), [e, A] = M(z, ["isOpen", "onClose", "variant", "children", "placement", "disableOutsideClick", "closeOnEsc", "ref"]), [h, c] = I(null);
193
- let u;
194
- const s = W({
195
+ }, c), [e, x] = N(f, ["isOpen", "onClose", "variant", "children", "placement", "disableOutsideClick", "closeOnEsc", "offsetTop", "ref"]), [w, u] = Y(null);
196
+ let p;
197
+ const s = X({
195
198
  in: () => e.isOpen,
196
199
  timeout: {
197
200
  enter: 70,
@@ -202,21 +205,26 @@ function _e(m) {
202
205
  },
203
206
  appear: !0
204
207
  });
205
- K(() => {
208
+ W(() => {
206
209
  if (!e.isOpen || !e.closeOnEsc || !e.onClose) return;
207
- const n = (o) => {
208
- o.key === "Escape" && !o.defaultPrevented && ee(u) && e.onClose?.();
210
+ const r = (o) => {
211
+ o.key === "Escape" && !o.defaultPrevented && te(p) && e.onClose?.();
209
212
  };
210
- document.addEventListener("keydown", n), N(() => document.removeEventListener("keydown", n));
213
+ document.addEventListener("keydown", r), U(() => document.removeEventListener("keydown", r));
211
214
  });
212
- const S = () => {
213
- c((n) => n === "expanded" ? "small" : n === null ? "expanded" : null);
214
- }, b = () => {
215
- e.onClose?.(), c(null);
216
- }, p = () => l(de, R(A, {
217
- ref(n) {
215
+ const C = () => {
216
+ u((r) => r === "expanded" ? "small" : r === null ? "expanded" : null);
217
+ }, A = () => {
218
+ e.onClose?.(), u(null);
219
+ }, g = () => {
220
+ const r = e.offsetTop;
221
+ return r === void 0 ? void 0 : {
222
+ "--smui-sheet-offset-top": typeof r == "number" ? `${r}px` : r
223
+ };
224
+ }, d = () => l(ue, I(x, {
225
+ ref(r) {
218
226
  var o = e.ref;
219
- typeof o == "function" ? o(n) : e.ref = n;
227
+ typeof o == "function" ? o(r) : e.ref = r;
220
228
  },
221
229
  get isOpen() {
222
230
  return e.isOpen;
@@ -224,10 +232,10 @@ function _e(m) {
224
232
  get onClose() {
225
233
  return e.onClose;
226
234
  },
227
- handleSizeButton: S,
228
- handleClose: b,
235
+ handleSizeButton: C,
236
+ handleClose: A,
229
237
  get mode() {
230
- return h();
238
+ return w();
231
239
  },
232
240
  get placement() {
233
241
  return e.placement;
@@ -239,34 +247,46 @@ function _e(m) {
239
247
  return e.children;
240
248
  }
241
249
  }));
242
- return l(w, {
250
+ return l(z, {
243
251
  get when() {
244
252
  return s.mounted();
245
253
  },
246
254
  get children() {
247
- return l(q, {
255
+ return l(G, {
248
256
  get mount() {
249
- return G ? void 0 : document.body;
257
+ return J ? void 0 : document.body;
250
258
  },
251
259
  get children() {
252
- return l(w, {
260
+ return l(z, {
253
261
  get when() {
254
262
  return e.variant === "default";
255
263
  },
256
264
  get fallback() {
257
265
  return (() => {
258
- var n = T();
259
- return _((o) => u = o, n), d(n, l(oe, {
260
- onClickAway: () => !e.disableOutsideClick && b(),
266
+ var r = M();
267
+ return L((o) => p = o, r), h(r, l(ie, {
268
+ onClickAway: (o) => !e.disableOutsideClick && !de(o, p) && A(),
261
269
  get children() {
262
- return p();
270
+ return d();
263
271
  }
264
- })), x(() => D(n, C("smwb-sheet__overlay", "smwb-dark", `smwb-${e.placement}`, `smwb-sheet_${e.variant}`, s.classes()))), n;
272
+ })), k((o) => {
273
+ var v = g(), m = $("smwb-sheet__overlay", "smwb-dark", `smwb-${e.placement}`, `smwb-sheet_${e.variant}`, s.classes());
274
+ return o.e = P(r, v, o.e), m !== o.t && T(r, o.t = m), o;
275
+ }, {
276
+ e: void 0,
277
+ t: void 0
278
+ }), r;
265
279
  })();
266
280
  },
267
281
  get children() {
268
- var n = T();
269
- return _((o) => u = o, n), d(n, p), x(() => D(n, C(e.disableOutsideClick ? "smwb-sheet__overlay" : "smwb-sheet__default", s.classes()))), n;
282
+ var r = M();
283
+ return L((o) => p = o, r), h(r, d), k((o) => {
284
+ var v = g(), m = $(e.disableOutsideClick ? "smwb-sheet__overlay" : "smwb-sheet__default", s.classes());
285
+ return o.e = P(r, v, o.e), m !== o.t && T(r, o.t = m), o;
286
+ }, {
287
+ e: void 0,
288
+ t: void 0
289
+ }), r;
270
290
  }
271
291
  });
272
292
  }
@@ -274,7 +294,7 @@ function _e(m) {
274
294
  }
275
295
  });
276
296
  }
277
- Q(["pointerdown", "pointermove", "pointerup", "keydown"]);
297
+ Z(["pointerdown", "pointermove", "pointerup", "keydown"]);
278
298
  export {
279
299
  _e as Sheet
280
300
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sheet.js","sources":["../../../../src/components/layout/sheet/sheet.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, createEffect, createSignal, mergeProps, on, onCleanup, splitProps } from \"solid-js\";\nimport { Portal, isServer } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Button } from \"../../inputs/button\";\nimport { Icon } from \"../../base/icon\";\nimport { ClickAwayListener } from \"../../clickAwayListener\";\nimport { createCssTransition } from \"../../../primitives/createCssTransition\";\nimport { isTopOverlayLayer } from \"../../../primitives/overlayLayer\";\nimport { restoreFocus } from \"../../../primitives/restoreFocus\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { mergeStyle } from \"../../../primitives/mergeStyle\";\n\nexport interface SheetProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onResize\"> {\n placement?: \"top\" | \"bottom\" | \"right\" | \"left\";\n isOpen: boolean;\n onClose?: (() => void) | undefined;\n variant?: \"default\" | \"modal\";\n withSizeToggle?: boolean;\n /** Hide built-in header actions; onClose still handles Esc and backdrop. */\n hideHeaderActions?: boolean;\n reverseHeaderActions?: boolean;\n /** Accessible name of the header close button (default \"Close sheet\"). */\n closeAriaLabel?: string;\n /**\n * Accessible name of the size toggle while the sheet is at its normal size (default \"Expand sheet\"). The toggle\n * cycles normal, expanded, collapsed and back, and its name always says what the next press does; the\n * name changing is how it exposes its state. It shows the `open_in_full` icon, and `close_fullscreen` while expanded.\n */\n expandAriaLabel?: string;\n /** Accessible name of the size toggle while the sheet is expanded (default \"Collapse sheet\"). */\n collapseAriaLabel?: string;\n /** Accessible name of the size toggle while the sheet is collapsed to its header (default \"Restore sheet size\"). */\n restoreAriaLabel?: string;\n size?: string;\n disableOutsideClick?: boolean;\n /** Close the sheet when Escape is pressed. */\n closeOnEsc?: boolean;\n /** Allow drag-to-resize (mobile bottom-sheet style). Off by default. */\n resizable?: boolean;\n /** Minimum size in px while resizing (default 80). */\n minSize?: number;\n /** Maximum size in px while resizing (default: viewport dimension). */\n maxSize?: number;\n /** Step in px for keyboard resizing (default 24). */\n resizeStep?: number;\n /** Accessible label for the resize handle. */\n resizeHandleAriaLabel?: string;\n /** Called with the new size in px while/after resizing. */\n onResize?: (size: number) => void;\n \"aria-label\"?: string;\n /** Test id of the sheet panel (the dialog); `sheet` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\ntype Mode = \"small\" | \"expanded\" | null;\n\nconst isVerticalAxis = (placement: SheetProps[\"placement\"]): boolean => placement === \"bottom\" || placement === \"top\";\n\ninterface SheetBlockProps extends ParentProps<SheetProps> {\n mode: Mode;\n handleSizeButton: () => void;\n handleClose: () => void;\n}\n\nfunction SheetBlock(props: SheetBlockProps): JSX.Element {\n const merged = mergeProps(\n {\n size: \"60%\",\n withSizeToggle: true,\n hideHeaderActions: false,\n reverseHeaderActions: false,\n closeAriaLabel: \"Close sheet\",\n expandAriaLabel: \"Expand sheet\",\n collapseAriaLabel: \"Collapse sheet\",\n restoreAriaLabel: \"Restore sheet size\",\n resizable: false,\n minSize: 80,\n resizeStep: 24,\n resizeHandleAriaLabel: \"Resize sheet\",\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"isOpen\",\n \"placement\",\n \"class\",\n \"mode\",\n \"size\",\n \"variant\",\n \"onClose\",\n \"withSizeToggle\",\n \"hideHeaderActions\",\n \"reverseHeaderActions\",\n \"closeAriaLabel\",\n \"expandAriaLabel\",\n \"collapseAriaLabel\",\n \"restoreAriaLabel\",\n \"resizable\",\n \"minSize\",\n \"maxSize\",\n \"resizeStep\",\n \"resizeHandleAriaLabel\",\n \"onResize\",\n \"style\",\n \"handleClose\",\n \"handleSizeButton\",\n \"children\",\n \"ref\",\n \"data-testid\",\n ]);\n\n let rootEl: HTMLDivElement | undefined;\n const [dragSize, setDragSize] = createSignal<number | null>(null);\n const vertical = (): boolean => isVerticalAxis(local.placement);\n\n const inner = createCssTransition({\n in: () => local.isOpen,\n timeout: { enter: 120, exit: 120 },\n classNames: { enterDone: \"smwb-sheet_entered\" },\n appear: true,\n });\n\n const clamp = (px: number): number => {\n const viewport = vertical() ? window.innerHeight : window.innerWidth;\n const max = local.maxSize ?? viewport;\n return Math.max(local.minSize, Math.min(max, px));\n };\n\n const currentSizePx = (): number => {\n const rect = rootEl?.getBoundingClientRect();\n if (!rect) return local.minSize;\n return vertical() ? rect.height : rect.width;\n };\n\n const applySize = (px: number): void => {\n const next = clamp(px);\n setDragSize(next);\n local.onResize?.(next);\n };\n\n let drag: { start: number; size: number } | null = null;\n\n const onPointerDown = (event: PointerEvent & { currentTarget: HTMLDivElement }): void => {\n event.preventDefault();\n drag = { start: vertical() ? event.clientY : event.clientX, size: currentSizePx() };\n try {\n event.currentTarget.setPointerCapture?.(event.pointerId);\n } catch {\n /* best-effort */\n }\n };\n\n const onPointerMove = (event: PointerEvent): void => {\n if (!drag) return;\n const pos = vertical() ? event.clientY : event.clientX;\n const delta = pos - drag.start;\n const grow = local.placement === \"bottom\" || local.placement === \"right\" ? -delta : delta;\n applySize(drag.size + grow);\n };\n\n const endDrag = (event: PointerEvent & { currentTarget: HTMLDivElement }): void => {\n drag = null;\n if (event.currentTarget.hasPointerCapture?.(event.pointerId)) {\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n }\n };\n\n const onHandleKeyDown: JSX.EventHandler<HTMLDivElement, KeyboardEvent> = (event) => {\n const base = dragSize() ?? currentSizePx();\n const max = local.maxSize ?? (vertical() ? window.innerHeight : window.innerWidth);\n const incKey =\n local.placement === \"bottom\" ? \"ArrowUp\" : local.placement === \"top\" ? \"ArrowDown\" : local.placement === \"left\" ? \"ArrowRight\" : \"ArrowLeft\";\n const decKey =\n local.placement === \"bottom\" ? \"ArrowDown\" : local.placement === \"top\" ? \"ArrowUp\" : local.placement === \"left\" ? \"ArrowLeft\" : \"ArrowRight\";\n if (event.key === incKey) {\n event.preventDefault();\n applySize(base + local.resizeStep);\n } else if (event.key === decKey) {\n event.preventDefault();\n applySize(base - local.resizeStep);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n applySize(local.minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n applySize(max);\n }\n };\n\n // Keyed on `isOpen` alone: root.focus() fires focus handlers synchronously, and Solid runs those\n // without untrack, so any signal they read would otherwise re-run this effect and steal focus.\n createEffect(\n on(\n () => local.isOpen,\n (open) => {\n if (!open) {\n setDragSize(null);\n return;\n }\n const root = rootEl;\n // The element that had focus when the sheet opened gets it back when it closes (or unmounts\n // while open), unless the app has put focus somewhere else by then.\n const opener = root?.contains(document.activeElement) ? null : document.activeElement;\n root?.focus();\n onCleanup(() => restoreFocus(opener, root));\n },\n ),\n );\n\n const showActions = (): boolean => !local.hideHeaderActions && (!!local.onClose || local.withSizeToggle);\n const actionNodes = (): JSX.Element[] => {\n const nodes: JSX.Element[] = [];\n if (local.withSizeToggle) {\n nodes.push(\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={local.handleSizeButton}\n aria-label={\n local.mode === \"expanded\" ? local.collapseAriaLabel : local.mode === \"small\" ? local.restoreAriaLabel : local.expandAriaLabel\n }\n >\n <Icon name={local.mode === \"expanded\" ? \"close_fullscreen\" : \"open_in_full\"} />\n </Button>\n );\n }\n if (local.onClose) {\n nodes.push(\n <Button variant=\"outlined\" size=\"small\" onClick={local.handleClose} aria-label={local.closeAriaLabel}>\n <Icon name=\"close\" />\n </Button>\n );\n }\n if (local.reverseHeaderActions) nodes.reverse();\n return nodes;\n };\n\n const sizeStyle = (): JSX.CSSProperties => {\n if (local.resizable && dragSize() !== null) {\n const px = `${dragSize()}px`;\n return { ...(vertical() ? { height: px } : { width: px }), transition: \"none\" };\n }\n return {};\n };\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref, (el) => (rootEl = el as HTMLDivElement))}\n data-testid={local[\"data-testid\"] ?? \"sheet\"}\n tabindex={-1}\n role=\"dialog\"\n aria-modal={local.variant === \"modal\" || undefined}\n class={cn(\"smwb-sheet\", local.class, `smwb-sheet_${local.variant}`, `smwb-${local.placement}`, inner.classes(), {\n \"smwb-expanded\": local.mode === \"expanded\",\n \"smwb-small\": local.mode === \"small\",\n \"smwb-sheet_resizable\": local.resizable,\n })}\n style={mergeStyle({ \"--sizeProp\": local.size, ...sizeStyle() }, local.style)}\n >\n <Show when={local.resizable}>\n <div\n class=\"smwb-sheet__drag-handle\"\n data-testid=\"sheet-drag-handle\"\n role=\"separator\"\n tabindex={0}\n aria-orientation={vertical() ? \"horizontal\" : \"vertical\"}\n aria-label={local.resizeHandleAriaLabel}\n aria-valuemin={local.minSize}\n aria-valuemax={Math.round(local.maxSize ?? (vertical() ? window.innerHeight : window.innerWidth))}\n aria-valuenow={Math.round(dragSize() ?? currentSizePx())}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n onKeyDown={onHandleKeyDown}\n >\n <span class=\"smwb-sheet__drag-handle-bar\" />\n </div>\n </Show>\n <Show when={showActions()}>\n <div class=\"smwb-sheet__header\">{actionNodes()}</div>\n </Show>\n <Show when={local.isOpen && local.mode !== \"small\"}>\n <div class=\"smwb-sheet__inner\">{local.children}</div>\n </Show>\n </div>\n );\n}\n\nexport function Sheet(props: ParentProps<SheetProps>): JSX.Element {\n const merged = mergeProps({ variant: \"default\" as const, placement: \"bottom\" as const, closeOnEsc: true }, props);\n const [local, rest] = splitProps(merged, [\n \"isOpen\",\n \"onClose\",\n \"variant\",\n \"children\",\n \"placement\",\n \"disableOutsideClick\",\n \"closeOnEsc\",\n \"ref\",\n ]);\n\n const [mode, setMode] = createSignal<Mode>(null);\n let wrapperEl: HTMLDivElement | undefined;\n\n const outer = createCssTransition({\n in: () => local.isOpen,\n timeout: { enter: 70, exit: 70 },\n classNames: { enterDone: \"smwb-entered\" },\n appear: true,\n });\n\n createEffect(() => {\n if (!local.isOpen || !local.closeOnEsc || !local.onClose) return;\n const onKeyDown = (event: KeyboardEvent): void => {\n // Only the topmost overlay layer reacts to Escape, and not to one handled inside\n // it, e.g. by a menu closing on it.\n if (event.key === \"Escape\" && !event.defaultPrevented && isTopOverlayLayer(wrapperEl)) local.onClose?.();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => document.removeEventListener(\"keydown\", onKeyDown));\n });\n\n const handleSizeButton = (): void => {\n setMode((prev) => (prev === \"expanded\" ? \"small\" : prev === null ? \"expanded\" : null));\n };\n const handleClose = (): void => {\n local.onClose?.();\n setMode(null);\n };\n\n const block = (): JSX.Element => (\n <SheetBlock\n {...rest}\n ref={local.ref}\n isOpen={local.isOpen}\n onClose={local.onClose}\n handleSizeButton={handleSizeButton}\n handleClose={handleClose}\n mode={mode()}\n placement={local.placement}\n variant={local.variant}\n >\n {local.children}\n </SheetBlock>\n );\n\n return (\n <Show when={outer.mounted()}>\n <Portal mount={(isServer ? undefined : document.body) as Node}>\n <Show\n when={local.variant === \"default\"}\n fallback={\n <div\n ref={(el) => (wrapperEl = el)}\n data-smwb-overlay-layer\n class={cn(\"smwb-sheet__overlay\", \"smwb-dark\", `smwb-${local.placement}`, `smwb-sheet_${local.variant}`, outer.classes())}\n >\n <ClickAwayListener onClickAway={() => !local.disableOutsideClick && handleClose()}>\n {block()}\n </ClickAwayListener>\n </div>\n }\n >\n <div\n ref={(el) => (wrapperEl = el)}\n data-smwb-overlay-layer\n class={cn(local.disableOutsideClick ? \"smwb-sheet__overlay\" : \"smwb-sheet__default\", outer.classes())}\n >\n {block()}\n </div>\n </Show>\n </Portal>\n </Show>\n );\n}\n\nexport default Sheet;\n"],"names":["isVerticalAxis","placement","SheetBlock","props","merged","mergeProps","size","withSizeToggle","hideHeaderActions","reverseHeaderActions","closeAriaLabel","expandAriaLabel","collapseAriaLabel","restoreAriaLabel","resizable","minSize","resizeStep","resizeHandleAriaLabel","local","rest","splitProps","rootEl","dragSize","setDragSize","createSignal","vertical","inner","createCssTransition","in","isOpen","timeout","enter","exit","classNames","enterDone","appear","clamp","px","viewport","window","innerHeight","innerWidth","max","maxSize","Math","min","currentSizePx","rect","getBoundingClientRect","height","width","applySize","next","onResize","drag","onPointerDown","event","preventDefault","start","clientY","clientX","currentTarget","setPointerCapture","pointerId","onPointerMove","delta","grow","endDrag","hasPointerCapture","releasePointerCapture","onHandleKeyDown","base","incKey","decKey","key","createEffect","on","open","root","opener","contains","document","activeElement","focus","onCleanup","restoreFocus","showActions","onClose","actionNodes","nodes","push","_$createComponent","Button","variant","onClick","handleSizeButton","_$memo","mode","children","Icon","name","handleClose","reverse","sizeStyle","transition","_el$","_tmpl$4","_ref$","mergeRefs","ref","el","_$use","_$spread","_$mergeProps","undefined","cn","class","classes","style","mergeStyle","_$insert","Show","when","_el$2","_tmpl$","$$keydown","addEventListener","$$pointerup","$$pointermove","$$pointerdown","_$effect","_p$","_v$","_v$2","_v$3","_v$4","round","_v$5","e","_$setAttribute","t","a","o","i","_el$3","_tmpl$2","_el$4","_tmpl$3","Sheet","closeOnEsc","setMode","wrapperEl","outer","onKeyDown","defaultPrevented","isTopOverlayLayer","removeEventListener","prev","block","r$","_ref$2","mounted","Portal","mount","isServer","body","fallback","_el$6","_tmpl$5","ClickAwayListener","onClickAway","disableOutsideClick","_$className","_el$5","_$delegateEvents"],"mappings":"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"}
1
+ {"version":3,"file":"sheet.js","sources":["../../../../src/components/layout/sheet/sheet.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, createEffect, createSignal, mergeProps, on, onCleanup, splitProps } from \"solid-js\";\nimport { Portal, isServer } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Button } from \"../../inputs/button\";\nimport { Icon } from \"../../base/icon\";\nimport { ClickAwayListener } from \"../../clickAwayListener\";\nimport { createCssTransition } from \"../../../primitives/createCssTransition\";\nimport { isTopOverlayLayer } from \"../../../primitives/overlayLayer\";\nimport { restoreFocus } from \"../../../primitives/restoreFocus\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { mergeStyle } from \"../../../primitives/mergeStyle\";\n\nexport interface SheetProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onResize\"> {\n placement?: \"top\" | \"bottom\" | \"right\" | \"left\";\n isOpen: boolean;\n onClose?: (() => void) | undefined;\n variant?: \"default\" | \"modal\";\n withSizeToggle?: boolean;\n /** Hide built-in header actions; onClose still handles Esc and backdrop. */\n hideHeaderActions?: boolean;\n reverseHeaderActions?: boolean;\n /** Accessible name of the header close button (default \"Close sheet\"). */\n closeAriaLabel?: string;\n /**\n * Accessible name of the size toggle while the sheet is at its normal size (default \"Expand sheet\"). The toggle\n * cycles normal, expanded, collapsed and back, and its name always says what the next press does; the\n * name changing is how it exposes its state. It shows the `open_in_full` icon, and `close_fullscreen` while expanded.\n */\n expandAriaLabel?: string;\n /** Accessible name of the size toggle while the sheet is expanded (default \"Collapse sheet\"). */\n collapseAriaLabel?: string;\n /** Accessible name of the size toggle while the sheet is collapsed to its header (default \"Restore sheet size\"). */\n restoreAriaLabel?: string;\n size?: string;\n /**\n * Gap between the top edge of the window and the top of the sheet and of its modal scrim (px, or any CSS length),\n * so a panel can start below a fixed app bar and leave it visible and clickable. It applies to the `top`, `left`\n * and `right` placements and to the scrim of every placement. Without it the sheet takes the page's\n * `--smui-sheet-offset-top`, which `AppLayout` sets to the height of its sticky header and which is 0 elsewhere;\n * `offsetTop={0}` covers the header anyway. A press in the strip above a modal scrim belongs to the page and does\n * not close the sheet, so a header button can toggle it. The modal sheet keeps `aria-modal`, though that strip can\n * still be reached by pointer and Tab; for a header that must stay available to assistive technology, use\n * `variant=\"default\"`.\n */\n offsetTop?: number | string;\n disableOutsideClick?: boolean;\n /** Close the sheet when Escape is pressed. */\n closeOnEsc?: boolean;\n /** Allow drag-to-resize (mobile bottom-sheet style). Off by default. */\n resizable?: boolean;\n /** Minimum size in px while resizing (default 80). */\n minSize?: number;\n /** Maximum size in px while resizing (default: viewport dimension). */\n maxSize?: number;\n /** Step in px for keyboard resizing (default 24). */\n resizeStep?: number;\n /** Accessible label for the resize handle. */\n resizeHandleAriaLabel?: string;\n /** Called with the new size in px while/after resizing. */\n onResize?: (size: number) => void;\n \"aria-label\"?: string;\n /** Test id of the sheet panel (the dialog); `sheet` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\ntype Mode = \"small\" | \"expanded\" | null;\n\n/**\n * Whether a press ended above the top edge of the scrim, i.e. in the strip an `offsetTop` leaves uncovered. The page\n * owns that strip (a header button there, say), so it is not \"away\" from a modal sheet: a button that toggles the\n * sheet would otherwise see it close on the release and open again on the click.\n */\nconst landedAboveScrim = (event: MouseEvent | TouchEvent, scrim: HTMLElement | null | undefined): boolean => {\n const y = \"changedTouches\" in event ? event.changedTouches[0]?.clientY : event.clientY;\n return scrim != null && y !== undefined && y < scrim.getBoundingClientRect().top;\n};\n\nconst isVerticalAxis = (placement: SheetProps[\"placement\"]): boolean => placement === \"bottom\" || placement === \"top\";\n\ninterface SheetBlockProps extends ParentProps<SheetProps> {\n mode: Mode;\n handleSizeButton: () => void;\n handleClose: () => void;\n}\n\nfunction SheetBlock(props: SheetBlockProps): JSX.Element {\n const merged = mergeProps(\n {\n size: \"60%\",\n withSizeToggle: true,\n hideHeaderActions: false,\n reverseHeaderActions: false,\n closeAriaLabel: \"Close sheet\",\n expandAriaLabel: \"Expand sheet\",\n collapseAriaLabel: \"Collapse sheet\",\n restoreAriaLabel: \"Restore sheet size\",\n resizable: false,\n minSize: 80,\n resizeStep: 24,\n resizeHandleAriaLabel: \"Resize sheet\",\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"isOpen\",\n \"placement\",\n \"class\",\n \"mode\",\n \"size\",\n \"variant\",\n \"onClose\",\n \"withSizeToggle\",\n \"hideHeaderActions\",\n \"reverseHeaderActions\",\n \"closeAriaLabel\",\n \"expandAriaLabel\",\n \"collapseAriaLabel\",\n \"restoreAriaLabel\",\n \"resizable\",\n \"minSize\",\n \"maxSize\",\n \"resizeStep\",\n \"resizeHandleAriaLabel\",\n \"onResize\",\n \"style\",\n \"handleClose\",\n \"handleSizeButton\",\n \"children\",\n \"ref\",\n \"data-testid\",\n ]);\n\n let rootEl: HTMLDivElement | undefined;\n const [dragSize, setDragSize] = createSignal<number | null>(null);\n const vertical = (): boolean => isVerticalAxis(local.placement);\n\n const inner = createCssTransition({\n in: () => local.isOpen,\n timeout: { enter: 120, exit: 120 },\n classNames: { enterDone: \"smwb-sheet_entered\" },\n appear: true,\n });\n\n const clamp = (px: number): number => {\n const viewport = vertical() ? window.innerHeight : window.innerWidth;\n const max = local.maxSize ?? viewport;\n return Math.max(local.minSize, Math.min(max, px));\n };\n\n const currentSizePx = (): number => {\n const rect = rootEl?.getBoundingClientRect();\n if (!rect) return local.minSize;\n return vertical() ? rect.height : rect.width;\n };\n\n const applySize = (px: number): void => {\n const next = clamp(px);\n setDragSize(next);\n local.onResize?.(next);\n };\n\n let drag: { start: number; size: number } | null = null;\n\n const onPointerDown = (event: PointerEvent & { currentTarget: HTMLDivElement }): void => {\n event.preventDefault();\n drag = { start: vertical() ? event.clientY : event.clientX, size: currentSizePx() };\n try {\n event.currentTarget.setPointerCapture?.(event.pointerId);\n } catch {\n /* best-effort */\n }\n };\n\n const onPointerMove = (event: PointerEvent): void => {\n if (!drag) return;\n const pos = vertical() ? event.clientY : event.clientX;\n const delta = pos - drag.start;\n const grow = local.placement === \"bottom\" || local.placement === \"right\" ? -delta : delta;\n applySize(drag.size + grow);\n };\n\n const endDrag = (event: PointerEvent & { currentTarget: HTMLDivElement }): void => {\n drag = null;\n if (event.currentTarget.hasPointerCapture?.(event.pointerId)) {\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n }\n };\n\n const onHandleKeyDown: JSX.EventHandler<HTMLDivElement, KeyboardEvent> = (event) => {\n const base = dragSize() ?? currentSizePx();\n const max = local.maxSize ?? (vertical() ? window.innerHeight : window.innerWidth);\n const incKey =\n local.placement === \"bottom\" ? \"ArrowUp\" : local.placement === \"top\" ? \"ArrowDown\" : local.placement === \"left\" ? \"ArrowRight\" : \"ArrowLeft\";\n const decKey =\n local.placement === \"bottom\" ? \"ArrowDown\" : local.placement === \"top\" ? \"ArrowUp\" : local.placement === \"left\" ? \"ArrowLeft\" : \"ArrowRight\";\n if (event.key === incKey) {\n event.preventDefault();\n applySize(base + local.resizeStep);\n } else if (event.key === decKey) {\n event.preventDefault();\n applySize(base - local.resizeStep);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n applySize(local.minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n applySize(max);\n }\n };\n\n // Keyed on `isOpen` alone: root.focus() fires focus handlers synchronously, and Solid runs those\n // without untrack, so any signal they read would otherwise re-run this effect and steal focus.\n createEffect(\n on(\n () => local.isOpen,\n (open) => {\n if (!open) {\n setDragSize(null);\n return;\n }\n const root = rootEl;\n // The element that had focus when the sheet opened gets it back when it closes (or unmounts\n // while open), unless the app has put focus somewhere else by then.\n const opener = root?.contains(document.activeElement) ? null : document.activeElement;\n root?.focus();\n onCleanup(() => restoreFocus(opener, root));\n },\n ),\n );\n\n const showActions = (): boolean => !local.hideHeaderActions && (!!local.onClose || local.withSizeToggle);\n const actionNodes = (): JSX.Element[] => {\n const nodes: JSX.Element[] = [];\n if (local.withSizeToggle) {\n nodes.push(\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={local.handleSizeButton}\n aria-label={\n local.mode === \"expanded\" ? local.collapseAriaLabel : local.mode === \"small\" ? local.restoreAriaLabel : local.expandAriaLabel\n }\n >\n <Icon name={local.mode === \"expanded\" ? \"close_fullscreen\" : \"open_in_full\"} />\n </Button>\n );\n }\n if (local.onClose) {\n nodes.push(\n <Button variant=\"outlined\" size=\"small\" onClick={local.handleClose} aria-label={local.closeAriaLabel}>\n <Icon name=\"close\" />\n </Button>\n );\n }\n if (local.reverseHeaderActions) nodes.reverse();\n return nodes;\n };\n\n const sizeStyle = (): JSX.CSSProperties => {\n if (local.resizable && dragSize() !== null) {\n const px = `${dragSize()}px`;\n return { ...(vertical() ? { height: px } : { width: px }), transition: \"none\" };\n }\n return {};\n };\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref, (el) => (rootEl = el as HTMLDivElement))}\n data-testid={local[\"data-testid\"] ?? \"sheet\"}\n tabindex={-1}\n role=\"dialog\"\n aria-modal={local.variant === \"modal\" || undefined}\n class={cn(\"smwb-sheet\", local.class, `smwb-sheet_${local.variant}`, `smwb-${local.placement}`, inner.classes(), {\n \"smwb-expanded\": local.mode === \"expanded\",\n \"smwb-small\": local.mode === \"small\",\n \"smwb-sheet_resizable\": local.resizable,\n })}\n style={mergeStyle({ \"--sizeProp\": local.size, ...sizeStyle() }, local.style)}\n >\n <Show when={local.resizable}>\n <div\n class=\"smwb-sheet__drag-handle\"\n data-testid=\"sheet-drag-handle\"\n role=\"separator\"\n tabindex={0}\n aria-orientation={vertical() ? \"horizontal\" : \"vertical\"}\n aria-label={local.resizeHandleAriaLabel}\n aria-valuemin={local.minSize}\n aria-valuemax={Math.round(local.maxSize ?? (vertical() ? window.innerHeight : window.innerWidth))}\n aria-valuenow={Math.round(dragSize() ?? currentSizePx())}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n onKeyDown={onHandleKeyDown}\n >\n <span class=\"smwb-sheet__drag-handle-bar\" />\n </div>\n </Show>\n <Show when={showActions()}>\n <div class=\"smwb-sheet__header\">{actionNodes()}</div>\n </Show>\n <Show when={local.isOpen && local.mode !== \"small\"}>\n <div class=\"smwb-sheet__inner\">{local.children}</div>\n </Show>\n </div>\n );\n}\n\nexport function Sheet(props: ParentProps<SheetProps>): JSX.Element {\n const merged = mergeProps({ variant: \"default\" as const, placement: \"bottom\" as const, closeOnEsc: true }, props);\n const [local, rest] = splitProps(merged, [\n \"isOpen\",\n \"onClose\",\n \"variant\",\n \"children\",\n \"placement\",\n \"disableOutsideClick\",\n \"closeOnEsc\",\n \"offsetTop\",\n \"ref\",\n ]);\n\n const [mode, setMode] = createSignal<Mode>(null);\n let wrapperEl: HTMLDivElement | undefined;\n\n const outer = createCssTransition({\n in: () => local.isOpen,\n timeout: { enter: 70, exit: 70 },\n classNames: { enterDone: \"smwb-entered\" },\n appear: true,\n });\n\n createEffect(() => {\n if (!local.isOpen || !local.closeOnEsc || !local.onClose) return;\n const onKeyDown = (event: KeyboardEvent): void => {\n // Only the topmost overlay layer reacts to Escape, and not to one handled inside\n // it, e.g. by a menu closing on it.\n if (event.key === \"Escape\" && !event.defaultPrevented && isTopOverlayLayer(wrapperEl)) local.onClose?.();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => document.removeEventListener(\"keydown\", onKeyDown));\n });\n\n const handleSizeButton = (): void => {\n setMode((prev) => (prev === \"expanded\" ? \"small\" : prev === null ? \"expanded\" : null));\n };\n const handleClose = (): void => {\n local.onClose?.();\n setMode(null);\n };\n\n // The variable goes on the wrapper, so the panel and the scrim both inherit it. Left off when not given: an\n // undefined style key would print `style=\"\"` on the server.\n const wrapperStyle = (): JSX.CSSProperties | undefined => {\n const offset = local.offsetTop;\n return offset === undefined ? undefined : { \"--smui-sheet-offset-top\": typeof offset === \"number\" ? `${offset}px` : offset };\n };\n\n const block = (): JSX.Element => (\n <SheetBlock\n {...rest}\n ref={local.ref}\n isOpen={local.isOpen}\n onClose={local.onClose}\n handleSizeButton={handleSizeButton}\n handleClose={handleClose}\n mode={mode()}\n placement={local.placement}\n variant={local.variant}\n >\n {local.children}\n </SheetBlock>\n );\n\n return (\n <Show when={outer.mounted()}>\n <Portal mount={(isServer ? undefined : document.body) as Node}>\n <Show\n when={local.variant === \"default\"}\n fallback={\n <div\n ref={(el) => (wrapperEl = el)}\n data-smwb-overlay-layer\n style={wrapperStyle()}\n class={cn(\"smwb-sheet__overlay\", \"smwb-dark\", `smwb-${local.placement}`, `smwb-sheet_${local.variant}`, outer.classes())}\n >\n <ClickAwayListener\n onClickAway={(event) => !local.disableOutsideClick && !landedAboveScrim(event, wrapperEl) && handleClose()}\n >\n {block()}\n </ClickAwayListener>\n </div>\n }\n >\n <div\n ref={(el) => (wrapperEl = el)}\n data-smwb-overlay-layer\n style={wrapperStyle()}\n class={cn(local.disableOutsideClick ? \"smwb-sheet__overlay\" : \"smwb-sheet__default\", outer.classes())}\n >\n {block()}\n </div>\n </Show>\n </Portal>\n </Show>\n );\n}\n\nexport default Sheet;\n"],"names":["landedAboveScrim","event","scrim","y","changedTouches","clientY","undefined","getBoundingClientRect","top","isVerticalAxis","placement","SheetBlock","props","merged","mergeProps","size","withSizeToggle","hideHeaderActions","reverseHeaderActions","closeAriaLabel","expandAriaLabel","collapseAriaLabel","restoreAriaLabel","resizable","minSize","resizeStep","resizeHandleAriaLabel","local","rest","splitProps","rootEl","dragSize","setDragSize","createSignal","vertical","inner","createCssTransition","in","isOpen","timeout","enter","exit","classNames","enterDone","appear","clamp","px","viewport","window","innerHeight","innerWidth","max","maxSize","Math","min","currentSizePx","rect","height","width","applySize","next","onResize","drag","onPointerDown","preventDefault","start","clientX","currentTarget","setPointerCapture","pointerId","onPointerMove","delta","grow","endDrag","hasPointerCapture","releasePointerCapture","onHandleKeyDown","base","incKey","decKey","key","createEffect","on","open","root","opener","contains","document","activeElement","focus","onCleanup","restoreFocus","showActions","onClose","actionNodes","nodes","push","_$createComponent","Button","variant","onClick","handleSizeButton","_$memo","mode","children","Icon","name","handleClose","reverse","sizeStyle","transition","_el$","_tmpl$4","_ref$","mergeRefs","ref","el","_$use","_$spread","_$mergeProps","cn","class","classes","style","mergeStyle","_$insert","Show","when","_el$2","_tmpl$","$$keydown","addEventListener","$$pointerup","$$pointermove","$$pointerdown","_$effect","_p$","_v$","_v$2","_v$3","_v$4","round","_v$5","e","_$setAttribute","t","a","o","i","_el$3","_tmpl$2","_el$4","_tmpl$3","Sheet","closeOnEsc","setMode","wrapperEl","outer","onKeyDown","defaultPrevented","isTopOverlayLayer","removeEventListener","prev","wrapperStyle","offset","offsetTop","block","r$","_ref$2","mounted","Portal","mount","isServer","body","fallback","_el$6","_tmpl$5","ClickAwayListener","onClickAway","disableOutsideClick","_v$8","_v$9","_$style","_$className","_el$5","_v$6","_v$7","_$delegateEvents"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  export { TabGroups, default } from "./tabGroups";
2
- export type { TabGroupsProps, TabGroupsTab } from "./tabGroups";
2
+ export type { TabGroupsProps, TabGroupsStripGroup, TabGroupsTab } from "./tabGroups";
3
3
  export * as tabGroupsLayout from "./tabGroupsLayout";
4
4
  export type { TabGroupsChange, TabGroupsDropZone, TabGroupsEdge, TabGroupsGroup, TabGroupsLabels, TabGroupsLayout, TabGroupsMoveTarget, TabGroupsNode, TabGroupsSplit, } from "./tabGroupsLayout";
@@ -11,7 +11,8 @@ export interface TabGroupsTab {
11
11
  label: JSX.Element;
12
12
  /**
13
13
  * Plain text for the announcements and for a screen reader that cannot read the label (markup,
14
- * an icon). `label` when it is a string, else the tab id.
14
+ * an icon). `label` when it is a string, else the tab id. With `fit` it is also the tab's `title`, the
15
+ * tooltip of a label that is not a string; a string label is its own tooltip, so leave `title` out for it.
15
16
  */
16
17
  title?: string | undefined;
17
18
  /** An icon drawn before the label. */
@@ -28,6 +29,18 @@ export interface TabGroupsTab {
28
29
  /** Greys the tab out: it cannot be selected, moved or dragged. */
29
30
  disabled?: boolean | undefined;
30
31
  }
32
+ /**
33
+ * What `stripActions` is asked about: the group whose tab row the content goes into. The fields
34
+ * are getters that always give the current value (see `stripActions`).
35
+ */
36
+ export interface TabGroupsStripGroup {
37
+ /** The group's place among the groups in reading order, from 0. */
38
+ readonly index: number;
39
+ /** How many groups there are. */
40
+ readonly count: number;
41
+ /** Whether this is the group in use, the one the user works in (the header marked when there are two groups or more). */
42
+ readonly active: boolean;
43
+ }
31
44
  export interface TabGroupsProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "children" | "onChange" | "id"> {
32
45
  /**
33
46
  * The arrangement to draw: the split tree, every group's tabs and the selected one. Controlled
@@ -64,8 +77,38 @@ export interface TabGroupsProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>,
64
77
  keyboardStep?: number | undefined;
65
78
  /** Draw each group's actions button and menu; true by default. */
66
79
  groupActions?: boolean | undefined;
80
+ /**
81
+ * Content at the end of a group's tab row, before the group's actions button: buttons that act on
82
+ * the group ("new terminal", "split"). Called for every group with `{ index, count, active }`:
83
+ * its place from 0, how many groups there are and whether it is the one in use, so the app can
84
+ * return content for some groups only; `null`, `undefined`, `false` or an empty fragment draws
85
+ * nothing, not even a wrapper. The tabs scroll beside it while the content stays in view; in a
86
+ * header too narrow for both, the tabs give way first, then the content is clipped at its end, and
87
+ * the group's actions button stays. It comes after the tabs in the Tab order, and the tab row's
88
+ * arrow keys neither enter it nor read the keys pressed in it.
89
+ *
90
+ * The function runs once per header, and the group's fields are getters, read like props: read
91
+ * in the content (`<Show when={group.active}>`, `{group.count}`) they update it in place, so its
92
+ * nodes, their state and the focus stay; read in the function's body (`group.active ? … : null`)
93
+ * they make it run again, with new content, when that value changes. Read the layout itself in
94
+ * the handlers.
95
+ *
96
+ * A slot control that has the focus when a change takes it out of the document (a split or a
97
+ * close from the slot, the slot going to the group in use) hands the focus on: to the control at
98
+ * the same place in its group's slot, else in the slot of the group in use (the last one when
99
+ * there are fewer), else to that group's selected tab.
100
+ */
101
+ stripActions?: ((group: TabGroupsStripGroup) => JSX.Element) | undefined;
67
102
  /** Compact tab rows, as `Tabs`' `dense`; false by default. */
68
103
  dense?: boolean | undefined;
104
+ /**
105
+ * Content-width tabs, as `Tabs`' `fit`; false by default. Each tab is as wide as its marker,
106
+ * label and close button, between `--smui-tabFitMinWidth` and `--smui-tabFitMaxWidth`, and what is
107
+ * left of the header stays empty: `stripActions` and the group's actions button keep the end of
108
+ * it. A long label is cut with an ellipsis and shows its text as a tooltip: a string label is its
109
+ * own, and the tab's `title` is the tooltip of a label that is not a string.
110
+ */
111
+ fit?: boolean | undefined;
69
112
  /** The texts of the component: its menus, labels and announcements. English by default. */
70
113
  labels?: Partial<TabGroupsLabels> | undefined;
71
114
  /** Base of the generated ids and the id of the root element. Generated by default. */