@xeonr/platform-ui 0.3.10 → 0.3.12

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 (45) hide show
  1. package/dist/index.d.ts +5 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +10 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/kit/Badge.d.ts +4 -1
  6. package/dist/kit/Badge.d.ts.map +1 -1
  7. package/dist/kit/Badge.js +15 -1
  8. package/dist/kit/Badge.js.map +1 -1
  9. package/dist/kit/Board.d.ts +45 -0
  10. package/dist/kit/Board.d.ts.map +1 -0
  11. package/dist/kit/Board.js +131 -0
  12. package/dist/kit/Board.js.map +1 -0
  13. package/dist/kit/Chip.d.ts +5 -2
  14. package/dist/kit/Chip.d.ts.map +1 -1
  15. package/dist/kit/Chip.js +15 -5
  16. package/dist/kit/Chip.js.map +1 -1
  17. package/dist/kit/Comment.d.ts +27 -0
  18. package/dist/kit/Comment.d.ts.map +1 -0
  19. package/dist/kit/Comment.js +52 -0
  20. package/dist/kit/Comment.js.map +1 -0
  21. package/dist/kit/Editable.d.ts +15 -0
  22. package/dist/kit/Editable.d.ts.map +1 -0
  23. package/dist/kit/Editable.js +66 -0
  24. package/dist/kit/Editable.js.map +1 -0
  25. package/dist/kit/Markdown.d.ts +28 -0
  26. package/dist/kit/Markdown.d.ts.map +1 -0
  27. package/dist/kit/Markdown.js +83 -0
  28. package/dist/kit/Markdown.js.map +1 -0
  29. package/dist/kit/Marker.d.ts +42 -0
  30. package/dist/kit/Marker.d.ts.map +1 -0
  31. package/dist/kit/Marker.js +99 -0
  32. package/dist/kit/Marker.js.map +1 -0
  33. package/dist/kit/Split.d.ts +31 -0
  34. package/dist/kit/Split.d.ts.map +1 -0
  35. package/dist/kit/Split.js +47 -0
  36. package/dist/kit/Split.js.map +1 -0
  37. package/dist/kit/Stat.d.ts +6 -1
  38. package/dist/kit/Stat.d.ts.map +1 -1
  39. package/dist/kit/Stat.js +31 -3
  40. package/dist/kit/Stat.js.map +1 -1
  41. package/dist/markdown.d.ts +2 -0
  42. package/dist/markdown.d.ts.map +1 -0
  43. package/dist/markdown.js +7 -0
  44. package/dist/markdown.js.map +1 -0
  45. package/package.json +17 -3
package/dist/index.d.ts CHANGED
@@ -34,4 +34,9 @@ export { ChoiceGroup, ChoiceCard } from "./kit/Choice.tsx";
34
34
  export { JumpList, type JumpGroup, type JumpItem } from "./kit/JumpList.tsx";
35
35
  export { Popover, PopoverHead, PopoverBody, PopoverFoot, PopoverGroup, type PopoverProps } from "./kit/Popover.tsx";
36
36
  export { DataGrid, type DataGridProps, type GridColumn, type GridColumnAction, type GridCell, type GridRow, } from "./kit/DataGrid.tsx";
37
+ export { Split, type SplitRatio } from "./kit/Split.tsx";
38
+ export { Dot, LevelBars, PersonChip, initials } from "./kit/Marker.tsx";
39
+ export { CommentList, Comment, CommentComposer } from "./kit/Comment.tsx";
40
+ export { Board, BoardCardLine, BoardCardTitle, BoardCardFoot, type BoardLane } from "./kit/Board.tsx";
41
+ export { EditableTitle } from "./kit/Editable.tsx";
37
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -53,4 +53,14 @@ export { JumpList } from "./kit/JumpList.js";
53
53
  // query's rather than the product's.
54
54
  export { Popover, PopoverHead, PopoverBody, PopoverFoot, PopoverGroup } from "./kit/Popover.js";
55
55
  export { DataGrid, } from "./kit/DataGrid.js";
56
+ // Added for the Trellis adoption (2026-09-26): the markers a tracker's rows
57
+ // need, the explicit page split four consoles had each written, the discussion
58
+ // thread, the lane board, and rename-in-place.
59
+ export { Split } from "./kit/Split.js";
60
+ export { Dot, LevelBars, PersonChip, initials } from "./kit/Marker.js";
61
+ export { CommentList, Comment, CommentComposer } from "./kit/Comment.js";
62
+ export { Board, BoardCardLine, BoardCardTitle, BoardCardFoot } from "./kit/Board.js";
63
+ export { EditableTitle } from "./kit/Editable.js";
64
+ // The markdown surface is `@xeonr/platform-ui/markdown` — its own entry point,
65
+ // so react-markdown stays an optional peer.
56
66
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,15 @@ export declare const StatusPill: import("styled-components/dist/types").IStyledC
7
7
  $live?: boolean | undefined;
8
8
  $loud?: boolean | undefined;
9
9
  }>> & string;
10
- /** Tag: small mono chip for technical strings (kinds, commits, roles). */
10
+ /** Tag: small mono chip for technical strings (kinds, commits, roles).
11
+ * `$dot` is a leading dot in a colour the product chose — a label, a
12
+ * user-named category, anything whose colour is data rather than a verdict. */
11
13
  export declare const Tag: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "style"> & {
12
14
  style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
13
15
  }, {
14
16
  $tone?: Tone | undefined;
15
17
  $dashed?: boolean | undefined;
18
+ $dot?: string | undefined;
16
19
  }>> & string;
17
20
  /** InitialsTile: a gradient square with initials — a team or product mark in a list. */
18
21
  export declare const InitialsTile: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "style"> & {
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/kit/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAiBtF,eAAO,MAAM,UAAU;;;WAAwB,IAAI;YAAU,OAAO,GAAG,SAAS;YAAU,OAAO,GAAG,SAAS;YA2C5G,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,GAAG;;;YAAyB,IAAI,GAAG,SAAS;cAAY,OAAO,GAAG,SAAS;YAiBvF,CAAC;AAGF,wFAAwF;AACxF,eAAO,MAAM,YAAY;;;YAAyB,MAAM,GAAG,SAAS;YAQnE,CAAC;AASF,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IACxF,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,qBAOA;AAED,eAAO,MAAM,OAAO;;;YAAsB,IAAI,GAAG,SAAS;YAMzD,CAAC"}
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/kit/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAiBtF,eAAO,MAAM,UAAU;;;WAAwB,IAAI;YAAU,OAAO,GAAG,SAAS;YAAU,OAAO,GAAG,SAAS;YA2C5G,CAAC;AAEF;;gFAEgF;AAChF,eAAO,MAAM,GAAG;;;YAAyB,IAAI,GAAG,SAAS;cAAY,OAAO,GAAG,SAAS;WAAS,MAAM,GAAG,SAAS;YA8BlH,CAAC;AAGF,wFAAwF;AACxF,eAAO,MAAM,YAAY;;;YAAyB,MAAM,GAAG,SAAS;YAQnE,CAAC;AASF,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IACxF,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,qBAOA;AAED,eAAO,MAAM,OAAO;;;YAAsB,IAAI,GAAG,SAAS;YAMzD,CAAC"}
package/dist/kit/Badge.js CHANGED
@@ -56,7 +56,9 @@ export const StatusPill = styled.span `
56
56
  }
57
57
  `}
58
58
  `;
59
- /** Tag: small mono chip for technical strings (kinds, commits, roles). */
59
+ /** Tag: small mono chip for technical strings (kinds, commits, roles).
60
+ * `$dot` is a leading dot in a colour the product chose — a label, a
61
+ * user-named category, anything whose colour is data rather than a verdict. */
60
62
  export const Tag = styled.span `
61
63
  display: inline-flex;
62
64
  align-items: center;
@@ -73,6 +75,18 @@ export const Tag = styled.span `
73
75
  overflow: hidden;
74
76
  text-overflow: ellipsis;
75
77
  ${(p) => (p.$tone ? css `border-color: transparent; ${tones[p.$tone]}` : "")}
78
+ ${(p) => p.$dot &&
79
+ css `
80
+ font-family: ${v.font};
81
+ font-size: 11px;
82
+ font-weight: 600;
83
+ padding-left: 6px;
84
+ &::before {
85
+ content: "";
86
+ width: 7px; height: 7px; border-radius: 50%; flex: none;
87
+ background: ${p.$dot};
88
+ }
89
+ `}
76
90
  ${(p) => p.$dashed && css `background: transparent; border-style: dashed; border-color: currentColor; letter-spacing: 0.08em; text-transform: uppercase; font-size: 9px; font-weight: 600;`}
77
91
  `;
78
92
  const dotPulse = keyframes `50% { opacity: 0.4; }`;
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../src/kit/Badge.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../src/kit/Badge.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { ReactNode } from "react";
2
+ /** BoardLane: one column. `leading` is usually a `Dot` in the state's colour. */
3
+ export interface BoardLane {
4
+ id: string;
5
+ label: ReactNode;
6
+ leading?: ReactNode | undefined;
7
+ /** overrides the card count the board derives */
8
+ count?: number | undefined;
9
+ /** what an empty lane says; a dash by default */
10
+ empty?: ReactNode | undefined;
11
+ }
12
+ /**
13
+ * Board: cards in lanes, dragged between and within them.
14
+ *
15
+ * Items are rendered in the order given, so the product sorts them; a drop
16
+ * calls `onDrop(item, laneId, before)` where `before` is the card the dragged
17
+ * one was dropped onto (null = the end of the lane). Dropping a card back where
18
+ * it already is does not fire.
19
+ */
20
+ export declare function Board<T>({ lanes, items, itemKey, itemLane, renderItem, onDrop, onOpen, laneWidth, minHeight, draggable }: {
21
+ lanes: BoardLane[];
22
+ items: T[];
23
+ itemKey: (item: T) => string;
24
+ itemLane: (item: T) => string;
25
+ renderItem: (item: T) => ReactNode;
26
+ /** absent = read-only: nothing drags */
27
+ onDrop?: ((item: T, laneId: string, before: T | null) => void) | undefined;
28
+ onOpen?: ((item: T) => void) | undefined;
29
+ laneWidth?: number | undefined;
30
+ minHeight?: string | undefined;
31
+ draggable?: boolean | undefined;
32
+ }): import("react").JSX.Element;
33
+ /** BoardCardLine: the mono key line at the top of a card. */
34
+ export declare const BoardCardLine: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
35
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
36
+ }> & string;
37
+ /** BoardCardTitle: the card's one or two lines of human text. */
38
+ export declare const BoardCardTitle: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
39
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
40
+ }> & string;
41
+ /** BoardCardFoot: chips and an avatar along the bottom; the last child sits right. */
42
+ export declare const BoardCardFoot: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
43
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
44
+ }> & string;
45
+ //# sourceMappingURL=Board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Board.d.ts","sourceRoot":"","sources":["../../src/kit/Board.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AA8DvC,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,iDAAiD;IACjD,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAe,EAAE,SAAkB,EAAE,SAAgB,EAAE,EAAE;IAC/I,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC7B,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC9B,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IACnC,wCAAwC;IACxC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3E,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC,+BAmEA;AAED,6DAA6D;AAC7D,eAAO,MAAM,aAAa;;WAQzB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,cAAc;;WAI1B,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,aAAa;;WAMzB,CAAC"}
@@ -0,0 +1,131 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import styled from "styled-components";
4
+ import { v } from "../theme/tokens.js";
5
+ // A lane board: one column per state, cards dragged between them. The kit owns
6
+ // the chrome and the drag mechanics — what a drop *means* is the product's, so
7
+ // `onDrop` hands back the lane and the card the dragged one landed before, and
8
+ // the product decides what that does to its ordering.
9
+ const Lanes = styled.div `
10
+ display: flex;
11
+ gap: 12px;
12
+ align-items: flex-start;
13
+ overflow-x: auto;
14
+ padding-bottom: 12px;
15
+ `;
16
+ const LaneBox = styled.section `
17
+ flex: 0 0 ${(p) => p.$w}px;
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: 8px;
21
+ padding: 8px;
22
+ border-radius: ${v.rPanel};
23
+ background: ${(p) => (p.$over ? v.brand08 : v.surface2)};
24
+ border: 1px solid ${(p) => (p.$over ? v.brand55 : v.line)};
25
+ transition: background 0.12s ease, border-color 0.12s ease;
26
+ min-height: 120px;
27
+ `;
28
+ const LaneHead = styled.header `
29
+ display: flex;
30
+ align-items: center;
31
+ gap: 8px;
32
+ padding: 4px 6px 2px;
33
+ font-size: 12px;
34
+ font-weight: 600;
35
+ min-width: 0;
36
+ > .label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
37
+ > .count { margin-left: auto; color: ${v.faint}; font-variant-numeric: tabular-nums; font-weight: 500; }
38
+ `;
39
+ const CardBox = styled.article `
40
+ display: flex;
41
+ flex-direction: column;
42
+ gap: 7px;
43
+ padding: 10px 11px;
44
+ border-radius: ${v.rCard};
45
+ background: ${v.surface};
46
+ border: 1px solid ${(p) => (p.$target ? v.brand55 : v.line2)};
47
+ box-shadow: ${(p) => (p.$target ? `0 0 0 3px ${v.brand08}` : "none")};
48
+ opacity: ${(p) => (p.$dragging ? 0.4 : 1)};
49
+ cursor: ${(p) => (p.$grab ? "grab" : p.$click ? "pointer" : "default")};
50
+ &:hover { border-color: ${v.brand55}; }
51
+ `;
52
+ const LaneEmpty = styled.div `
53
+ padding: 16px 8px;
54
+ text-align: center;
55
+ font-size: 11.5px;
56
+ color: ${v.faint};
57
+ `;
58
+ /**
59
+ * Board: cards in lanes, dragged between and within them.
60
+ *
61
+ * Items are rendered in the order given, so the product sorts them; a drop
62
+ * calls `onDrop(item, laneId, before)` where `before` is the card the dragged
63
+ * one was dropped onto (null = the end of the lane). Dropping a card back where
64
+ * it already is does not fire.
65
+ */
66
+ export function Board({ lanes, items, itemKey, itemLane, renderItem, onDrop, onOpen, laneWidth = 272, minHeight = "60vh", draggable = true }) {
67
+ const [dragging, setDragging] = useState(null);
68
+ const [overLane, setOverLane] = useState(null);
69
+ const [overCard, setOverCard] = useState(null);
70
+ const movable = draggable && !!onDrop;
71
+ const byLane = new Map(lanes.map((l) => [l.id, []]));
72
+ for (const it of items)
73
+ byLane.get(itemLane(it))?.push(it);
74
+ const clear = () => { setDragging(null); setOverLane(null); setOverCard(null); };
75
+ const drop = (laneId, beforeKey) => {
76
+ const item = items.find((x) => itemKey(x) === dragging);
77
+ clear();
78
+ if (!item || !onDrop)
79
+ return;
80
+ const lane = byLane.get(laneId) ?? [];
81
+ const before = beforeKey ? lane.find((x) => itemKey(x) === beforeKey) ?? null : null;
82
+ if (before && itemKey(before) === itemKey(item))
83
+ return;
84
+ if (!before && itemLane(item) === laneId && lane[lane.length - 1] && itemKey(lane[lane.length - 1]) === itemKey(item))
85
+ return;
86
+ onDrop(item, laneId, before);
87
+ };
88
+ return (_jsx(Lanes, { style: { minHeight }, children: lanes.map((l) => {
89
+ const lane = byLane.get(l.id) ?? [];
90
+ return (_jsxs(LaneBox, { "$w": laneWidth, "$over": overLane === l.id && !overCard, onDragOver: (e) => { if (dragging) {
91
+ e.preventDefault();
92
+ setOverLane(l.id);
93
+ } }, onDragLeave: () => setOverLane((cur) => (cur === l.id ? null : cur)), onDrop: (e) => { if (!dragging)
94
+ return; e.preventDefault(); drop(l.id, null); }, children: [_jsxs(LaneHead, { children: [l.leading, _jsx("span", { className: "label", children: l.label }), _jsx("span", { className: "count", children: l.count ?? lane.length })] }), lane.length === 0 ? _jsx(LaneEmpty, { children: l.empty ?? "—" }) : null, lane.map((it) => {
95
+ const k = itemKey(it);
96
+ return (_jsx(CardBox, { draggable: movable, "$grab": movable, "$click": !!onOpen, "$dragging": dragging === k, "$target": overCard === k && dragging !== k, onDragStart: (e) => { setDragging(k); e.dataTransfer.effectAllowed = "move"; }, onDragEnd: clear, onDragOver: (e) => { if (dragging && dragging !== k) {
97
+ e.preventDefault();
98
+ e.stopPropagation();
99
+ setOverCard(k);
100
+ setOverLane(l.id);
101
+ } }, onDragLeave: () => setOverCard((cur) => (cur === k ? null : cur)), onDrop: (e) => { if (!dragging)
102
+ return; e.preventDefault(); e.stopPropagation(); drop(l.id, k); }, ...(onOpen ? { onClick: () => onOpen(it), role: "button", tabIndex: 0, onKeyDown: (e) => { if (e.key === "Enter")
103
+ onOpen(it); } } : {}), children: renderItem(it) }, k));
104
+ })] }, l.id));
105
+ }) }));
106
+ }
107
+ /** BoardCardLine: the mono key line at the top of a card. */
108
+ export const BoardCardLine = styled.div `
109
+ display: flex;
110
+ align-items: center;
111
+ gap: 8px;
112
+ font-family: ${v.mono};
113
+ font-size: 10.5px;
114
+ font-weight: 600;
115
+ color: ${v.faint};
116
+ `;
117
+ /** BoardCardTitle: the card's one or two lines of human text. */
118
+ export const BoardCardTitle = styled.div `
119
+ font-size: 12.5px;
120
+ font-weight: 600;
121
+ line-height: 1.35;
122
+ `;
123
+ /** BoardCardFoot: chips and an avatar along the bottom; the last child sits right. */
124
+ export const BoardCardFoot = styled.div `
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 6px;
128
+ flex-wrap: wrap;
129
+ > :last-child { margin-left: auto; }
130
+ `;
131
+ //# sourceMappingURL=Board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Board.js","sourceRoot":"","sources":["../../src/kit/Board.tsx"],"names":[],"mappings":"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"}
@@ -14,12 +14,15 @@ export declare function FilterField({ label, wide, width, children }: {
14
14
  width?: number | undefined;
15
15
  children: ReactNode;
16
16
  }): import("react").JSX.Element;
17
- /** Chip: a toggle (filters, presets, multi-select). */
18
- export declare function Chip({ on, onToggle, mono, count, disabled, children, ...rest }: {
17
+ /** Chip: a toggle (filters, presets, multi-select). `dot` is a leading dot in
18
+ * a colour the product chose, for values that carry one — a label, a tag. */
19
+ export declare function Chip({ on, onToggle, mono, count, dot, disabled, children, ...rest }: {
19
20
  on: boolean;
20
21
  onToggle: () => void;
21
22
  mono?: boolean | undefined;
22
23
  count?: number | string | undefined;
24
+ /** a CSS colour (a theme token, never a literal) shown as a leading dot */
25
+ dot?: string | undefined;
23
26
  disabled?: boolean | undefined;
24
27
  children: ReactNode;
25
28
  title?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Chip.d.ts","sourceRoot":"","sources":["../../src/kit/Chip.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC;;yEAEyE;AACzE,eAAO,MAAM,SAAS;;;cAA0B,OAAO,GAAG,SAAS;YAOlE,CAAC;AAQF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC5D,KAAK,EAAE,SAAS,CAAC;IACjB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAOA;AA0BD,uDAAuD;AACvD,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE;IAC/E,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAOA;AAYD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAOA"}
1
+ {"version":3,"file":"Chip.d.ts","sourceRoot":"","sources":["../../src/kit/Chip.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC;;yEAEyE;AACzE,eAAO,MAAM,SAAS;;;cAA0B,OAAO,GAAG,SAAS;YAOlE,CAAC;AAQF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC5D,KAAK,EAAE,SAAS,CAAC;IACjB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAOA;AAoCD;8EAC8E;AAC9E,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE;IACpF,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAOA;AAYD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAOA"}
package/dist/kit/Chip.js CHANGED
@@ -35,8 +35,17 @@ const chipCss = css `
35
35
  font-size: 11.5px;
36
36
  font-weight: 600;
37
37
  ${(p) => p.$mono && css `font-family: ${v.mono}; font-weight: 500;`}
38
- border: 1px solid ${(p) => (p.$on ? v.brand55 : v.line2)};
39
- background: ${(p) => (p.$on ? v.brand12 : "transparent")};
38
+ border: 1px solid ${(p) => (p.$dot && p.$on ? p.$dot : p.$on ? v.brand55 : v.line2)};
39
+ background: ${(p) => (p.$on ? (p.$dot ? v.hover : v.brand12) : "transparent")};
40
+ ${(p) => p.$dot &&
41
+ css `
42
+ &::before {
43
+ content: "";
44
+ width: 7px; height: 7px; border-radius: 50%; flex: none;
45
+ background: ${p.$dot};
46
+ opacity: ${p.$on ? 1 : 0.5};
47
+ }
48
+ `}
40
49
  color: ${(p) => (p.$on ? v.text : v.muted)};
41
50
  cursor: pointer;
42
51
  white-space: nowrap;
@@ -46,9 +55,10 @@ const chipCss = css `
46
55
  .count { font-size: 10.5px; color: ${v.faint}; font-variant-numeric: tabular-nums; }
47
56
  `;
48
57
  const ChipBtn = styled.button `${chipCss}`;
49
- /** Chip: a toggle (filters, presets, multi-select). */
50
- export function Chip({ on, onToggle, mono, count, disabled, children, ...rest }) {
51
- return (_jsxs(ChipBtn, { type: "button", role: "switch", "aria-checked": on, onClick: onToggle, "$on": on, "$mono": mono, disabled: disabled, ...rest, children: [children, count !== undefined ? _jsx("span", { className: "count", children: count }) : null] }));
58
+ /** Chip: a toggle (filters, presets, multi-select). `dot` is a leading dot in
59
+ * a colour the product chose, for values that carry one — a label, a tag. */
60
+ export function Chip({ on, onToggle, mono, count, dot, disabled, children, ...rest }) {
61
+ return (_jsxs(ChipBtn, { type: "button", role: "switch", "aria-checked": on, onClick: onToggle, "$on": on, "$mono": mono, "$dot": dot, disabled: disabled, ...rest, children: [children, count !== undefined ? _jsx("span", { className: "count", children: count }) : null] }));
52
62
  }
53
63
  /** EditableChip: a value shown as a chip that opens an editor on click; empty state reads as an affordance. */
54
64
  const EditChip = styled.button `
@@ -1 +1 @@
1
- {"version":3,"file":"Chip.js","sourceRoot":"","sources":["../../src/kit/Chip.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Chip.js","sourceRoot":"","sources":["../../src/kit/Chip.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ReactNode } from "react";
2
+ /** CommentList: the thread. Fills a `PanelBody $pad={false}`. */
3
+ export declare const CommentList: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
4
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
5
+ }> & string;
6
+ /**
7
+ * Comment: one entry. `author` is the identity slot (a `PersonChip`), `meta`
8
+ * the timestamp, `actions` the edit/delete controls that belong to the reader
9
+ * only when it is theirs, and the children are the body — which the caller
10
+ * replaces with an editor while it is being edited, so the entry does not jump
11
+ * out of the thread.
12
+ */
13
+ export declare function Comment({ author, meta, actions, children }: {
14
+ author?: ReactNode | undefined;
15
+ meta?: ReactNode | undefined;
16
+ actions?: ReactNode | undefined;
17
+ children: ReactNode;
18
+ }): import("react").JSX.Element;
19
+ /**
20
+ * CommentComposer: the write box at the foot of the thread, hairlined off from
21
+ * the entries above it. Its own component so the padding matches an entry's
22
+ * whether or not the thread has any.
23
+ */
24
+ export declare function CommentComposer({ children }: {
25
+ children: ReactNode;
26
+ }): import("react").JSX.Element;
27
+ //# sourceMappingURL=Comment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Comment.d.ts","sourceRoot":"","sources":["../../src/kit/Comment.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,iEAAiE;AACjE,eAAO,MAAM,WAAW;;WAGvB,CAAC;AA0BF;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAC3D,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAWA;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAEpE"}
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled from "styled-components";
3
+ import { v } from "../theme/tokens.js";
4
+ // A discussion on an entity: hairline-separated entries, each a head line
5
+ // (who, when, what you may do to it) over a body the caller renders — prose,
6
+ // markdown, a diff. `ListRow` is for one-line records; a comment is two
7
+ // registers stacked, and its body is as tall as somebody made it.
8
+ /** CommentList: the thread. Fills a `PanelBody $pad={false}`. */
9
+ export const CommentList = styled.div `
10
+ display: flex;
11
+ flex-direction: column;
12
+ `;
13
+ const Entry = styled.article `
14
+ padding: 12px 16px;
15
+ border-bottom: 1px solid ${v.line};
16
+ &:last-child { border-bottom: none; }
17
+ `;
18
+ const Head = styled.div `
19
+ display: flex;
20
+ align-items: center;
21
+ gap: 8px;
22
+ margin-bottom: 6px;
23
+ font-size: 11.5px;
24
+ color: ${v.faint};
25
+ min-width: 0;
26
+ > .meta { margin-left: auto; white-space: nowrap; }
27
+ > .actions { display: flex; gap: 4px; flex: none; }
28
+ > .meta + .actions { margin-left: 0; }
29
+ `;
30
+ const Composer = styled.div `
31
+ padding: 12px 16px;
32
+ border-top: 1px solid ${v.line};
33
+ `;
34
+ /**
35
+ * Comment: one entry. `author` is the identity slot (a `PersonChip`), `meta`
36
+ * the timestamp, `actions` the edit/delete controls that belong to the reader
37
+ * only when it is theirs, and the children are the body — which the caller
38
+ * replaces with an editor while it is being edited, so the entry does not jump
39
+ * out of the thread.
40
+ */
41
+ export function Comment({ author, meta, actions, children }) {
42
+ return (_jsxs(Entry, { children: [_jsxs(Head, { children: [author, meta ? _jsx("span", { className: "meta", children: meta }) : null, actions ? _jsx("span", { className: "actions", children: actions }) : null] }), children] }));
43
+ }
44
+ /**
45
+ * CommentComposer: the write box at the foot of the thread, hairlined off from
46
+ * the entries above it. Its own component so the padding matches an entry's
47
+ * whether or not the thread has any.
48
+ */
49
+ export function CommentComposer({ children }) {
50
+ return _jsx(Composer, { children: children });
51
+ }
52
+ //# sourceMappingURL=Comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Comment.js","sourceRoot":"","sources":["../../src/kit/Comment.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,0EAA0E;AAC1E,6EAA6E;AAC7E,wEAAwE;AACxE,kEAAkE;AAElE,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA;;;CAGpC,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAA;;6BAEC,CAAC,CAAC,IAAI;;CAElC,CAAC;AAEF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;WAMZ,CAAC,CAAC,KAAK;;;;;CAKjB,CAAC;AAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;;0BAED,CAAC,CAAC,IAAI;CAC/B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAKxD;IACC,OAAO,CACL,MAAC,KAAK,eACJ,MAAC,IAAI,eACF,MAAM,EACN,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,MAAM,YAAE,IAAI,GAAQ,CAAC,CAAC,CAAC,IAAI,EAClD,OAAO,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,SAAS,YAAE,OAAO,GAAQ,CAAC,CAAC,CAAC,IAAI,IACvD,EACN,QAAQ,IACH,CACT,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAA2B;IACnE,OAAO,KAAC,QAAQ,cAAE,QAAQ,GAAY,CAAC;AACzC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * EditableTitle: the entity's name, renamed by clicking it. Enter or blur
3
+ * commits, Escape abandons, and an empty value is treated as abandoning rather
4
+ * than as a rename to nothing — the one edit nobody means.
5
+ */
6
+ export declare function EditableTitle({ value, onSave, canEdit, size, hint, as }: {
7
+ value: string;
8
+ onSave: (next: string) => void;
9
+ canEdit?: boolean | undefined;
10
+ size?: number | undefined;
11
+ /** the tooltip on the readable form */
12
+ hint?: string | undefined;
13
+ as?: "h1" | "h2" | "h3" | undefined;
14
+ }): import("react").JSX.Element;
15
+ //# sourceMappingURL=Editable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Editable.d.ts","sourceRoot":"","sources":["../../src/kit/Editable.tsx"],"names":[],"mappings":"AAsCA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAS,EAAE,IAAwB,EAAE,EAAS,EAAE,EAAE;IACxG,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;CACrC,+BAuCA"}
@@ -0,0 +1,66 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import styled from "styled-components";
4
+ import { v } from "../theme/tokens.js";
5
+ // Rename in place. A title that opens a modal to change one word is a modal
6
+ // too many; `EditableChip` already does this for a small value, and this is the
7
+ // heading form — the text is the control, and it looks like text until it is
8
+ // focused.
9
+ const Heading = styled.h1 `
10
+ margin: 0;
11
+ font-size: ${(p) => p.$size}px;
12
+ font-weight: 600;
13
+ line-height: 1.3;
14
+ cursor: ${(p) => (p.$editable ? "text" : "default")};
15
+ /* the same box as the input, so committing an edit does not shift the page */
16
+ padding: 2px 6px;
17
+ margin: -2px -6px;
18
+ border: 1px solid transparent;
19
+ border-radius: ${v.rCtl};
20
+ ${(p) => p.$editable && `&:hover { border-color: ${v.line2}; }`}
21
+ `;
22
+ const Field = styled.input `
23
+ width: 100%;
24
+ font: inherit;
25
+ font-size: ${(p) => p.$size}px;
26
+ font-weight: 600;
27
+ line-height: 1.3;
28
+ padding: 2px 6px;
29
+ margin: -2px -6px;
30
+ border-radius: ${v.rCtl};
31
+ border: 1px solid ${v.brand55};
32
+ background: ${v.field};
33
+ color: ${v.text};
34
+ &:focus { outline: none; box-shadow: 0 0 0 3px ${v.brand08}; }
35
+ `;
36
+ /**
37
+ * EditableTitle: the entity's name, renamed by clicking it. Enter or blur
38
+ * commits, Escape abandons, and an empty value is treated as abandoning rather
39
+ * than as a rename to nothing — the one edit nobody means.
40
+ */
41
+ export function EditableTitle({ value, onSave, canEdit, size = 20, hint = "Click to rename", as = "h1" }) {
42
+ const [editing, setEditing] = useState(false);
43
+ const [draft, setDraft] = useState(value);
44
+ useEffect(() => { setDraft(value); }, [value]);
45
+ const commit = () => {
46
+ setEditing(false);
47
+ const next = draft.trim();
48
+ if (next && next !== value)
49
+ onSave(next);
50
+ else
51
+ setDraft(value);
52
+ };
53
+ if (!editing) {
54
+ return (_jsx(Heading, { as: as, "$size": size, "$editable": !!canEdit, title: canEdit ? hint : undefined, onClick: () => { if (canEdit)
55
+ setEditing(true); }, children: value }));
56
+ }
57
+ return (_jsx(Field, { autoFocus: true, "$size": size, value: draft, "aria-label": hint, onChange: (e) => setDraft(e.target.value), onBlur: commit, onKeyDown: (e) => {
58
+ if (e.key === "Enter")
59
+ commit();
60
+ if (e.key === "Escape") {
61
+ setDraft(value);
62
+ setEditing(false);
63
+ }
64
+ } }));
65
+ }
66
+ //# sourceMappingURL=Editable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Editable.js","sourceRoot":"","sources":["../../src/kit/Editable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,WAAW;AAEX,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAuC;;eAEjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;;;YAGjB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;;;;;mBAKlC,CAAC,CAAC,IAAI;IACrB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,2BAA2B,CAAC,CAAC,KAAK,KAAK;CAChE,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAmB;;;eAG9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;;;;;mBAKV,CAAC,CAAC,IAAI;sBACH,CAAC,CAAC,OAAO;gBACf,CAAC,CAAC,KAAK;WACZ,CAAC,CAAC,IAAI;mDACkC,CAAC,CAAC,OAAO;CAC3D,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,iBAAiB,EAAE,EAAE,GAAG,IAAI,EAQrG;IACC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,SAAS,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC;;YACpC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CACL,KAAC,OAAO,IACN,EAAE,EAAE,EAAE,WACC,IAAI,eACA,CAAC,CAAC,OAAO,EACpB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EACjC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,OAAO;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAEhD,KAAK,GACE,CACX,CAAC;IACJ,CAAC;IACD,OAAO,CACL,KAAC,KAAK,IACJ,SAAS,iBACF,IAAI,EACX,KAAK,EAAE,KAAK,gBACA,IAAI,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO;gBAAE,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;QACjE,CAAC,GACD,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ /** Markdown: rendered GitHub-flavoured markdown. Raw HTML is not enabled. */
2
+ export declare function Markdown({ text, empty }: {
3
+ text: string;
4
+ /** what an empty field says; it is a state, not a blank */
5
+ empty?: string | undefined;
6
+ }): import("react").JSX.Element;
7
+ /** MarkdownEditor: the write/preview pair. Controlled, like every kit field. */
8
+ export declare function MarkdownEditor({ value, onChange, placeholder, rows, autoFocus }: {
9
+ value: string;
10
+ onChange: (next: string) => void;
11
+ placeholder?: string | undefined;
12
+ rows?: number | undefined;
13
+ autoFocus?: boolean | undefined;
14
+ }): import("react").JSX.Element;
15
+ /**
16
+ * EditableMarkdown: a markdown block that edits in place — the description
17
+ * panel every entity screen has. `onSave` resolves before the editor closes, so
18
+ * a refused write leaves the draft on screen rather than losing it.
19
+ */
20
+ export declare function EditableMarkdown({ text, canEdit, onSave, saving, empty, editLabel }: {
21
+ text: string;
22
+ canEdit?: boolean | undefined;
23
+ onSave: (next: string) => Promise<unknown>;
24
+ saving?: boolean | undefined;
25
+ empty?: string | undefined;
26
+ editLabel?: string | undefined;
27
+ }): import("react").JSX.Element;
28
+ //# sourceMappingURL=Markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../src/kit/Markdown.tsx"],"names":[],"mappings":"AAkDA,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,KAA8B,EAAE,EAAE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAOA;AAeD,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAQ,EAAE,SAAS,EAAE,EAAE;IACpF,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC,+BAuBA;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAA8B,EAAE,EAAE;IACzG,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,+BAyBA"}
@@ -0,0 +1,83 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import styled from "styled-components";
4
+ import ReactMarkdown from "react-markdown";
5
+ import remarkGfm from "remark-gfm";
6
+ import { v } from "../theme/tokens.js";
7
+ import { AppButton, ButtonRow } from "./Button.js";
8
+ import { Segmented, TextArea } from "./Form.js";
9
+ // Markdown that reads as part of the console rather than as a web page: the
10
+ // kit's type scale, mono for code, hairlines for tables, the log surface for
11
+ // fenced blocks. `Prose` is the surface for plain text; this is the surface for
12
+ // text somebody wrote in markdown — a description, a comment, a release note.
13
+ //
14
+ // Editing is a textarea with a preview toggle rather than a rich editor: a
15
+ // description is pasted from a terminal at least as often as it is typed, and
16
+ // a WYSIWYG that mangles a code fence is worse than no WYSIWYG at all.
17
+ const Body = styled.div `
18
+ font-size: 13px;
19
+ line-height: 1.6;
20
+ color: ${v.text};
21
+ overflow-wrap: anywhere;
22
+ > :first-child { margin-top: 0; }
23
+ > :last-child { margin-bottom: 0; }
24
+ p, ul, ol, blockquote, pre, table { margin: 0 0 10px; }
25
+ h1, h2, h3, h4 { margin: 16px 0 6px; line-height: 1.3; }
26
+ h1 { font-size: 17px; } h2 { font-size: 15px; } h3 { font-size: 13.5px; } h4 { font-size: 13px; }
27
+ ul, ol { padding-left: 22px; }
28
+ li + li { margin-top: 2px; }
29
+ li > p { margin: 0; }
30
+ code { font-family: ${v.mono}; font-size: 11.5px; padding: 1px 5px; border-radius: 5px; background: ${v.hover}; border: 1px solid ${v.line}; }
31
+ pre { padding: 10px 12px; border-radius: ${v.rCtl}; background: ${v.logBg}; color: ${v.logText}; overflow: auto; }
32
+ pre code { background: transparent; border: none; padding: 0; color: inherit; }
33
+ a { color: ${v.info}; text-decoration: none; }
34
+ a:hover { text-decoration: underline; }
35
+ blockquote { margin-left: 0; padding: 2px 12px; border-left: 3px solid ${v.line2}; color: ${v.muted}; }
36
+ table { border-collapse: collapse; width: 100%; font-size: 12px; }
37
+ th, td { text-align: left; padding: 6px 9px; border-bottom: 1px solid ${v.line}; }
38
+ th { color: ${v.faint}; font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.04em; }
39
+ input[type="checkbox"] { margin-right: 6px; }
40
+ hr { border: none; border-top: 1px solid ${v.line}; margin: 14px 0; }
41
+ img { max-width: 100%; border-radius: ${v.rCtl}; }
42
+ `;
43
+ const Absent = styled.span `
44
+ color: ${v.faint};
45
+ font-size: 12.5px;
46
+ font-style: italic;
47
+ `;
48
+ /** Markdown: rendered GitHub-flavoured markdown. Raw HTML is not enabled. */
49
+ export function Markdown({ text, empty = "Nothing written yet." }) {
50
+ if (!text.trim())
51
+ return _jsx(Absent, { children: empty });
52
+ return (_jsx(Body, { children: _jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], children: text }) }));
53
+ }
54
+ const EditorWrap = styled.div `
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: 8px;
58
+ `;
59
+ const PreviewBox = styled.div `
60
+ min-height: 76px;
61
+ padding: 10px 12px;
62
+ border-radius: ${v.rCtl};
63
+ border: 1px dashed ${v.fieldLine};
64
+ `;
65
+ /** MarkdownEditor: the write/preview pair. Controlled, like every kit field. */
66
+ export function MarkdownEditor({ value, onChange, placeholder, rows = 8, autoFocus }) {
67
+ const [mode, setMode] = useState("write");
68
+ return (_jsxs(EditorWrap, { children: [_jsx(Segmented, { options: [{ value: "write", label: "Write" }, { value: "preview", label: "Preview" }], value: mode, onChange: setMode }), mode === "write" ? (_jsx(TextArea, { value: value, rows: rows, placeholder: placeholder ?? "Markdown…", autoFocus: autoFocus, onChange: (e) => onChange(e.target.value), style: { minHeight: rows * 20 } })) : (_jsx(PreviewBox, { children: _jsx(Markdown, { text: value, empty: "Nothing to preview." }) }))] }));
69
+ }
70
+ /**
71
+ * EditableMarkdown: a markdown block that edits in place — the description
72
+ * panel every entity screen has. `onSave` resolves before the editor closes, so
73
+ * a refused write leaves the draft on screen rather than losing it.
74
+ */
75
+ export function EditableMarkdown({ text, canEdit, onSave, saving, empty, editLabel = "Edit description" }) {
76
+ const [editing, setEditing] = useState(false);
77
+ const [draft, setDraft] = useState(text);
78
+ if (!editing) {
79
+ return (_jsxs("div", { children: [_jsx(Markdown, { text: text, ...(empty ? { empty } : {}) }), canEdit ? (_jsx(ButtonRow, { style: { marginTop: 10 }, children: _jsx(AppButton, { icon: "edit", onClick: () => { setDraft(text); setEditing(true); }, children: editLabel }) })) : null] }));
80
+ }
81
+ return (_jsxs("div", { children: [_jsx(MarkdownEditor, { value: draft, onChange: setDraft, autoFocus: true }), _jsxs(ButtonRow, { style: { marginTop: 10, justifyContent: "flex-end" }, children: [_jsx(AppButton, { onClick: () => setEditing(false), disabled: saving, children: "Cancel" }), _jsx(AppButton, { variant: "grad", loading: saving, onClick: () => { void onSave(draft).then(() => setEditing(false)); }, children: "Save" })] })] }));
82
+ }
83
+ //# sourceMappingURL=Markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/kit/Markdown.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Dot: a state marker in a colour the product chose. `colour` is a CSS colour
3
+ * — a theme token from the product's own palette map, never a literal, so both
4
+ * themes render it. `hollow` is the not-yet form: a status the work has not
5
+ * reached reads as an outline, the way a checkbox reads before it is ticked.
6
+ */
7
+ export declare function Dot({ colour, size, hollow, title }: {
8
+ colour?: string | undefined;
9
+ size?: number | undefined;
10
+ hollow?: boolean | undefined;
11
+ title?: string | undefined;
12
+ }): import("react").JSX.Element;
13
+ /**
14
+ * LevelBars: a small ordinal as rising bars — priority, severity, confidence.
15
+ * Every bar is drawn, lit up to `level`, so zero is still a glyph and a column
16
+ * of them scans as one shape rather than as text of differing widths.
17
+ */
18
+ export declare function LevelBars({ level, levels, title }: {
19
+ /** 0 = none; anything above `levels` is clamped */
20
+ level: number;
21
+ levels?: number | undefined;
22
+ title?: string | undefined;
23
+ }): import("react").JSX.Element;
24
+ /**
25
+ * PersonChip: who — an avatar (their picture, else their initials) and their
26
+ * name. `nameless` is the avatar alone, for a board card or a stack of
27
+ * participants where the name would not fit. With no name and no email it
28
+ * renders the unassigned form, which is a state worth seeing rather than a
29
+ * blank cell.
30
+ */
31
+ export declare function PersonChip({ name, email, avatarUrl, size, nameless, empty }: {
32
+ name?: string | undefined;
33
+ email?: string | undefined;
34
+ avatarUrl?: string | undefined;
35
+ size?: number | undefined;
36
+ nameless?: boolean | undefined;
37
+ /** what an absent person is called ("Unassigned", "No lead") */
38
+ empty?: string | undefined;
39
+ }): import("react").JSX.Element;
40
+ /** initials: the one or two letters that stand in for a name or an address. */
41
+ export declare function initials(name: string): string;
42
+ //# sourceMappingURL=Marker.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ import { v } from "../theme/tokens.js";
4
+ import { Icon } from "./Icon.js";
5
+ // Three markers a list of work needs in every column: the coloured state dot,
6
+ // the level glyph (priority, severity, confidence) and the person cell.
7
+ // `StatusPill` says a verdict in words; these are the compact forms that fit a
8
+ // table row, a board card and a header line without wrapping.
9
+ const DotSpan = styled.span `
10
+ display: inline-block;
11
+ width: ${(p) => p.$size}px;
12
+ height: ${(p) => p.$size}px;
13
+ border-radius: 50%;
14
+ flex: none;
15
+ ${(p) => p.$hollow
16
+ ? css `border: 2px solid ${p.$css}; background: transparent;`
17
+ : css `background: ${p.$css};`}
18
+ `;
19
+ /**
20
+ * Dot: a state marker in a colour the product chose. `colour` is a CSS colour
21
+ * — a theme token from the product's own palette map, never a literal, so both
22
+ * themes render it. `hollow` is the not-yet form: a status the work has not
23
+ * reached reads as an outline, the way a checkbox reads before it is ticked.
24
+ */
25
+ export function Dot({ colour, size = 10, hollow, title }) {
26
+ return _jsx(DotSpan, { "$css": colour || v.faint, "$size": size, "$hollow": hollow, title: title });
27
+ }
28
+ const BarsWrap = styled.span `
29
+ display: inline-flex;
30
+ align-items: flex-end;
31
+ gap: 1.5px;
32
+ height: 12px;
33
+ color: ${(p) => (p.$muted ? v.faint : v.muted)};
34
+ `;
35
+ const Bar = styled.i `
36
+ display: inline-block;
37
+ width: 3px;
38
+ height: ${(p) => p.$h}px;
39
+ border-radius: 1px;
40
+ background: currentColor;
41
+ opacity: ${(p) => (p.$on ? 1 : 0.25)};
42
+ `;
43
+ /**
44
+ * LevelBars: a small ordinal as rising bars — priority, severity, confidence.
45
+ * Every bar is drawn, lit up to `level`, so zero is still a glyph and a column
46
+ * of them scans as one shape rather than as text of differing widths.
47
+ */
48
+ export function LevelBars({ level, levels = 3, title }) {
49
+ const on = Math.max(0, Math.min(levels, Math.round(level)));
50
+ const step = 6 / Math.max(1, levels);
51
+ return (_jsx(BarsWrap, { title: title, "$muted": on === 0, children: Array.from({ length: levels }, (_, i) => _jsx(Bar, { "$h": 5 + Math.round(i * step), "$on": i < on }, i)) }));
52
+ }
53
+ const Avatar = styled.span `
54
+ display: inline-grid;
55
+ place-items: center;
56
+ width: ${(p) => p.$size}px;
57
+ height: ${(p) => p.$size}px;
58
+ border-radius: 50%;
59
+ background: ${(p) => (p.$empty ? v.hover : v.brand12)};
60
+ color: ${(p) => (p.$empty ? v.faint : v.brand)};
61
+ font-size: ${(p) => Math.max(9, Math.round(p.$size * 0.42))}px;
62
+ font-weight: 700;
63
+ flex: none;
64
+ overflow: hidden;
65
+ img { width: 100%; height: 100%; object-fit: cover; }
66
+ `;
67
+ const PersonWrap = styled.span `
68
+ display: inline-flex;
69
+ align-items: center;
70
+ gap: 7px;
71
+ min-width: 0;
72
+ font-size: 12px;
73
+ color: ${(p) => (p.$empty ? v.faint : v.text)};
74
+ > span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
75
+ `;
76
+ /**
77
+ * PersonChip: who — an avatar (their picture, else their initials) and their
78
+ * name. `nameless` is the avatar alone, for a board card or a stack of
79
+ * participants where the name would not fit. With no name and no email it
80
+ * renders the unassigned form, which is a state worth seeing rather than a
81
+ * blank cell.
82
+ */
83
+ export function PersonChip({ name, email, avatarUrl, size = 20, nameless, empty = "Unassigned" }) {
84
+ const label = name || email || "";
85
+ if (!label) {
86
+ return (_jsxs(PersonWrap, { "$empty": true, title: nameless ? empty : undefined, children: [_jsx(Avatar, { "$size": size, "$empty": true, children: _jsx(Icon, { name: "user", size: Math.round(size * 0.5) }) }), nameless ? null : _jsx("span", { children: empty })] }));
87
+ }
88
+ return (_jsxs(PersonWrap, { title: email || label, children: [_jsx(Avatar, { "$size": size, children: avatarUrl ? _jsx("img", { src: avatarUrl, alt: "" }) : initials(label) }), nameless ? null : _jsx("span", { children: label })] }));
89
+ }
90
+ /** initials: the one or two letters that stand in for a name or an address. */
91
+ export function initials(name) {
92
+ const parts = name.trim().split(/[\s@._-]+/).filter(Boolean);
93
+ if (parts.length === 0)
94
+ return "?";
95
+ if (parts.length === 1)
96
+ return parts[0].slice(0, 2).toUpperCase();
97
+ return (parts[0][0] + parts[1][0]).toUpperCase();
98
+ }
99
+ //# sourceMappingURL=Marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Marker.js","sourceRoot":"","sources":["../../src/kit/Marker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { ReactNode } from "react";
2
+ declare const RATIOS: {
3
+ /** a main column with a narrow fixed rail — fields, facts, actions */
4
+ readonly rail: "minmax(0, 1fr) 300px";
5
+ /** a wide main column and a secondary panel that still holds content */
6
+ readonly aside: "minmax(0, 2fr) minmax(0, 1fr)";
7
+ /** two equal columns */
8
+ readonly even: "minmax(0, 1fr) minmax(0, 1fr)";
9
+ };
10
+ export type SplitRatio = keyof typeof RATIOS;
11
+ /**
12
+ * Split: a main column and a second column beside it, stacking on a narrow
13
+ * viewport. `ratio` names the shape rather than spelling out grid columns, so
14
+ * every console's detail screen splits the same way; `sticky` keeps the rail
15
+ * in view while the main column scrolls, which is what makes a field rail
16
+ * usable on a long ticket.
17
+ */
18
+ export declare function Split({ ratio, gap, at, sticky, mainLast, children }: {
19
+ ratio?: SplitRatio | undefined;
20
+ gap?: number | undefined;
21
+ /** viewport width (px) below which the columns stack; default 960 */
22
+ at?: number | undefined;
23
+ /** the aside stays in view as the main column scrolls (a field rail) */
24
+ sticky?: boolean | undefined;
25
+ /** stacked, put the main column second — an aside that is context, not detail */
26
+ mainLast?: boolean | undefined;
27
+ /** exactly two children: the main column, then the aside */
28
+ children: [ReactNode, ReactNode];
29
+ }): import("react").JSX.Element;
30
+ export {};
31
+ //# sourceMappingURL=Split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Split.d.ts","sourceRoot":"","sources":["../../src/kit/Split.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AA+BvC,QAAA,MAAM,MAAM;IACV,sEAAsE;;IAEtE,wEAAwE;;IAExE,wBAAwB;;CAEhB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,MAAM,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,EAAE,KAAc,EAAE,GAAQ,EAAE,EAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IACxF,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,qEAAqE;IACrE,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,4DAA4D;IAC5D,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;CAClC,+BAQA"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ // The explicit main/aside page split. `Grid` auto-fills equal cards; this is
4
+ // the other layout every detail screen needs and four consoles had each
5
+ // written as a local `styled.div` (strata's `Two`, container-platform's
6
+ // detail grid, trellis's ticket rail, forest's overview).
7
+ const Wrap = styled.div `
8
+ display: grid;
9
+ grid-template-columns: ${(p) => p.$ratio};
10
+ gap: ${(p) => p.$gap}px;
11
+ align-items: start;
12
+ min-width: 0;
13
+ > * { min-width: 0; }
14
+ @media (max-width: ${(p) => p.$at}px) {
15
+ grid-template-columns: 1fr;
16
+ ${(p) => p.$reverse && css `> :first-child { order: 2; }`}
17
+ }
18
+ `;
19
+ const Aside = styled.div `
20
+ min-width: 0;
21
+ ${(p) => p.$sticky &&
22
+ css `
23
+ position: sticky;
24
+ top: 16px;
25
+ @media (max-width: 960px) { position: static; }
26
+ `}
27
+ `;
28
+ const RATIOS = {
29
+ /** a main column with a narrow fixed rail — fields, facts, actions */
30
+ rail: "minmax(0, 1fr) 300px",
31
+ /** a wide main column and a secondary panel that still holds content */
32
+ aside: "minmax(0, 2fr) minmax(0, 1fr)",
33
+ /** two equal columns */
34
+ even: "minmax(0, 1fr) minmax(0, 1fr)",
35
+ };
36
+ /**
37
+ * Split: a main column and a second column beside it, stacking on a narrow
38
+ * viewport. `ratio` names the shape rather than spelling out grid columns, so
39
+ * every console's detail screen splits the same way; `sticky` keeps the rail
40
+ * in view while the main column scrolls, which is what makes a field rail
41
+ * usable on a long ticket.
42
+ */
43
+ export function Split({ ratio = "rail", gap = 16, at = 960, sticky, mainLast, children }) {
44
+ const [main, aside] = children;
45
+ return (_jsxs(Wrap, { "$ratio": RATIOS[ratio], "$gap": gap, "$at": at, "$reverse": !!mainLast, children: [_jsx("div", { children: main }), _jsx(Aside, { "$sticky": !!sticky, children: aside })] }));
46
+ }
47
+ //# sourceMappingURL=Split.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Split.js","sourceRoot":"","sources":["../../src/kit/Split.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAGhD,6EAA6E;AAC7E,wEAAwE;AACxE,wEAAwE;AACxE,0DAA0D;AAE1D,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAkE;;2BAE9D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;SACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;;;;uBAIC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;;MAE7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAA,8BAA8B;;CAE3D,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAsB;;IAE1C,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,OAAO;IACT,GAAG,CAAA;;;;KAIF;CACJ,CAAC;AAEF,MAAM,MAAM,GAAG;IACb,sEAAsE;IACtE,IAAI,EAAE,sBAAsB;IAC5B,wEAAwE;IACxE,KAAK,EAAE,+BAA+B;IACtC,wBAAwB;IACxB,IAAI,EAAE,+BAA+B;CAC7B,CAAC;AAIX;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAWrF;IACC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC;IAC/B,OAAO,CACL,MAAC,IAAI,cAAS,MAAM,CAAC,KAAK,CAAC,UAAQ,GAAG,SAAO,EAAE,cAAY,CAAC,CAAC,QAAQ,aACnE,wBAAM,IAAI,GAAO,EACjB,KAAC,KAAK,eAAU,CAAC,CAAC,MAAM,YAAG,KAAK,GAAS,IACpC,CACR,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
+ import { type IconName } from "./Icon.tsx";
2
3
  export declare const StatGrid: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
3
4
  style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
4
5
  }, {
@@ -12,11 +13,15 @@ export declare function StatValue({ label, value, sub, tone }: {
12
13
  tone?: "ok" | "warn" | "crit" | "brand" | undefined;
13
14
  }): import("react").JSX.Element;
14
15
  /** StatTile: label over a big number, with an optional subline. */
15
- export declare function StatTile({ label, value, sub, tone }: {
16
+ export declare function StatTile({ label, value, sub, tone, icon, to }: {
16
17
  label: ReactNode;
17
18
  value: ReactNode;
18
19
  sub?: ReactNode | undefined;
19
20
  tone?: "ok" | "warn" | "crit" | "brand" | undefined;
21
+ /** a brand-tinted glyph beside the label */
22
+ icon?: IconName | undefined;
23
+ /** the tile is also the way in: a router link to the section it counts */
24
+ to?: string | undefined;
20
25
  }): import("react").JSX.Element;
21
26
  /** Meter: value out of max as a bar; tone defaults from the ratio. */
22
27
  export declare function Meter({ value, max, tone, label, width }: {
@@ -1 +1 @@
1
- {"version":3,"file":"Stat.d.ts","sourceRoot":"","sources":["../../src/kit/Stat.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,eAAO,MAAM,QAAQ;;;WAAuB,MAAM,GAAG,SAAS;YAI7D,CAAC;AAmBF,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACrD,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACrD,+BAQA;AAED,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACpD,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACrD,+BAQA;AAiBD,sEAAsE;AACtE,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAQA"}
1
+ {"version":3,"file":"Stat.d.ts","sourceRoot":"","sources":["../../src/kit/Stat.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIjD,eAAO,MAAM,QAAQ;;;WAAuB,MAAM,GAAG,SAAS;YAI7D,CAAC;AA6BF,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACrD,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACrD,+BAQA;AAED,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;IAC9D,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,4CAA4C;IAC5C,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,0EAA0E;IAC1E,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB,+BAeA;AAoCD,sEAAsE;AACtE,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAQA"}
package/dist/kit/Stat.js CHANGED
@@ -1,14 +1,25 @@
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 styled, { css } from "styled-components";
3
+ import { Link } from "react-router-dom";
3
4
  import { v } from "../theme/tokens.js";
4
5
  import { Panel } from "./Panel.js";
5
6
  import { MicroLabel } from "./Panel.js";
7
+ import { Icon } from "./Icon.js";
6
8
  // Stat tiles (overview numbers) and a utilisation meter.
7
9
  export const StatGrid = styled.div `
8
10
  display: grid;
9
11
  grid-template-columns: repeat(auto-fit, minmax(${(p) => p.$min ?? 150}px, 1fr));
10
12
  gap: 12px;
11
13
  `;
14
+ const tileCss = css `
15
+ padding: 12px 14px;
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: 6px;
19
+ border: 1px solid ${v.line};
20
+ border-radius: ${v.rPanel};
21
+ background: ${v.surface};
22
+ `;
12
23
  const Tile = styled(Panel) `
13
24
  padding: 12px 14px;
14
25
  display: flex;
@@ -28,9 +39,26 @@ export function StatValue({ label, value, sub, tone }) {
28
39
  return (_jsxs("span", { style: { display: "flex", flexDirection: "column", gap: 4 }, children: [_jsx(MicroLabel, { children: label }), _jsx(Value, { "$tone": tone, children: value }), sub ? _jsx(Sub, { children: sub }) : null] }));
29
40
  }
30
41
  /** StatTile: label over a big number, with an optional subline. */
31
- export function StatTile({ label, value, sub, tone }) {
32
- return (_jsxs(Tile, { children: [_jsx(MicroLabel, { children: label }), _jsx(Value, { "$tone": tone, children: value }), sub ? _jsx(Sub, { children: sub }) : null] }));
42
+ export function StatTile({ label, value, sub, tone, icon, to }) {
43
+ const body = (_jsxs(_Fragment, { children: [_jsxs(Head, { children: [_jsxs(MicroLabel, { children: [icon ? _jsx(Glyph, { children: _jsx(Icon, { name: icon }) }) : null, label] }), to ? _jsx(Go, { children: _jsx(Icon, { name: "arrow-right" }) }) : null] }), _jsx(Value, { "$tone": tone, children: value }), sub ? _jsx(Sub, { children: sub }) : null] }));
44
+ return to ? _jsx(TileLink, { to: to, children: body }) : _jsx(Tile, { children: body });
33
45
  }
46
+ const Head = styled.div `
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: space-between;
50
+ gap: 8px;
51
+ ${MicroLabel} { display: inline-flex; align-items: center; gap: 7px; }
52
+ `;
53
+ const Glyph = styled.span `color: ${v.brand}; display: grid;`;
54
+ const Go = styled.span `color: ${v.faint}; display: grid; font-size: 11px;`;
55
+ const TileLink = styled(Link) `
56
+ ${tileCss}
57
+ text-decoration: none;
58
+ color: inherit;
59
+ transition: border-color 0.14s ease, background 0.14s ease;
60
+ &:hover { border-color: ${v.line2}; background: ${v.surface2}; }
61
+ `;
34
62
  const Bar = styled.div `
35
63
  ${(p) => p.$w && css `width: ${p.$w}px;`}
36
64
  height: 6px;
@@ -1 +1 @@
1
- {"version":3,"file":"Stat.js","sourceRoot":"","sources":["../../src/kit/Stat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Stat.js","sourceRoot":"","sources":["../../src/kit/Stat.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { Markdown, MarkdownEditor, EditableMarkdown } from "./kit/Markdown.tsx";
2
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // @xeonr/platform-ui/markdown — the markdown surface, behind its own entry
2
+ // point.
3
+ //
4
+ // react-markdown and remark-gfm are optional peers: a console with no
5
+ // user-authored markdown never installs them, and never resolves this module.
6
+ export { Markdown, MarkdownEditor, EditableMarkdown } from "./kit/Markdown.js";
7
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,SAAS;AACT,EAAE;AACF,sEAAsE;AACtE,8EAA8E;AAC9E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xeonr/platform-ui",
3
- "version": "0.3.10",
3
+ "version": "0.3.12",
4
4
  "description": "Xeonr Platform Suite design language: the --x-* token sheet, theme provider and kit shared by every Xeonr console.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -17,6 +17,10 @@
17
17
  "./editor": {
18
18
  "types": "./dist/editor.d.ts",
19
19
  "import": "./dist/editor.js"
20
+ },
21
+ "./markdown": {
22
+ "types": "./dist/markdown.d.ts",
23
+ "import": "./dist/markdown.js"
20
24
  }
21
25
  },
22
26
  "files": [
@@ -32,7 +36,9 @@
32
36
  "react": "^19.0.0",
33
37
  "react-dom": "^19.0.0",
34
38
  "react-router-dom": "^7.0.0",
35
- "styled-components": "^6.0.0"
39
+ "styled-components": "^6.0.0",
40
+ "react-markdown": "^10.0.0",
41
+ "remark-gfm": "^4.0.0"
36
42
  },
37
43
  "peerDependenciesMeta": {
38
44
  "@monaco-editor/react": {
@@ -40,6 +46,12 @@
40
46
  },
41
47
  "monaco-editor": {
42
48
  "optional": true
49
+ },
50
+ "react-markdown": {
51
+ "optional": true
52
+ },
53
+ "remark-gfm": {
54
+ "optional": true
43
55
  }
44
56
  },
45
57
  "dependencies": {
@@ -56,7 +68,9 @@
56
68
  "react-dom": "^19.1.0",
57
69
  "react-router-dom": "^7.8.0",
58
70
  "styled-components": "^6.1.19",
59
- "typescript": "^5.9.2"
71
+ "typescript": "^5.9.2",
72
+ "react-markdown": "^10.1.0",
73
+ "remark-gfm": "^4.0.1"
60
74
  },
61
75
  "scripts": {
62
76
  "build": "tsc -p tsconfig.build.json",