@k2b/ui 0.2.0 → 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 (366) 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 +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 +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 +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 +6 -0
  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/dialog-core.js +81 -7
  86. package/dist/browser/feedback/dialog-core.js.map +1 -1
  87. package/dist/browser/feedback/prompts.js +6 -0
  88. package/dist/browser/feedback/prompts.js.map +1 -1
  89. package/dist/browser/feedback/toast.js +29 -6
  90. package/dist/browser/feedback/toast.js.map +1 -1
  91. package/dist/browser/inputs/SelectChip.js +3 -2
  92. package/dist/browser/inputs/SelectChip.js.map +1 -1
  93. package/dist/browser/inputs/TextInput.js +7 -1
  94. package/dist/browser/inputs/TextInput.js.map +1 -1
  95. package/dist/browser/inputs/markdown/MarkdownEditor.js +61 -37
  96. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  97. package/dist/browser/intl/Format.js +89 -16
  98. package/dist/browser/intl/Format.js.map +1 -1
  99. package/dist/browser/intl/index.js.map +1 -1
  100. package/dist/browser/intl/messages.js +130 -2
  101. package/dist/browser/intl/messages.js.map +1 -1
  102. package/dist/browser/layout/AppWorkspace.js +712 -624
  103. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  104. package/dist/browser/layout/BottomSheet.js +95 -0
  105. package/dist/browser/layout/BottomSheet.js.map +1 -0
  106. package/dist/browser/layout/DetailPanel.js +56 -44
  107. package/dist/browser/layout/DetailPanel.js.map +1 -1
  108. package/dist/browser/layout/Navigation.js +278 -0
  109. package/dist/browser/layout/Navigation.js.map +1 -0
  110. package/dist/browser/layout/PanelDialog.js +219 -71
  111. package/dist/browser/layout/PanelDialog.js.map +1 -1
  112. package/dist/browser/layout/ScrollArea.js +21 -1
  113. package/dist/browser/layout/ScrollArea.js.map +1 -1
  114. package/dist/browser/layout/Settings.js.map +1 -1
  115. package/dist/browser/layout/SidebarItemPreview.js +183 -0
  116. package/dist/browser/layout/SidebarItemPreview.js.map +1 -0
  117. package/dist/browser/layout/app-workspace-controller.js +3 -0
  118. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  119. package/dist/browser/layout/index.js +3 -0
  120. package/dist/browser/layout/index.js.map +1 -1
  121. package/dist/browser/layout/navigation-model.js +23 -0
  122. package/dist/browser/layout/navigation-model.js.map +1 -0
  123. package/dist/browser/layout/scroll-fade.js +100 -0
  124. package/dist/browser/layout/scroll-fade.js.map +1 -0
  125. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  126. package/dist/browser/surfaces/StatusBadge.js +2 -1
  127. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  128. package/dist/fonts/ibm-plex-mono-cyrillic-400-italic-4aded3f2f2a7d27d.woff2 +0 -0
  129. package/dist/fonts/ibm-plex-mono-cyrillic-400-normal-7635422bd10ddbbc.woff2 +0 -0
  130. package/dist/fonts/ibm-plex-mono-cyrillic-500-normal-1d89462e86cb8e87.woff2 +0 -0
  131. package/dist/fonts/ibm-plex-mono-cyrillic-600-normal-2b05a8695c7f9f4a.woff2 +0 -0
  132. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-italic-a0b3b8cbe5a516e7.woff2 +0 -0
  133. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-normal-f8c22ec1804bd696.woff2 +0 -0
  134. package/dist/fonts/ibm-plex-mono-cyrillic-ext-500-normal-3febe5c7f22e4b07.woff2 +0 -0
  135. package/dist/fonts/ibm-plex-mono-cyrillic-ext-600-normal-83109cdd4f8665b4.woff2 +0 -0
  136. package/dist/fonts/ibm-plex-mono-latin-400-italic-0840095faae86403.woff2 +0 -0
  137. package/dist/fonts/ibm-plex-mono-latin-400-normal-08949f728dc52d52.woff2 +0 -0
  138. package/dist/fonts/ibm-plex-mono-latin-500-normal-01d285447409c8a5.woff2 +0 -0
  139. package/dist/fonts/ibm-plex-mono-latin-600-normal-0d1f0b8d0722224e.woff2 +0 -0
  140. package/dist/fonts/ibm-plex-mono-latin-ext-400-italic-1b07eee6df7d26b3.woff2 +0 -0
  141. package/dist/fonts/ibm-plex-mono-latin-ext-400-normal-6bc0f226a5b7884a.woff2 +0 -0
  142. package/dist/fonts/ibm-plex-mono-latin-ext-500-normal-6bb06407c97584b0.woff2 +0 -0
  143. package/dist/fonts/ibm-plex-mono-latin-ext-600-normal-32057cf50dd14bdb.woff2 +0 -0
  144. package/dist/fonts/ibm-plex-mono-vietnamese-400-italic-a6bab38af4f9c761.woff2 +0 -0
  145. package/dist/fonts/ibm-plex-mono-vietnamese-400-normal-62632b6375305e70.woff2 +0 -0
  146. package/dist/fonts/ibm-plex-mono-vietnamese-500-normal-781633d95de88040.woff2 +0 -0
  147. package/dist/fonts/ibm-plex-mono-vietnamese-600-normal-51b74d53e106ba8a.woff2 +0 -0
  148. package/dist/fonts/ibm-plex-sans-cyrillic-400-italic-e8731a7e2b00fc4f.woff2 +0 -0
  149. package/dist/fonts/ibm-plex-sans-cyrillic-400-normal-69afad88a0740b6e.woff2 +0 -0
  150. package/dist/fonts/ibm-plex-sans-cyrillic-500-normal-200be3a2a6b1789f.woff2 +0 -0
  151. package/dist/fonts/ibm-plex-sans-cyrillic-600-normal-730becc6f005c18c.woff2 +0 -0
  152. package/dist/fonts/ibm-plex-sans-cyrillic-700-normal-40540598b4c9eb2c.woff2 +0 -0
  153. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-italic-4ffb25726a7ce4cc.woff2 +0 -0
  154. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-normal-e2580ad78906551e.woff2 +0 -0
  155. package/dist/fonts/ibm-plex-sans-cyrillic-ext-500-normal-08578d906af6d986.woff2 +0 -0
  156. package/dist/fonts/ibm-plex-sans-cyrillic-ext-600-normal-d60d3d0b182753d5.woff2 +0 -0
  157. package/dist/fonts/ibm-plex-sans-cyrillic-ext-700-normal-d07dd53642480097.woff2 +0 -0
  158. package/dist/fonts/ibm-plex-sans-greek-400-italic-1bc10b01688ba9fa.woff2 +0 -0
  159. package/dist/fonts/ibm-plex-sans-greek-400-normal-02296067bc904d2a.woff2 +0 -0
  160. package/dist/fonts/ibm-plex-sans-greek-500-normal-8cb6e20b4dbbaa5f.woff2 +0 -0
  161. package/dist/fonts/ibm-plex-sans-greek-600-normal-0a9ebd9019415ee9.woff2 +0 -0
  162. package/dist/fonts/ibm-plex-sans-greek-700-normal-c949641d10a3bebc.woff2 +0 -0
  163. package/dist/fonts/ibm-plex-sans-latin-400-italic-6de912e531b6c980.woff2 +0 -0
  164. package/dist/fonts/ibm-plex-sans-latin-400-normal-3b646991d30055a9.woff2 +0 -0
  165. package/dist/fonts/ibm-plex-sans-latin-500-normal-0717336fb31fcdcd.woff2 +0 -0
  166. package/dist/fonts/ibm-plex-sans-latin-600-normal-8960851d691c054e.woff2 +0 -0
  167. package/dist/fonts/ibm-plex-sans-latin-700-normal-42e7b0c143c19df9.woff2 +0 -0
  168. package/dist/fonts/ibm-plex-sans-latin-ext-400-italic-c5c00e8a32022dfe.woff2 +0 -0
  169. package/dist/fonts/ibm-plex-sans-latin-ext-400-normal-c93d2a12aaa280f6.woff2 +0 -0
  170. package/dist/fonts/ibm-plex-sans-latin-ext-500-normal-2846035d85100f84.woff2 +0 -0
  171. package/dist/fonts/ibm-plex-sans-latin-ext-600-normal-b25dfd4f979e442a.woff2 +0 -0
  172. package/dist/fonts/ibm-plex-sans-latin-ext-700-normal-92f0392bd74fa395.woff2 +0 -0
  173. package/dist/fonts/ibm-plex-sans-vietnamese-400-italic-675d4bace127bffb.woff2 +0 -0
  174. package/dist/fonts/ibm-plex-sans-vietnamese-400-normal-771538f7f26551bd.woff2 +0 -0
  175. package/dist/fonts/ibm-plex-sans-vietnamese-500-normal-85ba3d9c2488a813.woff2 +0 -0
  176. package/dist/fonts/ibm-plex-sans-vietnamese-600-normal-5d34b803637befe3.woff2 +0 -0
  177. package/dist/fonts/ibm-plex-sans-vietnamese-700-normal-b79d0c4b68b85007.woff2 +0 -0
  178. package/dist/plex.css +1 -1
  179. package/dist/ssr/actions/Button.js +11 -2
  180. package/dist/ssr/actions/Button.js.map +1 -1
  181. package/dist/ssr/actions/Disclosure.js +2 -2
  182. package/dist/ssr/actions/Disclosure.js.map +1 -1
  183. package/dist/ssr/actions/Dropdown.js +4 -1
  184. package/dist/ssr/actions/Dropdown.js.map +1 -1
  185. package/dist/ssr/actions/FilterChip.js +16 -2
  186. package/dist/ssr/actions/FilterChip.js.map +1 -1
  187. package/dist/ssr/actions/SplitButton.js +69 -22
  188. package/dist/ssr/actions/SplitButton.js.map +1 -1
  189. package/dist/ssr/actions/SpotlightSearch.js +3 -7
  190. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  191. package/dist/ssr/actions/Tabs.js +58 -11
  192. package/dist/ssr/actions/Tabs.js.map +1 -1
  193. package/dist/ssr/actions/index.js +1 -1
  194. package/dist/ssr/actions/index.js.map +1 -1
  195. package/dist/ssr/chat/ChatComposer.js +366 -134
  196. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  197. package/dist/ssr/chat/ChatContextPopup.js +86 -0
  198. package/dist/ssr/chat/ChatContextPopup.js.map +1 -0
  199. package/dist/ssr/chat/ChatPrimitives.js +49 -11
  200. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  201. package/dist/ssr/chat/ChatTasks.js +48 -0
  202. package/dist/ssr/chat/ChatTasks.js.map +1 -0
  203. package/dist/ssr/chat/ChatTimeline.js +14 -4
  204. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  205. package/dist/ssr/chat/chat-behavior.js +0 -5
  206. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  207. package/dist/ssr/chat/composer-document.js +55 -0
  208. package/dist/ssr/chat/composer-document.js.map +1 -0
  209. package/dist/ssr/chat/index.js +6 -1
  210. package/dist/ssr/chat/index.js.map +1 -1
  211. package/dist/ssr/chat/types.js.map +1 -1
  212. package/dist/ssr/content/Chart.js +121 -219
  213. package/dist/ssr/content/Chart.js.map +1 -1
  214. package/dist/ssr/content/ChartExplorer.js +257 -0
  215. package/dist/ssr/content/ChartExplorer.js.map +1 -0
  216. package/dist/ssr/content/ChartExplorerControls.js +105 -0
  217. package/dist/ssr/content/ChartExplorerControls.js.map +1 -0
  218. package/dist/ssr/content/ChartFilterControls.js +139 -0
  219. package/dist/ssr/content/ChartFilterControls.js.map +1 -0
  220. package/dist/ssr/content/ChartSnapshotView.js +57 -0
  221. package/dist/ssr/content/ChartSnapshotView.js.map +1 -0
  222. package/dist/ssr/content/DataTable.js +13 -9
  223. package/dist/ssr/content/DataTable.js.map +1 -1
  224. package/dist/ssr/content/FileBrowser.js +3 -0
  225. package/dist/ssr/content/FileBrowser.js.map +1 -1
  226. package/dist/ssr/content/FileGrid.js +38 -0
  227. package/dist/ssr/content/FileGrid.js.map +1 -0
  228. package/dist/ssr/content/FileTree.js +2 -2
  229. package/dist/ssr/content/FileTree.js.map +1 -1
  230. package/dist/ssr/content/FileView.js +352 -75
  231. package/dist/ssr/content/FileView.js.map +1 -1
  232. package/dist/ssr/content/MarkdownView.js +6 -0
  233. package/dist/ssr/content/MarkdownView.js.map +1 -1
  234. package/dist/ssr/content/PdfPreview.js +37 -24
  235. package/dist/ssr/content/PdfPreview.js.map +1 -1
  236. package/dist/ssr/content/chart-cursor.js +33 -0
  237. package/dist/ssr/content/chart-cursor.js.map +1 -0
  238. package/dist/ssr/content/chart-explorer.js +147 -0
  239. package/dist/ssr/content/chart-explorer.js.map +1 -0
  240. package/dist/ssr/content/chart-inspection.js +447 -0
  241. package/dist/ssr/content/chart-inspection.js.map +1 -0
  242. package/dist/ssr/content/chart-line-gaps.js +53 -0
  243. package/dist/ssr/content/chart-line-gaps.js.map +1 -0
  244. package/dist/ssr/content/chart-map-viewport.js +5 -1
  245. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  246. package/dist/ssr/content/chart-snapshot.js +63 -0
  247. package/dist/ssr/content/chart-snapshot.js.map +1 -0
  248. package/dist/ssr/content/chart-state-timeline.js +32 -4
  249. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  250. package/dist/ssr/content/chart-svg.js +54 -0
  251. package/dist/ssr/content/chart-svg.js.map +1 -0
  252. package/dist/ssr/content/collection-selection.js +109 -0
  253. package/dist/ssr/content/collection-selection.js.map +1 -0
  254. package/dist/ssr/content/delimited-preferences.js +21 -0
  255. package/dist/ssr/content/delimited-preferences.js.map +1 -0
  256. package/dist/ssr/content/file-tree.js.map +1 -1
  257. package/dist/ssr/content/file-view-preview.js +11 -7
  258. package/dist/ssr/content/file-view-preview.js.map +1 -1
  259. package/dist/ssr/content/index.js +9 -0
  260. package/dist/ssr/content/index.js.map +1 -1
  261. package/dist/ssr/feedback/InlineGuidance.js +17 -3
  262. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  263. package/dist/ssr/feedback/dialog-core.js +81 -7
  264. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  265. package/dist/ssr/feedback/prompts.js +6 -0
  266. package/dist/ssr/feedback/prompts.js.map +1 -1
  267. package/dist/ssr/feedback/toast.js +29 -6
  268. package/dist/ssr/feedback/toast.js.map +1 -1
  269. package/dist/ssr/inputs/SelectChip.js +3 -3
  270. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  271. package/dist/ssr/inputs/TextInput.js.map +1 -1
  272. package/dist/ssr/inputs/markdown/MarkdownEditor.js +19 -11
  273. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  274. package/dist/ssr/intl/Format.js +61 -0
  275. package/dist/ssr/intl/Format.js.map +1 -1
  276. package/dist/ssr/intl/index.js.map +1 -1
  277. package/dist/ssr/intl/messages.js +130 -2
  278. package/dist/ssr/intl/messages.js.map +1 -1
  279. package/dist/ssr/layout/AppWorkspace.js +368 -275
  280. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  281. package/dist/ssr/layout/BottomSheet.js +43 -0
  282. package/dist/ssr/layout/BottomSheet.js.map +1 -0
  283. package/dist/ssr/layout/DetailPanel.js +11 -4
  284. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  285. package/dist/ssr/layout/Navigation.js +181 -0
  286. package/dist/ssr/layout/Navigation.js.map +1 -0
  287. package/dist/ssr/layout/PanelDialog.js +111 -26
  288. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  289. package/dist/ssr/layout/ScrollArea.js +16 -1
  290. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  291. package/dist/ssr/layout/Settings.js.map +1 -1
  292. package/dist/ssr/layout/SidebarItemPreview.js +133 -0
  293. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -0
  294. package/dist/ssr/layout/app-workspace-controller.js +3 -0
  295. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  296. package/dist/ssr/layout/index.js +3 -0
  297. package/dist/ssr/layout/index.js.map +1 -1
  298. package/dist/ssr/layout/navigation-model.js +23 -0
  299. package/dist/ssr/layout/navigation-model.js.map +1 -0
  300. package/dist/ssr/layout/scroll-fade.js +100 -0
  301. package/dist/ssr/layout/scroll-fade.js.map +1 -0
  302. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  303. package/dist/ssr/surfaces/StatusBadge.js +2 -1
  304. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  305. package/dist/styles.css +1 -1
  306. package/dist/tabler.css +1 -1
  307. package/dist/types/actions/Button.d.ts +4 -0
  308. package/dist/types/actions/Disclosure.d.ts +1 -0
  309. package/dist/types/actions/FilterChip.d.ts +4 -0
  310. package/dist/types/actions/SplitButton.d.ts +6 -0
  311. package/dist/types/actions/SpotlightSearch.d.ts +0 -4
  312. package/dist/types/actions/Tabs.d.ts +4 -0
  313. package/dist/types/actions/index.d.ts +1 -1
  314. package/dist/types/chat/ChatComposer.d.ts +20 -2
  315. package/dist/types/chat/ChatContextPopup.d.ts +6 -0
  316. package/dist/types/chat/ChatPrimitives.d.ts +4 -0
  317. package/dist/types/chat/ChatTasks.d.ts +15 -0
  318. package/dist/types/chat/ChatTimeline.d.ts +2 -0
  319. package/dist/types/chat/chat-behavior.d.ts +0 -3
  320. package/dist/types/chat/composer-document.d.ts +14 -0
  321. package/dist/types/chat/index.d.ts +8 -1
  322. package/dist/types/chat/types.d.ts +7 -0
  323. package/dist/types/content/Chart.d.ts +42 -23
  324. package/dist/types/content/ChartExplorer.d.ts +34 -0
  325. package/dist/types/content/ChartExplorerControls.d.ts +10 -0
  326. package/dist/types/content/ChartFilterControls.d.ts +21 -0
  327. package/dist/types/content/ChartSnapshotView.d.ts +11 -0
  328. package/dist/types/content/DataTable.d.ts +4 -0
  329. package/dist/types/content/FileBrowser.d.ts +1 -0
  330. package/dist/types/content/FileGrid.d.ts +21 -0
  331. package/dist/types/content/FileView.d.ts +20 -0
  332. package/dist/types/content/PdfPreview.d.ts +8 -1
  333. package/dist/types/content/chart-cursor.d.ts +15 -0
  334. package/dist/types/content/chart-explorer.d.ts +48 -0
  335. package/dist/types/content/chart-inspection.d.ts +40 -0
  336. package/dist/types/content/chart-line-gaps.d.ts +5 -0
  337. package/dist/types/content/chart-map-viewport.d.ts +1 -1
  338. package/dist/types/content/chart-snapshot.d.ts +26 -0
  339. package/dist/types/content/chart-svg.d.ts +21 -0
  340. package/dist/types/content/collection-selection.d.ts +24 -0
  341. package/dist/types/content/delimited-preferences.d.ts +11 -0
  342. package/dist/types/content/file-tree.d.ts +2 -0
  343. package/dist/types/content/file-view-preview.d.ts +4 -1
  344. package/dist/types/content/index.d.ts +15 -1
  345. package/dist/types/feedback/InlineGuidance.d.ts +1 -0
  346. package/dist/types/feedback/dialog-core.d.ts +11 -0
  347. package/dist/types/feedback/prompts.d.ts +2 -0
  348. package/dist/types/feedback/toast.d.ts +7 -1
  349. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -1
  350. package/dist/types/intl/Format.d.ts +9 -0
  351. package/dist/types/intl/index.d.ts +1 -1
  352. package/dist/types/intl/messages.d.ts +31 -1
  353. package/dist/types/layout/AppWorkspace.d.ts +35 -18
  354. package/dist/types/layout/BottomSheet.d.ts +23 -0
  355. package/dist/types/layout/DetailPanel.d.ts +1 -0
  356. package/dist/types/layout/Navigation.d.ts +8 -0
  357. package/dist/types/layout/PanelDialog.d.ts +14 -1
  358. package/dist/types/layout/ScrollArea.d.ts +4 -0
  359. package/dist/types/layout/Settings.d.ts +1 -1
  360. package/dist/types/layout/SidebarItemPreview.d.ts +11 -0
  361. package/dist/types/layout/index.d.ts +4 -1
  362. package/dist/types/layout/navigation-model.d.ts +48 -0
  363. package/dist/types/layout/scroll-fade.d.ts +3 -0
  364. package/dist/types/surfaces/DescriptionList.d.ts +1 -1
  365. package/dist/types/surfaces/StatusBadge.d.ts +1 -1
  366. package/package.json +5 -5
@@ -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":[]}
@@ -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,7 +121,7 @@ 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;
@@ -88,7 +129,7 @@ export const createDialogCore = () => {
88
129
  };
89
130
  };
90
131
  const requestDismiss = async entry => {
91
- if (state.stack[state.stack.length - 1] !== entry || entry.dismissPending) return;
132
+ if (state.stack[state.stack.length - 1] !== entry || entry.dismissPending || entry.cancelBehavior === "ignore") return;
92
133
  if (!entry.dismissHandler) {
93
134
  popTop(undefined);
94
135
  return;
@@ -113,6 +154,7 @@ export const createDialogCore = () => {
113
154
  if (previous && dialog) {
114
155
  previous.container.style.display = "";
115
156
  dialog.className = previous.panelClassName;
157
+ applyPresentation(previous);
116
158
  applyAccessibleName(dialog, previous);
117
159
  applyCancelBehavior(dialog, () => void requestDismiss(previous), previous.cancelBehavior);
118
160
  schedule(() => {
@@ -152,6 +194,7 @@ export const createDialogCore = () => {
152
194
  };
153
195
  const observeConnection = () => {
154
196
  if (state.connectionObserver || typeof MutationObserver === "undefined") return;
197
+ document.addEventListener("keydown", modelessEscape);
155
198
  state.connectionObserver = new MutationObserver(resetDisconnectedDialog);
156
199
  state.connectionObserver.observe(document.documentElement, {
157
200
  childList: true,
@@ -159,6 +202,7 @@ export const createDialogCore = () => {
159
202
  });
160
203
  };
161
204
  const open = (view, options = {}) => {
205
+ if (options.signal?.aborted) return Promise.resolve(undefined);
162
206
  const dialog = ensureDialogElement();
163
207
  const previousTop = state.stack[state.stack.length - 1];
164
208
  if (previousTop) previousTop.container.style.display = "none";
@@ -176,10 +220,24 @@ export const createDialogCore = () => {
176
220
  cancelBehavior,
177
221
  initialFocus,
178
222
  opener: activeElement instanceof HTMLElement ? activeElement : undefined,
179
- ariaLabel: options.ariaLabel
223
+ ariaLabel: options.ariaLabel,
224
+ modal: true
180
225
  };
181
226
  return new Promise((resolve, reject) => {
182
- 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
+ };
183
241
  const closeTyped = result => {
184
242
  if (state.stack[state.stack.length - 1] !== entry) return;
185
243
  popTop(result);
@@ -188,17 +246,33 @@ export const createDialogCore = () => {
188
246
  try {
189
247
  entry.dispose = render(() => view(closeTyped, {
190
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),
191
259
  setDismissHandler: handler => {
192
260
  entry.dismissHandler = handler;
193
261
  }
194
262
  }), container);
263
+ applyPresentation(entry);
195
264
  applyAccessibleName(dialog, entry);
196
265
  applyCancelBehavior(dialog, () => void requestDismiss(entry), cancelBehavior);
197
266
  if (state.stack.length === 1) {
198
- if (typeof dialog.showModal === "function") dialog.showModal();else dialog.setAttribute("open", "");
199
- lockPageScroll();
267
+ if (typeof dialog.showModal === "function") {
268
+ if (entry.modal) dialog.showModal();else dialog.show();
269
+ } else dialog.setAttribute("open", "");
200
270
  observeConnection();
201
271
  }
272
+ options.signal?.addEventListener("abort", abort, {
273
+ once: true
274
+ });
275
+ if (options.signal?.aborted) abort();
202
276
  schedule(() => {
203
277
  if (state.stack[state.stack.length - 1] === entry) resolveInitialFocusTarget(entry, dialog)?.focus();
204
278
  });
@@ -1 +1 @@
1
- {"version":3,"names":["render","getK2bPortalRoot","isPointInsideToast","DEFAULT_PANEL_CLASS","DEFAULT_CONTENT_CLASS","nextDialogTitleId","resolveInitialFocusTarget","entry","dialog","initialFocus","container","querySelector","applyAccessibleName","removeAttribute","ariaLabel","setAttribute","heading","id","schedule","callback","requestAnimationFrame","queueMicrotask","createDialogCore","state","stack","ensureDialogElement","document","Error","element","isConnected","createElement","appendChild","lockPageScroll","scrollLocked","previousBodyOverflow","body","style","overflow","previousHtmlOverflow","documentElement","unlockPageScroll","undefined","stopConnectionObserver","connectionObserver","disconnect","applyCancelBehavior","close","behavior","oncancel","event","preventDefault","onmousedown","mouseDownOnDialog","target","onclick","realBackdropClick","clientX","clientY","requestDismiss","length","dismissPending","dismissHandler","popTop","error","console","result","top","pop","dispose","remove","previous","display","className","panelClassName","cancelBehavior","opener","focus","open","resolve","resetDisconnectedDialog","entries","splice","reverse","observeConnection","MutationObserver","observe","childList","subtree","view","options","previousTop","activeElement","contentClassName","HTMLElement","Promise","reject","value","closeTyped","push","setDismissHandler","handler","showModal","first","isOpen","dialogCore"],"sources":["feedback/dialog-core.ts"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport { render } from \"solid-js/web\";\nimport { getK2bPortalRoot } from \"../internal/portal\";\nimport { isPointInsideToast } from \"./toast\";\n\nexport type DialogClose<T> = (result?: T) => void;\n\nexport type OpenDialogOptions = {\n panelClassName?: string;\n contentClassName?: string;\n initialFocus?: \"first-input\" | \"none\" | ((dialog: HTMLDialogElement) => HTMLElement | null);\n cancelBehavior?: \"resolve-undefined\" | \"ignore\";\n ariaLabel?: string;\n};\n\nexport type DialogRender<T> = (\n close: DialogClose<T>,\n context: {\n dialog: HTMLDialogElement;\n /** Route Escape/backdrop through the same guarded handler as Cancel and X. */\n setDismissHandler: (handler: () => void | Promise<void>) => void;\n },\n) => JSX.Element;\n\nexport type DialogCore = {\n open: <T>(view: DialogRender<T>, options?: OpenDialogOptions) => Promise<T | undefined>;\n close: (result?: unknown) => void;\n isOpen: () => boolean;\n};\n\ntype DialogStackEntry = {\n container: HTMLDivElement;\n dispose?: () => void;\n resolve?: (value: unknown) => void;\n panelClassName: string;\n cancelBehavior: NonNullable<OpenDialogOptions[\"cancelBehavior\"]>;\n initialFocus: NonNullable<OpenDialogOptions[\"initialFocus\"]>;\n opener?: HTMLElement;\n ariaLabel?: string;\n dismissHandler?: () => void | Promise<void>;\n dismissPending?: boolean;\n};\n\ntype DialogState = {\n element?: HTMLDialogElement;\n stack: DialogStackEntry[];\n scrollLocked?: boolean;\n previousBodyOverflow?: string;\n previousHtmlOverflow?: string;\n mouseDownOnDialog?: boolean;\n connectionObserver?: MutationObserver;\n};\n\nconst DEFAULT_PANEL_CLASS = \"k2b-dialog\";\nconst DEFAULT_CONTENT_CLASS = \"k2b-dialog__viewport\";\nlet nextDialogTitleId = 0;\n\nconst resolveInitialFocusTarget = (entry: DialogStackEntry, dialog: HTMLDialogElement): HTMLElement | null => {\n const { initialFocus } = entry;\n if (initialFocus === \"none\") return null;\n if (typeof initialFocus === \"function\") return initialFocus(dialog);\n return entry.container.querySelector<HTMLElement>(\n \"input:not([type='hidden']):not([disabled]), textarea:not([disabled]), select:not([disabled]), button:not([disabled]), a[href], [tabindex]:not([tabindex='-1'])\",\n );\n};\n\nconst applyAccessibleName = (dialog: HTMLDialogElement, entry: DialogStackEntry): void => {\n dialog.removeAttribute(\"aria-label\");\n dialog.removeAttribute(\"aria-labelledby\");\n if (entry.ariaLabel) {\n dialog.setAttribute(\"aria-label\", entry.ariaLabel);\n return;\n }\n const heading = entry.container.querySelector<HTMLElement>(\"h1, h2, h3\");\n if (!heading) {\n dialog.setAttribute(\"aria-label\", \"Dialog\");\n return;\n }\n heading.id ||= `k2b-dialog-title-${++nextDialogTitleId}`;\n dialog.setAttribute(\"aria-labelledby\", heading.id);\n};\n\nconst schedule = (callback: () => void): void => {\n if (typeof requestAnimationFrame === \"function\") requestAnimationFrame(callback);\n else queueMicrotask(callback);\n};\n\nexport const createDialogCore = (): DialogCore => {\n const state: DialogState = { stack: [] };\n\n const ensureDialogElement = () => {\n if (typeof document === \"undefined\") throw new Error(\"@k2b/ui dialogs can only be opened in the browser\");\n // Reuse the shared element whenever it is still in the document. Resolving\n // the portal root first would create a second <dialog> when focus has moved\n // into another `.k2b-ui` scope, orphaning the levels already on the stack.\n if (state.element?.isConnected) return state.element;\n\n const element = document.createElement(\"dialog\");\n getK2bPortalRoot().appendChild(element);\n state.element = element;\n return element;\n };\n\n const lockPageScroll = () => {\n if (typeof document === \"undefined\" || state.scrollLocked) return;\n state.previousBodyOverflow = document.body.style.overflow;\n state.previousHtmlOverflow = document.documentElement.style.overflow;\n document.body.style.overflow = \"hidden\";\n document.documentElement.style.overflow = \"hidden\";\n state.scrollLocked = true;\n };\n\n const unlockPageScroll = () => {\n if (typeof document === \"undefined\" || !state.scrollLocked) return;\n document.body.style.overflow = state.previousBodyOverflow ?? \"\";\n document.documentElement.style.overflow = state.previousHtmlOverflow ?? \"\";\n state.scrollLocked = false;\n state.previousBodyOverflow = undefined;\n state.previousHtmlOverflow = undefined;\n };\n\n const stopConnectionObserver = () => {\n state.connectionObserver?.disconnect();\n state.connectionObserver = undefined;\n };\n\n const applyCancelBehavior = (\n dialog: HTMLDialogElement,\n close: () => void,\n behavior: NonNullable<OpenDialogOptions[\"cancelBehavior\"]>,\n ) => {\n dialog.oncancel = (event) => {\n if (behavior === \"ignore\") {\n event.preventDefault();\n return;\n }\n event.preventDefault();\n close();\n };\n dialog.onmousedown = (event) => {\n state.mouseDownOnDialog = event.target === dialog;\n };\n dialog.onclick = (event) => {\n const realBackdropClick = state.mouseDownOnDialog === true;\n state.mouseDownOnDialog = false;\n if (event.target !== dialog) return;\n if (!realBackdropClick) return;\n if (behavior === \"ignore\") return;\n if (isPointInsideToast(event.clientX, event.clientY)) return;\n close();\n };\n };\n\n const requestDismiss = async (entry: DialogStackEntry) => {\n if (state.stack[state.stack.length - 1] !== entry || entry.dismissPending) return;\n if (!entry.dismissHandler) {\n popTop(undefined);\n return;\n }\n entry.dismissPending = true;\n try {\n await entry.dismissHandler();\n } catch (error) {\n // A failed guard must never discard the dialog's state.\n console.error(\"Dialog dismissal failed\", error);\n } finally {\n entry.dismissPending = false;\n }\n };\n\n const popTop = (result?: unknown) => {\n const top = state.stack.pop();\n if (!top) return;\n top.dispose?.();\n top.container.remove();\n\n const dialog = state.element;\n const previous = state.stack[state.stack.length - 1];\n if (previous && dialog) {\n previous.container.style.display = \"\";\n dialog.className = previous.panelClassName;\n applyAccessibleName(dialog, previous);\n applyCancelBehavior(dialog, () => void requestDismiss(previous), previous.cancelBehavior);\n schedule(() => {\n const target = top.opener?.isConnected ? top.opener : resolveInitialFocusTarget(previous, dialog);\n target?.focus();\n });\n } else if (dialog) {\n dialog.oncancel = null;\n dialog.onmousedown = null;\n dialog.onclick = null;\n dialog.removeAttribute(\"aria-label\");\n dialog.removeAttribute(\"aria-labelledby\");\n if (dialog.open && typeof dialog.close === \"function\") dialog.close();\n else dialog.removeAttribute(\"open\");\n dialog.remove();\n state.element = undefined;\n stopConnectionObserver();\n unlockPageScroll();\n schedule(() => {\n if (top.opener?.isConnected) top.opener.focus();\n });\n }\n\n top.resolve?.(result);\n };\n\n const resetDisconnectedDialog = () => {\n if (state.stack.length === 0 || state.element?.isConnected) return;\n const entries = state.stack.splice(0);\n const dialog = state.element;\n state.element = undefined;\n stopConnectionObserver();\n dialog?.remove();\n unlockPageScroll();\n for (const entry of entries.reverse()) {\n entry.dispose?.();\n entry.container.remove();\n entry.resolve?.(undefined);\n }\n };\n\n const observeConnection = () => {\n if (state.connectionObserver || typeof MutationObserver === \"undefined\") return;\n state.connectionObserver = new MutationObserver(resetDisconnectedDialog);\n state.connectionObserver.observe(document.documentElement, { childList: true, subtree: true });\n };\n\n const open = <T>(view: DialogRender<T>, options: OpenDialogOptions = {}): Promise<T | undefined> => {\n const dialog = ensureDialogElement();\n const previousTop = state.stack[state.stack.length - 1];\n if (previousTop) previousTop.container.style.display = \"none\";\n const activeElement = document.activeElement;\n\n const panelClassName = options.panelClassName ?? DEFAULT_PANEL_CLASS;\n const cancelBehavior = options.cancelBehavior ?? \"resolve-undefined\";\n const initialFocus = options.initialFocus ?? \"first-input\";\n dialog.className = panelClassName;\n\n const container = document.createElement(\"div\");\n container.className = options.contentClassName ?? DEFAULT_CONTENT_CLASS;\n dialog.appendChild(container);\n\n const entry: DialogStackEntry = {\n container,\n panelClassName,\n cancelBehavior,\n initialFocus,\n opener: activeElement instanceof HTMLElement ? activeElement : undefined,\n ariaLabel: options.ariaLabel,\n };\n\n return new Promise((resolve, reject) => {\n entry.resolve = (value) => resolve(value as T | undefined);\n const closeTyped: DialogClose<T> = (result) => {\n if (state.stack[state.stack.length - 1] !== entry) return;\n popTop(result);\n };\n\n state.stack.push(entry);\n try {\n entry.dispose = render(\n () =>\n view(closeTyped, {\n dialog,\n setDismissHandler: (handler) => {\n entry.dismissHandler = handler;\n },\n }),\n container,\n );\n applyAccessibleName(dialog, entry);\n applyCancelBehavior(dialog, () => void requestDismiss(entry), cancelBehavior);\n\n if (state.stack.length === 1) {\n if (typeof dialog.showModal === \"function\") dialog.showModal();\n else dialog.setAttribute(\"open\", \"\");\n lockPageScroll();\n observeConnection();\n }\n schedule(() => {\n if (state.stack[state.stack.length - 1] === entry) resolveInitialFocusTarget(entry, dialog)?.focus();\n });\n } catch (error) {\n entry.resolve = undefined;\n if (state.stack[state.stack.length - 1] === entry) popTop(undefined);\n reject(error);\n }\n });\n };\n\n const close: DialogCore[\"close\"] = (result) => {\n let first = true;\n while (state.stack.length > 0) {\n popTop(first ? result : undefined);\n first = false;\n }\n };\n\n return {\n open,\n close,\n isOpen: () => state.stack.length > 0,\n };\n};\n\nexport const dialogCore = createDialogCore();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["render","getK2bPortalRoot","isPointInsideToast","DEFAULT_PANEL_CLASS","DEFAULT_CONTENT_CLASS","nextDialogTitleId","resolveInitialFocusTarget","entry","dialog","initialFocus","input","container","querySelector","applyAccessibleName","removeAttribute","ariaLabel","setAttribute","heading","id","schedule","callback","requestAnimationFrame","queueMicrotask","createDialogCore","state","stack","ensureDialogElement","document","Error","element","isConnected","createElement","onclose","top","length","open","modal","showModal","show","focus","appendChild","lockPageScroll","scrollLocked","previousBodyOverflow","body","style","overflow","previousHtmlOverflow","documentElement","unlockPageScroll","undefined","applyPresentation","position","inset","y","x","margin","transform","dataset","modeless","String","active","activeElement","close","HTMLElement","contains","preventScroll","modelessEscape","event","key","defaultPrevented","isComposing","preventDefault","requestDismiss","stopConnectionObserver","removeEventListener","connectionObserver","disconnect","applyCancelBehavior","behavior","oncancel","onmousedown","mouseDownOnDialog","target","onclick","realBackdropClick","clientX","clientY","dismissPending","cancelBehavior","dismissHandler","popTop","error","console","result","pop","dispose","remove","previous","display","className","panelClassName","opener","resolve","resetDisconnectedDialog","entries","splice","reverse","observeConnection","MutationObserver","addEventListener","observe","childList","subtree","view","options","signal","aborted","Promise","previousTop","contentClassName","reject","abort","index","indexOf","value","closeTyped","push","setModal","setPosition","Number","isFinite","setDismissHandler","handler","once","first","isOpen","dialogCore"],"sources":["feedback/dialog-core.ts"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport { render } from \"solid-js/web\";\nimport { getK2bPortalRoot } from \"../internal/portal\";\nimport { isPointInsideToast } from \"./toast\";\n\nexport type DialogClose<T> = (result?: T) => void;\n\nexport type OpenDialogOptions = {\n /** Close only this dialog when its owning operation is cancelled. */\n signal?: AbortSignal;\n panelClassName?: string;\n contentClassName?: string;\n initialFocus?: \"first-input\" | \"none\" | ((dialog: HTMLDialogElement) => HTMLElement | null);\n cancelBehavior?: \"resolve-undefined\" | \"ignore\";\n ariaLabel?: string;\n};\n\nexport type DialogRender<T> = (\n close: DialogClose<T>,\n context: {\n dialog: HTMLDialogElement;\n /** Switch this entry between a modal and a modeless window without remounting. */\n setModal: (modal: boolean) => void;\n /** Set viewport coordinates, or restore the panel stylesheet position with null. */\n setPosition: (position: { x: number; y: number } | null) => void;\n /** Route Escape/backdrop through the same guarded handler as Cancel and X. */\n setDismissHandler: (handler: () => void | Promise<void>) => void;\n /** Request dismissal through this entry's cancellation policy and guard. */\n requestDismiss: () => Promise<void>;\n },\n) => JSX.Element;\n\nexport type DialogCore = {\n open: <T>(view: DialogRender<T>, options?: OpenDialogOptions) => Promise<T | undefined>;\n close: (result?: unknown) => void;\n isOpen: () => boolean;\n};\n\ntype DialogStackEntry = {\n container: HTMLDivElement;\n dispose?: () => void;\n resolve?: (value: unknown) => void;\n panelClassName: string;\n cancelBehavior: NonNullable<OpenDialogOptions[\"cancelBehavior\"]>;\n initialFocus: NonNullable<OpenDialogOptions[\"initialFocus\"]>;\n opener?: HTMLElement;\n ariaLabel?: string;\n dismissHandler?: () => void | Promise<void>;\n dismissPending?: boolean;\n modal: boolean;\n position?: { x: number; y: number } | null;\n};\n\ntype DialogState = {\n element?: HTMLDialogElement;\n modal?: boolean;\n stack: DialogStackEntry[];\n scrollLocked?: boolean;\n previousBodyOverflow?: string;\n previousHtmlOverflow?: string;\n mouseDownOnDialog?: boolean;\n connectionObserver?: MutationObserver;\n};\n\nconst DEFAULT_PANEL_CLASS = \"k2b-dialog\";\nconst DEFAULT_CONTENT_CLASS = \"k2b-dialog__viewport\";\nlet nextDialogTitleId = 0;\n\nconst resolveInitialFocusTarget = (entry: DialogStackEntry, dialog: HTMLDialogElement): HTMLElement | null => {\n const { initialFocus } = entry;\n if (initialFocus === \"none\") return null;\n if (typeof initialFocus === \"function\") return initialFocus(dialog);\n const input = entry.container.querySelector<HTMLElement>(\n \"input:not([type='hidden']):not([disabled]), textarea:not([disabled]), select:not([disabled]), [role='combobox']:not([disabled]):not([aria-disabled='true'])\",\n );\n return (\n input ??\n entry.container.querySelector<HTMLElement>(\n \"input:not([type='hidden']):not([disabled]), textarea:not([disabled]), select:not([disabled]), button:not([disabled]), a[href], [tabindex]:not([tabindex='-1'])\",\n )\n );\n};\n\nconst applyAccessibleName = (dialog: HTMLDialogElement, entry: DialogStackEntry): void => {\n dialog.removeAttribute(\"aria-label\");\n dialog.removeAttribute(\"aria-labelledby\");\n if (entry.ariaLabel) {\n dialog.setAttribute(\"aria-label\", entry.ariaLabel);\n return;\n }\n const heading = entry.container.querySelector<HTMLElement>(\"h1, h2, h3\");\n if (!heading) {\n dialog.setAttribute(\"aria-label\", \"Dialog\");\n return;\n }\n heading.id ||= `k2b-dialog-title-${++nextDialogTitleId}`;\n dialog.setAttribute(\"aria-labelledby\", heading.id);\n};\n\nconst schedule = (callback: () => void): void => {\n if (typeof requestAnimationFrame === \"function\") requestAnimationFrame(callback);\n else queueMicrotask(callback);\n};\n\nexport const createDialogCore = (): DialogCore => {\n const state: DialogState = { stack: [] };\n\n const ensureDialogElement = () => {\n if (typeof document === \"undefined\") throw new Error(\"@k2b/ui dialogs can only be opened in the browser\");\n // Reuse the shared element whenever it is still in the document. Resolving\n // the portal root first would create a second <dialog> when focus has moved\n // into another `.k2b-ui` scope, orphaning the levels already on the stack.\n if (state.element?.isConnected) return state.element;\n\n const element = document.createElement(\"dialog\");\n element.onclose = () => {\n // Repeated Escape can force a non-cancelable native close. A retained\n // entry (ignore, an async guard, or a parent) still owns the modal.\n const top = state.stack[state.stack.length - 1];\n if (state.element !== element || element.open || !top) return;\n if (top.modal) element.showModal();\n else element.show();\n resolveInitialFocusTarget(top, element)?.focus();\n };\n getK2bPortalRoot().appendChild(element);\n state.element = element;\n return element;\n };\n\n const lockPageScroll = () => {\n if (typeof document === \"undefined\" || state.scrollLocked) return;\n state.previousBodyOverflow = document.body.style.overflow;\n state.previousHtmlOverflow = document.documentElement.style.overflow;\n document.body.style.overflow = \"hidden\";\n document.documentElement.style.overflow = \"hidden\";\n state.scrollLocked = true;\n };\n\n const unlockPageScroll = () => {\n if (typeof document === \"undefined\" || !state.scrollLocked) return;\n document.body.style.overflow = state.previousBodyOverflow ?? \"\";\n document.documentElement.style.overflow = state.previousHtmlOverflow ?? \"\";\n state.scrollLocked = false;\n state.previousBodyOverflow = undefined;\n state.previousHtmlOverflow = undefined;\n };\n\n const applyPresentation = (entry: DialogStackEntry) => {\n const dialog = state.element;\n if (!dialog || state.stack[state.stack.length - 1] !== entry) return;\n const position = entry.position;\n dialog.style.position = position ? \"fixed\" : \"\";\n dialog.style.inset = position ? `${position.y}px auto auto ${position.x}px` : \"\";\n dialog.style.margin = position ? \"0\" : \"\";\n dialog.style.transform = position ? \"none\" : \"\";\n dialog.dataset.modeless = String(!entry.modal);\n dialog.setAttribute(\"aria-modal\", String(entry.modal));\n if (dialog.open && state.modal !== entry.modal) {\n const active = document.activeElement;\n dialog.close();\n if (entry.modal) dialog.showModal();\n else dialog.show();\n if (active instanceof HTMLElement && active.isConnected && (!entry.modal || dialog.contains(active))) {\n active.focus({ preventScroll: true });\n } else resolveInitialFocusTarget(entry, dialog)?.focus({ preventScroll: true });\n }\n state.modal = entry.modal;\n if (entry.modal) lockPageScroll();\n else unlockPageScroll();\n };\n\n const modelessEscape = (event: KeyboardEvent) => {\n const top = state.stack[state.stack.length - 1];\n if (!top || top.modal || event.key !== \"Escape\" || event.defaultPrevented || event.isComposing) return;\n event.preventDefault();\n void requestDismiss(top);\n };\n\n const stopConnectionObserver = () => {\n document.removeEventListener(\"keydown\", modelessEscape);\n state.connectionObserver?.disconnect();\n state.connectionObserver = undefined;\n };\n\n const applyCancelBehavior = (\n dialog: HTMLDialogElement,\n close: () => void,\n behavior: NonNullable<OpenDialogOptions[\"cancelBehavior\"]>,\n ) => {\n dialog.oncancel = (event) => {\n if (behavior === \"ignore\") {\n event.preventDefault();\n return;\n }\n event.preventDefault();\n close();\n };\n dialog.onmousedown = (event) => {\n state.mouseDownOnDialog = event.target === dialog;\n };\n dialog.onclick = (event) => {\n const realBackdropClick = state.mouseDownOnDialog === true;\n state.mouseDownOnDialog = false;\n if (event.target !== dialog || !state.modal) return;\n if (!realBackdropClick) return;\n if (behavior === \"ignore\") return;\n if (isPointInsideToast(event.clientX, event.clientY)) return;\n close();\n };\n };\n\n const requestDismiss = async (entry: DialogStackEntry) => {\n if (state.stack[state.stack.length - 1] !== entry || entry.dismissPending || entry.cancelBehavior === \"ignore\") return;\n if (!entry.dismissHandler) {\n popTop(undefined);\n return;\n }\n entry.dismissPending = true;\n try {\n await entry.dismissHandler();\n } catch (error) {\n // A failed guard must never discard the dialog's state.\n console.error(\"Dialog dismissal failed\", error);\n } finally {\n entry.dismissPending = false;\n }\n };\n\n const popTop = (result?: unknown) => {\n const top = state.stack.pop();\n if (!top) return;\n top.dispose?.();\n top.container.remove();\n\n const dialog = state.element;\n const previous = state.stack[state.stack.length - 1];\n if (previous && dialog) {\n previous.container.style.display = \"\";\n dialog.className = previous.panelClassName;\n applyPresentation(previous);\n applyAccessibleName(dialog, previous);\n applyCancelBehavior(dialog, () => void requestDismiss(previous), previous.cancelBehavior);\n schedule(() => {\n const target = top.opener?.isConnected ? top.opener : resolveInitialFocusTarget(previous, dialog);\n target?.focus();\n });\n } else if (dialog) {\n dialog.oncancel = null;\n dialog.onmousedown = null;\n dialog.onclick = null;\n dialog.removeAttribute(\"aria-label\");\n dialog.removeAttribute(\"aria-labelledby\");\n if (dialog.open && typeof dialog.close === \"function\") dialog.close();\n else dialog.removeAttribute(\"open\");\n dialog.remove();\n state.element = undefined;\n stopConnectionObserver();\n unlockPageScroll();\n schedule(() => {\n if (top.opener?.isConnected) top.opener.focus();\n });\n }\n\n top.resolve?.(result);\n };\n\n const resetDisconnectedDialog = () => {\n if (state.stack.length === 0 || state.element?.isConnected) return;\n const entries = state.stack.splice(0);\n const dialog = state.element;\n state.element = undefined;\n stopConnectionObserver();\n dialog?.remove();\n unlockPageScroll();\n for (const entry of entries.reverse()) {\n entry.dispose?.();\n entry.container.remove();\n entry.resolve?.(undefined);\n }\n };\n\n const observeConnection = () => {\n if (state.connectionObserver || typeof MutationObserver === \"undefined\") return;\n document.addEventListener(\"keydown\", modelessEscape);\n state.connectionObserver = new MutationObserver(resetDisconnectedDialog);\n state.connectionObserver.observe(document.documentElement, { childList: true, subtree: true });\n };\n\n const open = <T>(view: DialogRender<T>, options: OpenDialogOptions = {}): Promise<T | undefined> => {\n if (options.signal?.aborted) return Promise.resolve(undefined);\n const dialog = ensureDialogElement();\n const previousTop = state.stack[state.stack.length - 1];\n if (previousTop) previousTop.container.style.display = \"none\";\n const activeElement = document.activeElement;\n\n const panelClassName = options.panelClassName ?? DEFAULT_PANEL_CLASS;\n const cancelBehavior = options.cancelBehavior ?? \"resolve-undefined\";\n const initialFocus = options.initialFocus ?? \"first-input\";\n dialog.className = panelClassName;\n\n const container = document.createElement(\"div\");\n container.className = options.contentClassName ?? DEFAULT_CONTENT_CLASS;\n dialog.appendChild(container);\n\n const entry: DialogStackEntry = {\n container,\n panelClassName,\n cancelBehavior,\n initialFocus,\n opener: activeElement instanceof HTMLElement ? activeElement : undefined,\n ariaLabel: options.ariaLabel,\n modal: true,\n };\n\n return new Promise((resolve, reject) => {\n const abort = () => {\n const index = state.stack.indexOf(entry);\n if (index < 0) return;\n if (index === state.stack.length - 1) popTop(undefined);\n else {\n state.stack.splice(index, 1);\n entry.dispose?.();\n entry.container.remove();\n entry.resolve?.(undefined);\n }\n };\n entry.resolve = (value) => {\n options.signal?.removeEventListener(\"abort\", abort);\n resolve(value as T | undefined);\n };\n const closeTyped: DialogClose<T> = (result) => {\n if (state.stack[state.stack.length - 1] !== entry) return;\n popTop(result);\n };\n\n state.stack.push(entry);\n try {\n entry.dispose = render(\n () =>\n view(closeTyped, {\n dialog,\n setModal: (modal) => {\n entry.modal = modal;\n applyPresentation(entry);\n },\n setPosition: (position) => {\n if (position && (!Number.isFinite(position.x) || !Number.isFinite(position.y))) return;\n entry.position = position;\n applyPresentation(entry);\n },\n requestDismiss: () => requestDismiss(entry),\n setDismissHandler: (handler) => {\n entry.dismissHandler = handler;\n },\n }),\n container,\n );\n applyPresentation(entry);\n applyAccessibleName(dialog, entry);\n applyCancelBehavior(dialog, () => void requestDismiss(entry), cancelBehavior);\n\n if (state.stack.length === 1) {\n if (typeof dialog.showModal === \"function\") {\n if (entry.modal) dialog.showModal();\n else dialog.show();\n } else dialog.setAttribute(\"open\", \"\");\n observeConnection();\n }\n options.signal?.addEventListener(\"abort\", abort, { once: true });\n if (options.signal?.aborted) abort();\n schedule(() => {\n if (state.stack[state.stack.length - 1] === entry) resolveInitialFocusTarget(entry, dialog)?.focus();\n });\n } catch (error) {\n entry.resolve = undefined;\n if (state.stack[state.stack.length - 1] === entry) popTop(undefined);\n reject(error);\n }\n });\n };\n\n const close: DialogCore[\"close\"] = (result) => {\n let first = true;\n while (state.stack.length > 0) {\n popTop(first ? result : undefined);\n first = false;\n }\n };\n\n return {\n open,\n close,\n isOpen: () => state.stack.length > 0,\n };\n};\n\nexport const dialogCore = createDialogCore();\n"],"mappings":"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","ignoreList":[]}
@@ -728,6 +728,7 @@ const openSearchPrompt = (resolver, options) => dialogCore.open(close => {
728
728
  panelClassName: "k2b-dialog k2b-dialog--search is-bare",
729
729
  contentClassName: "k2b-dialog__viewport is-search",
730
730
  initialFocus: "first-input",
731
+ signal: options?.signal,
731
732
  cancelBehavior: options?.cancelBehavior,
732
733
  ariaLabel: options?.ariaLabel ?? options?.title ?? resolveUiMessages().search
733
734
  });
@@ -795,6 +796,7 @@ export const prompts = {
795
796
  })(), {
796
797
  panelClassName: panelClass(options),
797
798
  contentClassName: contentClass(options?.surface),
799
+ signal: options?.signal,
798
800
  cancelBehavior: options?.cancelBehavior,
799
801
  ariaLabel: options?.ariaLabel ?? options?.title ?? resolveUiMessages().info
800
802
  }),
@@ -906,6 +908,7 @@ export const prompts = {
906
908
  panelClassName: panelClass(options),
907
909
  contentClassName: contentClass(options?.surface),
908
910
  initialFocus: confirmationPhrase ? () => confirmationInput ?? null : undefined,
911
+ signal: options?.signal,
909
912
  cancelBehavior: options?.cancelBehavior,
910
913
  ariaLabel: options?.ariaLabel ?? options?.title ?? resolveUiMessages().confirmation
911
914
  });
@@ -918,6 +921,7 @@ export const prompts = {
918
921
  }), {
919
922
  panelClassName: panelClass(config),
920
923
  contentClassName: contentClass(),
924
+ signal: config.signal,
921
925
  cancelBehavior: config.cancelBehavior,
922
926
  ariaLabel: config.ariaLabel ?? config.title ?? resolveUiMessages().form
923
927
  })) ?? null,
@@ -952,6 +956,7 @@ export const prompts = {
952
956
  }, {
953
957
  panelClassName: panelClass(options),
954
958
  contentClassName: contentClass(options?.surface),
959
+ signal: options?.signal,
955
960
  cancelBehavior: options?.cancelBehavior,
956
961
  ariaLabel: options?.ariaLabel ?? options?.title ?? resolveUiMessages().dialog
957
962
  }),
@@ -983,6 +988,7 @@ export const prompts = {
983
988
  variant: "danger"
984
989
  }),
985
990
  contentClassName: contentClass(options?.surface),
991
+ signal: options?.signal,
986
992
  cancelBehavior: options?.cancelBehavior,
987
993
  ariaLabel: options?.ariaLabel ?? options?.title ?? resolveUiMessages().error
988
994
  })