@k2b/ui 0.2.0 → 0.4.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 (378) hide show
  1. package/dist/browser/actions/Button.js +11 -2
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/Disclosure.js +11 -8
  4. package/dist/browser/actions/Disclosure.js.map +1 -1
  5. package/dist/browser/actions/Dropdown.js +4 -1
  6. package/dist/browser/actions/Dropdown.js.map +1 -1
  7. package/dist/browser/actions/FilterChip.js +16 -2
  8. package/dist/browser/actions/FilterChip.js.map +1 -1
  9. package/dist/browser/actions/SplitButton.js +69 -22
  10. package/dist/browser/actions/SplitButton.js.map +1 -1
  11. package/dist/browser/actions/SpotlightSearch.js +3 -7
  12. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  13. package/dist/browser/actions/Tabs.js +132 -47
  14. package/dist/browser/actions/Tabs.js.map +1 -1
  15. package/dist/browser/actions/index.js +2 -2
  16. package/dist/browser/actions/index.js.map +1 -1
  17. package/dist/browser/chat/ChatComposer.js +751 -423
  18. package/dist/browser/chat/ChatComposer.js.map +1 -1
  19. package/dist/browser/chat/ChatContextPopup.js +123 -0
  20. package/dist/browser/chat/ChatContextPopup.js.map +1 -0
  21. package/dist/browser/chat/ChatPrimitives.js +141 -78
  22. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  23. package/dist/browser/chat/ChatTasks.js +112 -0
  24. package/dist/browser/chat/ChatTasks.js.map +1 -0
  25. package/dist/browser/chat/ChatTimeline.js +31 -14
  26. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  27. package/dist/browser/chat/chat-behavior.js +0 -5
  28. package/dist/browser/chat/chat-behavior.js.map +1 -1
  29. package/dist/browser/chat/composer-document.js +55 -0
  30. package/dist/browser/chat/composer-document.js.map +1 -0
  31. package/dist/browser/chat/index.js +6 -1
  32. package/dist/browser/chat/index.js.map +1 -1
  33. package/dist/browser/chat/types.js.map +1 -1
  34. package/dist/browser/content/Chart.js +148 -239
  35. package/dist/browser/content/Chart.js.map +1 -1
  36. package/dist/browser/content/ChartExplorer.js +324 -0
  37. package/dist/browser/content/ChartExplorer.js.map +1 -0
  38. package/dist/browser/content/ChartExplorerControls.js +153 -0
  39. package/dist/browser/content/ChartExplorerControls.js.map +1 -0
  40. package/dist/browser/content/ChartFilterControls.js +200 -0
  41. package/dist/browser/content/ChartFilterControls.js.map +1 -0
  42. package/dist/browser/content/ChartSnapshotView.js +114 -0
  43. package/dist/browser/content/ChartSnapshotView.js.map +1 -0
  44. package/dist/browser/content/DataTable.js +48 -32
  45. package/dist/browser/content/DataTable.js.map +1 -1
  46. package/dist/browser/content/FileBrowser.js +3 -0
  47. package/dist/browser/content/FileBrowser.js.map +1 -1
  48. package/dist/browser/content/FileGrid.js +93 -0
  49. package/dist/browser/content/FileGrid.js.map +1 -0
  50. package/dist/browser/content/FileTree.js +2 -2
  51. package/dist/browser/content/FileTree.js.map +1 -1
  52. package/dist/browser/content/FileView.js +511 -162
  53. package/dist/browser/content/FileView.js.map +1 -1
  54. package/dist/browser/content/MarkdownView.js +6 -0
  55. package/dist/browser/content/MarkdownView.js.map +1 -1
  56. package/dist/browser/content/Pagination.js.map +1 -1
  57. package/dist/browser/content/PdfPreview.js +107 -90
  58. package/dist/browser/content/PdfPreview.js.map +1 -1
  59. package/dist/browser/content/chart-cursor.js +33 -0
  60. package/dist/browser/content/chart-cursor.js.map +1 -0
  61. package/dist/browser/content/chart-explorer.js +147 -0
  62. package/dist/browser/content/chart-explorer.js.map +1 -0
  63. package/dist/browser/content/chart-inspection.js +447 -0
  64. package/dist/browser/content/chart-inspection.js.map +1 -0
  65. package/dist/browser/content/chart-line-gaps.js +53 -0
  66. package/dist/browser/content/chart-line-gaps.js.map +1 -0
  67. package/dist/browser/content/chart-map-viewport.js +5 -1
  68. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  69. package/dist/browser/content/chart-snapshot.js +63 -0
  70. package/dist/browser/content/chart-snapshot.js.map +1 -0
  71. package/dist/browser/content/chart-state-timeline.js +32 -4
  72. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  73. package/dist/browser/content/chart-svg.js +54 -0
  74. package/dist/browser/content/chart-svg.js.map +1 -0
  75. package/dist/browser/content/collection-selection.js +109 -0
  76. package/dist/browser/content/collection-selection.js.map +1 -0
  77. package/dist/browser/content/delimited-preferences.js +21 -0
  78. package/dist/browser/content/delimited-preferences.js.map +1 -0
  79. package/dist/browser/content/file-tree.js.map +1 -1
  80. package/dist/browser/content/file-view-preview.js +11 -7
  81. package/dist/browser/content/file-view-preview.js.map +1 -1
  82. package/dist/browser/content/index.js +9 -0
  83. package/dist/browser/content/index.js.map +1 -1
  84. package/dist/browser/feedback/InlineGuidance.js +17 -3
  85. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  86. package/dist/browser/feedback/dialog-core.js +81 -7
  87. package/dist/browser/feedback/dialog-core.js.map +1 -1
  88. package/dist/browser/feedback/prompts.js +6 -0
  89. package/dist/browser/feedback/prompts.js.map +1 -1
  90. package/dist/browser/feedback/toast.js +29 -6
  91. package/dist/browser/feedback/toast.js.map +1 -1
  92. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  93. package/dist/browser/inputs/Select.js.map +1 -1
  94. package/dist/browser/inputs/SelectChip.js +3 -2
  95. package/dist/browser/inputs/SelectChip.js.map +1 -1
  96. package/dist/browser/inputs/TextInput.js +7 -1
  97. package/dist/browser/inputs/TextInput.js.map +1 -1
  98. package/dist/browser/inputs/markdown/MarkdownEditor.js +61 -37
  99. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  100. package/dist/browser/inputs/markdown/behaviors.js +1 -1
  101. package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
  102. package/dist/browser/intl/Format.js +89 -16
  103. package/dist/browser/intl/Format.js.map +1 -1
  104. package/dist/browser/intl/index.js.map +1 -1
  105. package/dist/browser/intl/messages.js +130 -2
  106. package/dist/browser/intl/messages.js.map +1 -1
  107. package/dist/browser/layout/AppWorkspace.js +712 -624
  108. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  109. package/dist/browser/layout/BottomSheet.js +95 -0
  110. package/dist/browser/layout/BottomSheet.js.map +1 -0
  111. package/dist/browser/layout/DetailPanel.js +56 -44
  112. package/dist/browser/layout/DetailPanel.js.map +1 -1
  113. package/dist/browser/layout/Navigation.js +278 -0
  114. package/dist/browser/layout/Navigation.js.map +1 -0
  115. package/dist/browser/layout/PanelDialog.js +219 -71
  116. package/dist/browser/layout/PanelDialog.js.map +1 -1
  117. package/dist/browser/layout/ScrollArea.js +21 -1
  118. package/dist/browser/layout/ScrollArea.js.map +1 -1
  119. package/dist/browser/layout/Settings.js.map +1 -1
  120. package/dist/browser/layout/SidebarItemPreview.js +183 -0
  121. package/dist/browser/layout/SidebarItemPreview.js.map +1 -0
  122. package/dist/browser/layout/app-workspace-controller.js +3 -0
  123. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  124. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  125. package/dist/browser/layout/index.js +3 -0
  126. package/dist/browser/layout/index.js.map +1 -1
  127. package/dist/browser/layout/navigation-model.js +23 -0
  128. package/dist/browser/layout/navigation-model.js.map +1 -0
  129. package/dist/browser/layout/scroll-fade.js +100 -0
  130. package/dist/browser/layout/scroll-fade.js.map +1 -0
  131. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  132. package/dist/browser/surfaces/StatusBadge.js +2 -1
  133. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  134. package/dist/fonts/ibm-plex-mono-cyrillic-400-italic-4aded3f2f2a7d27d.woff2 +0 -0
  135. package/dist/fonts/ibm-plex-mono-cyrillic-400-normal-7635422bd10ddbbc.woff2 +0 -0
  136. package/dist/fonts/ibm-plex-mono-cyrillic-500-normal-1d89462e86cb8e87.woff2 +0 -0
  137. package/dist/fonts/ibm-plex-mono-cyrillic-600-normal-2b05a8695c7f9f4a.woff2 +0 -0
  138. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-italic-a0b3b8cbe5a516e7.woff2 +0 -0
  139. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-normal-f8c22ec1804bd696.woff2 +0 -0
  140. package/dist/fonts/ibm-plex-mono-cyrillic-ext-500-normal-3febe5c7f22e4b07.woff2 +0 -0
  141. package/dist/fonts/ibm-plex-mono-cyrillic-ext-600-normal-83109cdd4f8665b4.woff2 +0 -0
  142. package/dist/fonts/ibm-plex-mono-latin-400-italic-0840095faae86403.woff2 +0 -0
  143. package/dist/fonts/ibm-plex-mono-latin-400-normal-08949f728dc52d52.woff2 +0 -0
  144. package/dist/fonts/ibm-plex-mono-latin-500-normal-01d285447409c8a5.woff2 +0 -0
  145. package/dist/fonts/ibm-plex-mono-latin-600-normal-0d1f0b8d0722224e.woff2 +0 -0
  146. package/dist/fonts/ibm-plex-mono-latin-ext-400-italic-1b07eee6df7d26b3.woff2 +0 -0
  147. package/dist/fonts/ibm-plex-mono-latin-ext-400-normal-6bc0f226a5b7884a.woff2 +0 -0
  148. package/dist/fonts/ibm-plex-mono-latin-ext-500-normal-6bb06407c97584b0.woff2 +0 -0
  149. package/dist/fonts/ibm-plex-mono-latin-ext-600-normal-32057cf50dd14bdb.woff2 +0 -0
  150. package/dist/fonts/ibm-plex-mono-vietnamese-400-italic-a6bab38af4f9c761.woff2 +0 -0
  151. package/dist/fonts/ibm-plex-mono-vietnamese-400-normal-62632b6375305e70.woff2 +0 -0
  152. package/dist/fonts/ibm-plex-mono-vietnamese-500-normal-781633d95de88040.woff2 +0 -0
  153. package/dist/fonts/ibm-plex-mono-vietnamese-600-normal-51b74d53e106ba8a.woff2 +0 -0
  154. package/dist/fonts/ibm-plex-sans-cyrillic-400-italic-e8731a7e2b00fc4f.woff2 +0 -0
  155. package/dist/fonts/ibm-plex-sans-cyrillic-400-normal-69afad88a0740b6e.woff2 +0 -0
  156. package/dist/fonts/ibm-plex-sans-cyrillic-500-normal-200be3a2a6b1789f.woff2 +0 -0
  157. package/dist/fonts/ibm-plex-sans-cyrillic-600-normal-730becc6f005c18c.woff2 +0 -0
  158. package/dist/fonts/ibm-plex-sans-cyrillic-700-normal-40540598b4c9eb2c.woff2 +0 -0
  159. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-italic-4ffb25726a7ce4cc.woff2 +0 -0
  160. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-normal-e2580ad78906551e.woff2 +0 -0
  161. package/dist/fonts/ibm-plex-sans-cyrillic-ext-500-normal-08578d906af6d986.woff2 +0 -0
  162. package/dist/fonts/ibm-plex-sans-cyrillic-ext-600-normal-d60d3d0b182753d5.woff2 +0 -0
  163. package/dist/fonts/ibm-plex-sans-cyrillic-ext-700-normal-d07dd53642480097.woff2 +0 -0
  164. package/dist/fonts/ibm-plex-sans-greek-400-italic-1bc10b01688ba9fa.woff2 +0 -0
  165. package/dist/fonts/ibm-plex-sans-greek-400-normal-02296067bc904d2a.woff2 +0 -0
  166. package/dist/fonts/ibm-plex-sans-greek-500-normal-8cb6e20b4dbbaa5f.woff2 +0 -0
  167. package/dist/fonts/ibm-plex-sans-greek-600-normal-0a9ebd9019415ee9.woff2 +0 -0
  168. package/dist/fonts/ibm-plex-sans-greek-700-normal-c949641d10a3bebc.woff2 +0 -0
  169. package/dist/fonts/ibm-plex-sans-latin-400-italic-6de912e531b6c980.woff2 +0 -0
  170. package/dist/fonts/ibm-plex-sans-latin-400-normal-3b646991d30055a9.woff2 +0 -0
  171. package/dist/fonts/ibm-plex-sans-latin-500-normal-0717336fb31fcdcd.woff2 +0 -0
  172. package/dist/fonts/ibm-plex-sans-latin-600-normal-8960851d691c054e.woff2 +0 -0
  173. package/dist/fonts/ibm-plex-sans-latin-700-normal-42e7b0c143c19df9.woff2 +0 -0
  174. package/dist/fonts/ibm-plex-sans-latin-ext-400-italic-c5c00e8a32022dfe.woff2 +0 -0
  175. package/dist/fonts/ibm-plex-sans-latin-ext-400-normal-c93d2a12aaa280f6.woff2 +0 -0
  176. package/dist/fonts/ibm-plex-sans-latin-ext-500-normal-2846035d85100f84.woff2 +0 -0
  177. package/dist/fonts/ibm-plex-sans-latin-ext-600-normal-b25dfd4f979e442a.woff2 +0 -0
  178. package/dist/fonts/ibm-plex-sans-latin-ext-700-normal-92f0392bd74fa395.woff2 +0 -0
  179. package/dist/fonts/ibm-plex-sans-vietnamese-400-italic-675d4bace127bffb.woff2 +0 -0
  180. package/dist/fonts/ibm-plex-sans-vietnamese-400-normal-771538f7f26551bd.woff2 +0 -0
  181. package/dist/fonts/ibm-plex-sans-vietnamese-500-normal-85ba3d9c2488a813.woff2 +0 -0
  182. package/dist/fonts/ibm-plex-sans-vietnamese-600-normal-5d34b803637befe3.woff2 +0 -0
  183. package/dist/fonts/ibm-plex-sans-vietnamese-700-normal-b79d0c4b68b85007.woff2 +0 -0
  184. package/dist/plex.css +1 -1
  185. package/dist/ssr/actions/Button.js +11 -2
  186. package/dist/ssr/actions/Button.js.map +1 -1
  187. package/dist/ssr/actions/Disclosure.js +2 -2
  188. package/dist/ssr/actions/Disclosure.js.map +1 -1
  189. package/dist/ssr/actions/Dropdown.js +4 -1
  190. package/dist/ssr/actions/Dropdown.js.map +1 -1
  191. package/dist/ssr/actions/FilterChip.js +16 -2
  192. package/dist/ssr/actions/FilterChip.js.map +1 -1
  193. package/dist/ssr/actions/SplitButton.js +69 -22
  194. package/dist/ssr/actions/SplitButton.js.map +1 -1
  195. package/dist/ssr/actions/SpotlightSearch.js +3 -7
  196. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  197. package/dist/ssr/actions/Tabs.js +58 -11
  198. package/dist/ssr/actions/Tabs.js.map +1 -1
  199. package/dist/ssr/actions/index.js +2 -2
  200. package/dist/ssr/actions/index.js.map +1 -1
  201. package/dist/ssr/chat/ChatComposer.js +366 -134
  202. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  203. package/dist/ssr/chat/ChatContextPopup.js +86 -0
  204. package/dist/ssr/chat/ChatContextPopup.js.map +1 -0
  205. package/dist/ssr/chat/ChatPrimitives.js +49 -11
  206. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  207. package/dist/ssr/chat/ChatTasks.js +48 -0
  208. package/dist/ssr/chat/ChatTasks.js.map +1 -0
  209. package/dist/ssr/chat/ChatTimeline.js +14 -4
  210. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  211. package/dist/ssr/chat/chat-behavior.js +0 -5
  212. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  213. package/dist/ssr/chat/composer-document.js +55 -0
  214. package/dist/ssr/chat/composer-document.js.map +1 -0
  215. package/dist/ssr/chat/index.js +6 -1
  216. package/dist/ssr/chat/index.js.map +1 -1
  217. package/dist/ssr/chat/types.js.map +1 -1
  218. package/dist/ssr/content/Chart.js +121 -219
  219. package/dist/ssr/content/Chart.js.map +1 -1
  220. package/dist/ssr/content/ChartExplorer.js +257 -0
  221. package/dist/ssr/content/ChartExplorer.js.map +1 -0
  222. package/dist/ssr/content/ChartExplorerControls.js +105 -0
  223. package/dist/ssr/content/ChartExplorerControls.js.map +1 -0
  224. package/dist/ssr/content/ChartFilterControls.js +139 -0
  225. package/dist/ssr/content/ChartFilterControls.js.map +1 -0
  226. package/dist/ssr/content/ChartSnapshotView.js +58 -0
  227. package/dist/ssr/content/ChartSnapshotView.js.map +1 -0
  228. package/dist/ssr/content/DataTable.js +13 -9
  229. package/dist/ssr/content/DataTable.js.map +1 -1
  230. package/dist/ssr/content/FileBrowser.js +3 -0
  231. package/dist/ssr/content/FileBrowser.js.map +1 -1
  232. package/dist/ssr/content/FileGrid.js +38 -0
  233. package/dist/ssr/content/FileGrid.js.map +1 -0
  234. package/dist/ssr/content/FileTree.js +2 -2
  235. package/dist/ssr/content/FileTree.js.map +1 -1
  236. package/dist/ssr/content/FileView.js +356 -75
  237. package/dist/ssr/content/FileView.js.map +1 -1
  238. package/dist/ssr/content/MarkdownView.js +6 -0
  239. package/dist/ssr/content/MarkdownView.js.map +1 -1
  240. package/dist/ssr/content/Pagination.js.map +1 -1
  241. package/dist/ssr/content/PdfPreview.js +37 -24
  242. package/dist/ssr/content/PdfPreview.js.map +1 -1
  243. package/dist/ssr/content/chart-cursor.js +33 -0
  244. package/dist/ssr/content/chart-cursor.js.map +1 -0
  245. package/dist/ssr/content/chart-explorer.js +147 -0
  246. package/dist/ssr/content/chart-explorer.js.map +1 -0
  247. package/dist/ssr/content/chart-inspection.js +447 -0
  248. package/dist/ssr/content/chart-inspection.js.map +1 -0
  249. package/dist/ssr/content/chart-line-gaps.js +53 -0
  250. package/dist/ssr/content/chart-line-gaps.js.map +1 -0
  251. package/dist/ssr/content/chart-map-viewport.js +5 -1
  252. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  253. package/dist/ssr/content/chart-snapshot.js +63 -0
  254. package/dist/ssr/content/chart-snapshot.js.map +1 -0
  255. package/dist/ssr/content/chart-state-timeline.js +32 -4
  256. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  257. package/dist/ssr/content/chart-svg.js +54 -0
  258. package/dist/ssr/content/chart-svg.js.map +1 -0
  259. package/dist/ssr/content/collection-selection.js +109 -0
  260. package/dist/ssr/content/collection-selection.js.map +1 -0
  261. package/dist/ssr/content/delimited-preferences.js +21 -0
  262. package/dist/ssr/content/delimited-preferences.js.map +1 -0
  263. package/dist/ssr/content/file-tree.js.map +1 -1
  264. package/dist/ssr/content/file-view-preview.js +11 -7
  265. package/dist/ssr/content/file-view-preview.js.map +1 -1
  266. package/dist/ssr/content/index.js +9 -0
  267. package/dist/ssr/content/index.js.map +1 -1
  268. package/dist/ssr/feedback/InlineGuidance.js +17 -3
  269. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  270. package/dist/ssr/feedback/dialog-core.js +81 -7
  271. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  272. package/dist/ssr/feedback/prompts.js +6 -0
  273. package/dist/ssr/feedback/prompts.js.map +1 -1
  274. package/dist/ssr/feedback/toast.js +29 -6
  275. package/dist/ssr/feedback/toast.js.map +1 -1
  276. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  277. package/dist/ssr/inputs/Select.js.map +1 -1
  278. package/dist/ssr/inputs/SelectChip.js +3 -3
  279. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  280. package/dist/ssr/inputs/TextInput.js.map +1 -1
  281. package/dist/ssr/inputs/markdown/MarkdownEditor.js +19 -11
  282. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  283. package/dist/ssr/inputs/markdown/behaviors.js +1 -1
  284. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  285. package/dist/ssr/intl/Format.js +61 -0
  286. package/dist/ssr/intl/Format.js.map +1 -1
  287. package/dist/ssr/intl/index.js.map +1 -1
  288. package/dist/ssr/intl/messages.js +130 -2
  289. package/dist/ssr/intl/messages.js.map +1 -1
  290. package/dist/ssr/layout/AppWorkspace.js +368 -275
  291. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  292. package/dist/ssr/layout/BottomSheet.js +43 -0
  293. package/dist/ssr/layout/BottomSheet.js.map +1 -0
  294. package/dist/ssr/layout/DetailPanel.js +11 -4
  295. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  296. package/dist/ssr/layout/Navigation.js +181 -0
  297. package/dist/ssr/layout/Navigation.js.map +1 -0
  298. package/dist/ssr/layout/PanelDialog.js +111 -26
  299. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  300. package/dist/ssr/layout/ScrollArea.js +16 -1
  301. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  302. package/dist/ssr/layout/Settings.js.map +1 -1
  303. package/dist/ssr/layout/SidebarItemPreview.js +133 -0
  304. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -0
  305. package/dist/ssr/layout/app-workspace-controller.js +3 -0
  306. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  307. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  308. package/dist/ssr/layout/index.js +3 -0
  309. package/dist/ssr/layout/index.js.map +1 -1
  310. package/dist/ssr/layout/navigation-model.js +23 -0
  311. package/dist/ssr/layout/navigation-model.js.map +1 -0
  312. package/dist/ssr/layout/scroll-fade.js +100 -0
  313. package/dist/ssr/layout/scroll-fade.js.map +1 -0
  314. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  315. package/dist/ssr/surfaces/StatusBadge.js +2 -1
  316. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  317. package/dist/styles.css +1 -1
  318. package/dist/tabler.css +1 -1
  319. package/dist/types/actions/Button.d.ts +4 -0
  320. package/dist/types/actions/Disclosure.d.ts +1 -0
  321. package/dist/types/actions/FilterChip.d.ts +4 -0
  322. package/dist/types/actions/SplitButton.d.ts +6 -0
  323. package/dist/types/actions/SpotlightSearch.d.ts +0 -4
  324. package/dist/types/actions/Tabs.d.ts +4 -0
  325. package/dist/types/actions/index.d.ts +4 -4
  326. package/dist/types/chat/ChatComposer.d.ts +20 -2
  327. package/dist/types/chat/ChatContextPopup.d.ts +6 -0
  328. package/dist/types/chat/ChatPrimitives.d.ts +4 -0
  329. package/dist/types/chat/ChatTasks.d.ts +15 -0
  330. package/dist/types/chat/ChatTimeline.d.ts +2 -0
  331. package/dist/types/chat/chat-behavior.d.ts +0 -3
  332. package/dist/types/chat/composer-document.d.ts +14 -0
  333. package/dist/types/chat/index.d.ts +8 -1
  334. package/dist/types/chat/types.d.ts +7 -0
  335. package/dist/types/content/Chart.d.ts +42 -23
  336. package/dist/types/content/ChartExplorer.d.ts +34 -0
  337. package/dist/types/content/ChartExplorerControls.d.ts +10 -0
  338. package/dist/types/content/ChartFilterControls.d.ts +21 -0
  339. package/dist/types/content/ChartSnapshotView.d.ts +11 -0
  340. package/dist/types/content/DataTable.d.ts +4 -0
  341. package/dist/types/content/FileBrowser.d.ts +1 -0
  342. package/dist/types/content/FileGrid.d.ts +21 -0
  343. package/dist/types/content/FileView.d.ts +20 -0
  344. package/dist/types/content/PdfPreview.d.ts +8 -1
  345. package/dist/types/content/chart-cursor.d.ts +15 -0
  346. package/dist/types/content/chart-explorer.d.ts +48 -0
  347. package/dist/types/content/chart-inspection.d.ts +40 -0
  348. package/dist/types/content/chart-line-gaps.d.ts +5 -0
  349. package/dist/types/content/chart-map-viewport.d.ts +1 -1
  350. package/dist/types/content/chart-snapshot.d.ts +26 -0
  351. package/dist/types/content/chart-svg.d.ts +21 -0
  352. package/dist/types/content/collection-selection.d.ts +24 -0
  353. package/dist/types/content/delimited-preferences.d.ts +11 -0
  354. package/dist/types/content/file-tree.d.ts +2 -0
  355. package/dist/types/content/file-view-preview.d.ts +4 -1
  356. package/dist/types/content/index.d.ts +16 -2
  357. package/dist/types/feedback/InlineGuidance.d.ts +1 -0
  358. package/dist/types/feedback/dialog-core.d.ts +11 -0
  359. package/dist/types/feedback/prompts.d.ts +2 -0
  360. package/dist/types/feedback/toast.d.ts +7 -1
  361. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -1
  362. package/dist/types/intl/Format.d.ts +9 -0
  363. package/dist/types/intl/index.d.ts +1 -1
  364. package/dist/types/intl/messages.d.ts +31 -1
  365. package/dist/types/layout/AppWorkspace.d.ts +35 -18
  366. package/dist/types/layout/BottomSheet.d.ts +23 -0
  367. package/dist/types/layout/DetailPanel.d.ts +1 -0
  368. package/dist/types/layout/Navigation.d.ts +8 -0
  369. package/dist/types/layout/PanelDialog.d.ts +14 -1
  370. package/dist/types/layout/ScrollArea.d.ts +4 -0
  371. package/dist/types/layout/Settings.d.ts +1 -1
  372. package/dist/types/layout/SidebarItemPreview.d.ts +11 -0
  373. package/dist/types/layout/index.d.ts +4 -1
  374. package/dist/types/layout/navigation-model.d.ts +48 -0
  375. package/dist/types/layout/scroll-fade.d.ts +3 -0
  376. package/dist/types/surfaces/DescriptionList.d.ts +1 -1
  377. package/dist/types/surfaces/StatusBadge.d.ts +1 -1
  378. package/package.json +5 -7
@@ -16,21 +16,24 @@ var _tmpl$ = /*#__PURE__*/_$template(`<button type=button class=k2b-content-file
16
16
  _tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__overlay>`),
17
17
  _tmpl$4 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__panel><div class=k2b-content-file-view__preview></div><!$><!/>`),
18
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>`);
19
+ _tmpl$6 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__truncated>`),
20
+ _tmpl$7 = /*#__PURE__*/_$template(`<span>`),
21
+ _tmpl$8 = /*#__PURE__*/_$template(`<div>`),
22
+ _tmpl$9 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__document>`),
23
+ _tmpl$0 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__editor>`),
24
+ _tmpl$1 = /*#__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>`),
25
+ _tmpl$10 = /*#__PURE__*/_$template(`<a class=k2b-markdown-editor__tool><i class="ti ti-download">`),
26
+ _tmpl$11 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__settings><!$><!/><!$><!/><!$><!/>`),
27
+ _tmpl$12 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__sheet><table class=k2b-content-file-view__table><thead><tr></tr></thead><tbody></tbody></table><!$><!/><!$><!/>`),
28
+ _tmpl$13 = /*#__PURE__*/_$template(`<th scope=col><span>`),
29
+ _tmpl$14 = /*#__PURE__*/_$template(`<tr>`),
30
+ _tmpl$15 = /*#__PURE__*/_$template(`<td>`),
31
+ _tmpl$16 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__pagination><!$><!/><span><!$><!/>–<!$><!/> / <!$><!/></span><!$><!/>`),
32
+ _tmpl$17 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__media><img>`),
33
+ _tmpl$18 = /*#__PURE__*/_$template(`<object type=application/pdf class=k2b-content-file-view__pdf>`),
34
+ _tmpl$19 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__media data-kind=audio><audio controls preload=metadata>`),
35
+ _tmpl$20 = /*#__PURE__*/_$template(`<div class=k2b-content-file-view__media data-kind=video><video controls preload=metadata playsinline>`),
36
+ _tmpl$21 = /*#__PURE__*/_$template(`<a class=k2b-button data-variant=secondary data-size=sm download><i class="ti ti-download"aria-hidden=true></i><!$><!/>`);
34
37
  /**
35
38
  * FileView — renders one file through a small renderer registry keyed by
36
39
  * media type / path. Editing is enabled purely by the presence of `save`;
@@ -42,12 +45,16 @@ var _tmpl$ = /*#__PURE__*/_$template(`<button type=button class=k2b-content-file
42
45
  */
43
46
 
44
47
  import { mutation } from "@k2b/stdlib/solid";
45
- import { createEffect, createMemo, createResource, createSignal, For, Match, onCleanup, Show, Switch, untrack } from "solid-js";
48
+ import { createEffect, createMemo, createResource, createSignal, For, Match, onCleanup, onMount, Show, Switch, untrack } from "solid-js";
49
+ import { Button } from "../actions/Button";
50
+ import { prompts } from "../feedback/prompts";
46
51
  import { toast } from "../feedback/toast";
47
52
  import { MarkdownEditor } from "../inputs/markdown/MarkdownEditor";
53
+ import { Select } from "../inputs/Select";
48
54
  import { useUiMessages } from "../intl/messages";
49
55
  import Placeholder from "../surfaces/Placeholder";
50
56
  import CodeDisplay from "./CodeDisplay";
57
+ import { decodeDelimitedContent, readDelimitedPreferences } from "./delimited-preferences";
51
58
  import { fileViewExtension, getFileViewPreviewKind, parseDelimitedText } from "./file-view-preview";
52
59
  import MarkdownView from "./MarkdownView";
53
60
  import StructuredDataPreview from "./StructuredDataPreview";
@@ -202,6 +209,84 @@ function EditorToolButton(props) {
202
209
 
203
210
  // ── Built-in renderers ──────────────────────────────────────────────────────
204
211
 
212
+ function MoreLines(props) {
213
+ const messages = useUiMessages();
214
+ return _$createComponent(Show, {
215
+ get when() {
216
+ return props.count > 0;
217
+ },
218
+ get children() {
219
+ var _el$11 = _$getNextElement(_tmpl$6);
220
+ _$insert(_el$11, _$createComponent(Show, {
221
+ get when() {
222
+ return props.onClick;
223
+ },
224
+ get fallback() {
225
+ return (() => {
226
+ var _el$12 = _$getNextElement(_tmpl$7);
227
+ _$insert(_el$12, () => messages().previewMoreLines(props.count));
228
+ return _el$12;
229
+ })();
230
+ },
231
+ get children() {
232
+ return _$createComponent(Button, {
233
+ size: "sm",
234
+ variant: "ghost",
235
+ get onClick() {
236
+ return props.onClick;
237
+ },
238
+ get children() {
239
+ return messages().previewMoreLines(props.count);
240
+ }
241
+ });
242
+ }
243
+ }));
244
+ return _el$11;
245
+ }
246
+ });
247
+ }
248
+ function TextExcerpt(props) {
249
+ const lines = createMemo(() => props.text.replace(/\r\n?/g, "\n").replace(/\n$/, "").split("\n"));
250
+ const limit = () => props.renderer.previewLines === undefined ? lines().length : Math.max(1, props.renderer.previewLines);
251
+ const text = () => lines().slice(0, limit()).join("\n");
252
+ return [(() => {
253
+ var _el$13 = _$getNextElement(_tmpl$8);
254
+ _$insert(_el$13, _$createComponent(Show, {
255
+ get when() {
256
+ return props.markdown;
257
+ },
258
+ get fallback() {
259
+ return _$createComponent(CodeDisplay, {
260
+ get code() {
261
+ return text();
262
+ },
263
+ get language() {
264
+ return codeLanguage(props.renderer.file.path);
265
+ }
266
+ });
267
+ },
268
+ get children() {
269
+ return _$createComponent(MarkdownView, {
270
+ get markdown() {
271
+ return text();
272
+ },
273
+ get headingScale() {
274
+ return props.renderer.headingScale ?? "compact";
275
+ }
276
+ });
277
+ }
278
+ }));
279
+ _$effect(() => _el$13.classList.toggle("k2b-content-file-view__excerpt", !!(props.renderer.previewLines !== undefined)));
280
+ return _el$13;
281
+ })(), _$createComponent(MoreLines, {
282
+ get count() {
283
+ return lines().length - limit();
284
+ },
285
+ get onClick() {
286
+ return props.renderer.onExpandPreview;
287
+ }
288
+ })];
289
+ }
205
290
  function MarkdownRenderer(props) {
206
291
  const messages = useUiMessages();
207
292
  const [editing, setEditing] = createSignal(false);
@@ -228,22 +313,23 @@ function MarkdownRenderer(props) {
228
313
  }), _$createComponent(DownloadAction, props)];
229
314
  },
230
315
  get children() {
231
- var _el$11 = _$getNextElement(_tmpl$6);
232
- _$insert(_el$11, _$createComponent(MarkdownView, {
233
- get markdown() {
316
+ var _el$14 = _$getNextElement(_tmpl$9);
317
+ _$insert(_el$14, _$createComponent(TextExcerpt, {
318
+ renderer: props,
319
+ get text() {
234
320
  return stripFrontmatter(props.editor?.draft() ?? props.content.content);
235
321
  },
236
- headingScale: "compact"
322
+ markdown: true
237
323
  }));
238
- return _el$11;
324
+ return _el$14;
239
325
  }
240
326
  });
241
327
  },
242
328
  children: _ => {
243
329
  const editor = props.editor;
244
330
  return (() => {
245
- var _el$12 = _$getNextElement(_tmpl$7);
246
- _$insert(_el$12, _$createComponent(MarkdownEditor, {
331
+ var _el$15 = _$getNextElement(_tmpl$0);
332
+ _$insert(_el$15, _$createComponent(MarkdownEditor, {
247
333
  "class": "k2b-content-file-view__markdown-field",
248
334
  get ["aria-label"]() {
249
335
  return `Edit ${props.file.path.slice(props.file.path.lastIndexOf("/") + 1)}`;
@@ -273,7 +359,7 @@ function MarkdownRenderer(props) {
273
359
  });
274
360
  }
275
361
  }));
276
- return _el$12;
362
+ return _el$15;
277
363
  })();
278
364
  }
279
365
  });
@@ -290,12 +376,10 @@ function TextRenderer(props) {
290
376
  return _$createComponent(DownloadAction, props);
291
377
  },
292
378
  get children() {
293
- return _$createComponent(CodeDisplay, {
294
- get code() {
379
+ return _$createComponent(TextExcerpt, {
380
+ renderer: props,
381
+ get text() {
295
382
  return props.content.content;
296
- },
297
- get language() {
298
- return codeLanguage(props.file.path);
299
383
  }
300
384
  });
301
385
  }
@@ -304,39 +388,39 @@ function TextRenderer(props) {
304
388
  children: editor => // Same chrome as the markdown editor — literally the same classes, so
305
389
  // border, radius, focus ring, toolbar height and text metrics cannot drift.
306
390
  (() => {
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,
391
+ var _el$16 = _$getNextElement(_tmpl$1),
392
+ _el$17 = _el$16.firstChild,
312
393
  _el$18 = _el$17.firstChild,
313
- [_el$19, _co$2] = _$getNextMarker(_el$18.nextSibling),
394
+ _el$19 = _el$18.firstChild,
314
395
  _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 => {
396
+ _el$21 = _el$20.firstChild,
397
+ [_el$22, _co$2] = _$getNextMarker(_el$21.nextSibling),
398
+ _el$23 = _el$22.nextSibling,
399
+ [_el$24, _co$3] = _$getNextMarker(_el$23.nextSibling),
400
+ _el$25 = _el$18.nextSibling,
401
+ _el$26 = _el$25.firstChild;
402
+ _el$17.$$keydown = event => {
319
403
  if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "s") {
320
404
  event.preventDefault();
321
405
  if (editor().dirty() && !editor().saving()) void editor().save();
322
406
  }
323
407
  };
324
- _$insert(_el$16, () => codeLanguage(props.file.path));
325
- _$insert(_el$17, _$createComponent(Show, {
408
+ _$insert(_el$19, () => codeLanguage(props.file.path));
409
+ _$insert(_el$20, _$createComponent(Show, {
326
410
  get when() {
327
411
  return props.downloadHref;
328
412
  },
329
413
  children: href => (() => {
330
- var _el$24 = _$getNextElement(_tmpl$9);
414
+ var _el$27 = _$getNextElement(_tmpl$10);
331
415
  _$effect(_p$ => {
332
416
  var _v$11 = href(),
333
417
  _v$12 = props.file.path.slice(props.file.path.lastIndexOf("/") + 1),
334
418
  _v$13 = messages().download,
335
419
  _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);
420
+ _v$11 !== _p$.e && _$setAttribute(_el$27, "href", _p$.e = _v$11);
421
+ _v$12 !== _p$.t && _$setAttribute(_el$27, "download", _p$.t = _v$12);
422
+ _v$13 !== _p$.a && _$setAttribute(_el$27, "title", _p$.a = _v$13);
423
+ _v$14 !== _p$.o && _$setAttribute(_el$27, "aria-label", _p$.o = _v$14);
340
424
  return _p$;
341
425
  }, {
342
426
  e: undefined,
@@ -344,10 +428,10 @@ function TextRenderer(props) {
344
428
  a: undefined,
345
429
  o: undefined
346
430
  });
347
- return _el$24;
431
+ return _el$27;
348
432
  })()
349
- }), _el$19, _co$2);
350
- _$insert(_el$17, _$createComponent(EditorToolButton, {
433
+ }), _el$22, _co$2);
434
+ _$insert(_el$20, _$createComponent(EditorToolButton, {
351
435
  get icon() {
352
436
  return editor().saving() ? "ti ti-loader-2 k2b-spin" : "ti ti-device-floppy";
353
437
  },
@@ -358,13 +442,13 @@ function TextRenderer(props) {
358
442
  return !editor().dirty() || editor().saving();
359
443
  },
360
444
  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()));
445
+ }), _el$24, _co$3);
446
+ _el$26.$$input = event => editor().setDraft(event.currentTarget.value);
447
+ _$setAttribute(_el$26, "spellcheck", false);
448
+ _$effect(() => _$setAttribute(_el$17, "aria-label", messages().textEditor));
449
+ _$effect(() => _$setProperty(_el$26, "value", editor().draft()));
366
450
  _$runHydrationEvents();
367
- return _el$13;
451
+ return _el$16;
368
452
  })()
369
453
  });
370
454
  }
@@ -390,109 +474,332 @@ function JsonRenderer(props) {
390
474
  return _$createComponent(DownloadAction, props);
391
475
  },
392
476
  get children() {
393
- var _el$25 = _$getNextElement(_tmpl$6);
394
- _$insert(_el$25, _$createComponent(Show, {
477
+ var _el$28 = _$getNextElement(_tmpl$9);
478
+ _$insert(_el$28, _$createComponent(Show, {
395
479
  get when() {
396
480
  return parsed().ok;
397
481
  },
398
482
  get fallback() {
399
- return _$createComponent(CodeDisplay, {
400
- get code() {
483
+ return _$createComponent(TextExcerpt, {
484
+ renderer: props,
485
+ get text() {
401
486
  return props.content.content;
402
- },
403
- language: "text"
487
+ }
404
488
  });
405
489
  },
406
490
  get children() {
407
- return _$createComponent(StructuredDataPreview, {
408
- get data() {
409
- return parsedValue();
491
+ return _$createComponent(Show, {
492
+ get when() {
493
+ return props.previewLines === undefined;
410
494
  },
411
- maxRows: 200
495
+ get fallback() {
496
+ return _$createComponent(TextExcerpt, {
497
+ renderer: props,
498
+ get text() {
499
+ return JSON.stringify(parsedValue(), null, 2);
500
+ }
501
+ });
502
+ },
503
+ get children() {
504
+ return _$createComponent(StructuredDataPreview, {
505
+ get data() {
506
+ return parsedValue();
507
+ },
508
+ maxRows: 200
509
+ });
510
+ }
412
511
  });
413
512
  }
414
513
  }));
415
- return _el$25;
514
+ return _el$28;
416
515
  }
417
516
  });
418
517
  }
419
518
  function DelimitedTextRenderer(props) {
420
519
  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()));
520
+ const [preferences, setPreferences] = createSignal({
521
+ encoding: "utf-8",
522
+ delimiter: "auto",
523
+ view: "table"
524
+ });
525
+ onMount(() => {
526
+ if (!props.previewPreferencesKey) return;
527
+ try {
528
+ setPreferences(readDelimitedPreferences(localStorage.getItem(props.previewPreferencesKey)));
529
+ } catch {
530
+ /* Storage may be disabled. */
531
+ }
532
+ });
533
+ const update = patch => {
534
+ const next = {
535
+ ...preferences(),
536
+ ...patch
537
+ };
538
+ setPreferences(next);
539
+ if (props.previewPreferencesKey) {
540
+ try {
541
+ localStorage.setItem(props.previewPreferencesKey, JSON.stringify(next));
542
+ } catch {
543
+ /* Keep the local selection. */
544
+ }
545
+ }
546
+ };
547
+ const text = createMemo(() => decodeDelimitedContent(props.content, preferences().encoding));
548
+ const delimiter = () => preferences().delimiter === "auto" ? fileViewExtension(props.file.path) === "tsv" || props.content.mediaType === "text/tab-separated-values" ? "\t" : "," : preferences().delimiter;
549
+ const [page, setPage] = createSignal(0);
550
+ createEffect(() => {
551
+ text();
552
+ delimiter();
553
+ props.previewLines;
554
+ setPage(0);
555
+ });
556
+ const pageSize = () => props.previewLines === undefined ? 200 : Math.max(1, props.previewLines);
557
+ const preview = createMemo(() => parseDelimitedText(text(), delimiter(), {
558
+ rows: pageSize() + 1,
559
+ offset: page() * pageSize()
560
+ }));
561
+ const settings = () => prompts.dialog(() => (() => {
562
+ var _el$29 = _$getNextElement(_tmpl$11),
563
+ _el$30 = _el$29.firstChild,
564
+ [_el$31, _co$4] = _$getNextMarker(_el$30.nextSibling),
565
+ _el$32 = _el$31.nextSibling,
566
+ [_el$33, _co$5] = _$getNextMarker(_el$32.nextSibling),
567
+ _el$34 = _el$33.nextSibling,
568
+ [_el$35, _co$6] = _$getNextMarker(_el$34.nextSibling);
569
+ _$insert(_el$29, _$createComponent(Select, {
570
+ get label() {
571
+ return messages().csvEncoding;
572
+ },
573
+ get value() {
574
+ return preferences().encoding;
575
+ },
576
+ get disabled() {
577
+ return props.content.encoding !== "base64";
578
+ },
579
+ options: ["utf-8", "windows-1252", "utf-16le", "utf-16be"],
580
+ onValueChange: value => {
581
+ if (value) update({
582
+ encoding: value
583
+ });
584
+ }
585
+ }), _el$31, _co$4);
586
+ _$insert(_el$29, _$createComponent(Select, {
587
+ get label() {
588
+ return messages().csvSeparator;
589
+ },
590
+ get value() {
591
+ return preferences().delimiter;
592
+ },
593
+ get options() {
594
+ return [{
595
+ value: "auto",
596
+ label: messages().csvDefaultSeparator
597
+ }, {
598
+ value: ",",
599
+ label: messages().csvComma
600
+ }, {
601
+ value: ";",
602
+ label: messages().csvSemicolon
603
+ }, {
604
+ value: "\t",
605
+ label: messages().csvTab
606
+ }, {
607
+ value: "|",
608
+ label: "|"
609
+ }];
610
+ },
611
+ onValueChange: value => {
612
+ if (value) update({
613
+ delimiter: value
614
+ });
615
+ }
616
+ }), _el$33, _co$5);
617
+ _$insert(_el$29, _$createComponent(Select, {
618
+ get label() {
619
+ return messages().csvView;
620
+ },
621
+ get value() {
622
+ return preferences().view;
623
+ },
624
+ get options() {
625
+ return [{
626
+ value: "table",
627
+ label: messages().dataTable
628
+ }, {
629
+ value: "raw",
630
+ label: messages().csvRaw
631
+ }];
632
+ },
633
+ onValueChange: value => {
634
+ if (value === "table" || value === "raw") update({
635
+ view: value
636
+ });
637
+ }
638
+ }), _el$35, _co$6);
639
+ return _el$29;
640
+ })(), {
641
+ title: messages().csvSettings
642
+ });
423
643
  const headers = createMemo(() => preview().rows[0] ?? []);
424
644
  const rows = createMemo(() => preview().rows.slice(1));
425
645
  return _$createComponent(OverlayPanel, {
426
646
  get actions() {
427
- return _$createComponent(DownloadAction, props);
647
+ return [_$createComponent(OverlayAction, {
648
+ icon: "ti-adjustments-horizontal",
649
+ get title() {
650
+ return messages().csvSettings;
651
+ },
652
+ onClick: () => void settings()
653
+ }), _$createComponent(DownloadAction, props)];
428
654
  },
429
655
  get children() {
430
656
  return _$createComponent(Show, {
431
657
  get when() {
432
- return headers().length > 0;
658
+ return preferences().view === "table";
433
659
  },
434
660
  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;
661
+ return _$createComponent(TextExcerpt, {
662
+ renderer: props,
663
+ get text() {
664
+ return text();
442
665
  }
443
666
  });
444
667
  },
445
668
  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();
669
+ return _$createComponent(Show, {
670
+ get when() {
671
+ return headers().length > 0;
456
672
  },
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();
673
+ get fallback() {
674
+ return _$createComponent(Placeholder, {
675
+ icon: "ti ti-table",
676
+ get title() {
677
+ return messages().emptyFile;
678
+ },
679
+ get description() {
680
+ return messages().delimitedFileEmpty;
681
+ }
682
+ });
469
683
  },
470
- children: row => (() => {
471
- var _el$36 = _$getNextElement(_tmpl$11);
472
- _$insert(_el$36, _$createComponent(For, {
684
+ get children() {
685
+ var _el$36 = _$getNextElement(_tmpl$12),
686
+ _el$37 = _el$36.firstChild,
687
+ _el$38 = _el$37.firstChild,
688
+ _el$39 = _el$38.firstChild,
689
+ _el$40 = _el$38.nextSibling,
690
+ _el$42 = _el$37.nextSibling,
691
+ [_el$43, _co$7] = _$getNextMarker(_el$42.nextSibling),
692
+ _el$44 = _el$43.nextSibling,
693
+ [_el$45, _co$8] = _$getNextMarker(_el$44.nextSibling);
694
+ _$insert(_el$39, _$createComponent(For, {
473
695
  get each() {
474
696
  return headers();
475
697
  },
476
- children: (_, index) => (() => {
477
- var _el$37 = _$getNextElement(_tmpl$12);
478
- _$insert(_el$37, () => row[index()] ?? "");
479
- return _el$37;
698
+ children: (header, index) => (() => {
699
+ var _el$46 = _$getNextElement(_tmpl$13),
700
+ _el$47 = _el$46.firstChild;
701
+ _$insert(_el$47, () => header || messages().column({
702
+ number: index() + 1
703
+ }));
704
+ return _el$46;
705
+ })()
706
+ }));
707
+ _$insert(_el$40, _$createComponent(For, {
708
+ get each() {
709
+ return rows();
710
+ },
711
+ children: row => (() => {
712
+ var _el$48 = _$getNextElement(_tmpl$14);
713
+ _$insert(_el$48, _$createComponent(For, {
714
+ get each() {
715
+ return headers();
716
+ },
717
+ children: (_, index) => (() => {
718
+ var _el$49 = _$getNextElement(_tmpl$15);
719
+ _$insert(_el$49, () => row[index()] ?? "");
720
+ return _el$49;
721
+ })()
722
+ }));
723
+ return _el$48;
480
724
  })()
481
725
  }));
726
+ _$insert(_el$36, _$createComponent(Show, {
727
+ get when() {
728
+ return preview().columnsTruncated;
729
+ },
730
+ get children() {
731
+ var _el$41 = _$getNextElement(_tmpl$6);
732
+ _$insert(_el$41, () => messages().previewColumnsLimited);
733
+ return _el$41;
734
+ }
735
+ }), _el$43, _co$7);
736
+ _$insert(_el$36, _$createComponent(Show, {
737
+ get when() {
738
+ return props.previewLines !== undefined;
739
+ },
740
+ get fallback() {
741
+ return _$createComponent(Show, {
742
+ get when() {
743
+ return preview().totalRows > 201;
744
+ },
745
+ get children() {
746
+ var _el$50 = _$getNextElement(_tmpl$16),
747
+ _el$60 = _el$50.firstChild,
748
+ [_el$61, _co$10] = _$getNextMarker(_el$60.nextSibling),
749
+ _el$51 = _el$61.nextSibling,
750
+ _el$54 = _el$51.firstChild,
751
+ [_el$55, _co$9] = _$getNextMarker(_el$54.nextSibling),
752
+ _el$52 = _el$55.nextSibling,
753
+ _el$56 = _el$52.nextSibling,
754
+ [_el$57, _co$0] = _$getNextMarker(_el$56.nextSibling),
755
+ _el$53 = _el$57.nextSibling,
756
+ _el$58 = _el$53.nextSibling,
757
+ [_el$59, _co$1] = _$getNextMarker(_el$58.nextSibling),
758
+ _el$62 = _el$51.nextSibling,
759
+ [_el$63, _co$11] = _$getNextMarker(_el$62.nextSibling);
760
+ _$insert(_el$50, _$createComponent(Button, {
761
+ size: "sm",
762
+ variant: "ghost",
763
+ get disabled() {
764
+ return page() === 0;
765
+ },
766
+ onClick: () => setPage(page() - 1),
767
+ get children() {
768
+ return messages().previous;
769
+ }
770
+ }), _el$61, _co$10);
771
+ _$insert(_el$51, () => page() * pageSize() + 1, _el$55, _co$9);
772
+ _$insert(_el$51, () => Math.min((page() + 1) * pageSize(), preview().totalRows - 1), _el$57, _co$0);
773
+ _$insert(_el$51, () => preview().totalRows - 1, _el$59, _co$1);
774
+ _$insert(_el$50, _$createComponent(Button, {
775
+ size: "sm",
776
+ variant: "ghost",
777
+ get disabled() {
778
+ return (page() + 1) * pageSize() >= preview().totalRows - 1;
779
+ },
780
+ onClick: () => setPage(page() + 1),
781
+ get children() {
782
+ return messages().next;
783
+ }
784
+ }), _el$63, _co$11);
785
+ return _el$50;
786
+ }
787
+ });
788
+ },
789
+ get children() {
790
+ return _$createComponent(MoreLines, {
791
+ get count() {
792
+ return preview().totalRows - rows().length - 1;
793
+ },
794
+ get onClick() {
795
+ return props.onExpandPreview;
796
+ }
797
+ });
798
+ }
799
+ }), _el$45, _co$8);
482
800
  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
801
  }
494
- }), _el$33, _co$4);
495
- return _el$26;
802
+ });
496
803
  }
497
804
  });
498
805
  }
@@ -505,19 +812,23 @@ function ImageRenderer(props) {
505
812
  return _$createComponent(DownloadAction, props);
506
813
  },
507
814
  get children() {
508
- var _el$38 = _$getNextElement(_tmpl$13),
509
- _el$39 = _el$38.firstChild;
815
+ var _el$64 = _$getNextElement(_tmpl$17),
816
+ _el$65 = _el$64.firstChild;
817
+ _$addEventListener(_el$65, "error", props.onPreviewError);
510
818
  _$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);
819
+ var _v$15 = props.crossOrigin,
820
+ _v$16 = mediaSource(props),
821
+ _v$17 = props.file.path;
822
+ _v$15 !== _p$.e && _$setAttribute(_el$65, "crossorigin", _p$.e = _v$15);
823
+ _v$16 !== _p$.t && _$setAttribute(_el$65, "src", _p$.t = _v$16);
824
+ _v$17 !== _p$.a && _$setAttribute(_el$65, "alt", _p$.a = _v$17);
515
825
  return _p$;
516
826
  }, {
517
827
  e: undefined,
518
- t: undefined
828
+ t: undefined,
829
+ a: undefined
519
830
  });
520
- return _el$38;
831
+ return _el$64;
521
832
  }
522
833
  });
523
834
  }
@@ -538,18 +849,18 @@ function PdfRenderer(props) {
538
849
  });
539
850
  },
540
851
  children: href => (() => {
541
- var _el$40 = _$getNextElement(_tmpl$14);
852
+ var _el$66 = _$getNextElement(_tmpl$18);
542
853
  _$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);
854
+ var _v$18 = href(),
855
+ _v$19 = props.file.path;
856
+ _v$18 !== _p$.e && _$setAttribute(_el$66, "data", _p$.e = _v$18);
857
+ _v$19 !== _p$.t && _$setAttribute(_el$66, "aria-label", _p$.t = _v$19);
547
858
  return _p$;
548
859
  }, {
549
860
  e: undefined,
550
861
  t: undefined
551
862
  });
552
- return _el$40;
863
+ return _el$66;
553
864
  })()
554
865
  });
555
866
  }
@@ -560,20 +871,24 @@ function AudioRenderer(props) {
560
871
  return _$createComponent(DownloadAction, props);
561
872
  },
562
873
  get children() {
563
- var _el$41 = _$getNextElement(_tmpl$15),
564
- _el$42 = _el$41.firstChild;
565
- _$insert(_el$42, () => messages().audioUnsupported);
874
+ var _el$67 = _$getNextElement(_tmpl$19),
875
+ _el$68 = _el$67.firstChild;
876
+ _$addEventListener(_el$68, "error", props.onPreviewError);
877
+ _$insert(_el$68, () => messages().audioUnsupported);
566
878
  _$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);
879
+ var _v$20 = props.crossOrigin,
880
+ _v$21 = mediaSource(props),
881
+ _v$22 = props.file.path;
882
+ _v$20 !== _p$.e && _$setAttribute(_el$68, "crossorigin", _p$.e = _v$20);
883
+ _v$21 !== _p$.t && _$setAttribute(_el$68, "src", _p$.t = _v$21);
884
+ _v$22 !== _p$.a && _$setAttribute(_el$68, "aria-label", _p$.a = _v$22);
571
885
  return _p$;
572
886
  }, {
573
887
  e: undefined,
574
- t: undefined
888
+ t: undefined,
889
+ a: undefined
575
890
  });
576
- return _el$41;
891
+ return _el$67;
577
892
  }
578
893
  });
579
894
  }
@@ -584,20 +899,24 @@ function VideoRenderer(props) {
584
899
  return _$createComponent(DownloadAction, props);
585
900
  },
586
901
  get children() {
587
- var _el$43 = _$getNextElement(_tmpl$16),
588
- _el$44 = _el$43.firstChild;
589
- _$insert(_el$44, () => messages().videoUnsupported);
902
+ var _el$69 = _$getNextElement(_tmpl$20),
903
+ _el$70 = _el$69.firstChild;
904
+ _$addEventListener(_el$70, "error", props.onPreviewError);
905
+ _$insert(_el$70, () => messages().videoUnsupported);
590
906
  _$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);
907
+ var _v$23 = props.crossOrigin,
908
+ _v$24 = mediaSource(props),
909
+ _v$25 = props.file.path;
910
+ _v$23 !== _p$.e && _$setAttribute(_el$70, "crossorigin", _p$.e = _v$23);
911
+ _v$24 !== _p$.t && _$setAttribute(_el$70, "src", _p$.t = _v$24);
912
+ _v$25 !== _p$.a && _$setAttribute(_el$70, "aria-label", _p$.a = _v$25);
595
913
  return _p$;
596
914
  }, {
597
915
  e: undefined,
598
- t: undefined
916
+ t: undefined,
917
+ a: undefined
599
918
  });
600
- return _el$43;
919
+ return _el$69;
601
920
  }
602
921
  });
603
922
  }
@@ -617,13 +936,13 @@ function BinaryRenderer(props) {
617
936
  return props.downloadHref;
618
937
  },
619
938
  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;
939
+ var _el$71 = _$getNextElement(_tmpl$21),
940
+ _el$72 = _el$71.firstChild,
941
+ _el$73 = _el$72.nextSibling,
942
+ [_el$74, _co$12] = _$getNextMarker(_el$73.nextSibling);
943
+ _$insert(_el$71, () => messages().download, _el$74, _co$12);
944
+ _$effect(() => _$setAttribute(_el$71, "href", href()));
945
+ return _el$71;
627
946
  })()
628
947
  });
629
948
  }
@@ -657,7 +976,7 @@ const BUILTIN_RENDERERS = [{
657
976
  component: JsonRenderer
658
977
  }, {
659
978
  id: "delimited-text",
660
- match: (file, content) => content.encoding === "utf8" && getFileViewPreviewKind({
979
+ match: (file, content) => getFileViewPreviewKind({
661
980
  ...file,
662
981
  mediaType: content.mediaType || file.mediaType
663
982
  }) === "delimited-text",
@@ -777,8 +1096,8 @@ export default function FileView(props) {
777
1096
  save
778
1097
  } : null;
779
1098
  return (() => {
780
- var _el$49 = _$getNextElement(_tmpl$18);
781
- _$insert(_el$49, _$createComponent(Switch, {
1099
+ var _el$75 = _$getNextElement(_tmpl$8);
1100
+ _$insert(_el$75, _$createComponent(Switch, {
782
1101
  get children() {
783
1102
  return [_$createComponent(Match, {
784
1103
  get when() {
@@ -814,6 +1133,18 @@ export default function FileView(props) {
814
1133
  children: active => {
815
1134
  const Renderer = active().component;
816
1135
  return _$createComponent(Renderer, {
1136
+ get previewLines() {
1137
+ return props.previewLines;
1138
+ },
1139
+ get onExpandPreview() {
1140
+ return props.onExpandPreview;
1141
+ },
1142
+ get headingScale() {
1143
+ return props.headingScale;
1144
+ },
1145
+ get previewPreferencesKey() {
1146
+ return props.previewPreferencesKey;
1147
+ },
817
1148
  get file() {
818
1149
  return props.file;
819
1150
  },
@@ -823,6 +1154,12 @@ export default function FileView(props) {
823
1154
  get previewHref() {
824
1155
  return nativePreviewHref();
825
1156
  },
1157
+ get crossOrigin() {
1158
+ return props.crossOrigin;
1159
+ },
1160
+ get onPreviewError() {
1161
+ return props.onPreviewError;
1162
+ },
826
1163
  get downloadHref() {
827
1164
  return props.downloadHref ?? null;
828
1165
  },
@@ -834,8 +1171,20 @@ export default function FileView(props) {
834
1171
  })];
835
1172
  }
836
1173
  }));
837
- _$effect(() => _$className(_el$49, `k2b-content-file-view ${props.class ?? ""}`));
838
- return _el$49;
1174
+ _$effect(_p$ => {
1175
+ var _v$26 = `k2b-content-file-view ${props.class ?? ""}`,
1176
+ _v$27 = props.variant,
1177
+ _v$28 = props.previewLines !== undefined ? "true" : undefined;
1178
+ _v$26 !== _p$.e && _$className(_el$75, _p$.e = _v$26);
1179
+ _v$27 !== _p$.t && _$setAttribute(_el$75, "data-variant", _p$.t = _v$27);
1180
+ _v$28 !== _p$.a && _$setAttribute(_el$75, "data-excerpt", _p$.a = _v$28);
1181
+ return _p$;
1182
+ }, {
1183
+ e: undefined,
1184
+ t: undefined,
1185
+ a: undefined
1186
+ });
1187
+ return _el$75;
839
1188
  })();
840
1189
  }
841
1190
  _$delegateEvents(["click", "mousedown", "keydown", "input"]);