@k2b/ui 0.5.0 → 0.6.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 (387) 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/ContextMenu.js.map +1 -1
  4. package/dist/browser/actions/CopyButton.js.map +1 -1
  5. package/dist/browser/actions/Disclosure.js.map +1 -1
  6. package/dist/browser/actions/Dropdown.js.map +1 -1
  7. package/dist/browser/actions/FilterChip.js.map +1 -1
  8. package/dist/browser/actions/RemoveButton.js.map +1 -1
  9. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  10. package/dist/browser/actions/SplitButton.js.map +1 -1
  11. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  12. package/dist/browser/actions/Tabs.js.map +1 -1
  13. package/dist/browser/actions/Toolbar.js.map +1 -1
  14. package/dist/browser/actions/index.js.map +1 -1
  15. package/dist/browser/chat/ChatComposer.js.map +1 -1
  16. package/dist/browser/chat/ChatContextPopup.js.map +1 -1
  17. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  18. package/dist/browser/chat/ChatRoot.js.map +1 -1
  19. package/dist/browser/chat/ChatTasks.js +1 -1
  20. package/dist/browser/chat/ChatTasks.js.map +1 -1
  21. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  22. package/dist/browser/chat/chat-behavior.js.map +1 -1
  23. package/dist/browser/chat/composer-document.js.map +1 -1
  24. package/dist/browser/chat/index.js.map +1 -1
  25. package/dist/browser/content/Calendar.js.map +1 -1
  26. package/dist/browser/content/Chart.js.map +1 -1
  27. package/dist/browser/content/ChartExplorer.js.map +1 -1
  28. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  29. package/dist/browser/content/ChartFilterControls.js +1 -1
  30. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  31. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  32. package/dist/browser/content/CodeDisplay.js.map +1 -1
  33. package/dist/browser/content/DataTable.js.map +1 -1
  34. package/dist/browser/content/Docs.js.map +1 -1
  35. package/dist/browser/content/FileBrowser.js.map +1 -1
  36. package/dist/browser/content/FileGrid.js.map +1 -1
  37. package/dist/browser/content/FileTree.js.map +1 -1
  38. package/dist/browser/content/FileView.js.map +1 -1
  39. package/dist/browser/content/Lightbox.js.map +1 -1
  40. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  41. package/dist/browser/content/MarkdownView.js.map +1 -1
  42. package/dist/browser/content/Pagination.js.map +1 -1
  43. package/dist/browser/content/PdfPreview.js.map +1 -1
  44. package/dist/browser/content/RangePicker.js.map +1 -1
  45. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  46. package/dist/browser/content/ZoomPanViewport.js +396 -0
  47. package/dist/browser/content/ZoomPanViewport.js.map +1 -0
  48. package/dist/browser/content/calendar-event-layout.js.map +1 -1
  49. package/dist/browser/content/calendar-pointer.js.map +1 -1
  50. package/dist/browser/content/chart-cursor.js.map +1 -1
  51. package/dist/browser/content/chart-explorer.js.map +1 -1
  52. package/dist/browser/content/chart-inspection.js.map +1 -1
  53. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  54. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  55. package/dist/browser/content/chart-snapshot.js.map +1 -1
  56. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  57. package/dist/browser/content/chart-svg.js.map +1 -1
  58. package/dist/browser/content/code-highlight.js.map +1 -1
  59. package/dist/browser/content/collection-selection.js.map +1 -1
  60. package/dist/browser/content/delimited-preferences.js.map +1 -1
  61. package/dist/browser/content/file-tree.js.map +1 -1
  62. package/dist/browser/content/file-view-preview.js.map +1 -1
  63. package/dist/browser/content/index.js +1 -0
  64. package/dist/browser/content/index.js.map +1 -1
  65. package/dist/browser/content/zoom-pan.js +54 -0
  66. package/dist/browser/content/zoom-pan.js.map +1 -0
  67. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  68. package/dist/browser/feedback/Tooltip.js.map +1 -1
  69. package/dist/browser/feedback/dialog-core.js.map +1 -1
  70. package/dist/browser/feedback/index.js.map +1 -1
  71. package/dist/browser/feedback/prompts.js.map +1 -1
  72. package/dist/browser/feedback/toast.js.map +1 -1
  73. package/dist/browser/feedback/tooltip-position.js.map +1 -1
  74. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  75. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  76. package/dist/browser/inputs/Checkbox.js.map +1 -1
  77. package/dist/browser/inputs/CheckboxCard.js.map +1 -1
  78. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  79. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  80. package/dist/browser/inputs/Combobox.js.map +1 -1
  81. package/dist/browser/inputs/DatePicker.js.map +1 -1
  82. package/dist/browser/inputs/FileInputs.js.map +1 -1
  83. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  84. package/dist/browser/inputs/NumberInput.js.map +1 -1
  85. package/dist/browser/inputs/Select.js.map +1 -1
  86. package/dist/browser/inputs/SelectChip.js.map +1 -1
  87. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  88. package/dist/browser/inputs/Switch.js.map +1 -1
  89. package/dist/browser/inputs/TagEditor.js.map +1 -1
  90. package/dist/browser/inputs/TagsInput.js.map +1 -1
  91. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  92. package/dist/browser/inputs/TextInput.js +2 -1
  93. package/dist/browser/inputs/TextInput.js.map +1 -1
  94. package/dist/browser/inputs/choice.js.map +1 -1
  95. package/dist/browser/inputs/completion/behaviors.js.map +1 -1
  96. package/dist/browser/inputs/completion/engine.js.map +1 -1
  97. package/dist/browser/inputs/completion/index.js.map +1 -1
  98. package/dist/browser/inputs/completion/overlay.js.map +1 -1
  99. package/dist/browser/inputs/date-picker.js.map +1 -1
  100. package/dist/browser/inputs/editor-dom.js.map +1 -1
  101. package/dist/browser/inputs/field-contract.js.map +1 -1
  102. package/dist/browser/inputs/icon-options.js.map +1 -1
  103. package/dist/browser/inputs/image-crop.js.map +1 -1
  104. package/dist/browser/inputs/index.js.map +1 -1
  105. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  106. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  107. package/dist/browser/inputs/markdown/actions.js.map +1 -1
  108. package/dist/browser/inputs/markdown/active-formats.js.map +1 -1
  109. package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
  110. package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
  111. package/dist/browser/internal/color.js.map +1 -1
  112. package/dist/browser/internal/field.js.map +1 -1
  113. package/dist/browser/internal/portal.js.map +1 -1
  114. package/dist/browser/intl/Format.js.map +1 -1
  115. package/dist/browser/intl/index.js.map +1 -1
  116. package/dist/browser/intl/locale.js.map +1 -1
  117. package/dist/browser/intl/messages.js +6 -0
  118. package/dist/browser/intl/messages.js.map +1 -1
  119. package/dist/browser/layout/AppOverview.js.map +1 -1
  120. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  121. package/dist/browser/layout/BottomSheet.js.map +1 -1
  122. package/dist/browser/layout/DataPanel.js.map +1 -1
  123. package/dist/browser/layout/DetailPanel.js.map +1 -1
  124. package/dist/browser/layout/Discussion.js.map +1 -1
  125. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  126. package/dist/browser/layout/Navigation.js.map +1 -1
  127. package/dist/browser/layout/PanelDialog.js.map +1 -1
  128. package/dist/browser/layout/PanelHeader.js.map +1 -1
  129. package/dist/browser/layout/Panes.js.map +1 -1
  130. package/dist/browser/layout/PullToRefresh.js +8 -7
  131. package/dist/browser/layout/PullToRefresh.js.map +1 -1
  132. package/dist/browser/layout/ScrollArea.js.map +1 -1
  133. package/dist/browser/layout/Settings.js.map +1 -1
  134. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  135. package/dist/browser/layout/SettingsModal.js.map +1 -1
  136. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  137. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  138. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  139. package/dist/browser/layout/floating-window-geometry.js.map +1 -1
  140. package/dist/browser/layout/index.js.map +1 -1
  141. package/dist/browser/layout/navigation-model.js.map +1 -1
  142. package/dist/browser/layout/panes-layout.js.map +1 -1
  143. package/dist/browser/layout/scroll-fade.js.map +1 -1
  144. package/dist/browser/layout/stable-id.js.map +1 -1
  145. package/dist/browser/surfaces/Avatar.js.map +1 -1
  146. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  147. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  148. package/dist/browser/surfaces/NotFoundState.js.map +1 -1
  149. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  150. package/dist/browser/surfaces/Paper.js.map +1 -1
  151. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  152. package/dist/browser/surfaces/ProgressBar.js.map +1 -1
  153. package/dist/browser/surfaces/StatCell.js.map +1 -1
  154. package/dist/browser/surfaces/StatGrid.js.map +1 -1
  155. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  156. package/dist/browser/surfaces/Tag.js.map +1 -1
  157. package/dist/browser/surfaces/index.js.map +1 -1
  158. package/dist/browser/widgets/Widget.js.map +1 -1
  159. package/dist/browser/widgets/WidgetHero.js.map +1 -1
  160. package/dist/browser/widgets/WidgetList.js.map +1 -1
  161. package/dist/browser/widgets/WidgetPills.js.map +1 -1
  162. package/dist/browser/widgets/WidgetStat.js.map +1 -1
  163. package/dist/browser/widgets/WidgetStatus.js.map +1 -1
  164. package/dist/ssr/actions/Button.js +16 -6
  165. package/dist/ssr/actions/Button.js.map +1 -1
  166. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  167. package/dist/ssr/actions/CopyButton.js +2 -1
  168. package/dist/ssr/actions/CopyButton.js.map +1 -1
  169. package/dist/ssr/actions/Disclosure.js.map +1 -1
  170. package/dist/ssr/actions/Dropdown.js +7 -6
  171. package/dist/ssr/actions/Dropdown.js.map +1 -1
  172. package/dist/ssr/actions/FilterChip.js +5 -4
  173. package/dist/ssr/actions/FilterChip.js.map +1 -1
  174. package/dist/ssr/actions/RemoveButton.js +1 -0
  175. package/dist/ssr/actions/RemoveButton.js.map +1 -1
  176. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  177. package/dist/ssr/actions/SplitButton.js +1 -0
  178. package/dist/ssr/actions/SplitButton.js.map +1 -1
  179. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  180. package/dist/ssr/actions/Tabs.js.map +1 -1
  181. package/dist/ssr/actions/Toolbar.js.map +1 -1
  182. package/dist/ssr/actions/index.js.map +1 -1
  183. package/dist/ssr/chat/ChatComposer.js +6 -5
  184. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  185. package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
  186. package/dist/ssr/chat/ChatPrimitives.js +6 -5
  187. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  188. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  189. package/dist/ssr/chat/ChatTasks.js +1 -1
  190. package/dist/ssr/chat/ChatTasks.js.map +1 -1
  191. package/dist/ssr/chat/ChatTimeline.js +5 -4
  192. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  193. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  194. package/dist/ssr/chat/composer-document.js.map +1 -1
  195. package/dist/ssr/chat/index.js.map +1 -1
  196. package/dist/ssr/content/Calendar.js +2 -1
  197. package/dist/ssr/content/Calendar.js.map +1 -1
  198. package/dist/ssr/content/Chart.js.map +1 -1
  199. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  200. package/dist/ssr/content/ChartExplorerControls.js +5 -4
  201. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  202. package/dist/ssr/content/ChartFilterControls.js +3 -2
  203. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  204. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  205. package/dist/ssr/content/CodeDisplay.js.map +1 -1
  206. package/dist/ssr/content/DataTable.js +1 -0
  207. package/dist/ssr/content/DataTable.js.map +1 -1
  208. package/dist/ssr/content/Docs.js +1 -0
  209. package/dist/ssr/content/Docs.js.map +1 -1
  210. package/dist/ssr/content/FileBrowser.js +2 -1
  211. package/dist/ssr/content/FileBrowser.js.map +1 -1
  212. package/dist/ssr/content/FileGrid.js.map +1 -1
  213. package/dist/ssr/content/FileTree.js +2 -1
  214. package/dist/ssr/content/FileTree.js.map +1 -1
  215. package/dist/ssr/content/FileView.js +5 -4
  216. package/dist/ssr/content/FileView.js.map +1 -1
  217. package/dist/ssr/content/Lightbox.js +2 -1
  218. package/dist/ssr/content/Lightbox.js.map +1 -1
  219. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  220. package/dist/ssr/content/MarkdownView.js.map +1 -1
  221. package/dist/ssr/content/Pagination.js +2 -1
  222. package/dist/ssr/content/Pagination.js.map +1 -1
  223. package/dist/ssr/content/PdfPreview.js.map +1 -1
  224. package/dist/ssr/content/RangePicker.js.map +1 -1
  225. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  226. package/dist/ssr/content/ZoomPanViewport.js +300 -0
  227. package/dist/ssr/content/ZoomPanViewport.js.map +1 -0
  228. package/dist/ssr/content/calendar-event-layout.js.map +1 -1
  229. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  230. package/dist/ssr/content/chart-cursor.js.map +1 -1
  231. package/dist/ssr/content/chart-explorer.js.map +1 -1
  232. package/dist/ssr/content/chart-inspection.js.map +1 -1
  233. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  234. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  235. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  236. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  237. package/dist/ssr/content/chart-svg.js.map +1 -1
  238. package/dist/ssr/content/code-highlight.js.map +1 -1
  239. package/dist/ssr/content/collection-selection.js.map +1 -1
  240. package/dist/ssr/content/delimited-preferences.js.map +1 -1
  241. package/dist/ssr/content/file-tree.js.map +1 -1
  242. package/dist/ssr/content/file-view-preview.js.map +1 -1
  243. package/dist/ssr/content/index.js +1 -0
  244. package/dist/ssr/content/index.js.map +1 -1
  245. package/dist/ssr/content/zoom-pan.js +54 -0
  246. package/dist/ssr/content/zoom-pan.js.map +1 -0
  247. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  248. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  249. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  250. package/dist/ssr/feedback/index.js.map +1 -1
  251. package/dist/ssr/feedback/prompts.js +3 -2
  252. package/dist/ssr/feedback/prompts.js.map +1 -1
  253. package/dist/ssr/feedback/toast.js.map +1 -1
  254. package/dist/ssr/feedback/tooltip-position.js.map +1 -1
  255. package/dist/ssr/inputs/AutocompleteEditor.js +3 -2
  256. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  257. package/dist/ssr/inputs/AutocompleteSelect.js +5 -4
  258. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  259. package/dist/ssr/inputs/Checkbox.js +1 -0
  260. package/dist/ssr/inputs/Checkbox.js.map +1 -1
  261. package/dist/ssr/inputs/CheckboxCard.js.map +1 -1
  262. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  263. package/dist/ssr/inputs/ChoiceInputs.js +1 -0
  264. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  265. package/dist/ssr/inputs/Combobox.js +2 -1
  266. package/dist/ssr/inputs/Combobox.js.map +1 -1
  267. package/dist/ssr/inputs/DatePicker.js +4 -3
  268. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  269. package/dist/ssr/inputs/FileInputs.js +2 -1
  270. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  271. package/dist/ssr/inputs/MultiSelectInput.js +4 -3
  272. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  273. package/dist/ssr/inputs/NumberInput.js +2 -1
  274. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  275. package/dist/ssr/inputs/Select.js +4 -3
  276. package/dist/ssr/inputs/Select.js.map +1 -1
  277. package/dist/ssr/inputs/SelectChip.js +3 -2
  278. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  279. package/dist/ssr/inputs/SpecialInputs.js +1 -0
  280. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  281. package/dist/ssr/inputs/Switch.js.map +1 -1
  282. package/dist/ssr/inputs/TagEditor.js +3 -2
  283. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  284. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  285. package/dist/ssr/inputs/TemplateEditor.js +1 -0
  286. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  287. package/dist/ssr/inputs/TextInput.js +6 -4
  288. package/dist/ssr/inputs/TextInput.js.map +1 -1
  289. package/dist/ssr/inputs/choice.js.map +1 -1
  290. package/dist/ssr/inputs/completion/behaviors.js.map +1 -1
  291. package/dist/ssr/inputs/completion/engine.js.map +1 -1
  292. package/dist/ssr/inputs/completion/index.js.map +1 -1
  293. package/dist/ssr/inputs/completion/overlay.js.map +1 -1
  294. package/dist/ssr/inputs/date-picker.js.map +1 -1
  295. package/dist/ssr/inputs/editor-dom.js.map +1 -1
  296. package/dist/ssr/inputs/field-contract.js.map +1 -1
  297. package/dist/ssr/inputs/icon-options.js.map +1 -1
  298. package/dist/ssr/inputs/image-crop.js.map +1 -1
  299. package/dist/ssr/inputs/index.js.map +1 -1
  300. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  301. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  302. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  303. package/dist/ssr/inputs/markdown/actions.js.map +1 -1
  304. package/dist/ssr/inputs/markdown/active-formats.js.map +1 -1
  305. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  306. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
  307. package/dist/ssr/internal/color.js.map +1 -1
  308. package/dist/ssr/internal/field.js.map +1 -1
  309. package/dist/ssr/internal/portal.js.map +1 -1
  310. package/dist/ssr/intl/Format.js.map +1 -1
  311. package/dist/ssr/intl/index.js.map +1 -1
  312. package/dist/ssr/intl/locale.js.map +1 -1
  313. package/dist/ssr/intl/messages.js +6 -0
  314. package/dist/ssr/intl/messages.js.map +1 -1
  315. package/dist/ssr/layout/AppOverview.js +2 -1
  316. package/dist/ssr/layout/AppOverview.js.map +1 -1
  317. package/dist/ssr/layout/AppWorkspace.js +7 -6
  318. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  319. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  320. package/dist/ssr/layout/DataPanel.js +1 -0
  321. package/dist/ssr/layout/DataPanel.js.map +1 -1
  322. package/dist/ssr/layout/DetailPanel.js +1 -0
  323. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  324. package/dist/ssr/layout/Discussion.js +3 -2
  325. package/dist/ssr/layout/Discussion.js.map +1 -1
  326. package/dist/ssr/layout/FloatingWindow.js +1 -0
  327. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  328. package/dist/ssr/layout/Navigation.js +3 -2
  329. package/dist/ssr/layout/Navigation.js.map +1 -1
  330. package/dist/ssr/layout/PanelDialog.js +1 -0
  331. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  332. package/dist/ssr/layout/PanelHeader.js.map +1 -1
  333. package/dist/ssr/layout/Panes.js.map +1 -1
  334. package/dist/ssr/layout/PullToRefresh.js +1 -1
  335. package/dist/ssr/layout/PullToRefresh.js.map +1 -1
  336. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  337. package/dist/ssr/layout/Settings.js +2 -1
  338. package/dist/ssr/layout/Settings.js.map +1 -1
  339. package/dist/ssr/layout/SettingsCollection.js +1 -0
  340. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  341. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  342. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  343. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  344. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  345. package/dist/ssr/layout/floating-window-geometry.js.map +1 -1
  346. package/dist/ssr/layout/index.js.map +1 -1
  347. package/dist/ssr/layout/navigation-model.js.map +1 -1
  348. package/dist/ssr/layout/panes-layout.js.map +1 -1
  349. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  350. package/dist/ssr/layout/stable-id.js.map +1 -1
  351. package/dist/ssr/surfaces/Avatar.js +2 -1
  352. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  353. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  354. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  355. package/dist/ssr/surfaces/NotFoundState.js.map +1 -1
  356. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  357. package/dist/ssr/surfaces/Paper.js +2 -1
  358. package/dist/ssr/surfaces/Paper.js.map +1 -1
  359. package/dist/ssr/surfaces/Placeholder.js +2 -1
  360. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  361. package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
  362. package/dist/ssr/surfaces/StatCell.js +2 -1
  363. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  364. package/dist/ssr/surfaces/StatGrid.js +1 -0
  365. package/dist/ssr/surfaces/StatGrid.js.map +1 -1
  366. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  367. package/dist/ssr/surfaces/Tag.js.map +1 -1
  368. package/dist/ssr/surfaces/index.js.map +1 -1
  369. package/dist/ssr/widgets/Widget.js +1 -0
  370. package/dist/ssr/widgets/Widget.js.map +1 -1
  371. package/dist/ssr/widgets/WidgetHero.js.map +1 -1
  372. package/dist/ssr/widgets/WidgetList.js.map +1 -1
  373. package/dist/ssr/widgets/WidgetPills.js.map +1 -1
  374. package/dist/ssr/widgets/WidgetStat.js +1 -0
  375. package/dist/ssr/widgets/WidgetStat.js.map +1 -1
  376. package/dist/ssr/widgets/WidgetStatus.js.map +1 -1
  377. package/dist/styles.css +1 -1
  378. package/dist/types/actions/Button.d.ts +5 -0
  379. package/dist/types/actions/SplitButton.d.ts +1 -1
  380. package/dist/types/actions/SpotlightSearch.d.ts +1 -1
  381. package/dist/types/actions/index.d.ts +1 -1
  382. package/dist/types/content/ZoomPanViewport.d.ts +33 -0
  383. package/dist/types/content/index.d.ts +2 -0
  384. package/dist/types/content/zoom-pan.d.ts +29 -0
  385. package/dist/types/feedback/prompts.d.ts +4 -3
  386. package/dist/types/intl/messages.d.ts +3 -0
  387. package/package.json +9 -10
@@ -1 +1 @@
1
- {"version":3,"names":["highlight","createEffect","createMemo","createSignal","createUniqueId","For","onCleanup","onMount","Show","untrack","createFieldMeta","Field","fieldControlAria","useUiMessages","abbreviations","abbreviationsCompletion","buildSuggestContext","collectKnownLabels","createCompletionBehaviorState","detectQuery","displayLabel","renderWithOverlay","resolveSuggestions","resolveMaybeAccessor","computeActiveFormats","handleListContinuation","handleShortcut","handleSmartPaste","isInCodeZone","Toolbar","MarkdownEditor","props","messages","meta","id","textarea","preview","dropdown","completionAbort","completionTimer","overlayFrame","overlayInitialized","renderPendingOverlay","completionBehavior","textareaSignal","setTextareaSignal","activeFormats","setActiveFormats","Set","composing","setComposing","localValue","setLocalValue","value","error","state","setState","loading","setLoading","completionError","setCompletionError","dropdownOpen","setDropdownOpen","completionId","listboxId","controlId","optionId","index","activeSuggestion","current","suggestions","selectedIndex","mergedCompletions","merged","Object","keys","length","push","completions","undefined","knownLabels","incoming","target","labels","active","ghost","at","context","end","text","slice","anchor","innerHTML","markdown","scrollTop","scrollLeft","matches","positionDropdown","requestAnimationFrame","render","updateActiveFormats","closeDropdown","hidePopover","clearCompletion","abort","clearTimeout","isConnected","querySelector","rect","getBoundingClientRect","maxHeight","spaceBelow","window","innerHeight","bottom","openAbove","top","width","Math","min","innerWidth","left","style","setProperty","max","showPopover","isAbortError","DOMException","name","Boolean","applySuggestionList","normalized","toLowerCase","usable","filter","suggestion","textEdit","start","Number","isInteger","startsWith","previous","retained","findIndex","completion","queueMicrotask","runAsyncCompletion","promise","signal","aborted","Error","message","startCompletionResolution","result","query","kind","data","recomputeCompletion","isExcluded","AbortController","delay","debounceMs","setTimeout","retryCompletion","activateSuggestion","applied","applySuggestion","moveSelection","direction","stats","lines","split","words","match","chars","selectionChange","document","activeElement","reposition","addEventListener","removeEventListener","cancelAnimationFrame","reset","onInput","event","tryExpand","currentTarget","onValueChange","onKeyDown","isComposing","key","metaKey","ctrlKey","altKey","shiftKey","tryRestore","preventDefault","dropdownCompletion","blur","onSubmit","saveControls","_$createComponent","when","onSave","children","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","$$click","$$mousedown","_$effect","_p$","_v$","saveShortcut","_v$2","save","_v$3","disabled","saveDisabled","saving","_v$4","saved","e","_$setAttribute","t","a","_$setProperty","o","_$className","_$runHydrationEvents","class","label","description","fill","required","_el$3","_tmpl$6","_el$36","_el$37","_co$1","_$getNextMarker","nextSibling","_el$4","_el$8","_el$9","_co$","_el$6","_el$7","_el$38","_el$39","_co$10","_el$40","_el$41","_co$11","$$keydown","_$insert","noToolbar","trailing","_$memo","toolbarTrailing","onClose","_el$42","_tmpl$7","_v$12","close","_v$13","_v$14","placeholder","_el$5","_tmpl$2","_ref$","_$use","next","relatedTarget","contains","onValueCommit","$$input","element","textareaRef","_$spread","_$mergeProps","spellcheck","maxLength","aria-controls","aria-activedescendant","showStats","_el$0","_tmpl$3","_el$1","_el$11","_el$12","_co$2","_el$10","_el$13","_el$14","_co$3","_el$15","_el$17","_el$18","_co$4","_el$16","_el$19","_el$20","_co$5","_el$21","_el$23","_el$24","_co$6","_el$22","_el$25","_el$26","_co$7","_el$27","_tmpl$5","_el$28","_el$30","_el$31","_co$8","_el$32","_el$33","_co$9","_el$34","_el$35","_co$0","_ref$2","_tmpl$4","_el$43","_tmpl$8","_el$44","_el$45","_el$46","retry","each","_el$47","_tmpl$9","_el$48","_el$49","_el$50","_co$12","focus","hint","_el$51","_tmpl$0","_v$15","_v$16","_v$5","completionSuggestions","_v$6","_v$7","labelId","_v$8","_v$9","_v$0","_v$1","variant","_v$10","_v$11","String","i","n","s","_$setStyleProperty","_$delegateEvents"],"sources":["inputs/markdown/MarkdownEditor.tsx"],"sourcesContent":["import { highlight } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../../internal/field\";\nimport { useUiMessages } from \"../../intl/messages\";\nimport {\n abbreviations as abbreviationsCompletion,\n buildSuggestContext,\n type Completion,\n collectKnownLabels,\n createCompletionBehaviorState,\n detectQuery,\n displayLabel,\n type QueryContext,\n renderWithOverlay,\n resolveSuggestions,\n type Suggestion,\n} from \"../completion\";\nimport type { ValueFieldProps } from \"../field-contract\";\nimport { resolveMaybeAccessor } from \"../field-contract\";\nimport { computeActiveFormats } from \"./active-formats\";\nimport { handleListContinuation, handleShortcut, handleSmartPaste } from \"./behaviors\";\nimport { isInCodeZone } from \"./code-zone\";\nimport Toolbar from \"./Toolbar\";\n\nexport type MarkdownEditorProps = ValueFieldProps<string> & {\n onSubmit?: () => void;\n placeholder?: string;\n lines?: number;\n noToolbar?: boolean;\n spellcheck?: boolean;\n name?: string;\n maxLength?: number;\n textareaRef?: (element: HTMLTextAreaElement) => void;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n showStats?: boolean;\n variant?: \"default\" | \"paper\" | \"embedded\";\n fill?: boolean;\n /** Groups save and close at the end of the toolbar. The caller owns navigation and unsaved-change confirmation. */\n onClose?: () => void;\n onSave?: () => void;\n saveDisabled?: boolean;\n saving?: boolean;\n /** Shows a successful-save check. The caller clears it after a brief delay or the next edit. */\n saved?: boolean;\n toolbarTrailing?: JSX.Element;\n};\n\ntype CompletionState = {\n context: QueryContext;\n suggestions: readonly Suggestion[];\n selectedIndex: number;\n};\n\nexport function MarkdownEditor(props: MarkdownEditorProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n let textarea: HTMLTextAreaElement | undefined;\n let preview: HTMLDivElement | undefined;\n let dropdown: HTMLDivElement | undefined;\n let completionAbort: AbortController | null = null;\n let completionTimer: ReturnType<typeof setTimeout> | null = null;\n let overlayFrame: number | undefined;\n let overlayInitialized = false;\n let renderPendingOverlay: (() => void) | undefined;\n const completionBehavior = createCompletionBehaviorState();\n\n const [textareaSignal, setTextareaSignal] = createSignal<HTMLTextAreaElement | null>(null);\n const [activeFormats, setActiveFormats] = createSignal<Set<string>>(new Set());\n const [composing, setComposing] = createSignal(false);\n const [localValue, setLocalValue] = createSignal(resolveMaybeAccessor(props.value) ?? \"\");\n const error = () => resolveMaybeAccessor(props.error);\n const [state, setState] = createSignal<CompletionState | null>(null);\n const [loading, setLoading] = createSignal(false);\n const [completionError, setCompletionError] = createSignal<string | null>(null);\n const [dropdownOpen, setDropdownOpen] = createSignal(false);\n const completionId = createUniqueId();\n const listboxId = `${meta.controlId}-${completionId}-suggestions`;\n const optionId = (index: number): string => `${listboxId}-${index}`;\n const activeSuggestion = (): Suggestion | null => {\n const current = state();\n return current?.suggestions[current.selectedIndex] ?? null;\n };\n\n const mergedCompletions = createMemo<readonly Completion[] | undefined>(() => {\n const merged: Completion[] = [];\n if (props.abbreviations && Object.keys(props.abbreviations).length > 0) {\n merged.push(abbreviationsCompletion(props.abbreviations));\n }\n if (props.completions) merged.push(...props.completions);\n return merged.length > 0 ? merged : undefined;\n });\n const knownLabels = createMemo(() => collectKnownLabels(mergedCompletions()));\n\n createEffect(() => {\n const incoming = resolveMaybeAccessor(props.value);\n if (incoming !== undefined && incoming !== null && incoming !== untrack(localValue)) {\n setLocalValue(incoming);\n }\n });\n\n createEffect(() => {\n const target = localValue();\n if (!composing() && textarea && textarea.value !== target) {\n textarea.value = target;\n }\n });\n\n createEffect(() => {\n if (!preview) return;\n const value = localValue();\n const labels = knownLabels();\n const current = state();\n const active = activeSuggestion();\n const ghost =\n current && active\n ? {\n at: current.context.end,\n text: active.text.slice(current.context.text.length),\n }\n : undefined;\n const anchor = current && !ghost ? { at: current.context.end } : undefined;\n renderPendingOverlay = () => {\n if (!preview) return;\n preview.innerHTML = renderWithOverlay(value, (text) => highlight.markdown(text, { knownLabels: labels }), { ghost, anchor });\n if (textarea) {\n preview.scrollTop = textarea.scrollTop;\n preview.scrollLeft = textarea.scrollLeft;\n }\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n if (!overlayInitialized) {\n overlayInitialized = true;\n renderPendingOverlay();\n renderPendingOverlay = undefined;\n return;\n }\n if (overlayFrame !== undefined) return;\n overlayFrame = requestAnimationFrame(() => {\n overlayFrame = undefined;\n const render = renderPendingOverlay;\n renderPendingOverlay = undefined;\n render?.();\n });\n });\n\n const updateActiveFormats = (): void => {\n if (textarea) setActiveFormats(computeActiveFormats(textarea));\n };\n\n const closeDropdown = (): void => {\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n setDropdownOpen(false);\n };\n\n const clearCompletion = (): void => {\n completionAbort?.abort();\n completionAbort = null;\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n setState(null);\n setLoading(false);\n setCompletionError(null);\n closeDropdown();\n };\n\n const positionDropdown = (): void => {\n if (!dropdown?.isConnected || !preview?.isConnected || !textarea?.isConnected) {\n return;\n }\n const anchor = preview.querySelector<HTMLElement>(\"[data-completion-anchor]\");\n const rect = anchor?.getBoundingClientRect() ?? textarea.getBoundingClientRect();\n const maxHeight = 260;\n const spaceBelow = window.innerHeight - rect.bottom;\n const openAbove = spaceBelow < maxHeight && rect.top > spaceBelow;\n const width = Math.min(280, window.innerWidth - 16);\n const left = Math.min(rect.left, window.innerWidth - width - 8);\n dropdown.style.setProperty(\"left\", `${Math.max(8, left)}px`, \"important\");\n dropdown.style.setProperty(\"width\", `${width}px`, \"important\");\n if (openAbove) {\n dropdown.style.setProperty(\"top\", \"auto\", \"important\");\n dropdown.style.setProperty(\"bottom\", `${window.innerHeight - rect.top + 4}px`, \"important\");\n } else {\n dropdown.style.setProperty(\"top\", `${rect.bottom + 4}px`, \"important\");\n dropdown.style.setProperty(\"bottom\", \"auto\", \"important\");\n }\n if (!dropdown.matches(\":popover-open\")) dropdown.showPopover();\n };\n\n const isAbortError = (error: unknown): boolean =>\n error instanceof DOMException\n ? error.name === \"AbortError\"\n : Boolean(error && typeof error === \"object\" && \"name\" in error && (error as { name: string }).name === \"AbortError\");\n\n const applySuggestionList = (context: QueryContext, suggestions: readonly Suggestion[]): void => {\n const value = localValue();\n const normalized = context.text.toLowerCase();\n const usable = suggestions.filter((suggestion) => {\n if (suggestion.textEdit) {\n const { start, end, text } = suggestion.textEdit;\n return (\n Number.isInteger(start) &&\n Number.isInteger(end) &&\n start >= 0 &&\n end >= start &&\n end <= value.length &&\n value.slice(start, end) !== text\n );\n }\n return suggestion.text.toLowerCase().startsWith(normalized) && suggestion.text.length > context.text.length;\n });\n if (usable.length === 0) {\n setState(null);\n closeDropdown();\n return;\n }\n const previous = activeSuggestion()?.text;\n const retained = previous ? usable.findIndex((suggestion) => suggestion.text === previous) : -1;\n setState({\n context,\n suggestions: usable,\n selectedIndex: retained >= 0 ? retained : 0,\n });\n if (context.completion.dropdown) {\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n } else {\n closeDropdown();\n }\n };\n\n const runAsyncCompletion = async (context: QueryContext, promise: Promise<readonly Suggestion[]>, signal: AbortSignal): Promise<void> => {\n try {\n const suggestions = await promise;\n if (signal.aborted) return;\n setLoading(false);\n applySuggestionList(context, suggestions);\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n }\n };\n\n const startCompletionResolution = (context: QueryContext, signal: AbortSignal): void => {\n if (signal.aborted || !textarea) return;\n setLoading(true);\n setCompletionError(null);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n try {\n const result = resolveSuggestions(context.completion, context.query, buildSuggestContext(textarea, context), signal);\n if (result.kind === \"sync\") {\n setLoading(false);\n applySuggestionList(context, result.data);\n } else {\n void runAsyncCompletion(context, result.promise, signal);\n }\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n queueMicrotask(positionDropdown);\n }\n };\n\n const recomputeCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) {\n clearCompletion();\n return;\n }\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n const current = state();\n if (\n current &&\n (current.context.start !== context.start ||\n current.context.end !== context.end ||\n current.context.text !== context.text ||\n current.context.completion !== context.completion)\n ) {\n setState(null);\n closeDropdown();\n }\n setCompletionError(null);\n const delay = Math.max(0, context.completion.debounceMs ?? 0);\n if (delay === 0) {\n startCompletionResolution(context, completionAbort.signal);\n } else {\n setLoading(false);\n if (!state()) closeDropdown();\n const signal = completionAbort.signal;\n completionTimer = setTimeout(() => {\n completionTimer = null;\n startCompletionResolution(context, signal);\n }, delay);\n }\n };\n\n const retryCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) return clearCompletion();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n startCompletionResolution(context, completionAbort.signal);\n };\n\n const activateSuggestion = (index = state()?.selectedIndex ?? -1): boolean => {\n const current = state();\n const active = current?.suggestions[index];\n if (!textarea || !current || !active) return false;\n if (!active.textEdit && active.text === current.context.text) {\n closeDropdown();\n setState(null);\n return false;\n }\n const applied = completionBehavior.applySuggestion(textarea, current.context, active);\n closeDropdown();\n setState(null);\n return applied;\n };\n\n const moveSelection = (direction: 1 | -1): void => {\n const current = state();\n if (!current || current.suggestions.length === 0) return;\n setState({\n ...current,\n selectedIndex: (current.selectedIndex + direction + current.suggestions.length) % current.suggestions.length,\n });\n };\n\n const stats = createMemo(() => {\n const value = localValue();\n return {\n lines: value.length === 0 ? 0 : value.split(\"\\n\").length,\n words: value.match(/\\S+/g)?.length ?? 0,\n chars: value.length,\n };\n });\n\n onMount(() => {\n if (textarea) setTextareaSignal(textarea);\n updateActiveFormats();\n const selectionChange = (): void => {\n if (document.activeElement === textarea) {\n updateActiveFormats();\n recomputeCompletion();\n }\n };\n // Reposition an OPEN popover only. Calling `positionDropdown` blindly\n // would `showPopover()` a dropdown that is deliberately closed (a\n // ghost-only completion keeps state without a dropdown).\n const reposition = (): void => {\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n document.addEventListener(\"selectionchange\", selectionChange);\n window.addEventListener(\"resize\", reposition);\n onCleanup(() => {\n document.removeEventListener(\"selectionchange\", selectionChange);\n window.removeEventListener(\"resize\", reposition);\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n if (overlayFrame !== undefined) cancelAnimationFrame(overlayFrame);\n overlayFrame = undefined;\n renderPendingOverlay = undefined;\n completionBehavior.reset();\n });\n });\n\n const onInput = (event: InputEvent & { currentTarget: HTMLTextAreaElement }): void => {\n if (\n completionBehavior.tryExpand(event.currentTarget, mergedCompletions(), {\n isExcluded: isInCodeZone,\n })\n ) {\n return;\n }\n setLocalValue(event.currentTarget.value);\n props.onValueChange?.(event.currentTarget.value);\n updateActiveFormats();\n recomputeCompletion();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (!textarea || event.isComposing) return;\n if (\n event.key === \"Backspace\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n !event.shiftKey &&\n completionBehavior.tryRestore(textarea)\n ) {\n event.preventDefault();\n return;\n }\n const current = state();\n const dropdownCompletion = current?.context.completion.dropdown === true;\n if (current && dropdownCompletion && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n event.preventDefault();\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1);\n return;\n }\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n current &&\n dropdownCompletion &&\n dropdownOpen()\n ) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Tab\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && current) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Escape\") {\n if (current) {\n event.preventDefault();\n closeDropdown();\n setState(null);\n return;\n }\n if ((mergedCompletions()?.length ?? 0) > 0) {\n event.preventDefault();\n textarea.blur();\n return;\n }\n }\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey) && props.onSubmit) {\n event.preventDefault();\n props.onSubmit();\n return;\n }\n if (handleShortcut(event, textarea)) {\n event.preventDefault();\n return;\n }\n if (event.key === \"Enter\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && handleListContinuation(textarea)) {\n event.preventDefault();\n }\n };\n\n const saveControls = (): JSX.Element => (\n <>\n <Show when={props.onSave}>\n <button\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n title={messages().saveShortcut}\n aria-label={messages().save}\n tabIndex={-1}\n disabled={props.disabled || props.saveDisabled || props.saving}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => props.onSave?.()}\n >\n <i class={props.saving ? \"ti ti-loader-2 k2b-spin\" : props.saved ? \"ti ti-check\" : \"ti ti-device-floppy\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </>\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n fill={props.fill}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-markdown-editor\"\n role=\"group\"\n aria-labelledby={props.label ? meta.labelId : undefined}\n aria-label={!props.label ? props[\"aria-label\"] : undefined}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n data-variant={props.variant === \"default\" ? undefined : props.variant}\n data-fill={props.fill ? \"true\" : undefined}\n style={{\n \"--k2b-editor-lines\": String(props.lines ?? 6),\n }}\n onKeyDown={(event) => {\n if (props.onSave && (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"s\") {\n event.preventDefault();\n if (!props.disabled && !props.saveDisabled && !props.saving) props.onSave();\n }\n }}\n >\n <Show when={!props.noToolbar}>\n <Toolbar\n textarea={textareaSignal}\n activeFormats={activeFormats}\n disabled={props.disabled}\n trailing={\n <>\n {props.toolbarTrailing}\n {saveControls()}\n <Show when={props.onClose}>\n <button\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n title={messages().close}\n aria-label={messages().close}\n tabIndex={props.disabled ? 0 : -1}\n onClick={() => props.onClose?.()}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n </>\n }\n />\n </Show>\n <div class=\"k2b-markdown-editor__surface\">\n <Show when={!localValue() && props.placeholder}>\n <div class=\"k2b-markdown-editor__placeholder\" aria-hidden=\"true\">\n {props.placeholder}\n </div>\n </Show>\n <div ref={preview} class=\"k2b-markdown-editor__preview\" aria-hidden=\"true\" />\n <textarea\n ref={(element) => {\n textarea = element;\n props.textareaRef?.(element);\n }}\n id={meta.controlId}\n name={props.name}\n class=\"k2b-markdown-editor__input\"\n onInput={onInput}\n onChange={(event) => props.onValueCommit?.(event.currentTarget.value)}\n onKeyDown={onKeyDown}\n onPaste={(event) => {\n if (textarea && handleSmartPaste(event, textarea)) {\n event.preventDefault();\n }\n }}\n onScroll={(event) => {\n if (preview) {\n preview.scrollTop = event.currentTarget.scrollTop;\n preview.scrollLeft = event.currentTarget.scrollLeft;\n }\n }}\n onCompositionStart={() => setComposing(true)}\n onCompositionEnd={() => setComposing(false)}\n onBlur={(event) => {\n const next = event.relatedTarget as HTMLElement | null;\n if (next && dropdown?.contains(next)) return;\n completionBehavior.reset();\n clearCompletion();\n }}\n disabled={props.disabled}\n required={props.required}\n spellcheck={props.spellcheck ?? true}\n maxLength={props.maxLength}\n {...fieldControlAria(meta, props)}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-controls={dropdownOpen() ? listboxId : undefined}\n aria-activedescendant={dropdownOpen() && state() ? optionId(state()!.selectedIndex) : undefined}\n />\n </div>\n <Show when={(props.showStats ?? true) && !props.disabled}>\n <div class=\"k2b-markdown-editor__stats\" aria-hidden=\"true\" data-empty={stats().chars === 0 ? \"true\" : undefined}>\n <span>\n {stats().lines} {stats().lines === 1 ? \"line\" : \"lines\"}\n </span>\n <span>\n {stats().words} {stats().words === 1 ? \"word\" : \"words\"}\n </span>\n <span>\n {stats().chars} {stats().chars === 1 ? \"char\" : \"chars\"}\n </span>\n </div>\n </Show>\n <Show when={state() || loading() || completionError()}>\n <div\n ref={dropdown}\n popover=\"manual\"\n class=\"k2b-autocomplete__options\"\n role=\"presentation\"\n aria-label={messages().completionSuggestions}\n >\n <div id={listboxId} class=\"k2b-autocomplete__listbox\" role=\"listbox\" aria-label={messages().suggestions}>\n <Show when={loading()}>\n <div class=\"k2b-autocomplete__status\" role=\"status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n Loading suggestions\n </div>\n </Show>\n <Show when={completionError()}>\n {(message) => (\n <div class=\"k2b-autocomplete__status\" data-error=\"true\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" />\n <span>{message()}</span>\n <button type=\"button\" onMouseDown={(event) => event.preventDefault()} onClick={retryCompletion}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <For each={state()?.suggestions ?? []}>\n {(suggestion, index) => (\n // biome-ignore lint/a11y/useKeyWithClickEvents: the owning textarea handles keyboard activation through aria-activedescendant.\n <div\n id={optionId(index())}\n class=\"k2b-autocomplete__option\"\n role=\"option\"\n aria-selected={index() === state()?.selectedIndex}\n onMouseEnter={() => {\n const current = state();\n if (current) {\n setState({ ...current, selectedIndex: index() });\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n activateSuggestion(index());\n textarea?.focus();\n }}\n >\n <span>{displayLabel(suggestion, state()!.context.completion)}</span>\n <Show when={suggestion.hint}>{(hint) => <small>{hint()}</small>}</Show>\n </div>\n )}\n </For>\n </div>\n </div>\n </Show>\n </div>\n </Field>\n );\n}\n\nexport type { Completion, SuggestContext, Suggestion } from \"../completion\";\nexport { abbreviations } from \"../completion\";\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["inputs/markdown/MarkdownEditor.tsx"],"sourcesContent":["import { highlight } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../../internal/field\";\nimport { useUiMessages } from \"../../intl/messages\";\nimport {\n abbreviations as abbreviationsCompletion,\n buildSuggestContext,\n type Completion,\n collectKnownLabels,\n createCompletionBehaviorState,\n detectQuery,\n displayLabel,\n type QueryContext,\n renderWithOverlay,\n resolveSuggestions,\n type Suggestion,\n} from \"../completion\";\nimport type { ValueFieldProps } from \"../field-contract\";\nimport { resolveMaybeAccessor } from \"../field-contract\";\nimport { computeActiveFormats } from \"./active-formats\";\nimport { handleListContinuation, handleShortcut, handleSmartPaste } from \"./behaviors\";\nimport { isInCodeZone } from \"./code-zone\";\nimport Toolbar from \"./Toolbar\";\n\nexport type MarkdownEditorProps = ValueFieldProps<string> & {\n onSubmit?: () => void;\n placeholder?: string;\n lines?: number;\n noToolbar?: boolean;\n spellcheck?: boolean;\n name?: string;\n maxLength?: number;\n textareaRef?: (element: HTMLTextAreaElement) => void;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n showStats?: boolean;\n variant?: \"default\" | \"paper\" | \"embedded\";\n fill?: boolean;\n /** Groups save and close at the end of the toolbar. The caller owns navigation and unsaved-change confirmation. */\n onClose?: () => void;\n onSave?: () => void;\n saveDisabled?: boolean;\n saving?: boolean;\n /** Shows a successful-save check. The caller clears it after a brief delay or the next edit. */\n saved?: boolean;\n toolbarTrailing?: JSX.Element;\n};\n\ntype CompletionState = {\n context: QueryContext;\n suggestions: readonly Suggestion[];\n selectedIndex: number;\n};\n\nexport function MarkdownEditor(props: MarkdownEditorProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n let textarea: HTMLTextAreaElement | undefined;\n let preview: HTMLDivElement | undefined;\n let dropdown: HTMLDivElement | undefined;\n let completionAbort: AbortController | null = null;\n let completionTimer: ReturnType<typeof setTimeout> | null = null;\n let overlayFrame: number | undefined;\n let overlayInitialized = false;\n let renderPendingOverlay: (() => void) | undefined;\n const completionBehavior = createCompletionBehaviorState();\n\n const [textareaSignal, setTextareaSignal] = createSignal<HTMLTextAreaElement | null>(null);\n const [activeFormats, setActiveFormats] = createSignal<Set<string>>(new Set());\n const [composing, setComposing] = createSignal(false);\n const [localValue, setLocalValue] = createSignal(resolveMaybeAccessor(props.value) ?? \"\");\n const error = () => resolveMaybeAccessor(props.error);\n const [state, setState] = createSignal<CompletionState | null>(null);\n const [loading, setLoading] = createSignal(false);\n const [completionError, setCompletionError] = createSignal<string | null>(null);\n const [dropdownOpen, setDropdownOpen] = createSignal(false);\n const completionId = createUniqueId();\n const listboxId = `${meta.controlId}-${completionId}-suggestions`;\n const optionId = (index: number): string => `${listboxId}-${index}`;\n const activeSuggestion = (): Suggestion | null => {\n const current = state();\n return current?.suggestions[current.selectedIndex] ?? null;\n };\n\n const mergedCompletions = createMemo<readonly Completion[] | undefined>(() => {\n const merged: Completion[] = [];\n if (props.abbreviations && Object.keys(props.abbreviations).length > 0) {\n merged.push(abbreviationsCompletion(props.abbreviations));\n }\n if (props.completions) merged.push(...props.completions);\n return merged.length > 0 ? merged : undefined;\n });\n const knownLabels = createMemo(() => collectKnownLabels(mergedCompletions()));\n\n createEffect(() => {\n const incoming = resolveMaybeAccessor(props.value);\n if (incoming !== undefined && incoming !== null && incoming !== untrack(localValue)) {\n setLocalValue(incoming);\n }\n });\n\n createEffect(() => {\n const target = localValue();\n if (!composing() && textarea && textarea.value !== target) {\n textarea.value = target;\n }\n });\n\n createEffect(() => {\n if (!preview) return;\n const value = localValue();\n const labels = knownLabels();\n const current = state();\n const active = activeSuggestion();\n const ghost =\n current && active\n ? {\n at: current.context.end,\n text: active.text.slice(current.context.text.length),\n }\n : undefined;\n const anchor = current && !ghost ? { at: current.context.end } : undefined;\n renderPendingOverlay = () => {\n if (!preview) return;\n preview.innerHTML = renderWithOverlay(value, (text) => highlight.markdown(text, { knownLabels: labels }), { ghost, anchor });\n if (textarea) {\n preview.scrollTop = textarea.scrollTop;\n preview.scrollLeft = textarea.scrollLeft;\n }\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n if (!overlayInitialized) {\n overlayInitialized = true;\n renderPendingOverlay();\n renderPendingOverlay = undefined;\n return;\n }\n if (overlayFrame !== undefined) return;\n overlayFrame = requestAnimationFrame(() => {\n overlayFrame = undefined;\n const render = renderPendingOverlay;\n renderPendingOverlay = undefined;\n render?.();\n });\n });\n\n const updateActiveFormats = (): void => {\n if (textarea) setActiveFormats(computeActiveFormats(textarea));\n };\n\n const closeDropdown = (): void => {\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n setDropdownOpen(false);\n };\n\n const clearCompletion = (): void => {\n completionAbort?.abort();\n completionAbort = null;\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n setState(null);\n setLoading(false);\n setCompletionError(null);\n closeDropdown();\n };\n\n const positionDropdown = (): void => {\n if (!dropdown?.isConnected || !preview?.isConnected || !textarea?.isConnected) {\n return;\n }\n const anchor = preview.querySelector<HTMLElement>(\"[data-completion-anchor]\");\n const rect = anchor?.getBoundingClientRect() ?? textarea.getBoundingClientRect();\n const maxHeight = 260;\n const spaceBelow = window.innerHeight - rect.bottom;\n const openAbove = spaceBelow < maxHeight && rect.top > spaceBelow;\n const width = Math.min(280, window.innerWidth - 16);\n const left = Math.min(rect.left, window.innerWidth - width - 8);\n dropdown.style.setProperty(\"left\", `${Math.max(8, left)}px`, \"important\");\n dropdown.style.setProperty(\"width\", `${width}px`, \"important\");\n if (openAbove) {\n dropdown.style.setProperty(\"top\", \"auto\", \"important\");\n dropdown.style.setProperty(\"bottom\", `${window.innerHeight - rect.top + 4}px`, \"important\");\n } else {\n dropdown.style.setProperty(\"top\", `${rect.bottom + 4}px`, \"important\");\n dropdown.style.setProperty(\"bottom\", \"auto\", \"important\");\n }\n if (!dropdown.matches(\":popover-open\")) dropdown.showPopover();\n };\n\n const isAbortError = (error: unknown): boolean =>\n error instanceof DOMException\n ? error.name === \"AbortError\"\n : Boolean(error && typeof error === \"object\" && \"name\" in error && (error as { name: string }).name === \"AbortError\");\n\n const applySuggestionList = (context: QueryContext, suggestions: readonly Suggestion[]): void => {\n const value = localValue();\n const normalized = context.text.toLowerCase();\n const usable = suggestions.filter((suggestion) => {\n if (suggestion.textEdit) {\n const { start, end, text } = suggestion.textEdit;\n return (\n Number.isInteger(start) &&\n Number.isInteger(end) &&\n start >= 0 &&\n end >= start &&\n end <= value.length &&\n value.slice(start, end) !== text\n );\n }\n return suggestion.text.toLowerCase().startsWith(normalized) && suggestion.text.length > context.text.length;\n });\n if (usable.length === 0) {\n setState(null);\n closeDropdown();\n return;\n }\n const previous = activeSuggestion()?.text;\n const retained = previous ? usable.findIndex((suggestion) => suggestion.text === previous) : -1;\n setState({\n context,\n suggestions: usable,\n selectedIndex: retained >= 0 ? retained : 0,\n });\n if (context.completion.dropdown) {\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n } else {\n closeDropdown();\n }\n };\n\n const runAsyncCompletion = async (context: QueryContext, promise: Promise<readonly Suggestion[]>, signal: AbortSignal): Promise<void> => {\n try {\n const suggestions = await promise;\n if (signal.aborted) return;\n setLoading(false);\n applySuggestionList(context, suggestions);\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n }\n };\n\n const startCompletionResolution = (context: QueryContext, signal: AbortSignal): void => {\n if (signal.aborted || !textarea) return;\n setLoading(true);\n setCompletionError(null);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n try {\n const result = resolveSuggestions(context.completion, context.query, buildSuggestContext(textarea, context), signal);\n if (result.kind === \"sync\") {\n setLoading(false);\n applySuggestionList(context, result.data);\n } else {\n void runAsyncCompletion(context, result.promise, signal);\n }\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n queueMicrotask(positionDropdown);\n }\n };\n\n const recomputeCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) {\n clearCompletion();\n return;\n }\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n const current = state();\n if (\n current &&\n (current.context.start !== context.start ||\n current.context.end !== context.end ||\n current.context.text !== context.text ||\n current.context.completion !== context.completion)\n ) {\n setState(null);\n closeDropdown();\n }\n setCompletionError(null);\n const delay = Math.max(0, context.completion.debounceMs ?? 0);\n if (delay === 0) {\n startCompletionResolution(context, completionAbort.signal);\n } else {\n setLoading(false);\n if (!state()) closeDropdown();\n const signal = completionAbort.signal;\n completionTimer = setTimeout(() => {\n completionTimer = null;\n startCompletionResolution(context, signal);\n }, delay);\n }\n };\n\n const retryCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) return clearCompletion();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n startCompletionResolution(context, completionAbort.signal);\n };\n\n const activateSuggestion = (index = state()?.selectedIndex ?? -1): boolean => {\n const current = state();\n const active = current?.suggestions[index];\n if (!textarea || !current || !active) return false;\n if (!active.textEdit && active.text === current.context.text) {\n closeDropdown();\n setState(null);\n return false;\n }\n const applied = completionBehavior.applySuggestion(textarea, current.context, active);\n closeDropdown();\n setState(null);\n return applied;\n };\n\n const moveSelection = (direction: 1 | -1): void => {\n const current = state();\n if (!current || current.suggestions.length === 0) return;\n setState({\n ...current,\n selectedIndex: (current.selectedIndex + direction + current.suggestions.length) % current.suggestions.length,\n });\n };\n\n const stats = createMemo(() => {\n const value = localValue();\n return {\n lines: value.length === 0 ? 0 : value.split(\"\\n\").length,\n words: value.match(/\\S+/g)?.length ?? 0,\n chars: value.length,\n };\n });\n\n onMount(() => {\n if (textarea) setTextareaSignal(textarea);\n updateActiveFormats();\n const selectionChange = (): void => {\n if (document.activeElement === textarea) {\n updateActiveFormats();\n recomputeCompletion();\n }\n };\n // Reposition an OPEN popover only. Calling `positionDropdown` blindly\n // would `showPopover()` a dropdown that is deliberately closed (a\n // ghost-only completion keeps state without a dropdown).\n const reposition = (): void => {\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n document.addEventListener(\"selectionchange\", selectionChange);\n window.addEventListener(\"resize\", reposition);\n onCleanup(() => {\n document.removeEventListener(\"selectionchange\", selectionChange);\n window.removeEventListener(\"resize\", reposition);\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n if (overlayFrame !== undefined) cancelAnimationFrame(overlayFrame);\n overlayFrame = undefined;\n renderPendingOverlay = undefined;\n completionBehavior.reset();\n });\n });\n\n const onInput = (event: InputEvent & { currentTarget: HTMLTextAreaElement }): void => {\n if (\n completionBehavior.tryExpand(event.currentTarget, mergedCompletions(), {\n isExcluded: isInCodeZone,\n })\n ) {\n return;\n }\n setLocalValue(event.currentTarget.value);\n props.onValueChange?.(event.currentTarget.value);\n updateActiveFormats();\n recomputeCompletion();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (!textarea || event.isComposing) return;\n if (\n event.key === \"Backspace\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n !event.shiftKey &&\n completionBehavior.tryRestore(textarea)\n ) {\n event.preventDefault();\n return;\n }\n const current = state();\n const dropdownCompletion = current?.context.completion.dropdown === true;\n if (current && dropdownCompletion && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n event.preventDefault();\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1);\n return;\n }\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n current &&\n dropdownCompletion &&\n dropdownOpen()\n ) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Tab\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && current) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Escape\") {\n if (current) {\n event.preventDefault();\n closeDropdown();\n setState(null);\n return;\n }\n if ((mergedCompletions()?.length ?? 0) > 0) {\n event.preventDefault();\n textarea.blur();\n return;\n }\n }\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey) && props.onSubmit) {\n event.preventDefault();\n props.onSubmit();\n return;\n }\n if (handleShortcut(event, textarea)) {\n event.preventDefault();\n return;\n }\n if (event.key === \"Enter\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && handleListContinuation(textarea)) {\n event.preventDefault();\n }\n };\n\n const saveControls = (): JSX.Element => (\n <>\n <Show when={props.onSave}>\n <button\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n title={messages().saveShortcut}\n aria-label={messages().save}\n tabIndex={-1}\n disabled={props.disabled || props.saveDisabled || props.saving}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => props.onSave?.()}\n >\n <i class={props.saving ? \"ti ti-loader-2 k2b-spin\" : props.saved ? \"ti ti-check\" : \"ti ti-device-floppy\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </>\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n fill={props.fill}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-markdown-editor\"\n role=\"group\"\n aria-labelledby={props.label ? meta.labelId : undefined}\n aria-label={!props.label ? props[\"aria-label\"] : undefined}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n data-variant={props.variant === \"default\" ? undefined : props.variant}\n data-fill={props.fill ? \"true\" : undefined}\n style={{\n \"--k2b-editor-lines\": String(props.lines ?? 6),\n }}\n onKeyDown={(event) => {\n if (props.onSave && (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"s\") {\n event.preventDefault();\n if (!props.disabled && !props.saveDisabled && !props.saving) props.onSave();\n }\n }}\n >\n <Show when={!props.noToolbar}>\n <Toolbar\n textarea={textareaSignal}\n activeFormats={activeFormats}\n disabled={props.disabled}\n trailing={\n <>\n {props.toolbarTrailing}\n {saveControls()}\n <Show when={props.onClose}>\n <button\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n title={messages().close}\n aria-label={messages().close}\n tabIndex={props.disabled ? 0 : -1}\n onClick={() => props.onClose?.()}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n </>\n }\n />\n </Show>\n <div class=\"k2b-markdown-editor__surface\">\n <Show when={!localValue() && props.placeholder}>\n <div class=\"k2b-markdown-editor__placeholder\" aria-hidden=\"true\">\n {props.placeholder}\n </div>\n </Show>\n <div ref={preview} class=\"k2b-markdown-editor__preview\" aria-hidden=\"true\" />\n <textarea\n ref={(element) => {\n textarea = element;\n props.textareaRef?.(element);\n }}\n id={meta.controlId}\n name={props.name}\n class=\"k2b-markdown-editor__input\"\n onInput={onInput}\n onChange={(event) => props.onValueCommit?.(event.currentTarget.value)}\n onKeyDown={onKeyDown}\n onPaste={(event) => {\n if (textarea && handleSmartPaste(event, textarea)) {\n event.preventDefault();\n }\n }}\n onScroll={(event) => {\n if (preview) {\n preview.scrollTop = event.currentTarget.scrollTop;\n preview.scrollLeft = event.currentTarget.scrollLeft;\n }\n }}\n onCompositionStart={() => setComposing(true)}\n onCompositionEnd={() => setComposing(false)}\n onBlur={(event) => {\n const next = event.relatedTarget as HTMLElement | null;\n if (next && dropdown?.contains(next)) return;\n completionBehavior.reset();\n clearCompletion();\n }}\n disabled={props.disabled}\n required={props.required}\n spellcheck={props.spellcheck ?? true}\n maxLength={props.maxLength}\n {...fieldControlAria(meta, props)}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-controls={dropdownOpen() ? listboxId : undefined}\n aria-activedescendant={dropdownOpen() && state() ? optionId(state()!.selectedIndex) : undefined}\n />\n </div>\n <Show when={(props.showStats ?? true) && !props.disabled}>\n <div class=\"k2b-markdown-editor__stats\" aria-hidden=\"true\" data-empty={stats().chars === 0 ? \"true\" : undefined}>\n <span>\n {stats().lines} {stats().lines === 1 ? \"line\" : \"lines\"}\n </span>\n <span>\n {stats().words} {stats().words === 1 ? \"word\" : \"words\"}\n </span>\n <span>\n {stats().chars} {stats().chars === 1 ? \"char\" : \"chars\"}\n </span>\n </div>\n </Show>\n <Show when={state() || loading() || completionError()}>\n <div\n ref={dropdown}\n popover=\"manual\"\n class=\"k2b-autocomplete__options\"\n role=\"presentation\"\n aria-label={messages().completionSuggestions}\n >\n <div id={listboxId} class=\"k2b-autocomplete__listbox\" role=\"listbox\" aria-label={messages().suggestions}>\n <Show when={loading()}>\n <div class=\"k2b-autocomplete__status\" role=\"status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n Loading suggestions\n </div>\n </Show>\n <Show when={completionError()}>\n {(message) => (\n <div class=\"k2b-autocomplete__status\" data-error=\"true\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" />\n <span>{message()}</span>\n <button type=\"button\" onMouseDown={(event) => event.preventDefault()} onClick={retryCompletion}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <For each={state()?.suggestions ?? []}>\n {(suggestion, index) => (\n // biome-ignore lint/a11y/useKeyWithClickEvents: the owning textarea handles keyboard activation through aria-activedescendant.\n <div\n id={optionId(index())}\n class=\"k2b-autocomplete__option\"\n role=\"option\"\n aria-selected={index() === state()?.selectedIndex}\n onMouseEnter={() => {\n const current = state();\n if (current) {\n setState({ ...current, selectedIndex: index() });\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n activateSuggestion(index());\n textarea?.focus();\n }}\n >\n <span>{displayLabel(suggestion, state()!.context.completion)}</span>\n <Show when={suggestion.hint}>{(hint) => <small>{hint()}</small>}</Show>\n </div>\n )}\n </For>\n </div>\n </div>\n </Show>\n </div>\n </Field>\n );\n}\n\nexport type { Completion, SuggestContext, Suggestion } from \"../completion\";\nexport { abbreviations } from \"../completion\";\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["For","Show","useUiMessages","insertLink","toggleBold","toggleBulletList","toggleCode","toggleHeading","toggleItalic","toggleNumberedList","toggleQuote","TOOLS","kind","id","icon","title","run","textarea","Toolbar","props","messages","fallback","bold","boldShortcut","italic","italicShortcut","code","inlineCodeShortcut","link","linkShortcut","h1","heading1Shortcut","h2","heading2Shortcut","h3","heading3Shortcut","bullet","bulletListShortcut","ordered","numberedListShortcut","quote","toolbar","moveFocus","event","includes","key","buttons","Array","from","querySelectorAll","length","current","Math","max","findIndex","button","document","activeElement","next","preventDefault","tabIndex","focus","_el$","_$getNextElement","_tmpl$2","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$5","_el$6","_co$2","$$keydown","_ref$","_$use","_$insert","_$createComponent","each","children","tool","index","_tmpl$3","_el$8","_tmpl$4","_el$9","$$click","$$mousedown","_$effect","_p$","_v$","_v$2","_v$3","activeFormats","has","undefined","_v$4","disabled","_v$5","_v$6","e","_$setAttribute","t","a","o","_$setProperty","i","n","_$className","_$runHydrationEvents","when","trailing","_el$2","_tmpl$","markdownFormatting","_$delegateEvents"],"sources":["inputs/markdown/Toolbar.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../../intl/messages\";\nimport {\n insertLink,\n toggleBold,\n toggleBulletList,\n toggleCode,\n toggleHeading,\n toggleItalic,\n toggleNumberedList,\n toggleQuote,\n} from \"./actions\";\n\ntype ToolbarProps = {\n textarea: () => HTMLTextAreaElement | null;\n activeFormats?: () => Set<string>;\n disabled?: boolean;\n trailing?: JSX.Element;\n};\n\ntype Tool =\n | {\n kind: \"button\";\n id: string;\n icon: string;\n title: string;\n run: (textarea: HTMLTextAreaElement) => void;\n }\n | { kind: \"separator\" };\n\nconst TOOLS: readonly Tool[] = [\n { kind: \"button\", id: \"bold\", icon: \"ti ti-bold\", title: \"Bold (Ctrl/Cmd+B)\", run: toggleBold },\n { kind: \"button\", id: \"italic\", icon: \"ti ti-italic\", title: \"Italic (Ctrl/Cmd+I)\", run: toggleItalic },\n { kind: \"button\", id: \"code\", icon: \"ti ti-code\", title: \"Inline code (Ctrl/Cmd+E)\", run: toggleCode },\n { kind: \"button\", id: \"link\", icon: \"ti ti-link\", title: \"Link (Ctrl/Cmd+K)\", run: insertLink },\n { kind: \"separator\" },\n { kind: \"button\", id: \"h1\", icon: \"ti ti-h-1\", title: \"Heading 1 (Ctrl/Cmd+Shift+1)\", run: (textarea) => toggleHeading(textarea, 1) },\n { kind: \"button\", id: \"h2\", icon: \"ti ti-h-2\", title: \"Heading 2 (Ctrl/Cmd+Shift+2)\", run: (textarea) => toggleHeading(textarea, 2) },\n { kind: \"button\", id: \"h3\", icon: \"ti ti-h-3\", title: \"Heading 3 (Ctrl/Cmd+Shift+3)\", run: (textarea) => toggleHeading(textarea, 3) },\n { kind: \"separator\" },\n { kind: \"button\", id: \"bullet\", icon: \"ti ti-list\", title: \"Bullet list (Ctrl/Cmd+Shift+8)\", run: toggleBulletList },\n { kind: \"button\", id: \"ordered\", icon: \"ti ti-list-numbers\", title: \"Numbered list (Ctrl/Cmd+Shift+7)\", run: toggleNumberedList },\n { kind: \"button\", id: \"quote\", icon: \"ti ti-quote\", title: \"Quote\", run: toggleQuote },\n];\n\nexport default function Toolbar(props: ToolbarProps): JSX.Element {\n const messages = useUiMessages();\n const title = (id: string, fallback: string): string =>\n ({\n bold: messages().boldShortcut,\n italic: messages().italicShortcut,\n code: messages().inlineCodeShortcut,\n link: messages().linkShortcut,\n h1: messages().heading1Shortcut,\n h2: messages().heading2Shortcut,\n h3: messages().heading3Shortcut,\n bullet: messages().bulletListShortcut,\n ordered: messages().numberedListShortcut,\n quote: messages().quote,\n })[id] ?? fallback;\n let toolbar!: HTMLDivElement;\n const moveFocus = (event: KeyboardEvent): void => {\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(event.key)) return;\n const buttons = Array.from(toolbar.querySelectorAll<HTMLButtonElement>(\".k2b-markdown-editor__tool:not(:disabled)\"));\n if (buttons.length === 0) return;\n const current = Math.max(\n 0,\n buttons.findIndex((button) => button === document.activeElement),\n );\n const next =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? buttons.length - 1\n : event.key === \"ArrowLeft\"\n ? (current - 1 + buttons.length) % buttons.length\n : (current + 1) % buttons.length;\n event.preventDefault();\n for (const button of buttons) button.tabIndex = -1;\n buttons[next]!.tabIndex = 0;\n buttons[next]!.focus();\n };\n\n return (\n <div ref={toolbar} class=\"k2b-markdown-editor__toolbar\" role=\"toolbar\" aria-label={messages().markdownFormatting} onKeyDown={moveFocus}>\n <For each={TOOLS}>\n {(tool, index) =>\n tool.kind === \"separator\" ? (\n <span class=\"k2b-markdown-editor__separator\" aria-hidden=\"true\" />\n ) : (\n <button\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n title={title(tool.id, tool.title)}\n aria-label={title(tool.id, tool.title)}\n aria-pressed={props.activeFormats?.().has(tool.id) ? \"true\" : undefined}\n disabled={props.disabled}\n tabIndex={index() === 0 ? 0 : -1}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n const textarea = props.textarea();\n if (textarea) tool.run(textarea);\n }}\n >\n <i class={tool.icon} aria-hidden=\"true\" />\n </button>\n )\n }\n </For>\n <Show when={props.trailing}>\n <span class=\"k2b-markdown-editor__trailing\">{props.trailing}</span>\n </Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["inputs/markdown/Toolbar.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../../intl/messages\";\nimport {\n insertLink,\n toggleBold,\n toggleBulletList,\n toggleCode,\n toggleHeading,\n toggleItalic,\n toggleNumberedList,\n toggleQuote,\n} from \"./actions\";\n\ntype ToolbarProps = {\n textarea: () => HTMLTextAreaElement | null;\n activeFormats?: () => Set<string>;\n disabled?: boolean;\n trailing?: JSX.Element;\n};\n\ntype Tool =\n | {\n kind: \"button\";\n id: string;\n icon: string;\n title: string;\n run: (textarea: HTMLTextAreaElement) => void;\n }\n | { kind: \"separator\" };\n\nconst TOOLS: readonly Tool[] = [\n { kind: \"button\", id: \"bold\", icon: \"ti ti-bold\", title: \"Bold (Ctrl/Cmd+B)\", run: toggleBold },\n { kind: \"button\", id: \"italic\", icon: \"ti ti-italic\", title: \"Italic (Ctrl/Cmd+I)\", run: toggleItalic },\n { kind: \"button\", id: \"code\", icon: \"ti ti-code\", title: \"Inline code (Ctrl/Cmd+E)\", run: toggleCode },\n { kind: \"button\", id: \"link\", icon: \"ti ti-link\", title: \"Link (Ctrl/Cmd+K)\", run: insertLink },\n { kind: \"separator\" },\n { kind: \"button\", id: \"h1\", icon: \"ti ti-h-1\", title: \"Heading 1 (Ctrl/Cmd+Shift+1)\", run: (textarea) => toggleHeading(textarea, 1) },\n { kind: \"button\", id: \"h2\", icon: \"ti ti-h-2\", title: \"Heading 2 (Ctrl/Cmd+Shift+2)\", run: (textarea) => toggleHeading(textarea, 2) },\n { kind: \"button\", id: \"h3\", icon: \"ti ti-h-3\", title: \"Heading 3 (Ctrl/Cmd+Shift+3)\", run: (textarea) => toggleHeading(textarea, 3) },\n { kind: \"separator\" },\n { kind: \"button\", id: \"bullet\", icon: \"ti ti-list\", title: \"Bullet list (Ctrl/Cmd+Shift+8)\", run: toggleBulletList },\n { kind: \"button\", id: \"ordered\", icon: \"ti ti-list-numbers\", title: \"Numbered list (Ctrl/Cmd+Shift+7)\", run: toggleNumberedList },\n { kind: \"button\", id: \"quote\", icon: \"ti ti-quote\", title: \"Quote\", run: toggleQuote },\n];\n\nexport default function Toolbar(props: ToolbarProps): JSX.Element {\n const messages = useUiMessages();\n const title = (id: string, fallback: string): string =>\n ({\n bold: messages().boldShortcut,\n italic: messages().italicShortcut,\n code: messages().inlineCodeShortcut,\n link: messages().linkShortcut,\n h1: messages().heading1Shortcut,\n h2: messages().heading2Shortcut,\n h3: messages().heading3Shortcut,\n bullet: messages().bulletListShortcut,\n ordered: messages().numberedListShortcut,\n quote: messages().quote,\n })[id] ?? fallback;\n let toolbar!: HTMLDivElement;\n const moveFocus = (event: KeyboardEvent): void => {\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(event.key)) return;\n const buttons = Array.from(toolbar.querySelectorAll<HTMLButtonElement>(\".k2b-markdown-editor__tool:not(:disabled)\"));\n if (buttons.length === 0) return;\n const current = Math.max(\n 0,\n buttons.findIndex((button) => button === document.activeElement),\n );\n const next =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? buttons.length - 1\n : event.key === \"ArrowLeft\"\n ? (current - 1 + buttons.length) % buttons.length\n : (current + 1) % buttons.length;\n event.preventDefault();\n for (const button of buttons) button.tabIndex = -1;\n buttons[next]!.tabIndex = 0;\n buttons[next]!.focus();\n };\n\n return (\n <div ref={toolbar} class=\"k2b-markdown-editor__toolbar\" role=\"toolbar\" aria-label={messages().markdownFormatting} onKeyDown={moveFocus}>\n <For each={TOOLS}>\n {(tool, index) =>\n tool.kind === \"separator\" ? (\n <span class=\"k2b-markdown-editor__separator\" aria-hidden=\"true\" />\n ) : (\n <button\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n title={title(tool.id, tool.title)}\n aria-label={title(tool.id, tool.title)}\n aria-pressed={props.activeFormats?.().has(tool.id) ? \"true\" : undefined}\n disabled={props.disabled}\n tabIndex={index() === 0 ? 0 : -1}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n const textarea = props.textarea();\n if (textarea) tool.run(textarea);\n }}\n >\n <i class={tool.icon} aria-hidden=\"true\" />\n </button>\n )\n }\n </For>\n <Show when={props.trailing}>\n <span class=\"k2b-markdown-editor__trailing\">{props.trailing}</span>\n </Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["replaceTextareaRange","replaceRange","lineAt","value","position","lineStart","lastIndexOf","nextNewline","indexOf","lineEnd","length","line","slice","selectedLineRange","textarea","selectionStart","selectionEnd","startLine","adjustedEnd","endLine","start","end","lines","split","toggleInlineWrap","marker","placeholder","markerLength","before","Math","max","after","setSelectionRange","selected","startsWith","endsWith","stripped","toggleBold","toggleItalic","toggleCode","insertLink","url","label","finalUrl","caret","togglePrefix","prefix","parts","map","match","exec","indent","body","remove","every","replacement","join","toggleHeading","level","oldCaret","repeat","existing","next","desired","min","toggleBulletList","toggleQuote","toggleNumberedList","Boolean","index"],"sources":["inputs/markdown/actions.ts"],"sourcesContent":["import { replaceTextareaRange as replaceRange } from \"../editor-dom\";\n\nconst lineAt = (value: string, position: number): { lineStart: number; lineEnd: number; line: string } => {\n const lineStart = value.lastIndexOf(\"\\n\", position - 1) + 1;\n const nextNewline = value.indexOf(\"\\n\", position);\n const lineEnd = nextNewline === -1 ? value.length : nextNewline;\n return { lineStart, lineEnd, line: value.slice(lineStart, lineEnd) };\n};\n\nconst selectedLineRange = (textarea: HTMLTextAreaElement): { start: number; end: number; lines: string[] } => {\n const { value, selectionStart, selectionEnd } = textarea;\n const startLine = lineAt(value, selectionStart);\n const adjustedEnd =\n selectionEnd > selectionStart && selectionEnd > 0 && value[selectionEnd - 1] === \"\\n\" ? selectionEnd - 1 : selectionEnd;\n const endLine = lineAt(value, adjustedEnd);\n return {\n start: startLine.lineStart,\n end: endLine.lineEnd,\n lines: value.slice(startLine.lineStart, endLine.lineEnd).split(\"\\n\"),\n };\n};\n\nconst toggleInlineWrap = (textarea: HTMLTextAreaElement, marker: string, placeholder: string): void => {\n const { value, selectionStart, selectionEnd } = textarea;\n const markerLength = marker.length;\n const before = value.slice(Math.max(0, selectionStart - markerLength), selectionStart);\n const after = value.slice(selectionEnd, selectionEnd + markerLength);\n if (before === marker && after === marker) {\n replaceRange(textarea, selectionStart - markerLength, selectionEnd + markerLength, value.slice(selectionStart, selectionEnd));\n textarea.setSelectionRange(selectionStart - markerLength, selectionEnd - markerLength);\n return;\n }\n\n const selected = value.slice(selectionStart, selectionEnd);\n if (selected.length >= markerLength * 2 && selected.startsWith(marker) && selected.endsWith(marker)) {\n const stripped = selected.slice(markerLength, -markerLength);\n replaceRange(textarea, selectionStart, selectionEnd, stripped);\n textarea.setSelectionRange(selectionStart, selectionStart + stripped.length);\n return;\n }\n\n if (selectionStart === selectionEnd) {\n replaceRange(textarea, selectionStart, selectionEnd, marker + placeholder + marker);\n textarea.setSelectionRange(selectionStart + markerLength, selectionStart + markerLength + placeholder.length);\n } else {\n replaceRange(textarea, selectionStart, selectionEnd, marker + selected + marker);\n textarea.setSelectionRange(selectionStart + markerLength, selectionStart + markerLength + selected.length);\n }\n};\n\nexport const toggleBold = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"**\", \"bold text\");\nexport const toggleItalic = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"*\", \"italic text\");\nexport const toggleCode = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"`\", \"code\");\n\nexport const insertLink = (textarea: HTMLTextAreaElement, url?: string): void => {\n const { value, selectionStart, selectionEnd } = textarea;\n const selected = value.slice(selectionStart, selectionEnd);\n const label = selected || \"link\";\n const finalUrl = url ?? \"\";\n replaceRange(textarea, selectionStart, selectionEnd, `[${label}](${finalUrl})`);\n if (finalUrl) {\n textarea.setSelectionRange(selectionStart + 1, selectionStart + 1 + label.length);\n } else {\n const caret = selectionStart + label.length + 3;\n textarea.setSelectionRange(caret, caret);\n }\n};\n\nconst togglePrefix = (textarea: HTMLTextAreaElement, prefix: string): void => {\n const { start, end, lines } = selectedLineRange(textarea);\n const parts = lines.map((line) => {\n const match = /^(\\s*)(.*)$/.exec(line)!;\n return { indent: match[1]!, body: match[2]! };\n });\n const remove = parts.every(({ body }) => body.startsWith(prefix));\n const replacement = parts.map(({ indent, body }) => (remove ? indent + body.slice(prefix.length) : indent + prefix + body)).join(\"\\n\");\n replaceRange(textarea, start, end, replacement);\n textarea.setSelectionRange(start, start + replacement.length);\n};\n\nexport const toggleHeading = (textarea: HTMLTextAreaElement, level: 1 | 2 | 3): void => {\n const oldCaret = textarea.selectionStart;\n const { lineStart, lineEnd, line } = lineAt(textarea.value, oldCaret);\n const prefix = `${\"#\".repeat(level)} `;\n const existing = /^(#{1,6})\\s/.exec(line);\n const next =\n existing?.[1]?.length === level ? line.slice(existing[0].length) : existing ? prefix + line.slice(existing[0].length) : prefix + line;\n replaceRange(textarea, lineStart, lineEnd, next);\n const desired = Math.max(lineStart, oldCaret + next.length - line.length);\n const caret = Math.min(desired, lineStart + next.length);\n textarea.setSelectionRange(caret, caret);\n};\n\nexport const toggleBulletList = (textarea: HTMLTextAreaElement): void => togglePrefix(textarea, \"- \");\nexport const toggleQuote = (textarea: HTMLTextAreaElement): void => togglePrefix(textarea, \"> \");\n\nexport const toggleNumberedList = (textarea: HTMLTextAreaElement): void => {\n const { start, end, lines } = selectedLineRange(textarea);\n const parts = lines.map((line) => {\n const match = /^(\\s*)(\\d+\\.\\s)?(.*)$/.exec(line)!;\n return {\n indent: match[1] ?? \"\",\n marker: match[2],\n body: match[3] ?? \"\",\n };\n });\n const remove = parts.every(({ marker }) => Boolean(marker));\n const replacement = parts.map(({ indent, body }, index) => (remove ? indent + body : `${indent}${index + 1}. ${body}`)).join(\"\\n\");\n replaceRange(textarea, start, end, replacement);\n textarea.setSelectionRange(start, start + replacement.length);\n};\n"],"mappings":"AAAA,SAASA,oBAAoB,IAAIC,YAAY,QAAQ,eAAe;AAEpE,MAAMC,MAAM,GAAGA,CAACC,KAAa,EAAEC,QAAgB,KAA2D;EACxG,MAAMC,SAAS,GAAGF,KAAK,CAACG,WAAW,CAAC,IAAI,EAAEF,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC;EAC3D,MAAMG,WAAW,GAAGJ,KAAK,CAACK,OAAO,CAAC,IAAI,EAAEJ,QAAQ,CAAC;EACjD,MAAMK,OAAO,GAAGF,WAAW,KAAK,CAAC,CAAC,GAAGJ,KAAK,CAACO,MAAM,GAAGH,WAAW;EAC/D,OAAO;IAAEF,SAAS;IAAEI,OAAO;IAAEE,IAAI,EAAER,KAAK,CAACS,KAAK,CAACP,SAAS,EAAEI,OAAO;EAAE,CAAC;AACtE,CAAC;AAED,MAAMI,iBAAiB,GAAIC,QAA6B,IAAsD;EAC5G,MAAM;IAAEX,KAAK;IAAEY,cAAc;IAAEC;EAAa,CAAC,GAAGF,QAAQ;EACxD,MAAMG,SAAS,GAAGf,MAAM,CAACC,KAAK,EAAEY,cAAc,CAAC;EAC/C,MAAMG,WAAW,GACfF,YAAY,GAAGD,cAAc,IAAIC,YAAY,GAAG,CAAC,IAAIb,KAAK,CAACa,YAAY,GAAG,CAAC,CAAC,KAAK,IAAI,GAAGA,YAAY,GAAG,CAAC,GAAGA,YAAY;EACzH,MAAMG,OAAO,GAAGjB,MAAM,CAACC,KAAK,EAAEe,WAAW,CAAC;EAC1C,OAAO;IACLE,KAAK,EAAEH,SAAS,CAACZ,SAAS;IAC1BgB,GAAG,EAAEF,OAAO,CAACV,OAAO;IACpBa,KAAK,EAAEnB,KAAK,CAACS,KAAK,CAACK,SAAS,CAACZ,SAAS,EAAEc,OAAO,CAACV,OAAO,CAAC,CAACc,KAAK,CAAC,IAAI;EACrE,CAAC;AACH,CAAC;AAED,MAAMC,gBAAgB,GAAGA,CAACV,QAA6B,EAAEW,MAAc,EAAEC,WAAmB,KAAW;EACrG,MAAM;IAAEvB,KAAK;IAAEY,cAAc;IAAEC;EAAa,CAAC,GAAGF,QAAQ;EACxD,MAAMa,YAAY,GAAGF,MAAM,CAACf,MAAM;EAClC,MAAMkB,MAAM,GAAGzB,KAAK,CAACS,KAAK,CAACiB,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEf,cAAc,GAAGY,YAAY,CAAC,EAAEZ,cAAc,CAAC;EACtF,MAAMgB,KAAK,GAAG5B,KAAK,CAACS,KAAK,CAACI,YAAY,EAAEA,YAAY,GAAGW,YAAY,CAAC;EACpE,IAAIC,MAAM,KAAKH,MAAM,IAAIM,KAAK,KAAKN,MAAM,EAAE;IACzCxB,YAAY,CAACa,QAAQ,EAAEC,cAAc,GAAGY,YAAY,EAAEX,YAAY,GAAGW,YAAY,EAAExB,KAAK,CAACS,KAAK,CAACG,cAAc,EAAEC,YAAY,CAAC,CAAC;IAC7HF,QAAQ,CAACkB,iBAAiB,CAACjB,cAAc,GAAGY,YAAY,EAAEX,YAAY,GAAGW,YAAY,CAAC;IACtF;EACF;EAEA,MAAMM,QAAQ,GAAG9B,KAAK,CAACS,KAAK,CAACG,cAAc,EAAEC,YAAY,CAAC;EAC1D,IAAIiB,QAAQ,CAACvB,MAAM,IAAIiB,YAAY,GAAG,CAAC,IAAIM,QAAQ,CAACC,UAAU,CAACT,MAAM,CAAC,IAAIQ,QAAQ,CAACE,QAAQ,CAACV,MAAM,CAAC,EAAE;IACnG,MAAMW,QAAQ,GAAGH,QAAQ,CAACrB,KAAK,CAACe,YAAY,EAAE,CAACA,YAAY,CAAC;IAC5D1B,YAAY,CAACa,QAAQ,EAAEC,cAAc,EAAEC,YAAY,EAAEoB,QAAQ,CAAC;IAC9DtB,QAAQ,CAACkB,iBAAiB,CAACjB,cAAc,EAAEA,cAAc,GAAGqB,QAAQ,CAAC1B,MAAM,CAAC;IAC5E;EACF;EAEA,IAAIK,cAAc,KAAKC,YAAY,EAAE;IACnCf,YAAY,CAACa,QAAQ,EAAEC,cAAc,EAAEC,YAAY,EAAES,MAAM,GAAGC,WAAW,GAAGD,MAAM,CAAC;IACnFX,QAAQ,CAACkB,iBAAiB,CAACjB,cAAc,GAAGY,YAAY,EAAEZ,cAAc,GAAGY,YAAY,GAAGD,WAAW,CAAChB,MAAM,CAAC;EAC/G,CAAC,MAAM;IACLT,YAAY,CAACa,QAAQ,EAAEC,cAAc,EAAEC,YAAY,EAAES,MAAM,GAAGQ,QAAQ,GAAGR,MAAM,CAAC;IAChFX,QAAQ,CAACkB,iBAAiB,CAACjB,cAAc,GAAGY,YAAY,EAAEZ,cAAc,GAAGY,YAAY,GAAGM,QAAQ,CAACvB,MAAM,CAAC;EAC5G;AACF,CAAC;AAED,OAAO,MAAM2B,UAAU,GAAIvB,QAA6B,IAAWU,gBAAgB,CAACV,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC;AAChH,OAAO,MAAMwB,YAAY,GAAIxB,QAA6B,IAAWU,gBAAgB,CAACV,QAAQ,EAAE,GAAG,EAAE,aAAa,CAAC;AACnH,OAAO,MAAMyB,UAAU,GAAIzB,QAA6B,IAAWU,gBAAgB,CAACV,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC;AAE1G,OAAO,MAAM0B,UAAU,GAAGA,CAAC1B,QAA6B,EAAE2B,GAAY,KAAW;EAC/E,MAAM;IAAEtC,KAAK;IAAEY,cAAc;IAAEC;EAAa,CAAC,GAAGF,QAAQ;EACxD,MAAMmB,QAAQ,GAAG9B,KAAK,CAACS,KAAK,CAACG,cAAc,EAAEC,YAAY,CAAC;EAC1D,MAAM0B,KAAK,GAAGT,QAAQ,IAAI,MAAM;EAChC,MAAMU,QAAQ,GAAGF,GAAG,IAAI,EAAE;EAC1BxC,YAAY,CAACa,QAAQ,EAAEC,cAAc,EAAEC,YAAY,EAAE,IAAI0B,KAAK,KAAKC,QAAQ,GAAG,CAAC;EAC/E,IAAIA,QAAQ,EAAE;IACZ7B,QAAQ,CAACkB,iBAAiB,CAACjB,cAAc,GAAG,CAAC,EAAEA,cAAc,GAAG,CAAC,GAAG2B,KAAK,CAAChC,MAAM,CAAC;EACnF,CAAC,MAAM;IACL,MAAMkC,KAAK,GAAG7B,cAAc,GAAG2B,KAAK,CAAChC,MAAM,GAAG,CAAC;IAC/CI,QAAQ,CAACkB,iBAAiB,CAACY,KAAK,EAAEA,KAAK,CAAC;EAC1C;AACF,CAAC;AAED,MAAMC,YAAY,GAAGA,CAAC/B,QAA6B,EAAEgC,MAAc,KAAW;EAC5E,MAAM;IAAE1B,KAAK;IAAEC,GAAG;IAAEC;EAAM,CAAC,GAAGT,iBAAiB,CAACC,QAAQ,CAAC;EACzD,MAAMiC,KAAK,GAAGzB,KAAK,CAAC0B,GAAG,CAAErC,IAAI,IAAK;IAChC,MAAMsC,KAAK,GAAG,aAAa,CAACC,IAAI,CAACvC,IAAI,CAAE;IACvC,OAAO;MAAEwC,MAAM,EAAEF,KAAK,CAAC,CAAC,CAAE;MAAEG,IAAI,EAAEH,KAAK,CAAC,CAAC;IAAG,CAAC;EAC/C,CAAC,CAAC;EACF,MAAMI,MAAM,GAAGN,KAAK,CAACO,KAAK,CAAC,CAAC;IAAEF;EAAK,CAAC,KAAKA,IAAI,CAAClB,UAAU,CAACY,MAAM,CAAC,CAAC;EACjE,MAAMS,WAAW,GAAGR,KAAK,CAACC,GAAG,CAAC,CAAC;IAAEG,MAAM;IAAEC;EAAK,CAAC,KAAMC,MAAM,GAAGF,MAAM,GAAGC,IAAI,CAACxC,KAAK,CAACkC,MAAM,CAACpC,MAAM,CAAC,GAAGyC,MAAM,GAAGL,MAAM,GAAGM,IAAK,CAAC,CAACI,IAAI,CAAC,IAAI,CAAC;EACtIvD,YAAY,CAACa,QAAQ,EAAEM,KAAK,EAAEC,GAAG,EAAEkC,WAAW,CAAC;EAC/CzC,QAAQ,CAACkB,iBAAiB,CAACZ,KAAK,EAAEA,KAAK,GAAGmC,WAAW,CAAC7C,MAAM,CAAC;AAC/D,CAAC;AAED,OAAO,MAAM+C,aAAa,GAAGA,CAAC3C,QAA6B,EAAE4C,KAAgB,KAAW;EACtF,MAAMC,QAAQ,GAAG7C,QAAQ,CAACC,cAAc;EACxC,MAAM;IAAEV,SAAS;IAAEI,OAAO;IAAEE;EAAK,CAAC,GAAGT,MAAM,CAACY,QAAQ,CAACX,KAAK,EAAEwD,QAAQ,CAAC;EACrE,MAAMb,MAAM,GAAG,GAAG,GAAG,CAACc,MAAM,CAACF,KAAK,CAAC,GAAG;EACtC,MAAMG,QAAQ,GAAG,aAAa,CAACX,IAAI,CAACvC,IAAI,CAAC;EACzC,MAAMmD,IAAI,GACRD,QAAQ,GAAG,CAAC,CAAC,EAAEnD,MAAM,KAAKgD,KAAK,GAAG/C,IAAI,CAACC,KAAK,CAACiD,QAAQ,CAAC,CAAC,CAAC,CAACnD,MAAM,CAAC,GAAGmD,QAAQ,GAAGf,MAAM,GAAGnC,IAAI,CAACC,KAAK,CAACiD,QAAQ,CAAC,CAAC,CAAC,CAACnD,MAAM,CAAC,GAAGoC,MAAM,GAAGnC,IAAI;EACvIV,YAAY,CAACa,QAAQ,EAAET,SAAS,EAAEI,OAAO,EAAEqD,IAAI,CAAC;EAChD,MAAMC,OAAO,GAAGlC,IAAI,CAACC,GAAG,CAACzB,SAAS,EAAEsD,QAAQ,GAAGG,IAAI,CAACpD,MAAM,GAAGC,IAAI,CAACD,MAAM,CAAC;EACzE,MAAMkC,KAAK,GAAGf,IAAI,CAACmC,GAAG,CAACD,OAAO,EAAE1D,SAAS,GAAGyD,IAAI,CAACpD,MAAM,CAAC;EACxDI,QAAQ,CAACkB,iBAAiB,CAACY,KAAK,EAAEA,KAAK,CAAC;AAC1C,CAAC;AAED,OAAO,MAAMqB,gBAAgB,GAAInD,QAA6B,IAAW+B,YAAY,CAAC/B,QAAQ,EAAE,IAAI,CAAC;AACrG,OAAO,MAAMoD,WAAW,GAAIpD,QAA6B,IAAW+B,YAAY,CAAC/B,QAAQ,EAAE,IAAI,CAAC;AAEhG,OAAO,MAAMqD,kBAAkB,GAAIrD,QAA6B,IAAW;EACzE,MAAM;IAAEM,KAAK;IAAEC,GAAG;IAAEC;EAAM,CAAC,GAAGT,iBAAiB,CAACC,QAAQ,CAAC;EACzD,MAAMiC,KAAK,GAAGzB,KAAK,CAAC0B,GAAG,CAAErC,IAAI,IAAK;IAChC,MAAMsC,KAAK,GAAG,uBAAuB,CAACC,IAAI,CAACvC,IAAI,CAAE;IACjD,OAAO;MACLwC,MAAM,EAAEF,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;MACtBxB,MAAM,EAAEwB,KAAK,CAAC,CAAC,CAAC;MAChBG,IAAI,EAAEH,KAAK,CAAC,CAAC,CAAC,IAAI;IACpB,CAAC;EACH,CAAC,CAAC;EACF,MAAMI,MAAM,GAAGN,KAAK,CAACO,KAAK,CAAC,CAAC;IAAE7B;EAAO,CAAC,KAAK2C,OAAO,CAAC3C,MAAM,CAAC,CAAC;EAC3D,MAAM8B,WAAW,GAAGR,KAAK,CAACC,GAAG,CAAC,CAAC;IAAEG,MAAM;IAAEC;EAAK,CAAC,EAAEiB,KAAK,KAAMhB,MAAM,GAAGF,MAAM,GAAGC,IAAI,GAAG,GAAGD,MAAM,GAAGkB,KAAK,GAAG,CAAC,KAAKjB,IAAI,EAAG,CAAC,CAACI,IAAI,CAAC,IAAI,CAAC;EAClIvD,YAAY,CAACa,QAAQ,EAAEM,KAAK,EAAEC,GAAG,EAAEkC,WAAW,CAAC;EAC/CzC,QAAQ,CAACkB,iBAAiB,CAACZ,KAAK,EAAEA,KAAK,GAAGmC,WAAW,CAAC7C,MAAM,CAAC;AAC/D,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["inputs/markdown/actions.ts"],"sourcesContent":["import { replaceTextareaRange as replaceRange } from \"../editor-dom\";\n\nconst lineAt = (value: string, position: number): { lineStart: number; lineEnd: number; line: string } => {\n const lineStart = value.lastIndexOf(\"\\n\", position - 1) + 1;\n const nextNewline = value.indexOf(\"\\n\", position);\n const lineEnd = nextNewline === -1 ? value.length : nextNewline;\n return { lineStart, lineEnd, line: value.slice(lineStart, lineEnd) };\n};\n\nconst selectedLineRange = (textarea: HTMLTextAreaElement): { start: number; end: number; lines: string[] } => {\n const { value, selectionStart, selectionEnd } = textarea;\n const startLine = lineAt(value, selectionStart);\n const adjustedEnd =\n selectionEnd > selectionStart && selectionEnd > 0 && value[selectionEnd - 1] === \"\\n\" ? selectionEnd - 1 : selectionEnd;\n const endLine = lineAt(value, adjustedEnd);\n return {\n start: startLine.lineStart,\n end: endLine.lineEnd,\n lines: value.slice(startLine.lineStart, endLine.lineEnd).split(\"\\n\"),\n };\n};\n\nconst toggleInlineWrap = (textarea: HTMLTextAreaElement, marker: string, placeholder: string): void => {\n const { value, selectionStart, selectionEnd } = textarea;\n const markerLength = marker.length;\n const before = value.slice(Math.max(0, selectionStart - markerLength), selectionStart);\n const after = value.slice(selectionEnd, selectionEnd + markerLength);\n if (before === marker && after === marker) {\n replaceRange(textarea, selectionStart - markerLength, selectionEnd + markerLength, value.slice(selectionStart, selectionEnd));\n textarea.setSelectionRange(selectionStart - markerLength, selectionEnd - markerLength);\n return;\n }\n\n const selected = value.slice(selectionStart, selectionEnd);\n if (selected.length >= markerLength * 2 && selected.startsWith(marker) && selected.endsWith(marker)) {\n const stripped = selected.slice(markerLength, -markerLength);\n replaceRange(textarea, selectionStart, selectionEnd, stripped);\n textarea.setSelectionRange(selectionStart, selectionStart + stripped.length);\n return;\n }\n\n if (selectionStart === selectionEnd) {\n replaceRange(textarea, selectionStart, selectionEnd, marker + placeholder + marker);\n textarea.setSelectionRange(selectionStart + markerLength, selectionStart + markerLength + placeholder.length);\n } else {\n replaceRange(textarea, selectionStart, selectionEnd, marker + selected + marker);\n textarea.setSelectionRange(selectionStart + markerLength, selectionStart + markerLength + selected.length);\n }\n};\n\nexport const toggleBold = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"**\", \"bold text\");\nexport const toggleItalic = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"*\", \"italic text\");\nexport const toggleCode = (textarea: HTMLTextAreaElement): void => toggleInlineWrap(textarea, \"`\", \"code\");\n\nexport const insertLink = (textarea: HTMLTextAreaElement, url?: string): void => {\n const { value, selectionStart, selectionEnd } = textarea;\n const selected = value.slice(selectionStart, selectionEnd);\n const label = selected || \"link\";\n const finalUrl = url ?? \"\";\n replaceRange(textarea, selectionStart, selectionEnd, `[${label}](${finalUrl})`);\n if (finalUrl) {\n textarea.setSelectionRange(selectionStart + 1, selectionStart + 1 + label.length);\n } else {\n const caret = selectionStart + label.length + 3;\n textarea.setSelectionRange(caret, caret);\n }\n};\n\nconst togglePrefix = (textarea: HTMLTextAreaElement, prefix: string): void => {\n const { start, end, lines } = selectedLineRange(textarea);\n const parts = lines.map((line) => {\n const match = /^(\\s*)(.*)$/.exec(line)!;\n return { indent: match[1]!, body: match[2]! };\n });\n const remove = parts.every(({ body }) => body.startsWith(prefix));\n const replacement = parts.map(({ indent, body }) => (remove ? indent + body.slice(prefix.length) : indent + prefix + body)).join(\"\\n\");\n replaceRange(textarea, start, end, replacement);\n textarea.setSelectionRange(start, start + replacement.length);\n};\n\nexport const toggleHeading = (textarea: HTMLTextAreaElement, level: 1 | 2 | 3): void => {\n const oldCaret = textarea.selectionStart;\n const { lineStart, lineEnd, line } = lineAt(textarea.value, oldCaret);\n const prefix = `${\"#\".repeat(level)} `;\n const existing = /^(#{1,6})\\s/.exec(line);\n const next =\n existing?.[1]?.length === level ? line.slice(existing[0].length) : existing ? prefix + line.slice(existing[0].length) : prefix + line;\n replaceRange(textarea, lineStart, lineEnd, next);\n const desired = Math.max(lineStart, oldCaret + next.length - line.length);\n const caret = Math.min(desired, lineStart + next.length);\n textarea.setSelectionRange(caret, caret);\n};\n\nexport const toggleBulletList = (textarea: HTMLTextAreaElement): void => togglePrefix(textarea, \"- \");\nexport const toggleQuote = (textarea: HTMLTextAreaElement): void => togglePrefix(textarea, \"> \");\n\nexport const toggleNumberedList = (textarea: HTMLTextAreaElement): void => {\n const { start, end, lines } = selectedLineRange(textarea);\n const parts = lines.map((line) => {\n const match = /^(\\s*)(\\d+\\.\\s)?(.*)$/.exec(line)!;\n return {\n indent: match[1] ?? \"\",\n marker: match[2],\n body: match[3] ?? \"\",\n };\n });\n const remove = parts.every(({ marker }) => Boolean(marker));\n const replacement = parts.map(({ indent, body }, index) => (remove ? indent + body : `${indent}${index + 1}. ${body}`)).join(\"\\n\");\n replaceRange(textarea, start, end, replacement);\n textarea.setSelectionRange(start, start + replacement.length);\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["inOpenCode","before","match","length","inLinkUrl","open","lastIndexOf","slice","includes","scrub","value","replace","repeat","computeActiveFormats","textarea","selectionStart","active","Set","lineStart","nextNewline","indexOf","lineEnd","line","heading","exec","add","test","clean"],"sources":["inputs/markdown/active-formats.ts"],"sourcesContent":["const inOpenCode = (before: string): boolean => (before.match(/`/g) ?? []).length % 2 !== 0;\n\nconst inLinkUrl = (before: string): boolean => {\n const open = before.lastIndexOf(\"](\");\n return open !== -1 && !before.slice(open + 2).includes(\")\");\n};\n\nconst scrub = (value: string): string =>\n value\n .replace(/(?<!`)(`+)(?!`)([^\\n]+?)\\1(?!`)/g, (match) => \" \".repeat(match.length))\n .replace(/\\]\\(([^)\\n]*?)\\)/g, (match) => \" \".repeat(match.length));\n\nexport const computeActiveFormats = (textarea: HTMLTextAreaElement): Set<string> => {\n const { value, selectionStart } = textarea;\n const active = new Set<string>();\n const lineStart = value.lastIndexOf(\"\\n\", selectionStart - 1) + 1;\n const nextNewline = value.indexOf(\"\\n\", selectionStart);\n const lineEnd = nextNewline === -1 ? value.length : nextNewline;\n const line = value.slice(lineStart, lineEnd);\n const before = value.slice(lineStart, selectionStart);\n\n const heading = /^(#{1,3})\\s/.exec(line);\n if (heading) active.add(`h${heading[1]!.length}`);\n else if (/^\\s*[-*+]\\s/.test(line)) active.add(\"bullet\");\n else if (/^\\s*\\d+\\.\\s/.test(line)) active.add(\"ordered\");\n else if (/^>\\s/.test(line)) active.add(\"quote\");\n\n if (inOpenCode(before)) {\n active.add(\"code\");\n return active;\n }\n if (inLinkUrl(before)) return active;\n\n const clean = scrub(before);\n if ((clean.match(/\\*\\*/g) ?? []).length % 2 !== 0) active.add(\"bold\");\n if ((clean.replace(/\\*\\*/g, \"\").match(/\\*/g) ?? []).length % 2 !== 0) {\n active.add(\"italic\");\n }\n if ((clean.match(/__/g) ?? []).length % 2 !== 0) active.add(\"bold\");\n if ((clean.replace(/__/g, \"\").match(/_/g) ?? []).length % 2 !== 0) {\n active.add(\"italic\");\n }\n return active;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["inputs/markdown/active-formats.ts"],"sourcesContent":["const inOpenCode = (before: string): boolean => (before.match(/`/g) ?? []).length % 2 !== 0;\n\nconst inLinkUrl = (before: string): boolean => {\n const open = before.lastIndexOf(\"](\");\n return open !== -1 && !before.slice(open + 2).includes(\")\");\n};\n\nconst scrub = (value: string): string =>\n value\n .replace(/(?<!`)(`+)(?!`)([^\\n]+?)\\1(?!`)/g, (match) => \" \".repeat(match.length))\n .replace(/\\]\\(([^)\\n]*?)\\)/g, (match) => \" \".repeat(match.length));\n\nexport const computeActiveFormats = (textarea: HTMLTextAreaElement): Set<string> => {\n const { value, selectionStart } = textarea;\n const active = new Set<string>();\n const lineStart = value.lastIndexOf(\"\\n\", selectionStart - 1) + 1;\n const nextNewline = value.indexOf(\"\\n\", selectionStart);\n const lineEnd = nextNewline === -1 ? value.length : nextNewline;\n const line = value.slice(lineStart, lineEnd);\n const before = value.slice(lineStart, selectionStart);\n\n const heading = /^(#{1,3})\\s/.exec(line);\n if (heading) active.add(`h${heading[1]!.length}`);\n else if (/^\\s*[-*+]\\s/.test(line)) active.add(\"bullet\");\n else if (/^\\s*\\d+\\.\\s/.test(line)) active.add(\"ordered\");\n else if (/^>\\s/.test(line)) active.add(\"quote\");\n\n if (inOpenCode(before)) {\n active.add(\"code\");\n return active;\n }\n if (inLinkUrl(before)) return active;\n\n const clean = scrub(before);\n if ((clean.match(/\\*\\*/g) ?? []).length % 2 !== 0) active.add(\"bold\");\n if ((clean.replace(/\\*\\*/g, \"\").match(/\\*/g) ?? []).length % 2 !== 0) {\n active.add(\"italic\");\n }\n if ((clean.match(/__/g) ?? []).length % 2 !== 0) active.add(\"bold\");\n if ((clean.replace(/__/g, \"\").match(/_/g) ?? []).length % 2 !== 0) {\n active.add(\"italic\");\n }\n return active;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["replaceTextareaRange","insertLink","toggleBold","toggleBulletList","toggleCode","toggleHeading","toggleItalic","toggleNumberedList","isMac","navigator","test","platform","INLINE_ACTIONS","Map","BLOCK_ACTIONS","element","handleShortcut","event","textarea","isComposing","altKey","metaKey","ctrlKey","action","shiftKey","get","code","key","toLowerCase","LIST_RE","handleListContinuation","value","selectionStart","selectionEnd","lineStart","lastIndexOf","nextNewline","indexOf","lineEnd","length","match","exec","slice","indent","marker","spaces","content","markerEnd","trim","numbered","nextMarker","Number","parseInt","URL_RE","validUrl","URL","handleSmartPaste","clipboardData","getData","replace"],"sources":["inputs/markdown/behaviors.ts"],"sourcesContent":["import { replaceTextareaRange } from \"../editor-dom\";\nimport { insertLink, toggleBold, toggleBulletList, toggleCode, toggleHeading, toggleItalic, toggleNumberedList } from \"./actions\";\n\nconst isMac = (): boolean => typeof navigator !== \"undefined\" && /Mac|iPhone|iPad|iPod/i.test(navigator.platform);\n\ntype EditorAction = (element: HTMLTextAreaElement) => void;\n\n/** Keyed by `event.key.toLowerCase()`. A `Map` (not an object literal) so a\n * key that collides with an `Object.prototype` member — `constructor`,\n * `__proto__`, `valueOf`, … — resolves to \"no shortcut\" instead of picking\n * up an inherited value and throwing inside the keydown handler. */\nconst INLINE_ACTIONS = new Map<string, EditorAction>([\n [\"b\", toggleBold],\n [\"i\", toggleItalic],\n [\"e\", toggleCode],\n [\"k\", insertLink],\n]);\n\n/** Keyed by `event.code` (layout-independent physical key), so Shift+1 maps\n * to H1 on QWERTY, AZERTY and German layouts alike. Same `Map` rationale. */\nconst BLOCK_ACTIONS = new Map<string, EditorAction>([\n [\"Digit1\", (element) => toggleHeading(element, 1)],\n [\"Digit2\", (element) => toggleHeading(element, 2)],\n [\"Digit3\", (element) => toggleHeading(element, 3)],\n [\"Digit7\", toggleNumberedList],\n [\"Digit8\", toggleBulletList],\n]);\n\nexport const handleShortcut = (event: KeyboardEvent, textarea: HTMLTextAreaElement): boolean => {\n if (event.isComposing || event.altKey) return false;\n if (!(isMac() ? event.metaKey : event.ctrlKey)) return false;\n const action = event.shiftKey ? BLOCK_ACTIONS.get(event.code) : INLINE_ACTIONS.get(event.key.toLowerCase());\n if (!action) return false;\n action(textarea);\n return true;\n};\n\nconst LIST_RE = /^(\\s*)([-*+]|\\d+\\.)(\\s+)(.*)$/;\n\nexport const handleListContinuation = (textarea: HTMLTextAreaElement): boolean => {\n const { value, selectionStart, selectionEnd } = textarea;\n if (selectionStart !== selectionEnd) return false;\n const lineStart = value.lastIndexOf(\"\\n\", selectionStart - 1) + 1;\n const nextNewline = value.indexOf(\"\\n\", selectionStart);\n const lineEnd = nextNewline === -1 ? value.length : nextNewline;\n const match = LIST_RE.exec(value.slice(lineStart, lineEnd));\n if (!match) return false;\n\n const [, indent = \"\", marker = \"-\", spaces = \" \", content = \"\"] = match;\n const markerEnd = lineStart + indent.length + marker.length + spaces.length;\n if (selectionStart < markerEnd) return false;\n if (content.trim() === \"\") {\n replaceTextareaRange(textarea, lineStart, lineEnd, \"\");\n return true;\n }\n const numbered = /^(\\d+)\\.$/.exec(marker);\n const nextMarker = numbered ? `${Number.parseInt(numbered[1]!, 10) + 1}.` : marker;\n replaceTextareaRange(textarea, selectionStart, selectionStart, `\\n${indent}${nextMarker}${spaces}`);\n return true;\n};\n\nconst URL_RE = /^https?:\\/\\/\\S+$/;\nconst validUrl = (value: string): boolean => {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const handleSmartPaste = (event: ClipboardEvent, textarea: HTMLTextAreaElement): boolean => {\n const value = event.clipboardData?.getData(\"text/plain\").trim();\n if (!value || !URL_RE.test(value) || !validUrl(value) || textarea.selectionStart === textarea.selectionEnd) {\n return false;\n }\n insertLink(textarea, value.replace(/\\(/g, \"%28\").replace(/\\)/g, \"%29\"));\n return true;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["inputs/markdown/behaviors.ts"],"sourcesContent":["import { replaceTextareaRange } from \"../editor-dom\";\nimport { insertLink, toggleBold, toggleBulletList, toggleCode, toggleHeading, toggleItalic, toggleNumberedList } from \"./actions\";\n\nconst isMac = (): boolean => typeof navigator !== \"undefined\" && /Mac|iPhone|iPad|iPod/i.test(navigator.platform);\n\ntype EditorAction = (element: HTMLTextAreaElement) => void;\n\n/** Keyed by `event.key.toLowerCase()`. A `Map` (not an object literal) so a\n * key that collides with an `Object.prototype` member — `constructor`,\n * `__proto__`, `valueOf`, … — resolves to \"no shortcut\" instead of picking\n * up an inherited value and throwing inside the keydown handler. */\nconst INLINE_ACTIONS = new Map<string, EditorAction>([\n [\"b\", toggleBold],\n [\"i\", toggleItalic],\n [\"e\", toggleCode],\n [\"k\", insertLink],\n]);\n\n/** Keyed by `event.code` (layout-independent physical key), so Shift+1 maps\n * to H1 on QWERTY, AZERTY and German layouts alike. Same `Map` rationale. */\nconst BLOCK_ACTIONS = new Map<string, EditorAction>([\n [\"Digit1\", (element) => toggleHeading(element, 1)],\n [\"Digit2\", (element) => toggleHeading(element, 2)],\n [\"Digit3\", (element) => toggleHeading(element, 3)],\n [\"Digit7\", toggleNumberedList],\n [\"Digit8\", toggleBulletList],\n]);\n\nexport const handleShortcut = (event: KeyboardEvent, textarea: HTMLTextAreaElement): boolean => {\n if (event.isComposing || event.altKey) return false;\n if (!(isMac() ? event.metaKey : event.ctrlKey)) return false;\n const action = event.shiftKey ? BLOCK_ACTIONS.get(event.code) : INLINE_ACTIONS.get(event.key.toLowerCase());\n if (!action) return false;\n action(textarea);\n return true;\n};\n\nconst LIST_RE = /^(\\s*)([-*+]|\\d+\\.)(\\s+)(.*)$/;\n\nexport const handleListContinuation = (textarea: HTMLTextAreaElement): boolean => {\n const { value, selectionStart, selectionEnd } = textarea;\n if (selectionStart !== selectionEnd) return false;\n const lineStart = value.lastIndexOf(\"\\n\", selectionStart - 1) + 1;\n const nextNewline = value.indexOf(\"\\n\", selectionStart);\n const lineEnd = nextNewline === -1 ? value.length : nextNewline;\n const match = LIST_RE.exec(value.slice(lineStart, lineEnd));\n if (!match) return false;\n\n const [, indent = \"\", marker = \"-\", spaces = \" \", content = \"\"] = match;\n const markerEnd = lineStart + indent.length + marker.length + spaces.length;\n if (selectionStart < markerEnd) return false;\n if (content.trim() === \"\") {\n replaceTextareaRange(textarea, lineStart, lineEnd, \"\");\n return true;\n }\n const numbered = /^(\\d+)\\.$/.exec(marker);\n const nextMarker = numbered ? `${Number.parseInt(numbered[1]!, 10) + 1}.` : marker;\n replaceTextareaRange(textarea, selectionStart, selectionStart, `\\n${indent}${nextMarker}${spaces}`);\n return true;\n};\n\nconst URL_RE = /^https?:\\/\\/\\S+$/;\nconst validUrl = (value: string): boolean => {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const handleSmartPaste = (event: ClipboardEvent, textarea: HTMLTextAreaElement): boolean => {\n const value = event.clipboardData?.getData(\"text/plain\").trim();\n if (!value || !URL_RE.test(value) || !validUrl(value) || textarea.selectionStart === textarea.selectionEnd) {\n return false;\n }\n insertLink(textarea, value.replace(/\\(/g, \"%28\").replace(/\\)/g, \"%29\"));\n return true;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["isInCodeZone","text","position","before","slice","fences","match","length","line","lastIndexOf"],"sources":["inputs/markdown/code-zone.ts"],"sourcesContent":["export const isInCodeZone = (text: string, position: number): boolean => {\n const before = text.slice(0, position);\n const fences = before.match(/^```/gm);\n if (fences && fences.length % 2 !== 0) return true;\n const line = before.slice(before.lastIndexOf(\"\\n\") + 1);\n return (line.match(/`/g) ?? []).length % 2 !== 0;\n};\n"],"mappings":"AAAA,OAAO,MAAMA,YAAY,GAAGA,CAACC,IAAY,EAAEC,QAAgB,KAAc;EACvE,MAAMC,MAAM,GAAGF,IAAI,CAACG,KAAK,CAAC,CAAC,EAAEF,QAAQ,CAAC;EACtC,MAAMG,MAAM,GAAGF,MAAM,CAACG,KAAK,CAAC,QAAQ,CAAC;EACrC,IAAID,MAAM,IAAIA,MAAM,CAACE,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI;EAClD,MAAMC,IAAI,GAAGL,MAAM,CAACC,KAAK,CAACD,MAAM,CAACM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACvD,OAAO,CAACD,IAAI,CAACF,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAEC,MAAM,GAAG,CAAC,KAAK,CAAC;AAClD,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["inputs/markdown/code-zone.ts"],"sourcesContent":["export const isInCodeZone = (text: string, position: number): boolean => {\n const before = text.slice(0, position);\n const fences = before.match(/^```/gm);\n if (fences && fences.length % 2 !== 0) return true;\n const line = before.slice(before.lastIndexOf(\"\\n\") + 1);\n return (line.match(/`/g) ?? []).length % 2 !== 0;\n};\n"],"mappings":"AAAA,OAAO,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,QAAgB,KAAc;EACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;EACtC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;EACrC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI;EAClD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACvD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,KAAK,CAAC;AAClD,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["HEX_COLOR","normalizeHexColor","value","color","trim","test","undefined","hexWithAlpha","alpha","hex","slice","expanded","length","map","digit","join","colorTintStyle"],"sources":["internal/color.ts"],"sourcesContent":["import type { JSX } from \"solid-js\";\n\nconst HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;\n\nexport const normalizeHexColor = (value: string | null | undefined): string | undefined => {\n const color = value?.trim();\n return color && HEX_COLOR.test(color) ? color : undefined;\n};\n\nexport const hexWithAlpha = (value: string, alpha: string): string => {\n const hex = value.slice(1);\n const expanded = hex.length === 3 ? [...hex].map((digit) => `${digit}${digit}`).join(\"\") : hex;\n return `#${expanded}${alpha}`;\n};\n\nexport const colorTintStyle = (value: string | null | undefined): JSX.CSSProperties | undefined => {\n const color = normalizeHexColor(value);\n return color\n ? {\n \"--k2b-choice-color\": color,\n \"--k2b-choice-background\": hexWithAlpha(color, \"1f\"),\n }\n : undefined;\n};\n"],"mappings":"AAEA,MAAMA,SAAS,GAAG,iCAAiC;AAEnD,OAAO,MAAMC,iBAAiB,GAAIC,KAAgC,IAAyB;EACzF,MAAMC,KAAK,GAAGD,KAAK,EAAEE,IAAI,CAAC,CAAC;EAC3B,OAAOD,KAAK,IAAIH,SAAS,CAACK,IAAI,CAACF,KAAK,CAAC,GAAGA,KAAK,GAAGG,SAAS;AAC3D,CAAC;AAED,OAAO,MAAMC,YAAY,GAAGA,CAACL,KAAa,EAAEM,KAAa,KAAa;EACpE,MAAMC,GAAG,GAAGP,KAAK,CAACQ,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAMC,QAAQ,GAAGF,GAAG,CAACG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAGH,GAAG,CAAC,CAACI,GAAG,CAAEC,KAAK,IAAK,GAAGA,KAAK,GAAGA,KAAK,EAAE,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC,GAAGN,GAAG;EAC9F,OAAO,IAAIE,QAAQ,GAAGH,KAAK,EAAE;AAC/B,CAAC;AAED,OAAO,MAAMQ,cAAc,GAAId,KAAgC,IAAoC;EACjG,MAAMC,KAAK,GAAGF,iBAAiB,CAACC,KAAK,CAAC;EACtC,OAAOC,KAAK,GACR;IACE,oBAAoB,EAAEA,KAAK;IAC3B,yBAAyB,EAAEI,YAAY,CAACJ,KAAK,EAAE,IAAI;EACrD,CAAC,GACDG,SAAS;AACf,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["internal/color.ts"],"sourcesContent":["import type { JSX } from \"solid-js\";\n\nconst HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;\n\nexport const normalizeHexColor = (value: string | null | undefined): string | undefined => {\n const color = value?.trim();\n return color && HEX_COLOR.test(color) ? color : undefined;\n};\n\nexport const hexWithAlpha = (value: string, alpha: string): string => {\n const hex = value.slice(1);\n const expanded = hex.length === 3 ? [...hex].map((digit) => `${digit}${digit}`).join(\"\") : hex;\n return `#${expanded}${alpha}`;\n};\n\nexport const colorTintStyle = (value: string | null | undefined): JSX.CSSProperties | undefined => {\n const color = normalizeHexColor(value);\n return color\n ? {\n \"--k2b-choice-color\": color,\n \"--k2b-choice-background\": hexWithAlpha(color, \"1f\"),\n }\n : undefined;\n};\n"],"mappings":"AAEA,MAAM,SAAS,GAAG,iCAAiC;AAEnD,OAAO,MAAM,iBAAiB,GAAI,KAAgC,IAAyB;EACzF,MAAM,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;EAC3B,OAAO,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,SAAS;AAC3D,CAAC;AAED,OAAO,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,KAAa,KAAa;EACpE,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAE,KAAK,IAAK,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG;EAC9F,OAAO,IAAI,QAAQ,GAAG,KAAK,EAAE;AAC/B,CAAC;AAED,OAAO,MAAM,cAAc,GAAI,KAAgC,IAAoC;EACjG,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;EACtC,OAAO,KAAK,GACR;IACE,oBAAoB,EAAE,KAAK;IAC3B,yBAAyB,EAAE,YAAY,CAAC,KAAK,EAAE,IAAI;EACrD,CAAC,GACD,SAAS;AACf,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createUniqueId","Show","resolveMaybeAccessor","createFieldMeta","id","generatedId","controlId","labelId","descriptionId","errorId","Field","props","error","_el$","_$getNextElement","_tmpl$5","_el$0","firstChild","_el$1","_co$3","_$getNextMarker","nextSibling","_el$10","_el$11","_co$4","_el$12","_el$13","_co$5","_el$14","_el$15","_co$6","_$insert","_$createComponent","when","label","children","labelFor","fallback","_el$16","_tmpl$6","_el$18","_el$19","_co$7","_el$20","_el$21","_co$8","required","_tmpl$","_$effect","_$setAttribute","meta","_el$2","_tmpl$2","_el$4","_el$5","_co$","_el$6","_el$7","_co$2","_p$","_v$","_v$2","e","t","undefined","description","_el$8","_tmpl$3","_el$9","_tmpl$4","_v$3","class","_v$4","disabled","_v$5","fill","_v$6","_$className","a","o","fieldDescribedBy","owner","filter","Boolean","join","fieldControlAria","aria-label","aria-labelledby","aria-describedby","aria-invalid","aria-required"],"sources":["internal/field.tsx"],"sourcesContent":["import { createUniqueId, type JSX, Show } from \"solid-js\";\nimport type { FieldProps } from \"../inputs/field-contract\";\nimport { resolveMaybeAccessor } from \"../inputs/field-contract\";\n\nexport type FieldMeta = {\n controlId: string;\n labelId: string;\n descriptionId: string;\n errorId: string;\n};\n\nexport const createFieldMeta = (id?: string): FieldMeta => {\n const generatedId = createUniqueId();\n const controlId = id ?? `k2b-field-${generatedId}`;\n\n return {\n controlId,\n labelId: `${controlId}-label`,\n descriptionId: `${controlId}-description`,\n errorId: `${controlId}-error`,\n };\n};\n\ntype FieldLayoutProps = {\n children: JSX.Element;\n meta: FieldMeta;\n fill?: boolean;\n /** Composite controls use aria-labelledby instead of an HTML label target. */\n labelFor?: string | false;\n} & Pick<FieldProps, \"class\" | \"description\" | \"error\" | \"label\" | \"required\" | \"disabled\">;\n\nexport function Field(props: FieldLayoutProps): JSX.Element {\n const error = () => resolveMaybeAccessor(props.error);\n\n return (\n <div\n class={`k2b-field ${props.class ?? \"\"}`}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-fill={props.fill ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n >\n <Show when={props.label}>\n <Show\n when={props.labelFor !== false}\n fallback={\n <span id={props.meta.labelId} class=\"k2b-field__label\">\n {props.label}\n <Show when={props.required}>\n <span class=\"k2b-field__required\" aria-hidden=\"true\">\n *\n </span>\n </Show>\n </span>\n }\n >\n <label id={props.meta.labelId} class=\"k2b-field__label\" for={props.labelFor || props.meta.controlId}>\n {props.label}\n <Show when={props.required}>\n <span class=\"k2b-field__required\" aria-hidden=\"true\">\n *\n </span>\n </Show>\n </label>\n </Show>\n </Show>\n <Show when={props.description}>\n <p class=\"k2b-field__description\" id={props.meta.descriptionId}>\n {props.description}\n </p>\n </Show>\n {props.children}\n <Show when={error()}>\n <p class=\"k2b-field__error\" id={props.meta.errorId} role=\"alert\" aria-live=\"polite\">\n {error()}\n </p>\n </Show>\n </div>\n );\n}\n\ntype FieldAriaOwner = Pick<FieldProps, \"aria-describedby\" | \"aria-label\" | \"description\" | \"error\" | \"label\" | \"required\">;\n\nexport const fieldDescribedBy = (meta: FieldMeta, owner: FieldAriaOwner): string | undefined =>\n [\n owner[\"aria-describedby\"],\n owner.description ? meta.descriptionId : undefined,\n resolveMaybeAccessor(owner.error) ? meta.errorId : undefined,\n ]\n .filter(Boolean)\n .join(\" \") || undefined;\n\nexport const fieldControlAria = (meta: FieldMeta, owner: FieldAriaOwner) => ({\n get \"aria-label\"() {\n return owner.label ? undefined : owner[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return owner.label ? meta.labelId : undefined;\n },\n get \"aria-describedby\"() {\n return fieldDescribedBy(meta, owner);\n },\n get \"aria-invalid\"() {\n return resolveMaybeAccessor(owner.error) ? (\"true\" as const) : undefined;\n },\n get \"aria-required\"() {\n return owner.required || undefined;\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["aria-label","aria-labelledby","aria-describedby","aria-invalid","aria-required"],"sources":["internal/field.tsx"],"sourcesContent":["import { createUniqueId, type JSX, Show } from \"solid-js\";\nimport type { FieldProps } from \"../inputs/field-contract\";\nimport { resolveMaybeAccessor } from \"../inputs/field-contract\";\n\nexport type FieldMeta = {\n controlId: string;\n labelId: string;\n descriptionId: string;\n errorId: string;\n};\n\nexport const createFieldMeta = (id?: string): FieldMeta => {\n const generatedId = createUniqueId();\n const controlId = id ?? `k2b-field-${generatedId}`;\n\n return {\n controlId,\n labelId: `${controlId}-label`,\n descriptionId: `${controlId}-description`,\n errorId: `${controlId}-error`,\n };\n};\n\ntype FieldLayoutProps = {\n children: JSX.Element;\n meta: FieldMeta;\n fill?: boolean;\n /** Composite controls use aria-labelledby instead of an HTML label target. */\n labelFor?: string | false;\n} & Pick<FieldProps, \"class\" | \"description\" | \"error\" | \"label\" | \"required\" | \"disabled\">;\n\nexport function Field(props: FieldLayoutProps): JSX.Element {\n const error = () => resolveMaybeAccessor(props.error);\n\n return (\n <div\n class={`k2b-field ${props.class ?? \"\"}`}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-fill={props.fill ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n >\n <Show when={props.label}>\n <Show\n when={props.labelFor !== false}\n fallback={\n <span id={props.meta.labelId} class=\"k2b-field__label\">\n {props.label}\n <Show when={props.required}>\n <span class=\"k2b-field__required\" aria-hidden=\"true\">\n *\n </span>\n </Show>\n </span>\n }\n >\n <label id={props.meta.labelId} class=\"k2b-field__label\" for={props.labelFor || props.meta.controlId}>\n {props.label}\n <Show when={props.required}>\n <span class=\"k2b-field__required\" aria-hidden=\"true\">\n *\n </span>\n </Show>\n </label>\n </Show>\n </Show>\n <Show when={props.description}>\n <p class=\"k2b-field__description\" id={props.meta.descriptionId}>\n {props.description}\n </p>\n </Show>\n {props.children}\n <Show when={error()}>\n <p class=\"k2b-field__error\" id={props.meta.errorId} role=\"alert\" aria-live=\"polite\">\n {error()}\n </p>\n </Show>\n </div>\n );\n}\n\ntype FieldAriaOwner = Pick<FieldProps, \"aria-describedby\" | \"aria-label\" | \"description\" | \"error\" | \"label\" | \"required\">;\n\nexport const fieldDescribedBy = (meta: FieldMeta, owner: FieldAriaOwner): string | undefined =>\n [\n owner[\"aria-describedby\"],\n owner.description ? meta.descriptionId : undefined,\n resolveMaybeAccessor(owner.error) ? meta.errorId : undefined,\n ]\n .filter(Boolean)\n .join(\" \") || undefined;\n\nexport const fieldControlAria = (meta: FieldMeta, owner: FieldAriaOwner) => ({\n get \"aria-label\"() {\n return owner.label ? undefined : owner[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return owner.label ? meta.labelId : undefined;\n },\n get \"aria-describedby\"() {\n return fieldDescribedBy(meta, owner);\n },\n get \"aria-invalid\"() {\n return resolveMaybeAccessor(owner.error) ? (\"true\" as const) : undefined;\n },\n get \"aria-required\"() {\n return owner.required || undefined;\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["PORTAL_ATTRIBUTE","activeScope","active","document","activeElement","Element","closest","undefined","getK2bPortalRoot","scope","owner","querySelector","body","existing","Array","from","children","find","child","HTMLElement","hasAttribute","root","createElement","setAttribute","classList","add","contains","appendChild"],"sources":["internal/portal.ts"],"sourcesContent":["const PORTAL_ATTRIBUTE = \"data-k2b-ui-portal\";\n\nconst activeScope = (): HTMLElement | undefined => {\n const active = document.activeElement;\n return active instanceof Element ? ((active.closest(\".k2b-ui\") as HTMLElement | null) ?? undefined) : undefined;\n};\n\nexport const getK2bPortalRoot = (scope?: HTMLElement | null): HTMLElement => {\n const owner = scope ?? activeScope() ?? document.querySelector<HTMLElement>(\".k2b-ui\") ?? document.body;\n const existing = Array.from(owner.children).find((child) => child instanceof HTMLElement && child.hasAttribute(PORTAL_ATTRIBUTE));\n if (existing instanceof HTMLElement) return existing;\n\n const root = document.createElement(\"div\");\n root.setAttribute(PORTAL_ATTRIBUTE, \"\");\n root.classList.add(\"k2b-ui-portal\");\n if (owner === document.body && !owner.classList.contains(\"k2b-ui\")) root.classList.add(\"k2b-ui\");\n owner.appendChild(root);\n return root;\n};\n"],"mappings":"AAAA,MAAMA,gBAAgB,GAAG,oBAAoB;AAE7C,MAAMC,WAAW,GAAGA,CAAA,KAA+B;EACjD,MAAMC,MAAM,GAAGC,QAAQ,CAACC,aAAa;EACrC,OAAOF,MAAM,YAAYG,OAAO,GAAKH,MAAM,CAACI,OAAO,CAAC,SAAS,CAAC,IAA2BC,SAAS,GAAIA,SAAS;AACjH,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIC,KAA0B,IAAkB;EAC3E,MAAMC,KAAK,GAAGD,KAAK,IAAIR,WAAW,CAAC,CAAC,IAAIE,QAAQ,CAACQ,aAAa,CAAc,SAAS,CAAC,IAAIR,QAAQ,CAACS,IAAI;EACvG,MAAMC,QAAQ,GAAGC,KAAK,CAACC,IAAI,CAACL,KAAK,CAACM,QAAQ,CAAC,CAACC,IAAI,CAAEC,KAAK,IAAKA,KAAK,YAAYC,WAAW,IAAID,KAAK,CAACE,YAAY,CAACpB,gBAAgB,CAAC,CAAC;EACjI,IAAIa,QAAQ,YAAYM,WAAW,EAAE,OAAON,QAAQ;EAEpD,MAAMQ,IAAI,GAAGlB,QAAQ,CAACmB,aAAa,CAAC,KAAK,CAAC;EAC1CD,IAAI,CAACE,YAAY,CAACvB,gBAAgB,EAAE,EAAE,CAAC;EACvCqB,IAAI,CAACG,SAAS,CAACC,GAAG,CAAC,eAAe,CAAC;EACnC,IAAIf,KAAK,KAAKP,QAAQ,CAACS,IAAI,IAAI,CAACF,KAAK,CAACc,SAAS,CAACE,QAAQ,CAAC,QAAQ,CAAC,EAAEL,IAAI,CAACG,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;EAChGf,KAAK,CAACiB,WAAW,CAACN,IAAI,CAAC;EACvB,OAAOA,IAAI;AACb,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["internal/portal.ts"],"sourcesContent":["const PORTAL_ATTRIBUTE = \"data-k2b-ui-portal\";\n\nconst activeScope = (): HTMLElement | undefined => {\n const active = document.activeElement;\n return active instanceof Element ? ((active.closest(\".k2b-ui\") as HTMLElement | null) ?? undefined) : undefined;\n};\n\nexport const getK2bPortalRoot = (scope?: HTMLElement | null): HTMLElement => {\n const owner = scope ?? activeScope() ?? document.querySelector<HTMLElement>(\".k2b-ui\") ?? document.body;\n const existing = Array.from(owner.children).find((child) => child instanceof HTMLElement && child.hasAttribute(PORTAL_ATTRIBUTE));\n if (existing instanceof HTMLElement) return existing;\n\n const root = document.createElement(\"div\");\n root.setAttribute(PORTAL_ATTRIBUTE, \"\");\n root.classList.add(\"k2b-ui-portal\");\n if (owner === document.body && !owner.classList.contains(\"k2b-ui\")) root.classList.add(\"k2b-ui\");\n owner.appendChild(root);\n return root;\n};\n"],"mappings":"AAAA,MAAM,gBAAgB,GAAG,oBAAoB;AAE7C,MAAM,WAAW,GAAG,MAA+B;EACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa;EACrC,OAAO,MAAM,YAAY,OAAO,GAAK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAA2B,SAAS,GAAI,SAAS;AACjH,CAAC;AAED,OAAO,MAAM,gBAAgB,GAAI,KAA0B,IAAkB;EAC3E,MAAM,KAAK,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAc,SAAS,CAAC,IAAI,QAAQ,CAAC,IAAI;EACvG,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAE,KAAK,IAAK,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;EACjI,IAAI,QAAQ,YAAY,WAAW,EAAE,OAAO,QAAQ;EAEpD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EAC1C,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC;EACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;EACnC,IAAI,KAAK,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;EAChG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;EACvB,OAAO,IAAI;AACb,CAAC","ignoreList":[]}