@awesome-markdown/board-ui 0.0.0-stage → 2.0.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/README.md +76 -2
- package/dist/board/Board.d.ts +24 -0
- package/dist/board/Board.d.ts.map +1 -0
- package/dist/board/Board.js +179 -0
- package/dist/board/Board.js.map +1 -0
- package/dist/board/Cell.d.ts +23 -0
- package/dist/board/Cell.d.ts.map +1 -0
- package/dist/board/Cell.js +150 -0
- package/dist/board/Cell.js.map +1 -0
- package/dist/board/ColumnHeader.d.ts +18 -0
- package/dist/board/ColumnHeader.d.ts.map +1 -0
- package/dist/board/ColumnHeader.js +31 -0
- package/dist/board/ColumnHeader.js.map +1 -0
- package/dist/board/HomelessItemCard.d.ts +15 -0
- package/dist/board/HomelessItemCard.d.ts.map +1 -0
- package/dist/board/HomelessItemCard.js +37 -0
- package/dist/board/HomelessItemCard.js.map +1 -0
- package/dist/board/HomelessPanel.d.ts +17 -0
- package/dist/board/HomelessPanel.d.ts.map +1 -0
- package/dist/board/HomelessPanel.js +26 -0
- package/dist/board/HomelessPanel.js.map +1 -0
- package/dist/board/ItemCard.d.ts +21 -0
- package/dist/board/ItemCard.d.ts.map +1 -0
- package/dist/board/ItemCard.js +97 -0
- package/dist/board/ItemCard.js.map +1 -0
- package/dist/board/SwimlaneRow.d.ts +23 -0
- package/dist/board/SwimlaneRow.d.ts.map +1 -0
- package/dist/board/SwimlaneRow.js +30 -0
- package/dist/board/SwimlaneRow.js.map +1 -0
- package/dist/board/dnd/boardDnd.d.ts +15 -0
- package/dist/board/dnd/boardDnd.d.ts.map +1 -0
- package/dist/board/dnd/boardDnd.js +69 -0
- package/dist/board/dnd/boardDnd.js.map +1 -0
- package/dist/board/dnd/dragTypes.d.ts +24 -0
- package/dist/board/dnd/dragTypes.d.ts.map +1 -0
- package/dist/board/dnd/dragTypes.js +22 -0
- package/dist/board/dnd/dragTypes.js.map +1 -0
- package/dist/board/dnd/mutateDragDrop.d.ts +35 -0
- package/dist/board/dnd/mutateDragDrop.d.ts.map +1 -0
- package/dist/board/dnd/mutateDragDrop.js +97 -0
- package/dist/board/dnd/mutateDragDrop.js.map +1 -0
- package/dist/board/dnd/onDragEnd.d.ts +24 -0
- package/dist/board/dnd/onDragEnd.d.ts.map +1 -0
- package/dist/board/dnd/onDragEnd.js +47 -0
- package/dist/board/dnd/onDragEnd.js.map +1 -0
- package/dist/board/layout/AxisBehavior.d.ts +36 -0
- package/dist/board/layout/AxisBehavior.d.ts.map +1 -0
- package/dist/board/layout/AxisBehavior.js +86 -0
- package/dist/board/layout/AxisBehavior.js.map +1 -0
- package/dist/board/layout/AxisDrawer.d.ts +17 -0
- package/dist/board/layout/AxisDrawer.d.ts.map +1 -0
- package/dist/board/layout/AxisDrawer.js +40 -0
- package/dist/board/layout/AxisDrawer.js.map +1 -0
- package/dist/board/layout/BoardDrawer.d.ts +11 -0
- package/dist/board/layout/BoardDrawer.d.ts.map +1 -0
- package/dist/board/layout/BoardDrawer.js +27 -0
- package/dist/board/layout/BoardDrawer.js.map +1 -0
- package/dist/board/layout/Drawer.d.ts +19 -0
- package/dist/board/layout/Drawer.d.ts.map +1 -0
- package/dist/board/layout/Drawer.js +18 -0
- package/dist/board/layout/Drawer.js.map +1 -0
- package/dist/board/layout/FilterEditor.d.ts +12 -0
- package/dist/board/layout/FilterEditor.d.ts.map +1 -0
- package/dist/board/layout/FilterEditor.js +11 -0
- package/dist/board/layout/FilterEditor.js.map +1 -0
- package/dist/board/layout/InlineControls.d.ts +22 -0
- package/dist/board/layout/InlineControls.d.ts.map +1 -0
- package/dist/board/layout/InlineControls.js +39 -0
- package/dist/board/layout/InlineControls.js.map +1 -0
- package/dist/board/layout/SortableAxis.d.ts +28 -0
- package/dist/board/layout/SortableAxis.d.ts.map +1 -0
- package/dist/board/layout/SortableAxis.js +39 -0
- package/dist/board/layout/SortableAxis.js.map +1 -0
- package/dist/board/layout/axis-defaults.d.ts +22 -0
- package/dist/board/layout/axis-defaults.d.ts.map +1 -0
- package/dist/board/layout/axis-defaults.js +37 -0
- package/dist/board/layout/axis-defaults.js.map +1 -0
- package/dist/board/layout/filter-draft.d.ts +21 -0
- package/dist/board/layout/filter-draft.d.ts.map +1 -0
- package/dist/board/layout/filter-draft.js +112 -0
- package/dist/board/layout/filter-draft.js.map +1 -0
- package/dist/board/layout/useBoardLayout.d.ts +27 -0
- package/dist/board/layout/useBoardLayout.d.ts.map +1 -0
- package/dist/board/layout/useBoardLayout.js +92 -0
- package/dist/board/layout/useBoardLayout.js.map +1 -0
- package/dist/breadcrumb.d.ts +22 -0
- package/dist/breadcrumb.d.ts.map +1 -0
- package/dist/breadcrumb.js +15 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/components/ConflictBanner.d.ts +12 -0
- package/dist/components/ConflictBanner.d.ts.map +1 -0
- package/dist/components/ConflictBanner.js +47 -0
- package/dist/components/ConflictBanner.js.map +1 -0
- package/dist/components/ConflictDiff.d.ts +13 -0
- package/dist/components/ConflictDiff.d.ts.map +1 -0
- package/dist/components/ConflictDiff.js +97 -0
- package/dist/components/ConflictDiff.js.map +1 -0
- package/dist/components/ConflictPanel.d.ts +16 -0
- package/dist/components/ConflictPanel.d.ts.map +1 -0
- package/dist/components/ConflictPanel.js +53 -0
- package/dist/components/ConflictPanel.js.map +1 -0
- package/dist/components/ItemRecovery.d.ts +9 -0
- package/dist/components/ItemRecovery.d.ts.map +1 -0
- package/dist/components/ItemRecovery.js +48 -0
- package/dist/components/ItemRecovery.js.map +1 -0
- package/dist/components/PropertyTree.d.ts +18 -0
- package/dist/components/PropertyTree.d.ts.map +1 -0
- package/dist/components/PropertyTree.js +109 -0
- package/dist/components/PropertyTree.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/derive-summary.d.ts +9 -0
- package/dist/lib/derive-summary.d.ts.map +1 -0
- package/dist/lib/derive-summary.js +27 -0
- package/dist/lib/derive-summary.js.map +1 -0
- package/dist/lib/item-board.d.ts +2 -0
- package/dist/lib/item-board.d.ts.map +1 -0
- package/dist/lib/item-board.js +7 -0
- package/dist/lib/item-board.js.map +1 -0
- package/dist/lib/patch-visible-item.d.ts +4 -0
- package/dist/lib/patch-visible-item.d.ts.map +1 -0
- package/dist/lib/patch-visible-item.js +10 -0
- package/dist/lib/patch-visible-item.js.map +1 -0
- package/dist/lib/property-display.d.ts +17 -0
- package/dist/lib/property-display.d.ts.map +1 -0
- package/dist/lib/property-display.js +86 -0
- package/dist/lib/property-display.js.map +1 -0
- package/dist/lib/property-tree.d.ts +23 -0
- package/dist/lib/property-tree.d.ts.map +1 -0
- package/dist/lib/property-tree.js +109 -0
- package/dist/lib/property-tree.js.map +1 -0
- package/dist/pages/BoardListPage.d.ts +9 -0
- package/dist/pages/BoardListPage.d.ts.map +1 -0
- package/dist/pages/BoardListPage.js +113 -0
- package/dist/pages/BoardListPage.js.map +1 -0
- package/dist/pages/BoardPage.d.ts +7 -0
- package/dist/pages/BoardPage.d.ts.map +1 -0
- package/dist/pages/BoardPage.js +37 -0
- package/dist/pages/BoardPage.js.map +1 -0
- package/dist/pages/ItemEditorPage.d.ts +3 -0
- package/dist/pages/ItemEditorPage.d.ts.map +1 -0
- package/dist/pages/ItemEditorPage.js +236 -0
- package/dist/pages/ItemEditorPage.js.map +1 -0
- package/dist/provider/ProviderContext.d.ts +17 -0
- package/dist/provider/ProviderContext.d.ts.map +1 -0
- package/dist/provider/ProviderContext.js +21 -0
- package/dist/provider/ProviderContext.js.map +1 -0
- package/dist/router/RouterAdapter.d.ts +43 -0
- package/dist/router/RouterAdapter.d.ts.map +1 -0
- package/dist/router/RouterAdapter.js +21 -0
- package/dist/router/RouterAdapter.js.map +1 -0
- package/dist/shell/SyncStatusDot.d.ts +8 -0
- package/dist/shell/SyncStatusDot.d.ts.map +1 -0
- package/dist/shell/SyncStatusDot.js +58 -0
- package/dist/shell/SyncStatusDot.js.map +1 -0
- package/dist/shell/ThemeToggle.d.ts +8 -0
- package/dist/shell/ThemeToggle.d.ts.map +1 -0
- package/dist/shell/ThemeToggle.js +21 -0
- package/dist/shell/ThemeToggle.js.map +1 -0
- package/dist/state/theme-store.d.ts +17 -0
- package/dist/state/theme-store.d.ts.map +1 -0
- package/dist/state/theme-store.js +58 -0
- package/dist/state/theme-store.js.map +1 -0
- package/dist/state/useBoardRender.d.ts +16 -0
- package/dist/state/useBoardRender.d.ts.map +1 -0
- package/dist/state/useBoardRender.js +53 -0
- package/dist/state/useBoardRender.js.map +1 -0
- package/dist/state/useProviderSubscribe.d.ts +22 -0
- package/dist/state/useProviderSubscribe.d.ts.map +1 -0
- package/dist/state/useProviderSubscribe.js +48 -0
- package/dist/state/useProviderSubscribe.js.map +1 -0
- package/dist/sync/conflict-api.d.ts +16 -0
- package/dist/sync/conflict-api.d.ts.map +1 -0
- package/dist/sync/conflict-api.js +35 -0
- package/dist/sync/conflict-api.js.map +1 -0
- package/dist/sync/conflict-store.d.ts +44 -0
- package/dist/sync/conflict-store.d.ts.map +1 -0
- package/dist/sync/conflict-store.js +159 -0
- package/dist/sync/conflict-store.js.map +1 -0
- package/fonts/InterTight-Medium.woff2 +0 -0
- package/fonts/InterTight-Regular.woff2 +0 -0
- package/fonts/JetBrainsMono-Medium.woff2 +0 -0
- package/fonts/JetBrainsMono-Regular.woff2 +0 -0
- package/fonts/LICENSE +14 -0
- package/package.json +59 -3
- package/styles.css +852 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState, useCallback } from 'react';
|
|
3
|
+
import { useConflict } from '../sync/conflict-store.js';
|
|
4
|
+
import { ConflictDiff } from './ConflictDiff.js';
|
|
5
|
+
/**
|
|
6
|
+
* Modal panel for resolving merge conflicts.
|
|
7
|
+
*
|
|
8
|
+
* Lists each conflicting path with a side-by-side diff and two action buttons:
|
|
9
|
+
* - "Use mine" → 'ours'
|
|
10
|
+
* - "Use remote" → 'theirs'
|
|
11
|
+
*
|
|
12
|
+
* The Submit button is enabled only when every path has a decision.
|
|
13
|
+
*/
|
|
14
|
+
export function ConflictPanel({ onClose }) {
|
|
15
|
+
const { activeConflict, submitting, resolve } = useConflict();
|
|
16
|
+
const [decisions, setDecisions] = useState(() => {
|
|
17
|
+
const init = {};
|
|
18
|
+
for (const entry of activeConflict?.paths ?? []) {
|
|
19
|
+
if (entry.decision === 'ours' || entry.decision === 'theirs') {
|
|
20
|
+
init[entry.path] = entry.decision;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return init;
|
|
24
|
+
});
|
|
25
|
+
const [submitError, setSubmitError] = useState(null);
|
|
26
|
+
if (!activeConflict)
|
|
27
|
+
return null;
|
|
28
|
+
const setDecision = useCallback((filePath, decision) => {
|
|
29
|
+
setDecisions((prev) => ({ ...prev, [filePath]: decision }));
|
|
30
|
+
}, []);
|
|
31
|
+
const canSubmit = activeConflict.paths.every((entry) => decisions[entry.path] === 'ours' || decisions[entry.path] === 'theirs') && !submitting;
|
|
32
|
+
const handleSubmit = useCallback(async () => {
|
|
33
|
+
setSubmitError(null);
|
|
34
|
+
try {
|
|
35
|
+
await resolve(decisions);
|
|
36
|
+
onClose();
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
setSubmitError(err instanceof Error ? err.message : 'Submit failed');
|
|
40
|
+
}
|
|
41
|
+
}, [decisions, resolve, onClose]);
|
|
42
|
+
return (_jsx("div", { role: "dialog", "aria-modal": "true", "aria-label": "Resolve merge conflicts", className: "fixed inset-0 z-50 flex items-center justify-center bg-black/40", "data-testid": "conflict-panel", children: _jsxs("div", { className: "bg-white rounded-xl shadow-xl w-full max-w-6xl mx-4 max-h-[90vh] flex flex-col", children: [_jsxs("div", { className: "flex items-center justify-between px-6 py-4 border-b border-gray-200 flex-shrink-0", children: [_jsx("h2", { className: "text-lg font-semibold text-gray-800", children: "Resolve Merge Conflicts" }), _jsx("button", { type: "button", onClick: onClose, "aria-label": "Close conflict panel", className: "text-gray-400 hover:text-gray-600 text-xl leading-none", "data-testid": "conflict-panel-close", children: "\u2715" })] }), _jsx("div", { className: "flex-1 overflow-y-auto px-6 py-4 space-y-6", children: activeConflict.paths.map((entry) => {
|
|
43
|
+
const decision = decisions[entry.path];
|
|
44
|
+
return (_jsxs("div", { className: "border border-gray-200 rounded-lg overflow-hidden", "data-testid": `conflict-path-${entry.path.replace(/\//g, '-')}`, children: [_jsxs("div", { className: "flex items-center justify-between gap-2 px-4 py-2 bg-gray-50 border-b border-gray-200", children: [_jsx("code", { className: "text-sm font-mono text-gray-700 break-all", children: entry.path }), _jsx("span", { className: "text-xs text-gray-400 flex-shrink-0", "data-testid": `conflict-status-${entry.path}`, children: decision === 'ours' ? '✓ Use mine'
|
|
45
|
+
: decision === 'theirs' ? '✓ Use remote'
|
|
46
|
+
: '⬜ Unresolved' })] }), _jsx("div", { className: "p-3", children: _jsx(ConflictDiff, { path: entry.path, oursLabel: entry.oursLabel, theirsLabel: entry.theirsLabel, oursContent: entry.oursContent, theirsContent: entry.theirsContent, oursTruncated: entry.oursTruncated, theirsTruncated: entry.theirsTruncated }) }), _jsxs("div", { className: "flex gap-2 px-4 pb-4", children: [_jsxs("button", { type: "button", onClick: () => setDecision(entry.path, 'ours'), disabled: submitting, className: `text-xs px-3 py-1.5 rounded border font-medium transition-colors ${decision === 'ours'
|
|
47
|
+
? 'bg-blue-600 text-white border-blue-600'
|
|
48
|
+
: 'border-gray-300 text-gray-600 hover:bg-gray-50'}`, "data-testid": `conflict-ours-${entry.path}`, children: ["Use mine (", entry.oursLabel, ")"] }), _jsxs("button", { type: "button", onClick: () => setDecision(entry.path, 'theirs'), disabled: submitting, className: `text-xs px-3 py-1.5 rounded border font-medium transition-colors ${decision === 'theirs'
|
|
49
|
+
? 'bg-green-600 text-white border-green-600'
|
|
50
|
+
: 'border-gray-300 text-gray-600 hover:bg-gray-50'}`, "data-testid": `conflict-theirs-${entry.path}`, children: ["Use remote (", entry.theirsLabel, ")"] })] })] }, entry.path));
|
|
51
|
+
}) }), _jsxs("div", { className: "px-6 py-4 border-t border-gray-200 flex-shrink-0 space-y-2", children: [submitError && (_jsx("p", { className: "text-sm text-red-600", "data-testid": "conflict-submit-error", children: submitError })), _jsxs("div", { className: "flex justify-end gap-3", children: [_jsx("button", { type: "button", onClick: onClose, disabled: submitting, className: "px-4 py-2 text-sm rounded-lg border border-gray-300 hover:bg-gray-50 disabled:opacity-50", "data-testid": "conflict-panel-cancel", children: "Cancel" }), _jsx("button", { type: "button", onClick: () => void handleSubmit(), disabled: !canSubmit, className: "px-4 py-2 text-sm rounded-lg bg-blue-600 text-white font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors", "data-testid": "conflict-submit-btn", children: submitting ? 'Resolving…' : 'Resolve conflicts' })] })] })] }) }));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=ConflictPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConflictPanel.js","sourceRoot":"","sources":["../../src/components/ConflictPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Item } from '@awesome-markdown/contracts';
|
|
3
|
+
export declare function recoveryFilename(slug: string, extension: string): string;
|
|
4
|
+
export declare function ItemRecovery({ item, invalid, announce, }: {
|
|
5
|
+
item: Item | null;
|
|
6
|
+
invalid: string;
|
|
7
|
+
announce: (message: string) => void;
|
|
8
|
+
}): React.ReactElement;
|
|
9
|
+
//# sourceMappingURL=ItemRecovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ItemRecovery.d.ts","sourceRoot":"","sources":["../../src/components/ItemRecovery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAExD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGxE;AACD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,OAAO,EACP,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,GAAG,KAAK,CAAC,YAAY,CAmErB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
|
+
import { itemYaml, itemMarkdown } from '@awesome-markdown/contracts';
|
|
4
|
+
export function recoveryFilename(slug, extension) {
|
|
5
|
+
const safe = slug.replace(/[^A-Za-z0-9_-]/g, '-').replace(/^-+|-+$/g, '');
|
|
6
|
+
return `${safe || 'item'}.${extension}`;
|
|
7
|
+
}
|
|
8
|
+
export function ItemRecovery({ item, invalid, announce, }) {
|
|
9
|
+
const [error, setError] = useState('');
|
|
10
|
+
const yaml = item && !invalid ? itemYaml(item) : '';
|
|
11
|
+
const download = (extension) => {
|
|
12
|
+
if (!item || invalid)
|
|
13
|
+
return;
|
|
14
|
+
let url = '';
|
|
15
|
+
try {
|
|
16
|
+
url = URL.createObjectURL(new Blob([extension === 'yaml' ? yaml : itemMarkdown(item)], {
|
|
17
|
+
type: 'text/plain;charset=utf-8',
|
|
18
|
+
}));
|
|
19
|
+
const link = document.createElement('a');
|
|
20
|
+
link.href = url;
|
|
21
|
+
link.download = recoveryFilename(item.slug, extension);
|
|
22
|
+
document.body.append(link);
|
|
23
|
+
link.click();
|
|
24
|
+
link.remove();
|
|
25
|
+
announce(`Downloaded ${extension === 'yaml' ? 'YAML properties' : 'full Markdown draft'}. This does not save the item.`);
|
|
26
|
+
}
|
|
27
|
+
catch (reason) {
|
|
28
|
+
setError(`Download failed: ${reason instanceof Error ? reason.message : String(reason)}`);
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
if (url)
|
|
32
|
+
setTimeout(() => URL.revokeObjectURL(url), 1000);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
return (_jsxs("details", { className: "item-recovery", children: [_jsx("summary", { children: "YAML preview and recovery" }), invalid ? (_jsxs("p", { role: "status", children: [invalid, " Complete or remove invalid input before previewing or exporting."] })) : (_jsx("pre", { "data-testid": "yaml-preview", "aria-label": "YAML properties", children: _jsx("code", { className: "language-yaml", children: yaml }) })), _jsxs("div", { className: "item-actions", children: [_jsx("button", { type: "button", disabled: Boolean(invalid) || !item, onClick: () => {
|
|
36
|
+
setError('');
|
|
37
|
+
void (async () => {
|
|
38
|
+
try {
|
|
39
|
+
await navigator.clipboard.writeText(yaml);
|
|
40
|
+
announce('Copied YAML properties. Document text is excluded.');
|
|
41
|
+
}
|
|
42
|
+
catch (reason) {
|
|
43
|
+
setError(`Copy failed: ${String(reason)}`);
|
|
44
|
+
}
|
|
45
|
+
})();
|
|
46
|
+
}, children: "Copy YAML" }), _jsx("button", { type: "button", disabled: Boolean(invalid) || !item, onClick: () => download('yaml'), children: "Download YAML" }), _jsx("button", { type: "button", disabled: Boolean(invalid) || !item, onClick: () => download('md'), children: "Download Markdown" })] }), error && _jsx("p", { role: "alert", children: error })] }));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=ItemRecovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ItemRecovery.js","sourceRoot":"","sources":["../../src/components/ItemRecovery.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { PropertyValue } from '@awesome-markdown/contracts';
|
|
3
|
+
import type { ValueNode } from '../lib/property-tree.js';
|
|
4
|
+
export declare function PropertyRead({ value, label, }: {
|
|
5
|
+
value: PropertyValue;
|
|
6
|
+
label: string;
|
|
7
|
+
}): React.ReactElement;
|
|
8
|
+
interface TreeProps {
|
|
9
|
+
node: ValueNode;
|
|
10
|
+
label: string;
|
|
11
|
+
root?: boolean;
|
|
12
|
+
change: (id: string, change: (value: ValueNode) => ValueNode) => void;
|
|
13
|
+
pending: (id: string, value: boolean) => void;
|
|
14
|
+
announce: (message: string) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function PropertyEdit(props: TreeProps): React.ReactElement;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=PropertyTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertyTree.d.ts","sourceRoot":"","sources":["../../src/components/PropertyTree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,yBAAyB,CAAC;AAYpE,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,GACN,EAAE;IACD,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,KAAK,CAAC,YAAY,CA+BrB;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,KAAK,IAAI,CAAC;IACtE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AA8FD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAuJjE"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React, { useId, useRef, useState } from 'react';
|
|
3
|
+
import { defaultNode, numericValue, validName } from '../lib/property-tree.js';
|
|
4
|
+
const types = ['text', 'number', 'boolean', 'group', 'list', 'null'];
|
|
5
|
+
const typeOf = (value) => value === null
|
|
6
|
+
? 'null'
|
|
7
|
+
: Array.isArray(value)
|
|
8
|
+
? 'list'
|
|
9
|
+
: typeof value === 'object'
|
|
10
|
+
? 'group'
|
|
11
|
+
: typeof value;
|
|
12
|
+
export function PropertyRead({ value, label, }) {
|
|
13
|
+
const type = typeOf(value);
|
|
14
|
+
if (value !== null && typeof value === 'object') {
|
|
15
|
+
const entries = Object.entries(value);
|
|
16
|
+
return (_jsxs("details", { className: "property-container", open: true, children: [_jsxs("summary", { children: [_jsx("strong", { children: label }), ' ', _jsxs("span", { className: "property-type", children: [type, " \u00B7 ", entries.length, " ", entries.length === 1 ? 'entry' : 'entries'] })] }), _jsx("div", { className: "property-children", children: entries.map(([key, child], index) => (_jsx(PropertyRead, { label: Array.isArray(value) ? `Entry ${index + 1}` : key, value: child }, key))) })] }));
|
|
17
|
+
}
|
|
18
|
+
return (_jsxs("div", { className: "property-scalar", children: [_jsx("strong", { children: label }), _jsx("span", { className: "property-type", children: type }), _jsx("code", { children: typeof value === 'string' ? JSON.stringify(value) : String(value) })] }));
|
|
19
|
+
}
|
|
20
|
+
function AddValue({ node, label, root, change, pending, announce }) {
|
|
21
|
+
const [adding, setAdding] = useState(false);
|
|
22
|
+
const [name, setName] = useState('');
|
|
23
|
+
const [type, setType] = useState('text');
|
|
24
|
+
const [error, setError] = useState('');
|
|
25
|
+
const trigger = useRef(null);
|
|
26
|
+
const id = useId();
|
|
27
|
+
const close = () => {
|
|
28
|
+
setAdding(false);
|
|
29
|
+
setName('');
|
|
30
|
+
setError('');
|
|
31
|
+
pending(node.id, false);
|
|
32
|
+
requestAnimationFrame(() => trigger.current?.focus());
|
|
33
|
+
};
|
|
34
|
+
return (_jsx("div", { className: "property-add", children: !adding ? (_jsxs("button", { ref: trigger, type: "button", onClick: () => {
|
|
35
|
+
setAdding(true);
|
|
36
|
+
pending(node.id, true);
|
|
37
|
+
}, children: ["Add ", node.type === 'list' ? 'entry' : 'property', " to ", label] })) : (_jsxs("div", { role: "group", "aria-label": `Add to ${label}`, className: "property-add-form", children: [_jsxs("span", { children: ["Adding to ", label] }), node.type !== 'list' && (_jsxs("label", { htmlFor: `${id}-name`, children: ["Name", _jsx("input", { id: `${id}-name`, autoFocus: true, value: name, "aria-invalid": Boolean(error), "aria-describedby": error ? `${id}-error` : undefined, onChange: (event) => {
|
|
38
|
+
setName(event.target.value);
|
|
39
|
+
setError('');
|
|
40
|
+
} })] })), _jsxs("label", { htmlFor: `${id}-type`, children: ["Type", _jsx("select", { id: `${id}-type`, autoFocus: node.type === 'list', value: type, onChange: (event) => setType(event.target.value), children: types.map((t) => (_jsx("option", { children: t }, t))) })] }), _jsx("button", { type: "button", onClick: () => {
|
|
41
|
+
try {
|
|
42
|
+
const key = node.type === 'list' ? '' : validName(name, node, Boolean(root));
|
|
43
|
+
change(node.id, (current) => ({
|
|
44
|
+
...current,
|
|
45
|
+
entries: [...current.entries, { key, node: defaultNode(type) }],
|
|
46
|
+
}));
|
|
47
|
+
announce(`Added ${node.type === 'list' ? 'entry' : key} to ${label}.`);
|
|
48
|
+
close();
|
|
49
|
+
}
|
|
50
|
+
catch (reason) {
|
|
51
|
+
setError(reason instanceof Error ? reason.message : String(reason));
|
|
52
|
+
document.getElementById(`${id}-name`)?.focus();
|
|
53
|
+
}
|
|
54
|
+
}, children: "Confirm addition" }), _jsx("button", { type: "button", onClick: close, children: "Cancel addition" }), error && (_jsx("span", { id: `${id}-error`, role: "alert", children: error }))] })) }));
|
|
55
|
+
}
|
|
56
|
+
export function PropertyEdit(props) {
|
|
57
|
+
const { node, label, root, change, pending, announce } = props;
|
|
58
|
+
const id = useId();
|
|
59
|
+
const containerRef = useRef(null);
|
|
60
|
+
if (node.type === 'group' || node.type === 'list') {
|
|
61
|
+
const content = (_jsxs(_Fragment, { children: [_jsx("div", { className: "property-children", children: node.entries.map((entry, index) => {
|
|
62
|
+
const childLabel = node.type === 'list' ? `Entry ${index + 1}` : entry.key;
|
|
63
|
+
return (_jsxs("div", { className: "property-edit-entry", children: [_jsx(PropertyEdit, { ...props, root: false, node: entry.node, label: childLabel }), _jsx("button", { type: "button", "aria-label": `Remove ${childLabel}`, onClick: (event) => {
|
|
64
|
+
if (entry.node.entries.length &&
|
|
65
|
+
!window.confirm(`Remove ${childLabel} and all its contents?`))
|
|
66
|
+
return;
|
|
67
|
+
const group = event.currentTarget.closest('.property-children');
|
|
68
|
+
change(node.id, (current) => ({
|
|
69
|
+
...current,
|
|
70
|
+
entries: current.entries.filter((child) => child.node.id !== entry.node.id),
|
|
71
|
+
}));
|
|
72
|
+
const clearPending = (child) => {
|
|
73
|
+
pending(child.id, false);
|
|
74
|
+
child.entries.forEach((e) => clearPending(e.node));
|
|
75
|
+
};
|
|
76
|
+
clearPending(entry.node);
|
|
77
|
+
announce(`Removed ${childLabel}. Save to persist this change.`);
|
|
78
|
+
requestAnimationFrame(() => group?.parentElement?.querySelector('.property-add button')?.focus());
|
|
79
|
+
}, children: "Remove" })] }, entry.node.id));
|
|
80
|
+
}) }), _jsx(AddValue, { ...props })] }));
|
|
81
|
+
if (root)
|
|
82
|
+
return _jsx("div", { className: "property-root", children: content });
|
|
83
|
+
return (_jsxs("details", { ref: containerRef, className: "property-container", open: true, onInvalidCapture: () => {
|
|
84
|
+
if (containerRef.current)
|
|
85
|
+
containerRef.current.open = true;
|
|
86
|
+
}, children: [_jsxs("summary", { children: [_jsx("strong", { children: label }), ' ', _jsxs("span", { className: "property-type", children: [node.type, " \u00B7 ", node.entries.length, " entries"] })] }), content] }));
|
|
87
|
+
}
|
|
88
|
+
let numericError = '';
|
|
89
|
+
if (node.type === 'number') {
|
|
90
|
+
try {
|
|
91
|
+
numericValue(node.text);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
numericError = error instanceof Error ? error.message : String(error);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return (_jsxs("div", { className: "property-field", children: [node.type === 'null' ? (_jsxs("div", { children: [label, " ", _jsx("span", { className: "property-type", children: "null" })] })) : (_jsxs("label", { htmlFor: id, children: [label, " ", _jsx("span", { className: "property-type", children: node.type })] })), node.type === 'text' && (_jsx("textarea", { id: id, rows: Math.min(6, Math.max(1, node.text.split('\n').length)), value: node.text, onChange: (event) => change(node.id, (n) => ({ ...n, text: event.target.value })) })), node.type === 'number' && (_jsxs(_Fragment, { children: [_jsx("input", { id: id, inputMode: "decimal", value: node.text, "aria-invalid": Boolean(numericError), "aria-describedby": numericError ? `${id}-error` : undefined, onChange: (event) => change(node.id, (n) => ({ ...n, text: event.target.value })) }), numericError && (_jsx("span", { id: `${id}-error`, role: "alert", children: numericError }))] })), node.type === 'boolean' && (_jsx("input", { id: id, type: "checkbox", checked: node.checked, onChange: (event) => change(node.id, (n) => ({ ...n, checked: event.target.checked })) })), node.type === 'null' && (_jsxs(_Fragment, { children: [_jsx("span", { id: id, children: "null" }), _jsxs("label", { children: ["Replace ", label, " (null) with", _jsxs("select", { defaultValue: "", onChange: (event) => {
|
|
98
|
+
if (!event.target.value)
|
|
99
|
+
return;
|
|
100
|
+
change(node.id, (n) => ({
|
|
101
|
+
...defaultNode(event.target.value),
|
|
102
|
+
id: n.id,
|
|
103
|
+
}));
|
|
104
|
+
announce(`Replaced null in ${label}.`);
|
|
105
|
+
}, children: [_jsx("option", { value: "", children: "Choose type" }), types
|
|
106
|
+
.filter((t) => t !== 'null')
|
|
107
|
+
.map((t) => (_jsx("option", { children: t }, t)))] })] })] }))] }));
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=PropertyTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertyTree.js","sourceRoot":"","sources":["../../src/components/PropertyTree.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @awesome-markdown/board-ui — the awesome-markdown board surface as a
|
|
3
|
+
* router-agnostic React library.
|
|
4
|
+
*
|
|
5
|
+
* Host apps provide three things:
|
|
6
|
+
* 1. `RouterAdapterProvider` — maps board-relative paths onto the host router.
|
|
7
|
+
* 2. `ProviderContextProvider` — the `PersistenceProvider` to read/write through.
|
|
8
|
+
* 3. `import '@awesome-markdown/board-ui/styles.css'` — tokens, fonts, utilities.
|
|
9
|
+
* Optionally: `BreadcrumbContext.Provider` (shell breadcrumb) and
|
|
10
|
+
* `ConflictProvider` + `ConflictBanner` (sync-engine conflict resolution).
|
|
11
|
+
*/
|
|
12
|
+
export { RouterAdapterProvider, RouterLink, useRouterAdapter } from './router/RouterAdapter.js';
|
|
13
|
+
export type { RouterAdapter, RouterLinkProps } from './router/RouterAdapter.js';
|
|
14
|
+
export { BreadcrumbContext, useBreadcrumb } from './breadcrumb.js';
|
|
15
|
+
export type { BreadcrumbContextValue, BreadcrumbSegment } from './breadcrumb.js';
|
|
16
|
+
export { ProviderContextProvider, useProvider } from './provider/ProviderContext.js';
|
|
17
|
+
export { BoardListPage } from './pages/BoardListPage.js';
|
|
18
|
+
export { BoardPage } from './pages/BoardPage.js';
|
|
19
|
+
export { ItemEditorPage } from './pages/ItemEditorPage.js';
|
|
20
|
+
export { Board } from './board/Board.js';
|
|
21
|
+
export { HomelessPanel } from './board/HomelessPanel.js';
|
|
22
|
+
export { useBoardRender } from './state/useBoardRender.js';
|
|
23
|
+
export type { BoardRenderState, BoardRenderStatus } from './state/useBoardRender.js';
|
|
24
|
+
export { useProviderSubscribe } from './state/useProviderSubscribe.js';
|
|
25
|
+
export { useTheme } from './state/theme-store.js';
|
|
26
|
+
export { ConflictProvider, useConflict, useOptionalConflict } from './sync/conflict-store.js';
|
|
27
|
+
export type { ConflictStoreState } from './sync/conflict-store.js';
|
|
28
|
+
export { ConflictBanner } from './components/ConflictBanner.js';
|
|
29
|
+
export { SyncStatusDot } from './shell/SyncStatusDot.js';
|
|
30
|
+
export { ThemeToggle } from './shell/ThemeToggle.js';
|
|
31
|
+
export { buildItemEditorHref } from './lib/item-board.js';
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAChG,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGhF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGjF,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGrF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC9F,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @awesome-markdown/board-ui — the awesome-markdown board surface as a
|
|
3
|
+
* router-agnostic React library.
|
|
4
|
+
*
|
|
5
|
+
* Host apps provide three things:
|
|
6
|
+
* 1. `RouterAdapterProvider` — maps board-relative paths onto the host router.
|
|
7
|
+
* 2. `ProviderContextProvider` — the `PersistenceProvider` to read/write through.
|
|
8
|
+
* 3. `import '@awesome-markdown/board-ui/styles.css'` — tokens, fonts, utilities.
|
|
9
|
+
* Optionally: `BreadcrumbContext.Provider` (shell breadcrumb) and
|
|
10
|
+
* `ConflictProvider` + `ConflictBanner` (sync-engine conflict resolution).
|
|
11
|
+
*/
|
|
12
|
+
// Routing seam
|
|
13
|
+
export { RouterAdapterProvider, RouterLink, useRouterAdapter } from './router/RouterAdapter.js';
|
|
14
|
+
// Breadcrumb channel (optional; no-op default)
|
|
15
|
+
export { BreadcrumbContext, useBreadcrumb } from './breadcrumb.js';
|
|
16
|
+
// Persistence provider binding
|
|
17
|
+
export { ProviderContextProvider, useProvider } from './provider/ProviderContext.js';
|
|
18
|
+
// Pages (render under the host's `/`, `/boards/:slug`, `/items/:slug` routes)
|
|
19
|
+
export { BoardListPage } from './pages/BoardListPage.js';
|
|
20
|
+
export { BoardPage } from './pages/BoardPage.js';
|
|
21
|
+
export { ItemEditorPage } from './pages/ItemEditorPage.js';
|
|
22
|
+
// Board building blocks
|
|
23
|
+
export { Board } from './board/Board.js';
|
|
24
|
+
export { HomelessPanel } from './board/HomelessPanel.js';
|
|
25
|
+
// State hooks
|
|
26
|
+
export { useBoardRender } from './state/useBoardRender.js';
|
|
27
|
+
export { useProviderSubscribe } from './state/useProviderSubscribe.js';
|
|
28
|
+
export { useTheme } from './state/theme-store.js';
|
|
29
|
+
// Sync-engine conflict handling
|
|
30
|
+
export { ConflictProvider, useConflict, useOptionalConflict } from './sync/conflict-store.js';
|
|
31
|
+
export { ConflictBanner } from './components/ConflictBanner.js';
|
|
32
|
+
// Shell widgets reusable by host top bars
|
|
33
|
+
export { SyncStatusDot } from './shell/SyncStatusDot.js';
|
|
34
|
+
export { ThemeToggle } from './shell/ThemeToggle.js';
|
|
35
|
+
// Helpers
|
|
36
|
+
export { buildItemEditorHref } from './lib/item-board.js';
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAe;AACf,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGhG,+CAA+C;AAC/C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGnE,+BAA+B;AAC/B,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAErF,8EAA8E;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,wBAAwB;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,cAAc;AACd,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,gCAAgC;AAChC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE9F,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,0CAA0C;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,UAAU;AACV,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives a plain-text summary from a markdown body string.
|
|
3
|
+
*
|
|
4
|
+
* Returns the first non-empty, non-heading line of the body with inline
|
|
5
|
+
* markdown (images, links, bold, italic, code spans) stripped to plain text.
|
|
6
|
+
* Returns an empty string if no such line exists.
|
|
7
|
+
*/
|
|
8
|
+
export declare function deriveSummary(body: string): string;
|
|
9
|
+
//# sourceMappingURL=derive-summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-summary.d.ts","sourceRoot":"","sources":["../../src/lib/derive-summary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBlD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives a plain-text summary from a markdown body string.
|
|
3
|
+
*
|
|
4
|
+
* Returns the first non-empty, non-heading line of the body with inline
|
|
5
|
+
* markdown (images, links, bold, italic, code spans) stripped to plain text.
|
|
6
|
+
* Returns an empty string if no such line exists.
|
|
7
|
+
*/
|
|
8
|
+
export function deriveSummary(body) {
|
|
9
|
+
const lines = body.split('\n');
|
|
10
|
+
for (const line of lines) {
|
|
11
|
+
const trimmed = line.trim();
|
|
12
|
+
if (trimmed === '' || trimmed.startsWith('#'))
|
|
13
|
+
continue;
|
|
14
|
+
let cleaned = trimmed;
|
|
15
|
+
// Remove images: 
|
|
16
|
+
cleaned = cleaned.replace(/!\[([^\]]*)\]\([^)]*\)/g, '');
|
|
17
|
+
// Convert links: [text](url) → text
|
|
18
|
+
cleaned = cleaned.replace(/\[([^\]]+)\]\([^)]*\)/g, '$1');
|
|
19
|
+
// Remove bold/italic/code markers
|
|
20
|
+
cleaned = cleaned.replace(/\*\*|__|\*|_|`/g, '');
|
|
21
|
+
const result = cleaned.trim();
|
|
22
|
+
if (result !== '')
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=derive-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-summary.js","sourceRoot":"","sources":["../../src/lib/derive-summary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACxD,IAAI,OAAO,GAAG,OAAO,CAAC;QACtB,6BAA6B;QAC7B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACzD,oCAAoC;QACpC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;QAC1D,kCAAkC;QAClC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-board.d.ts","sourceRoot":"","sources":["../../src/lib/item-board.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-board.js","sourceRoot":"","sources":["../../src/lib/item-board.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,SAAkB;IACtE,IAAI,CAAC,SAAS;QAAE,OAAO,UAAU,QAAQ,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACzD,OAAO,UAAU,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Item, Mutation, PersistenceProvider } from '@awesome-markdown/contracts';
|
|
2
|
+
/** Acquire an opaque revision only if the visible source is still authoritative. */
|
|
3
|
+
export declare function patchVisibleItem(provider: PersistenceProvider, visible: Item, mutations: Mutation[]): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=patch-visible-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-visible-item.d.ts","sourceRoot":"","sources":["../../src/lib/patch-visible-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvF,oFAAoF;AACpF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Acquire an opaque revision only if the visible source is still authoritative. */
|
|
2
|
+
export async function patchVisibleItem(provider, visible, mutations) {
|
|
3
|
+
const current = await provider.getItem(visible.slug);
|
|
4
|
+
if (!current)
|
|
5
|
+
throw new Error('Item was deleted. Reload the board.');
|
|
6
|
+
if (JSON.stringify(current.item) !== JSON.stringify(visible))
|
|
7
|
+
throw new Error('Item changed. Reload the board before moving it.');
|
|
8
|
+
await provider.patchItem(visible.slug, { revision: current.revision, mutations });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=patch-visible-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-visible-item.js","sourceRoot":"","sources":["../../src/lib/patch-visible-item.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAA6B,EAC7B,OAAa,EACb,SAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACrE,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,MAAM,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Item, PropertyDisplay } from '@awesome-markdown/contracts';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves a property's value for an item on a given board.
|
|
5
|
+
*
|
|
6
|
+
* Card layouts name explicit configuration paths; property names impose no schema.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveItemProperty(item: Item, boardSlug: string, property: string): unknown;
|
|
9
|
+
interface PropertyValueProps {
|
|
10
|
+
item: Item;
|
|
11
|
+
boardSlug: string;
|
|
12
|
+
layout: PropertyDisplay;
|
|
13
|
+
}
|
|
14
|
+
/** Renders a single configured property according to its `visualStyle`. */
|
|
15
|
+
export declare function PropertyValueDisplay({ item, boardSlug, layout, }: PropertyValueProps): React.ReactElement | null;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=property-display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-display.d.ts","sourceRoot":"","sources":["../../src/lib/property-display.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGzE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5F;AAiBD,UAAU,kBAAkB;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,SAAS,EACT,MAAM,GACP,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CA2FhD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { resolvePath } from '@awesome-markdown/filter-engine';
|
|
4
|
+
/**
|
|
5
|
+
* Resolves a property's value for an item on a given board.
|
|
6
|
+
*
|
|
7
|
+
* Card layouts name explicit configuration paths; property names impose no schema.
|
|
8
|
+
*/
|
|
9
|
+
export function resolveItemProperty(item, boardSlug, property) {
|
|
10
|
+
return resolvePath(property, item, { board: boardSlug });
|
|
11
|
+
}
|
|
12
|
+
function formatValue(value) {
|
|
13
|
+
if (value === undefined || value === null)
|
|
14
|
+
return '';
|
|
15
|
+
if (Array.isArray(value))
|
|
16
|
+
return value.map(String).join(', ');
|
|
17
|
+
return String(value);
|
|
18
|
+
}
|
|
19
|
+
function initials(value) {
|
|
20
|
+
const parts = value
|
|
21
|
+
.trim()
|
|
22
|
+
.split(/[\s_-]+/)
|
|
23
|
+
.filter(Boolean);
|
|
24
|
+
const chars = parts.length > 1 ? [parts[0][0], parts[1][0]] : [value.slice(0, 2)];
|
|
25
|
+
return chars.join('').toUpperCase();
|
|
26
|
+
}
|
|
27
|
+
/** Renders a single configured property according to its `visualStyle`. */
|
|
28
|
+
export function PropertyValueDisplay({ item, boardSlug, layout, }) {
|
|
29
|
+
let raw;
|
|
30
|
+
try {
|
|
31
|
+
raw = resolveItemProperty(item, boardSlug, layout.property);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return _jsx("span", { role: "alert", children: error instanceof Error ? error.message : String(error) });
|
|
35
|
+
}
|
|
36
|
+
const text = formatValue(raw);
|
|
37
|
+
if (text === '')
|
|
38
|
+
return null;
|
|
39
|
+
const label = layout.label ?? layout.property;
|
|
40
|
+
const testId = `property-${layout.property}-${item.slug}`;
|
|
41
|
+
if (layout.visualStyle === 'badge') {
|
|
42
|
+
return (_jsx("span", { title: label, "data-testid": testId, style: {
|
|
43
|
+
fontFamily: 'var(--font-mono)',
|
|
44
|
+
fontSize: '10.5px',
|
|
45
|
+
fontWeight: 500,
|
|
46
|
+
color: 'var(--ink)',
|
|
47
|
+
background: 'var(--accent)',
|
|
48
|
+
padding: '1px 6px',
|
|
49
|
+
borderRadius: 0,
|
|
50
|
+
display: 'inline-block',
|
|
51
|
+
}, children: text }));
|
|
52
|
+
}
|
|
53
|
+
if (layout.visualStyle === 'tag') {
|
|
54
|
+
return (_jsx("span", { title: label, "data-testid": testId, style: {
|
|
55
|
+
fontFamily: 'var(--font-mono)',
|
|
56
|
+
fontSize: '10.5px',
|
|
57
|
+
fontWeight: 400,
|
|
58
|
+
color: 'var(--ink-muted)',
|
|
59
|
+
textTransform: 'uppercase',
|
|
60
|
+
letterSpacing: '0.06em',
|
|
61
|
+
}, children: text }));
|
|
62
|
+
}
|
|
63
|
+
if (layout.visualStyle === 'avatar') {
|
|
64
|
+
return (_jsx("span", { title: `${label}: ${text}`, "data-testid": testId, style: {
|
|
65
|
+
fontFamily: 'var(--font-sans)',
|
|
66
|
+
fontSize: '10px',
|
|
67
|
+
fontWeight: 600,
|
|
68
|
+
color: 'var(--bg)',
|
|
69
|
+
background: 'var(--ink)',
|
|
70
|
+
width: '18px',
|
|
71
|
+
height: '18px',
|
|
72
|
+
borderRadius: '50%',
|
|
73
|
+
display: 'inline-flex',
|
|
74
|
+
alignItems: 'center',
|
|
75
|
+
justifyContent: 'center',
|
|
76
|
+
}, children: initials(text) }));
|
|
77
|
+
}
|
|
78
|
+
// 'text' (default)
|
|
79
|
+
return (_jsxs("span", { "data-testid": testId, style: {
|
|
80
|
+
fontFamily: 'var(--font-sans)',
|
|
81
|
+
fontSize: '11.5px',
|
|
82
|
+
fontWeight: 400,
|
|
83
|
+
color: 'var(--ink-muted)',
|
|
84
|
+
}, children: [_jsxs("span", { style: { fontWeight: 500, color: 'var(--ink)' }, children: [label, ":"] }), " ", text] }));
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=property-display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-display.js","sourceRoot":"","sources":["../../src/lib/property-display.tsx"],"names":[],"mappings":"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"}
|