@k2b/ui 0.1.1 → 0.3.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 (386) 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 +10 -4
  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 +1 -1
  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 +143 -77
  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 +34 -15
  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 +113 -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 +507 -162
  53. package/dist/browser/content/FileView.js.map +1 -1
  54. package/dist/browser/content/MarkdownView.js +20 -3
  55. package/dist/browser/content/MarkdownView.js.map +1 -1
  56. package/dist/browser/content/PdfPreview.js +107 -90
  57. package/dist/browser/content/PdfPreview.js.map +1 -1
  58. package/dist/browser/content/chart-cursor.js +33 -0
  59. package/dist/browser/content/chart-cursor.js.map +1 -0
  60. package/dist/browser/content/chart-explorer.js +147 -0
  61. package/dist/browser/content/chart-explorer.js.map +1 -0
  62. package/dist/browser/content/chart-inspection.js +447 -0
  63. package/dist/browser/content/chart-inspection.js.map +1 -0
  64. package/dist/browser/content/chart-line-gaps.js +53 -0
  65. package/dist/browser/content/chart-line-gaps.js.map +1 -0
  66. package/dist/browser/content/chart-map-viewport.js +5 -1
  67. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  68. package/dist/browser/content/chart-snapshot.js +63 -0
  69. package/dist/browser/content/chart-snapshot.js.map +1 -0
  70. package/dist/browser/content/chart-state-timeline.js +32 -4
  71. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  72. package/dist/browser/content/chart-svg.js +54 -0
  73. package/dist/browser/content/chart-svg.js.map +1 -0
  74. package/dist/browser/content/collection-selection.js +109 -0
  75. package/dist/browser/content/collection-selection.js.map +1 -0
  76. package/dist/browser/content/delimited-preferences.js +21 -0
  77. package/dist/browser/content/delimited-preferences.js.map +1 -0
  78. package/dist/browser/content/file-tree.js.map +1 -1
  79. package/dist/browser/content/file-view-preview.js +11 -7
  80. package/dist/browser/content/file-view-preview.js.map +1 -1
  81. package/dist/browser/content/index.js +9 -0
  82. package/dist/browser/content/index.js.map +1 -1
  83. package/dist/browser/feedback/InlineGuidance.js +17 -3
  84. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  85. package/dist/browser/feedback/Tooltip.js +6 -2
  86. package/dist/browser/feedback/Tooltip.js.map +1 -1
  87. package/dist/browser/feedback/dialog-core.js +102 -9
  88. package/dist/browser/feedback/dialog-core.js.map +1 -1
  89. package/dist/browser/feedback/prompts.js +6 -0
  90. package/dist/browser/feedback/prompts.js.map +1 -1
  91. package/dist/browser/feedback/toast.js +29 -6
  92. package/dist/browser/feedback/toast.js.map +1 -1
  93. package/dist/browser/feedback/tooltip-position.js +15 -0
  94. package/dist/browser/feedback/tooltip-position.js.map +1 -1
  95. package/dist/browser/inputs/ChoiceInputs.js +47 -38
  96. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  97. package/dist/browser/inputs/SelectChip.js +3 -2
  98. package/dist/browser/inputs/SelectChip.js.map +1 -1
  99. package/dist/browser/inputs/TextInput.js +7 -1
  100. package/dist/browser/inputs/TextInput.js.map +1 -1
  101. package/dist/browser/inputs/markdown/MarkdownEditor.js +61 -37
  102. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  103. package/dist/browser/internal/portal.js +1 -1
  104. package/dist/browser/internal/portal.js.map +1 -1
  105. package/dist/browser/intl/Format.js +89 -16
  106. package/dist/browser/intl/Format.js.map +1 -1
  107. package/dist/browser/intl/index.js.map +1 -1
  108. package/dist/browser/intl/messages.js +130 -2
  109. package/dist/browser/intl/messages.js.map +1 -1
  110. package/dist/browser/layout/AppWorkspace.js +712 -624
  111. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  112. package/dist/browser/layout/BottomSheet.js +95 -0
  113. package/dist/browser/layout/BottomSheet.js.map +1 -0
  114. package/dist/browser/layout/DetailPanel.js +232 -107
  115. package/dist/browser/layout/DetailPanel.js.map +1 -1
  116. package/dist/browser/layout/Navigation.js +278 -0
  117. package/dist/browser/layout/Navigation.js.map +1 -0
  118. package/dist/browser/layout/PanelDialog.js +229 -72
  119. package/dist/browser/layout/PanelDialog.js.map +1 -1
  120. package/dist/browser/layout/ScrollArea.js +21 -1
  121. package/dist/browser/layout/ScrollArea.js.map +1 -1
  122. package/dist/browser/layout/Settings.js.map +1 -1
  123. package/dist/browser/layout/SidebarItemPreview.js +183 -0
  124. package/dist/browser/layout/SidebarItemPreview.js.map +1 -0
  125. package/dist/browser/layout/app-workspace-controller.js +3 -0
  126. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  127. package/dist/browser/layout/index.js +3 -0
  128. package/dist/browser/layout/index.js.map +1 -1
  129. package/dist/browser/layout/navigation-model.js +23 -0
  130. package/dist/browser/layout/navigation-model.js.map +1 -0
  131. package/dist/browser/layout/scroll-fade.js +100 -0
  132. package/dist/browser/layout/scroll-fade.js.map +1 -0
  133. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  134. package/dist/browser/surfaces/StatusBadge.js +2 -1
  135. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  136. package/dist/fonts/ibm-plex-mono-cyrillic-400-italic-4aded3f2f2a7d27d.woff2 +0 -0
  137. package/dist/fonts/ibm-plex-mono-cyrillic-400-normal-7635422bd10ddbbc.woff2 +0 -0
  138. package/dist/fonts/ibm-plex-mono-cyrillic-500-normal-1d89462e86cb8e87.woff2 +0 -0
  139. package/dist/fonts/ibm-plex-mono-cyrillic-600-normal-2b05a8695c7f9f4a.woff2 +0 -0
  140. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-italic-a0b3b8cbe5a516e7.woff2 +0 -0
  141. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-normal-f8c22ec1804bd696.woff2 +0 -0
  142. package/dist/fonts/ibm-plex-mono-cyrillic-ext-500-normal-3febe5c7f22e4b07.woff2 +0 -0
  143. package/dist/fonts/ibm-plex-mono-cyrillic-ext-600-normal-83109cdd4f8665b4.woff2 +0 -0
  144. package/dist/fonts/ibm-plex-mono-latin-400-italic-0840095faae86403.woff2 +0 -0
  145. package/dist/fonts/ibm-plex-mono-latin-400-normal-08949f728dc52d52.woff2 +0 -0
  146. package/dist/fonts/ibm-plex-mono-latin-500-normal-01d285447409c8a5.woff2 +0 -0
  147. package/dist/fonts/ibm-plex-mono-latin-600-normal-0d1f0b8d0722224e.woff2 +0 -0
  148. package/dist/fonts/ibm-plex-mono-latin-ext-400-italic-1b07eee6df7d26b3.woff2 +0 -0
  149. package/dist/fonts/ibm-plex-mono-latin-ext-400-normal-6bc0f226a5b7884a.woff2 +0 -0
  150. package/dist/fonts/ibm-plex-mono-latin-ext-500-normal-6bb06407c97584b0.woff2 +0 -0
  151. package/dist/fonts/ibm-plex-mono-latin-ext-600-normal-32057cf50dd14bdb.woff2 +0 -0
  152. package/dist/fonts/ibm-plex-mono-vietnamese-400-italic-a6bab38af4f9c761.woff2 +0 -0
  153. package/dist/fonts/ibm-plex-mono-vietnamese-400-normal-62632b6375305e70.woff2 +0 -0
  154. package/dist/fonts/ibm-plex-mono-vietnamese-500-normal-781633d95de88040.woff2 +0 -0
  155. package/dist/fonts/ibm-plex-mono-vietnamese-600-normal-51b74d53e106ba8a.woff2 +0 -0
  156. package/dist/fonts/ibm-plex-sans-cyrillic-400-italic-e8731a7e2b00fc4f.woff2 +0 -0
  157. package/dist/fonts/ibm-plex-sans-cyrillic-400-normal-69afad88a0740b6e.woff2 +0 -0
  158. package/dist/fonts/ibm-plex-sans-cyrillic-500-normal-200be3a2a6b1789f.woff2 +0 -0
  159. package/dist/fonts/ibm-plex-sans-cyrillic-600-normal-730becc6f005c18c.woff2 +0 -0
  160. package/dist/fonts/ibm-plex-sans-cyrillic-700-normal-40540598b4c9eb2c.woff2 +0 -0
  161. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-italic-4ffb25726a7ce4cc.woff2 +0 -0
  162. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-normal-e2580ad78906551e.woff2 +0 -0
  163. package/dist/fonts/ibm-plex-sans-cyrillic-ext-500-normal-08578d906af6d986.woff2 +0 -0
  164. package/dist/fonts/ibm-plex-sans-cyrillic-ext-600-normal-d60d3d0b182753d5.woff2 +0 -0
  165. package/dist/fonts/ibm-plex-sans-cyrillic-ext-700-normal-d07dd53642480097.woff2 +0 -0
  166. package/dist/fonts/ibm-plex-sans-greek-400-italic-1bc10b01688ba9fa.woff2 +0 -0
  167. package/dist/fonts/ibm-plex-sans-greek-400-normal-02296067bc904d2a.woff2 +0 -0
  168. package/dist/fonts/ibm-plex-sans-greek-500-normal-8cb6e20b4dbbaa5f.woff2 +0 -0
  169. package/dist/fonts/ibm-plex-sans-greek-600-normal-0a9ebd9019415ee9.woff2 +0 -0
  170. package/dist/fonts/ibm-plex-sans-greek-700-normal-c949641d10a3bebc.woff2 +0 -0
  171. package/dist/fonts/ibm-plex-sans-latin-400-italic-6de912e531b6c980.woff2 +0 -0
  172. package/dist/fonts/ibm-plex-sans-latin-400-normal-3b646991d30055a9.woff2 +0 -0
  173. package/dist/fonts/ibm-plex-sans-latin-500-normal-0717336fb31fcdcd.woff2 +0 -0
  174. package/dist/fonts/ibm-plex-sans-latin-600-normal-8960851d691c054e.woff2 +0 -0
  175. package/dist/fonts/ibm-plex-sans-latin-700-normal-42e7b0c143c19df9.woff2 +0 -0
  176. package/dist/fonts/ibm-plex-sans-latin-ext-400-italic-c5c00e8a32022dfe.woff2 +0 -0
  177. package/dist/fonts/ibm-plex-sans-latin-ext-400-normal-c93d2a12aaa280f6.woff2 +0 -0
  178. package/dist/fonts/ibm-plex-sans-latin-ext-500-normal-2846035d85100f84.woff2 +0 -0
  179. package/dist/fonts/ibm-plex-sans-latin-ext-600-normal-b25dfd4f979e442a.woff2 +0 -0
  180. package/dist/fonts/ibm-plex-sans-latin-ext-700-normal-92f0392bd74fa395.woff2 +0 -0
  181. package/dist/fonts/ibm-plex-sans-vietnamese-400-italic-675d4bace127bffb.woff2 +0 -0
  182. package/dist/fonts/ibm-plex-sans-vietnamese-400-normal-771538f7f26551bd.woff2 +0 -0
  183. package/dist/fonts/ibm-plex-sans-vietnamese-500-normal-85ba3d9c2488a813.woff2 +0 -0
  184. package/dist/fonts/ibm-plex-sans-vietnamese-600-normal-5d34b803637befe3.woff2 +0 -0
  185. package/dist/fonts/ibm-plex-sans-vietnamese-700-normal-b79d0c4b68b85007.woff2 +0 -0
  186. package/dist/plex.css +1 -1
  187. package/dist/ssr/actions/Button.js +11 -2
  188. package/dist/ssr/actions/Button.js.map +1 -1
  189. package/dist/ssr/actions/Disclosure.js +2 -2
  190. package/dist/ssr/actions/Disclosure.js.map +1 -1
  191. package/dist/ssr/actions/Dropdown.js +5 -2
  192. package/dist/ssr/actions/Dropdown.js.map +1 -1
  193. package/dist/ssr/actions/FilterChip.js +16 -2
  194. package/dist/ssr/actions/FilterChip.js.map +1 -1
  195. package/dist/ssr/actions/SplitButton.js +69 -22
  196. package/dist/ssr/actions/SplitButton.js.map +1 -1
  197. package/dist/ssr/actions/SpotlightSearch.js +3 -7
  198. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  199. package/dist/ssr/actions/Tabs.js +58 -11
  200. package/dist/ssr/actions/Tabs.js.map +1 -1
  201. package/dist/ssr/actions/index.js +1 -1
  202. package/dist/ssr/actions/index.js.map +1 -1
  203. package/dist/ssr/chat/ChatComposer.js +366 -134
  204. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  205. package/dist/ssr/chat/ChatContextPopup.js +86 -0
  206. package/dist/ssr/chat/ChatContextPopup.js.map +1 -0
  207. package/dist/ssr/chat/ChatPrimitives.js +50 -12
  208. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  209. package/dist/ssr/chat/ChatTasks.js +48 -0
  210. package/dist/ssr/chat/ChatTasks.js.map +1 -0
  211. package/dist/ssr/chat/ChatTimeline.js +16 -4
  212. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  213. package/dist/ssr/chat/chat-behavior.js +0 -5
  214. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  215. package/dist/ssr/chat/composer-document.js +55 -0
  216. package/dist/ssr/chat/composer-document.js.map +1 -0
  217. package/dist/ssr/chat/index.js +6 -1
  218. package/dist/ssr/chat/index.js.map +1 -1
  219. package/dist/ssr/chat/types.js.map +1 -1
  220. package/dist/ssr/content/Chart.js +121 -219
  221. package/dist/ssr/content/Chart.js.map +1 -1
  222. package/dist/ssr/content/ChartExplorer.js +257 -0
  223. package/dist/ssr/content/ChartExplorer.js.map +1 -0
  224. package/dist/ssr/content/ChartExplorerControls.js +105 -0
  225. package/dist/ssr/content/ChartExplorerControls.js.map +1 -0
  226. package/dist/ssr/content/ChartFilterControls.js +139 -0
  227. package/dist/ssr/content/ChartFilterControls.js.map +1 -0
  228. package/dist/ssr/content/ChartSnapshotView.js +57 -0
  229. package/dist/ssr/content/ChartSnapshotView.js.map +1 -0
  230. package/dist/ssr/content/DataTable.js +13 -9
  231. package/dist/ssr/content/DataTable.js.map +1 -1
  232. package/dist/ssr/content/FileBrowser.js +3 -0
  233. package/dist/ssr/content/FileBrowser.js.map +1 -1
  234. package/dist/ssr/content/FileGrid.js +38 -0
  235. package/dist/ssr/content/FileGrid.js.map +1 -0
  236. package/dist/ssr/content/FileTree.js +2 -2
  237. package/dist/ssr/content/FileTree.js.map +1 -1
  238. package/dist/ssr/content/FileView.js +352 -75
  239. package/dist/ssr/content/FileView.js.map +1 -1
  240. package/dist/ssr/content/MarkdownView.js +20 -3
  241. package/dist/ssr/content/MarkdownView.js.map +1 -1
  242. package/dist/ssr/content/PdfPreview.js +37 -24
  243. package/dist/ssr/content/PdfPreview.js.map +1 -1
  244. package/dist/ssr/content/chart-cursor.js +33 -0
  245. package/dist/ssr/content/chart-cursor.js.map +1 -0
  246. package/dist/ssr/content/chart-explorer.js +147 -0
  247. package/dist/ssr/content/chart-explorer.js.map +1 -0
  248. package/dist/ssr/content/chart-inspection.js +447 -0
  249. package/dist/ssr/content/chart-inspection.js.map +1 -0
  250. package/dist/ssr/content/chart-line-gaps.js +53 -0
  251. package/dist/ssr/content/chart-line-gaps.js.map +1 -0
  252. package/dist/ssr/content/chart-map-viewport.js +5 -1
  253. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  254. package/dist/ssr/content/chart-snapshot.js +63 -0
  255. package/dist/ssr/content/chart-snapshot.js.map +1 -0
  256. package/dist/ssr/content/chart-state-timeline.js +32 -4
  257. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  258. package/dist/ssr/content/chart-svg.js +54 -0
  259. package/dist/ssr/content/chart-svg.js.map +1 -0
  260. package/dist/ssr/content/collection-selection.js +109 -0
  261. package/dist/ssr/content/collection-selection.js.map +1 -0
  262. package/dist/ssr/content/delimited-preferences.js +21 -0
  263. package/dist/ssr/content/delimited-preferences.js.map +1 -0
  264. package/dist/ssr/content/file-tree.js.map +1 -1
  265. package/dist/ssr/content/file-view-preview.js +11 -7
  266. package/dist/ssr/content/file-view-preview.js.map +1 -1
  267. package/dist/ssr/content/index.js +9 -0
  268. package/dist/ssr/content/index.js.map +1 -1
  269. package/dist/ssr/feedback/InlineGuidance.js +17 -3
  270. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  271. package/dist/ssr/feedback/Tooltip.js +6 -4
  272. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  273. package/dist/ssr/feedback/dialog-core.js +102 -9
  274. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  275. package/dist/ssr/feedback/prompts.js +6 -0
  276. package/dist/ssr/feedback/prompts.js.map +1 -1
  277. package/dist/ssr/feedback/toast.js +29 -6
  278. package/dist/ssr/feedback/toast.js.map +1 -1
  279. package/dist/ssr/feedback/tooltip-position.js +15 -0
  280. package/dist/ssr/feedback/tooltip-position.js.map +1 -1
  281. package/dist/ssr/inputs/ChoiceInputs.js +9 -6
  282. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  283. package/dist/ssr/inputs/SelectChip.js +3 -3
  284. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  285. package/dist/ssr/inputs/TextInput.js.map +1 -1
  286. package/dist/ssr/inputs/markdown/MarkdownEditor.js +19 -11
  287. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  288. package/dist/ssr/internal/portal.js +1 -1
  289. package/dist/ssr/internal/portal.js.map +1 -1
  290. package/dist/ssr/intl/Format.js +61 -0
  291. package/dist/ssr/intl/Format.js.map +1 -1
  292. package/dist/ssr/intl/index.js.map +1 -1
  293. package/dist/ssr/intl/messages.js +130 -2
  294. package/dist/ssr/intl/messages.js.map +1 -1
  295. package/dist/ssr/layout/AppWorkspace.js +368 -275
  296. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  297. package/dist/ssr/layout/BottomSheet.js +43 -0
  298. package/dist/ssr/layout/BottomSheet.js.map +1 -0
  299. package/dist/ssr/layout/DetailPanel.js +95 -17
  300. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  301. package/dist/ssr/layout/Navigation.js +181 -0
  302. package/dist/ssr/layout/Navigation.js.map +1 -0
  303. package/dist/ssr/layout/PanelDialog.js +112 -27
  304. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  305. package/dist/ssr/layout/ScrollArea.js +16 -1
  306. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  307. package/dist/ssr/layout/Settings.js.map +1 -1
  308. package/dist/ssr/layout/SidebarItemPreview.js +133 -0
  309. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -0
  310. package/dist/ssr/layout/app-workspace-controller.js +3 -0
  311. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  312. package/dist/ssr/layout/index.js +3 -0
  313. package/dist/ssr/layout/index.js.map +1 -1
  314. package/dist/ssr/layout/navigation-model.js +23 -0
  315. package/dist/ssr/layout/navigation-model.js.map +1 -0
  316. package/dist/ssr/layout/scroll-fade.js +100 -0
  317. package/dist/ssr/layout/scroll-fade.js.map +1 -0
  318. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  319. package/dist/ssr/surfaces/StatusBadge.js +2 -1
  320. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  321. package/dist/styles.css +1 -1
  322. package/dist/tabler.css +1 -1
  323. package/dist/types/actions/Button.d.ts +4 -0
  324. package/dist/types/actions/Disclosure.d.ts +1 -0
  325. package/dist/types/actions/Dropdown.d.ts +3 -1
  326. package/dist/types/actions/FilterChip.d.ts +4 -0
  327. package/dist/types/actions/SplitButton.d.ts +6 -0
  328. package/dist/types/actions/SpotlightSearch.d.ts +0 -4
  329. package/dist/types/actions/Tabs.d.ts +4 -0
  330. package/dist/types/actions/index.d.ts +1 -1
  331. package/dist/types/chat/ChatComposer.d.ts +20 -2
  332. package/dist/types/chat/ChatContextPopup.d.ts +6 -0
  333. package/dist/types/chat/ChatPrimitives.d.ts +4 -0
  334. package/dist/types/chat/ChatTasks.d.ts +15 -0
  335. package/dist/types/chat/ChatTimeline.d.ts +2 -0
  336. package/dist/types/chat/chat-behavior.d.ts +0 -3
  337. package/dist/types/chat/composer-document.d.ts +14 -0
  338. package/dist/types/chat/index.d.ts +8 -1
  339. package/dist/types/chat/types.d.ts +9 -0
  340. package/dist/types/content/Chart.d.ts +42 -23
  341. package/dist/types/content/ChartExplorer.d.ts +34 -0
  342. package/dist/types/content/ChartExplorerControls.d.ts +10 -0
  343. package/dist/types/content/ChartFilterControls.d.ts +21 -0
  344. package/dist/types/content/ChartSnapshotView.d.ts +11 -0
  345. package/dist/types/content/DataTable.d.ts +4 -0
  346. package/dist/types/content/FileBrowser.d.ts +1 -0
  347. package/dist/types/content/FileGrid.d.ts +21 -0
  348. package/dist/types/content/FileView.d.ts +20 -0
  349. package/dist/types/content/MarkdownView.d.ts +6 -1
  350. package/dist/types/content/PdfPreview.d.ts +8 -1
  351. package/dist/types/content/chart-cursor.d.ts +15 -0
  352. package/dist/types/content/chart-explorer.d.ts +48 -0
  353. package/dist/types/content/chart-inspection.d.ts +40 -0
  354. package/dist/types/content/chart-line-gaps.d.ts +5 -0
  355. package/dist/types/content/chart-map-viewport.d.ts +1 -1
  356. package/dist/types/content/chart-snapshot.d.ts +26 -0
  357. package/dist/types/content/chart-svg.d.ts +21 -0
  358. package/dist/types/content/collection-selection.d.ts +24 -0
  359. package/dist/types/content/delimited-preferences.d.ts +11 -0
  360. package/dist/types/content/file-tree.d.ts +2 -0
  361. package/dist/types/content/file-view-preview.d.ts +4 -1
  362. package/dist/types/content/index.d.ts +15 -1
  363. package/dist/types/feedback/InlineGuidance.d.ts +1 -0
  364. package/dist/types/feedback/dialog-core.d.ts +13 -0
  365. package/dist/types/feedback/prompts.d.ts +2 -0
  366. package/dist/types/feedback/toast.d.ts +7 -1
  367. package/dist/types/feedback/tooltip-position.d.ts +1 -1
  368. package/dist/types/inputs/ChoiceInputs.d.ts +3 -0
  369. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -1
  370. package/dist/types/intl/Format.d.ts +9 -0
  371. package/dist/types/intl/index.d.ts +1 -1
  372. package/dist/types/intl/messages.d.ts +31 -1
  373. package/dist/types/layout/AppWorkspace.d.ts +35 -18
  374. package/dist/types/layout/BottomSheet.d.ts +23 -0
  375. package/dist/types/layout/DetailPanel.d.ts +7 -0
  376. package/dist/types/layout/Navigation.d.ts +8 -0
  377. package/dist/types/layout/PanelDialog.d.ts +14 -1
  378. package/dist/types/layout/ScrollArea.d.ts +4 -0
  379. package/dist/types/layout/Settings.d.ts +1 -1
  380. package/dist/types/layout/SidebarItemPreview.d.ts +11 -0
  381. package/dist/types/layout/index.d.ts +4 -1
  382. package/dist/types/layout/navigation-model.d.ts +48 -0
  383. package/dist/types/layout/scroll-fade.d.ts +3 -0
  384. package/dist/types/surfaces/DescriptionList.d.ts +1 -1
  385. package/dist/types/surfaces/StatusBadge.d.ts +1 -1
  386. package/package.json +8 -8
@@ -67,12 +67,18 @@ export const parseDelimitedText = (input, delimiter, limits = {}) => {
67
67
  let field = "";
68
68
  let quoted = false;
69
69
  let truncated = false;
70
+ let totalRows = 0;
71
+ let columnsTruncated = false;
70
72
  const pushField = () => {
71
- if (row.length < maxColumns) row.push(field);else truncated = true;
73
+ if (row.length < maxColumns) row.push(field);else {
74
+ truncated = true;
75
+ columnsTruncated = true;
76
+ }
72
77
  field = "";
73
78
  };
74
79
  const pushRow = () => {
75
- if (rows.length < maxRows) rows.push(row);else truncated = true;
80
+ if (rows.length < maxRows && (totalRows === 0 || totalRows > (limits.offset ?? 0))) rows.push(row);else truncated = true;
81
+ totalRows++;
76
82
  row = [];
77
83
  };
78
84
  for (let index = 0; index < input.length; index += 1) {
@@ -92,10 +98,6 @@ export const parseDelimitedText = (input, delimiter, limits = {}) => {
92
98
  pushField();
93
99
  pushRow();
94
100
  if (character === "\r" && input[index + 1] === "\n") index += 1;
95
- if (rows.length >= maxRows && index < input.length - 1) {
96
- truncated = true;
97
- break;
98
- }
99
101
  } else {
100
102
  field += character;
101
103
  }
@@ -106,7 +108,9 @@ export const parseDelimitedText = (input, delimiter, limits = {}) => {
106
108
  }
107
109
  return {
108
110
  rows,
109
- truncated
111
+ truncated,
112
+ totalRows,
113
+ columnsTruncated
110
114
  };
111
115
  };
112
116
  //# sourceMappingURL=file-view-preview.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MEBIBYTE","maxPreviewBytes","markdown","image","pdf","json","audio","video","text","imageMediaTypes","Set","audioMediaTypes","videoMediaTypes","markdownExtensions","imageExtensions","audioExtensions","videoExtensions","textExtensions","fileViewExtension","path","cleanPath","split","name","slice","lastIndexOf","dot","toLowerCase","normalizedMediaType","mediaType","trim","previewKindByType","file","extension","has","endsWith","startsWith","getFileViewPreviewKind","kind","size","undefined","Number","isFinite","canPreviewFile","parseDelimitedText","input","delimiter","limits","maxRows","Math","max","rows","maxColumns","columns","row","field","quoted","truncated","pushField","length","push","pushRow","index","character"],"sources":["content/file-view-preview.ts"],"sourcesContent":["export type FileViewFile = {\n path: string;\n mediaType?: string;\n size?: number;\n};\n\nexport type FileViewPreviewKind = \"markdown\" | \"image\" | \"pdf\" | \"json\" | \"delimited-text\" | \"audio\" | \"video\" | \"text\";\n\nconst MEBIBYTE = 1024 * 1024;\n\nconst maxPreviewBytes: Record<FileViewPreviewKind, number> = {\n markdown: 2 * MEBIBYTE,\n image: 25 * MEBIBYTE,\n pdf: 50 * MEBIBYTE,\n json: 2 * MEBIBYTE,\n \"delimited-text\": 2 * MEBIBYTE,\n audio: 50 * MEBIBYTE,\n video: 50 * MEBIBYTE,\n text: 2 * MEBIBYTE,\n};\n\n// SVG remains inert because FileView renders every image through <img>; never inject its markup into the DOM.\nconst imageMediaTypes = new Set([\n \"image/avif\",\n \"image/bmp\",\n \"image/gif\",\n \"image/jpeg\",\n \"image/png\",\n \"image/svg+xml\",\n \"image/webp\",\n \"image/x-icon\",\n]);\nconst audioMediaTypes = new Set([\n \"audio/aac\",\n \"audio/flac\",\n \"audio/mp4\",\n \"audio/mpeg\",\n \"audio/ogg\",\n \"audio/wav\",\n \"audio/webm\",\n \"audio/x-wav\",\n]);\nconst videoMediaTypes = new Set([\"video/mp4\", \"video/ogg\", \"video/webm\"]);\n\nconst markdownExtensions = new Set([\"md\", \"markdown\"]);\nconst imageExtensions = new Set([\"avif\", \"bmp\", \"gif\", \"ico\", \"jpeg\", \"jpg\", \"png\", \"svg\", \"webp\"]);\nconst audioExtensions = new Set([\"aac\", \"flac\", \"m4a\", \"mp3\", \"oga\", \"ogg\", \"wav\", \"weba\"]);\nconst videoExtensions = new Set([\"m4v\", \"mp4\", \"ogv\", \"webm\"]);\nconst textExtensions = new Set([\n \"c\",\n \"conf\",\n \"cpp\",\n \"css\",\n \"env\",\n \"go\",\n \"h\",\n \"html\",\n \"ini\",\n \"java\",\n \"js\",\n \"jsx\",\n \"log\",\n \"mjs\",\n \"php\",\n \"py\",\n \"rb\",\n \"rs\",\n \"sh\",\n \"sql\",\n \"toml\",\n \"ts\",\n \"tsx\",\n \"txt\",\n \"xml\",\n \"yaml\",\n \"yml\",\n]);\n\nexport const fileViewExtension = (path: string): string => {\n const cleanPath = path.split(/[?#]/, 1)[0] ?? path;\n const name = cleanPath.slice(cleanPath.lastIndexOf(\"/\") + 1);\n const dot = name.lastIndexOf(\".\");\n return dot > 0 ? name.slice(dot + 1).toLowerCase() : \"\";\n};\n\nconst normalizedMediaType = (mediaType?: string): string => mediaType?.split(\";\", 1)[0]?.trim().toLowerCase() ?? \"\";\n\nconst previewKindByType = (file: FileViewFile): FileViewPreviewKind | null => {\n const extension = fileViewExtension(file.path);\n const mediaType = normalizedMediaType(file.mediaType);\n\n if (mediaType === \"text/markdown\" || markdownExtensions.has(extension)) return \"markdown\";\n if (mediaType === \"application/json\" || mediaType.endsWith(\"+json\") || extension === \"json\") return \"json\";\n if (mediaType === \"text/csv\" || mediaType === \"text/tab-separated-values\" || extension === \"csv\" || extension === \"tsv\") {\n return \"delimited-text\";\n }\n if (mediaType === \"application/pdf\" || extension === \"pdf\") return \"pdf\";\n if (imageMediaTypes.has(mediaType) || imageExtensions.has(extension)) return \"image\";\n if (audioMediaTypes.has(mediaType) || audioExtensions.has(extension)) return \"audio\";\n if (videoMediaTypes.has(mediaType) || videoExtensions.has(extension)) return \"video\";\n if (\n mediaType.startsWith(\"text/\") ||\n mediaType === \"application/javascript\" ||\n mediaType === \"application/sql\" ||\n mediaType === \"application/xml\" ||\n textExtensions.has(extension)\n ) {\n return \"text\";\n }\n return null;\n};\n\n/**\n * Returns the built-in preview kind when FileView can render the file within\n * its bounded client-side limits. Custom renderers remain registry-driven.\n */\nexport const getFileViewPreviewKind = (file: FileViewFile): FileViewPreviewKind | null => {\n const kind = previewKindByType(file);\n if (!kind) return null;\n if (file.size !== undefined && (!Number.isFinite(file.size) || file.size < 0 || file.size > maxPreviewBytes[kind])) {\n return null;\n }\n return kind;\n};\n\n/** Use this to expose preview actions only for files FileView can render. */\nexport const canPreviewFile = (file: FileViewFile): boolean => getFileViewPreviewKind(file) !== null;\n\nexport type DelimitedTextPreview = {\n rows: string[][];\n truncated: boolean;\n};\n\nexport const parseDelimitedText = (\n input: string,\n delimiter: \",\" | \"\\t\",\n limits: { rows?: number; columns?: number } = {},\n): DelimitedTextPreview => {\n const maxRows = Math.max(1, limits.rows ?? 201);\n const maxColumns = Math.max(1, limits.columns ?? 50);\n const rows: string[][] = [];\n let row: string[] = [];\n let field = \"\";\n let quoted = false;\n let truncated = false;\n\n const pushField = () => {\n if (row.length < maxColumns) row.push(field);\n else truncated = true;\n field = \"\";\n };\n const pushRow = () => {\n if (rows.length < maxRows) rows.push(row);\n else truncated = true;\n row = [];\n };\n\n for (let index = 0; index < input.length; index += 1) {\n const character = input[index]!;\n if (quoted) {\n if (character === '\"' && input[index + 1] === '\"') {\n field += '\"';\n index += 1;\n } else if (character === '\"') {\n quoted = false;\n } else {\n field += character;\n }\n continue;\n }\n\n if (character === '\"' && field.length === 0) quoted = true;\n else if (character === delimiter) pushField();\n else if (character === \"\\n\" || character === \"\\r\") {\n pushField();\n pushRow();\n if (character === \"\\r\" && input[index + 1] === \"\\n\") index += 1;\n if (rows.length >= maxRows && index < input.length - 1) {\n truncated = true;\n break;\n }\n } else {\n field += character;\n }\n }\n\n if (field.length > 0 || row.length > 0) {\n pushField();\n pushRow();\n }\n\n return { rows, truncated };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["MEBIBYTE","maxPreviewBytes","markdown","image","pdf","json","audio","video","text","imageMediaTypes","Set","audioMediaTypes","videoMediaTypes","markdownExtensions","imageExtensions","audioExtensions","videoExtensions","textExtensions","fileViewExtension","path","cleanPath","split","name","slice","lastIndexOf","dot","toLowerCase","normalizedMediaType","mediaType","trim","previewKindByType","file","extension","has","endsWith","startsWith","getFileViewPreviewKind","kind","size","undefined","Number","isFinite","canPreviewFile","parseDelimitedText","input","delimiter","limits","maxRows","Math","max","rows","maxColumns","columns","row","field","quoted","truncated","totalRows","columnsTruncated","pushField","length","push","pushRow","offset","index","character"],"sources":["content/file-view-preview.ts"],"sourcesContent":["export type FileViewFile = {\n path: string;\n mediaType?: string;\n size?: number;\n};\n\nexport type FileViewPreviewKind = \"markdown\" | \"image\" | \"pdf\" | \"json\" | \"delimited-text\" | \"audio\" | \"video\" | \"text\";\n\nconst MEBIBYTE = 1024 * 1024;\n\nconst maxPreviewBytes: Record<FileViewPreviewKind, number> = {\n markdown: 2 * MEBIBYTE,\n image: 25 * MEBIBYTE,\n pdf: 50 * MEBIBYTE,\n json: 2 * MEBIBYTE,\n \"delimited-text\": 2 * MEBIBYTE,\n audio: 50 * MEBIBYTE,\n video: 50 * MEBIBYTE,\n text: 2 * MEBIBYTE,\n};\n\n// SVG remains inert because FileView renders every image through <img>; never inject its markup into the DOM.\nconst imageMediaTypes = new Set([\n \"image/avif\",\n \"image/bmp\",\n \"image/gif\",\n \"image/jpeg\",\n \"image/png\",\n \"image/svg+xml\",\n \"image/webp\",\n \"image/x-icon\",\n]);\nconst audioMediaTypes = new Set([\n \"audio/aac\",\n \"audio/flac\",\n \"audio/mp4\",\n \"audio/mpeg\",\n \"audio/ogg\",\n \"audio/wav\",\n \"audio/webm\",\n \"audio/x-wav\",\n]);\nconst videoMediaTypes = new Set([\"video/mp4\", \"video/ogg\", \"video/webm\"]);\n\nconst markdownExtensions = new Set([\"md\", \"markdown\"]);\nconst imageExtensions = new Set([\"avif\", \"bmp\", \"gif\", \"ico\", \"jpeg\", \"jpg\", \"png\", \"svg\", \"webp\"]);\nconst audioExtensions = new Set([\"aac\", \"flac\", \"m4a\", \"mp3\", \"oga\", \"ogg\", \"wav\", \"weba\"]);\nconst videoExtensions = new Set([\"m4v\", \"mp4\", \"ogv\", \"webm\"]);\nconst textExtensions = new Set([\n \"c\",\n \"conf\",\n \"cpp\",\n \"css\",\n \"env\",\n \"go\",\n \"h\",\n \"html\",\n \"ini\",\n \"java\",\n \"js\",\n \"jsx\",\n \"log\",\n \"mjs\",\n \"php\",\n \"py\",\n \"rb\",\n \"rs\",\n \"sh\",\n \"sql\",\n \"toml\",\n \"ts\",\n \"tsx\",\n \"txt\",\n \"xml\",\n \"yaml\",\n \"yml\",\n]);\n\nexport const fileViewExtension = (path: string): string => {\n const cleanPath = path.split(/[?#]/, 1)[0] ?? path;\n const name = cleanPath.slice(cleanPath.lastIndexOf(\"/\") + 1);\n const dot = name.lastIndexOf(\".\");\n return dot > 0 ? name.slice(dot + 1).toLowerCase() : \"\";\n};\n\nconst normalizedMediaType = (mediaType?: string): string => mediaType?.split(\";\", 1)[0]?.trim().toLowerCase() ?? \"\";\n\nconst previewKindByType = (file: FileViewFile): FileViewPreviewKind | null => {\n const extension = fileViewExtension(file.path);\n const mediaType = normalizedMediaType(file.mediaType);\n\n if (mediaType === \"text/markdown\" || markdownExtensions.has(extension)) return \"markdown\";\n if (mediaType === \"application/json\" || mediaType.endsWith(\"+json\") || extension === \"json\") return \"json\";\n if (mediaType === \"text/csv\" || mediaType === \"text/tab-separated-values\" || extension === \"csv\" || extension === \"tsv\") {\n return \"delimited-text\";\n }\n if (mediaType === \"application/pdf\" || extension === \"pdf\") return \"pdf\";\n if (imageMediaTypes.has(mediaType) || imageExtensions.has(extension)) return \"image\";\n if (audioMediaTypes.has(mediaType) || audioExtensions.has(extension)) return \"audio\";\n if (videoMediaTypes.has(mediaType) || videoExtensions.has(extension)) return \"video\";\n if (\n mediaType.startsWith(\"text/\") ||\n mediaType === \"application/javascript\" ||\n mediaType === \"application/sql\" ||\n mediaType === \"application/xml\" ||\n textExtensions.has(extension)\n ) {\n return \"text\";\n }\n return null;\n};\n\n/**\n * Returns the built-in preview kind when FileView can render the file within\n * its bounded client-side limits. Custom renderers remain registry-driven.\n */\nexport const getFileViewPreviewKind = (file: FileViewFile): FileViewPreviewKind | null => {\n const kind = previewKindByType(file);\n if (!kind) return null;\n if (file.size !== undefined && (!Number.isFinite(file.size) || file.size < 0 || file.size > maxPreviewBytes[kind])) {\n return null;\n }\n return kind;\n};\n\n/** Use this to expose preview actions only for files FileView can render. */\nexport const canPreviewFile = (file: FileViewFile): boolean => getFileViewPreviewKind(file) !== null;\n\nexport type DelimitedTextPreview = {\n rows: string[][];\n truncated: boolean;\n totalRows: number;\n columnsTruncated: boolean;\n};\n\nexport const parseDelimitedText = (\n input: string,\n delimiter: string,\n limits: { rows?: number; columns?: number; offset?: number } = {},\n): DelimitedTextPreview => {\n const maxRows = Math.max(1, limits.rows ?? 201);\n const maxColumns = Math.max(1, limits.columns ?? 50);\n const rows: string[][] = [];\n let row: string[] = [];\n let field = \"\";\n let quoted = false;\n let truncated = false;\n let totalRows = 0;\n let columnsTruncated = false;\n\n const pushField = () => {\n if (row.length < maxColumns) row.push(field);\n else { truncated = true; columnsTruncated = true; }\n field = \"\";\n };\n const pushRow = () => {\n if (rows.length < maxRows && (totalRows === 0 || totalRows > (limits.offset ?? 0))) rows.push(row);\n else truncated = true;\n totalRows++;\n row = [];\n };\n\n for (let index = 0; index < input.length; index += 1) {\n const character = input[index]!;\n if (quoted) {\n if (character === '\"' && input[index + 1] === '\"') {\n field += '\"';\n index += 1;\n } else if (character === '\"') {\n quoted = false;\n } else {\n field += character;\n }\n continue;\n }\n\n if (character === '\"' && field.length === 0) quoted = true;\n else if (character === delimiter) pushField();\n else if (character === \"\\n\" || character === \"\\r\") {\n pushField();\n pushRow();\n if (character === \"\\r\" && input[index + 1] === \"\\n\") index += 1;\n } else {\n field += character;\n }\n }\n\n if (field.length > 0 || row.length > 0) {\n pushField();\n pushRow();\n }\n\n return { rows, truncated, totalRows, columnsTruncated };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -13,4 +13,13 @@ export { Pagination } from "./Pagination";
13
13
  export { default as PdfPreview } from "./PdfPreview";
14
14
  export { default as RangePicker } from "./RangePicker";
15
15
  export { default as StructuredDataPreview, isStructuredDataValue } from "./StructuredDataPreview";
16
+ export { ChartExplorer } from "./ChartExplorer";
17
+ export { prepareChartSnapshot } from "./chart-snapshot";
18
+ export { createChartExplorer } from "./chart-explorer";
19
+ export { ChartExplorerControls } from "./ChartExplorerControls";
20
+ export { createChartCursor } from "./chart-cursor";
21
+ export { ChartSnapshotView } from "./ChartSnapshotView";
22
+ export { ChartFilterControls } from "./ChartFilterControls";
23
+ export { createCollectionSelection } from "./collection-selection";
24
+ export { FileGrid } from "./FileGrid";
16
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["default","Calendar","Chart","CodeDisplay","DataTable","DocCode","DocConceptGrid","DocInlineCode","DocLead","DocNote","DocPage","DocRows","DocSection","FileBrowserPanel","openFileBrowser","FileTree","canPreviewFile","FileView","formatFileViewSize","getFileViewPreviewKind","Lightbox","LogEntriesTable","MarkdownView","renderSafeMarkdown","Pagination","PdfPreview","RangePicker","StructuredDataPreview","isStructuredDataValue"],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarLabels,\n CalendarProps,\n CalendarRecurrence,\n CalendarResource,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\n\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\n\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\n\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\n\nexport type { LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\n\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { default as MarkdownView, renderSafeMarkdown, type MarkdownRenderOptions, type MarkdownViewProps } from \"./MarkdownView\";\n\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\n"],"mappings":"AAaA,SAASA,OAAO,IAAIC,QAAQ,QAAQ,YAAY;AAGhD,SAASD,OAAO,IAAIE,KAAK,QAAQ,SAAS;AAE1C,SAASF,OAAO,IAAIG,WAAW,QAAQ,eAAe;AAqBtD,SAASH,OAAO,IAAII,SAAS,QAAQ,aAAa;AAGlD,SAASC,OAAO,EAAEC,cAAc,EAAEC,aAAa,EAAEC,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAEC,UAAU,QAAQ,QAAQ;AAE/G,SAASC,gBAAgB,EAA+CC,eAAe,QAAQ,eAAe;AAC9G,SAASd,OAAO,IAAIe,QAAQ,QAAsE,YAAY;AAC9G,SACEC,cAAc,EACdhB,OAAO,IAAIiB,QAAQ,EAOnBC,kBAAkB,EAClBC,sBAAsB,QACjB,YAAY;AAGnB,SAASnB,OAAO,IAAIoB,QAAQ,QAAQ,YAAY;AAGhD,SAASpB,OAAO,IAAIqB,eAAe,QAAQ,mBAAmB;AAC9D,SAASrB,OAAO,IAAIsB,YAAY,EAAEC,kBAAkB,QAA4D,gBAAgB;AAEhI,SAASC,UAAU,QAA8B,cAAc;AAE/D,SAASxB,OAAO,IAAIyB,UAAU,QAAQ,cAAc;AAEpD,SAASzB,OAAO,IAAI0B,WAAW,QAAQ,eAAe;AAEtD,SAAS1B,OAAO,IAAI2B,qBAAqB,EAAEC,qBAAqB,QAAQ,yBAAyB","ignoreList":[]}
1
+ {"version":3,"names":["default","Calendar","Chart","CodeDisplay","DataTable","DocCode","DocConceptGrid","DocInlineCode","DocLead","DocNote","DocPage","DocRows","DocSection","FileBrowserPanel","openFileBrowser","FileTree","canPreviewFile","FileView","formatFileViewSize","getFileViewPreviewKind","Lightbox","LogEntriesTable","MarkdownView","renderSafeMarkdown","Pagination","PdfPreview","RangePicker","StructuredDataPreview","isStructuredDataValue","ChartExplorer","prepareChartSnapshot","createChartExplorer","ChartExplorerControls","createChartCursor","ChartSnapshotView","ChartFilterControls","createCollectionSelection","FileGrid"],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarLabels,\n CalendarProps,\n CalendarRecurrence,\n CalendarResource,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection\";\nexport { default as Chart } from \"./Chart\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\n\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\n\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\n\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\n\nexport type { LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\n\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { default as MarkdownView, renderSafeMarkdown, type MarkdownRenderOptions, type MarkdownViewProps } from \"./MarkdownView\";\n\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\n\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerProps, ChartExplorerColumn } from \"./ChartExplorer\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type {\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerData,\n ChartExplorerCharts,\n ChartExplorerSnapshot,\n ChartExplorerOptions,\n ChartExplorerController,\n} from \"./chart-explorer\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\n\nexport { createChartCursor, type ChartCursor } from \"./chart-cursor\";\n\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\n\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\n"],"mappings":"AAaA,SAASA,OAAO,IAAIC,QAAQ,QAAQ,YAAY;AAIhD,SAASD,OAAO,IAAIE,KAAK,QAAQ,SAAS;AAE1C,SAASF,OAAO,IAAIG,WAAW,QAAQ,eAAe;AAqBtD,SAASH,OAAO,IAAII,SAAS,QAAQ,aAAa;AAGlD,SAASC,OAAO,EAAEC,cAAc,EAAEC,aAAa,EAAEC,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAEC,UAAU,QAAQ,QAAQ;AAE/G,SAASC,gBAAgB,EAA+CC,eAAe,QAAQ,eAAe;AAC9G,SAASd,OAAO,IAAIe,QAAQ,QAAsE,YAAY;AAC9G,SACEC,cAAc,EACdhB,OAAO,IAAIiB,QAAQ,EAOnBC,kBAAkB,EAClBC,sBAAsB,QACjB,YAAY;AAGnB,SAASnB,OAAO,IAAIoB,QAAQ,QAAQ,YAAY;AAGhD,SAASpB,OAAO,IAAIqB,eAAe,QAAQ,mBAAmB;AAC9D,SAASrB,OAAO,IAAIsB,YAAY,EAAEC,kBAAkB,QAA4D,gBAAgB;AAEhI,SAASC,UAAU,QAA8B,cAAc;AAE/D,SAASxB,OAAO,IAAIyB,UAAU,QAAQ,cAAc;AAEpD,SAASzB,OAAO,IAAI0B,WAAW,QAAQ,eAAe;AAEtD,SAAS1B,OAAO,IAAI2B,qBAAqB,EAAEC,qBAAqB,QAAQ,yBAAyB;AAEjG,SAASC,aAAa,QAAQ,iBAAiB;AAE/C,SAASC,oBAAoB,QAAQ,kBAAkB;AAEvD,SAASC,mBAAmB,QAAQ,kBAAkB;AAUtD,SAASC,qBAAqB,QAAQ,yBAAyB;AAG/D,SAASC,iBAAiB,QAA0B,gBAAgB;AAEpE,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,mBAAmB,QAAuC,uBAAuB;AAE1F,SAAmCC,yBAAyB,QAAiC,wBAAwB;AACrH,SAASC,QAAQ,QAA4B,YAAY","ignoreList":[]}
@@ -13,23 +13,37 @@ var _tmpl$ = /*#__PURE__*/_$template(`<div><!$><!/><div class=k2b-inline-guidanc
13
13
  _tmpl$2 = /*#__PURE__*/_$template(`<i aria-hidden=true>`);
14
14
  import { Show, splitProps } from "solid-js";
15
15
  export function InlineGuidance(props) {
16
- const [local, rest] = splitProps(props, ["children", "tone", "icon", "class"]);
16
+ const [local, rest] = splitProps(props, ["children", "tone", "icon", "class", "loading"]);
17
+ const icon = () => local.icon ?? (local.loading ? "ti ti-loader-2" : undefined);
17
18
  return (() => {
18
19
  var _el$ = _$getNextElement(_tmpl$),
19
20
  _el$3 = _el$.firstChild,
20
21
  [_el$4, _co$] = _$getNextMarker(_el$3.nextSibling),
21
22
  _el$2 = _el$4.nextSibling;
22
- _$spread(_el$, _$mergeProps(rest, {
23
+ _$spread(_el$, _$mergeProps({
24
+ get role() {
25
+ return local.loading ? "status" : undefined;
26
+ },
27
+ get ["aria-live"]() {
28
+ return local.loading ? "polite" : undefined;
29
+ },
30
+ get ["aria-busy"]() {
31
+ return local.loading ? "true" : undefined;
32
+ }
33
+ }, rest, {
23
34
  get ["class"]() {
24
35
  return _$memo(() => !!local.class)() ? `k2b-inline-guidance ${local.class}` : "k2b-inline-guidance";
25
36
  },
26
37
  get ["data-tone"]() {
27
38
  return local.tone ?? "neutral";
39
+ },
40
+ get ["data-loading"]() {
41
+ return local.loading ? "true" : undefined;
28
42
  }
29
43
  }), false, true);
30
44
  _$insert(_el$, _$createComponent(Show, {
31
45
  get when() {
32
- return local.icon;
46
+ return icon();
33
47
  },
34
48
  children: icon => (() => {
35
49
  var _el$5 = _$getNextElement(_tmpl$2);
@@ -1 +1 @@
1
- {"version":3,"names":["Show","splitProps","InlineGuidance","props","local","rest","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","_$spread","_$mergeProps","class","_$memo","data-tone","tone","_$insert","_$createComponent","when","icon","children","_el$5","_tmpl$2","_$effect","_$className","_$runHydrationEvents"],"sources":["feedback/InlineGuidance.tsx"],"sourcesContent":["import { type JSX, Show, splitProps } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type InlineGuidanceProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\"> & {\n children: JSX.Element;\n tone?: IntentTone;\n icon?: string | false;\n class?: string;\n};\n\nexport function InlineGuidance(props: InlineGuidanceProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"tone\", \"icon\", \"class\"]);\n\n return (\n <div {...rest} class={local.class ? `k2b-inline-guidance ${local.class}` : \"k2b-inline-guidance\"} data-tone={local.tone ?? \"neutral\"}>\n <Show when={local.icon}>{(icon) => <i class={`${icon()} k2b-inline-guidance__icon`} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-inline-guidance__content\">{local.children}</div>\n </div>\n );\n}\n\nexport default InlineGuidance;\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAmBA,IAAI,EAAEC,UAAU,QAAQ,UAAU;AAUrD,OAAO,SAASC,cAAcA,CAACC,KAA0B,EAAe;EACtE,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGJ,UAAU,CAACE,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;EAE9E;IAAA,IAAAG,IAAA,GAAAC,gBAAA,CAAAC,MAAA;MAAAC,KAAA,GAAAH,IAAA,CAAAI,UAAA;MAAA,CAAAC,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAJ,KAAA,CAAAK,WAAA;MAAAC,KAAA,GAAAJ,KAAA,CAAAG,WAAA;IAAAE,QAAA,CAAAV,IAAA,EAAAW,YAAA,CACWZ,IAAI;MAAA,aAAAa,CAAA;QAAA,OAASC,MAAA,SAAAf,KAAK,CAACc,KAAK,MAAG,uBAAuBd,KAAK,CAACc,KAAK,EAAE,GAAG,qBAAqB;MAAA;MAAA,iBAAAE,CAAA;QAAA,OAAahB,KAAK,CAACiB,IAAI,IAAI,SAAS;MAAA;IAAA;IAAAC,QAAA,CAAAhB,IAAA,EAAAiB,iBAAA,CACjIvB,IAAI;MAAA,IAACwB,IAAIA,CAAA;QAAA,OAAEpB,KAAK,CAACqB,IAAI;MAAA;MAAAC,QAAA,EAAID,IAAI;QAAA,IAAAE,KAAA,GAAApB,gBAAA,CAAAqB,OAAA;QAAAC,QAAA,OAAAC,WAAA,CAAAH,KAAA,EAAe,GAAGF,IAAI,CAAC,CAAC,4BAA4B;QAAA,OAAAE,KAAA;MAAA;IAAuB,IAAAhB,KAAA,EAAAC,IAAA;IAAAU,QAAA,CAAAP,KAAA,QAC9DX,KAAK,CAACsB,QAAQ;IAAAK,oBAAA;IAAA,OAAAzB,IAAA;EAAA;AAG/D;AAEA,eAAeJ,cAAc","ignoreList":[]}
1
+ {"version":3,"names":["Show","splitProps","InlineGuidance","props","local","rest","icon","loading","undefined","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","_$spread","_$mergeProps","role","aria-live","aria-busy","class","_$memo","data-tone","tone","data-loading","_$insert","_$createComponent","when","children","_el$5","_tmpl$2","_$effect","_$className","_$runHydrationEvents"],"sources":["feedback/InlineGuidance.tsx"],"sourcesContent":["import { type JSX, Show, splitProps } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type InlineGuidanceProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\"> & {\n children: JSX.Element;\n tone?: IntentTone;\n loading?: boolean;\n icon?: string | false;\n class?: string;\n};\n\nexport function InlineGuidance(props: InlineGuidanceProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"tone\", \"icon\", \"class\", \"loading\"]);\n\n const icon = () => local.icon ?? (local.loading ? \"ti ti-loader-2\" : undefined);\n\n return (\n <div\n role={local.loading ? \"status\" : undefined}\n aria-live={local.loading ? \"polite\" : undefined}\n aria-busy={local.loading ? \"true\" : undefined}\n {...rest}\n class={local.class ? `k2b-inline-guidance ${local.class}` : \"k2b-inline-guidance\"}\n data-tone={local.tone ?? \"neutral\"}\n data-loading={local.loading ? \"true\" : undefined}\n >\n <Show when={icon()}>{(icon) => <i class={`${icon()} k2b-inline-guidance__icon`} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-inline-guidance__content\">{local.children}</div>\n </div>\n );\n}\n\nexport default InlineGuidance;\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAmBA,IAAI,EAAEC,UAAU,QAAQ,UAAU;AAWrD,OAAO,SAASC,cAAcA,CAACC,KAA0B,EAAe;EACtE,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGJ,UAAU,CAACE,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;EAEzF,MAAMG,IAAI,GAAGA,CAAA,KAAMF,KAAK,CAACE,IAAI,KAAKF,KAAK,CAACG,OAAO,GAAG,gBAAgB,GAAGC,SAAS,CAAC;EAE/E;IAAA,IAAAC,IAAA,GAAAC,gBAAA,CAAAC,MAAA;MAAAC,KAAA,GAAAH,IAAA,CAAAI,UAAA;MAAA,CAAAC,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAJ,KAAA,CAAAK,WAAA;MAAAC,KAAA,GAAAJ,KAAA,CAAAG,WAAA;IAAAE,QAAA,CAAAV,IAAA,EAAAW,YAAA;MAAA,IAEIC,IAAIA,CAAA;QAAA,OAAEjB,KAAK,CAACG,OAAO,GAAG,QAAQ,GAAGC,SAAS;MAAA;MAAA,iBAAAc,CAAA;QAAA,OAC/BlB,KAAK,CAACG,OAAO,GAAG,QAAQ,GAAGC,SAAS;MAAA;MAAA,iBAAAe,CAAA;QAAA,OACpCnB,KAAK,CAACG,OAAO,GAAG,MAAM,GAAGC,SAAS;MAAA;IAAA,GACzCH,IAAI;MAAA,aAAAmB,CAAA;QAAA,OACDC,MAAA,SAAArB,KAAK,CAACoB,KAAK,MAAG,uBAAuBpB,KAAK,CAACoB,KAAK,EAAE,GAAG,qBAAqB;MAAA;MAAA,iBAAAE,CAAA;QAAA,OACtEtB,KAAK,CAACuB,IAAI,IAAI,SAAS;MAAA;MAAA,oBAAAC,CAAA;QAAA,OACpBxB,KAAK,CAACG,OAAO,GAAG,MAAM,GAAGC,SAAS;MAAA;IAAA;IAAAqB,QAAA,CAAApB,IAAA,EAAAqB,iBAAA,CAE/C9B,IAAI;MAAA,IAAC+B,IAAIA,CAAA;QAAA,OAAEzB,IAAI,CAAC,CAAC;MAAA;MAAA0B,QAAA,EAAI1B,IAAI;QAAA,IAAA2B,KAAA,GAAAvB,gBAAA,CAAAwB,OAAA;QAAAC,QAAA,OAAAC,WAAA,CAAAH,KAAA,EAAe,GAAG3B,IAAI,CAAC,CAAC,4BAA4B;QAAA,OAAA2B,KAAA;MAAA;IAAuB,IAAAnB,KAAA,EAAAC,IAAA;IAAAc,QAAA,CAAAX,KAAA,QAC1Dd,KAAK,CAAC4B,QAAQ;IAAAK,oBAAA;IAAA,OAAA5B,IAAA;EAAA;AAG/D;AAEA,eAAeP,cAAc","ignoreList":[]}
@@ -4,6 +4,7 @@ import { getNextMarker as _$getNextMarker } from "solid-js/web";
4
4
  import { createComponent as _$createComponent } from "solid-js/web";
5
5
  import { spread as _$spread } from "solid-js/web";
6
6
  import { mergeProps as _$mergeProps } from "solid-js/web";
7
+ import { effect as _$effect } from "solid-js/web";
7
8
  import { getNextElement as _$getNextElement } from "solid-js/web";
8
9
  import { insert as _$insert } from "solid-js/web";
9
10
  import { setAttribute as _$setAttribute } from "solid-js/web";
@@ -49,7 +50,7 @@ function TooltipSurface(props) {
49
50
  const open = () => {
50
51
  clearTimer();
51
52
  if (props.disabled || dismissedUntilLeave || !surface || !target || surface.matches(":popover-open")) return;
52
- openTimer = setTimeout(() => {
53
+ const show = () => {
53
54
  openTimer = undefined;
54
55
  if (props.disabled || !surface?.isConnected || !target) return;
55
56
  try {
@@ -61,7 +62,9 @@ function TooltipSurface(props) {
61
62
  document.addEventListener("keydown", dismissOnEscape);
62
63
  window.addEventListener("scroll", close, true);
63
64
  window.addEventListener("resize", close);
64
- }, props.delay ?? 250);
65
+ };
66
+ const delay = props.delay ?? 250;
67
+ if (delay <= 0) show();else openTimer = setTimeout(show, delay);
65
68
  };
66
69
  createEffect(() => {
67
70
  if (props.disabled) close();
@@ -105,6 +108,7 @@ function TooltipSurface(props) {
105
108
  typeof _ref$ === "function" ? _$use(_ref$, _el$) : surface = _el$;
106
109
  _$setAttribute(_el$, "id", tooltipId);
107
110
  _$insert(_el$, () => props.content);
111
+ _$effect(() => _$setAttribute(_el$, "data-instant", props.delay !== undefined && props.delay <= 0 ? "true" : undefined));
108
112
  return _el$;
109
113
  })();
110
114
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createUniqueId","onCleanup","onMount","splitProps","positionTooltipSurface","TooltipSurface","props","tooltipId","surface","target","openTimer","dismissedUntilLeave","clearTimer","clearTimeout","undefined","dismissOnEscape","event","key","matches","close","hidePopover","document","removeEventListener","window","open","disabled","setTimeout","isConnected","showPopover","placement","addEventListener","delay","originalDescription","getAttribute","descriptions","Set","split","filter","Boolean","add","setAttribute","join","leave","focusOut","contains","relatedTarget","pointerDown","removeAttribute","_el$","_$getNextElement","_tmpl$","_ref$","_$use","_$setAttribute","_$insert","content","TooltipAnchor","local","rest","_el$2","_tmpl$2","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$5","_el$6","_co$2","_ref$2","_$spread","_$mergeProps","class","children","_$createComponent","_$runHydrationEvents","TooltipTrigger","register","element","ref","_el$7","_tmpl$3","Tooltip","Anchor","Trigger"],"sources":["feedback/Tooltip.tsx"],"sourcesContent":["import { createEffect, createUniqueId, type JSX, onCleanup, onMount, splitProps } from \"solid-js\";\nimport { positionTooltipSurface, type TooltipPlacement } from \"./tooltip-position\";\n\nexport type TooltipProps = {\n content: JSX.Element;\n target: () => HTMLElement | undefined;\n placement?: TooltipPlacement;\n delay?: number;\n disabled?: boolean;\n};\n\nexport type TooltipAnchorProps = Omit<JSX.HTMLAttributes<HTMLSpanElement>, \"content\"> & Omit<TooltipProps, \"target\">;\n\nexport type TooltipTriggerProps = Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"content\"> & Omit<TooltipProps, \"target\">;\n\n/**\n * Low-level tooltip surface for components that already own their target DOM\n * element. Most callers should use Button.tooltip, IconButton.tooltip, or\n * Tooltip.Anchor instead.\n */\nfunction TooltipSurface(props: TooltipProps): JSX.Element {\n const tooltipId = `k2b-tooltip-${createUniqueId()}`;\n let surface: HTMLSpanElement | undefined;\n let target: HTMLElement | undefined;\n let openTimer: ReturnType<typeof setTimeout> | undefined;\n let dismissedUntilLeave = false;\n\n const clearTimer = () => {\n if (openTimer) clearTimeout(openTimer);\n openTimer = undefined;\n };\n\n function dismissOnEscape(event: KeyboardEvent) {\n if (event.key !== \"Escape\" || !surface?.matches(\":popover-open\")) return;\n dismissedUntilLeave = true;\n close();\n }\n\n function close() {\n clearTimer();\n if (surface?.matches(\":popover-open\")) {\n try {\n surface.hidePopover();\n } catch {\n // The surface may disconnect during cleanup.\n }\n }\n document.removeEventListener(\"keydown\", dismissOnEscape);\n window.removeEventListener(\"scroll\", close, true);\n window.removeEventListener(\"resize\", close);\n }\n\n const open = () => {\n clearTimer();\n if (props.disabled || dismissedUntilLeave || !surface || !target || surface.matches(\":popover-open\")) return;\n openTimer = setTimeout(() => {\n openTimer = undefined;\n if (props.disabled || !surface?.isConnected || !target) return;\n try {\n surface.showPopover();\n } catch {\n return;\n }\n positionTooltipSurface(surface, target, props.placement);\n document.addEventListener(\"keydown\", dismissOnEscape);\n window.addEventListener(\"scroll\", close, true);\n window.addEventListener(\"resize\", close);\n }, props.delay ?? 250);\n };\n\n createEffect(() => {\n if (props.disabled) close();\n });\n\n onMount(() => {\n target = props.target();\n if (!target) return;\n\n const originalDescription = target.getAttribute(\"aria-describedby\");\n const descriptions = new Set(originalDescription?.split(/\\s+/).filter(Boolean) ?? []);\n descriptions.add(tooltipId);\n target.setAttribute(\"aria-describedby\", [...descriptions].join(\" \"));\n\n const leave = () => {\n dismissedUntilLeave = false;\n close();\n };\n const focusOut = (event: FocusEvent) => {\n if (!target?.contains(event.relatedTarget as Node | null)) leave();\n };\n const pointerDown = () => {\n dismissedUntilLeave = true;\n close();\n };\n\n target.addEventListener(\"pointerenter\", open);\n target.addEventListener(\"pointerleave\", leave);\n target.addEventListener(\"pointerdown\", pointerDown);\n target.addEventListener(\"focusin\", open);\n target.addEventListener(\"focusout\", focusOut);\n\n onCleanup(() => {\n close();\n if (originalDescription) target?.setAttribute(\"aria-describedby\", originalDescription);\n else target?.removeAttribute(\"aria-describedby\");\n target?.removeEventListener(\"pointerenter\", open);\n target?.removeEventListener(\"pointerleave\", leave);\n target?.removeEventListener(\"pointerdown\", pointerDown);\n target?.removeEventListener(\"focusin\", open);\n target?.removeEventListener(\"focusout\", focusOut);\n });\n });\n\n return (\n <span ref={surface} id={tooltipId} role=\"tooltip\" popover=\"manual\" class=\"k2b-tooltip\">\n {props.content}\n </span>\n );\n}\n\n/** Explicit tooltip target for non-button content. */\nfunction TooltipAnchor(props: TooltipAnchorProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"content\", \"delay\", \"disabled\", \"placement\"]);\n let target: HTMLSpanElement | undefined;\n\n return (\n <span {...rest} ref={target} class={`k2b-tooltip-wrapper ${local.class ?? \"\"}`}>\n {local.children}\n <TooltipSurface\n content={local.content}\n target={() => target}\n delay={local.delay}\n disabled={local.disabled}\n placement={local.placement}\n />\n </span>\n );\n}\n\n/** Native button target for specialized controls that do not use Button. */\nfunction TooltipTrigger(props: TooltipTriggerProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"content\", \"delay\", \"disabled\", \"placement\", \"ref\"]);\n let target: HTMLButtonElement | undefined;\n const register = (element: HTMLButtonElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n\n return (\n <>\n <button {...rest} ref={register} disabled={local.disabled}>\n {local.children}\n </button>\n <TooltipSurface\n content={local.content}\n target={() => target}\n delay={local.delay}\n disabled={local.disabled}\n placement={local.placement}\n />\n </>\n );\n}\n\ntype TooltipComponent = ((props: TooltipProps) => JSX.Element) & {\n Anchor: (props: TooltipAnchorProps) => JSX.Element;\n Trigger: (props: TooltipTriggerProps) => JSX.Element;\n};\n\nexport const Tooltip = TooltipSurface as TooltipComponent;\nTooltip.Anchor = TooltipAnchor;\nTooltip.Trigger = TooltipTrigger;\n\nexport type { TooltipPlacement } from \"./tooltip-position\";\n\nexport default Tooltip;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createEffect","createUniqueId","onCleanup","onMount","splitProps","positionTooltipSurface","TooltipSurface","props","tooltipId","surface","target","openTimer","dismissedUntilLeave","clearTimer","clearTimeout","undefined","dismissOnEscape","event","key","matches","close","hidePopover","document","removeEventListener","window","open","disabled","show","isConnected","showPopover","placement","addEventListener","delay","setTimeout","originalDescription","getAttribute","descriptions","Set","split","filter","Boolean","add","setAttribute","join","leave","focusOut","contains","relatedTarget","pointerDown","removeAttribute","_el$","_$getNextElement","_tmpl$","_ref$","_$use","_$setAttribute","_$insert","content","_$effect","TooltipAnchor","local","rest","_el$2","_tmpl$2","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$5","_el$6","_co$2","_ref$2","_$spread","_$mergeProps","class","children","_$createComponent","_$runHydrationEvents","TooltipTrigger","register","element","ref","_el$7","_tmpl$3","Tooltip","Anchor","Trigger"],"sources":["feedback/Tooltip.tsx"],"sourcesContent":["import { createEffect, createUniqueId, type JSX, onCleanup, onMount, splitProps } from \"solid-js\";\nimport { positionTooltipSurface, type TooltipPlacement } from \"./tooltip-position\";\n\nexport type TooltipProps = {\n content: JSX.Element;\n target: () => HTMLElement | undefined;\n placement?: TooltipPlacement;\n delay?: number;\n disabled?: boolean;\n};\n\nexport type TooltipAnchorProps = Omit<JSX.HTMLAttributes<HTMLSpanElement>, \"content\"> & Omit<TooltipProps, \"target\">;\n\nexport type TooltipTriggerProps = Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"content\"> & Omit<TooltipProps, \"target\">;\n\n/**\n * Low-level tooltip surface for components that already own their target DOM\n * element. Most callers should use Button.tooltip, IconButton.tooltip, or\n * Tooltip.Anchor instead.\n */\nfunction TooltipSurface(props: TooltipProps): JSX.Element {\n const tooltipId = `k2b-tooltip-${createUniqueId()}`;\n let surface: HTMLSpanElement | undefined;\n let target: HTMLElement | undefined;\n let openTimer: ReturnType<typeof setTimeout> | undefined;\n let dismissedUntilLeave = false;\n\n const clearTimer = () => {\n if (openTimer) clearTimeout(openTimer);\n openTimer = undefined;\n };\n\n function dismissOnEscape(event: KeyboardEvent) {\n if (event.key !== \"Escape\" || !surface?.matches(\":popover-open\")) return;\n dismissedUntilLeave = true;\n close();\n }\n\n function close() {\n clearTimer();\n if (surface?.matches(\":popover-open\")) {\n try {\n surface.hidePopover();\n } catch {\n // The surface may disconnect during cleanup.\n }\n }\n document.removeEventListener(\"keydown\", dismissOnEscape);\n window.removeEventListener(\"scroll\", close, true);\n window.removeEventListener(\"resize\", close);\n }\n\n const open = () => {\n clearTimer();\n if (props.disabled || dismissedUntilLeave || !surface || !target || surface.matches(\":popover-open\")) return;\n const show = () => {\n openTimer = undefined;\n if (props.disabled || !surface?.isConnected || !target) return;\n try {\n surface.showPopover();\n } catch {\n return;\n }\n positionTooltipSurface(surface, target, props.placement);\n document.addEventListener(\"keydown\", dismissOnEscape);\n window.addEventListener(\"scroll\", close, true);\n window.addEventListener(\"resize\", close);\n };\n const delay = props.delay ?? 250;\n if (delay <= 0) show();\n else openTimer = setTimeout(show, delay);\n };\n\n createEffect(() => {\n if (props.disabled) close();\n });\n\n onMount(() => {\n target = props.target();\n if (!target) return;\n\n const originalDescription = target.getAttribute(\"aria-describedby\");\n const descriptions = new Set(originalDescription?.split(/\\s+/).filter(Boolean) ?? []);\n descriptions.add(tooltipId);\n target.setAttribute(\"aria-describedby\", [...descriptions].join(\" \"));\n\n const leave = () => {\n dismissedUntilLeave = false;\n close();\n };\n const focusOut = (event: FocusEvent) => {\n if (!target?.contains(event.relatedTarget as Node | null)) leave();\n };\n const pointerDown = () => {\n dismissedUntilLeave = true;\n close();\n };\n\n target.addEventListener(\"pointerenter\", open);\n target.addEventListener(\"pointerleave\", leave);\n target.addEventListener(\"pointerdown\", pointerDown);\n target.addEventListener(\"focusin\", open);\n target.addEventListener(\"focusout\", focusOut);\n\n onCleanup(() => {\n close();\n if (originalDescription) target?.setAttribute(\"aria-describedby\", originalDescription);\n else target?.removeAttribute(\"aria-describedby\");\n target?.removeEventListener(\"pointerenter\", open);\n target?.removeEventListener(\"pointerleave\", leave);\n target?.removeEventListener(\"pointerdown\", pointerDown);\n target?.removeEventListener(\"focusin\", open);\n target?.removeEventListener(\"focusout\", focusOut);\n });\n });\n\n return (\n <span\n ref={surface}\n id={tooltipId}\n role=\"tooltip\"\n popover=\"manual\"\n class=\"k2b-tooltip\"\n data-instant={props.delay !== undefined && props.delay <= 0 ? \"true\" : undefined}\n >\n {props.content}\n </span>\n );\n}\n\n/** Explicit tooltip target for non-button content. */\nfunction TooltipAnchor(props: TooltipAnchorProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"content\", \"delay\", \"disabled\", \"placement\"]);\n let target: HTMLSpanElement | undefined;\n\n return (\n <span {...rest} ref={target} class={`k2b-tooltip-wrapper ${local.class ?? \"\"}`}>\n {local.children}\n <TooltipSurface\n content={local.content}\n target={() => target}\n delay={local.delay}\n disabled={local.disabled}\n placement={local.placement}\n />\n </span>\n );\n}\n\n/** Native button target for specialized controls that do not use Button. */\nfunction TooltipTrigger(props: TooltipTriggerProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"content\", \"delay\", \"disabled\", \"placement\", \"ref\"]);\n let target: HTMLButtonElement | undefined;\n const register = (element: HTMLButtonElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n\n return (\n <>\n <button {...rest} ref={register} disabled={local.disabled}>\n {local.children}\n </button>\n <TooltipSurface\n content={local.content}\n target={() => target}\n delay={local.delay}\n disabled={local.disabled}\n placement={local.placement}\n />\n </>\n );\n}\n\ntype TooltipComponent = ((props: TooltipProps) => JSX.Element) & {\n Anchor: (props: TooltipAnchorProps) => JSX.Element;\n Trigger: (props: TooltipTriggerProps) => JSX.Element;\n};\n\nexport const Tooltip = TooltipSurface as TooltipComponent;\nTooltip.Anchor = TooltipAnchor;\nTooltip.Trigger = TooltipTrigger;\n\nexport type { TooltipPlacement } from \"./tooltip-position\";\n\nexport default Tooltip;\n"],"mappings":"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","ignoreList":[]}
@@ -10,7 +10,8 @@ const resolveInitialFocusTarget = (entry, dialog) => {
10
10
  } = entry;
11
11
  if (initialFocus === "none") return null;
12
12
  if (typeof initialFocus === "function") return initialFocus(dialog);
13
- return entry.container.querySelector("input:not([type='hidden']):not([disabled]), textarea:not([disabled]), select:not([disabled]), button:not([disabled]), a[href], [tabindex]:not([tabindex='-1'])");
13
+ const input = entry.container.querySelector("input:not([type='hidden']):not([disabled]), textarea:not([disabled]), select:not([disabled]), [role='combobox']:not([disabled]):not([aria-disabled='true'])");
14
+ return input ?? entry.container.querySelector("input:not([type='hidden']):not([disabled]), textarea:not([disabled]), select:not([disabled]), button:not([disabled]), a[href], [tabindex]:not([tabindex='-1'])");
14
15
  };
15
16
  const applyAccessibleName = (dialog, entry) => {
16
17
  dialog.removeAttribute("aria-label");
@@ -41,6 +42,14 @@ export const createDialogCore = () => {
41
42
  // into another `.k2b-ui` scope, orphaning the levels already on the stack.
42
43
  if (state.element?.isConnected) return state.element;
43
44
  const element = document.createElement("dialog");
45
+ element.onclose = () => {
46
+ // Repeated Escape can force a non-cancelable native close. A retained
47
+ // entry (ignore, an async guard, or a parent) still owns the modal.
48
+ const top = state.stack[state.stack.length - 1];
49
+ if (state.element !== element || element.open || !top) return;
50
+ if (top.modal) element.showModal();else element.show();
51
+ resolveInitialFocusTarget(top, element)?.focus();
52
+ };
44
53
  getK2bPortalRoot().appendChild(element);
45
54
  state.element = element;
46
55
  return element;
@@ -61,7 +70,39 @@ export const createDialogCore = () => {
61
70
  state.previousBodyOverflow = undefined;
62
71
  state.previousHtmlOverflow = undefined;
63
72
  };
73
+ const applyPresentation = entry => {
74
+ const dialog = state.element;
75
+ if (!dialog || state.stack[state.stack.length - 1] !== entry) return;
76
+ const position = entry.position;
77
+ dialog.style.position = position ? "fixed" : "";
78
+ dialog.style.inset = position ? `${position.y}px auto auto ${position.x}px` : "";
79
+ dialog.style.margin = position ? "0" : "";
80
+ dialog.style.transform = position ? "none" : "";
81
+ dialog.dataset.modeless = String(!entry.modal);
82
+ dialog.setAttribute("aria-modal", String(entry.modal));
83
+ if (dialog.open && state.modal !== entry.modal) {
84
+ const active = document.activeElement;
85
+ dialog.close();
86
+ if (entry.modal) dialog.showModal();else dialog.show();
87
+ if (active instanceof HTMLElement && active.isConnected && (!entry.modal || dialog.contains(active))) {
88
+ active.focus({
89
+ preventScroll: true
90
+ });
91
+ } else resolveInitialFocusTarget(entry, dialog)?.focus({
92
+ preventScroll: true
93
+ });
94
+ }
95
+ state.modal = entry.modal;
96
+ if (entry.modal) lockPageScroll();else unlockPageScroll();
97
+ };
98
+ const modelessEscape = event => {
99
+ const top = state.stack[state.stack.length - 1];
100
+ if (!top || top.modal || event.key !== "Escape" || event.defaultPrevented || event.isComposing) return;
101
+ event.preventDefault();
102
+ void requestDismiss(top);
103
+ };
64
104
  const stopConnectionObserver = () => {
105
+ document.removeEventListener("keydown", modelessEscape);
65
106
  state.connectionObserver?.disconnect();
66
107
  state.connectionObserver = undefined;
67
108
  };
@@ -80,13 +121,29 @@ export const createDialogCore = () => {
80
121
  dialog.onclick = event => {
81
122
  const realBackdropClick = state.mouseDownOnDialog === true;
82
123
  state.mouseDownOnDialog = false;
83
- if (event.target !== dialog) return;
124
+ if (event.target !== dialog || !state.modal) return;
84
125
  if (!realBackdropClick) return;
85
126
  if (behavior === "ignore") return;
86
127
  if (isPointInsideToast(event.clientX, event.clientY)) return;
87
128
  close();
88
129
  };
89
130
  };
131
+ const requestDismiss = async entry => {
132
+ if (state.stack[state.stack.length - 1] !== entry || entry.dismissPending || entry.cancelBehavior === "ignore") return;
133
+ if (!entry.dismissHandler) {
134
+ popTop(undefined);
135
+ return;
136
+ }
137
+ entry.dismissPending = true;
138
+ try {
139
+ await entry.dismissHandler();
140
+ } catch (error) {
141
+ // A failed guard must never discard the dialog's state.
142
+ console.error("Dialog dismissal failed", error);
143
+ } finally {
144
+ entry.dismissPending = false;
145
+ }
146
+ };
90
147
  const popTop = result => {
91
148
  const top = state.stack.pop();
92
149
  if (!top) return;
@@ -97,8 +154,9 @@ export const createDialogCore = () => {
97
154
  if (previous && dialog) {
98
155
  previous.container.style.display = "";
99
156
  dialog.className = previous.panelClassName;
157
+ applyPresentation(previous);
100
158
  applyAccessibleName(dialog, previous);
101
- applyCancelBehavior(dialog, () => popTop(undefined), previous.cancelBehavior);
159
+ applyCancelBehavior(dialog, () => void requestDismiss(previous), previous.cancelBehavior);
102
160
  schedule(() => {
103
161
  const target = top.opener?.isConnected ? top.opener : resolveInitialFocusTarget(previous, dialog);
104
162
  target?.focus();
@@ -136,6 +194,7 @@ export const createDialogCore = () => {
136
194
  };
137
195
  const observeConnection = () => {
138
196
  if (state.connectionObserver || typeof MutationObserver === "undefined") return;
197
+ document.addEventListener("keydown", modelessEscape);
139
198
  state.connectionObserver = new MutationObserver(resetDisconnectedDialog);
140
199
  state.connectionObserver.observe(document.documentElement, {
141
200
  childList: true,
@@ -143,6 +202,7 @@ export const createDialogCore = () => {
143
202
  });
144
203
  };
145
204
  const open = (view, options = {}) => {
205
+ if (options.signal?.aborted) return Promise.resolve(undefined);
146
206
  const dialog = ensureDialogElement();
147
207
  const previousTop = state.stack[state.stack.length - 1];
148
208
  if (previousTop) previousTop.container.style.display = "none";
@@ -160,10 +220,24 @@ export const createDialogCore = () => {
160
220
  cancelBehavior,
161
221
  initialFocus,
162
222
  opener: activeElement instanceof HTMLElement ? activeElement : undefined,
163
- ariaLabel: options.ariaLabel
223
+ ariaLabel: options.ariaLabel,
224
+ modal: true
164
225
  };
165
226
  return new Promise((resolve, reject) => {
166
- entry.resolve = value => resolve(value);
227
+ const abort = () => {
228
+ const index = state.stack.indexOf(entry);
229
+ if (index < 0) return;
230
+ if (index === state.stack.length - 1) popTop(undefined);else {
231
+ state.stack.splice(index, 1);
232
+ entry.dispose?.();
233
+ entry.container.remove();
234
+ entry.resolve?.(undefined);
235
+ }
236
+ };
237
+ entry.resolve = value => {
238
+ options.signal?.removeEventListener("abort", abort);
239
+ resolve(value);
240
+ };
167
241
  const closeTyped = result => {
168
242
  if (state.stack[state.stack.length - 1] !== entry) return;
169
243
  popTop(result);
@@ -171,15 +245,34 @@ export const createDialogCore = () => {
171
245
  state.stack.push(entry);
172
246
  try {
173
247
  entry.dispose = render(() => view(closeTyped, {
174
- dialog
248
+ dialog,
249
+ setModal: modal => {
250
+ entry.modal = modal;
251
+ applyPresentation(entry);
252
+ },
253
+ setPosition: position => {
254
+ if (position && (!Number.isFinite(position.x) || !Number.isFinite(position.y))) return;
255
+ entry.position = position;
256
+ applyPresentation(entry);
257
+ },
258
+ requestDismiss: () => requestDismiss(entry),
259
+ setDismissHandler: handler => {
260
+ entry.dismissHandler = handler;
261
+ }
175
262
  }), container);
263
+ applyPresentation(entry);
176
264
  applyAccessibleName(dialog, entry);
177
- applyCancelBehavior(dialog, () => closeTyped(undefined), cancelBehavior);
265
+ applyCancelBehavior(dialog, () => void requestDismiss(entry), cancelBehavior);
178
266
  if (state.stack.length === 1) {
179
- if (typeof dialog.showModal === "function") dialog.showModal();else dialog.setAttribute("open", "");
180
- lockPageScroll();
267
+ if (typeof dialog.showModal === "function") {
268
+ if (entry.modal) dialog.showModal();else dialog.show();
269
+ } else dialog.setAttribute("open", "");
181
270
  observeConnection();
182
271
  }
272
+ options.signal?.addEventListener("abort", abort, {
273
+ once: true
274
+ });
275
+ if (options.signal?.aborted) abort();
183
276
  schedule(() => {
184
277
  if (state.stack[state.stack.length - 1] === entry) resolveInitialFocusTarget(entry, dialog)?.focus();
185
278
  });