cursedbelt 5.56.0 → 5.58.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.
- package/dist/react/charts/tokens.js +4 -4
- package/dist/react/code-editor/CodeEditor.d.ts.map +1 -1
- package/dist/react/code-editor/CodeEditor.js +2 -1
- package/dist/react/code-editor/CodeEditor.js.map +1 -1
- package/dist/react/code-editor/lineAbove.d.ts +17 -0
- package/dist/react/code-editor/lineAbove.d.ts.map +1 -0
- package/dist/react/code-editor/lineAbove.js +34 -0
- package/dist/react/code-editor/lineAbove.js.map +1 -0
- package/dist/react/companion-link/CompanionLinkStatus.d.ts.map +1 -1
- package/dist/react/companion-link/CompanionLinkStatus.js +2 -1
- package/dist/react/companion-link/CompanionLinkStatus.js.map +1 -1
- package/dist/react/components/Accordion.d.ts.map +1 -1
- package/dist/react/components/Accordion.js +2 -2
- package/dist/react/components/Accordion.js.map +1 -1
- package/dist/react/components/Badge.d.ts +20 -1
- package/dist/react/components/Badge.d.ts.map +1 -1
- package/dist/react/components/Badge.js +30 -3
- package/dist/react/components/Badge.js.map +1 -1
- package/dist/react/components/Button.d.ts.map +1 -1
- package/dist/react/components/Button.js +8 -2
- package/dist/react/components/Button.js.map +1 -1
- package/dist/react/components/Collapsible.d.ts.map +1 -1
- package/dist/react/components/Collapsible.js +2 -2
- package/dist/react/components/Collapsible.js.map +1 -1
- package/dist/react/components/DisclosureButton.d.ts +2 -2
- package/dist/react/components/DisclosureButton.d.ts.map +1 -1
- package/dist/react/components/DisclosureButton.js +9 -6
- package/dist/react/components/DisclosureButton.js.map +1 -1
- package/dist/react/components/EditorPage.d.ts +78 -0
- package/dist/react/components/EditorPage.d.ts.map +1 -0
- package/dist/react/components/EditorPage.js +133 -0
- package/dist/react/components/EditorPage.js.map +1 -0
- package/dist/react/components/IconPicker.d.ts +70 -0
- package/dist/react/components/IconPicker.d.ts.map +1 -0
- package/dist/react/components/IconPicker.js +175 -0
- package/dist/react/components/IconPicker.js.map +1 -0
- package/dist/react/components/PropertyList.d.ts +45 -0
- package/dist/react/components/PropertyList.d.ts.map +1 -0
- package/dist/react/components/PropertyList.js +12 -0
- package/dist/react/components/PropertyList.js.map +1 -0
- package/dist/react/components/Wizard/ReviewStep.d.ts +1 -1
- package/dist/react/components/Wizard/ReviewStep.d.ts.map +1 -1
- package/dist/react/components/Wizard/ReviewStep.js +3 -3
- package/dist/react/components/Wizard/ReviewStep.js.map +1 -1
- package/dist/react/components/editorPage.css +421 -0
- package/dist/react/components/formKit.d.ts +3 -1
- package/dist/react/components/formKit.d.ts.map +1 -1
- package/dist/react/components/formKit.js +3 -1
- package/dist/react/components/formKit.js.map +1 -1
- package/dist/react/index.d.ts +4 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +3 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/line-keys/index.d.ts +2 -0
- package/dist/react/line-keys/index.d.ts.map +1 -0
- package/dist/react/line-keys/index.js +2 -0
- package/dist/react/line-keys/index.js.map +1 -0
- package/dist/react/line-keys/lineKeys.d.ts +62 -0
- package/dist/react/line-keys/lineKeys.d.ts.map +1 -0
- package/dist/react/line-keys/lineKeys.js +159 -0
- package/dist/react/line-keys/lineKeys.js.map +1 -0
- package/dist/react/master-detail/DetailPane.d.ts +3 -0
- package/dist/react/master-detail/DetailPane.d.ts.map +1 -1
- package/dist/react/master-detail/DetailPane.js +5 -2
- package/dist/react/master-detail/DetailPane.js.map +1 -1
- package/dist/react/nav/SideNav.js +1 -1
- package/dist/react/nav/SideNav.js.map +1 -1
- package/dist/scripts/guardrailsEnforce.d.ts.map +1 -1
- package/dist/styles-areas/analytics.css +14 -14
- package/dist/styles-areas/charts.css +3 -3
- package/dist/styles-areas/companion-link.css +2 -2
- package/dist/styles-areas/core.css +50 -45
- package/dist/styles-areas/data-table.css +15 -16
- package/dist/styles-areas/disk-usage.css +4 -4
- package/dist/styles-areas/fields.css +11 -11
- package/dist/styles-areas/folder-tree.css +3 -3
- package/dist/styles-areas/layout-engine.css +2 -2
- package/dist/styles-areas/master-detail.css +4 -5
- package/dist/styles-areas/media-gallery.css +9 -9
- package/dist/styles-areas/media.css +3 -3
- package/dist/styles-areas/nav.css +5 -5
- package/dist/styles-areas/notifications.css +3 -3
- package/dist/styles-areas/problem-detail.css +3 -3
- package/dist/styles-areas/sharing.css +2 -3
- package/dist/styles-areas/stats.css +3 -3
- package/dist/styles-areas/wizard.css +7 -8
- package/dist/styles-areas/workbench.css +4 -4
- package/dist/styles-utilities.css +49 -10
- package/dist/theme.css +38 -22
- package/package.json +14 -2
- package/scripts/guardrails-baseline.json +2 -1
- package/scripts/guardrailsEnforce.spec.ts +32 -0
- package/scripts/guardrailsEnforce.ts +67 -1
- package/scripts/styleAreas.ts +3 -0
- package/src/react/charts/tokens.ts +4 -4
- package/src/react/code-editor/CodeEditor.tsx +2 -1
- package/src/react/code-editor/lineAbove.spec.ts +36 -0
- package/src/react/code-editor/lineAbove.ts +35 -0
- package/src/react/companion-link/CompanionLinkStatus.tsx +10 -12
- package/src/react/components/Accordion.tsx +5 -4
- package/src/react/components/Badge.capsule.spec.ts +1 -1
- package/src/react/components/Badge.spec.tsx +22 -1
- package/src/react/components/Badge.tsx +66 -11
- package/src/react/components/Button.spec.tsx +5 -4
- package/src/react/components/Button.tsx +8 -2
- package/src/react/components/Collapsible.tsx +5 -4
- package/src/react/components/DisclosureButton.spec.tsx +47 -0
- package/src/react/components/DisclosureButton.tsx +11 -7
- package/src/react/components/EditorPage.spec.tsx +106 -0
- package/src/react/components/EditorPage.tsx +281 -0
- package/src/react/components/IconPicker.spec.tsx +84 -0
- package/src/react/components/IconPicker.tsx +289 -0
- package/src/react/components/PropertyList.spec.tsx +110 -0
- package/src/react/components/PropertyList.tsx +92 -0
- package/src/react/components/Wizard/ReviewStep.tsx +7 -7
- package/src/react/components/editorPage.css +421 -0
- package/src/react/components/formKit.ts +10 -1
- package/src/react/components/formKitStylesheets.spec.ts +47 -0
- package/src/react/index.ts +11 -1
- package/src/react/line-keys/index.ts +1 -0
- package/src/react/line-keys/lineKeys.spec.tsx +176 -0
- package/src/react/line-keys/lineKeys.ts +176 -0
- package/src/react/master-detail/DetailPane.tsx +14 -18
- package/src/react/nav/SideNav.tsx +1 -1
- package/src/styles-areas/analytics.css +14 -14
- package/src/styles-areas/charts.css +3 -3
- package/src/styles-areas/companion-link.css +2 -2
- package/src/styles-areas/core.css +50 -45
- package/src/styles-areas/data-table.css +15 -16
- package/src/styles-areas/disk-usage.css +4 -4
- package/src/styles-areas/fields.css +11 -11
- package/src/styles-areas/folder-tree.css +3 -3
- package/src/styles-areas/layout-engine.css +2 -2
- package/src/styles-areas/master-detail.css +4 -5
- package/src/styles-areas/media-gallery.css +9 -9
- package/src/styles-areas/media.css +3 -3
- package/src/styles-areas/nav.css +5 -5
- package/src/styles-areas/notifications.css +3 -3
- package/src/styles-areas/problem-detail.css +3 -3
- package/src/styles-areas/sharing.css +2 -3
- package/src/styles-areas/stats.css +3 -3
- package/src/styles-areas/wizard.css +7 -8
- package/src/styles-areas/workbench.css +4 -4
- package/src/styles-utilities.css +49 -10
- package/src/theme.css +38 -22
|
@@ -16,10 +16,10 @@ export const FALLBACK_TOKENS = {
|
|
|
16
16
|
series: FALLBACK_SERIES,
|
|
17
17
|
accent: '#34d399',
|
|
18
18
|
foreground: '#f9fafb',
|
|
19
|
-
foregroundMuted: '#
|
|
20
|
-
background: '#
|
|
21
|
-
surface: '#
|
|
22
|
-
border: '#
|
|
19
|
+
foregroundMuted: '#9b9ea7',
|
|
20
|
+
background: '#08090a',
|
|
21
|
+
surface: '#17181b',
|
|
22
|
+
border: '#31333a',
|
|
23
23
|
success: '#22c55e',
|
|
24
24
|
warning: '#f59e0b',
|
|
25
25
|
danger: '#ef4444',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeEditor.d.ts","sourceRoot":"","sources":["../../../src/react/code-editor/CodeEditor.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAwE,MAAM,kBAAkB,CAAC;AAGpH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"CodeEditor.d.ts","sourceRoot":"","sources":["../../../src/react/code-editor/CodeEditor.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAwE,MAAM,kBAAkB,CAAC;AAGpH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gGAAgG;IAChG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4GAA4G;IAC5G,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,uEAAuE;IACvE,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAYD,wBAAgB,UAAU,CAAC,EACzB,KAAU,EACV,QAAQ,EACR,QAAiB,EACjB,QAAgB,EAChB,WAAW,EAAE,eAAsB,EACnC,UAAU,EAAE,cAAsB,EAClC,YAAoB,EACpB,WAAW,EACX,UAAkB,EAClB,cAAc,EACd,UAAU,EAAE,eAAoB,EAChC,SAAkB,EAClB,SAAS,EACT,OAAW,EACX,SAAS,EACT,YAAY,EAAE,SAAS,GACxB,EAAE,eAAe,+BAuIjB"}
|
|
@@ -17,6 +17,7 @@ import { EditorView, keymap, lineNumbers as lineNumbersExt, placeholder as place
|
|
|
17
17
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
18
18
|
import { cn } from '../lib/cn.js';
|
|
19
19
|
import { loadLanguageExtension } from './languages.js';
|
|
20
|
+
import { lineKeyBindings } from './lineAbove.js';
|
|
20
21
|
import { cbEditorTheme, cbSyntaxHighlighting } from './theme.js';
|
|
21
22
|
// Fixed extensions shared across all instances — created once.
|
|
22
23
|
const FIXED_EXTENSIONS = [
|
|
@@ -54,7 +55,7 @@ export function CodeEditor({ value = '', onChange, language = 'text', readOnly =
|
|
|
54
55
|
const dynExtensions = useMemo(() => {
|
|
55
56
|
const exts = [
|
|
56
57
|
indentUnit.of(' '.repeat(tabSize)),
|
|
57
|
-
keymap.of([...defaultKeymap, ...historyKeymap, indentWithTab]),
|
|
58
|
+
keymap.of([...lineKeyBindings, ...defaultKeymap, ...historyKeymap, indentWithTab]),
|
|
58
59
|
];
|
|
59
60
|
if (showLineNumbers)
|
|
60
61
|
exts.push(lineNumbersExt());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeEditor.js","sourceRoot":"","sources":["../../../src/react/code-editor/CodeEditor.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CodeEditor.js","sourceRoot":"","sources":["../../../src/react/code-editor/CodeEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type StateCommand } from '@codemirror/state';
|
|
2
|
+
import type { KeyBinding } from '@codemirror/view';
|
|
3
|
+
/**
|
|
4
|
+
* ⇧⌘↵ — a blank line ABOVE each cursor's line, keeping that line's indentation, the caret on it.
|
|
5
|
+
* VS Code's "Insert Line Above"; CodeMirror's `defaultKeymap` has the line below (`Mod-Enter`,
|
|
6
|
+
* `insertBlankLine`) and the delete (`Shift-Mod-k`) but not this one. The `<textarea>` half of the
|
|
7
|
+
* same three keys is `cursedbelt/react/line-keys`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const insertBlankLineAbove: StateCommand;
|
|
10
|
+
/**
|
|
11
|
+
* The line keys `CodeEditor` adds IN FRONT of `defaultKeymap`: ⇧⌘↵ above, and ⌘↑ / ⌘↓ moving the
|
|
12
|
+
* line — the owner's chord (2026-10-05), which in `defaultKeymap` is the Mac's jump to the top or
|
|
13
|
+
* bottom. ⌥↑ / ⌥↓, VS Code's own move, is already in `defaultKeymap`, and so is ⇧⌘↑ (select to
|
|
14
|
+
* the top), which stays. The same keys in a `<textarea>` are `cursedbelt/react/line-keys`.
|
|
15
|
+
*/
|
|
16
|
+
export declare const lineKeyBindings: readonly KeyBinding[];
|
|
17
|
+
//# sourceMappingURL=lineAbove.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineAbove.d.ts","sourceRoot":"","sources":["../../../src/react/code-editor/lineAbove.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAYlC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,UAAU,EAIhD,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { moveLineDown, moveLineUp } from '@codemirror/commands';
|
|
2
|
+
import { EditorSelection } from '@codemirror/state';
|
|
3
|
+
/**
|
|
4
|
+
* ⇧⌘↵ — a blank line ABOVE each cursor's line, keeping that line's indentation, the caret on it.
|
|
5
|
+
* VS Code's "Insert Line Above"; CodeMirror's `defaultKeymap` has the line below (`Mod-Enter`,
|
|
6
|
+
* `insertBlankLine`) and the delete (`Shift-Mod-k`) but not this one. The `<textarea>` half of the
|
|
7
|
+
* same three keys is `cursedbelt/react/line-keys`.
|
|
8
|
+
*/
|
|
9
|
+
export const insertBlankLineAbove = ({ state, dispatch }) => {
|
|
10
|
+
if (state.readOnly)
|
|
11
|
+
return false;
|
|
12
|
+
const changes = state.changeByRange((range) => {
|
|
13
|
+
const line = state.doc.lineAt(range.from);
|
|
14
|
+
const indent = /^[ \t]*/.exec(line.text)?.[0] ?? '';
|
|
15
|
+
return {
|
|
16
|
+
changes: { from: line.from, insert: `${indent}${state.lineBreak}` },
|
|
17
|
+
range: EditorSelection.cursor(line.from + indent.length),
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
dispatch(state.update(changes, { scrollIntoView: true, userEvent: 'input' }));
|
|
21
|
+
return true;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* The line keys `CodeEditor` adds IN FRONT of `defaultKeymap`: ⇧⌘↵ above, and ⌘↑ / ⌘↓ moving the
|
|
25
|
+
* line — the owner's chord (2026-10-05), which in `defaultKeymap` is the Mac's jump to the top or
|
|
26
|
+
* bottom. ⌥↑ / ⌥↓, VS Code's own move, is already in `defaultKeymap`, and so is ⇧⌘↑ (select to
|
|
27
|
+
* the top), which stays. The same keys in a `<textarea>` are `cursedbelt/react/line-keys`.
|
|
28
|
+
*/
|
|
29
|
+
export const lineKeyBindings = [
|
|
30
|
+
{ key: 'Shift-Mod-Enter', run: insertBlankLineAbove },
|
|
31
|
+
{ key: 'Mod-ArrowUp', run: moveLineUp },
|
|
32
|
+
{ key: 'Mod-ArrowDown', run: moveLineDown },
|
|
33
|
+
];
|
|
34
|
+
//# sourceMappingURL=lineAbove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineAbove.js","sourceRoot":"","sources":["../../../src/react/code-editor/lineAbove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAqB,MAAM,mBAAmB,CAAC;AAGvE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxE,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,OAAO;YACL,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE;YACnE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;SACzD,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAA0B;IACpD,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,oBAAoB,EAAE;IACrD,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,UAAU,EAAE;IACvC,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE;CAC5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompanionLinkStatus.d.ts","sourceRoot":"","sources":["../../../src/react/companion-link/CompanionLinkStatus.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CompanionLinkStatus.d.ts","sourceRoot":"","sources":["../../../src/react/companion-link/CompanionLinkStatus.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,YAAY,CAAC;AAEpE,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,iBAAiB,CAAC;IACxB,gFAAgF;IAChF,MAAM,EAAE,OAAO,CAAC;IAChB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAgB,EAAE,SAAS,EAAE,EAAE,wBAAwB,+BAuF1G"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { formatTimeAgo } from 'cwip/format';
|
|
3
3
|
import { Accordion } from '../components/Accordion.js';
|
|
4
4
|
import { Badge } from '../components/Badge.js';
|
|
5
|
+
import { Property, PropertyList } from '../components/PropertyList.js';
|
|
5
6
|
import { Skeleton } from '../components/Skeleton.js';
|
|
6
7
|
import { StatusPill } from '../components/StatusPill.js';
|
|
7
8
|
import { cn } from '../lib/cn.js';
|
|
@@ -32,7 +33,7 @@ export function CompanionLinkStatus({ view, loaded, now = Date.now(), className
|
|
|
32
33
|
const heard = view.lastHeardClientTs != null ? formatTimeAgo(view.lastHeardClientTs, now) : 'never';
|
|
33
34
|
const openPending = view.pending.filter((p) => p.state === 'pending').length;
|
|
34
35
|
const summary = (_jsxs("div", { className: 'flex min-w-0 items-center gap-2', "data-testid": 'companion-link-summary', children: [_jsx(StatusPill, { status: connectionPillStatus(view.connection), children: CONNECTION_LABEL[view.connection] }), _jsx("span", { className: 'truncate text-xs text-muted-foreground', "data-testid": 'companion-link-heard', children: view.connection === 'never' ? 'no data yet' : `last heard ${heard}` }), openPending > 0 && (_jsxs(Badge, { tone: 'warning', className: 'shrink-0', "data-testid": 'companion-link-pending-count', children: [openPending, " pending"] })), view.backlog > 0 && (_jsxs(Badge, { tone: 'accent', className: 'shrink-0', title: 'Commands queued for the away primary', children: [view.backlog, " queued"] }))] }));
|
|
35
|
-
const detail = (_jsxs(
|
|
36
|
+
const detail = (_jsxs(PropertyList, { density: 'compact', children: [_jsx(Property, { label: 'Connection', children: CONNECTION_LABEL[view.connection] }), _jsx(Property, { label: 'Last heard', children: view.connection === 'never' ? '—' : heard }), _jsx(Property, { label: 'Mirror cursor', mono: true, children: view.haveUp }), _jsx(Property, { label: 'Command backlog', children: String(view.backlog) }), _jsx(Property, { label: 'Synced channels', children: String(view.channels.length) })] }));
|
|
36
37
|
return (_jsxs("div", { className: cn('flex min-w-0 flex-col gap-1', className), "data-testid": 'companion-link-status', children: [_jsx(Accordion, { type: 'single', className: 'divide-y-0', items: [
|
|
37
38
|
{
|
|
38
39
|
value: 'link',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompanionLinkStatus.js","sourceRoot":"","sources":["../../../src/react/companion-link/CompanionLinkStatus.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CompanionLinkStatus.js","sourceRoot":"","sources":["../../../src/react/companion-link/CompanionLinkStatus.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/react/components/Accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,OAAO,EAAE,SAAS,CAAC;IACnB,gDAAgD;IAChD,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,oBAAqB,SAAQ,kBAAkB;IACvD,mFAAmF;IACnF,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,UAAU,sBAAuB,SAAQ,kBAAkB;IACzD,2DAA2D;IAC3D,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAE3E;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,IAAe,EACf,KAAK,EACL,YAAY,EACZ,aAAa,GACd,EAAE,cAAc,+
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/react/components/Accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,OAAO,EAAE,SAAS,CAAC;IACnB,gDAAgD;IAChD,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,oBAAqB,SAAQ,kBAAkB;IACvD,mFAAmF;IACnF,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,UAAU,sBAAuB,SAAQ,kBAAkB;IACzD,2DAA2D;IAC3D,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAE3E;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,IAAe,EACf,KAAK,EACL,YAAY,EACZ,aAAa,GACd,EAAE,cAAc,+BAgChB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as RadixAccordion from '@radix-ui/react-accordion';
|
|
3
|
-
import {
|
|
3
|
+
import { ChevronRight } from 'lucide-react';
|
|
4
4
|
import { cn } from '../lib/cn.js';
|
|
5
5
|
/**
|
|
6
6
|
* A stacked set of collapsible sections built on Radix `Accordion` — the multi-item
|
|
@@ -15,6 +15,6 @@ export function Accordion({ items, className, contentClassName, type = 'single',
|
|
|
15
15
|
const rootProps = (type === 'single'
|
|
16
16
|
? { type, value, defaultValue, onValueChange, collapsible: true }
|
|
17
17
|
: { type, value, defaultValue, onValueChange });
|
|
18
|
-
return (_jsx(RadixAccordion.Root, { className: cn('divide-y divide-border', className), ...rootProps, children: items.map((item) => (_jsxs(RadixAccordion.Item, { value: item.value, disabled: item.disabled, children: [_jsx(RadixAccordion.Header, { children: _jsxs(RadixAccordion.Trigger, { className: 'group flex w-full items-center justify-
|
|
18
|
+
return (_jsx(RadixAccordion.Root, { className: cn('divide-y divide-border', className), ...rootProps, children: items.map((item) => (_jsxs(RadixAccordion.Item, { value: item.value, disabled: item.disabled, children: [_jsx(RadixAccordion.Header, { children: _jsxs(RadixAccordion.Trigger, { className: 'group flex w-full items-center justify-start gap-2 py-3 text-left text-sm font-medium text-foreground transition-colors hover:text-accent disabled:cursor-not-allowed disabled:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', children: [_jsx(ChevronRight, { "aria-hidden": true, className: 'size-4 shrink-0 text-muted-foreground transition-transform duration-200 group-data-[state=open]:rotate-90' }), _jsx("span", { className: 'min-w-0 flex-1', children: item.trigger })] }) }), _jsx(RadixAccordion.Content, { className: cn('overflow-hidden data-[state=open]:animate-collapsible-down data-[state=closed]:animate-collapsible-up'), children: _jsx("div", { className: cn('pb-3', contentClassName), children: item.content }) })] }, item.value))) }));
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=Accordion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../../../src/react/components/Accordion.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../../../src/react/components/Accordion.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAoClC;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,IAAI,GAAG,QAAQ,EACf,KAAK,EACL,YAAY,EACZ,aAAa,GACE;IACf,mFAAmF;IACnF,oEAAoE;IACpE,MAAM,SAAS,GAAG,CAChB,IAAI,KAAK,QAAQ;QACf,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE;QACjE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,CACJ,CAAC;IAC/C,OAAO,CACL,KAAC,cAAc,CAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,KAAM,SAAS,YACnF,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,MAAC,cAAc,CAAC,IAAI,IAAkB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,aAC9E,KAAC,cAAc,CAAC,MAAM,cAGpB,MAAC,cAAc,CAAC,OAAO,IAAC,SAAS,EAAC,8QAA8Q,aAE9S,KAAC,YAAY,yBAAa,SAAS,EAAC,2GAA2G,GAAG,EAClJ,eAAM,SAAS,EAAC,gBAAgB,YAAE,IAAI,CAAC,OAAO,GAAQ,IAC/B,GACH,EACxB,KAAC,cAAc,CAAC,OAAO,IACrB,SAAS,EAAE,EAAE,CACX,uGAAuG,CACxG,YAED,cAAK,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,YAAG,IAAI,CAAC,OAAO,GAAO,GAC3C,KAhBD,IAAI,CAAC,KAAK,CAiBd,CACvB,CAAC,GACkB,CACvB,CAAC;AACJ,CAAC"}
|
|
@@ -24,9 +24,28 @@ export declare const BADGE_TONE: {
|
|
|
24
24
|
readonly fuchsia: "bg-tone-fuchsia-bg text-tone-fuchsia-fg";
|
|
25
25
|
};
|
|
26
26
|
export type BadgeTone = keyof typeof BADGE_TONE;
|
|
27
|
+
/**
|
|
28
|
+
* The dot each tone draws under `appearance='dot'` — the tone's own hue, at full strength, on a
|
|
29
|
+
* mark 8px across. Typed against `BadgeTone` so a tone added above cannot ship without one.
|
|
30
|
+
*/
|
|
31
|
+
export declare const BADGE_DOT: Record<BadgeTone, string>;
|
|
32
|
+
/**
|
|
33
|
+
* `filled` is the capsule. `dot` is Linear's: a small dot in the tone's hue and the word in
|
|
34
|
+
* ordinary text, with no fill and no edge.
|
|
35
|
+
*
|
|
36
|
+
* 🔴 Reach for `dot` when the badge REPEATS — one per row of a list or a tree. The owner's
|
|
37
|
+
* 2026-10-05 comparison lost on exactly this: desk's Components tree drew a solid red `PROD` or
|
|
38
|
+
* orange `STAGE` capsule on every row, and the judge read them as "competing focal points". A
|
|
39
|
+
* filled capsule is the loudest thing in a row, so a column of them outranks the names beside
|
|
40
|
+
* it; a column of dots carries the same fact and lets the names lead (DAT-4: status pills are
|
|
41
|
+
* rationed). One filled capsule in a header is still right.
|
|
42
|
+
*/
|
|
43
|
+
export type BadgeAppearance = 'filled' | 'dot';
|
|
27
44
|
export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
28
45
|
/** Semantic or categorical tone (default `default`). */
|
|
29
46
|
tone?: BadgeTone;
|
|
47
|
+
/** `filled` (default) is the capsule; `dot` is a hue dot beside plain text. See {@link BadgeAppearance}. */
|
|
48
|
+
appearance?: BadgeAppearance;
|
|
30
49
|
}
|
|
31
|
-
export declare function Badge({ tone, className, title, ...props }: BadgeProps): import("react").JSX.Element;
|
|
50
|
+
export declare function Badge({ tone, appearance, className, title, children, ...props }: BadgeProps): import("react").JSX.Element;
|
|
32
51
|
//# sourceMappingURL=Badge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/react/components/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAmB5C,4HAA4H;AAC5H,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;CAgDb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,UAAU,CAAC;AAEhD,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,eAAe,CAAC;IACjE,wDAAwD;IACxD,IAAI,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/react/components/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAmB5C,4HAA4H;AAC5H,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;CAgDb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,UAAU,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAsB/C,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE/C,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,eAAe,CAAC;IACjE,wDAAwD;IACxD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,4GAA4G;IAC5G,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,wBAAgB,KAAK,CAAC,EAAE,IAAgB,EAAE,UAAqB,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BAyClH"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from '../lib/cn.js';
|
|
3
3
|
import { Tooltip } from './Tooltip.js';
|
|
4
4
|
/*
|
|
@@ -66,8 +66,35 @@ export const BADGE_TONE = {
|
|
|
66
66
|
violet: 'bg-tone-violet-bg text-tone-violet-fg',
|
|
67
67
|
fuchsia: 'bg-tone-fuchsia-bg text-tone-fuchsia-fg',
|
|
68
68
|
};
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
/**
|
|
70
|
+
* The dot each tone draws under `appearance='dot'` — the tone's own hue, at full strength, on a
|
|
71
|
+
* mark 8px across. Typed against `BadgeTone` so a tone added above cannot ship without one.
|
|
72
|
+
*/
|
|
73
|
+
export const BADGE_DOT = {
|
|
74
|
+
default: 'bg-muted-foreground',
|
|
75
|
+
neutral: 'bg-muted-foreground',
|
|
76
|
+
outline: 'bg-muted-foreground',
|
|
77
|
+
primary: 'bg-accent-solid',
|
|
78
|
+
accent: 'bg-accent',
|
|
79
|
+
success: 'bg-success',
|
|
80
|
+
warning: 'bg-warning',
|
|
81
|
+
error: 'bg-destructive',
|
|
82
|
+
destructive: 'bg-destructive',
|
|
83
|
+
emerald: 'bg-tone-emerald-fg',
|
|
84
|
+
sky: 'bg-tone-sky-fg',
|
|
85
|
+
cyan: 'bg-tone-cyan-fg',
|
|
86
|
+
amber: 'bg-tone-amber-fg',
|
|
87
|
+
purple: 'bg-tone-purple-fg',
|
|
88
|
+
rose: 'bg-tone-rose-fg',
|
|
89
|
+
orange: 'bg-tone-orange-fg',
|
|
90
|
+
slate: 'bg-tone-slate-fg',
|
|
91
|
+
lime: 'bg-tone-lime-fg',
|
|
92
|
+
teal: 'bg-tone-teal-fg',
|
|
93
|
+
violet: 'bg-tone-violet-fg',
|
|
94
|
+
fuchsia: 'bg-tone-fuchsia-fg',
|
|
95
|
+
};
|
|
96
|
+
export function Badge({ tone = 'default', appearance = 'filled', className, title, children, ...props }) {
|
|
97
|
+
const pill = appearance === 'dot' ? (_jsxs("span", { "data-appearance": 'dot', className: cn('inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground', className), ...props, children: [_jsx("span", { "aria-hidden": 'true', className: cn('size-2 flex-none rounded-full', BADGE_DOT[tone]) }), children] })) : (_jsx("span", { className: cn('inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium', BADGE_TONE[tone], className), ...props, children: children }));
|
|
71
98
|
// 🔴 `title` becomes a THEMED tooltip, never the OS one (2026-08-23, OPT unit 36).
|
|
72
99
|
//
|
|
73
100
|
// `BadgeProps extends HTMLAttributes<HTMLSpanElement>`, so `title` type-checked
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../../src/react/components/Badge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;;;;;;;;;;;GAcG;AACH,4HAA4H;AAC5H,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,2EAA2E;IAC3E,8FAA8F;IAC9F,yFAAyF;IACzF,6FAA6F;IAC7F,gFAAgF;IAChF,OAAO,EAAE,4DAA4D;IACrE,OAAO,EAAE,4DAA4D,EAAE,mBAAmB;IAC1F,OAAO,EAAE,4BAA4B;IACrC,MAAM,EAAE,iCAAiC,EAAE,oEAAoE;IAC/G,4EAA4E;IAC5E,0EAA0E;IAC1E,6EAA6E;IAC7E,OAAO,EAAE,4DAA4D;IACrE,OAAO,EAAE,4DAA4D;IACrE,KAAK,EAAE,wEAAwE;IAC/E,WAAW,EAAE,wEAAwE,EAAE,iBAAiB;IACxG,gFAAgF;IAChF,2EAA2E;IAC3E,8EAA8E;IAC9E,2EAA2E;IAC3E,mDAAmD;IACnD,OAAO,EAAE,sDAAsD;IAC/D,4EAA4E;IAC5E,yEAAyE;IACzE,6EAA6E;IAC7E,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,qDAAqD;IACrD,OAAO,EAAE,yCAAyC;IAClD,0FAA0F;IAC1F,uFAAuF;IACvF,oFAAoF;IACpF,GAAG,EAAE,8DAA8D;IACnE,IAAI,EAAE,mCAAmC;IACzC,KAAK,EAAE,qCAAqC;IAC5C,MAAM,EAAE,uCAAuC;IAC/C,IAAI,EAAE,mCAAmC;IACzC,MAAM,EAAE,uCAAuC;IAC/C,KAAK,EAAE,oEAAoE;IAC3E,qFAAqF;IACrF,oFAAoF;IACpF,4CAA4C;IAC5C,IAAI,EAAE,mCAAmC;IACzC,IAAI,EAAE,mCAAmC;IACzC,MAAM,EAAE,uCAAuC;IAC/C,OAAO,EAAE,yCAAyC;CAC1C,CAAC;
|
|
1
|
+
{"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../../src/react/components/Badge.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/react/components/Button.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,GAAG,EAGT,MAAM,OAAO,CAAC;AAGf,OAAO,EAAW,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIlF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc;;;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/react/components/Button.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,GAAG,EAGT,MAAM,OAAO,CAAC;AAGf,OAAO,EAAW,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIlF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc;;;8EAuG1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACxF,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAElF,MAAM,WAAW,WACf,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC;;;8CAG0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;6EACyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;;;;eAQW;IACX,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC;IAC9C,8EAA8E;IAC9E,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B;;;;8DAI0D;IAC1D,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE;yFACqF;IACrF,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC;gFAC4E;IAC5E,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC;;;;;;;;;;;;;OAaG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B;AAED,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAe,EACf,OAAe,EACf,QAAQ,EACR,OAAO,EACP,WAAW,EACX,aAAa,EACb,YAAY,EACZ,cAAsB,EACtB,YAAmB,EACnB,OAAc,EACd,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,GAAG,KAAK,EACT,EAAE,WAAW,+BA+Gb"}
|
|
@@ -40,7 +40,7 @@ export const buttonVariants = cva([
|
|
|
40
40
|
variants: {
|
|
41
41
|
// The 3-weight action taxonomy (task cbux-42, STANDARDS.md §4c):
|
|
42
42
|
// primary — the ONE solid hero action per view.
|
|
43
|
-
// secondary —
|
|
43
|
+
// secondary — filled neutral, hairline edge; the everyday supporting action.
|
|
44
44
|
// tertiary — low-contrast text/icon weight for row utilities and
|
|
45
45
|
// toolbars ("ghost" is the legacy alias — same rendering,
|
|
46
46
|
// both stay valid; new code should say what it means).
|
|
@@ -62,7 +62,13 @@ export const buttonVariants = cva([
|
|
|
62
62
|
// not an actionable button (owner UX teardown 2026-07-15 §4). The accent
|
|
63
63
|
// stays reserved for `primary`, so the one hero action per view keeps its
|
|
64
64
|
// pull while every supporting action still has real button presence.
|
|
65
|
-
|
|
65
|
+
// 🔴 A FILLED neutral with a hairline edge since 5.58.0 — Linear's secondary. It was
|
|
66
|
+
// `border-border-strong bg-card`: the card's own ground inside a full-strength 3:1
|
|
67
|
+
// outline, so a toolbar of them was a row of bright boxes ("stark block borders", the
|
|
68
|
+
// judge's words when desk lost to Linear on 2026-10-05, task 2822). The fill carries the
|
|
69
|
+
// presence now and the edge is the quiet `--border`; a labelled button is identified by
|
|
70
|
+
// its label and fill, so the 3:1 non-text floor that FIELD borders hold does not apply.
|
|
71
|
+
secondary: 'border border-border bg-muted text-foreground shadow-raised hover:bg-border focus-visible:ring-accent',
|
|
66
72
|
tertiary: 'text-foreground hover:bg-muted focus-visible:ring-accent',
|
|
67
73
|
ghost: 'text-foreground hover:bg-muted focus-visible:ring-accent',
|
|
68
74
|
link: 'h-auto px-0 py-0 text-accent underline-offset-4 hover:underline focus-visible:ring-accent',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/react/components/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAML,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,OAAO,EAA6C,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAC/B;IACE,+EAA+E;IAC/E,0EAA0E;IAC1E,iBAAiB,EAAE,wCAAwC;IAC3D,kHAAkH;IAClH,sGAAsG;IACtG,+HAA+H;IAC/H,qFAAqF;IACrF,gFAAgF;IAChF,2DAA2D;IAC3D,gFAAgF;IAChF,oFAAoF;IACpF,mGAAmG;IACnG,iCAAiC;CAClC,EACD;IACE,QAAQ,EAAE;QACR,iEAAiE;QACjE,sDAAsD;QACtD,
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/react/components/Button.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collapsible.d.ts","sourceRoot":"","sources":["../../../src/react/components/Collapsible.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,OAAO,EAAE,SAAS,CAAC;IACnB,mCAAmC;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,uEAAuE;IACvE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yDAAyD;IACzD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,WAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,gBAAgB,GACjB,EAAE,gBAAgB,+
|
|
1
|
+
{"version":3,"file":"Collapsible.d.ts","sourceRoot":"","sources":["../../../src/react/components/Collapsible.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,OAAO,EAAE,SAAS,CAAC;IACnB,mCAAmC;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,uEAAuE;IACvE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yDAAyD;IACzD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,WAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,gBAAgB,GACjB,EAAE,gBAAgB,+BA+BlB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as RadixCollapsible from '@radix-ui/react-collapsible';
|
|
3
|
-
import {
|
|
3
|
+
import { ChevronRight } from 'lucide-react';
|
|
4
4
|
import { cn } from '../lib/cn.js';
|
|
5
5
|
import { TAP_TARGET_HEIGHT } from '../lib/tapTarget.js';
|
|
6
6
|
import { RAW_BUTTON } from '../lib/cn.js';
|
|
@@ -17,6 +17,6 @@ export function Collapsible({ trigger, children, open, defaultOpen = false, onOp
|
|
|
17
17
|
return (_jsxs(RadixCollapsible.Root, { open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange, disabled: disabled, className: className, children: [_jsx(RadixCollapsible.Trigger, { asChild: true, children: _jsxs("button", {
|
|
18
18
|
// guardrails-ignore no-raw-action-button: this IS the Collapsible section-toggle
|
|
19
19
|
// primitive — its own trigger is necessarily a raw <button> (Radix Trigger asChild).
|
|
20
|
-
type: 'button', className: cn(RAW_BUTTON, `group flex w-full items-center justify-
|
|
20
|
+
type: 'button', className: cn(RAW_BUTTON, `group flex w-full items-center justify-start gap-2 py-2 text-left text-sm font-medium text-foreground transition-colors hover:text-accent disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${TAP_TARGET_HEIGHT}`), children: [_jsx(ChevronRight, { "aria-hidden": true, className: 'size-4 shrink-0 text-muted-foreground transition-transform duration-200 group-data-[state=open]:rotate-90' }), _jsx("span", { className: 'min-w-0 flex-1', children: trigger })] }) }), _jsx(RadixCollapsible.Content, { className: cn('overflow-hidden data-[state=open]:animate-collapsible-down data-[state=closed]:animate-collapsible-up', contentClassName), children: children })] }));
|
|
21
21
|
}
|
|
22
22
|
//# sourceMappingURL=Collapsible.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collapsible.js","sourceRoot":"","sources":["../../../src/react/components/Collapsible.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,gBAAgB,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Collapsible.js","sourceRoot":"","sources":["../../../src/react/components/Collapsible.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,gBAAgB,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAmB1C;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,WAAW,GAAG,KAAK,EACnB,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,gBAAgB,GACC;IACjB,OAAO,CACL,MAAC,gBAAgB,CAAC,IAAI,IACpB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,aAEpB,KAAC,gBAAgB,CAAC,OAAO,IAAC,OAAO,kBAC/B;oBACE,iFAAiF;oBACjF,qFAAqF;oBACrF,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,qQAAqQ,iBAAiB,EAAE,CAAC,aAGnT,KAAC,YAAY,yBAAa,SAAS,EAAC,2GAA2G,GAAG,EAClJ,eAAM,SAAS,EAAC,gBAAgB,YAAE,OAAO,GAAQ,IAC1C,GACgB,EAC3B,KAAC,gBAAgB,CAAC,OAAO,IACvB,SAAS,EAAE,EAAE,CACX,uGAAuG,EACvG,gBAAgB,CACjB,YAEA,QAAQ,GACgB,IACL,CACzB,CAAC;AACJ,CAAC"}
|
|
@@ -3,7 +3,7 @@ export interface DisclosureArrowProps {
|
|
|
3
3
|
open: boolean;
|
|
4
4
|
className?: string;
|
|
5
5
|
}
|
|
6
|
-
/** A chevron that
|
|
6
|
+
/** A right-pointing chevron that turns 90° to point down when `open` is true. */
|
|
7
7
|
export declare function DisclosureArrow({ open, className }: DisclosureArrowProps): import("react").JSX.Element;
|
|
8
8
|
export interface DisclosureButtonClassNames {
|
|
9
9
|
arrow?: string;
|
|
@@ -15,6 +15,6 @@ export interface DisclosureButtonProps {
|
|
|
15
15
|
className?: string;
|
|
16
16
|
classNames?: DisclosureButtonClassNames;
|
|
17
17
|
}
|
|
18
|
-
/** A button that reveals content on toggle —
|
|
18
|
+
/** A button that reveals content on toggle — a leading {@link DisclosureArrow}, then children. */
|
|
19
19
|
export declare function DisclosureButton({ open, onToggle, children, className, classNames, }: DisclosureButtonProps): import("react").JSX.Element;
|
|
20
20
|
//# sourceMappingURL=DisclosureButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisclosureButton.d.ts","sourceRoot":"","sources":["../../../src/react/components/DisclosureButton.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DisclosureButton.d.ts","sourceRoot":"","sources":["../../../src/react/components/DisclosureButton.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,oBAAoB,+BAWxE;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,0BAA0B,CAAC;CACzC;AAED,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,GACX,EAAE,qBAAqB,+BAmBvB"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// Simple disclosure/collapse primitives — a rotating-chevron arrow and a button
|
|
3
|
-
// wrapper that pairs
|
|
3
|
+
// wrapper that pairs the arrow with children. Used anywhere a lightweight toggle
|
|
4
4
|
// trigger is needed without the full Radix Collapsible overhead.
|
|
5
|
-
|
|
5
|
+
//
|
|
6
|
+
// The arrow LEADS (design law FRM-18, the owner's rule): a right-pointing chevron before the
|
|
7
|
+
// label that turns to point down when open — Finder's, Notion's and VS Code's disclosure.
|
|
8
|
+
import { ChevronRight } from 'lucide-react';
|
|
6
9
|
import { cn } from '../lib/cn.js';
|
|
7
10
|
import { RAW_BUTTON } from '../lib/cn.js';
|
|
8
|
-
/** A chevron that
|
|
11
|
+
/** A right-pointing chevron that turns 90° to point down when `open` is true. */
|
|
9
12
|
export function DisclosureArrow({ open, className }) {
|
|
10
|
-
return (_jsx(
|
|
13
|
+
return (_jsx(ChevronRight, { "aria-hidden": true, className: cn('size-4 shrink-0 transition-transform duration-200', open && 'rotate-90', className) }));
|
|
11
14
|
}
|
|
12
|
-
/** A button that reveals content on toggle —
|
|
15
|
+
/** A button that reveals content on toggle — a leading {@link DisclosureArrow}, then children. */
|
|
13
16
|
export function DisclosureButton({ open, onToggle, children, className, classNames, }) {
|
|
14
17
|
return (_jsxs("button", {
|
|
15
18
|
// guardrails-ignore no-raw-action-button: this IS the disclosure-toggle primitive —
|
|
@@ -17,6 +20,6 @@ export function DisclosureButton({ open, onToggle, children, className, classNam
|
|
|
17
20
|
type: 'button',
|
|
18
21
|
// A bare <button> drew no focus ring at all — a keyboard user could not see where they
|
|
19
22
|
// were (forge task 2595). The ring is the kit's focus-visible ring, on a rounded box.
|
|
20
|
-
className: cn(RAW_BUTTON, 'flex items-center gap-2 rounded-sm text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', className), "aria-expanded": open, onClick: onToggle, children: [
|
|
23
|
+
className: cn(RAW_BUTTON, 'flex items-center gap-2 rounded-sm text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', className), "aria-expanded": open, onClick: onToggle, children: [_jsx(DisclosureArrow, { open: open, className: classNames?.arrow }), children] }));
|
|
21
24
|
}
|
|
22
25
|
//# sourceMappingURL=DisclosureButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisclosureButton.js","sourceRoot":"","sources":["../../../src/react/components/DisclosureButton.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,iFAAiF;AACjF,iEAAiE;
|
|
1
|
+
{"version":3,"file":"DisclosureButton.js","sourceRoot":"","sources":["../../../src/react/components/DisclosureButton.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,iFAAiF;AACjF,iEAAiE;AACjE,EAAE;AACF,6FAA6F;AAC7F,0FAA0F;AAE1F,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAwB;IACvE,OAAO,CACL,KAAC,YAAY,yBAEX,SAAS,EAAE,EAAE,CACX,mDAAmD,EACnD,IAAI,IAAI,WAAW,EACnB,SAAS,CACV,GACD,CACH,CAAC;AACJ,CAAC;AAcD,kGAAkG;AAClG,MAAM,UAAU,gBAAgB,CAAC,EAC/B,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,GACY;IACtB,OAAO,CACL;QACE,oFAAoF;QACpF,wEAAwE;QACxE,IAAI,EAAC,QAAQ;QACb,uFAAuF;QACvF,sFAAsF;QACtF,SAAS,EAAE,EAAE,CAAC,UAAU,EACtB,sHAAsH,EACtH,SAAS,CACV,mBACc,IAAI,EACnB,OAAO,EAAE,QAAQ,aAEjB,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,GAAI,EAC5D,QAAQ,IACF,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import './formKit.css';
|
|
3
|
+
import './editorPage.css';
|
|
4
|
+
export interface EditorPageProps {
|
|
5
|
+
/** What is being made or changed — *"New template"*, *"Edit Dynatrace"*. The page's heading. */
|
|
6
|
+
title: ReactNode;
|
|
7
|
+
/** Where Back returns to, said before the title as a crumb — *"Templates"*. */
|
|
8
|
+
backLabel?: string;
|
|
9
|
+
/** Leave the page. Back, and Escape from anywhere on it — asked first while `isDirty`. */
|
|
10
|
+
onBack: () => void;
|
|
11
|
+
/**
|
|
12
|
+
* The form holds edits nobody has saved. Back and Escape then ask *"Discard changes?"*
|
|
13
|
+
* before leaving, as an editing `Modal` does (`useDiscardGuard`) — a half-made thing is
|
|
14
|
+
* never thrown away by a stray key. The page's own Cancel, if it has one, is the caller's.
|
|
15
|
+
*/
|
|
16
|
+
isDirty?: boolean;
|
|
17
|
+
/** Top-right: Cancel / Save, a delete. An `ActionBar`'s buttons, or a few `Button`s. */
|
|
18
|
+
actions?: ReactNode;
|
|
19
|
+
/** The form — the left side. Drawn quiet (`QuietForm`) unless `quiet={false}`. */
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
/** The live result of the form — the right side, as a mock somebody can tinker with. */
|
|
22
|
+
preview: ReactNode;
|
|
23
|
+
/** What the preview is. Its heading, and its tab on a phone. Default "Preview". */
|
|
24
|
+
previewLabel?: string;
|
|
25
|
+
/** Small controls over the preview — show or hide parts of it. Drawn beside its heading. */
|
|
26
|
+
previewTools?: ReactNode;
|
|
27
|
+
/** The form's share of the width, 0–1, before anybody drags. Default 0.5. */
|
|
28
|
+
defaultSplit?: number;
|
|
29
|
+
/** localStorage key the dragged split is kept under. Omit to forget it on close. */
|
|
30
|
+
storageKey?: string;
|
|
31
|
+
/** Linear's form: no boxes until a control is pointed at. Default `true`. */
|
|
32
|
+
quiet?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* `'overlay'` (default) covers the window — the page opens over whatever was there and Back
|
|
35
|
+
* returns to it untouched. `'inline'` fills its container, for a host whose router owns pages.
|
|
36
|
+
*/
|
|
37
|
+
presentation?: 'overlay' | 'inline';
|
|
38
|
+
className?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A creation page: the form on the left, a live mock of what it makes on the right, and a
|
|
42
|
+
* divider between them that drags.
|
|
43
|
+
*
|
|
44
|
+
* The owner, 2026-10-05, on desk's template editor: *"instead of opening a modal I want to open a
|
|
45
|
+
* page with a split view where I see the forms and fields … on the left and I see what it looks
|
|
46
|
+
* like so far and can tinker with a mock version of it on the right. I should be able to drag to
|
|
47
|
+
* resize a vertical divider … On mobile it will need an appropriate narrow layout."*
|
|
48
|
+
*
|
|
49
|
+
* - **Wide** (its container ≥ 48rem): two columns and a `separator` between them — drag it,
|
|
50
|
+
* or focus it and use ← / → (Home / End for the limits); a double-click puts it back. The
|
|
51
|
+
* split is kept under `storageKey`. Each side scrolls on its own, so a long form never pushes
|
|
52
|
+
* the preview out of sight.
|
|
53
|
+
* - **Narrow**: one side at a time, chosen by an Edit / Preview switch in the header — a phone
|
|
54
|
+
* has no room for both, and a pinned half-height preview leaves neither usable.
|
|
55
|
+
*
|
|
56
|
+
* The header is the page's own: a Back arrow with the crumb, the title, and the actions
|
|
57
|
+
* top-right where Linear and every desktop editor put Save. Escape anywhere is Back, as it was
|
|
58
|
+
* when the same form was a dialog.
|
|
59
|
+
*
|
|
60
|
+
* Plain stylesheet (`formKit.css`) — draws without Tailwind; `cursedbelt/react/form-kit`.
|
|
61
|
+
*/
|
|
62
|
+
export declare function EditorPage({ title, backLabel, onBack, isDirty, actions, children, preview, previewLabel, previewTools, defaultSplit, storageKey, quiet, presentation, className, }: EditorPageProps): import("react").JSX.Element;
|
|
63
|
+
export interface QuietFormProps {
|
|
64
|
+
children: ReactNode;
|
|
65
|
+
className?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Linear's form, for any form: inputs, textareas and selects drawn with no box until they are
|
|
69
|
+
* pointed at or focused, labels muted and small, so the values are the only full-strength text.
|
|
70
|
+
*
|
|
71
|
+
* The owner, 2026-10-05, beside a Linear project page: *"I like how it doesn't have boxes around
|
|
72
|
+
* all the fields and doesn't fill in extra text or explanations. I want this minimal look in our
|
|
73
|
+
* apps too."* `EditorPage` puts its form inside one; wrap any other form to get the same.
|
|
74
|
+
* The words are the caller's half: a field that needs a description to be understood has the
|
|
75
|
+
* wrong label or the wrong placeholder.
|
|
76
|
+
*/
|
|
77
|
+
export declare function QuietForm({ children, className }: QuietFormProps): import("react").JSX.Element;
|
|
78
|
+
//# sourceMappingURL=EditorPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditorPage.d.ts","sourceRoot":"","sources":["../../../src/react/components/EditorPage.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAIf,OAAO,eAAe,CAAC;AACvB,OAAO,kBAAkB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,gGAAgG;IAChG,KAAK,EAAE,SAAS,CAAC;IACjB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wFAAwF;IACxF,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,kFAAkF;IAClF,QAAQ,EAAE,SAAS,CAAC;IACpB,wFAAwF;IACxF,OAAO,EAAE,SAAS,CAAC;IACnB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAkB,EAClB,MAAM,EACN,OAAO,EACP,OAAO,EACP,QAAQ,EACR,OAAO,EACP,YAAwB,EACxB,YAAY,EACZ,YAAkB,EAClB,UAAU,EACV,KAAY,EACZ,YAAwB,EACxB,SAAS,GACV,EAAE,eAAe,+BA2JjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,+BAEhE"}
|