@xeonr/platform-ui 1.5.0 → 1.6.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 (105) hide show
  1. package/dist/index.d.ts +12 -5
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +12 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/kit/Anchored.d.ts +24 -2
  6. package/dist/kit/Anchored.d.ts.map +1 -1
  7. package/dist/kit/Anchored.js +47 -3
  8. package/dist/kit/Anchored.js.map +1 -1
  9. package/dist/kit/Blocks.d.ts +6 -1
  10. package/dist/kit/Blocks.d.ts.map +1 -1
  11. package/dist/kit/Blocks.js +13 -2
  12. package/dist/kit/Blocks.js.map +1 -1
  13. package/dist/kit/Card.d.ts +6 -1
  14. package/dist/kit/Card.d.ts.map +1 -1
  15. package/dist/kit/Card.js +19 -4
  16. package/dist/kit/Card.js.map +1 -1
  17. package/dist/kit/Charts.d.ts +39 -3
  18. package/dist/kit/Charts.d.ts.map +1 -1
  19. package/dist/kit/Charts.js +70 -15
  20. package/dist/kit/Charts.js.map +1 -1
  21. package/dist/kit/CommandPalette.d.ts +47 -0
  22. package/dist/kit/CommandPalette.d.ts.map +1 -0
  23. package/dist/kit/CommandPalette.js +204 -0
  24. package/dist/kit/CommandPalette.js.map +1 -0
  25. package/dist/kit/DataTable.d.ts +18 -2
  26. package/dist/kit/DataTable.d.ts.map +1 -1
  27. package/dist/kit/DataTable.js +45 -6
  28. package/dist/kit/DataTable.js.map +1 -1
  29. package/dist/kit/Editable.d.ts +30 -0
  30. package/dist/kit/Editable.d.ts.map +1 -1
  31. package/dist/kit/Editable.js +150 -3
  32. package/dist/kit/Editable.js.map +1 -1
  33. package/dist/kit/EmptyState.d.ts +9 -2
  34. package/dist/kit/EmptyState.d.ts.map +1 -1
  35. package/dist/kit/EmptyState.js +16 -2
  36. package/dist/kit/EmptyState.js.map +1 -1
  37. package/dist/kit/Facet.d.ts.map +1 -1
  38. package/dist/kit/Facet.js +12 -2
  39. package/dist/kit/Facet.js.map +1 -1
  40. package/dist/kit/GroupedMultiSelect.d.ts +57 -0
  41. package/dist/kit/GroupedMultiSelect.d.ts.map +1 -0
  42. package/dist/kit/GroupedMultiSelect.js +219 -0
  43. package/dist/kit/GroupedMultiSelect.js.map +1 -0
  44. package/dist/kit/List.d.ts +18 -1
  45. package/dist/kit/List.d.ts.map +1 -1
  46. package/dist/kit/List.js +38 -10
  47. package/dist/kit/List.js.map +1 -1
  48. package/dist/kit/LogView.d.ts +39 -3
  49. package/dist/kit/LogView.d.ts.map +1 -1
  50. package/dist/kit/LogView.js +52 -10
  51. package/dist/kit/LogView.js.map +1 -1
  52. package/dist/kit/Marker.d.ts +19 -0
  53. package/dist/kit/Marker.d.ts.map +1 -1
  54. package/dist/kit/Marker.js +50 -0
  55. package/dist/kit/Marker.js.map +1 -1
  56. package/dist/kit/Modal.d.ts +13 -3
  57. package/dist/kit/Modal.d.ts.map +1 -1
  58. package/dist/kit/Modal.js +39 -9
  59. package/dist/kit/Modal.js.map +1 -1
  60. package/dist/kit/Panel.d.ts +21 -0
  61. package/dist/kit/Panel.d.ts.map +1 -1
  62. package/dist/kit/Panel.js +36 -0
  63. package/dist/kit/Panel.js.map +1 -1
  64. package/dist/kit/Picker.d.ts +7 -1
  65. package/dist/kit/Picker.d.ts.map +1 -1
  66. package/dist/kit/Picker.js +11 -2
  67. package/dist/kit/Picker.js.map +1 -1
  68. package/dist/kit/PipelineFlow.d.ts +44 -0
  69. package/dist/kit/PipelineFlow.d.ts.map +1 -0
  70. package/dist/kit/PipelineFlow.js +171 -0
  71. package/dist/kit/PipelineFlow.js.map +1 -0
  72. package/dist/kit/Popover.d.ts.map +1 -1
  73. package/dist/kit/Popover.js +4 -1
  74. package/dist/kit/Popover.js.map +1 -1
  75. package/dist/kit/Range.d.ts.map +1 -1
  76. package/dist/kit/Range.js +8 -2
  77. package/dist/kit/Range.js.map +1 -1
  78. package/dist/kit/Reorder.d.ts +54 -0
  79. package/dist/kit/Reorder.d.ts.map +1 -0
  80. package/dist/kit/Reorder.js +171 -0
  81. package/dist/kit/Reorder.js.map +1 -0
  82. package/dist/kit/Stat.d.ts +38 -5
  83. package/dist/kit/Stat.d.ts.map +1 -1
  84. package/dist/kit/Stat.js +99 -11
  85. package/dist/kit/Stat.js.map +1 -1
  86. package/dist/kit/Tooltip.d.ts.map +1 -1
  87. package/dist/kit/Tooltip.js +5 -2
  88. package/dist/kit/Tooltip.js.map +1 -1
  89. package/dist/theme/ThemeScope.d.ts +30 -0
  90. package/dist/theme/ThemeScope.d.ts.map +1 -0
  91. package/dist/theme/ThemeScope.js +61 -0
  92. package/dist/theme/ThemeScope.js.map +1 -0
  93. package/dist/theme/brand.d.ts +2 -1
  94. package/dist/theme/brand.d.ts.map +1 -1
  95. package/dist/theme/brand.js +10 -6
  96. package/dist/theme/brand.js.map +1 -1
  97. package/dist/theme/scope.d.ts +23 -0
  98. package/dist/theme/scope.d.ts.map +1 -0
  99. package/dist/theme/scope.js +32 -0
  100. package/dist/theme/scope.js.map +1 -0
  101. package/dist/theme/tokens.d.ts +2 -1
  102. package/dist/theme/tokens.d.ts.map +1 -1
  103. package/dist/theme/tokens.js +65 -100
  104. package/dist/theme/tokens.js.map +1 -1
  105. package/package.json +1 -1
@@ -1,9 +1,18 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useEffect, useRef, useState } from "react";
3
3
  import styled from "styled-components";
4
4
  import { v } from "../theme/tokens.js";
5
5
  import { PanelHead, PanelTitle, PanelActions, Panel } from "./Panel.js";
6
6
  import { AppButton } from "./Button.js";
7
+ const pad = (n) => String(n).padStart(2, "0");
8
+ function fmtAt(at) {
9
+ if (typeof at === "string")
10
+ return at;
11
+ const d = at instanceof Date ? at : new Date(at);
12
+ if (Number.isNaN(d.getTime()))
13
+ return "";
14
+ return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
15
+ }
7
16
  const Sur = styled.pre `
8
17
  margin: 0;
9
18
  padding: 12px 16px;
@@ -12,12 +21,14 @@ const Sur = styled.pre `
12
21
  font-family: ${v.mono};
13
22
  font-size: 11.5px;
14
23
  line-height: 1.75;
15
- overflow: auto;
16
- height: ${(p) => p.$h ?? 420}px;
24
+ ${(p) => (p.$flow ? "" : `overflow: auto; height: ${p.$h ?? 420}px;`)}
17
25
  white-space: pre-wrap;
18
26
  word-break: break-word;
19
27
  `;
20
28
  const Ts = styled.span `color: ${v.logDim}; user-select: none;`;
29
+ const levelColor = (l) => (l === "error" ? v.danger : l === "warn" ? v.warning : l === "info" ? v.info : v.logDim);
30
+ const Lvl = styled.span `color: ${(p) => levelColor(p.$l)}; text-transform: uppercase; font-size: 10.5px; letter-spacing: 0.04em;`;
31
+ const Src = styled.span `color: ${v.logDim};`;
21
32
  const Err = styled.span `color: ${v.danger};`;
22
33
  const Rule = styled.div `
23
34
  display: flex; align-items: center; gap: 8px;
@@ -25,17 +36,48 @@ const Rule = styled.div `
25
36
  margin: 4px 0;
26
37
  &::before, &::after { content: ""; flex: 1 1 auto; border-top: 1px dashed ${v.logDim}; opacity: 0.6; }
27
38
  `;
28
- export function LogSurface({ lines, height, follow = true, placeholder = "waiting for output…" }) {
39
+ const Boot = styled.div `
40
+ margin: 6px -16px;
41
+ padding: 3px 16px;
42
+ border-top: 1px solid ${v.logDim};
43
+ border-bottom: 1px solid ${v.logDim};
44
+ color: ${v.logDim};
45
+ font-size: 10.5px;
46
+ letter-spacing: 0.1em;
47
+ text-transform: uppercase;
48
+ `;
49
+ const Fields = styled.span `margin-left: 8px; color: ${v.logDim}; font-size: 10.5px; overflow-wrap: anywhere;`;
50
+ const Older = styled.button `
51
+ display: block;
52
+ width: 100%;
53
+ margin: 0 0 8px;
54
+ padding: 5px;
55
+ border: 1px solid ${v.logDim};
56
+ border-radius: ${v.rCtl};
57
+ background: transparent;
58
+ color: ${v.logText};
59
+ font: inherit;
60
+ font-size: 11px;
61
+ cursor: pointer;
62
+ &:hover:not(:disabled) { background: ${v.hover}; }
63
+ &:disabled { cursor: default; opacity: 0.6; }
64
+ `;
65
+ const Foot = styled.div `margin-top: 8px; color: ${v.logDim}; font-size: 10.5px; text-align: center;`;
66
+ export function LogSurface({ lines, height, flow, order = "oldest-first", follow = true, placeholder = "waiting for output…", onLoadOlder, loadingOlder, olderLabel = "Load older", footer }) {
29
67
  const ref = useRef(null);
68
+ const newest = order === "newest-first";
69
+ const shown = newest ? [...lines].reverse() : lines;
70
+ const older = onLoadOlder ? _jsx(Older, { type: "button", disabled: loadingOlder, onClick: onLoadOlder, style: newest ? { margin: "8px 0 0" } : undefined, children: loadingOlder ? "Loading…" : olderLabel }) : null;
30
71
  useEffect(() => {
31
- if (follow && ref.current)
32
- ref.current.scrollTop = ref.current.scrollHeight;
33
- }, [lines, follow]);
34
- return (_jsxs(Sur, { ref: ref, "$h": height, children: [lines.length === 0 ? _jsx(Ts, { children: placeholder }) : null, lines.map((l, i) => (l.divider ? _jsx(Rule, { "$tone": l.tone, children: l.text }, i) : (_jsxs("div", { children: [l.at ? _jsxs(Ts, { children: [l.at, " "] }) : null, l.stderr ? _jsx(Err, { children: l.text }) : l.text] }, i))))] }));
72
+ if (follow && !flow && ref.current)
73
+ ref.current.scrollTop = newest ? 0 : ref.current.scrollHeight;
74
+ }, [lines, follow, flow, newest]);
75
+ return (_jsxs(Sur, { ref: ref, "$h": height, "$flow": flow, children: [newest ? null : older, lines.length === 0 ? _jsx(Ts, { children: placeholder }) : null, shown.map((l, i) => (l.boot ? _jsx(Boot, { children: l.text }, i) :
76
+ l.divider ? _jsx(Rule, { "$tone": l.tone, children: l.text }, i) : (_jsxs("div", { children: [l.at != null && l.at !== "" ? _jsxs(Ts, { children: [fmtAt(l.at), " "] }) : null, l.level ? _jsxs(_Fragment, { children: [_jsx(Lvl, { "$l": l.level, children: l.level }), " "] }) : null, l.source ? _jsxs(_Fragment, { children: [_jsx(Src, { children: l.source }), " "] }) : null, l.stderr ? _jsx(Err, { children: l.text }) : l.text, l.fields ? _jsx(Fields, { children: Object.entries(l.fields).filter(([, val]) => val != null).map(([k, val]) => `${k}=${String(val)}`).join(" ") }) : null] }, i)))), newest ? older : null, footer ? _jsx(Foot, { children: footer }) : null] }));
35
77
  }
36
78
  /** LogPanel: LogSurface inside a Panel with a follow toggle and status slot. */
37
- export function LogPanel({ title, lines, status, height, actions, placeholder }) {
79
+ export function LogPanel({ title, lines, status, height, flow, order, actions, placeholder, onLoadOlder, loadingOlder, olderLabel, footer }) {
38
80
  const [follow, setFollow] = useState(true);
39
- return (_jsxs(Panel, { children: [_jsxs(PanelHead, { children: [_jsx(PanelTitle, { children: title }), status, _jsxs(PanelActions, { children: [actions, _jsx(AppButton, { size: "xs", variant: follow ? "quiet" : "ghost", onClick: () => setFollow(!follow), children: follow ? "Following" : "Follow" })] })] }), _jsx(LogSurface, { lines: lines, height: height, follow: follow, ...(placeholder !== undefined ? { placeholder } : {}) })] }));
81
+ return (_jsxs(Panel, { children: [_jsxs(PanelHead, { children: [_jsx(PanelTitle, { children: title }), status, _jsxs(PanelActions, { children: [actions, flow ? null : (_jsx(AppButton, { size: "xs", variant: follow ? "quiet" : "ghost", onClick: () => setFollow(!follow), children: follow ? "Following" : "Follow" }))] })] }), _jsx(LogSurface, { lines: lines, height: height, follow: follow, ...(flow !== undefined ? { flow } : {}), ...(order !== undefined ? { order } : {}), ...(placeholder !== undefined ? { placeholder } : {}), onLoadOlder: onLoadOlder, loadingOlder: loadingOlder, ...(olderLabel !== undefined ? { olderLabel } : {}), footer: footer })] }));
40
82
  }
41
83
  //# sourceMappingURL=LogView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LogView.js","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LogView.js","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"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"}
@@ -39,4 +39,23 @@ export declare function PersonChip({ name, email, avatarUrl, size, nameless, emp
39
39
  }): import("react").JSX.Element;
40
40
  /** initials: the one or two letters that stand in for a name or an address. */
41
41
  export declare function initials(name: string): string;
42
+ export interface AvatarStackPerson {
43
+ name?: string | undefined;
44
+ email?: string | undefined;
45
+ avatarUrl?: string | undefined;
46
+ }
47
+ /**
48
+ * AvatarStack: who, several at once — overlapping avatars (picture, else
49
+ * initials) with the surplus past `max` folded into a "+N". It is a single
50
+ * image to assistive tech, labelled with the names (or `label`); hovering an
51
+ * avatar shows that person.
52
+ */
53
+ export declare function AvatarStack({ people, max, size, label }: {
54
+ people: AvatarStackPerson[];
55
+ /** avatars shown before the rest become "+N" */
56
+ max?: number | undefined;
57
+ size?: number | undefined;
58
+ /** the accessible label; defaults to the names, "Ann, Bo and 3 more" */
59
+ label?: string | undefined;
60
+ }): import("react").JSX.Element | null;
42
61
  //# sourceMappingURL=Marker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Marker.d.ts","sourceRoot":"","sources":["../../src/kit/Marker.tsx"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,IAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAEA;AAmBD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAU,EAAE,KAAK,EAAE,EAAE;IACtD,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAQA;AA2BD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAS,EAAE,QAAQ,EAAE,KAAoB,EAAE,EAAE;IAChG,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAgBA;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7C"}
1
+ {"version":3,"file":"Marker.d.ts","sourceRoot":"","sources":["../../src/kit/Marker.tsx"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,IAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAEA;AAmBD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAU,EAAE,KAAK,EAAE,EAAE;IACtD,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAQA;AA2BD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAS,EAAE,QAAQ,EAAE,KAAoB,EAAE,EAAE;IAChG,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAgBA;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAiCD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,GAAO,EAAE,IAAS,EAAE,KAAK,EAAE,EAAE;IACjE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,sCAuBA"}
@@ -96,4 +96,54 @@ export function initials(name) {
96
96
  return parts[0].slice(0, 2).toUpperCase();
97
97
  return (parts[0][0] + parts[1][0]).toUpperCase();
98
98
  }
99
+ const StackWrap = styled.span `
100
+ display: inline-flex;
101
+ align-items: center;
102
+ flex: none;
103
+ > .slot {
104
+ display: inline-grid;
105
+ border-radius: 50%;
106
+ /* opaque ground and a ring, so the translucent avatar fill does not show
107
+ the one underneath and neighbours read as separate */
108
+ background: ${v.surface};
109
+ box-shadow: 0 0 0 2px ${v.surface};
110
+ & + .slot { margin-left: -${(p) => Math.round(p.$size * 0.3)}px; }
111
+ }
112
+ > .more {
113
+ display: inline-grid;
114
+ place-items: center;
115
+ height: ${(p) => p.$size}px;
116
+ min-width: ${(p) => p.$size}px;
117
+ padding: 0 4px;
118
+ box-sizing: border-box;
119
+ margin-left: -${(p) => Math.round(p.$size * 0.3)}px;
120
+ border-radius: 999px;
121
+ background: ${v.hover};
122
+ color: ${v.muted};
123
+ box-shadow: 0 0 0 2px ${v.surface};
124
+ font-size: ${(p) => Math.max(9, Math.round(p.$size * 0.42))}px;
125
+ font-weight: 700;
126
+ font-variant-numeric: tabular-nums;
127
+ }
128
+ `;
129
+ /**
130
+ * AvatarStack: who, several at once — overlapping avatars (picture, else
131
+ * initials) with the surplus past `max` folded into a "+N". It is a single
132
+ * image to assistive tech, labelled with the names (or `label`); hovering an
133
+ * avatar shows that person.
134
+ */
135
+ export function AvatarStack({ people, max = 4, size = 24, label }) {
136
+ if (people.length === 0)
137
+ return null;
138
+ const names = people.map((p) => p.name || p.email || "Unknown");
139
+ const shown = people.slice(0, Math.max(1, max));
140
+ const rest = people.length - shown.length;
141
+ const auto = rest > 0
142
+ ? `${names.slice(0, shown.length).join(", ")} and ${rest} more`
143
+ : names.length > 1 ? `${names.slice(0, -1).join(", ")} and ${names[names.length - 1]}` : names[0];
144
+ return (_jsxs(StackWrap, { "$size": size, role: "img", "aria-label": label ?? auto, children: [shown.map((p, i) => {
145
+ const n = p.name || p.email || "";
146
+ return (_jsx("span", { className: "slot", title: p.email || n || undefined, "aria-hidden": "true", children: _jsx(Avatar, { "$size": size, "$empty": !n, children: !n ? _jsx(Icon, { name: "user", size: Math.round(size * 0.5) }) : p.avatarUrl ? _jsx("img", { src: p.avatarUrl, alt: "" }) : initials(n) }) }, i));
147
+ }), rest > 0 ? _jsxs("span", { className: "more", "aria-hidden": "true", title: names.slice(shown.length).join(", "), children: ["+", rest] }) : null] }));
148
+ }
99
149
  //# sourceMappingURL=Marker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Marker.js","sourceRoot":"","sources":["../../src/kit/Marker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Marker.js","sourceRoot":"","sources":["../../src/kit/Marker.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAY,CAAC;AAElC,8EAA8E;AAC9E,wEAAwE;AACxE,+EAA+E;AAC/E,8DAA8D;AAE9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAgE;;WAEhF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;YACb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;;;IAGtB,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,OAAO;IACP,CAAC,CAAC,GAAG,CAAA,qBAAqB,CAAC,CAAC,IAAI,4BAA4B;IAC5D,CAAC,CAAC,GAAG,CAAA,eAAe,CAAC,CAAC,IAAI,GAAG;CAClC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAKrD;IACC,OAAO,KAAC,OAAO,YAAO,MAAM,IAAI,CAAC,CAAC,KAAK,WAAS,IAAI,aAAW,MAAM,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAC1F,CAAC;AAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAqB;;;;;WAKtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;CAC/C,CAAC;AAEF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAA8B;;;YAGtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;;;aAGV,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;CACrC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,EAKnD;IACC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CACL,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAU,EAAE,KAAK,CAAC,YACrC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAC,GAAG,UAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,SAAO,CAAC,GAAG,EAAE,IAA5C,CAAC,CAA+C,CAAC,GAC5F,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAiD;;;WAGhE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;YACb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;;gBAEV,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;WAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;eACjC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;;;;;CAK5D,CAAC;AAEF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAkC;;;;;;WAMrD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;CAE9C,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,GAAG,YAAY,EAQ7F;IACC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CACL,MAAC,UAAU,oBAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,aACpD,KAAC,MAAM,aAAQ,IAAI,4BAAS,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAI,GAAS,EACtF,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAO,KAAK,GAAQ,IAC5B,CACd,CAAC;IACJ,CAAC;IACD,OAAO,CACL,MAAC,UAAU,IAAC,KAAK,EAAE,KAAK,IAAI,KAAK,aAC/B,KAAC,MAAM,aAAQ,IAAI,YAAG,SAAS,CAAC,CAAC,CAAC,cAAK,GAAG,EAAE,SAAS,EAAE,GAAG,EAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAU,EAC3F,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAO,KAAK,GAAQ,IAC5B,CACd,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACvD,CAAC;AAQD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAmB;;;;;;;;;kBAS9B,CAAC,CAAC,OAAO;4BACC,CAAC,CAAC,OAAO;gCACL,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC;;;;;cAKlD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;iBACX,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;;;oBAGX,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC;;kBAElC,CAAC,CAAC,KAAK;aACZ,CAAC,CAAC,KAAK;4BACQ,CAAC,CAAC,OAAO;iBACpB,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;;;;CAI9D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAO9D;IACC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;QACnB,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO;QAC/D,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;IACrG,OAAO,CACL,MAAC,SAAS,aAAQ,IAAI,EAAE,IAAI,EAAC,KAAK,gBAAa,KAAK,IAAI,IAAI,aACzD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAClB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAClC,OAAO,CACL,eAAc,SAAS,EAAC,MAAM,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,SAAS,iBAAc,MAAM,YACjF,KAAC,MAAM,aAAQ,IAAI,YAAU,CAAC,CAAC,YAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAK,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAChH,IAHA,CAAC,CAIL,CACR,CAAC;YACJ,CAAC,CAAC,EACD,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAM,SAAS,EAAC,MAAM,iBAAa,MAAM,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAI,IAAI,IAAQ,CAAC,CAAC,CAAC,IAAI,IAC9G,CACb,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type ReactNode } from "react";
1
+ import { type FormEvent, type ReactNode } from "react";
2
2
  import { type IconName } from "./Icon.tsx";
3
3
  declare const sizes: {
4
4
  readonly sm: 420;
@@ -8,7 +8,7 @@ declare const sizes: {
8
8
  readonly full: 0;
9
9
  };
10
10
  export type EntityModalSize = keyof typeof sizes;
11
- export declare function EntityModal({ title, sub, icon, size, onClose, dismissable, footer, flush, head, portal, children }: {
11
+ export declare function EntityModal({ title, sub, icon, size, onClose, dismissable, footer, flush, head, portal, onSubmit, children }: {
12
12
  title: string;
13
13
  /** the line under the title: what is being created, or the entity acted on */
14
14
  sub?: ReactNode | undefined;
@@ -36,7 +36,8 @@ export declare function EntityModal({ title, sub, icon, size, onClose, dismissab
36
36
  */
37
37
  head?: boolean | undefined;
38
38
  /**
39
- * Render into document.body rather than in place. Rendered in place, a
39
+ * Render into document.body (inside a ThemeScope, into the scope's host in
40
+ * body, so it keeps the scope's tokens) rather than in place. Rendered in place, a
40
41
  * modal opened from inside a transformed element (a draggable card, an
41
42
  * animated list) is positioned against that element, not the viewport, and
42
43
  * a card with `overflow: hidden` can clip it. Opt-in (1.4) so a modal that
@@ -46,6 +47,15 @@ export declare function EntityModal({ title, sub, icon, size, onClose, dismissab
46
47
  * mounted, so a modal open on first load hydrates without a mismatch.
47
48
  */
48
49
  portal?: boolean | undefined;
50
+ /**
51
+ * Wrap the body and the footer in a <form> with this as its submit (1.5,
52
+ * CON-132), so Enter in a field submits. Give the footer's primary action
53
+ * `type="submit"`: a click then goes through the browser's field validation
54
+ * too, and disabling it disables Enter with it. The default is prevented and
55
+ * the event stops here, so a modal opened from inside another form never
56
+ * submits that one. Without it there is no form, as before.
57
+ */
58
+ onSubmit?: ((e: FormEvent<HTMLFormElement>) => void) | undefined;
49
59
  children: ReactNode;
50
60
  }): import("react").JSX.Element;
51
61
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"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"}
package/dist/kit/Modal.js CHANGED
@@ -1,6 +1,7 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useEffect, useRef, useState, useSyncExternalStore } from "react";
3
3
  import { createPortal } from "react-dom";
4
+ import { usePortalTarget } from "../theme/ThemeScope.js";
4
5
  import styled, { css, keyframes } from "styled-components";
5
6
  import { v } from "../theme/tokens.js";
6
7
  import { Icon } from "./Icon.js";
@@ -78,14 +79,39 @@ const Body = styled.div `
78
79
  > * { flex: 1 1 auto; min-height: 0; }
79
80
  `}
80
81
  `;
81
- export function EntityModal({ title, sub, icon, size = "md", onClose, dismissable = true, footer, flush, head = true, portal, children }) {
82
+ // The form `onSubmit` wraps the body and footer in: it takes the card's place
83
+ // in the column, so the body still scrolls under a pinned footer.
84
+ const ModalForm = styled.form `
85
+ flex: 1 1 auto;
86
+ min-height: 0;
87
+ display: flex;
88
+ flex-direction: column;
89
+ `;
90
+ // Enter in a field submits the form natively only when the form has a submit
91
+ // button (or a lone text field). A footer whose primary is still type=button
92
+ // would leave Enter dead, so in that case the modal submits it itself.
93
+ const ENTER_SUBMITS = /^(text|search|email|url|tel|password|number|date|datetime-local|month|time|week)$/;
94
+ function submitOnEnter(e) {
95
+ const t = e.target;
96
+ if (e.key !== "Enter" || e.defaultPrevented || e.nativeEvent.isComposing)
97
+ return;
98
+ if (!(t instanceof HTMLInputElement) || !ENTER_SUBMITS.test(t.type))
99
+ return;
100
+ if (e.currentTarget.querySelector('button[type="submit"], input[type="submit"]'))
101
+ return;
102
+ e.preventDefault();
103
+ e.currentTarget.requestSubmit();
104
+ }
105
+ export function EntityModal({ title, sub, icon, size = "md", onClose, dismissable = true, footer, flush, head = true, portal, onSubmit, children }) {
82
106
  const ref = useRef(null);
83
107
  // Portal only on the client: the server has no document.body, so it renders
84
108
  // in place, and a hydrating render must match it or hydration fails. The
85
109
  // server snapshot (false) is what hydration renders with; React re-renders
86
110
  // with the client's (true) straight after. A plain client render portals at once.
87
111
  const mounted = useSyncExternalStore(noSubscribe, () => true, () => false);
88
- const portalled = !!portal && mounted;
112
+ // into the nearest ThemeScope's host, so a scoped theme reaches it (CON-148)
113
+ const target = usePortalTarget();
114
+ const portalled = !!portal && mounted && !!target;
89
115
  // Always a layer, so Escape never reaches the drawer under a non-dismissable modal.
90
116
  useEscapeLayer(true, dismissable ? onClose : undefined);
91
117
  // focus goes back to what had it when the modal closes
@@ -98,10 +124,10 @@ export function EntityModal({ title, sub, icon, size = "md", onClose, dismissabl
98
124
  ref.current?.focus();
99
125
  }, [portalled]);
100
126
  const node = (_jsx(Backdrop, { "$full": size === "full", onMouseDown: (e) => { if (dismissable && e.target === e.currentTarget)
101
- onClose(); }, children: _jsxs(Card, { "$size": size, ref: ref, tabIndex: -1, role: "dialog", "aria-modal": "true", "aria-label": title, children: [head ? (_jsxs(Head, { children: [icon ? _jsx(HeadIcon, { children: _jsx(Icon, { name: icon }) }) : null, _jsxs("div", { style: { minWidth: 0 }, children: [_jsx(Title, { children: title }), sub ? _jsx(Sub, { children: sub }) : null] }), dismissable ? (_jsx(IconButton, { onClick: onClose, "aria-label": "Close", style: { marginLeft: "auto" }, children: _jsx(Icon, { name: "close" }) })) : null] })) : null, _jsx(Body, { "$flush": flush, children: children }), footer ? _jsx(Foot, { children: footer }) : null] }) }));
127
+ onClose(); }, children: _jsxs(Card, { "$size": size, ref: ref, tabIndex: -1, role: "dialog", "aria-modal": "true", "aria-label": title, children: [head ? (_jsxs(Head, { children: [icon ? _jsx(HeadIcon, { children: _jsx(Icon, { name: icon }) }) : null, _jsxs("div", { style: { minWidth: 0 }, children: [_jsx(Title, { children: title }), sub ? _jsx(Sub, { children: sub }) : null] }), dismissable ? (_jsx(IconButton, { onClick: onClose, "aria-label": "Close", style: { marginLeft: "auto" }, children: _jsx(Icon, { name: "close" }) })) : null] })) : null, onSubmit ? (_jsxs(ModalForm, { onSubmit: (e) => { e.preventDefault(); e.stopPropagation(); onSubmit(e); }, onKeyDown: submitOnEnter, children: [_jsx(Body, { "$flush": flush, children: children }), footer ? _jsx(Foot, { children: footer }) : null] })) : (_jsxs(_Fragment, { children: [_jsx(Body, { "$flush": flush, children: children }), footer ? _jsx(Foot, { children: footer }) : null] }))] }) }));
102
128
  // in place on the server and the first client render (so hydration matches),
103
129
  // portalled from the effect after mount on
104
- return portalled ? createPortal(node, document.body) : node;
130
+ return portalled && target ? createPortal(node, target) : node;
105
131
  }
106
132
  const HeadIcon = styled.span `
107
133
  width: 34px; height: 34px; flex: none;
@@ -136,7 +162,12 @@ const ConfirmText = styled.p `
136
162
  export function ConfirmDialog({ title, body, actionLabel, typedValue, danger = true, busy, extra, portal, onConfirm, onClose }) {
137
163
  const [typed, setTyped] = useState("");
138
164
  const armed = !typedValue || typed === typedValue;
139
- return (_jsxs(EntityModal, { title: title, size: "sm", onClose: onClose, portal: portal, children: [_jsx(ConfirmText, { children: body }), extra, typedValue ? (_jsxs("div", { style: { margin: "0 0 14px" }, children: [_jsxs(ConfirmText, { style: { marginBottom: 6 }, children: ["Type ", _jsx("b", { children: typedValue }), " to confirm."] }), _jsx(MonoInput, { autoFocus: true, value: typed, onChange: (e) => setTyped(e.target.value), placeholder: typedValue })] })) : null, _jsxs(ButtonRow, { style: { justifyContent: "flex-end" }, children: [_jsx(AppButton, { variant: "quiet", onClick: onClose, children: "Cancel" }), _jsx(AppButton, { variant: danger ? "danger" : "grad", disabled: !armed, loading: busy, onClick: onConfirm, children: actionLabel })] })] }));
165
+ // With a typed name, Enter in that field confirms once it matches, as the
166
+ // button does. Without one there is no field of ours to press it in, and a
167
+ // field a caller put in `extra` must not confirm a destructive action.
168
+ const submit = typedValue ? () => { if (armed && !busy)
169
+ onConfirm(); } : undefined;
170
+ return (_jsxs(EntityModal, { title: title, size: "sm", onClose: onClose, portal: portal, onSubmit: submit, children: [_jsx(ConfirmText, { children: body }), extra, typedValue ? (_jsxs("div", { style: { margin: "0 0 14px" }, children: [_jsxs(ConfirmText, { style: { marginBottom: 6 }, children: ["Type ", _jsx("b", { children: typedValue }), " to confirm."] }), _jsx(MonoInput, { autoFocus: true, value: typed, onChange: (e) => setTyped(e.target.value), placeholder: typedValue })] })) : null, _jsxs(ButtonRow, { style: { justifyContent: "flex-end" }, children: [_jsx(AppButton, { variant: "quiet", onClick: onClose, children: "Cancel" }), _jsx(AppButton, { type: submit ? "submit" : "button", variant: danger ? "danger" : "grad", disabled: !armed, loading: busy, onClick: submit ? undefined : onConfirm, children: actionLabel })] })] }));
140
171
  }
141
172
  /**
142
173
  * PromptDialog: a one-field modal for naming things (new file, rename) — the
@@ -152,11 +183,10 @@ export function PromptDialog({ title, sub, body, label, initial = "", value: con
152
183
  const setValue = (next) => { setLocal(next); onChange?.(next); };
153
184
  const problem = validate ? validate(value) : null;
154
185
  const submit = () => {
155
- if (!value.trim() || problem)
186
+ if (!value.trim() || problem || busy)
156
187
  return;
157
188
  onSubmit(value.trim());
158
189
  };
159
- return (_jsxs(EntityModal, { title: title, sub: sub, size: "sm", onClose: onClose, portal: portal, children: [body ? _jsx(ConfirmText, { children: body }) : null, extra ? _jsx("div", { style: { margin: "0 0 12px" }, children: extra }) : null, _jsxs("div", { style: { margin: "0 0 6px" }, children: [_jsx(ConfirmText, { style: { marginBottom: 6 }, children: label }), _jsx(MonoInput, { ref: inputRef, autoFocus: !readOnly, value: value, readOnly: readOnly, onChange: (e) => setValue(e.target.value), onKeyDown: (e) => { if (e.key === "Enter")
160
- submit(); }, ...(placeholder !== undefined ? { placeholder } : {}) }), problem && value ? _jsx(ConfirmText, { style: { margin: "6px 0 0", color: "var(--x-danger)" }, children: problem }) : null, hint && !(problem && value) ? _jsx(Hint, { style: { margin: "6px 0 0" }, children: hint }) : null] }), _jsxs(ButtonRow, { style: { justifyContent: "flex-end", marginTop: 12 }, children: [_jsx(AppButton, { variant: "quiet", onClick: onClose, children: "Cancel" }), _jsx(AppButton, { variant: "grad", icon: actionIcon, disabled: !value.trim() || !!problem, loading: busy, onClick: submit, children: actionLabel })] })] }));
190
+ return (_jsxs(EntityModal, { title: title, sub: sub, size: "sm", onClose: onClose, portal: portal, onSubmit: submit, children: [body ? _jsx(ConfirmText, { children: body }) : null, extra ? _jsx("div", { style: { margin: "0 0 12px" }, children: extra }) : null, _jsxs("div", { style: { margin: "0 0 6px" }, children: [_jsx(ConfirmText, { style: { marginBottom: 6 }, children: label }), _jsx(MonoInput, { ref: inputRef, autoFocus: !readOnly, value: value, readOnly: readOnly, onChange: (e) => setValue(e.target.value), ...(placeholder !== undefined ? { placeholder } : {}) }), problem && value ? _jsx(ConfirmText, { style: { margin: "6px 0 0", color: "var(--x-danger)" }, children: problem }) : null, hint && !(problem && value) ? _jsx(Hint, { style: { margin: "6px 0 0" }, children: hint }) : null] }), _jsxs(ButtonRow, { style: { justifyContent: "flex-end", marginTop: 12 }, children: [_jsx(AppButton, { variant: "quiet", onClick: onClose, children: "Cancel" }), _jsx(AppButton, { type: "submit", variant: "grad", icon: actionIcon, disabled: !value.trim() || !!problem, loading: busy, children: actionLabel })] })] }));
161
191
  }
162
192
  //# sourceMappingURL=Modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/kit/Modal.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { ReactNode } from "react";
1
2
  /** Panel: the standard bordered surface; brand-tinted inset on the top edge. */
2
3
  export declare const Panel: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, "style"> & {
3
4
  style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
@@ -16,6 +17,26 @@ export declare const PanelBody: import("styled-components/dist/types").IStyledCo
16
17
  }, {
17
18
  $pad?: boolean | undefined;
18
19
  }>> & string;
20
+ /**
21
+ * PanelFooter: the band under a panel's body — a quiet line on the left saying
22
+ * what will happen (`PanelFooter` children), the buttons on the right
23
+ * (`PanelActions`, which pushes itself to the end).
24
+ */
25
+ export declare const PanelFooter: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, "style"> & {
26
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
27
+ }> & string;
28
+ /**
29
+ * PanelSettingRow: one independent fact and its control inside a settings
30
+ * panel — label and description on the left, the control (a Toggle, a Select,
31
+ * a button) on the right. Rows hairline-separate themselves; put them in a
32
+ * `PanelBody $pad={false}` so they sit flush to the panel's edges.
33
+ */
34
+ export declare function PanelSettingRow({ label, description, children }: {
35
+ label: ReactNode;
36
+ description?: ReactNode | undefined;
37
+ /** the control */
38
+ children?: ReactNode | undefined;
39
+ }): import("react").JSX.Element;
19
40
  /** MicroLabel: uppercase mono kicker used for section heads and field labels. */
20
41
  export declare const MicroLabel: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "style"> & {
21
42
  style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,eAAO,MAAM,KAAK;;WAMjB,CAAC;AAEF,eAAO,MAAM,SAAS;;WAQrB,CAAC;AAEF,eAAO,MAAM,UAAU;;WAItB,CAAC;AAEF,eAAO,MAAM,YAAY;;WAKxB,CAAC;AAEF,eAAO,MAAM,SAAS;;;WAAuB,OAAO,GAAG,SAAS;YAE/D,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,UAAU;;WAQtB,CAAC;AAEF;;uBAEuB;AACvB,eAAO,MAAM,WAAW;;WAavB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;gBAA2B,OAAO,GAAG,SAAS;YAIlE,CAAC"}
1
+ {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,gFAAgF;AAChF,eAAO,MAAM,KAAK;;WAMjB,CAAC;AAEF,eAAO,MAAM,SAAS;;WAQrB,CAAC;AAEF,eAAO,MAAM,UAAU;;WAItB,CAAC;AAEF,eAAO,MAAM,YAAY;;WAKxB,CAAC;AAEF,eAAO,MAAM,SAAS;;;WAAuB,OAAO,GAAG,SAAS;YAE/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW;;WAQvB,CAAC;AAeF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE;IAChE,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,kBAAkB;IAClB,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC,+BAUA;AAED,iFAAiF;AACjF,eAAO,MAAM,UAAU;;WAQtB,CAAC;AAEF;;uBAEuB;AACvB,eAAO,MAAM,WAAW;;WAavB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;gBAA2B,OAAO,GAAG,SAAS;YAIlE,CAAC"}
package/dist/kit/Panel.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
2
  import styled from "styled-components";
2
3
  import { v } from "../theme/tokens.js";
3
4
  /** Panel: the standard bordered surface; brand-tinted inset on the top edge. */
@@ -31,6 +32,41 @@ export const PanelActions = styled.div `
31
32
  export const PanelBody = styled.div `
32
33
  padding: ${(p) => (p.$pad === false ? 0 : "14px 16px")};
33
34
  `;
35
+ /**
36
+ * PanelFooter: the band under a panel's body — a quiet line on the left saying
37
+ * what will happen (`PanelFooter` children), the buttons on the right
38
+ * (`PanelActions`, which pushes itself to the end).
39
+ */
40
+ export const PanelFooter = styled.footer `
41
+ display: flex;
42
+ align-items: center;
43
+ gap: 10px;
44
+ padding: 10px 16px;
45
+ border-top: 1px solid ${v.line};
46
+ font-size: 11.5px;
47
+ color: ${v.faint};
48
+ `;
49
+ const SettingRow = styled.div `
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: space-between;
53
+ gap: 16px;
54
+ padding: 12px 16px;
55
+ & + & { border-top: 1px solid ${v.line}; }
56
+ .text { min-width: 0; flex: 1 1 auto; }
57
+ .label { font-size: 12.5px; font-weight: 600; }
58
+ .desc { margin-top: 2px; font-size: 11.5px; color: ${v.faint}; line-height: 1.45; }
59
+ .control { flex: none; display: flex; align-items: center; gap: 8px; }
60
+ `;
61
+ /**
62
+ * PanelSettingRow: one independent fact and its control inside a settings
63
+ * panel — label and description on the left, the control (a Toggle, a Select,
64
+ * a button) on the right. Rows hairline-separate themselves; put them in a
65
+ * `PanelBody $pad={false}` so they sit flush to the panel's edges.
66
+ */
67
+ export function PanelSettingRow({ label, description, children }) {
68
+ return (_jsxs(SettingRow, { children: [_jsxs("div", { className: "text", children: [_jsx("div", { className: "label", children: label }), description ? _jsx("div", { className: "desc", children: description }) : null] }), children ? _jsx("div", { className: "control", children: children }) : null] }));
69
+ }
34
70
  /** MicroLabel: uppercase mono kicker used for section heads and field labels. */
35
71
  export const MicroLabel = styled.span `
36
72
  display: block;
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,gFAAgF;AAChF,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAA;gBACnB,CAAC,CAAC,OAAO;sBACH,CAAC,CAAC,IAAI;mBACT,CAAC,CAAC,MAAM;gCACK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI;;CAEnD,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;6BAKT,CAAC,CAAC,IAAI;;;CAGlC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAA;;;;CAIlC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;CAKrC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAgC;aACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;CACvD,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAA;;iBAEpB,CAAC,CAAC,IAAI;;;;;WAKZ,CAAC,CAAC,KAAK;CACjB,CAAC;AAEF;;uBAEuB;AACvB,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAA;;;;WAIzB,CAAC,CAAC,KAAK;;;;;;;;;CASjB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAqC;;;IAGlE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,IAAI,gDAAgD,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,GAAG,CAAC;CAC/I,CAAC"}
1
+ {"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,gFAAgF;AAChF,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAA;gBACnB,CAAC,CAAC,OAAO;sBACH,CAAC,CAAC,IAAI;mBACT,CAAC,CAAC,MAAM;gCACK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI;;CAEnD,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;6BAKT,CAAC,CAAC,IAAI;;;CAGlC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAA;;;;CAIlC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;CAKrC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAgC;aACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;CACvD,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;0BAKd,CAAC,CAAC,IAAI;;WAErB,CAAC,CAAC,KAAK;CACjB,CAAC;AAEF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;kCAMK,CAAC,CAAC,IAAI;;;uDAGe,CAAC,CAAC,KAAK;;CAE7D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAK7D;IACC,OAAO,CACL,MAAC,UAAU,eACT,eAAK,SAAS,EAAC,MAAM,aACnB,cAAK,SAAS,EAAC,OAAO,YAAE,KAAK,GAAO,EACnC,WAAW,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,MAAM,YAAE,WAAW,GAAO,CAAC,CAAC,CAAC,IAAI,IAC3D,EACL,QAAQ,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,SAAS,YAAE,QAAQ,GAAO,CAAC,CAAC,CAAC,IAAI,IACjD,CACd,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAA;;iBAEpB,CAAC,CAAC,IAAI;;;;;WAKZ,CAAC,CAAC,KAAK;CACjB,CAAC;AAEF;;uBAEuB;AACvB,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAA;;;;WAIzB,CAAC,CAAC,KAAK;;;;;;;;;CASjB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAqC;;;IAGlE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,IAAI,gDAAgD,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,GAAG,CAAC;CAC/I,CAAC"}
@@ -37,11 +37,17 @@ export interface PickerProps<T> {
37
37
  * (between Button `sm` 30 and `xs` 26); `md` (default) is the 32px field.
38
38
  */
39
39
  size?: "sm" | "md" | undefined;
40
+ /**
41
+ * Below 700px the list is a bottom sheet across the screen rather than a
42
+ * dropdown hung from the control (default true). Turn it off for a Picker
43
+ * already inside a bottom sheet of its own.
44
+ */
45
+ sheet?: boolean | undefined;
40
46
  }
41
47
  /**
42
48
  * Picker: choose one from a list whose options can say more than a word.
43
49
  * The kit's replacement for `Select`. Options are `ComboOption`s, so a list
44
50
  * built for Combobox works here unchanged.
45
51
  */
46
- export declare function Picker<T>({ options, value, onChange, placeholder, label, id, disabled, searchable, loading, emptyNote, name, width, size, }: PickerProps<T>): import("react").JSX.Element;
52
+ export declare function Picker<T>({ options, value, onChange, placeholder, label, id, disabled, searchable, loading, emptyNote, name, width, size, sheet, }: PickerProps<T>): import("react").JSX.Element;
47
53
  //# sourceMappingURL=Picker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Picker.d.ts","sourceRoot":"","sources":["../../src/kit/Picker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAO/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AASlD,MAAM,WAAW,YAAY,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IACrD,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,sEAAsE;IACtE,cAAc,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACvC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AA4ED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,gDAAgD;IAChD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC1C,oCAAoC;IACpC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,kEAAkE;IAClE,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;CAChC;AAKD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,EACxB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAW,GACjI,EAAE,WAAW,CAAC,CAAC,CAAC,+BAmMhB"}
1
+ {"version":3,"file":"Picker.d.ts","sourceRoot":"","sources":["../../src/kit/Picker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAO/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AASlD,MAAM,WAAW,YAAY,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IACrD,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,sEAAsE;IACtE,cAAc,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACvC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAsFD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,gDAAgD;IAChD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC1C,oCAAoC;IACpC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,kEAAkE;IAClE,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/B;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B;AAKD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,EACxB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAW,EAAE,KAAY,GAC/I,EAAE,WAAW,CAAC,CAAC,CAAC,+BAmMhB"}
@@ -30,6 +30,15 @@ const List = styled.div `
30
30
  border-radius: ${v.rCard};
31
31
  box-shadow: ${v.elev};
32
32
  overflow: hidden;
33
+ ${(p) => p.$sheet &&
34
+ css `
35
+ @media (max-width: 700px) {
36
+ width: 100% !important;
37
+ max-height: 70vh;
38
+ border-radius: ${v.rCard} ${v.rCard} 0 0;
39
+ border-bottom: none;
40
+ }
41
+ `}
33
42
  `;
34
43
  const Rows = styled.div `
35
44
  overflow-y: auto;
@@ -79,7 +88,7 @@ const enabled = (o) => !!o && !o.disabled;
79
88
  * The kit's replacement for `Select`. Options are `ComboOption`s, so a list
80
89
  * built for Combobox works here unchanged.
81
90
  */
82
- export function Picker({ options, value, onChange, placeholder = "Choose…", label, id, disabled, searchable, loading, emptyNote, name, width, size = "md", }) {
91
+ export function Picker({ options, value, onChange, placeholder = "Choose…", label, id, disabled, searchable, loading, emptyNote, name, width, size = "md", sheet = true, }) {
83
92
  const field = useField();
84
93
  const [open, setOpen] = useState(false);
85
94
  const [query, setQuery] = useState("");
@@ -220,7 +229,7 @@ export function Picker({ options, value, onChange, placeholder = "Choose…", la
220
229
  // keep focus on the trigger or search box, so the keyboard carries on
221
230
  onMouseDown: (e) => e.preventDefault(), onClick: () => pick(i), children: [_jsx("span", { className: "tick", children: isPicked ? _jsx(Icon, { name: "check" }) : null }), _jsxs("span", { className: "body", children: [_jsx("span", { children: o.render }), o.hint ? _jsx("span", { className: "hint", children: o.hint }) : null] })] }, o.key));
222
231
  });
223
- return (_jsxs(Wrap, { ref: wrap, children: [_jsxs(Trigger, { ref: trigger, type: "button", id: id, role: "combobox", "aria-label": label, "aria-labelledby": labelledBy, "aria-haspopup": "listbox", "aria-expanded": open, "aria-controls": open ? listId : undefined, "aria-activedescendant": open && !searchable && active >= 0 ? optId(active) : undefined, "aria-invalid": field?.invalid || undefined, "aria-describedby": field?.describedBy, disabled: disabled, "$placeholder": !picked, "$size": size, onClick: () => (open ? close(false) : openAt()), onKeyDown: onKey, children: [_jsx("span", { className: "val", children: picked ? (picked.selectedRender ?? picked.render) : placeholder }), _jsx("span", { className: "caret", children: loading ? _jsx(Icon, { name: "spinner", spin: true }) : _jsx(Icon, { name: "chevron-down" }) })] }), name !== undefined ? _jsx("input", { type: "hidden", name: name, value: value ?? "" }) : null, open ? (_jsx(Anchored, { anchor: wrap, align: width ? "left" : "stretch", gap: 5, layerRef: layer, children: _jsxs(List, { style: width ? { width } : undefined, children: [searchable ? (_jsx(Find, { ref: find, value: query, placeholder: "Search\u2026", "aria-label": "Search options", "aria-controls": listId, "aria-activedescendant": active >= 0 ? optId(active) : undefined, autoComplete: "off", onChange: (e) => {
232
+ return (_jsxs(Wrap, { ref: wrap, children: [_jsxs(Trigger, { ref: trigger, type: "button", id: id, role: "combobox", "aria-label": label, "aria-labelledby": labelledBy, "aria-haspopup": "listbox", "aria-expanded": open, "aria-controls": open ? listId : undefined, "aria-activedescendant": open && !searchable && active >= 0 ? optId(active) : undefined, "aria-invalid": field?.invalid || undefined, "aria-describedby": field?.describedBy, disabled: disabled, "$placeholder": !picked, "$size": size, onClick: () => (open ? close(false) : openAt()), onKeyDown: onKey, children: [_jsx("span", { className: "val", children: picked ? (picked.selectedRender ?? picked.render) : placeholder }), _jsx("span", { className: "caret", children: loading ? _jsx(Icon, { name: "spinner", spin: true }) : _jsx(Icon, { name: "chevron-down" }) })] }), name !== undefined ? _jsx("input", { type: "hidden", name: name, value: value ?? "" }) : null, open ? (_jsx(Anchored, { anchor: wrap, align: width ? "left" : "stretch", gap: 5, layerRef: layer, sheet: sheet, children: _jsxs(List, { "$sheet": sheet, style: width ? { width } : undefined, children: [searchable ? (_jsx(Find, { ref: find, value: query, placeholder: "Search\u2026", "aria-label": "Search options", "aria-controls": listId, "aria-activedescendant": active >= 0 ? optId(active) : undefined, autoComplete: "off", onChange: (e) => {
224
233
  setQuery(e.target.value);
225
234
  const nq = e.target.value.trim().toLowerCase();
226
235
  const next = nq ? options.filter((o) => textOf(o).includes(nq)) : options;