@miethe/ui 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/README.md +1536 -0
  3. package/dist/bulk-actions/Button.d.ts +28 -0
  4. package/dist/bulk-actions/Button.d.ts.map +1 -0
  5. package/dist/bulk-actions/Button.js +45 -0
  6. package/dist/bulk-actions/Button.js.map +1 -0
  7. package/dist/bulk-actions/bulk-action-bar.d.ts +91 -0
  8. package/dist/bulk-actions/bulk-action-bar.d.ts.map +1 -0
  9. package/dist/bulk-actions/bulk-action-bar.js +94 -0
  10. package/dist/bulk-actions/bulk-action-bar.js.map +1 -0
  11. package/dist/bulk-actions/index.d.ts +5 -0
  12. package/dist/bulk-actions/index.d.ts.map +1 -0
  13. package/dist/bulk-actions/index.js +7 -0
  14. package/dist/bulk-actions/index.js.map +1 -0
  15. package/dist/bulk-actions/utils.d.ts +6 -0
  16. package/dist/bulk-actions/utils.d.ts.map +1 -0
  17. package/dist/bulk-actions/utils.js +9 -0
  18. package/dist/bulk-actions/utils.js.map +1 -0
  19. package/dist/components/ui/alert.d.ts +9 -0
  20. package/dist/components/ui/alert.d.ts.map +1 -0
  21. package/dist/components/ui/alert.js +23 -0
  22. package/dist/components/ui/alert.js.map +1 -0
  23. package/dist/components/ui/button.d.ts +12 -0
  24. package/dist/components/ui/button.d.ts.map +1 -0
  25. package/dist/components/ui/button.js +34 -0
  26. package/dist/components/ui/button.js.map +1 -0
  27. package/dist/components/ui/collapsible.d.ts +6 -0
  28. package/dist/components/ui/collapsible.d.ts.map +1 -0
  29. package/dist/components/ui/collapsible.js +7 -0
  30. package/dist/components/ui/collapsible.js.map +1 -0
  31. package/dist/components/ui/skeleton.d.ts +4 -0
  32. package/dist/components/ui/skeleton.d.ts.map +1 -0
  33. package/dist/components/ui/skeleton.js +7 -0
  34. package/dist/components/ui/skeleton.js.map +1 -0
  35. package/dist/content-viewer/ContentPane.d.ts +107 -0
  36. package/dist/content-viewer/ContentPane.d.ts.map +1 -0
  37. package/dist/content-viewer/ContentPane.js +247 -0
  38. package/dist/content-viewer/ContentPane.js.map +1 -0
  39. package/dist/content-viewer/ContentViewerProvider.d.ts +83 -0
  40. package/dist/content-viewer/ContentViewerProvider.d.ts.map +1 -0
  41. package/dist/content-viewer/ContentViewerProvider.js +92 -0
  42. package/dist/content-viewer/ContentViewerProvider.js.map +1 -0
  43. package/dist/content-viewer/FileTree.d.ts +71 -0
  44. package/dist/content-viewer/FileTree.d.ts.map +1 -0
  45. package/dist/content-viewer/FileTree.js +294 -0
  46. package/dist/content-viewer/FileTree.js.map +1 -0
  47. package/dist/content-viewer/adapters.d.ts +101 -0
  48. package/dist/content-viewer/adapters.d.ts.map +1 -0
  49. package/dist/content-viewer/adapters.js +32 -0
  50. package/dist/content-viewer/adapters.js.map +1 -0
  51. package/dist/content-viewer/index.d.ts +8 -0
  52. package/dist/content-viewer/index.d.ts.map +1 -0
  53. package/dist/content-viewer/index.js +5 -0
  54. package/dist/content-viewer/index.js.map +1 -0
  55. package/dist/diff/DiffViewer.d.ts +112 -0
  56. package/dist/diff/DiffViewer.d.ts.map +1 -0
  57. package/dist/diff/DiffViewer.js +414 -0
  58. package/dist/diff/DiffViewer.js.map +1 -0
  59. package/dist/diff/diff.d.ts +32 -0
  60. package/dist/diff/diff.d.ts.map +1 -0
  61. package/dist/diff/diff.js +8 -0
  62. package/dist/diff/diff.js.map +1 -0
  63. package/dist/diff/index.d.ts +4 -0
  64. package/dist/diff/index.d.ts.map +1 -0
  65. package/dist/diff/index.js +3 -0
  66. package/dist/diff/index.js.map +1 -0
  67. package/dist/display/FilePreviewPane.d.ts +31 -0
  68. package/dist/display/FilePreviewPane.d.ts.map +1 -0
  69. package/dist/display/FilePreviewPane.js +144 -0
  70. package/dist/display/FilePreviewPane.js.map +1 -0
  71. package/dist/display/FrontmatterDisplay.d.ts +33 -0
  72. package/dist/display/FrontmatterDisplay.d.ts.map +1 -0
  73. package/dist/display/FrontmatterDisplay.js +79 -0
  74. package/dist/display/FrontmatterDisplay.js.map +1 -0
  75. package/dist/display/index.d.ts +5 -0
  76. package/dist/display/index.d.ts.map +1 -0
  77. package/dist/display/index.js +4 -0
  78. package/dist/display/index.js.map +1 -0
  79. package/dist/editor/MarkdownEditor.d.ts +28 -0
  80. package/dist/editor/MarkdownEditor.d.ts.map +1 -0
  81. package/dist/editor/MarkdownEditor.js +160 -0
  82. package/dist/editor/MarkdownEditor.js.map +1 -0
  83. package/dist/editor/SplitPreview.d.ts +28 -0
  84. package/dist/editor/SplitPreview.d.ts.map +1 -0
  85. package/dist/editor/SplitPreview.js +34 -0
  86. package/dist/editor/SplitPreview.js.map +1 -0
  87. package/dist/editor/index.d.ts +5 -0
  88. package/dist/editor/index.d.ts.map +1 -0
  89. package/dist/editor/index.js +4 -0
  90. package/dist/editor/index.js.map +1 -0
  91. package/dist/filters/filters-dropdown.d.ts +24 -0
  92. package/dist/filters/filters-dropdown.d.ts.map +1 -0
  93. package/dist/filters/filters-dropdown.js +36 -0
  94. package/dist/filters/filters-dropdown.js.map +1 -0
  95. package/dist/filters/index.d.ts +9 -0
  96. package/dist/filters/index.d.ts.map +1 -0
  97. package/dist/filters/index.js +5 -0
  98. package/dist/filters/index.js.map +1 -0
  99. package/dist/filters/sort-dropdown.d.ts +13 -0
  100. package/dist/filters/sort-dropdown.d.ts.map +1 -0
  101. package/dist/filters/sort-dropdown.js +20 -0
  102. package/dist/filters/sort-dropdown.js.map +1 -0
  103. package/dist/filters/tag-filter-popover.d.ts +39 -0
  104. package/dist/filters/tag-filter-popover.d.ts.map +1 -0
  105. package/dist/filters/tag-filter-popover.js +72 -0
  106. package/dist/filters/tag-filter-popover.js.map +1 -0
  107. package/dist/filters/tool-filter-popover.d.ts +42 -0
  108. package/dist/filters/tool-filter-popover.d.ts.map +1 -0
  109. package/dist/filters/tool-filter-popover.js +67 -0
  110. package/dist/filters/tool-filter-popover.js.map +1 -0
  111. package/dist/hooks/use-debounce.d.ts +9 -0
  112. package/dist/hooks/use-debounce.d.ts.map +1 -0
  113. package/dist/hooks/use-debounce.js +21 -0
  114. package/dist/hooks/use-debounce.js.map +1 -0
  115. package/dist/hooks/use-intersection-observer.d.ts +11 -0
  116. package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
  117. package/dist/hooks/use-intersection-observer.js +25 -0
  118. package/dist/hooks/use-intersection-observer.js.map +1 -0
  119. package/dist/index.d.ts +10 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +10 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/pickers/EntityPickerDialog.d.ts +233 -0
  124. package/dist/pickers/EntityPickerDialog.d.ts.map +1 -0
  125. package/dist/pickers/EntityPickerDialog.js +355 -0
  126. package/dist/pickers/EntityPickerDialog.js.map +1 -0
  127. package/dist/pickers/EntityPickerViewToggle.d.ts +8 -0
  128. package/dist/pickers/EntityPickerViewToggle.d.ts.map +1 -0
  129. package/dist/pickers/EntityPickerViewToggle.js +17 -0
  130. package/dist/pickers/EntityPickerViewToggle.js.map +1 -0
  131. package/dist/pickers/index.d.ts +5 -0
  132. package/dist/pickers/index.d.ts.map +1 -0
  133. package/dist/pickers/index.js +3 -0
  134. package/dist/pickers/index.js.map +1 -0
  135. package/dist/primitives/Badge.d.ts +16 -0
  136. package/dist/primitives/Badge.d.ts.map +1 -0
  137. package/dist/primitives/Badge.js +43 -0
  138. package/dist/primitives/Badge.js.map +1 -0
  139. package/dist/primitives/BaseArtifactModal.d.ts +114 -0
  140. package/dist/primitives/BaseArtifactModal.d.ts.map +1 -0
  141. package/dist/primitives/BaseArtifactModal.js +76 -0
  142. package/dist/primitives/BaseArtifactModal.js.map +1 -0
  143. package/dist/primitives/Dialog.d.ts +20 -0
  144. package/dist/primitives/Dialog.d.ts.map +1 -0
  145. package/dist/primitives/Dialog.js +24 -0
  146. package/dist/primitives/Dialog.js.map +1 -0
  147. package/dist/primitives/DropdownMenu.d.ts +28 -0
  148. package/dist/primitives/DropdownMenu.d.ts.map +1 -0
  149. package/dist/primitives/DropdownMenu.js +34 -0
  150. package/dist/primitives/DropdownMenu.js.map +1 -0
  151. package/dist/primitives/EnterpriseOwnerBadge.d.ts +9 -0
  152. package/dist/primitives/EnterpriseOwnerBadge.d.ts.map +1 -0
  153. package/dist/primitives/EnterpriseOwnerBadge.js +12 -0
  154. package/dist/primitives/EnterpriseOwnerBadge.js.map +1 -0
  155. package/dist/primitives/GroupedSelect.d.ts +30 -0
  156. package/dist/primitives/GroupedSelect.d.ts.map +1 -0
  157. package/dist/primitives/GroupedSelect.js +47 -0
  158. package/dist/primitives/GroupedSelect.js.map +1 -0
  159. package/dist/primitives/Input.d.ts +6 -0
  160. package/dist/primitives/Input.d.ts.map +1 -0
  161. package/dist/primitives/Input.js +9 -0
  162. package/dist/primitives/Input.js.map +1 -0
  163. package/dist/primitives/LockIcon.d.ts +11 -0
  164. package/dist/primitives/LockIcon.d.ts.map +1 -0
  165. package/dist/primitives/LockIcon.js +15 -0
  166. package/dist/primitives/LockIcon.js.map +1 -0
  167. package/dist/primitives/MaskedSecretInput.d.ts +16 -0
  168. package/dist/primitives/MaskedSecretInput.d.ts.map +1 -0
  169. package/dist/primitives/MaskedSecretInput.js +42 -0
  170. package/dist/primitives/MaskedSecretInput.js.map +1 -0
  171. package/dist/primitives/ModalHeader.d.ts +66 -0
  172. package/dist/primitives/ModalHeader.d.ts.map +1 -0
  173. package/dist/primitives/ModalHeader.js +58 -0
  174. package/dist/primitives/ModalHeader.js.map +1 -0
  175. package/dist/primitives/Popover.d.ts +9 -0
  176. package/dist/primitives/Popover.d.ts.map +1 -0
  177. package/dist/primitives/Popover.js +13 -0
  178. package/dist/primitives/Popover.js.map +1 -0
  179. package/dist/primitives/ScrollArea.d.ts +6 -0
  180. package/dist/primitives/ScrollArea.d.ts.map +1 -0
  181. package/dist/primitives/ScrollArea.js +11 -0
  182. package/dist/primitives/ScrollArea.js.map +1 -0
  183. package/dist/primitives/SearchableCombobox.d.ts +30 -0
  184. package/dist/primitives/SearchableCombobox.d.ts.map +1 -0
  185. package/dist/primitives/SearchableCombobox.js +124 -0
  186. package/dist/primitives/SearchableCombobox.js.map +1 -0
  187. package/dist/primitives/SearchablePickerDialog.d.ts +20 -0
  188. package/dist/primitives/SearchablePickerDialog.d.ts.map +1 -0
  189. package/dist/primitives/SearchablePickerDialog.js +78 -0
  190. package/dist/primitives/SearchablePickerDialog.js.map +1 -0
  191. package/dist/primitives/StatusBadge.d.ts +21 -0
  192. package/dist/primitives/StatusBadge.d.ts.map +1 -0
  193. package/dist/primitives/StatusBadge.js +25 -0
  194. package/dist/primitives/StatusBadge.js.map +1 -0
  195. package/dist/primitives/TabNavigation.d.ts +68 -0
  196. package/dist/primitives/TabNavigation.d.ts.map +1 -0
  197. package/dist/primitives/TabNavigation.js +74 -0
  198. package/dist/primitives/TabNavigation.js.map +1 -0
  199. package/dist/primitives/Tabs.d.ts +8 -0
  200. package/dist/primitives/Tabs.d.ts.map +1 -0
  201. package/dist/primitives/Tabs.js +14 -0
  202. package/dist/primitives/Tabs.js.map +1 -0
  203. package/dist/primitives/Tooltip.d.ts +8 -0
  204. package/dist/primitives/Tooltip.d.ts.map +1 -0
  205. package/dist/primitives/Tooltip.js +12 -0
  206. package/dist/primitives/Tooltip.js.map +1 -0
  207. package/dist/primitives/VerticalTabNavigation.d.ts +75 -0
  208. package/dist/primitives/VerticalTabNavigation.d.ts.map +1 -0
  209. package/dist/primitives/VerticalTabNavigation.js +166 -0
  210. package/dist/primitives/VerticalTabNavigation.js.map +1 -0
  211. package/dist/primitives/ViewModeToggle.d.ts +12 -0
  212. package/dist/primitives/ViewModeToggle.d.ts.map +1 -0
  213. package/dist/primitives/ViewModeToggle.js +56 -0
  214. package/dist/primitives/ViewModeToggle.js.map +1 -0
  215. package/dist/primitives/WizardShell.d.ts +81 -0
  216. package/dist/primitives/WizardShell.d.ts.map +1 -0
  217. package/dist/primitives/WizardShell.js +73 -0
  218. package/dist/primitives/WizardShell.js.map +1 -0
  219. package/dist/primitives/index.d.ts +38 -0
  220. package/dist/primitives/index.d.ts.map +1 -0
  221. package/dist/primitives/index.js +24 -0
  222. package/dist/primitives/index.js.map +1 -0
  223. package/dist/primitives/utils.d.ts +6 -0
  224. package/dist/primitives/utils.d.ts.map +1 -0
  225. package/dist/primitives/utils.js +9 -0
  226. package/dist/primitives/utils.js.map +1 -0
  227. package/dist/types/index.d.ts +63 -0
  228. package/dist/types/index.d.ts.map +1 -0
  229. package/dist/types/index.js +9 -0
  230. package/dist/types/index.js.map +1 -0
  231. package/dist/utils/frontmatter.d.ts +63 -0
  232. package/dist/utils/frontmatter.d.ts.map +1 -0
  233. package/dist/utils/frontmatter.js +345 -0
  234. package/dist/utils/frontmatter.js.map +1 -0
  235. package/dist/utils/index.d.ts +6 -0
  236. package/dist/utils/index.d.ts.map +1 -0
  237. package/dist/utils/index.js +6 -0
  238. package/dist/utils/index.js.map +1 -0
  239. package/dist/utils/perf-marks.d.ts +28 -0
  240. package/dist/utils/perf-marks.d.ts.map +1 -0
  241. package/dist/utils/perf-marks.js +45 -0
  242. package/dist/utils/perf-marks.js.map +1 -0
  243. package/dist/utils/readme-utils.d.ts +67 -0
  244. package/dist/utils/readme-utils.d.ts.map +1 -0
  245. package/dist/utils/readme-utils.js +164 -0
  246. package/dist/utils/readme-utils.js.map +1 -0
  247. package/dist/utils/type-colors.d.ts +70 -0
  248. package/dist/utils/type-colors.d.ts.map +1 -0
  249. package/dist/utils/type-colors.js +118 -0
  250. package/dist/utils/type-colors.js.map +1 -0
  251. package/package.json +131 -0
@@ -0,0 +1,144 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useMemo } from 'react';
4
+ import { File, FileText, FileCode } from 'lucide-react';
5
+ import { Badge } from '../primitives/Badge';
6
+ import { ScrollArea, ScrollBar } from '../primitives/ScrollArea';
7
+ import { Skeleton } from '../components/ui/skeleton';
8
+ // ============================================================================
9
+ // Helper Functions
10
+ // ============================================================================
11
+ /**
12
+ * Detect file type based on file extension
13
+ */
14
+ function getFileType(path) {
15
+ const ext = path.split('.').pop()?.toLowerCase();
16
+ if (ext === 'md')
17
+ return 'markdown';
18
+ if (['ts', 'tsx', 'js', 'jsx', 'py', 'json', 'yaml', 'yml', 'toml'].includes(ext || ''))
19
+ return 'code';
20
+ return 'text';
21
+ }
22
+ /**
23
+ * Extract filename from path
24
+ */
25
+ function getFileName(path) {
26
+ return path.split('/').pop() || path;
27
+ }
28
+ /**
29
+ * Get tier badge variant and label
30
+ */
31
+ function getTierConfig(tier) {
32
+ const configs = {
33
+ source: { variant: 'outline', label: 'Source' },
34
+ collection: { variant: 'secondary', label: 'Collection' },
35
+ project: { variant: 'default', label: 'Project' },
36
+ };
37
+ return configs[tier];
38
+ }
39
+ /**
40
+ * Simple markdown to HTML converter (basic subset)
41
+ */
42
+ function renderMarkdown(markdown) {
43
+ let html = markdown;
44
+ // Headers
45
+ html = html.replace(/^### (.*$)/gim, '<h3 class="text-lg font-semibold mt-4 mb-2">$1</h3>');
46
+ html = html.replace(/^## (.*$)/gim, '<h2 class="text-xl font-semibold mt-6 mb-3">$1</h2>');
47
+ html = html.replace(/^# (.*$)/gim, '<h1 class="text-2xl font-bold mt-8 mb-4">$1</h1>');
48
+ // Bold and italic
49
+ html = html.replace(/\*\*\*(.+?)\*\*\*/g, '<strong><em>$1</em></strong>');
50
+ html = html.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>');
51
+ html = html.replace(/\*(.+?)\*/g, '<em>$1</em>');
52
+ // Code blocks
53
+ html = html.replace(/```(\w+)?\n([\s\S]*?)```/g, '<pre class="bg-muted rounded-md p-4 my-3 overflow-x-auto"><code class="text-sm font-mono">$2</code></pre>');
54
+ // Inline code
55
+ html = html.replace(/`(.+?)`/g, '<code class="bg-muted px-1.5 py-0.5 rounded text-sm">$1</code>');
56
+ // Links
57
+ html = html.replace(/\[(.+?)\]\((.+?)\)/g, '<a href="$2" class="text-primary underline">$1</a>');
58
+ // Lists
59
+ html = html.replace(/^\* (.+)$/gim, '<li class="ml-4">$1</li>');
60
+ html = html.replace(/^- (.+)$/gim, '<li class="ml-4">$1</li>');
61
+ // Line breaks
62
+ html = html.replace(/\n/g, '<br />');
63
+ return html;
64
+ }
65
+ // ============================================================================
66
+ // Loading Skeleton
67
+ // ============================================================================
68
+ function PreviewSkeleton() {
69
+ return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx("div", { className: "border-b p-4", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Skeleton, { className: "h-5 w-48" }), _jsx(Skeleton, { className: "h-5 w-20" })] }) }), _jsx("div", { className: "flex-1 space-y-3 p-6", children: [...Array(15)].map((_, i) => (_jsx(Skeleton, { className: "h-4", style: { width: `${50 + Math.random() * 50}%` } }, i))) })] }));
70
+ }
71
+ // ============================================================================
72
+ // Empty State
73
+ // ============================================================================
74
+ function EmptyState() {
75
+ return (_jsxs("div", { className: "flex h-full flex-col items-center justify-center py-12 text-center", children: [_jsx(File, { className: "mb-4 h-16 w-16 text-muted-foreground opacity-40" }), _jsx("h3", { className: "mb-2 text-base font-medium text-muted-foreground", children: "No file selected" }), _jsx("p", { className: "max-w-sm text-sm text-muted-foreground", children: "Select a file from the file list to preview its contents" })] }));
76
+ }
77
+ // ============================================================================
78
+ // Error State
79
+ // ============================================================================
80
+ function ErrorState() {
81
+ return (_jsxs("div", { className: "flex h-full flex-col items-center justify-center py-12 text-center", children: [_jsx(FileText, { className: "mb-4 h-16 w-16 text-destructive opacity-50" }), _jsx("h3", { className: "mb-2 text-base font-medium text-destructive", children: "Content unavailable" }), _jsx("p", { className: "max-w-sm text-sm text-muted-foreground", children: "Unable to load file content. The file may be too large or in an unsupported format." })] }));
82
+ }
83
+ function MarkdownContent({ content }) {
84
+ const renderedHtml = useMemo(() => renderMarkdown(content), [content]);
85
+ return (_jsx("div", { className: "prose prose-sm max-w-none dark:prose-invert", dangerouslySetInnerHTML: { __html: renderedHtml } }));
86
+ }
87
+ function CodeContent({ content, filePath }) {
88
+ const language = useMemo(() => {
89
+ const ext = filePath.split('.').pop()?.toLowerCase();
90
+ return ext || 'text';
91
+ }, [filePath]);
92
+ return (_jsxs("div", { className: "relative", children: [_jsx("div", { className: "absolute right-2 top-2", children: _jsx(Badge, { variant: "outline", className: "text-xs", children: language }) }), _jsx("pre", { className: "overflow-x-auto rounded-md bg-muted p-4", children: _jsx("code", { className: "font-mono text-sm leading-relaxed", children: content }) })] }));
93
+ }
94
+ function TextContent({ content }) {
95
+ return (_jsx("pre", { className: "whitespace-pre-wrap break-words font-mono text-sm leading-relaxed", children: content }));
96
+ }
97
+ // ============================================================================
98
+ // Main Component
99
+ // ============================================================================
100
+ /**
101
+ * FilePreviewPane - Displays file content with appropriate rendering
102
+ *
103
+ * Features:
104
+ * - Markdown rendering with basic HTML conversion
105
+ * - Syntax-highlighted code display
106
+ * - Plain text display for other files
107
+ * - Loading skeleton state
108
+ * - Empty state when no file selected
109
+ * - Error state for unavailable content
110
+ * - Tier badge showing which version is displayed
111
+ * - Dark mode support
112
+ *
113
+ * @example
114
+ * ```tsx
115
+ * <FilePreviewPane
116
+ * filePath="README.md"
117
+ * content={fileContent}
118
+ * tier="collection"
119
+ * isLoading={false}
120
+ * />
121
+ * ```
122
+ */
123
+ export function FilePreviewPane({ filePath, content, tier, isLoading }) {
124
+ // Loading state
125
+ if (isLoading) {
126
+ return _jsx(PreviewSkeleton, {});
127
+ }
128
+ // Empty state - no file selected
129
+ if (!filePath) {
130
+ return _jsx(EmptyState, {});
131
+ }
132
+ // Error state - file selected but no content
133
+ if (content === null) {
134
+ return _jsx(ErrorState, {});
135
+ }
136
+ // Get file metadata
137
+ const fileName = getFileName(filePath);
138
+ const fileType = getFileType(filePath);
139
+ const tierConfig = getTierConfig(tier);
140
+ // Select icon based on file type
141
+ const FileIcon = fileType === 'markdown' ? FileText : fileType === 'code' ? FileCode : File;
142
+ return (_jsxs("div", { className: "flex h-full flex-col overflow-hidden", children: [_jsxs("div", { className: "flex items-center justify-between border-b bg-muted/20 px-4 py-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(FileIcon, { className: "h-4 w-4 text-muted-foreground" }), _jsxs("h3", { className: "text-sm font-medium", children: ["File Preview: ", _jsx("span", { className: "font-semibold", children: fileName })] })] }), _jsx(Badge, { variant: tierConfig.variant, children: tierConfig.label })] }), _jsxs(ScrollArea, { className: "flex-1", children: [_jsxs("div", { className: "p-6", children: [fileType === 'markdown' && _jsx(MarkdownContent, { content: content }), fileType === 'code' && _jsx(CodeContent, { content: content, filePath: filePath }), fileType === 'text' && _jsx(TextContent, { content: content })] }), _jsx(ScrollBar, { orientation: "horizontal" })] })] }));
143
+ }
144
+ //# sourceMappingURL=FilePreviewPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilePreviewPane.js","sourceRoot":"","sources":["../../src/display/FilePreviewPane.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export interface FrontmatterDisplayProps {
2
+ /** Parsed YAML frontmatter object */
3
+ frontmatter: Record<string, unknown>;
4
+ /** Whether to start collapsed. Default: false (expanded) */
5
+ defaultCollapsed?: boolean;
6
+ /** Additional CSS classes */
7
+ className?: string;
8
+ }
9
+ /**
10
+ * FrontmatterDisplay - Collapsible display for YAML frontmatter
11
+ *
12
+ * Displays parsed YAML frontmatter as key-value pairs with support for:
13
+ * - Arrays rendered as comma-separated values
14
+ * - Nested objects (1 level) rendered as indented key-value pairs
15
+ * - Collapsible with expand/collapse toggle
16
+ * - Max height with scrollable content
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * const frontmatter = {
21
+ * title: 'My Document',
22
+ * tags: ['react', 'typescript'],
23
+ * author: { name: 'John', email: 'john@example.com' }
24
+ * };
25
+ *
26
+ * <FrontmatterDisplay
27
+ * frontmatter={frontmatter}
28
+ * defaultCollapsed={false}
29
+ * />
30
+ * ```
31
+ */
32
+ export declare function FrontmatterDisplay({ frontmatter, defaultCollapsed, className, }: FrontmatterDisplayProps): import("react/jsx-runtime").JSX.Element | null;
33
+ //# sourceMappingURL=FrontmatterDisplay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrontmatterDisplay.d.ts","sourceRoot":"","sources":["../../src/display/FrontmatterDisplay.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,uBAAuB;IACtC,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4DD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,gBAAwB,EACxB,SAAS,GACV,EAAE,uBAAuB,kDAoDzB"}
@@ -0,0 +1,79 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { ChevronDown, ChevronUp } from 'lucide-react';
5
+ import { cn } from '../primitives/utils';
6
+ import { Button } from '../components/ui/button';
7
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../components/ui/collapsible';
8
+ // ============================================================================
9
+ // Helper Functions
10
+ // ============================================================================
11
+ /**
12
+ * Render a single value based on its type
13
+ */
14
+ function renderValue(value) {
15
+ if (value === null || value === undefined) {
16
+ return _jsx("span", { className: "italic text-muted-foreground", children: "null" });
17
+ }
18
+ if (typeof value === 'boolean') {
19
+ return _jsx("span", { className: "text-muted-foreground", children: value ? 'true' : 'false' });
20
+ }
21
+ if (typeof value === 'number') {
22
+ return _jsx("span", { children: value });
23
+ }
24
+ if (typeof value === 'string') {
25
+ return _jsx("span", { children: value });
26
+ }
27
+ if (Array.isArray(value)) {
28
+ // Render arrays as comma-separated values
29
+ const stringValues = value.map((item) => {
30
+ if (typeof item === 'object' && item !== null) {
31
+ return JSON.stringify(item);
32
+ }
33
+ return String(item);
34
+ });
35
+ return _jsx("span", { children: stringValues.join(', ') });
36
+ }
37
+ if (typeof value === 'object') {
38
+ // For nested objects, render as indented key-value pairs (1 level only)
39
+ return (_jsx("div", { className: "ml-4 mt-1 space-y-1", children: Object.entries(value).map(([nestedKey, nestedValue]) => (_jsxs("div", { className: "text-sm", children: [_jsx("strong", { className: "font-medium text-muted-foreground", children: nestedKey }), ":", ' ', typeof nestedValue === 'object' && nestedValue !== null
40
+ ? JSON.stringify(nestedValue)
41
+ : String(nestedValue ?? '')] }, nestedKey))) }));
42
+ }
43
+ return _jsx("span", { children: String(value) });
44
+ }
45
+ // ============================================================================
46
+ // Main Component
47
+ // ============================================================================
48
+ /**
49
+ * FrontmatterDisplay - Collapsible display for YAML frontmatter
50
+ *
51
+ * Displays parsed YAML frontmatter as key-value pairs with support for:
52
+ * - Arrays rendered as comma-separated values
53
+ * - Nested objects (1 level) rendered as indented key-value pairs
54
+ * - Collapsible with expand/collapse toggle
55
+ * - Max height with scrollable content
56
+ *
57
+ * @example
58
+ * ```tsx
59
+ * const frontmatter = {
60
+ * title: 'My Document',
61
+ * tags: ['react', 'typescript'],
62
+ * author: { name: 'John', email: 'john@example.com' }
63
+ * };
64
+ *
65
+ * <FrontmatterDisplay
66
+ * frontmatter={frontmatter}
67
+ * defaultCollapsed={false}
68
+ * />
69
+ * ```
70
+ */
71
+ export function FrontmatterDisplay({ frontmatter, defaultCollapsed = false, className, }) {
72
+ const [isOpen, setIsOpen] = useState(!defaultCollapsed);
73
+ const entries = Object.entries(frontmatter);
74
+ if (entries.length === 0) {
75
+ return null;
76
+ }
77
+ return (_jsxs(Collapsible, { open: isOpen, onOpenChange: setIsOpen, className: cn('rounded-md border border-border bg-muted/30 p-3', className), children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h4", { className: "text-sm font-medium text-foreground", children: "Frontmatter" }), _jsx(CollapsibleTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "sm", className: "h-7 px-2", "aria-label": isOpen ? 'Hide frontmatter' : 'Show frontmatter', children: isOpen ? (_jsxs(_Fragment, { children: [_jsx(ChevronUp, { className: "mr-1 h-4 w-4", "aria-hidden": "true" }), "Hide"] })) : (_jsxs(_Fragment, { children: [_jsx(ChevronDown, { className: "mr-1 h-4 w-4", "aria-hidden": "true" }), "Show"] })) }) })] }), _jsx(CollapsibleContent, { className: "overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down", children: _jsx("div", { className: "mt-3 max-h-[300px] space-y-2 overflow-y-auto pr-1", children: entries.map(([key, value]) => (_jsxs("div", { className: "text-sm", children: [_jsx("strong", { className: "font-medium", children: key }), ": ", renderValue(value)] }, key))) }) })] }));
78
+ }
79
+ //# sourceMappingURL=FrontmatterDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrontmatterDisplay.js","sourceRoot":"","sources":["../../src/display/FrontmatterDisplay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { FrontmatterDisplay } from './FrontmatterDisplay';
2
+ export type { FrontmatterDisplayProps } from './FrontmatterDisplay';
3
+ export { FilePreviewPane } from './FilePreviewPane';
4
+ export type { FilePreviewPaneProps } from './FilePreviewPane';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/display/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // @miethe/ui — display submodule
2
+ export { FrontmatterDisplay } from './FrontmatterDisplay';
3
+ export { FilePreviewPane } from './FilePreviewPane';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/display/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,28 @@
1
+ export interface MarkdownEditorProps {
2
+ initialContent: string;
3
+ onChange: (content: string) => void;
4
+ readOnly?: boolean;
5
+ className?: string;
6
+ }
7
+ /**
8
+ * MarkdownEditor - CodeMirror 6 based markdown editor
9
+ *
10
+ * Features:
11
+ * - Markdown syntax highlighting
12
+ * - Basic keymaps (undo/redo, etc.)
13
+ * - Theme support (light/dark based on system preference)
14
+ * - onChange callback for content changes
15
+ * - ReadOnly mode support
16
+ * - Proper cleanup on unmount
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <MarkdownEditor
21
+ * initialContent="# Hello World"
22
+ * onChange={(content) => setContent(content)}
23
+ * readOnly={false}
24
+ * />
25
+ * ```
26
+ */
27
+ export declare function MarkdownEditor({ initialContent, onChange, readOnly, className, }: MarkdownEditorProps): import("react/jsx-runtime").JSX.Element;
28
+ //# sourceMappingURL=MarkdownEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownEditor.d.ts","sourceRoot":"","sources":["../../src/editor/MarkdownEditor.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsFD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,QAAQ,EACR,QAAgB,EAChB,SAAS,GACV,EAAE,mBAAmB,2CA0ErB"}
@@ -0,0 +1,160 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useEffect, useRef } from 'react';
4
+ import { EditorState } from '@codemirror/state';
5
+ import { EditorView, keymap } from '@codemirror/view';
6
+ import { markdown } from '@codemirror/lang-markdown';
7
+ import { defaultKeymap, history, historyKeymap } from '@codemirror/commands';
8
+ import { cn } from '../primitives/utils';
9
+ // ============================================================================
10
+ // Theme Extensions
11
+ // ============================================================================
12
+ /**
13
+ * Light theme extension for CodeMirror
14
+ */
15
+ const lightTheme = EditorView.theme({
16
+ '&': {
17
+ backgroundColor: 'hsl(var(--background))',
18
+ color: 'hsl(var(--foreground))',
19
+ height: '100%',
20
+ },
21
+ '.cm-content': {
22
+ caretColor: 'hsl(var(--foreground))',
23
+ fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace',
24
+ fontSize: '14px',
25
+ lineHeight: '1.6',
26
+ padding: '16px',
27
+ },
28
+ '.cm-cursor, .cm-dropCursor': {
29
+ borderLeftColor: 'hsl(var(--foreground))',
30
+ },
31
+ '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {
32
+ backgroundColor: 'hsl(var(--accent))',
33
+ },
34
+ '.cm-activeLine': {
35
+ backgroundColor: 'hsl(var(--accent) / 0.1)',
36
+ },
37
+ '.cm-gutters': {
38
+ backgroundColor: 'hsl(var(--muted))',
39
+ color: 'hsl(var(--muted-foreground))',
40
+ border: 'none',
41
+ },
42
+ '.cm-activeLineGutter': {
43
+ backgroundColor: 'hsl(var(--accent) / 0.1)',
44
+ },
45
+ }, { dark: false });
46
+ /**
47
+ * Dark theme extension for CodeMirror
48
+ */
49
+ const darkTheme = EditorView.theme({
50
+ '&': {
51
+ backgroundColor: 'hsl(var(--background))',
52
+ color: 'hsl(var(--foreground))',
53
+ height: '100%',
54
+ },
55
+ '.cm-content': {
56
+ caretColor: 'hsl(var(--foreground))',
57
+ fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace',
58
+ fontSize: '14px',
59
+ lineHeight: '1.6',
60
+ padding: '16px',
61
+ },
62
+ '.cm-cursor, .cm-dropCursor': {
63
+ borderLeftColor: 'hsl(var(--foreground))',
64
+ },
65
+ '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {
66
+ backgroundColor: 'hsl(var(--accent))',
67
+ },
68
+ '.cm-activeLine': {
69
+ backgroundColor: 'hsl(var(--accent) / 0.1)',
70
+ },
71
+ '.cm-gutters': {
72
+ backgroundColor: 'hsl(var(--muted))',
73
+ color: 'hsl(var(--muted-foreground))',
74
+ border: 'none',
75
+ },
76
+ '.cm-activeLineGutter': {
77
+ backgroundColor: 'hsl(var(--accent) / 0.1)',
78
+ },
79
+ }, { dark: true });
80
+ // ============================================================================
81
+ // Main Component
82
+ // ============================================================================
83
+ /**
84
+ * MarkdownEditor - CodeMirror 6 based markdown editor
85
+ *
86
+ * Features:
87
+ * - Markdown syntax highlighting
88
+ * - Basic keymaps (undo/redo, etc.)
89
+ * - Theme support (light/dark based on system preference)
90
+ * - onChange callback for content changes
91
+ * - ReadOnly mode support
92
+ * - Proper cleanup on unmount
93
+ *
94
+ * @example
95
+ * ```tsx
96
+ * <MarkdownEditor
97
+ * initialContent="# Hello World"
98
+ * onChange={(content) => setContent(content)}
99
+ * readOnly={false}
100
+ * />
101
+ * ```
102
+ */
103
+ export function MarkdownEditor({ initialContent, onChange, readOnly = false, className, }) {
104
+ const containerRef = useRef(null);
105
+ const editorRef = useRef(null);
106
+ useEffect(() => {
107
+ if (!containerRef.current)
108
+ return;
109
+ // Detect dark mode from system preference
110
+ const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
111
+ // Create editor state with all extensions
112
+ const startState = EditorState.create({
113
+ doc: initialContent,
114
+ extensions: [
115
+ // Language support
116
+ markdown(),
117
+ // History (undo/redo)
118
+ history(),
119
+ // Keymaps
120
+ keymap.of([...defaultKeymap, ...historyKeymap]),
121
+ // Update listener for onChange callback
122
+ EditorView.updateListener.of((update) => {
123
+ if (update.docChanged) {
124
+ onChange(update.state.doc.toString());
125
+ }
126
+ }),
127
+ // ReadOnly mode
128
+ EditorView.editable.of(!readOnly),
129
+ // Theme based on system preference
130
+ isDarkMode ? darkTheme : lightTheme,
131
+ // Line wrapping
132
+ EditorView.lineWrapping,
133
+ ],
134
+ });
135
+ // Create editor view
136
+ const view = new EditorView({
137
+ state: startState,
138
+ parent: containerRef.current,
139
+ });
140
+ editorRef.current = view;
141
+ // Cleanup on unmount
142
+ return () => {
143
+ view.destroy();
144
+ };
145
+ }, []); // Only run once on mount
146
+ // Update content when initialContent changes externally
147
+ useEffect(() => {
148
+ if (editorRef.current && editorRef.current.state.doc.toString() !== initialContent) {
149
+ editorRef.current.dispatch({
150
+ changes: {
151
+ from: 0,
152
+ to: editorRef.current.state.doc.length,
153
+ insert: initialContent,
154
+ },
155
+ });
156
+ }
157
+ }, [initialContent]);
158
+ return (_jsx("div", { ref: containerRef, className: cn('h-full w-full overflow-auto rounded-md border', className) }));
159
+ }
160
+ //# sourceMappingURL=MarkdownEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownEditor.js","sourceRoot":"","sources":["../../src/editor/MarkdownEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface SplitPreviewProps {
2
+ content: string;
3
+ onChange: (content: string) => void;
4
+ isEditing: boolean;
5
+ className?: string;
6
+ }
7
+ /**
8
+ * SplitPreview - Split-view markdown editor with live preview
9
+ *
10
+ * Features:
11
+ * - Left side: MarkdownEditor component
12
+ * - Right side: Rendered markdown preview
13
+ * - Real-time preview updates as user types
14
+ * - GitHub Flavored Markdown (GFM) support
15
+ * - Responsive layout (side-by-side on desktop, stacked on mobile)
16
+ * - Scrollable preview area
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <SplitPreview
21
+ * content={markdownContent}
22
+ * onChange={(content) => setContent(content)}
23
+ * isEditing={true}
24
+ * />
25
+ * ```
26
+ */
27
+ export declare function SplitPreview({ content, onChange, isEditing, className }: SplitPreviewProps): import("react/jsx-runtime").JSX.Element;
28
+ //# sourceMappingURL=SplitPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitPreview.d.ts","sourceRoot":"","sources":["../../src/editor/SplitPreview.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CA+B1F"}
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import ReactMarkdown from 'react-markdown';
4
+ import remarkGfm from 'remark-gfm';
5
+ import { MarkdownEditor } from './MarkdownEditor';
6
+ import { ScrollArea } from '../primitives/ScrollArea';
7
+ import { cn } from '../primitives/utils';
8
+ // ============================================================================
9
+ // Main Component
10
+ // ============================================================================
11
+ /**
12
+ * SplitPreview - Split-view markdown editor with live preview
13
+ *
14
+ * Features:
15
+ * - Left side: MarkdownEditor component
16
+ * - Right side: Rendered markdown preview
17
+ * - Real-time preview updates as user types
18
+ * - GitHub Flavored Markdown (GFM) support
19
+ * - Responsive layout (side-by-side on desktop, stacked on mobile)
20
+ * - Scrollable preview area
21
+ *
22
+ * @example
23
+ * ```tsx
24
+ * <SplitPreview
25
+ * content={markdownContent}
26
+ * onChange={(content) => setContent(content)}
27
+ * isEditing={true}
28
+ * />
29
+ * ```
30
+ */
31
+ export function SplitPreview({ content, onChange, isEditing, className }) {
32
+ return (_jsxs("div", { className: cn('flex h-full min-w-0 flex-col gap-4 overflow-hidden lg:flex-row', className), children: [isEditing && (_jsx("div", { className: "min-h-[300px] min-w-0 flex-1 lg:min-h-0", children: _jsx(MarkdownEditor, { initialContent: content, onChange: onChange, className: "h-full" }) })), _jsx("div", { className: cn('min-h-[300px] min-w-0 flex-1 overflow-hidden lg:min-h-0', !isEditing && 'w-full'), children: _jsx("div", { className: "h-full overflow-hidden rounded-md border bg-card", children: _jsx(ScrollArea, { className: "h-full w-full [&>[data-radix-scroll-area-viewport]>div]:!block [&>[data-radix-scroll-area-viewport]>div]:!min-w-0", children: _jsx("div", { className: "prose prose-sm max-w-none overflow-x-hidden break-words p-6 [overflow-wrap:anywhere] [word-break:break-word] dark:prose-invert prose-headings:break-words prose-p:break-words prose-code:break-all prose-pre:overflow-x-auto", children: _jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], children: content || '*No content to preview*' }) }) }) }) })] }));
33
+ }
34
+ //# sourceMappingURL=SplitPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitPreview.js","sourceRoot":"","sources":["../../src/editor/SplitPreview.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAazC,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAqB;IACzF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CAAC,gEAAgE,EAAE,SAAS,CAAC,aAGzF,SAAS,IAAI,CACZ,cAAK,SAAS,EAAC,yCAAyC,YACtD,KAAC,cAAc,IAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAC,QAAQ,GAAG,GAC9E,CACP,EAGD,cACE,SAAS,EAAE,EAAE,CACX,yDAAyD,EACzD,CAAC,SAAS,IAAI,QAAQ,CACvB,YAED,cAAK,SAAS,EAAC,kDAAkD,YAC/D,KAAC,UAAU,IAAC,SAAS,EAAC,mHAAmH,YACvI,cAAK,SAAS,EAAC,8NAA8N,YAC3O,KAAC,aAAa,IAAC,aAAa,EAAE,CAAC,SAAS,CAAC,YACtC,OAAO,IAAI,yBAAyB,GACvB,GACZ,GACK,GACT,GACF,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { MarkdownEditor } from './MarkdownEditor';
2
+ export type { MarkdownEditorProps } from './MarkdownEditor';
3
+ export { SplitPreview } from './SplitPreview';
4
+ export type { SplitPreviewProps } from './SplitPreview';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // @miethe/ui — editor submodule
2
+ export { MarkdownEditor } from './MarkdownEditor';
3
+ export { SplitPreview } from './SplitPreview';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,24 @@
1
+ export type FilterMode = 'and' | 'or';
2
+ export interface FilterCategoryOption {
3
+ value: string;
4
+ label: string;
5
+ count?: number;
6
+ }
7
+ export interface FilterCategory {
8
+ id: string;
9
+ label: string;
10
+ options: FilterCategoryOption[];
11
+ selected: string[];
12
+ onChange: (values: string[]) => void;
13
+ }
14
+ export interface FiltersDropdownProps {
15
+ /** Filter categories to render as sub-menus */
16
+ categories: FilterCategory[];
17
+ /** AND/OR mode for combining values within each category */
18
+ filterMode?: FilterMode;
19
+ /** Handler for filter mode changes */
20
+ onFilterModeChange?: (mode: FilterMode) => void;
21
+ className?: string;
22
+ }
23
+ export declare function FiltersDropdown({ categories, filterMode, onFilterModeChange, className, }: FiltersDropdownProps): import("react/jsx-runtime").JSX.Element;
24
+ //# sourceMappingURL=filters-dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters-dropdown.d.ts","sourceRoot":"","sources":["../../src/filters/filters-dropdown.tsx"],"names":[],"mappings":"AAwBA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC;AAEtC,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,sCAAsC;IACtC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,UAAkB,EAClB,kBAAkB,EAClB,SAAS,GACV,EAAE,oBAAoB,2CA6JtB"}