@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,164 @@
1
+ /**
2
+ * README and first-paragraph extraction utilities for markdown content.
3
+ *
4
+ * These utilities are generic and work with any entry type that has a `path`
5
+ * field and optionally `content` and `metadata` fields. The `CatalogEntry`
6
+ * type from SkillMeat structurally satisfies `ReadmeSearchEntry`, so no
7
+ * call-site changes are required in the main app.
8
+ */
9
+ /**
10
+ * Extract README content from folder artifacts.
11
+ *
12
+ * Looks for README.md or readme.md files in the folder's direct artifacts
13
+ * and extracts a summary (first paragraph or summary section).
14
+ *
15
+ * @param folderPath - The folder path to find README for
16
+ * @param entries - All catalog entries to search
17
+ * @returns Extracted summary string or null if no README found
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const readme = extractFolderReadme('plugins/dev-tools', catalogEntries);
22
+ * // Returns: "A collection of development tools for..."
23
+ * ```
24
+ */
25
+ export function extractFolderReadme(folderPath, entries) {
26
+ // Validate inputs
27
+ if (!folderPath || !entries || entries.length === 0) {
28
+ return null;
29
+ }
30
+ // Normalize folder path
31
+ const normalizedFolderPath = folderPath.replace(/\\/g, '/').trim();
32
+ if (!normalizedFolderPath || normalizedFolderPath === '/') {
33
+ return null;
34
+ }
35
+ // Look for README files directly in this folder
36
+ // Path should be: folderPath/README.md or folderPath/readme.md
37
+ const readmeEntry = entries.find((entry) => {
38
+ if (!entry.path || typeof entry.path !== 'string') {
39
+ return false;
40
+ }
41
+ const normalizedPath = entry.path.replace(/\\/g, '/').trim();
42
+ // Check if this entry is directly in the folder (not in a subfolder)
43
+ // Pattern: folderPath/filename.md
44
+ if (!normalizedPath.startsWith(normalizedFolderPath + '/')) {
45
+ return false;
46
+ }
47
+ // Extract the part after the folder path
48
+ const remainder = normalizedPath.substring(normalizedFolderPath.length + 1);
49
+ // Check if it's a direct child (no additional slashes)
50
+ if (remainder.includes('/')) {
51
+ return false;
52
+ }
53
+ // Check if filename is README.md (case-insensitive)
54
+ return remainder.toLowerCase() === 'readme.md';
55
+ });
56
+ if (!readmeEntry) {
57
+ return null;
58
+ }
59
+ // Try to extract content from the entry
60
+ const content = readmeEntry.content;
61
+ if (content && typeof content === 'string') {
62
+ return extractFirstParagraph(content);
63
+ }
64
+ // Fallback: check if there's metadata with description
65
+ // This would come from frontmatter or other metadata sources
66
+ const metadata = readmeEntry.metadata;
67
+ if (metadata && typeof metadata === 'object' && metadata['description']) {
68
+ return typeof metadata['description'] === 'string'
69
+ ? metadata['description']
70
+ : null;
71
+ }
72
+ return null;
73
+ }
74
+ /**
75
+ * Extract the first meaningful paragraph from markdown content.
76
+ *
77
+ * Skips headings, empty lines, and frontmatter.
78
+ * Returns first paragraph of at least 20 characters.
79
+ * Truncates at 300 characters with ellipsis if longer.
80
+ *
81
+ * @param content - Raw markdown content
82
+ * @returns First paragraph or null if none found
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * const markdown = `---
87
+ * title: My Doc
88
+ * ---
89
+ * # Heading
90
+ *
91
+ * This is the first paragraph with meaningful content.
92
+ *
93
+ * This is the second paragraph.
94
+ * `;
95
+ * const paragraph = extractFirstParagraph(markdown);
96
+ * // Returns: "This is the first paragraph with meaningful content."
97
+ * ```
98
+ */
99
+ export function extractFirstParagraph(content) {
100
+ if (!content || typeof content !== 'string') {
101
+ return null;
102
+ }
103
+ // Strip YAML frontmatter (content between --- delimiters at start)
104
+ let processedContent = content;
105
+ const frontmatterMatch = /^---\s*\n([\s\S]*?)\n---\s*(\n|$)/;
106
+ if (frontmatterMatch.test(content)) {
107
+ processedContent = content.replace(frontmatterMatch, '');
108
+ }
109
+ // Split into lines
110
+ const lines = processedContent.split('\n');
111
+ // Find first meaningful paragraph
112
+ let paragraphLines = [];
113
+ let inParagraph = false;
114
+ let inCodeBlock = false;
115
+ for (const line of lines) {
116
+ const trimmed = line.trim();
117
+ // Handle code block delimiters
118
+ if (trimmed.startsWith('```')) {
119
+ inCodeBlock = !inCodeBlock;
120
+ continue;
121
+ }
122
+ // Skip lines inside code blocks
123
+ if (inCodeBlock) {
124
+ continue;
125
+ }
126
+ // Skip empty lines
127
+ if (trimmed === '') {
128
+ // If we were building a paragraph, we've reached its end
129
+ if (inParagraph && paragraphLines.length > 0) {
130
+ break;
131
+ }
132
+ continue;
133
+ }
134
+ // Skip headings (lines starting with #)
135
+ if (trimmed.startsWith('#')) {
136
+ continue;
137
+ }
138
+ // Skip list items and other special markdown syntax
139
+ if (trimmed.startsWith('-') ||
140
+ trimmed.startsWith('*') ||
141
+ trimmed.startsWith('>') ||
142
+ trimmed.startsWith('|')) {
143
+ continue;
144
+ }
145
+ // This looks like paragraph content
146
+ inParagraph = true;
147
+ paragraphLines.push(trimmed);
148
+ }
149
+ // Join paragraph lines
150
+ if (paragraphLines.length === 0) {
151
+ return null;
152
+ }
153
+ const paragraph = paragraphLines.join(' ').trim();
154
+ // Check minimum length requirement
155
+ if (paragraph.length < 20) {
156
+ return null;
157
+ }
158
+ // Truncate at 300 characters with ellipsis
159
+ if (paragraph.length > 300) {
160
+ return paragraph.substring(0, 297) + '...';
161
+ }
162
+ return paragraph;
163
+ }
164
+ //# sourceMappingURL=readme-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme-utils.js","sourceRoot":"","sources":["../../src/utils/readme-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Type-color utilities
3
+ *
4
+ * Generic color-coding helpers for artifact/entity type indicators.
5
+ * Maps string type keys to Tailwind CSS classes for left-border accents
6
+ * and subtle background tints.
7
+ *
8
+ * These utilities are intentionally agnostic to any specific type system —
9
+ * they accept plain strings and fall back gracefully for unknown values.
10
+ */
11
+ /**
12
+ * Default left-border color class for artifact types.
13
+ *
14
+ * Maps type strings to Tailwind `border-l-{color}-{shade}` classes.
15
+ * Combine with `border-l-4` on the card root to produce a colour-coded
16
+ * left accent bar.
17
+ *
18
+ * Extend or override this map in consumer applications by spreading into
19
+ * a new record and passing it to `getTypeBarColor`.
20
+ */
21
+ export declare const typeBarColors: Record<string, string>;
22
+ /** Fallback border color for unrecognised / unknown type strings. */
23
+ export declare const TYPE_BAR_FALLBACK = "border-l-gray-400";
24
+ /**
25
+ * Resolve the left-border color class for a given type string.
26
+ *
27
+ * Safe to call with arbitrary strings — unknown types receive the neutral
28
+ * gray fallback rather than throwing.
29
+ *
30
+ * @param type - Artifact or entity type string (e.g. 'skill', 'agent')
31
+ * @param colorMap - Optional custom map; defaults to the built-in `typeBarColors`
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * getTypeBarColor('skill') // 'border-l-purple-500'
36
+ * getTypeBarColor('unknown') // 'border-l-gray-400'
37
+ * ```
38
+ */
39
+ export declare function getTypeBarColor(type: string, colorMap?: Record<string, string>): string;
40
+ /**
41
+ * Subtle background tint classes per type string.
42
+ *
43
+ * Applied at larger display sizes (compact, standard, expanded).
44
+ * At smaller sizes the left-border accent alone provides sufficient
45
+ * type differentiation.
46
+ *
47
+ * Values use very low opacity so the tint is visible but non-distracting.
48
+ */
49
+ export declare const artifactTypeCardTints: Record<string, string>;
50
+ /**
51
+ * Resolve the background tint class for a given type string.
52
+ *
53
+ * Returns an empty string for unrecognised types, making it safe to call
54
+ * with arbitrary input.
55
+ *
56
+ * Note: tier-based suppression (e.g. omitting the tint at xs-minified) is
57
+ * the responsibility of the consumer. This function only resolves the class
58
+ * for the type; it does not filter by tier.
59
+ *
60
+ * @param type - Artifact or entity type string (e.g. 'skill', 'agent')
61
+ * @param tintMap - Optional custom map; defaults to `artifactTypeCardTints`
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * getCardTint('skill') // 'bg-purple-500/[0.02] dark:bg-purple-500/[0.03]'
66
+ * getCardTint('unknown') // ''
67
+ * ```
68
+ */
69
+ export declare function getCardTint(type: string, tintMap?: Record<string, string>): string;
70
+ //# sourceMappingURL=type-colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-colors.d.ts","sourceRoot":"","sources":["../../src/utils/type-colors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBhD,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAiB,GAC/C,MAAM,CAER;AAMD;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBxD,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAyB,GACtD,MAAM,CAER"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Type-color utilities
3
+ *
4
+ * Generic color-coding helpers for artifact/entity type indicators.
5
+ * Maps string type keys to Tailwind CSS classes for left-border accents
6
+ * and subtle background tints.
7
+ *
8
+ * These utilities are intentionally agnostic to any specific type system —
9
+ * they accept plain strings and fall back gracefully for unknown values.
10
+ */
11
+ // ---------------------------------------------------------------------------
12
+ // Type bar colors (left border accent)
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * Default left-border color class for artifact types.
16
+ *
17
+ * Maps type strings to Tailwind `border-l-{color}-{shade}` classes.
18
+ * Combine with `border-l-4` on the card root to produce a colour-coded
19
+ * left accent bar.
20
+ *
21
+ * Extend or override this map in consumer applications by spreading into
22
+ * a new record and passing it to `getTypeBarColor`.
23
+ */
24
+ export const typeBarColors = {
25
+ skill: 'border-l-purple-500',
26
+ command: 'border-l-blue-500',
27
+ agent: 'border-l-green-500',
28
+ hook: 'border-l-pink-500',
29
+ mcp: 'border-l-orange-500',
30
+ workflow: 'border-l-cyan-500',
31
+ composite: 'border-l-indigo-500',
32
+ context_module: 'border-l-sky-400',
33
+ template: 'border-l-purple-400',
34
+ group: 'border-l-green-400',
35
+ deployment_set: 'border-l-orange-400',
36
+ context_pack: 'border-l-teal-500',
37
+ bundle: 'border-l-violet-500',
38
+ project_config: 'border-l-slate-400',
39
+ spec_file: 'border-l-slate-400',
40
+ rule_file: 'border-l-slate-400',
41
+ context_file: 'border-l-slate-300',
42
+ progress_template: 'border-l-slate-300',
43
+ };
44
+ /** Fallback border color for unrecognised / unknown type strings. */
45
+ export const TYPE_BAR_FALLBACK = 'border-l-gray-400';
46
+ /**
47
+ * Resolve the left-border color class for a given type string.
48
+ *
49
+ * Safe to call with arbitrary strings — unknown types receive the neutral
50
+ * gray fallback rather than throwing.
51
+ *
52
+ * @param type - Artifact or entity type string (e.g. 'skill', 'agent')
53
+ * @param colorMap - Optional custom map; defaults to the built-in `typeBarColors`
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * getTypeBarColor('skill') // 'border-l-purple-500'
58
+ * getTypeBarColor('unknown') // 'border-l-gray-400'
59
+ * ```
60
+ */
61
+ export function getTypeBarColor(type, colorMap = typeBarColors) {
62
+ return colorMap[type] ?? TYPE_BAR_FALLBACK;
63
+ }
64
+ // ---------------------------------------------------------------------------
65
+ // Card background tints
66
+ // ---------------------------------------------------------------------------
67
+ /**
68
+ * Subtle background tint classes per type string.
69
+ *
70
+ * Applied at larger display sizes (compact, standard, expanded).
71
+ * At smaller sizes the left-border accent alone provides sufficient
72
+ * type differentiation.
73
+ *
74
+ * Values use very low opacity so the tint is visible but non-distracting.
75
+ */
76
+ export const artifactTypeCardTints = {
77
+ skill: 'bg-purple-500/[0.02] dark:bg-purple-500/[0.03]',
78
+ command: 'bg-blue-500/[0.02] dark:bg-blue-500/[0.03]',
79
+ agent: 'bg-green-500/[0.02] dark:bg-green-500/[0.03]',
80
+ hook: 'bg-pink-500/[0.02] dark:bg-pink-500/[0.03]',
81
+ mcp: 'bg-orange-500/[0.02] dark:bg-orange-500/[0.03]',
82
+ workflow: 'bg-cyan-500/[0.02] dark:bg-cyan-500/[0.03]',
83
+ composite: 'bg-indigo-500/[0.02] dark:bg-indigo-500/[0.03]',
84
+ context_module: 'bg-sky-400/[0.02] dark:bg-sky-400/[0.03]',
85
+ template: 'bg-purple-400/[0.02] dark:bg-purple-400/[0.03]',
86
+ group: 'bg-green-400/[0.02] dark:bg-green-400/[0.03]',
87
+ deployment_set: 'bg-orange-400/[0.02] dark:bg-orange-400/[0.03]',
88
+ context_pack: 'bg-teal-500/[0.02] dark:bg-teal-500/[0.03]',
89
+ bundle: 'bg-violet-500/[0.02] dark:bg-violet-500/[0.03]',
90
+ project_config: 'bg-slate-500/[0.02] dark:bg-slate-500/[0.03]',
91
+ spec_file: 'bg-slate-500/[0.02] dark:bg-slate-500/[0.03]',
92
+ rule_file: 'bg-slate-500/[0.02] dark:bg-slate-500/[0.03]',
93
+ context_file: 'bg-slate-400/[0.02] dark:bg-slate-400/[0.03]',
94
+ progress_template: 'bg-slate-400/[0.02] dark:bg-slate-400/[0.03]',
95
+ };
96
+ /**
97
+ * Resolve the background tint class for a given type string.
98
+ *
99
+ * Returns an empty string for unrecognised types, making it safe to call
100
+ * with arbitrary input.
101
+ *
102
+ * Note: tier-based suppression (e.g. omitting the tint at xs-minified) is
103
+ * the responsibility of the consumer. This function only resolves the class
104
+ * for the type; it does not filter by tier.
105
+ *
106
+ * @param type - Artifact or entity type string (e.g. 'skill', 'agent')
107
+ * @param tintMap - Optional custom map; defaults to `artifactTypeCardTints`
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * getCardTint('skill') // 'bg-purple-500/[0.02] dark:bg-purple-500/[0.03]'
112
+ * getCardTint('unknown') // ''
113
+ * ```
114
+ */
115
+ export function getCardTint(type, tintMap = artifactTypeCardTints) {
116
+ return tintMap[type] ?? '';
117
+ }
118
+ //# sourceMappingURL=type-colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-colors.js","sourceRoot":"","sources":["../../src/utils/type-colors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,KAAK,EAAE,qBAAqB;IAC5B,OAAO,EAAE,mBAAmB;IAC5B,KAAK,EAAE,oBAAoB;IAC3B,IAAI,EAAE,mBAAmB;IACzB,GAAG,EAAE,qBAAqB;IAC1B,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,qBAAqB;IAChC,cAAc,EAAE,kBAAkB;IAClC,QAAQ,EAAE,qBAAqB;IAC/B,KAAK,EAAE,oBAAoB;IAC3B,cAAc,EAAE,qBAAqB;IACrC,YAAY,EAAE,mBAAmB;IACjC,MAAM,EAAE,qBAAqB;IAC7B,cAAc,EAAE,oBAAoB;IACpC,SAAS,EAAE,oBAAoB;IAC/B,SAAS,EAAE,oBAAoB;IAC/B,YAAY,EAAE,oBAAoB;IAClC,iBAAiB,EAAE,oBAAoB;CACxC,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,WAAmC,aAAa;IAEhD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC;AAC7C,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,KAAK,EAAE,gDAAgD;IACvD,OAAO,EAAE,4CAA4C;IACrD,KAAK,EAAE,8CAA8C;IACrD,IAAI,EAAE,4CAA4C;IAClD,GAAG,EAAE,gDAAgD;IACrD,QAAQ,EAAE,4CAA4C;IACtD,SAAS,EAAE,gDAAgD;IAC3D,cAAc,EAAE,0CAA0C;IAC1D,QAAQ,EAAE,gDAAgD;IAC1D,KAAK,EAAE,8CAA8C;IACrD,cAAc,EAAE,gDAAgD;IAChE,YAAY,EAAE,4CAA4C;IAC1D,MAAM,EAAE,gDAAgD;IACxD,cAAc,EAAE,8CAA8C;IAC9D,SAAS,EAAE,8CAA8C;IACzD,SAAS,EAAE,8CAA8C;IACzD,YAAY,EAAE,8CAA8C;IAC5D,iBAAiB,EAAE,8CAA8C;CAClE,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,UAAkC,qBAAqB;IAEvD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,131 @@
1
+ {
2
+ "name": "@miethe/ui",
3
+ "version": "0.2.0",
4
+ "description": "Reusable UI components for file trees, content viewing, diff, editors, and entity management — extracted from SkillMeat",
5
+ "author": "Nick Miethe <miethe.dev@gmail.com>",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/miethe/homelab",
10
+ "directory": "development/skillmeat/skillmeat/web/packages/ui"
11
+ },
12
+ "homepage": "https://github.com/miethe/homelab/tree/main/development/skillmeat/skillmeat/web/packages/ui#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/miethe/homelab/issues"
15
+ },
16
+ "keywords": [
17
+ "react",
18
+ "ui",
19
+ "components",
20
+ "file-tree",
21
+ "diff-viewer",
22
+ "codemirror",
23
+ "markdown",
24
+ "radix-ui",
25
+ "tailwindcss"
26
+ ],
27
+ "type": "module",
28
+ "sideEffects": false,
29
+ "main": "./dist/index.js",
30
+ "module": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.js",
36
+ "default": "./dist/index.js"
37
+ },
38
+ "./content-viewer": {
39
+ "types": "./dist/content-viewer/index.d.ts",
40
+ "import": "./dist/content-viewer/index.js",
41
+ "default": "./dist/content-viewer/index.js"
42
+ },
43
+ "./diff": {
44
+ "types": "./dist/diff/index.d.ts",
45
+ "import": "./dist/diff/index.js",
46
+ "default": "./dist/diff/index.js"
47
+ },
48
+ "./editor": {
49
+ "types": "./dist/editor/index.d.ts",
50
+ "import": "./dist/editor/index.js",
51
+ "default": "./dist/editor/index.js"
52
+ },
53
+ "./display": {
54
+ "types": "./dist/display/index.d.ts",
55
+ "import": "./dist/display/index.js",
56
+ "default": "./dist/display/index.js"
57
+ },
58
+ "./primitives": {
59
+ "types": "./dist/primitives/index.d.ts",
60
+ "import": "./dist/primitives/index.js",
61
+ "default": "./dist/primitives/index.js"
62
+ },
63
+ "./utils": {
64
+ "types": "./dist/utils/index.d.ts",
65
+ "import": "./dist/utils/index.js",
66
+ "default": "./dist/utils/index.js"
67
+ },
68
+ "./filters": {
69
+ "types": "./dist/filters/index.d.ts",
70
+ "import": "./dist/filters/index.js",
71
+ "default": "./dist/filters/index.js"
72
+ },
73
+ "./pickers": {
74
+ "types": "./dist/pickers/index.d.ts",
75
+ "import": "./dist/pickers/index.js",
76
+ "default": "./dist/pickers/index.js"
77
+ },
78
+ "./bulk-actions": {
79
+ "types": "./dist/bulk-actions/index.d.ts",
80
+ "import": "./dist/bulk-actions/index.js",
81
+ "default": "./dist/bulk-actions/index.js"
82
+ }
83
+ },
84
+ "files": ["dist", "README.md", "CHANGELOG.md", "package.json"],
85
+ "scripts": {
86
+ "build": "tsc -p tsconfig.build.json",
87
+ "clean": "rm -rf dist",
88
+ "type-check": "tsc --noEmit",
89
+ "check-size": "node scripts/check-bundle-size.js",
90
+ "prepublishOnly": "pnpm clean && pnpm build",
91
+ "publish:npm": "npm publish --access public"
92
+ },
93
+ "publishConfig": {
94
+ "access": "public",
95
+ "registry": "https://registry.npmjs.org/"
96
+ },
97
+ "peerDependencies": {
98
+ "react": "^18.0 || ^19.0",
99
+ "react-dom": "^18.0 || ^19.0",
100
+ "tailwindcss": ">=3.0.0"
101
+ },
102
+ "peerDependenciesMeta": {
103
+ "tailwindcss": {
104
+ "optional": true
105
+ }
106
+ },
107
+ "dependencies": {
108
+ "@codemirror/commands": "^6.7.1",
109
+ "@codemirror/lang-markdown": "^6.3.1",
110
+ "@codemirror/state": "^6.4.1",
111
+ "@codemirror/view": "^6.35.0",
112
+ "@radix-ui/react-collapsible": "^1.1.12",
113
+ "@radix-ui/react-dialog": "^1.1.14",
114
+ "@radix-ui/react-dropdown-menu": "^2.1.15",
115
+ "@radix-ui/react-popover": "^1.1.14",
116
+ "@radix-ui/react-tabs": "^1.1.12",
117
+ "@radix-ui/react-scroll-area": "^1.2.10",
118
+ "@radix-ui/react-slot": "^1.2.4",
119
+ "@radix-ui/react-select": "^2.1.6",
120
+ "@radix-ui/react-tooltip": "^1.2.7",
121
+ "class-variance-authority": "^0.7.0",
122
+ "clsx": "^2.1.1",
123
+ "lucide-react": "^0.575.0",
124
+ "react-markdown": "^9.0.1",
125
+ "remark-gfm": "^4.0.0",
126
+ "tailwind-merge": "^2.5.4"
127
+ },
128
+ "devDependencies": {
129
+ "typescript": "^5.0.0"
130
+ }
131
+ }