@k2b/ui 0.1.0-rc.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 (548) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +343 -0
  3. package/dist/.build-complete +0 -0
  4. package/dist/browser/actions/Button.js +236 -0
  5. package/dist/browser/actions/Button.js.map +1 -0
  6. package/dist/browser/actions/ContextMenu.js +199 -0
  7. package/dist/browser/actions/ContextMenu.js.map +1 -0
  8. package/dist/browser/actions/CopyButton.js +97 -0
  9. package/dist/browser/actions/CopyButton.js.map +1 -0
  10. package/dist/browser/actions/Disclosure.js +83 -0
  11. package/dist/browser/actions/Disclosure.js.map +1 -0
  12. package/dist/browser/actions/Dropdown.js +669 -0
  13. package/dist/browser/actions/Dropdown.js.map +1 -0
  14. package/dist/browser/actions/FilterChip.js +149 -0
  15. package/dist/browser/actions/FilterChip.js.map +1 -0
  16. package/dist/browser/actions/RemoveButton.js +47 -0
  17. package/dist/browser/actions/RemoveButton.js.map +1 -0
  18. package/dist/browser/actions/SegmentedControl.js +138 -0
  19. package/dist/browser/actions/SegmentedControl.js.map +1 -0
  20. package/dist/browser/actions/SplitButton.js +76 -0
  21. package/dist/browser/actions/SplitButton.js.map +1 -0
  22. package/dist/browser/actions/SpotlightSearch.js +87 -0
  23. package/dist/browser/actions/SpotlightSearch.js.map +1 -0
  24. package/dist/browser/actions/Tabs.js +185 -0
  25. package/dist/browser/actions/Tabs.js.map +1 -0
  26. package/dist/browser/actions/Toolbar.js +87 -0
  27. package/dist/browser/actions/Toolbar.js.map +1 -0
  28. package/dist/browser/actions/index.js +13 -0
  29. package/dist/browser/actions/index.js.map +1 -0
  30. package/dist/browser/chat/ChatComposer.js +760 -0
  31. package/dist/browser/chat/ChatComposer.js.map +1 -0
  32. package/dist/browser/chat/ChatPrimitives.js +688 -0
  33. package/dist/browser/chat/ChatPrimitives.js.map +1 -0
  34. package/dist/browser/chat/ChatRoot.js +27 -0
  35. package/dist/browser/chat/ChatRoot.js.map +1 -0
  36. package/dist/browser/chat/ChatTimeline.js +404 -0
  37. package/dist/browser/chat/ChatTimeline.js.map +1 -0
  38. package/dist/browser/chat/chat-behavior.js +53 -0
  39. package/dist/browser/chat/chat-behavior.js.map +1 -0
  40. package/dist/browser/chat/index.js +17 -0
  41. package/dist/browser/chat/index.js.map +1 -0
  42. package/dist/browser/chat/types.js +2 -0
  43. package/dist/browser/chat/types.js.map +1 -0
  44. package/dist/browser/content/Calendar.js +2168 -0
  45. package/dist/browser/content/Calendar.js.map +1 -0
  46. package/dist/browser/content/Chart.js +680 -0
  47. package/dist/browser/content/Chart.js.map +1 -0
  48. package/dist/browser/content/CodeDisplay.js +104 -0
  49. package/dist/browser/content/CodeDisplay.js.map +1 -0
  50. package/dist/browser/content/DataTable.js +724 -0
  51. package/dist/browser/content/DataTable.js.map +1 -0
  52. package/dist/browser/content/Docs.js +227 -0
  53. package/dist/browser/content/Docs.js.map +1 -0
  54. package/dist/browser/content/FileBrowser.js +462 -0
  55. package/dist/browser/content/FileBrowser.js.map +1 -0
  56. package/dist/browser/content/FileTree.js +453 -0
  57. package/dist/browser/content/FileTree.js.map +1 -0
  58. package/dist/browser/content/FileView.js +842 -0
  59. package/dist/browser/content/FileView.js.map +1 -0
  60. package/dist/browser/content/Lightbox.js +285 -0
  61. package/dist/browser/content/Lightbox.js.map +1 -0
  62. package/dist/browser/content/LogEntriesTable.js +139 -0
  63. package/dist/browser/content/LogEntriesTable.js.map +1 -0
  64. package/dist/browser/content/MarkdownView.js +138 -0
  65. package/dist/browser/content/MarkdownView.js.map +1 -0
  66. package/dist/browser/content/Pagination.js +182 -0
  67. package/dist/browser/content/Pagination.js.map +1 -0
  68. package/dist/browser/content/PdfPreview.js +204 -0
  69. package/dist/browser/content/PdfPreview.js.map +1 -0
  70. package/dist/browser/content/RangePicker.js +83 -0
  71. package/dist/browser/content/RangePicker.js.map +1 -0
  72. package/dist/browser/content/StructuredDataPreview.js +194 -0
  73. package/dist/browser/content/StructuredDataPreview.js.map +1 -0
  74. package/dist/browser/content/calendar-event-layout.js +92 -0
  75. package/dist/browser/content/calendar-event-layout.js.map +1 -0
  76. package/dist/browser/content/calendar-pointer.js +114 -0
  77. package/dist/browser/content/calendar-pointer.js.map +1 -0
  78. package/dist/browser/content/chart-map-viewport.js +33 -0
  79. package/dist/browser/content/chart-map-viewport.js.map +1 -0
  80. package/dist/browser/content/chart-state-timeline.js +124 -0
  81. package/dist/browser/content/chart-state-timeline.js.map +1 -0
  82. package/dist/browser/content/code-highlight.js +144 -0
  83. package/dist/browser/content/code-highlight.js.map +1 -0
  84. package/dist/browser/content/file-tree.js +93 -0
  85. package/dist/browser/content/file-tree.js.map +1 -0
  86. package/dist/browser/content/file-view-preview.js +112 -0
  87. package/dist/browser/content/file-view-preview.js.map +1 -0
  88. package/dist/browser/content/index.js +16 -0
  89. package/dist/browser/content/index.js.map +1 -0
  90. package/dist/browser/feedback/InlineGuidance.js +46 -0
  91. package/dist/browser/feedback/InlineGuidance.js.map +1 -0
  92. package/dist/browser/feedback/Tooltip.js +189 -0
  93. package/dist/browser/feedback/Tooltip.js.map +1 -0
  94. package/dist/browser/feedback/dialog-core.js +207 -0
  95. package/dist/browser/feedback/dialog-core.js.map +1 -0
  96. package/dist/browser/feedback/index.js +6 -0
  97. package/dist/browser/feedback/index.js.map +1 -0
  98. package/dist/browser/feedback/prompts.js +991 -0
  99. package/dist/browser/feedback/prompts.js.map +1 -0
  100. package/dist/browser/feedback/toast.js +271 -0
  101. package/dist/browser/feedback/toast.js.map +1 -0
  102. package/dist/browser/feedback/tooltip-position.js +25 -0
  103. package/dist/browser/feedback/tooltip-position.js.map +1 -0
  104. package/dist/browser/index.js +11 -0
  105. package/dist/browser/index.js.map +1 -0
  106. package/dist/browser/inputs/AutocompleteEditor.js +610 -0
  107. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -0
  108. package/dist/browser/inputs/AutocompleteSelect.js +632 -0
  109. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -0
  110. package/dist/browser/inputs/Checkbox.js +137 -0
  111. package/dist/browser/inputs/Checkbox.js.map +1 -0
  112. package/dist/browser/inputs/CheckboxCard.js +130 -0
  113. package/dist/browser/inputs/CheckboxCard.js.map +1 -0
  114. package/dist/browser/inputs/ChoiceGroups.js +174 -0
  115. package/dist/browser/inputs/ChoiceGroups.js.map +1 -0
  116. package/dist/browser/inputs/ChoiceInputs.js +400 -0
  117. package/dist/browser/inputs/ChoiceInputs.js.map +1 -0
  118. package/dist/browser/inputs/Combobox.js +274 -0
  119. package/dist/browser/inputs/Combobox.js.map +1 -0
  120. package/dist/browser/inputs/DatePicker.js +923 -0
  121. package/dist/browser/inputs/DatePicker.js.map +1 -0
  122. package/dist/browser/inputs/FileInputs.js +736 -0
  123. package/dist/browser/inputs/FileInputs.js.map +1 -0
  124. package/dist/browser/inputs/MultiSelectInput.js +565 -0
  125. package/dist/browser/inputs/MultiSelectInput.js.map +1 -0
  126. package/dist/browser/inputs/NumberInput.js +288 -0
  127. package/dist/browser/inputs/NumberInput.js.map +1 -0
  128. package/dist/browser/inputs/Select.js +507 -0
  129. package/dist/browser/inputs/Select.js.map +1 -0
  130. package/dist/browser/inputs/SelectChip.js +151 -0
  131. package/dist/browser/inputs/SelectChip.js.map +1 -0
  132. package/dist/browser/inputs/SpecialInputs.js +117 -0
  133. package/dist/browser/inputs/SpecialInputs.js.map +1 -0
  134. package/dist/browser/inputs/Switch.js +117 -0
  135. package/dist/browser/inputs/Switch.js.map +1 -0
  136. package/dist/browser/inputs/TagEditor.js +358 -0
  137. package/dist/browser/inputs/TagEditor.js.map +1 -0
  138. package/dist/browser/inputs/TagsInput.js +195 -0
  139. package/dist/browser/inputs/TagsInput.js.map +1 -0
  140. package/dist/browser/inputs/TemplateEditor.js +190 -0
  141. package/dist/browser/inputs/TemplateEditor.js.map +1 -0
  142. package/dist/browser/inputs/TextInput.js +318 -0
  143. package/dist/browser/inputs/TextInput.js.map +1 -0
  144. package/dist/browser/inputs/choice.js +188 -0
  145. package/dist/browser/inputs/choice.js.map +1 -0
  146. package/dist/browser/inputs/completion/behaviors.js +108 -0
  147. package/dist/browser/inputs/completion/behaviors.js.map +1 -0
  148. package/dist/browser/inputs/completion/engine.js +103 -0
  149. package/dist/browser/inputs/completion/engine.js.map +1 -0
  150. package/dist/browser/inputs/completion/index.js +4 -0
  151. package/dist/browser/inputs/completion/index.js.map +1 -0
  152. package/dist/browser/inputs/completion/overlay.js +25 -0
  153. package/dist/browser/inputs/completion/overlay.js.map +1 -0
  154. package/dist/browser/inputs/date-picker.js +123 -0
  155. package/dist/browser/inputs/date-picker.js.map +1 -0
  156. package/dist/browser/inputs/editor-dom.js +26 -0
  157. package/dist/browser/inputs/editor-dom.js.map +1 -0
  158. package/dist/browser/inputs/field-contract.js +9 -0
  159. package/dist/browser/inputs/field-contract.js.map +1 -0
  160. package/dist/browser/inputs/icon-options.js +46 -0
  161. package/dist/browser/inputs/icon-options.js.map +1 -0
  162. package/dist/browser/inputs/image-crop.js +145 -0
  163. package/dist/browser/inputs/image-crop.js.map +1 -0
  164. package/dist/browser/inputs/index.js +23 -0
  165. package/dist/browser/inputs/index.js.map +1 -0
  166. package/dist/browser/inputs/markdown/MarkdownEditor.js +725 -0
  167. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -0
  168. package/dist/browser/inputs/markdown/Toolbar.js +172 -0
  169. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -0
  170. package/dist/browser/inputs/markdown/actions.js +140 -0
  171. package/dist/browser/inputs/markdown/actions.js.map +1 -0
  172. package/dist/browser/inputs/markdown/active-formats.js +36 -0
  173. package/dist/browser/inputs/markdown/active-formats.js.map +1 -0
  174. package/dist/browser/inputs/markdown/behaviors.js +63 -0
  175. package/dist/browser/inputs/markdown/behaviors.js.map +1 -0
  176. package/dist/browser/inputs/markdown/code-zone.js +8 -0
  177. package/dist/browser/inputs/markdown/code-zone.js.map +1 -0
  178. package/dist/browser/internal/color.js +18 -0
  179. package/dist/browser/internal/color.js.map +1 -0
  180. package/dist/browser/internal/field.js +158 -0
  181. package/dist/browser/internal/field.js.map +1 -0
  182. package/dist/browser/internal/portal.js +17 -0
  183. package/dist/browser/internal/portal.js.map +1 -0
  184. package/dist/browser/intl/Format.js +273 -0
  185. package/dist/browser/intl/Format.js.map +1 -0
  186. package/dist/browser/intl/index.js +3 -0
  187. package/dist/browser/intl/index.js.map +1 -0
  188. package/dist/browser/intl/locale.js +63 -0
  189. package/dist/browser/intl/locale.js.map +1 -0
  190. package/dist/browser/intl/messages.js +753 -0
  191. package/dist/browser/intl/messages.js.map +1 -0
  192. package/dist/browser/layout/AppOverview.js +151 -0
  193. package/dist/browser/layout/AppOverview.js.map +1 -0
  194. package/dist/browser/layout/AppWorkspace.js +1502 -0
  195. package/dist/browser/layout/AppWorkspace.js.map +1 -0
  196. package/dist/browser/layout/DataPanel.js +122 -0
  197. package/dist/browser/layout/DataPanel.js.map +1 -0
  198. package/dist/browser/layout/DetailPanel.js +484 -0
  199. package/dist/browser/layout/DetailPanel.js.map +1 -0
  200. package/dist/browser/layout/Discussion.js +511 -0
  201. package/dist/browser/layout/Discussion.js.map +1 -0
  202. package/dist/browser/layout/FloatingWindow.js +332 -0
  203. package/dist/browser/layout/FloatingWindow.js.map +1 -0
  204. package/dist/browser/layout/PanelDialog.js +236 -0
  205. package/dist/browser/layout/PanelDialog.js.map +1 -0
  206. package/dist/browser/layout/PanelHeader.js +91 -0
  207. package/dist/browser/layout/PanelHeader.js.map +1 -0
  208. package/dist/browser/layout/Panes.js +978 -0
  209. package/dist/browser/layout/Panes.js.map +1 -0
  210. package/dist/browser/layout/ScrollArea.js +29 -0
  211. package/dist/browser/layout/ScrollArea.js.map +1 -0
  212. package/dist/browser/layout/Settings.js +381 -0
  213. package/dist/browser/layout/Settings.js.map +1 -0
  214. package/dist/browser/layout/SettingsCollection.js +212 -0
  215. package/dist/browser/layout/SettingsCollection.js.map +1 -0
  216. package/dist/browser/layout/SettingsModal.js +281 -0
  217. package/dist/browser/layout/SettingsModal.js.map +1 -0
  218. package/dist/browser/layout/app-workspace-controller.js +419 -0
  219. package/dist/browser/layout/app-workspace-controller.js.map +1 -0
  220. package/dist/browser/layout/app-workspace-state.js +125 -0
  221. package/dist/browser/layout/app-workspace-state.js.map +1 -0
  222. package/dist/browser/layout/floating-window-geometry.js +15 -0
  223. package/dist/browser/layout/floating-window-geometry.js.map +1 -0
  224. package/dist/browser/layout/index.js +17 -0
  225. package/dist/browser/layout/index.js.map +1 -0
  226. package/dist/browser/layout/panes-layout.js +436 -0
  227. package/dist/browser/layout/panes-layout.js.map +1 -0
  228. package/dist/browser/layout/stable-id.js +17 -0
  229. package/dist/browser/layout/stable-id.js.map +1 -0
  230. package/dist/browser/semantics.js +2 -0
  231. package/dist/browser/semantics.js.map +1 -0
  232. package/dist/browser/surfaces/Avatar.js +97 -0
  233. package/dist/browser/surfaces/Avatar.js.map +1 -0
  234. package/dist/browser/surfaces/DescriptionList.js +66 -0
  235. package/dist/browser/surfaces/DescriptionList.js.map +1 -0
  236. package/dist/browser/surfaces/LinkCard.js +40 -0
  237. package/dist/browser/surfaces/LinkCard.js.map +1 -0
  238. package/dist/browser/surfaces/NotFoundState.js +85 -0
  239. package/dist/browser/surfaces/NotFoundState.js.map +1 -0
  240. package/dist/browser/surfaces/NoticeCard.js +145 -0
  241. package/dist/browser/surfaces/NoticeCard.js.map +1 -0
  242. package/dist/browser/surfaces/Paper.js +33 -0
  243. package/dist/browser/surfaces/Paper.js.map +1 -0
  244. package/dist/browser/surfaces/Placeholder.js +90 -0
  245. package/dist/browser/surfaces/Placeholder.js.map +1 -0
  246. package/dist/browser/surfaces/ProgressBar.js +58 -0
  247. package/dist/browser/surfaces/ProgressBar.js.map +1 -0
  248. package/dist/browser/surfaces/StatCell.js +172 -0
  249. package/dist/browser/surfaces/StatCell.js.map +1 -0
  250. package/dist/browser/surfaces/StatGrid.js +80 -0
  251. package/dist/browser/surfaces/StatGrid.js.map +1 -0
  252. package/dist/browser/surfaces/StatusBadge.js +70 -0
  253. package/dist/browser/surfaces/StatusBadge.js.map +1 -0
  254. package/dist/browser/surfaces/Tag.js +94 -0
  255. package/dist/browser/surfaces/Tag.js.map +1 -0
  256. package/dist/browser/surfaces/index.js +13 -0
  257. package/dist/browser/surfaces/index.js.map +1 -0
  258. package/dist/browser/widgets/Widget.js +89 -0
  259. package/dist/browser/widgets/Widget.js.map +1 -0
  260. package/dist/browser/widgets/WidgetHero.js +47 -0
  261. package/dist/browser/widgets/WidgetHero.js.map +1 -0
  262. package/dist/browser/widgets/WidgetList.js +125 -0
  263. package/dist/browser/widgets/WidgetList.js.map +1 -0
  264. package/dist/browser/widgets/WidgetPills.js +78 -0
  265. package/dist/browser/widgets/WidgetPills.js.map +1 -0
  266. package/dist/browser/widgets/WidgetStat.js +114 -0
  267. package/dist/browser/widgets/WidgetStat.js.map +1 -0
  268. package/dist/browser/widgets/WidgetStatus.js +54 -0
  269. package/dist/browser/widgets/WidgetStatus.js.map +1 -0
  270. package/dist/browser/widgets/index.js +7 -0
  271. package/dist/browser/widgets/index.js.map +1 -0
  272. package/dist/global.css +3 -0
  273. package/dist/licenses/ibm-plex-mono.txt +93 -0
  274. package/dist/licenses/ibm-plex-sans.txt +93 -0
  275. package/dist/licenses/tabler-icons.txt +21 -0
  276. package/dist/plex.css +1 -0
  277. package/dist/ssr/actions/Button.js +203 -0
  278. package/dist/ssr/actions/Button.js.map +1 -0
  279. package/dist/ssr/actions/ContextMenu.js +128 -0
  280. package/dist/ssr/actions/ContextMenu.js.map +1 -0
  281. package/dist/ssr/actions/CopyButton.js +79 -0
  282. package/dist/ssr/actions/CopyButton.js.map +1 -0
  283. package/dist/ssr/actions/Disclosure.js +26 -0
  284. package/dist/ssr/actions/Disclosure.js.map +1 -0
  285. package/dist/ssr/actions/Dropdown.js +443 -0
  286. package/dist/ssr/actions/Dropdown.js.map +1 -0
  287. package/dist/ssr/actions/FilterChip.js +132 -0
  288. package/dist/ssr/actions/FilterChip.js.map +1 -0
  289. package/dist/ssr/actions/RemoveButton.js +45 -0
  290. package/dist/ssr/actions/RemoveButton.js.map +1 -0
  291. package/dist/ssr/actions/SegmentedControl.js +57 -0
  292. package/dist/ssr/actions/SegmentedControl.js.map +1 -0
  293. package/dist/ssr/actions/SplitButton.js +74 -0
  294. package/dist/ssr/actions/SplitButton.js.map +1 -0
  295. package/dist/ssr/actions/SpotlightSearch.js +38 -0
  296. package/dist/ssr/actions/SpotlightSearch.js.map +1 -0
  297. package/dist/ssr/actions/Tabs.js +91 -0
  298. package/dist/ssr/actions/Tabs.js.map +1 -0
  299. package/dist/ssr/actions/Toolbar.js +33 -0
  300. package/dist/ssr/actions/Toolbar.js.map +1 -0
  301. package/dist/ssr/actions/index.js +13 -0
  302. package/dist/ssr/actions/index.js.map +1 -0
  303. package/dist/ssr/chat/ChatComposer.js +392 -0
  304. package/dist/ssr/chat/ChatComposer.js.map +1 -0
  305. package/dist/ssr/chat/ChatPrimitives.js +377 -0
  306. package/dist/ssr/chat/ChatPrimitives.js.map +1 -0
  307. package/dist/ssr/chat/ChatRoot.js +10 -0
  308. package/dist/ssr/chat/ChatRoot.js.map +1 -0
  309. package/dist/ssr/chat/ChatTimeline.js +301 -0
  310. package/dist/ssr/chat/ChatTimeline.js.map +1 -0
  311. package/dist/ssr/chat/chat-behavior.js +53 -0
  312. package/dist/ssr/chat/chat-behavior.js.map +1 -0
  313. package/dist/ssr/chat/index.js +17 -0
  314. package/dist/ssr/chat/index.js.map +1 -0
  315. package/dist/ssr/chat/types.js +2 -0
  316. package/dist/ssr/chat/types.js.map +1 -0
  317. package/dist/ssr/content/Calendar.js +1542 -0
  318. package/dist/ssr/content/Calendar.js.map +1 -0
  319. package/dist/ssr/content/Chart.js +552 -0
  320. package/dist/ssr/content/Chart.js.map +1 -0
  321. package/dist/ssr/content/CodeDisplay.js +55 -0
  322. package/dist/ssr/content/CodeDisplay.js.map +1 -0
  323. package/dist/ssr/content/DataTable.js +470 -0
  324. package/dist/ssr/content/DataTable.js.map +1 -0
  325. package/dist/ssr/content/Docs.js +108 -0
  326. package/dist/ssr/content/Docs.js.map +1 -0
  327. package/dist/ssr/content/FileBrowser.js +422 -0
  328. package/dist/ssr/content/FileBrowser.js.map +1 -0
  329. package/dist/ssr/content/FileTree.js +299 -0
  330. package/dist/ssr/content/FileTree.js.map +1 -0
  331. package/dist/ssr/content/FileView.js +612 -0
  332. package/dist/ssr/content/FileView.js.map +1 -0
  333. package/dist/ssr/content/Lightbox.js +164 -0
  334. package/dist/ssr/content/Lightbox.js.map +1 -0
  335. package/dist/ssr/content/LogEntriesTable.js +106 -0
  336. package/dist/ssr/content/LogEntriesTable.js.map +1 -0
  337. package/dist/ssr/content/MarkdownView.js +119 -0
  338. package/dist/ssr/content/MarkdownView.js.map +1 -0
  339. package/dist/ssr/content/Pagination.js +141 -0
  340. package/dist/ssr/content/Pagination.js.map +1 -0
  341. package/dist/ssr/content/PdfPreview.js +126 -0
  342. package/dist/ssr/content/PdfPreview.js.map +1 -0
  343. package/dist/ssr/content/RangePicker.js +35 -0
  344. package/dist/ssr/content/RangePicker.js.map +1 -0
  345. package/dist/ssr/content/StructuredDataPreview.js +127 -0
  346. package/dist/ssr/content/StructuredDataPreview.js.map +1 -0
  347. package/dist/ssr/content/calendar-event-layout.js +92 -0
  348. package/dist/ssr/content/calendar-event-layout.js.map +1 -0
  349. package/dist/ssr/content/calendar-pointer.js +114 -0
  350. package/dist/ssr/content/calendar-pointer.js.map +1 -0
  351. package/dist/ssr/content/chart-map-viewport.js +33 -0
  352. package/dist/ssr/content/chart-map-viewport.js.map +1 -0
  353. package/dist/ssr/content/chart-state-timeline.js +124 -0
  354. package/dist/ssr/content/chart-state-timeline.js.map +1 -0
  355. package/dist/ssr/content/code-highlight.js +144 -0
  356. package/dist/ssr/content/code-highlight.js.map +1 -0
  357. package/dist/ssr/content/file-tree.js +93 -0
  358. package/dist/ssr/content/file-tree.js.map +1 -0
  359. package/dist/ssr/content/file-view-preview.js +112 -0
  360. package/dist/ssr/content/file-view-preview.js.map +1 -0
  361. package/dist/ssr/content/index.js +16 -0
  362. package/dist/ssr/content/index.js.map +1 -0
  363. package/dist/ssr/feedback/InlineGuidance.js +26 -0
  364. package/dist/ssr/feedback/InlineGuidance.js.map +1 -0
  365. package/dist/ssr/feedback/Tooltip.js +156 -0
  366. package/dist/ssr/feedback/Tooltip.js.map +1 -0
  367. package/dist/ssr/feedback/dialog-core.js +207 -0
  368. package/dist/ssr/feedback/dialog-core.js.map +1 -0
  369. package/dist/ssr/feedback/index.js +6 -0
  370. package/dist/ssr/feedback/index.js.map +1 -0
  371. package/dist/ssr/feedback/prompts.js +703 -0
  372. package/dist/ssr/feedback/prompts.js.map +1 -0
  373. package/dist/ssr/feedback/toast.js +271 -0
  374. package/dist/ssr/feedback/toast.js.map +1 -0
  375. package/dist/ssr/feedback/tooltip-position.js +25 -0
  376. package/dist/ssr/feedback/tooltip-position.js.map +1 -0
  377. package/dist/ssr/index.js +11 -0
  378. package/dist/ssr/index.js.map +1 -0
  379. package/dist/ssr/inputs/AutocompleteEditor.js +463 -0
  380. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -0
  381. package/dist/ssr/inputs/AutocompleteSelect.js +420 -0
  382. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -0
  383. package/dist/ssr/inputs/Checkbox.js +75 -0
  384. package/dist/ssr/inputs/Checkbox.js.map +1 -0
  385. package/dist/ssr/inputs/CheckboxCard.js +69 -0
  386. package/dist/ssr/inputs/CheckboxCard.js.map +1 -0
  387. package/dist/ssr/inputs/ChoiceGroups.js +101 -0
  388. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -0
  389. package/dist/ssr/inputs/ChoiceInputs.js +250 -0
  390. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -0
  391. package/dist/ssr/inputs/Combobox.js +177 -0
  392. package/dist/ssr/inputs/Combobox.js.map +1 -0
  393. package/dist/ssr/inputs/DatePicker.js +629 -0
  394. package/dist/ssr/inputs/DatePicker.js.map +1 -0
  395. package/dist/ssr/inputs/FileInputs.js +543 -0
  396. package/dist/ssr/inputs/FileInputs.js.map +1 -0
  397. package/dist/ssr/inputs/MultiSelectInput.js +347 -0
  398. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -0
  399. package/dist/ssr/inputs/NumberInput.js +177 -0
  400. package/dist/ssr/inputs/NumberInput.js.map +1 -0
  401. package/dist/ssr/inputs/Select.js +308 -0
  402. package/dist/ssr/inputs/Select.js.map +1 -0
  403. package/dist/ssr/inputs/SelectChip.js +129 -0
  404. package/dist/ssr/inputs/SelectChip.js.map +1 -0
  405. package/dist/ssr/inputs/SpecialInputs.js +116 -0
  406. package/dist/ssr/inputs/SpecialInputs.js.map +1 -0
  407. package/dist/ssr/inputs/Switch.js +62 -0
  408. package/dist/ssr/inputs/Switch.js.map +1 -0
  409. package/dist/ssr/inputs/TagEditor.js +280 -0
  410. package/dist/ssr/inputs/TagEditor.js.map +1 -0
  411. package/dist/ssr/inputs/TagsInput.js +122 -0
  412. package/dist/ssr/inputs/TagsInput.js.map +1 -0
  413. package/dist/ssr/inputs/TemplateEditor.js +164 -0
  414. package/dist/ssr/inputs/TemplateEditor.js.map +1 -0
  415. package/dist/ssr/inputs/TextInput.js +211 -0
  416. package/dist/ssr/inputs/TextInput.js.map +1 -0
  417. package/dist/ssr/inputs/choice.js +188 -0
  418. package/dist/ssr/inputs/choice.js.map +1 -0
  419. package/dist/ssr/inputs/completion/behaviors.js +108 -0
  420. package/dist/ssr/inputs/completion/behaviors.js.map +1 -0
  421. package/dist/ssr/inputs/completion/engine.js +103 -0
  422. package/dist/ssr/inputs/completion/engine.js.map +1 -0
  423. package/dist/ssr/inputs/completion/index.js +4 -0
  424. package/dist/ssr/inputs/completion/index.js.map +1 -0
  425. package/dist/ssr/inputs/completion/overlay.js +25 -0
  426. package/dist/ssr/inputs/completion/overlay.js.map +1 -0
  427. package/dist/ssr/inputs/date-picker.js +123 -0
  428. package/dist/ssr/inputs/date-picker.js.map +1 -0
  429. package/dist/ssr/inputs/editor-dom.js +26 -0
  430. package/dist/ssr/inputs/editor-dom.js.map +1 -0
  431. package/dist/ssr/inputs/field-contract.js +9 -0
  432. package/dist/ssr/inputs/field-contract.js.map +1 -0
  433. package/dist/ssr/inputs/icon-options.js +46 -0
  434. package/dist/ssr/inputs/icon-options.js.map +1 -0
  435. package/dist/ssr/inputs/image-crop.js +145 -0
  436. package/dist/ssr/inputs/image-crop.js.map +1 -0
  437. package/dist/ssr/inputs/index.js +23 -0
  438. package/dist/ssr/inputs/index.js.map +1 -0
  439. package/dist/ssr/inputs/markdown/MarkdownEditor.js +516 -0
  440. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -0
  441. package/dist/ssr/inputs/markdown/Toolbar.js +115 -0
  442. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -0
  443. package/dist/ssr/inputs/markdown/actions.js +140 -0
  444. package/dist/ssr/inputs/markdown/actions.js.map +1 -0
  445. package/dist/ssr/inputs/markdown/active-formats.js +36 -0
  446. package/dist/ssr/inputs/markdown/active-formats.js.map +1 -0
  447. package/dist/ssr/inputs/markdown/behaviors.js +63 -0
  448. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -0
  449. package/dist/ssr/inputs/markdown/code-zone.js +8 -0
  450. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -0
  451. package/dist/ssr/internal/color.js +18 -0
  452. package/dist/ssr/internal/color.js.map +1 -0
  453. package/dist/ssr/internal/field.js +90 -0
  454. package/dist/ssr/internal/field.js.map +1 -0
  455. package/dist/ssr/internal/portal.js +17 -0
  456. package/dist/ssr/internal/portal.js.map +1 -0
  457. package/dist/ssr/intl/Format.js +192 -0
  458. package/dist/ssr/intl/Format.js.map +1 -0
  459. package/dist/ssr/intl/index.js +3 -0
  460. package/dist/ssr/intl/index.js.map +1 -0
  461. package/dist/ssr/intl/locale.js +63 -0
  462. package/dist/ssr/intl/locale.js.map +1 -0
  463. package/dist/ssr/intl/messages.js +753 -0
  464. package/dist/ssr/intl/messages.js.map +1 -0
  465. package/dist/ssr/layout/AppOverview.js +85 -0
  466. package/dist/ssr/layout/AppOverview.js.map +1 -0
  467. package/dist/ssr/layout/AppWorkspace.js +976 -0
  468. package/dist/ssr/layout/AppWorkspace.js.map +1 -0
  469. package/dist/ssr/layout/DataPanel.js +101 -0
  470. package/dist/ssr/layout/DataPanel.js.map +1 -0
  471. package/dist/ssr/layout/DetailPanel.js +284 -0
  472. package/dist/ssr/layout/DetailPanel.js.map +1 -0
  473. package/dist/ssr/layout/Discussion.js +319 -0
  474. package/dist/ssr/layout/Discussion.js.map +1 -0
  475. package/dist/ssr/layout/FloatingWindow.js +259 -0
  476. package/dist/ssr/layout/FloatingWindow.js.map +1 -0
  477. package/dist/ssr/layout/PanelDialog.js +136 -0
  478. package/dist/ssr/layout/PanelDialog.js.map +1 -0
  479. package/dist/ssr/layout/PanelHeader.js +45 -0
  480. package/dist/ssr/layout/PanelHeader.js.map +1 -0
  481. package/dist/ssr/layout/Panes.js +678 -0
  482. package/dist/ssr/layout/Panes.js.map +1 -0
  483. package/dist/ssr/layout/ScrollArea.js +18 -0
  484. package/dist/ssr/layout/ScrollArea.js.map +1 -0
  485. package/dist/ssr/layout/Settings.js +219 -0
  486. package/dist/ssr/layout/Settings.js.map +1 -0
  487. package/dist/ssr/layout/SettingsCollection.js +150 -0
  488. package/dist/ssr/layout/SettingsCollection.js.map +1 -0
  489. package/dist/ssr/layout/SettingsModal.js +156 -0
  490. package/dist/ssr/layout/SettingsModal.js.map +1 -0
  491. package/dist/ssr/layout/app-workspace-controller.js +419 -0
  492. package/dist/ssr/layout/app-workspace-controller.js.map +1 -0
  493. package/dist/ssr/layout/app-workspace-state.js +125 -0
  494. package/dist/ssr/layout/app-workspace-state.js.map +1 -0
  495. package/dist/ssr/layout/floating-window-geometry.js +15 -0
  496. package/dist/ssr/layout/floating-window-geometry.js.map +1 -0
  497. package/dist/ssr/layout/index.js +17 -0
  498. package/dist/ssr/layout/index.js.map +1 -0
  499. package/dist/ssr/layout/panes-layout.js +436 -0
  500. package/dist/ssr/layout/panes-layout.js.map +1 -0
  501. package/dist/ssr/layout/stable-id.js +17 -0
  502. package/dist/ssr/layout/stable-id.js.map +1 -0
  503. package/dist/ssr/semantics.js +2 -0
  504. package/dist/ssr/semantics.js.map +1 -0
  505. package/dist/ssr/surfaces/Avatar.js +43 -0
  506. package/dist/ssr/surfaces/Avatar.js.map +1 -0
  507. package/dist/ssr/surfaces/DescriptionList.js +25 -0
  508. package/dist/ssr/surfaces/DescriptionList.js.map +1 -0
  509. package/dist/ssr/surfaces/LinkCard.js +25 -0
  510. package/dist/ssr/surfaces/LinkCard.js.map +1 -0
  511. package/dist/ssr/surfaces/NotFoundState.js +38 -0
  512. package/dist/ssr/surfaces/NotFoundState.js.map +1 -0
  513. package/dist/ssr/surfaces/NoticeCard.js +83 -0
  514. package/dist/ssr/surfaces/NoticeCard.js.map +1 -0
  515. package/dist/ssr/surfaces/Paper.js +32 -0
  516. package/dist/ssr/surfaces/Paper.js.map +1 -0
  517. package/dist/ssr/surfaces/Placeholder.js +76 -0
  518. package/dist/ssr/surfaces/Placeholder.js.map +1 -0
  519. package/dist/ssr/surfaces/ProgressBar.js +13 -0
  520. package/dist/ssr/surfaces/ProgressBar.js.map +1 -0
  521. package/dist/ssr/surfaces/StatCell.js +80 -0
  522. package/dist/ssr/surfaces/StatCell.js.map +1 -0
  523. package/dist/ssr/surfaces/StatGrid.js +62 -0
  524. package/dist/ssr/surfaces/StatGrid.js.map +1 -0
  525. package/dist/ssr/surfaces/StatusBadge.js +38 -0
  526. package/dist/ssr/surfaces/StatusBadge.js.map +1 -0
  527. package/dist/ssr/surfaces/Tag.js +32 -0
  528. package/dist/ssr/surfaces/Tag.js.map +1 -0
  529. package/dist/ssr/surfaces/index.js +13 -0
  530. package/dist/ssr/surfaces/index.js.map +1 -0
  531. package/dist/ssr/widgets/Widget.js +54 -0
  532. package/dist/ssr/widgets/Widget.js.map +1 -0
  533. package/dist/ssr/widgets/WidgetHero.js +23 -0
  534. package/dist/ssr/widgets/WidgetHero.js.map +1 -0
  535. package/dist/ssr/widgets/WidgetList.js +73 -0
  536. package/dist/ssr/widgets/WidgetList.js.map +1 -0
  537. package/dist/ssr/widgets/WidgetPills.js +40 -0
  538. package/dist/ssr/widgets/WidgetPills.js.map +1 -0
  539. package/dist/ssr/widgets/WidgetStat.js +45 -0
  540. package/dist/ssr/widgets/WidgetStat.js.map +1 -0
  541. package/dist/ssr/widgets/WidgetStatus.js +23 -0
  542. package/dist/ssr/widgets/WidgetStatus.js.map +1 -0
  543. package/dist/ssr/widgets/index.js +7 -0
  544. package/dist/ssr/widgets/index.js.map +1 -0
  545. package/dist/styles.css +1 -0
  546. package/dist/tabler-icons-q30jt7jk.woff2 +0 -0
  547. package/dist/tabler.css +4 -0
  548. package/package.json +77 -0
@@ -0,0 +1,842 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
+ import { memo as _$memo } from "solid-js/web";
4
+ import { setProperty as _$setProperty } from "solid-js/web";
5
+ import { getNextMarker as _$getNextMarker } from "solid-js/web";
6
+ import { insert as _$insert } from "solid-js/web";
7
+ import { className as _$className } from "solid-js/web";
8
+ import { setAttribute as _$setAttribute } from "solid-js/web";
9
+ import { effect as _$effect } from "solid-js/web";
10
+ import { getNextElement as _$getNextElement } from "solid-js/web";
11
+ import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
12
+ import { addEventListener as _$addEventListener } from "solid-js/web";
13
+ import { createComponent as _$createComponent } from "solid-js/web";
14
+ var _tmpl$ = /*#__PURE__*/_$template(`<button type=button class=k2b-content-file-view__action><i aria-hidden=true>`),
15
+ _tmpl$2 = /*#__PURE__*/_$template(`<a class=k2b-content-file-view__action><i aria-hidden=true></i><span class=k2b-sr-only>`),
16
+ _tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__overlay>`),
17
+ _tmpl$4 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__panel><div class=k2b-content-file-view__preview></div><!$><!/>`),
18
+ _tmpl$5 = /*#__PURE__*/_$template(`<button type=button class=k2b-markdown-editor__tool tabindex=-1><i>`),
19
+ _tmpl$6 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__document>`),
20
+ _tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__editor>`),
21
+ _tmpl$8 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__editor><div class=k2b-markdown-editor data-fill=true role=group><div class="k2b-markdown-editor__toolbar k2b-content-file-view__code-toolbar"><span class=k2b-content-file-view__code-language></span><span class=k2b-markdown-editor__trailing><!$><!/><!$><!/></span></div><div class=k2b-markdown-editor__surface><textarea class=k2b-content-file-view__code-input>`),
22
+ _tmpl$9 = /*#__PURE__*/_$template(`<a class=k2b-markdown-editor__tool><i class="ti ti-download">`),
23
+ _tmpl$0 = /*#__PURE__*/_$template(`<p class=k2b-content-file-view__truncated>`),
24
+ _tmpl$1 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__sheet><table class=k2b-content-file-view__table><thead><tr></tr></thead><tbody></tbody></table><!$><!/>`),
25
+ _tmpl$10 = /*#__PURE__*/_$template(`<th scope=col><span>`),
26
+ _tmpl$11 = /*#__PURE__*/_$template(`<tr>`),
27
+ _tmpl$12 = /*#__PURE__*/_$template(`<td>`),
28
+ _tmpl$13 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__media><img>`),
29
+ _tmpl$14 = /*#__PURE__*/_$template(`<object type=application/pdf class=k2b-content-file-view__pdf>`),
30
+ _tmpl$15 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__media data-kind=audio><audio controls preload=metadata>`),
31
+ _tmpl$16 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__media data-kind=video><video controls preload=metadata playsinline>`),
32
+ _tmpl$17 = /*#__PURE__*/_$template(`<a class=k2b-button data-variant=secondary data-size=sm download><i class="ti ti-download"aria-hidden=true></i><!$><!/>`),
33
+ _tmpl$18 = /*#__PURE__*/_$template(`<div>`);
34
+ /**
35
+ * FileView — renders one file through a small renderer registry keyed by
36
+ * media type / path. Editing is enabled purely by the presence of `save`;
37
+ * without it every renderer is read-only. IDE-style chrome: editors reuse
38
+ * the markdown editor's surface (toolbar with an in-toolbar save, Ctrl/Cmd+S),
39
+ * previews are quiet paper panels with icon-only actions overlaid top-right.
40
+ * Custom renderers are passed per instance, which keeps SSR requests and
41
+ * independently mounted applications isolated.
42
+ */
43
+
44
+ import { mutation } from "@k2b/stdlib/solid";
45
+ import { createEffect, createMemo, createResource, createSignal, For, Match, onCleanup, Show, Switch, untrack } from "solid-js";
46
+ import { toast } from "../feedback/toast";
47
+ import { MarkdownEditor } from "../inputs/markdown/MarkdownEditor";
48
+ import { useUiMessages } from "../intl/messages";
49
+ import Placeholder from "../surfaces/Placeholder";
50
+ import CodeDisplay from "./CodeDisplay";
51
+ import { fileViewExtension, getFileViewPreviewKind, parseDelimitedText } from "./file-view-preview";
52
+ import MarkdownView from "./MarkdownView";
53
+ import StructuredDataPreview from "./StructuredDataPreview";
54
+ export { canPreviewFile, getFileViewPreviewKind } from "./file-view-preview";
55
+ const codeLanguage = path => {
56
+ const extension = fileViewExtension(path);
57
+ if (extension === "ts" || extension === "mts" || extension === "cts") return "ts";
58
+ if (extension === "tsx") return "tsx";
59
+ if (extension === "js" || extension === "mjs" || extension === "cjs") return "js";
60
+ if (extension === "jsx") return "jsx";
61
+ if (extension === "md" || extension === "markdown") return "md";
62
+ return "text";
63
+ };
64
+ const isMarkdown = (file, content) => content.encoding === "utf8" && getFileViewPreviewKind({
65
+ ...file,
66
+ mediaType: content.mediaType || file.mediaType
67
+ }) === "markdown";
68
+
69
+ /** Rendered previews hide a leading YAML frontmatter block — it's metadata, not content. */
70
+ const stripFrontmatter = text => {
71
+ const match = /^---\r?\n[\s\S]*?\r?\n---\r?\n?/.exec(text.trimStart());
72
+ return match ? text.trimStart().slice(match[0].length) : text;
73
+ };
74
+
75
+ /** Icon-only action, IDE style — sits in the floating top-right cluster of previews. */
76
+ function OverlayAction(props) {
77
+ const classes = "k2b-content-file-view__action";
78
+ return _$createComponent(Show, {
79
+ get when() {
80
+ return props.href;
81
+ },
82
+ get fallback() {
83
+ return (() => {
84
+ var _el$ = _$getNextElement(_tmpl$),
85
+ _el$2 = _el$.firstChild;
86
+ _$addEventListener(_el$, "click", props.onClick, true);
87
+ _$effect(_p$ => {
88
+ var _v$ = props.title,
89
+ _v$2 = props.title,
90
+ _v$3 = `ti ${props.icon}`;
91
+ _v$ !== _p$.e && _$setAttribute(_el$, "title", _p$.e = _v$);
92
+ _v$2 !== _p$.t && _$setAttribute(_el$, "aria-label", _p$.t = _v$2);
93
+ _v$3 !== _p$.a && _$className(_el$2, _p$.a = _v$3);
94
+ return _p$;
95
+ }, {
96
+ e: undefined,
97
+ t: undefined,
98
+ a: undefined
99
+ });
100
+ _$runHydrationEvents();
101
+ return _el$;
102
+ })();
103
+ },
104
+ children: href => (() => {
105
+ var _el$3 = _$getNextElement(_tmpl$2),
106
+ _el$4 = _el$3.firstChild,
107
+ _el$5 = _el$4.nextSibling;
108
+ _$insert(_el$5, () => props.title);
109
+ _$effect(_p$ => {
110
+ var _v$4 = href(),
111
+ _v$5 = props.download ?? "",
112
+ _v$6 = props.title,
113
+ _v$7 = props.title,
114
+ _v$8 = `ti ${props.icon}`;
115
+ _v$4 !== _p$.e && _$setAttribute(_el$3, "href", _p$.e = _v$4);
116
+ _v$5 !== _p$.t && _$setAttribute(_el$3, "download", _p$.t = _v$5);
117
+ _v$6 !== _p$.a && _$setAttribute(_el$3, "title", _p$.a = _v$6);
118
+ _v$7 !== _p$.o && _$setAttribute(_el$3, "aria-label", _p$.o = _v$7);
119
+ _v$8 !== _p$.i && _$className(_el$4, _p$.i = _v$8);
120
+ return _p$;
121
+ }, {
122
+ e: undefined,
123
+ t: undefined,
124
+ a: undefined,
125
+ o: undefined,
126
+ i: undefined
127
+ });
128
+ return _el$3;
129
+ })()
130
+ });
131
+ }
132
+
133
+ /** Scrollable preview panel with the floating action cluster overlaid top-right. */
134
+ function OverlayPanel(props) {
135
+ return (() => {
136
+ var _el$6 = _$getNextElement(_tmpl$4),
137
+ _el$7 = _el$6.firstChild,
138
+ _el$9 = _el$7.nextSibling,
139
+ [_el$0, _co$] = _$getNextMarker(_el$9.nextSibling);
140
+ _$insert(_el$7, () => props.children);
141
+ _$insert(_el$6, _$createComponent(Show, {
142
+ get when() {
143
+ return props.actions;
144
+ },
145
+ get children() {
146
+ var _el$8 = _$getNextElement(_tmpl$3);
147
+ _$insert(_el$8, () => props.actions);
148
+ return _el$8;
149
+ }
150
+ }), _el$0, _co$);
151
+ return _el$6;
152
+ })();
153
+ }
154
+ const DownloadAction = props => {
155
+ const messages = useUiMessages();
156
+ return _$createComponent(Show, {
157
+ get when() {
158
+ return props.downloadHref;
159
+ },
160
+ children: href => _$createComponent(OverlayAction, {
161
+ icon: "ti-download",
162
+ get title() {
163
+ return messages().download;
164
+ },
165
+ get href() {
166
+ return href();
167
+ },
168
+ get download() {
169
+ return props.file.path.slice(props.file.path.lastIndexOf("/") + 1);
170
+ }
171
+ })
172
+ });
173
+ };
174
+
175
+ /** Toolbar-styled icon button — reuses the package markdown-editor tool primitive. */
176
+ function EditorToolButton(props) {
177
+ return (() => {
178
+ var _el$1 = _$getNextElement(_tmpl$5),
179
+ _el$10 = _el$1.firstChild;
180
+ _$addEventListener(_el$1, "click", props.onClick, true);
181
+ _el$1.$$mousedown = e => e.preventDefault();
182
+ _$effect(_p$ => {
183
+ var _v$9 = props.title,
184
+ _v$0 = props.title,
185
+ _v$1 = props.disabled,
186
+ _v$10 = props.icon;
187
+ _v$9 !== _p$.e && _$setAttribute(_el$1, "title", _p$.e = _v$9);
188
+ _v$0 !== _p$.t && _$setAttribute(_el$1, "aria-label", _p$.t = _v$0);
189
+ _v$1 !== _p$.a && _$setProperty(_el$1, "disabled", _p$.a = _v$1);
190
+ _v$10 !== _p$.o && _$className(_el$10, _p$.o = _v$10);
191
+ return _p$;
192
+ }, {
193
+ e: undefined,
194
+ t: undefined,
195
+ a: undefined,
196
+ o: undefined
197
+ });
198
+ _$runHydrationEvents();
199
+ return _el$1;
200
+ })();
201
+ }
202
+
203
+ // ── Built-in renderers ──────────────────────────────────────────────────────
204
+
205
+ function MarkdownRenderer(props) {
206
+ const messages = useUiMessages();
207
+ const [editing, setEditing] = createSignal(false);
208
+ return _$createComponent(Show, {
209
+ get when() {
210
+ return _$memo(() => !!props.editor)() && editing();
211
+ },
212
+ get fallback() {
213
+ return _$createComponent(OverlayPanel, {
214
+ get actions() {
215
+ return [_$createComponent(Show, {
216
+ get when() {
217
+ return props.editor;
218
+ },
219
+ get children() {
220
+ return _$createComponent(OverlayAction, {
221
+ icon: "ti-pencil",
222
+ get title() {
223
+ return messages().edit;
224
+ },
225
+ onClick: () => setEditing(true)
226
+ });
227
+ }
228
+ }), _$createComponent(DownloadAction, props)];
229
+ },
230
+ get children() {
231
+ var _el$11 = _$getNextElement(_tmpl$6);
232
+ _$insert(_el$11, _$createComponent(MarkdownView, {
233
+ get markdown() {
234
+ return stripFrontmatter(props.editor?.draft() ?? props.content.content);
235
+ },
236
+ headingScale: "compact"
237
+ }));
238
+ return _el$11;
239
+ }
240
+ });
241
+ },
242
+ children: _ => {
243
+ const editor = props.editor;
244
+ return (() => {
245
+ var _el$12 = _$getNextElement(_tmpl$7);
246
+ _$insert(_el$12, _$createComponent(MarkdownEditor, {
247
+ "class": "k2b-content-file-view__markdown-field",
248
+ get ["aria-label"]() {
249
+ return `Edit ${props.file.path.slice(props.file.path.lastIndexOf("/") + 1)}`;
250
+ },
251
+ fill: true,
252
+ get value() {
253
+ return editor.draft();
254
+ },
255
+ get onValueChange() {
256
+ return editor.setDraft;
257
+ },
258
+ showStats: false,
259
+ onSave: () => void editor.save(),
260
+ get saveDisabled() {
261
+ return !editor.dirty();
262
+ },
263
+ get saving() {
264
+ return editor.saving();
265
+ },
266
+ get toolbarTrailing() {
267
+ return _$createComponent(EditorToolButton, {
268
+ icon: "ti ti-eye",
269
+ get title() {
270
+ return messages().preview;
271
+ },
272
+ onClick: () => setEditing(false)
273
+ });
274
+ }
275
+ }));
276
+ return _el$12;
277
+ })();
278
+ }
279
+ });
280
+ }
281
+ function TextRenderer(props) {
282
+ const messages = useUiMessages();
283
+ return _$createComponent(Show, {
284
+ get when() {
285
+ return props.editor;
286
+ },
287
+ get fallback() {
288
+ return _$createComponent(OverlayPanel, {
289
+ get actions() {
290
+ return _$createComponent(DownloadAction, props);
291
+ },
292
+ get children() {
293
+ return _$createComponent(CodeDisplay, {
294
+ get code() {
295
+ return props.content.content;
296
+ },
297
+ get language() {
298
+ return codeLanguage(props.file.path);
299
+ }
300
+ });
301
+ }
302
+ });
303
+ },
304
+ children: editor => // Same chrome as the markdown editor — literally the same classes, so
305
+ // border, radius, focus ring, toolbar height and text metrics cannot drift.
306
+ (() => {
307
+ var _el$13 = _$getNextElement(_tmpl$8),
308
+ _el$14 = _el$13.firstChild,
309
+ _el$15 = _el$14.firstChild,
310
+ _el$16 = _el$15.firstChild,
311
+ _el$17 = _el$16.nextSibling,
312
+ _el$18 = _el$17.firstChild,
313
+ [_el$19, _co$2] = _$getNextMarker(_el$18.nextSibling),
314
+ _el$20 = _el$19.nextSibling,
315
+ [_el$21, _co$3] = _$getNextMarker(_el$20.nextSibling),
316
+ _el$22 = _el$15.nextSibling,
317
+ _el$23 = _el$22.firstChild;
318
+ _el$14.$$keydown = event => {
319
+ if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "s") {
320
+ event.preventDefault();
321
+ if (editor().dirty() && !editor().saving()) void editor().save();
322
+ }
323
+ };
324
+ _$insert(_el$16, () => codeLanguage(props.file.path));
325
+ _$insert(_el$17, _$createComponent(Show, {
326
+ get when() {
327
+ return props.downloadHref;
328
+ },
329
+ children: href => (() => {
330
+ var _el$24 = _$getNextElement(_tmpl$9);
331
+ _$effect(_p$ => {
332
+ var _v$11 = href(),
333
+ _v$12 = props.file.path.slice(props.file.path.lastIndexOf("/") + 1),
334
+ _v$13 = messages().download,
335
+ _v$14 = messages().download;
336
+ _v$11 !== _p$.e && _$setAttribute(_el$24, "href", _p$.e = _v$11);
337
+ _v$12 !== _p$.t && _$setAttribute(_el$24, "download", _p$.t = _v$12);
338
+ _v$13 !== _p$.a && _$setAttribute(_el$24, "title", _p$.a = _v$13);
339
+ _v$14 !== _p$.o && _$setAttribute(_el$24, "aria-label", _p$.o = _v$14);
340
+ return _p$;
341
+ }, {
342
+ e: undefined,
343
+ t: undefined,
344
+ a: undefined,
345
+ o: undefined
346
+ });
347
+ return _el$24;
348
+ })()
349
+ }), _el$19, _co$2);
350
+ _$insert(_el$17, _$createComponent(EditorToolButton, {
351
+ get icon() {
352
+ return editor().saving() ? "ti ti-loader-2 k2b-spin" : "ti ti-device-floppy";
353
+ },
354
+ get title() {
355
+ return messages().saveShortcut;
356
+ },
357
+ get disabled() {
358
+ return !editor().dirty() || editor().saving();
359
+ },
360
+ onClick: () => void editor().save()
361
+ }), _el$21, _co$3);
362
+ _el$23.$$input = event => editor().setDraft(event.currentTarget.value);
363
+ _$setAttribute(_el$23, "spellcheck", false);
364
+ _$effect(() => _$setAttribute(_el$14, "aria-label", messages().textEditor));
365
+ _$effect(() => _$setProperty(_el$23, "value", editor().draft()));
366
+ _$runHydrationEvents();
367
+ return _el$13;
368
+ })()
369
+ });
370
+ }
371
+ function JsonRenderer(props) {
372
+ const parsed = createMemo(() => {
373
+ try {
374
+ return {
375
+ ok: true,
376
+ value: JSON.parse(props.content.content)
377
+ };
378
+ } catch {
379
+ return {
380
+ ok: false
381
+ };
382
+ }
383
+ });
384
+ const parsedValue = () => {
385
+ const result = parsed();
386
+ return result.ok ? result.value : null;
387
+ };
388
+ return _$createComponent(OverlayPanel, {
389
+ get actions() {
390
+ return _$createComponent(DownloadAction, props);
391
+ },
392
+ get children() {
393
+ var _el$25 = _$getNextElement(_tmpl$6);
394
+ _$insert(_el$25, _$createComponent(Show, {
395
+ get when() {
396
+ return parsed().ok;
397
+ },
398
+ get fallback() {
399
+ return _$createComponent(CodeDisplay, {
400
+ get code() {
401
+ return props.content.content;
402
+ },
403
+ language: "text"
404
+ });
405
+ },
406
+ get children() {
407
+ return _$createComponent(StructuredDataPreview, {
408
+ get data() {
409
+ return parsedValue();
410
+ },
411
+ maxRows: 200
412
+ });
413
+ }
414
+ }));
415
+ return _el$25;
416
+ }
417
+ });
418
+ }
419
+ function DelimitedTextRenderer(props) {
420
+ const messages = useUiMessages();
421
+ const delimiter = () => fileViewExtension(props.file.path) === "tsv" || props.content.mediaType === "text/tab-separated-values" ? "\t" : ",";
422
+ const preview = createMemo(() => parseDelimitedText(props.content.content, delimiter()));
423
+ const headers = createMemo(() => preview().rows[0] ?? []);
424
+ const rows = createMemo(() => preview().rows.slice(1));
425
+ return _$createComponent(OverlayPanel, {
426
+ get actions() {
427
+ return _$createComponent(DownloadAction, props);
428
+ },
429
+ get children() {
430
+ return _$createComponent(Show, {
431
+ get when() {
432
+ return headers().length > 0;
433
+ },
434
+ get fallback() {
435
+ return _$createComponent(Placeholder, {
436
+ icon: "ti ti-table",
437
+ get title() {
438
+ return messages().emptyFile;
439
+ },
440
+ get description() {
441
+ return messages().delimitedFileEmpty;
442
+ }
443
+ });
444
+ },
445
+ get children() {
446
+ var _el$26 = _$getNextElement(_tmpl$1),
447
+ _el$27 = _el$26.firstChild,
448
+ _el$28 = _el$27.firstChild,
449
+ _el$29 = _el$28.firstChild,
450
+ _el$30 = _el$28.nextSibling,
451
+ _el$32 = _el$27.nextSibling,
452
+ [_el$33, _co$4] = _$getNextMarker(_el$32.nextSibling);
453
+ _$insert(_el$29, _$createComponent(For, {
454
+ get each() {
455
+ return headers();
456
+ },
457
+ children: (header, index) => (() => {
458
+ var _el$34 = _$getNextElement(_tmpl$10),
459
+ _el$35 = _el$34.firstChild;
460
+ _$insert(_el$35, () => header || messages().column({
461
+ number: index() + 1
462
+ }));
463
+ return _el$34;
464
+ })()
465
+ }));
466
+ _$insert(_el$30, _$createComponent(For, {
467
+ get each() {
468
+ return rows();
469
+ },
470
+ children: row => (() => {
471
+ var _el$36 = _$getNextElement(_tmpl$11);
472
+ _$insert(_el$36, _$createComponent(For, {
473
+ get each() {
474
+ return headers();
475
+ },
476
+ children: (_, index) => (() => {
477
+ var _el$37 = _$getNextElement(_tmpl$12);
478
+ _$insert(_el$37, () => row[index()] ?? "");
479
+ return _el$37;
480
+ })()
481
+ }));
482
+ return _el$36;
483
+ })()
484
+ }));
485
+ _$insert(_el$26, _$createComponent(Show, {
486
+ get when() {
487
+ return preview().truncated;
488
+ },
489
+ get children() {
490
+ var _el$31 = _$getNextElement(_tmpl$0);
491
+ _$insert(_el$31, () => messages().previewLimited);
492
+ return _el$31;
493
+ }
494
+ }), _el$33, _co$4);
495
+ return _el$26;
496
+ }
497
+ });
498
+ }
499
+ });
500
+ }
501
+ const mediaSource = props => props.previewHref ?? `data:${props.content.mediaType};base64,${props.content.content}`;
502
+ function ImageRenderer(props) {
503
+ return _$createComponent(OverlayPanel, {
504
+ get actions() {
505
+ return _$createComponent(DownloadAction, props);
506
+ },
507
+ get children() {
508
+ var _el$38 = _$getNextElement(_tmpl$13),
509
+ _el$39 = _el$38.firstChild;
510
+ _$effect(_p$ => {
511
+ var _v$15 = mediaSource(props),
512
+ _v$16 = props.file.path;
513
+ _v$15 !== _p$.e && _$setAttribute(_el$39, "src", _p$.e = _v$15);
514
+ _v$16 !== _p$.t && _$setAttribute(_el$39, "alt", _p$.t = _v$16);
515
+ return _p$;
516
+ }, {
517
+ e: undefined,
518
+ t: undefined
519
+ });
520
+ return _el$38;
521
+ }
522
+ });
523
+ }
524
+ function PdfRenderer(props) {
525
+ const messages = useUiMessages();
526
+ const href = () => props.previewHref ?? props.downloadHref;
527
+ return _$createComponent(Show, {
528
+ get when() {
529
+ return href();
530
+ },
531
+ get fallback() {
532
+ return _$createComponent(Placeholder, {
533
+ icon: "ti ti-file-type-pdf",
534
+ title: "PDF",
535
+ get description() {
536
+ return messages().noInlinePreview;
537
+ }
538
+ });
539
+ },
540
+ children: href => (() => {
541
+ var _el$40 = _$getNextElement(_tmpl$14);
542
+ _$effect(_p$ => {
543
+ var _v$17 = href(),
544
+ _v$18 = props.file.path;
545
+ _v$17 !== _p$.e && _$setAttribute(_el$40, "data", _p$.e = _v$17);
546
+ _v$18 !== _p$.t && _$setAttribute(_el$40, "aria-label", _p$.t = _v$18);
547
+ return _p$;
548
+ }, {
549
+ e: undefined,
550
+ t: undefined
551
+ });
552
+ return _el$40;
553
+ })()
554
+ });
555
+ }
556
+ function AudioRenderer(props) {
557
+ const messages = useUiMessages();
558
+ return _$createComponent(OverlayPanel, {
559
+ get actions() {
560
+ return _$createComponent(DownloadAction, props);
561
+ },
562
+ get children() {
563
+ var _el$41 = _$getNextElement(_tmpl$15),
564
+ _el$42 = _el$41.firstChild;
565
+ _$insert(_el$42, () => messages().audioUnsupported);
566
+ _$effect(_p$ => {
567
+ var _v$19 = mediaSource(props),
568
+ _v$20 = props.file.path;
569
+ _v$19 !== _p$.e && _$setAttribute(_el$42, "src", _p$.e = _v$19);
570
+ _v$20 !== _p$.t && _$setAttribute(_el$42, "aria-label", _p$.t = _v$20);
571
+ return _p$;
572
+ }, {
573
+ e: undefined,
574
+ t: undefined
575
+ });
576
+ return _el$41;
577
+ }
578
+ });
579
+ }
580
+ function VideoRenderer(props) {
581
+ const messages = useUiMessages();
582
+ return _$createComponent(OverlayPanel, {
583
+ get actions() {
584
+ return _$createComponent(DownloadAction, props);
585
+ },
586
+ get children() {
587
+ var _el$43 = _$getNextElement(_tmpl$16),
588
+ _el$44 = _el$43.firstChild;
589
+ _$insert(_el$44, () => messages().videoUnsupported);
590
+ _$effect(_p$ => {
591
+ var _v$21 = mediaSource(props),
592
+ _v$22 = props.file.path;
593
+ _v$21 !== _p$.e && _$setAttribute(_el$44, "src", _p$.e = _v$21);
594
+ _v$22 !== _p$.t && _$setAttribute(_el$44, "aria-label", _p$.t = _v$22);
595
+ return _p$;
596
+ }, {
597
+ e: undefined,
598
+ t: undefined
599
+ });
600
+ return _el$43;
601
+ }
602
+ });
603
+ }
604
+ function BinaryRenderer(props) {
605
+ const messages = useUiMessages();
606
+ return _$createComponent(Placeholder, {
607
+ icon: "ti ti-file-unknown",
608
+ get title() {
609
+ return messages().noPreview;
610
+ },
611
+ get description() {
612
+ return props.content.mediaType || messages().binaryFile;
613
+ },
614
+ get action() {
615
+ return _$createComponent(Show, {
616
+ get when() {
617
+ return props.downloadHref;
618
+ },
619
+ children: href => (() => {
620
+ var _el$45 = _$getNextElement(_tmpl$17),
621
+ _el$46 = _el$45.firstChild,
622
+ _el$47 = _el$46.nextSibling,
623
+ [_el$48, _co$5] = _$getNextMarker(_el$47.nextSibling);
624
+ _$insert(_el$45, () => messages().download, _el$48, _co$5);
625
+ _$effect(() => _$setAttribute(_el$45, "href", href()));
626
+ return _el$45;
627
+ })()
628
+ });
629
+ }
630
+ });
631
+ }
632
+ const BUILTIN_RENDERERS = [{
633
+ id: "markdown",
634
+ match: isMarkdown,
635
+ component: MarkdownRenderer,
636
+ editable: true
637
+ }, {
638
+ id: "image",
639
+ match: (file, content) => getFileViewPreviewKind({
640
+ ...file,
641
+ mediaType: content.mediaType || file.mediaType
642
+ }) === "image",
643
+ component: ImageRenderer
644
+ }, {
645
+ id: "pdf",
646
+ match: (file, content) => getFileViewPreviewKind({
647
+ ...file,
648
+ mediaType: content.mediaType || file.mediaType
649
+ }) === "pdf",
650
+ component: PdfRenderer
651
+ }, {
652
+ id: "json",
653
+ match: (file, content) => content.encoding === "utf8" && getFileViewPreviewKind({
654
+ ...file,
655
+ mediaType: content.mediaType || file.mediaType
656
+ }) === "json",
657
+ component: JsonRenderer
658
+ }, {
659
+ id: "delimited-text",
660
+ match: (file, content) => content.encoding === "utf8" && getFileViewPreviewKind({
661
+ ...file,
662
+ mediaType: content.mediaType || file.mediaType
663
+ }) === "delimited-text",
664
+ component: DelimitedTextRenderer
665
+ }, {
666
+ id: "audio",
667
+ match: (file, content) => getFileViewPreviewKind({
668
+ ...file,
669
+ mediaType: content.mediaType || file.mediaType
670
+ }) === "audio",
671
+ component: AudioRenderer
672
+ }, {
673
+ id: "video",
674
+ match: (file, content) => getFileViewPreviewKind({
675
+ ...file,
676
+ mediaType: content.mediaType || file.mediaType
677
+ }) === "video",
678
+ component: VideoRenderer
679
+ }, {
680
+ id: "text",
681
+ match: (_file, content) => content.encoding === "utf8",
682
+ component: TextRenderer,
683
+ editable: true
684
+ }, {
685
+ id: "binary",
686
+ match: () => true,
687
+ component: BinaryRenderer
688
+ }];
689
+
690
+ // ── Component ───────────────────────────────────────────────────────────────
691
+
692
+ export const formatFileViewSize = bytes => {
693
+ if (bytes < 1024) return `${bytes} B`;
694
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
695
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
696
+ };
697
+ export default function FileView(props) {
698
+ const messages = useUiMessages();
699
+ const [draft, setDraft] = createSignal("");
700
+ const [savedDraft, setSavedDraft] = createSignal("");
701
+ const [nativeRevision, setNativeRevision] = createSignal(0);
702
+ const dirty = createMemo(() => draft() !== savedDraft());
703
+ const instanceRenderers = () => props.renderers ?? [];
704
+ const saveMutation = mutation.create({
705
+ mutation: async input => {
706
+ await props.save(input.content);
707
+ return input;
708
+ },
709
+ onSuccess: saved => {
710
+ if (props.file.path === saved.path) setSavedDraft(saved.content);
711
+ toast.success(messages().fileSaved);
712
+ },
713
+ onError: error => toast.error(error.message)
714
+ });
715
+ const nativePreviewHref = createMemo(() => {
716
+ const kind = getFileViewPreviewKind(props.file);
717
+ const href = props.previewHref ?? (kind === "pdf" ? props.downloadHref : null);
718
+ if (!href) return null;
719
+ const separator = href.includes("?") ? "&" : "?";
720
+ return `${href}${separator}preview-revision=${nativeRevision()}`;
721
+ });
722
+ const browserPreviewContent = createMemo(() => {
723
+ const kind = getFileViewPreviewKind(props.file);
724
+ if (kind !== "image" && kind !== "pdf" && kind !== "audio" && kind !== "video") return null;
725
+ const href = nativePreviewHref();
726
+ if (!href) return null;
727
+ const candidate = {
728
+ encoding: "base64",
729
+ content: "",
730
+ mediaType: props.file.mediaType ?? "application/octet-stream"
731
+ };
732
+ return instanceRenderers().some(renderer => renderer.match(props.file, candidate)) ? null : candidate;
733
+ });
734
+ const [content, {
735
+ refetch
736
+ }] = createResource(() => browserPreviewContent() ? null : {
737
+ path: props.file.path,
738
+ revision: props.revision
739
+ }, async () => {
740
+ saveMutation.abort();
741
+ // `load` is an imperative source adapter. Host signal reads inside it
742
+ // must not turn this resource into a hidden reactive feedback loop.
743
+ const loaded = await untrack(() => props.load());
744
+ const loadedDraft = loaded.encoding === "utf8" ? loaded.content : "";
745
+ setDraft(loadedDraft);
746
+ setSavedDraft(loadedDraft);
747
+ return loaded;
748
+ });
749
+ createEffect(() => {
750
+ if (!props.registerRefresh) return;
751
+ const unregister = props.registerRefresh(async () => {
752
+ if (browserPreviewContent()) setNativeRevision(value => value + 1);else await refetch();
753
+ });
754
+ if (unregister) onCleanup(unregister);
755
+ });
756
+ const resolvedContent = createMemo(() => browserPreviewContent() ?? content());
757
+ const renderer = createMemo(() => {
758
+ const loaded = resolvedContent();
759
+ if (!loaded) return null;
760
+ return [...instanceRenderers(), ...BUILTIN_RENDERERS].find(candidate => candidate.match(props.file, loaded)) ?? null;
761
+ });
762
+ createEffect(() => {
763
+ props.onDirtyChange?.(dirty());
764
+ });
765
+ const save = async () => {
766
+ if (!props.save || saveMutation.loading()) return;
767
+ await saveMutation.mutate({
768
+ path: props.file.path,
769
+ content: draft()
770
+ });
771
+ };
772
+ const editor = () => props.save && renderer()?.editable && resolvedContent()?.encoding === "utf8" ? {
773
+ draft,
774
+ setDraft,
775
+ dirty,
776
+ saving: saveMutation.loading,
777
+ save
778
+ } : null;
779
+ return (() => {
780
+ var _el$49 = _$getNextElement(_tmpl$18);
781
+ _$insert(_el$49, _$createComponent(Switch, {
782
+ get children() {
783
+ return [_$createComponent(Match, {
784
+ get when() {
785
+ return _$memo(() => !!content.loading)() && content() === undefined;
786
+ },
787
+ get children() {
788
+ return _$createComponent(Placeholder, {
789
+ icon: "ti ti-loader-2",
790
+ get title() {
791
+ return messages().loading;
792
+ }
793
+ });
794
+ }
795
+ }), _$createComponent(Match, {
796
+ get when() {
797
+ return content.error;
798
+ },
799
+ get children() {
800
+ return _$createComponent(Placeholder, {
801
+ icon: "ti ti-alert-circle",
802
+ get title() {
803
+ return messages().failedLoadFile;
804
+ },
805
+ get description() {
806
+ return String(content.error?.message ?? "");
807
+ }
808
+ });
809
+ }
810
+ }), _$createComponent(Match, {
811
+ get when() {
812
+ return _$memo(() => !!resolvedContent())() && renderer();
813
+ },
814
+ children: active => {
815
+ const Renderer = active().component;
816
+ return _$createComponent(Renderer, {
817
+ get file() {
818
+ return props.file;
819
+ },
820
+ get content() {
821
+ return resolvedContent();
822
+ },
823
+ get previewHref() {
824
+ return nativePreviewHref();
825
+ },
826
+ get downloadHref() {
827
+ return props.downloadHref ?? null;
828
+ },
829
+ get editor() {
830
+ return editor();
831
+ }
832
+ });
833
+ }
834
+ })];
835
+ }
836
+ }));
837
+ _$effect(() => _$className(_el$49, `k2b-content-file-view ${props.class ?? ""}`));
838
+ return _el$49;
839
+ })();
840
+ }
841
+ _$delegateEvents(["click", "mousedown", "keydown", "input"]);
842
+ //# sourceMappingURL=FileView.js.map