@k2b/ui 0.4.2 → 0.5.1

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 (383) hide show
  1. package/dist/browser/actions/Button.js.map +1 -1
  2. package/dist/browser/actions/ContextMenu.js.map +1 -1
  3. package/dist/browser/actions/CopyButton.js.map +1 -1
  4. package/dist/browser/actions/Disclosure.js.map +1 -1
  5. package/dist/browser/actions/Dropdown.js.map +1 -1
  6. package/dist/browser/actions/FilterChip.js.map +1 -1
  7. package/dist/browser/actions/RemoveButton.js.map +1 -1
  8. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  9. package/dist/browser/actions/SplitButton.js.map +1 -1
  10. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  11. package/dist/browser/actions/Tabs.js.map +1 -1
  12. package/dist/browser/actions/Toolbar.js.map +1 -1
  13. package/dist/browser/actions/index.js.map +1 -1
  14. package/dist/browser/chat/ChatComposer.js.map +1 -1
  15. package/dist/browser/chat/ChatContextPopup.js.map +1 -1
  16. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  17. package/dist/browser/chat/ChatRoot.js.map +1 -1
  18. package/dist/browser/chat/ChatTasks.js +1 -1
  19. package/dist/browser/chat/ChatTasks.js.map +1 -1
  20. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  21. package/dist/browser/chat/chat-behavior.js.map +1 -1
  22. package/dist/browser/chat/composer-document.js.map +1 -1
  23. package/dist/browser/chat/index.js.map +1 -1
  24. package/dist/browser/content/Calendar.js.map +1 -1
  25. package/dist/browser/content/Chart.js.map +1 -1
  26. package/dist/browser/content/ChartExplorer.js.map +1 -1
  27. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  28. package/dist/browser/content/ChartFilterControls.js +1 -1
  29. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  30. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  31. package/dist/browser/content/CodeDisplay.js.map +1 -1
  32. package/dist/browser/content/DataTable.js.map +1 -1
  33. package/dist/browser/content/Docs.js.map +1 -1
  34. package/dist/browser/content/FileBrowser.js.map +1 -1
  35. package/dist/browser/content/FileGrid.js.map +1 -1
  36. package/dist/browser/content/FileTree.js.map +1 -1
  37. package/dist/browser/content/FileView.js.map +1 -1
  38. package/dist/browser/content/Lightbox.js.map +1 -1
  39. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  40. package/dist/browser/content/MarkdownView.js.map +1 -1
  41. package/dist/browser/content/Pagination.js.map +1 -1
  42. package/dist/browser/content/PdfPreview.js.map +1 -1
  43. package/dist/browser/content/RangePicker.js.map +1 -1
  44. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  45. package/dist/browser/content/calendar-event-layout.js.map +1 -1
  46. package/dist/browser/content/calendar-pointer.js.map +1 -1
  47. package/dist/browser/content/chart-cursor.js.map +1 -1
  48. package/dist/browser/content/chart-explorer.js.map +1 -1
  49. package/dist/browser/content/chart-inspection.js.map +1 -1
  50. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  51. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  52. package/dist/browser/content/chart-snapshot.js.map +1 -1
  53. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  54. package/dist/browser/content/chart-svg.js.map +1 -1
  55. package/dist/browser/content/code-highlight.js.map +1 -1
  56. package/dist/browser/content/collection-selection.js.map +1 -1
  57. package/dist/browser/content/delimited-preferences.js.map +1 -1
  58. package/dist/browser/content/file-tree.js.map +1 -1
  59. package/dist/browser/content/file-view-preview.js.map +1 -1
  60. package/dist/browser/content/index.js.map +1 -1
  61. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  62. package/dist/browser/feedback/Tooltip.js.map +1 -1
  63. package/dist/browser/feedback/dialog-core.js.map +1 -1
  64. package/dist/browser/feedback/index.js.map +1 -1
  65. package/dist/browser/feedback/prompts.js.map +1 -1
  66. package/dist/browser/feedback/toast.js.map +1 -1
  67. package/dist/browser/feedback/tooltip-position.js.map +1 -1
  68. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  69. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  70. package/dist/browser/inputs/Checkbox.js.map +1 -1
  71. package/dist/browser/inputs/CheckboxCard.js.map +1 -1
  72. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  73. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  74. package/dist/browser/inputs/Combobox.js.map +1 -1
  75. package/dist/browser/inputs/DatePicker.js.map +1 -1
  76. package/dist/browser/inputs/FileInputs.js.map +1 -1
  77. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  78. package/dist/browser/inputs/NumberInput.js.map +1 -1
  79. package/dist/browser/inputs/Select.js.map +1 -1
  80. package/dist/browser/inputs/SelectChip.js.map +1 -1
  81. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  82. package/dist/browser/inputs/Switch.js.map +1 -1
  83. package/dist/browser/inputs/TagEditor.js.map +1 -1
  84. package/dist/browser/inputs/TagsInput.js.map +1 -1
  85. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  86. package/dist/browser/inputs/TextInput.js.map +1 -1
  87. package/dist/browser/inputs/choice.js.map +1 -1
  88. package/dist/browser/inputs/completion/behaviors.js.map +1 -1
  89. package/dist/browser/inputs/completion/engine.js.map +1 -1
  90. package/dist/browser/inputs/completion/index.js.map +1 -1
  91. package/dist/browser/inputs/completion/overlay.js.map +1 -1
  92. package/dist/browser/inputs/date-picker.js.map +1 -1
  93. package/dist/browser/inputs/editor-dom.js.map +1 -1
  94. package/dist/browser/inputs/field-contract.js.map +1 -1
  95. package/dist/browser/inputs/icon-options.js.map +1 -1
  96. package/dist/browser/inputs/image-crop.js.map +1 -1
  97. package/dist/browser/inputs/index.js.map +1 -1
  98. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  99. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  100. package/dist/browser/inputs/markdown/actions.js.map +1 -1
  101. package/dist/browser/inputs/markdown/active-formats.js.map +1 -1
  102. package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
  103. package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
  104. package/dist/browser/internal/color.js.map +1 -1
  105. package/dist/browser/internal/field.js.map +1 -1
  106. package/dist/browser/internal/portal.js.map +1 -1
  107. package/dist/browser/intl/Format.js.map +1 -1
  108. package/dist/browser/intl/index.js.map +1 -1
  109. package/dist/browser/intl/locale.js.map +1 -1
  110. package/dist/browser/intl/messages.js +2 -0
  111. package/dist/browser/intl/messages.js.map +1 -1
  112. package/dist/browser/layout/AppOverview.js +29 -20
  113. package/dist/browser/layout/AppOverview.js.map +1 -1
  114. package/dist/browser/layout/AppWorkspace.js +60 -54
  115. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  116. package/dist/browser/layout/BottomSheet.js.map +1 -1
  117. package/dist/browser/layout/DataPanel.js.map +1 -1
  118. package/dist/browser/layout/DetailPanel.js.map +1 -1
  119. package/dist/browser/layout/Discussion.js.map +1 -1
  120. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  121. package/dist/browser/layout/Navigation.js.map +1 -1
  122. package/dist/browser/layout/PanelDialog.js.map +1 -1
  123. package/dist/browser/layout/PanelHeader.js +1 -1
  124. package/dist/browser/layout/PanelHeader.js.map +1 -1
  125. package/dist/browser/layout/Panes.js.map +1 -1
  126. package/dist/browser/layout/PullToRefresh.js +217 -0
  127. package/dist/browser/layout/PullToRefresh.js.map +1 -0
  128. package/dist/browser/layout/ScrollArea.js.map +1 -1
  129. package/dist/browser/layout/Settings.js.map +1 -1
  130. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  131. package/dist/browser/layout/SettingsModal.js.map +1 -1
  132. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  133. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  134. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  135. package/dist/browser/layout/floating-window-geometry.js.map +1 -1
  136. package/dist/browser/layout/index.js +1 -0
  137. package/dist/browser/layout/index.js.map +1 -1
  138. package/dist/browser/layout/navigation-model.js.map +1 -1
  139. package/dist/browser/layout/panes-layout.js.map +1 -1
  140. package/dist/browser/layout/scroll-fade.js.map +1 -1
  141. package/dist/browser/layout/stable-id.js.map +1 -1
  142. package/dist/browser/surfaces/Avatar.js.map +1 -1
  143. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  144. package/dist/browser/surfaces/LinkCard.js +13 -2
  145. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  146. package/dist/browser/surfaces/NotFoundState.js.map +1 -1
  147. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  148. package/dist/browser/surfaces/Paper.js.map +1 -1
  149. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  150. package/dist/browser/surfaces/ProgressBar.js.map +1 -1
  151. package/dist/browser/surfaces/StatCell.js.map +1 -1
  152. package/dist/browser/surfaces/StatGrid.js.map +1 -1
  153. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  154. package/dist/browser/surfaces/Tag.js.map +1 -1
  155. package/dist/browser/surfaces/index.js.map +1 -1
  156. package/dist/browser/widgets/Widget.js.map +1 -1
  157. package/dist/browser/widgets/WidgetHero.js.map +1 -1
  158. package/dist/browser/widgets/WidgetList.js.map +1 -1
  159. package/dist/browser/widgets/WidgetPills.js.map +1 -1
  160. package/dist/browser/widgets/WidgetStat.js.map +1 -1
  161. package/dist/browser/widgets/WidgetStatus.js.map +1 -1
  162. package/dist/ssr/actions/Button.js +5 -4
  163. package/dist/ssr/actions/Button.js.map +1 -1
  164. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  165. package/dist/ssr/actions/CopyButton.js +2 -1
  166. package/dist/ssr/actions/CopyButton.js.map +1 -1
  167. package/dist/ssr/actions/Disclosure.js.map +1 -1
  168. package/dist/ssr/actions/Dropdown.js +7 -6
  169. package/dist/ssr/actions/Dropdown.js.map +1 -1
  170. package/dist/ssr/actions/FilterChip.js +5 -4
  171. package/dist/ssr/actions/FilterChip.js.map +1 -1
  172. package/dist/ssr/actions/RemoveButton.js +1 -0
  173. package/dist/ssr/actions/RemoveButton.js.map +1 -1
  174. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  175. package/dist/ssr/actions/SplitButton.js +1 -0
  176. package/dist/ssr/actions/SplitButton.js.map +1 -1
  177. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  178. package/dist/ssr/actions/Tabs.js.map +1 -1
  179. package/dist/ssr/actions/Toolbar.js.map +1 -1
  180. package/dist/ssr/actions/index.js.map +1 -1
  181. package/dist/ssr/chat/ChatComposer.js +6 -5
  182. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  183. package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
  184. package/dist/ssr/chat/ChatPrimitives.js +6 -5
  185. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  186. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  187. package/dist/ssr/chat/ChatTasks.js +1 -1
  188. package/dist/ssr/chat/ChatTasks.js.map +1 -1
  189. package/dist/ssr/chat/ChatTimeline.js +5 -4
  190. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  191. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  192. package/dist/ssr/chat/composer-document.js.map +1 -1
  193. package/dist/ssr/chat/index.js.map +1 -1
  194. package/dist/ssr/content/Calendar.js +2 -1
  195. package/dist/ssr/content/Calendar.js.map +1 -1
  196. package/dist/ssr/content/Chart.js.map +1 -1
  197. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  198. package/dist/ssr/content/ChartExplorerControls.js +5 -4
  199. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  200. package/dist/ssr/content/ChartFilterControls.js +3 -2
  201. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  202. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  203. package/dist/ssr/content/CodeDisplay.js.map +1 -1
  204. package/dist/ssr/content/DataTable.js +1 -0
  205. package/dist/ssr/content/DataTable.js.map +1 -1
  206. package/dist/ssr/content/Docs.js +1 -0
  207. package/dist/ssr/content/Docs.js.map +1 -1
  208. package/dist/ssr/content/FileBrowser.js +2 -1
  209. package/dist/ssr/content/FileBrowser.js.map +1 -1
  210. package/dist/ssr/content/FileGrid.js.map +1 -1
  211. package/dist/ssr/content/FileTree.js +2 -1
  212. package/dist/ssr/content/FileTree.js.map +1 -1
  213. package/dist/ssr/content/FileView.js +5 -4
  214. package/dist/ssr/content/FileView.js.map +1 -1
  215. package/dist/ssr/content/Lightbox.js +2 -1
  216. package/dist/ssr/content/Lightbox.js.map +1 -1
  217. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  218. package/dist/ssr/content/MarkdownView.js.map +1 -1
  219. package/dist/ssr/content/Pagination.js +2 -1
  220. package/dist/ssr/content/Pagination.js.map +1 -1
  221. package/dist/ssr/content/PdfPreview.js.map +1 -1
  222. package/dist/ssr/content/RangePicker.js.map +1 -1
  223. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  224. package/dist/ssr/content/calendar-event-layout.js.map +1 -1
  225. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  226. package/dist/ssr/content/chart-cursor.js.map +1 -1
  227. package/dist/ssr/content/chart-explorer.js.map +1 -1
  228. package/dist/ssr/content/chart-inspection.js.map +1 -1
  229. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  230. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  231. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  232. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  233. package/dist/ssr/content/chart-svg.js.map +1 -1
  234. package/dist/ssr/content/code-highlight.js.map +1 -1
  235. package/dist/ssr/content/collection-selection.js.map +1 -1
  236. package/dist/ssr/content/delimited-preferences.js.map +1 -1
  237. package/dist/ssr/content/file-tree.js.map +1 -1
  238. package/dist/ssr/content/file-view-preview.js.map +1 -1
  239. package/dist/ssr/content/index.js.map +1 -1
  240. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  241. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  242. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  243. package/dist/ssr/feedback/index.js.map +1 -1
  244. package/dist/ssr/feedback/prompts.js +3 -2
  245. package/dist/ssr/feedback/prompts.js.map +1 -1
  246. package/dist/ssr/feedback/toast.js.map +1 -1
  247. package/dist/ssr/feedback/tooltip-position.js.map +1 -1
  248. package/dist/ssr/inputs/AutocompleteEditor.js +3 -2
  249. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  250. package/dist/ssr/inputs/AutocompleteSelect.js +5 -4
  251. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  252. package/dist/ssr/inputs/Checkbox.js +1 -0
  253. package/dist/ssr/inputs/Checkbox.js.map +1 -1
  254. package/dist/ssr/inputs/CheckboxCard.js.map +1 -1
  255. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  256. package/dist/ssr/inputs/ChoiceInputs.js +1 -0
  257. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  258. package/dist/ssr/inputs/Combobox.js +2 -1
  259. package/dist/ssr/inputs/Combobox.js.map +1 -1
  260. package/dist/ssr/inputs/DatePicker.js +4 -3
  261. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  262. package/dist/ssr/inputs/FileInputs.js +2 -1
  263. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  264. package/dist/ssr/inputs/MultiSelectInput.js +4 -3
  265. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  266. package/dist/ssr/inputs/NumberInput.js +2 -1
  267. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  268. package/dist/ssr/inputs/Select.js +4 -3
  269. package/dist/ssr/inputs/Select.js.map +1 -1
  270. package/dist/ssr/inputs/SelectChip.js +3 -2
  271. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  272. package/dist/ssr/inputs/SpecialInputs.js +1 -0
  273. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  274. package/dist/ssr/inputs/Switch.js.map +1 -1
  275. package/dist/ssr/inputs/TagEditor.js +3 -2
  276. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  277. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  278. package/dist/ssr/inputs/TemplateEditor.js +1 -0
  279. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  280. package/dist/ssr/inputs/TextInput.js +4 -3
  281. package/dist/ssr/inputs/TextInput.js.map +1 -1
  282. package/dist/ssr/inputs/choice.js.map +1 -1
  283. package/dist/ssr/inputs/completion/behaviors.js.map +1 -1
  284. package/dist/ssr/inputs/completion/engine.js.map +1 -1
  285. package/dist/ssr/inputs/completion/index.js.map +1 -1
  286. package/dist/ssr/inputs/completion/overlay.js.map +1 -1
  287. package/dist/ssr/inputs/date-picker.js.map +1 -1
  288. package/dist/ssr/inputs/editor-dom.js.map +1 -1
  289. package/dist/ssr/inputs/field-contract.js.map +1 -1
  290. package/dist/ssr/inputs/icon-options.js.map +1 -1
  291. package/dist/ssr/inputs/image-crop.js.map +1 -1
  292. package/dist/ssr/inputs/index.js.map +1 -1
  293. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  294. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  295. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  296. package/dist/ssr/inputs/markdown/actions.js.map +1 -1
  297. package/dist/ssr/inputs/markdown/active-formats.js.map +1 -1
  298. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  299. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
  300. package/dist/ssr/internal/color.js.map +1 -1
  301. package/dist/ssr/internal/field.js.map +1 -1
  302. package/dist/ssr/internal/portal.js.map +1 -1
  303. package/dist/ssr/intl/Format.js.map +1 -1
  304. package/dist/ssr/intl/index.js.map +1 -1
  305. package/dist/ssr/intl/locale.js.map +1 -1
  306. package/dist/ssr/intl/messages.js +2 -0
  307. package/dist/ssr/intl/messages.js.map +1 -1
  308. package/dist/ssr/layout/AppOverview.js +16 -6
  309. package/dist/ssr/layout/AppOverview.js.map +1 -1
  310. package/dist/ssr/layout/AppWorkspace.js +12 -8
  311. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  312. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  313. package/dist/ssr/layout/DataPanel.js +1 -0
  314. package/dist/ssr/layout/DataPanel.js.map +1 -1
  315. package/dist/ssr/layout/DetailPanel.js +1 -0
  316. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  317. package/dist/ssr/layout/Discussion.js +3 -2
  318. package/dist/ssr/layout/Discussion.js.map +1 -1
  319. package/dist/ssr/layout/FloatingWindow.js +1 -0
  320. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  321. package/dist/ssr/layout/Navigation.js +3 -2
  322. package/dist/ssr/layout/Navigation.js.map +1 -1
  323. package/dist/ssr/layout/PanelDialog.js +1 -0
  324. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  325. package/dist/ssr/layout/PanelHeader.js +1 -1
  326. package/dist/ssr/layout/PanelHeader.js.map +1 -1
  327. package/dist/ssr/layout/Panes.js.map +1 -1
  328. package/dist/ssr/layout/PullToRefresh.js +177 -0
  329. package/dist/ssr/layout/PullToRefresh.js.map +1 -0
  330. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  331. package/dist/ssr/layout/Settings.js +2 -1
  332. package/dist/ssr/layout/Settings.js.map +1 -1
  333. package/dist/ssr/layout/SettingsCollection.js +1 -0
  334. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  335. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  336. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  337. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  338. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  339. package/dist/ssr/layout/floating-window-geometry.js.map +1 -1
  340. package/dist/ssr/layout/index.js +1 -0
  341. package/dist/ssr/layout/index.js.map +1 -1
  342. package/dist/ssr/layout/navigation-model.js.map +1 -1
  343. package/dist/ssr/layout/panes-layout.js.map +1 -1
  344. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  345. package/dist/ssr/layout/stable-id.js.map +1 -1
  346. package/dist/ssr/surfaces/Avatar.js +2 -1
  347. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  348. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  349. package/dist/ssr/surfaces/LinkCard.js +11 -2
  350. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  351. package/dist/ssr/surfaces/NotFoundState.js.map +1 -1
  352. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  353. package/dist/ssr/surfaces/Paper.js +2 -1
  354. package/dist/ssr/surfaces/Paper.js.map +1 -1
  355. package/dist/ssr/surfaces/Placeholder.js +2 -1
  356. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  357. package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
  358. package/dist/ssr/surfaces/StatCell.js +2 -1
  359. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  360. package/dist/ssr/surfaces/StatGrid.js +1 -0
  361. package/dist/ssr/surfaces/StatGrid.js.map +1 -1
  362. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  363. package/dist/ssr/surfaces/Tag.js.map +1 -1
  364. package/dist/ssr/surfaces/index.js.map +1 -1
  365. package/dist/ssr/widgets/Widget.js +1 -0
  366. package/dist/ssr/widgets/Widget.js.map +1 -1
  367. package/dist/ssr/widgets/WidgetHero.js.map +1 -1
  368. package/dist/ssr/widgets/WidgetList.js.map +1 -1
  369. package/dist/ssr/widgets/WidgetPills.js.map +1 -1
  370. package/dist/ssr/widgets/WidgetStat.js +1 -0
  371. package/dist/ssr/widgets/WidgetStat.js.map +1 -1
  372. package/dist/ssr/widgets/WidgetStatus.js.map +1 -1
  373. package/dist/styles.css +1 -1
  374. package/dist/types/actions/SpotlightSearch.d.ts +1 -1
  375. package/dist/types/feedback/prompts.d.ts +2 -2
  376. package/dist/types/intl/messages.d.ts +1 -0
  377. package/dist/types/layout/AppOverview.d.ts +7 -0
  378. package/dist/types/layout/AppWorkspace.d.ts +14 -2
  379. package/dist/types/layout/PanelHeader.d.ts +1 -1
  380. package/dist/types/layout/PullToRefresh.d.ts +21 -0
  381. package/dist/types/layout/index.d.ts +3 -1
  382. package/dist/types/surfaces/LinkCard.d.ts +5 -2
  383. package/package.json +7 -7
@@ -0,0 +1,217 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
3
+ import { setAttribute as _$setAttribute } from "solid-js/web";
4
+ import { className as _$className } from "solid-js/web";
5
+ import { effect as _$effect } from "solid-js/web";
6
+ import { getNextElement as _$getNextElement } from "solid-js/web";
7
+ import { getNextMarker as _$getNextMarker } from "solid-js/web";
8
+ import { insert as _$insert } from "solid-js/web";
9
+ import { memo as _$memo } from "solid-js/web";
10
+ import { use as _$use } from "solid-js/web";
11
+ var _tmpl$ = /*#__PURE__*/_$template(`<div><div class=k2b-pull-to-refresh__indicator role=status aria-live=polite><i aria-hidden=true></i><span class=k2b-sr-only></span></div><!$><!/>`);
12
+ import { createSignal, onCleanup, onMount } from "solid-js";
13
+ import { useUiMessages } from "../intl/messages";
14
+
15
+ /** Android's SwipeRefreshLayout triggers at 64dp; the pull is damped to half the input travel. */
16
+ const THRESHOLD = 64;
17
+ const MAX_DISTANCE = 96;
18
+ const RESISTANCE = 0.5;
19
+ /** A trackpad has no release event, so an idle gap ends the wheel gesture. */
20
+ const WHEEL_IDLE_MS = 300;
21
+ const LINE_HEIGHT = 16;
22
+ const INTERACTIVE = "a, button, input, textarea, select, [contenteditable], [role='button']";
23
+
24
+ /**
25
+ * Turns a downward pull on a scroll container that is already at its top into
26
+ * one `onRefresh` call. Touch pulls, mouse or pen drags on non-interactive
27
+ * space, and trackpad or wheel overscroll share one gesture model. The gesture
28
+ * is an enhancement: keep a keyboard-reachable refresh (a button or the page
29
+ * reload) next to it.
30
+ */
31
+ export function PullToRefresh(props) {
32
+ const messages = useUiMessages();
33
+ const [state, setState] = createSignal("idle");
34
+ const [distance, setDistance] = createSignal(0);
35
+ let root;
36
+ const active = () => !props.disabled && state() !== "refreshing";
37
+ const atTop = target => {
38
+ for (let node = target instanceof Element ? target : null; node && node !== root; node = node.parentElement) if (node.scrollTop > 0) return false;
39
+ return true;
40
+ };
41
+ const interactive = target => target instanceof Element && target.closest(INTERACTIVE) !== null;
42
+ /** Keeps the drag alive when the pointer leaves the wrapper; a pointer that is already gone must not end the gesture. */
43
+ const capture = id => {
44
+ try {
45
+ root.setPointerCapture(id);
46
+ } catch {}
47
+ };
48
+ const reset = () => {
49
+ setDistance(0);
50
+ setState("idle");
51
+ };
52
+ const pull = travel => {
53
+ const next = Math.min(MAX_DISTANCE, Math.max(0, travel * RESISTANCE));
54
+ setDistance(next);
55
+ setState(next >= THRESHOLD ? "ready" : next > 0 ? "pulling" : "idle");
56
+ };
57
+ const refresh = async () => {
58
+ if (state() === "refreshing") return;
59
+ setState("refreshing");
60
+ setDistance(THRESHOLD);
61
+ try {
62
+ await props.onRefresh();
63
+ } finally {
64
+ reset();
65
+ }
66
+ };
67
+ const release = () => {
68
+ if (state() === "ready") void refresh();else if (state() !== "refreshing") reset();
69
+ };
70
+ const abort = () => {
71
+ if (state() !== "refreshing") reset();
72
+ };
73
+ let wheelTravel = 0;
74
+ let wheelTimer;
75
+ const endWheel = () => {
76
+ wheelTravel = 0;
77
+ abort();
78
+ };
79
+ const onWheel = event => {
80
+ if (!active()) return;
81
+ clearTimeout(wheelTimer);
82
+ wheelTimer = setTimeout(endWheel, WHEEL_IDLE_MS);
83
+ if (event.deltaY >= 0 || !atTop(event.target)) return endWheel();
84
+ const scale = event.deltaMode === 1 ? LINE_HEIGHT : event.deltaMode === 2 ? root.clientHeight : 1;
85
+ wheelTravel -= event.deltaY * scale;
86
+ pull(wheelTravel);
87
+ if (state() === "ready") {
88
+ wheelTravel = 0;
89
+ void refresh();
90
+ }
91
+ };
92
+ let pointer = null;
93
+ const onPointerDown = event => {
94
+ if (event.pointerType === "touch" || event.button !== 0 || !active() || interactive(event.target) || !atTop(event.target)) return;
95
+ pointer = {
96
+ id: event.pointerId,
97
+ startY: event.clientY
98
+ };
99
+ };
100
+ const onPointerMove = event => {
101
+ if (!pointer || event.pointerId !== pointer.id) return;
102
+ const travel = event.clientY - pointer.startY;
103
+ if (travel <= 0 && state() === "idle") return;
104
+ if (state() === "idle") capture(pointer.id);
105
+ pull(travel);
106
+ if (state() !== "idle") event.preventDefault();
107
+ };
108
+ const onPointerUp = event => {
109
+ if (!pointer || event.pointerId !== pointer.id) return;
110
+ pointer = null;
111
+ release();
112
+ };
113
+ const onPointerCancel = event => {
114
+ if (!pointer || event.pointerId !== pointer.id) return;
115
+ pointer = null;
116
+ abort();
117
+ };
118
+ let touch = null;
119
+ const onTouchStart = event => {
120
+ const first = event.touches[0];
121
+ if (!first || event.touches.length !== 1 || !active() || !atTop(event.target)) return;
122
+ touch = {
123
+ id: first.identifier,
124
+ startY: first.clientY
125
+ };
126
+ };
127
+ const onTouchMove = event => {
128
+ if (!touch) return;
129
+ const current = Array.from(event.touches).find(item => item.identifier === touch?.id);
130
+ if (!current) return;
131
+ const travel = current.clientY - touch.startY;
132
+ if (travel <= 0 && state() === "idle") {
133
+ touch = null;
134
+ return;
135
+ }
136
+ pull(travel);
137
+ if (state() !== "idle" && event.cancelable) event.preventDefault();
138
+ };
139
+ const onTouchEnd = () => {
140
+ if (!touch) return;
141
+ touch = null;
142
+ release();
143
+ };
144
+ const onTouchCancel = () => {
145
+ if (!touch) return;
146
+ touch = null;
147
+ abort();
148
+ };
149
+ onMount(() => {
150
+ root.addEventListener("wheel", onWheel, {
151
+ passive: true
152
+ });
153
+ root.addEventListener("pointerdown", onPointerDown);
154
+ root.addEventListener("pointermove", onPointerMove);
155
+ root.addEventListener("pointerup", onPointerUp);
156
+ root.addEventListener("pointercancel", onPointerCancel);
157
+ root.addEventListener("touchstart", onTouchStart, {
158
+ passive: true
159
+ });
160
+ root.addEventListener("touchmove", onTouchMove, {
161
+ passive: false
162
+ });
163
+ root.addEventListener("touchend", onTouchEnd);
164
+ root.addEventListener("touchcancel", onTouchCancel);
165
+ onCleanup(() => {
166
+ clearTimeout(wheelTimer);
167
+ root.removeEventListener("wheel", onWheel);
168
+ root.removeEventListener("pointerdown", onPointerDown);
169
+ root.removeEventListener("pointermove", onPointerMove);
170
+ root.removeEventListener("pointerup", onPointerUp);
171
+ root.removeEventListener("pointercancel", onPointerCancel);
172
+ root.removeEventListener("touchstart", onTouchStart);
173
+ root.removeEventListener("touchmove", onTouchMove);
174
+ root.removeEventListener("touchend", onTouchEnd);
175
+ root.removeEventListener("touchcancel", onTouchCancel);
176
+ });
177
+ });
178
+ const className = () => props.class?.trim() ? `k2b-pull-to-refresh ${props.class.trim()}` : "k2b-pull-to-refresh";
179
+ const progress = () => Math.min(1, distance() / THRESHOLD);
180
+ return (() => {
181
+ var _el$ = _$getNextElement(_tmpl$),
182
+ _el$2 = _el$.firstChild,
183
+ _el$3 = _el$2.firstChild,
184
+ _el$4 = _el$3.nextSibling,
185
+ _el$5 = _el$2.nextSibling,
186
+ [_el$6, _co$] = _$getNextMarker(_el$5.nextSibling);
187
+ var _ref$ = root;
188
+ typeof _ref$ === "function" ? _$use(_ref$, _el$) : root = _el$;
189
+ _$insert(_el$4, (() => {
190
+ var _c$ = _$memo(() => state() === "refreshing");
191
+ return () => _c$() ? props.label ?? messages().refreshing : "";
192
+ })());
193
+ _$insert(_el$, () => props.children, _el$6, _co$);
194
+ _$effect(_p$ => {
195
+ var _v$ = className(),
196
+ _v$2 = state(),
197
+ _v$3 = `${distance()}px`,
198
+ _v$4 = String(progress()),
199
+ _v$5 = state() === "refreshing" ? "ti ti-loader-2 k2b-spin" : "ti ti-refresh";
200
+ _v$ !== _p$.e && _$className(_el$, _p$.e = _v$);
201
+ _v$2 !== _p$.t && _$setAttribute(_el$, "data-state", _p$.t = _v$2);
202
+ _v$3 !== _p$.a && _$setStyleProperty(_el$, "--k2b-pull-to-refresh-distance", _p$.a = _v$3);
203
+ _v$4 !== _p$.o && _$setStyleProperty(_el$, "--k2b-pull-to-refresh-progress", _p$.o = _v$4);
204
+ _v$5 !== _p$.i && _$className(_el$3, _p$.i = _v$5);
205
+ return _p$;
206
+ }, {
207
+ e: undefined,
208
+ t: undefined,
209
+ a: undefined,
210
+ o: undefined,
211
+ i: undefined
212
+ });
213
+ return _el$;
214
+ })();
215
+ }
216
+ export default PullToRefresh;
217
+ //# sourceMappingURL=PullToRefresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["layout/PullToRefresh.tsx"],"sourcesContent":["import { createSignal, type JSX, onCleanup, onMount } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\n\n/** Android's SwipeRefreshLayout triggers at 64dp; the pull is damped to half the input travel. */\nconst THRESHOLD = 64;\nconst MAX_DISTANCE = 96;\nconst RESISTANCE = 0.5;\n/** A trackpad has no release event, so an idle gap ends the wheel gesture. */\nconst WHEEL_IDLE_MS = 300;\nconst LINE_HEIGHT = 16;\n\nexport type PullToRefreshState = \"idle\" | \"pulling\" | \"ready\" | \"refreshing\";\n\nexport type PullToRefreshProps = {\n /** Reloads the wrapped content. The indicator stays busy until the promise settles. */\n onRefresh: () => Promise<void>;\n disabled?: boolean;\n /** Status text announced while refreshing. Defaults to the shared \"Refreshing\" message. */\n label?: string;\n class?: string;\n /** Exactly one scroll container; the gesture only starts while it is scrolled to the top. */\n children: JSX.Element;\n};\n\nconst INTERACTIVE = \"a, button, input, textarea, select, [contenteditable], [role='button']\";\n\n/**\n * Turns a downward pull on a scroll container that is already at its top into\n * one `onRefresh` call. Touch pulls, mouse or pen drags on non-interactive\n * space, and trackpad or wheel overscroll share one gesture model. The gesture\n * is an enhancement: keep a keyboard-reachable refresh (a button or the page\n * reload) next to it.\n */\nexport function PullToRefresh(props: PullToRefreshProps): JSX.Element {\n const messages = useUiMessages();\n const [state, setState] = createSignal<PullToRefreshState>(\"idle\");\n const [distance, setDistance] = createSignal(0);\n let root!: HTMLDivElement;\n\n const active = () => !props.disabled && state() !== \"refreshing\";\n const atTop = (target: EventTarget | null) => {\n for (let node = target instanceof Element ? target : null; node && node !== root; node = node.parentElement)\n if (node.scrollTop > 0) return false;\n return true;\n };\n const interactive = (target: EventTarget | null) => target instanceof Element && target.closest(INTERACTIVE) !== null;\n /** Keeps the drag alive when the pointer leaves the wrapper; a pointer that is already gone must not end the gesture. */\n const capture = (id: number) => {\n try {\n root.setPointerCapture(id);\n } catch {}\n };\n\n const reset = () => {\n setDistance(0);\n setState(\"idle\");\n };\n const pull = (travel: number) => {\n const next = Math.min(MAX_DISTANCE, Math.max(0, travel * RESISTANCE));\n setDistance(next);\n setState(next >= THRESHOLD ? \"ready\" : next > 0 ? \"pulling\" : \"idle\");\n };\n const refresh = async () => {\n if (state() === \"refreshing\") return;\n setState(\"refreshing\");\n setDistance(THRESHOLD);\n try {\n await props.onRefresh();\n } finally {\n reset();\n }\n };\n const release = () => {\n if (state() === \"ready\") void refresh();\n else if (state() !== \"refreshing\") reset();\n };\n const abort = () => {\n if (state() !== \"refreshing\") reset();\n };\n\n let wheelTravel = 0;\n let wheelTimer: ReturnType<typeof setTimeout> | undefined;\n const endWheel = () => {\n wheelTravel = 0;\n abort();\n };\n const onWheel = (event: WheelEvent) => {\n if (!active()) return;\n clearTimeout(wheelTimer);\n wheelTimer = setTimeout(endWheel, WHEEL_IDLE_MS);\n if (event.deltaY >= 0 || !atTop(event.target)) return endWheel();\n const scale = event.deltaMode === 1 ? LINE_HEIGHT : event.deltaMode === 2 ? root.clientHeight : 1;\n wheelTravel -= event.deltaY * scale;\n pull(wheelTravel);\n if (state() === \"ready\") {\n wheelTravel = 0;\n void refresh();\n }\n };\n\n let pointer: { id: number; startY: number } | null = null;\n const onPointerDown = (event: PointerEvent) => {\n if (event.pointerType === \"touch\" || event.button !== 0 || !active() || interactive(event.target) || !atTop(event.target)) return;\n pointer = { id: event.pointerId, startY: event.clientY };\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!pointer || event.pointerId !== pointer.id) return;\n const travel = event.clientY - pointer.startY;\n if (travel <= 0 && state() === \"idle\") return;\n if (state() === \"idle\") capture(pointer.id);\n pull(travel);\n if (state() !== \"idle\") event.preventDefault();\n };\n const onPointerUp = (event: PointerEvent) => {\n if (!pointer || event.pointerId !== pointer.id) return;\n pointer = null;\n release();\n };\n const onPointerCancel = (event: PointerEvent) => {\n if (!pointer || event.pointerId !== pointer.id) return;\n pointer = null;\n abort();\n };\n\n let touch: { id: number; startY: number } | null = null;\n const onTouchStart = (event: TouchEvent) => {\n const first = event.touches[0];\n if (!first || event.touches.length !== 1 || !active() || !atTop(event.target)) return;\n touch = { id: first.identifier, startY: first.clientY };\n };\n const onTouchMove = (event: TouchEvent) => {\n if (!touch) return;\n const current = Array.from(event.touches).find((item) => item.identifier === touch?.id);\n if (!current) return;\n const travel = current.clientY - touch.startY;\n if (travel <= 0 && state() === \"idle\") {\n touch = null;\n return;\n }\n pull(travel);\n if (state() !== \"idle\" && event.cancelable) event.preventDefault();\n };\n const onTouchEnd = () => {\n if (!touch) return;\n touch = null;\n release();\n };\n const onTouchCancel = () => {\n if (!touch) return;\n touch = null;\n abort();\n };\n\n onMount(() => {\n root.addEventListener(\"wheel\", onWheel, { passive: true });\n root.addEventListener(\"pointerdown\", onPointerDown);\n root.addEventListener(\"pointermove\", onPointerMove);\n root.addEventListener(\"pointerup\", onPointerUp);\n root.addEventListener(\"pointercancel\", onPointerCancel);\n root.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n root.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n root.addEventListener(\"touchend\", onTouchEnd);\n root.addEventListener(\"touchcancel\", onTouchCancel);\n onCleanup(() => {\n clearTimeout(wheelTimer);\n root.removeEventListener(\"wheel\", onWheel);\n root.removeEventListener(\"pointerdown\", onPointerDown);\n root.removeEventListener(\"pointermove\", onPointerMove);\n root.removeEventListener(\"pointerup\", onPointerUp);\n root.removeEventListener(\"pointercancel\", onPointerCancel);\n root.removeEventListener(\"touchstart\", onTouchStart);\n root.removeEventListener(\"touchmove\", onTouchMove);\n root.removeEventListener(\"touchend\", onTouchEnd);\n root.removeEventListener(\"touchcancel\", onTouchCancel);\n });\n });\n\n const className = () => (props.class?.trim() ? `k2b-pull-to-refresh ${props.class.trim()}` : \"k2b-pull-to-refresh\");\n const progress = () => Math.min(1, distance() / THRESHOLD);\n\n return (\n <div\n ref={root}\n class={className()}\n data-state={state()}\n style={{ \"--k2b-pull-to-refresh-distance\": `${distance()}px`, \"--k2b-pull-to-refresh-progress\": String(progress()) }}\n >\n <div class=\"k2b-pull-to-refresh__indicator\" role=\"status\" aria-live=\"polite\">\n <i class={state() === \"refreshing\" ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-refresh\"} aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">{state() === \"refreshing\" ? (props.label ?? messages().refreshing) : \"\"}</span>\n </div>\n {props.children}\n </div>\n );\n}\n\nexport default PullToRefresh;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["splitProps","createScrollFade","ScrollArea","props","local","elementProps","body","scrollFade","className","class","trim","_el$","_$getNextElement","_tmpl$","_$use","el","ref","_$spread","_$mergeProps","data-scroll-fade-axis","orientation","data-viewport-size","viewportSize","data-orientation","data-scroll-fade-mode","undefined","_$memo","data-scroll-preserve","scrollPreserveKey","_$insert","children","_$runHydrationEvents"],"sources":["layout/ScrollArea.tsx"],"sourcesContent":["import { type JSX, splitProps } from \"solid-js\";\nimport { createScrollFade } from \"./scroll-fade\";\n\nexport type ScrollAreaProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\"> & {\n children: JSX.Element;\n scrollFade?: boolean;\n /** Stable compact catalog height, clamped to 60% of the dynamic viewport. */\n viewportSize?: \"compact\";\n orientation?: \"vertical\" | \"horizontal\";\n scrollPreserveKey?: string | false;\n class?: string;\n};\n\nexport function ScrollArea(props: ScrollAreaProps): JSX.Element {\n const [local, elementProps] = splitProps(props, [\n \"children\",\n \"scrollPreserveKey\",\n \"class\",\n \"scrollFade\",\n \"orientation\",\n \"viewportSize\",\n \"ref\",\n ]);\n let body!: HTMLDivElement;\n createScrollFade(\n () => body,\n () => local.scrollFade !== false,\n );\n const className = () => local.class?.trim();\n\n return (\n <div\n {...elementProps}\n ref={(el) => {\n body = el;\n if (typeof local.ref === \"function\") local.ref(el);\n }}\n data-scroll-fade-axis={local.orientation ?? \"vertical\"}\n data-viewport-size={local.viewportSize}\n data-orientation={local.orientation ?? \"vertical\"}\n data-scroll-fade-mode={local.scrollFade !== false ? \"both\" : undefined}\n class={className() ? `k2b-scroll-area ${className()}` : \"k2b-scroll-area\"}\n data-scroll-preserve={local.scrollPreserveKey || undefined}\n >\n {local.children}\n </div>\n );\n}\n\nexport default ScrollArea;\n"],"mappings":";;;;;;;;;AAAA,SAAmBA,UAAU,QAAQ,UAAU;AAC/C,SAASC,gBAAgB,QAAQ,eAAe;AAYhD,OAAO,SAASC,UAAUA,CAACC,KAAsB,EAAe;EAC9D,MAAM,CAACC,KAAK,EAAEC,YAAY,CAAC,GAAGL,UAAU,CAACG,KAAK,EAAE,CAC9C,UAAU,EACV,mBAAmB,EACnB,OAAO,EACP,YAAY,EACZ,aAAa,EACb,cAAc,EACd,KAAK,CACN,CAAC;EACF,IAAIG,IAAqB;EACzBL,gBAAgB,CACd,MAAMK,IAAI,EACV,MAAMF,KAAK,CAACG,UAAU,KAAK,KAC7B,CAAC;EACD,MAAMC,SAAS,GAAGA,CAAA,KAAMJ,KAAK,CAACK,KAAK,EAAEC,IAAI,CAAC,CAAC;EAE3C;IAAA,IAAAC,IAAA,GAAAC,gBAAA,CAAAC,MAAA;IAAAC,KAAA,CAGUC,EAAE,IAAK;MACXT,IAAI,GAAGS,EAAE;MACT,IAAI,OAAOX,KAAK,CAACY,GAAG,KAAK,UAAU,EAAEZ,KAAK,CAACY,GAAG,CAACD,EAAE,CAAC;IACpD,CAAC,EAAAJ,IAAA;IAAAM,QAAA,CAAAN,IAAA,EAAAO,YAAA,CAJGb,YAAY;MAAA,6BAAAc,CAAA;QAAA,OAKOf,KAAK,CAACgB,WAAW,IAAI,UAAU;MAAA;MAAA,0BAAAC,CAAA;QAAA,OAClCjB,KAAK,CAACkB,YAAY;MAAA;MAAA,wBAAAC,CAAA;QAAA,OACpBnB,KAAK,CAACgB,WAAW,IAAI,UAAU;MAAA;MAAA,6BAAAI,CAAA;QAAA,OAC1BpB,KAAK,CAACG,UAAU,KAAK,KAAK,GAAG,MAAM,GAAGkB,SAAS;MAAA;MAAA,aAAAhB,CAAA;QAAA,OAC/DiB,MAAA,SAAAlB,SAAS,CAAC,CAAC,MAAG,mBAAmBA,SAAS,CAAC,CAAC,EAAE,GAAG,iBAAiB;MAAA;MAAA,4BAAAmB,CAAA;QAAA,OACnDvB,KAAK,CAACwB,iBAAiB,IAAIH,SAAS;MAAA;IAAA;IAAAI,QAAA,CAAAlB,IAAA,QAEzDP,KAAK,CAAC0B,QAAQ;IAAAC,oBAAA;IAAA,OAAApB,IAAA;EAAA;AAGrB;AAEA,eAAeT,UAAU","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/ScrollArea.tsx"],"sourcesContent":["import { type JSX, splitProps } from \"solid-js\";\nimport { createScrollFade } from \"./scroll-fade\";\n\nexport type ScrollAreaProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\"> & {\n children: JSX.Element;\n scrollFade?: boolean;\n /** Stable compact catalog height, clamped to 60% of the dynamic viewport. */\n viewportSize?: \"compact\";\n orientation?: \"vertical\" | \"horizontal\";\n scrollPreserveKey?: string | false;\n class?: string;\n};\n\nexport function ScrollArea(props: ScrollAreaProps): JSX.Element {\n const [local, elementProps] = splitProps(props, [\n \"children\",\n \"scrollPreserveKey\",\n \"class\",\n \"scrollFade\",\n \"orientation\",\n \"viewportSize\",\n \"ref\",\n ]);\n let body!: HTMLDivElement;\n createScrollFade(\n () => body,\n () => local.scrollFade !== false,\n );\n const className = () => local.class?.trim();\n\n return (\n <div\n {...elementProps}\n ref={(el) => {\n body = el;\n if (typeof local.ref === \"function\") local.ref(el);\n }}\n data-scroll-fade-axis={local.orientation ?? \"vertical\"}\n data-viewport-size={local.viewportSize}\n data-orientation={local.orientation ?? \"vertical\"}\n data-scroll-fade-mode={local.scrollFade !== false ? \"both\" : undefined}\n class={className() ? `k2b-scroll-area ${className()}` : \"k2b-scroll-area\"}\n data-scroll-preserve={local.scrollPreserveKey || undefined}\n >\n {local.children}\n </div>\n );\n}\n\nexport default ScrollArea;\n"],"mappings":";;;;;;;;;AAAA,SAAmB,UAAU,QAAQ,UAAU;AAC/C,SAAS,gBAAgB,QAAQ,eAAe;AAYhD,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAe;EAC9D,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAC9C,UAAU,EACV,mBAAmB,EACnB,OAAO,EACP,YAAY,EACZ,aAAa,EACb,cAAc,EACd,KAAK,CACN,CAAC;EACF,IAAI,IAAqB;EACzB,gBAAgB,CACd,MAAM,IAAI,EACV,MAAM,KAAK,CAAC,UAAU,KAAK,KAC7B,CAAC;EACD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;EAE3C;IAAA;IAAA,MAGU,EAAE,IAAK;MACX,IAAI,GAAG,EAAE;MACT,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACpD,CAAC;IAAA,4BAJG,YAAY;MAAA;QAAA,OAKO,KAAK,CAAC,WAAW,IAAI,UAAU;MAAA;MAAA;QAAA,OAClC,KAAK,CAAC,YAAY;MAAA;MAAA;QAAA,OACpB,KAAK,CAAC,WAAW,IAAI,UAAU;MAAA;MAAA;QAAA,OAC1B,KAAK,CAAC,UAAU,KAAK,KAAK,GAAG,MAAM,GAAG,SAAS;MAAA;MAAA;QAAA,OAC/D,wBAAS,CAAC,CAAC,MAAG,mBAAmB,SAAS,CAAC,CAAC,EAAE,GAAG,iBAAiB;MAAA;MAAA;QAAA,OACnD,KAAK,CAAC,iBAAiB,IAAI,SAAS;MAAA;IAAA;IAAA,qBAEzD,KAAK,CAAC,QAAQ;IAAA;IAAA;EAAA;AAGrB;AAEA,eAAe,UAAU","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["children","createMemo","createUniqueId","Show","Button","useUiMessages","read","value","SettingsPage","props","_el$","_$getNextElement","_tmpl$4","_el$2","firstChild","_el$9","_el$0","_co$2","_$getNextMarker","nextSibling","_el$3","_el$4","_el$6","_el$7","_co$","_el$1","_el$10","_co$3","_el$11","_el$13","_el$14","_co$4","_$insert","_$createComponent","when","icon","_el$15","_tmpl$5","_$effect","_$className","title","subtitle","_el$5","_tmpl$","actions","_el$8","_tmpl$2","footer","_el$12","_tmpl$3","_p$","_v$","class","_v$2","style","_v$3","scrollPreserveKey","e","t","_$style","a","_$setAttribute","undefined","SettingsSection","headingId","_el$16","_tmpl$7","_el$17","_el$24","_el$25","_co$6","_el$18","_el$19","_el$21","_el$22","_co$5","_el$26","_el$27","_co$7","_el$28","_el$29","_el$20","_el$23","_tmpl$6","SETTINGS_GROUP_ACTION","Symbol","SettingsGroupAction","kind","collectSettingsGroupActions","Array","isArray","flatMap","collectSettingsGroupContent","SettingsGroup","resolved","action","content","_el$30","_tmpl$8","_el$31","_el$32","_el$33","_el$35","_el$36","_co$8","_el$37","_el$38","_co$9","_el$39","description","_el$34","slot","_el$40","_tmpl$9","Action","sameSettingValue","left","right","JSON","stringify","readSettingsError","response","fallback","data","json","catch","message","fields","errors","SettingsField","messages","id","descriptionId","errorId","describedBy","error","control","_el$41","_tmpl$1","_el$42","_el$43","_el$44","_el$46","_el$47","_co$0","_el$48","_el$49","_el$50","_co$1","_el$51","_el$52","_co$10","label","_$memo","changed","_el$45","_tmpl$0","unsaved","_el$53","_tmpl$10","_el$54","_el$55","_el$56","_el$57","_co$11","SettingsActions","changeCount","loading","disabled","Boolean","disableWithoutChanges","saveDisabled","_el$58","_tmpl$12","_el$60","_el$61","_co$12","_el$62","_el$63","_co$13","variant","onClick","onDiscard","discard","saveVariant","loadingLabel","saving","onSave","_tmpl$11","saveLabel","saveChanges","SettingsSaveBar","_el$64","_tmpl$13","_el$65","_el$66","_el$67","_el$68","_el$69","_co$14","_el$70","_el$71","_co$15","unsavedChangeLabel","count","SettingsPanelFooter","_el$72","_tmpl$15","noUnsavedChanges","_el$73","_tmpl$14","_$mergeProps"],"sources":["layout/Settings.tsx"],"sourcesContent":["import { children, createMemo, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button, type ButtonVariant } from \"../actions/Button\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { useUiMessages } from \"../intl/messages\";\n\nconst read = <T,>(value: MaybeAccessor<T>): T => (typeof value === \"function\" ? (value as () => T)() : value);\n\nexport type SettingsPageProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n footer?: JSX.Element;\n scrollPreserveKey?: string;\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nexport function SettingsPage(props: SettingsPageProps): JSX.Element {\n return (\n <section class={`k2b-settings-page${props.class ? ` ${props.class}` : \"\"}`} style={props.style}>\n <header class=\"k2b-settings-page__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-page__heading\">\n <h1>{props.title}</h1>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-page__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-page__body\" data-scroll-preserve={props.scrollPreserveKey}>\n {props.children}\n </div>\n <Show when={props.footer}>\n <footer class=\"k2b-settings-page__footer\">{props.footer}</footer>\n </Show>\n </section>\n );\n}\n\nexport type SettingsSectionProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\n/**\n * A full-page settings group. Dialogs keep using PanelDialog.Section; this\n * component owns the quieter, observability-style paper used on admin pages.\n */\nexport function SettingsSection(props: SettingsSectionProps): JSX.Element {\n const headingId = `k2b-settings-section-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-section${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-section__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-section__heading\">\n <h2 id={headingId}>{props.title}</h2>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-section__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-section__body\">{props.children}</div>\n </section>\n );\n}\n\nconst SETTINGS_GROUP_ACTION = Symbol(\"SettingsGroup.Action\");\n\nexport type SettingsGroupProps = {\n title: JSX.Element;\n description?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\nexport type SettingsGroupActionProps = {\n children: JSX.Element;\n};\n\ntype SettingsGroupActionDefinition = {\n readonly kind: typeof SETTINGS_GROUP_ACTION;\n readonly props: SettingsGroupActionProps;\n};\n\ntype SettingsGroupComponent = ((props: SettingsGroupProps) => JSX.Element) & {\n Action: (props: SettingsGroupActionProps) => JSX.Element;\n};\n\nconst SettingsGroupAction = (props: SettingsGroupActionProps): JSX.Element =>\n ({ kind: SETTINGS_GROUP_ACTION, props }) satisfies SettingsGroupActionDefinition as unknown as JSX.Element;\n\nconst collectSettingsGroupActions = (value: unknown): SettingsGroupActionDefinition[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupActions);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION\n ? [value as SettingsGroupActionDefinition]\n : [];\n};\n\nconst collectSettingsGroupContent = (value: unknown): JSX.Element[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupContent);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION ? [] : [value as JSX.Element];\n};\n\nexport const SettingsGroup = ((props: SettingsGroupProps): JSX.Element => {\n const resolved = children(() => props.children);\n const action = createMemo(() => collectSettingsGroupActions(resolved())[0]);\n const content = createMemo(() => collectSettingsGroupContent(resolved()));\n const headingId = `k2b-settings-group-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-group${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-group__header\">\n <div class=\"k2b-settings-group__heading\">\n <h3 id={headingId}>{props.title}</h3>\n <Show when={props.description}>\n <p>{props.description}</p>\n </Show>\n </div>\n <Show when={action()}>{(slot) => <div class=\"k2b-settings-group__action\">{slot().props.children}</div>}</Show>\n </header>\n <div class=\"k2b-settings-group__body\">{content()}</div>\n </section>\n );\n}) as SettingsGroupComponent;\n\nSettingsGroup.Action = SettingsGroupAction;\n\nexport const sameSettingValue = (left: unknown, right: unknown): boolean => JSON.stringify(left) === JSON.stringify(right);\n\nexport const readSettingsError = async (\n response: Pick<Response, \"json\">,\n fallback: string,\n): Promise<{ message: string; fields: Record<string, string> }> => {\n const data = (await response.json().catch(() => null)) as {\n message?: string;\n errors?: Record<string, string>;\n } | null;\n return { message: data?.message ?? fallback, fields: data?.errors ?? {} };\n};\n\nexport type SettingsFieldProps = {\n label: string;\n description: string;\n error: MaybeAccessor<string | undefined>;\n changed?: MaybeAccessor<boolean>;\n children: JSX.Element | ((control: SettingsFieldControlProps) => JSX.Element);\n class?: string;\n};\n\nexport type SettingsFieldControlProps = {\n describedBy: () => string;\n};\n\nexport function SettingsField(props: SettingsFieldProps): JSX.Element {\n const messages = useUiMessages();\n const id = createUniqueId();\n const descriptionId = `k2b-settings-field-${id}-description`;\n const errorId = `k2b-settings-field-${id}-error`;\n const describedBy = () => (read(props.error) ? `${descriptionId} ${errorId}` : descriptionId);\n const control = () =>\n typeof props.children === \"function\"\n ? (props.children as (control: SettingsFieldControlProps) => JSX.Element)({ describedBy })\n : props.children;\n return (\n <div class={`k2b-settings-field ${props.class ?? \"\"}`}>\n <div class=\"k2b-settings-field__copy\">\n <div class=\"k2b-settings-field__heading\">\n <strong>{props.label}</strong>\n <Show when={props.changed !== undefined && read(props.changed)}>\n <span>{messages().unsaved}</span>\n </Show>\n </div>\n <p id={descriptionId}>{props.description}</p>\n </div>\n {control()}\n <Show when={read(props.error)}>\n {(error) => (\n <p id={errorId} class=\"k2b-settings-field__error\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" /> {error()}\n </p>\n )}\n </Show>\n </div>\n );\n}\n\nexport type SettingsSaveBarProps = {\n changeCount: MaybeAccessor<number>;\n loading: MaybeAccessor<boolean>;\n saveDisabled?: MaybeAccessor<boolean>;\n onDiscard: () => void;\n onSave: () => void;\n saveLabel?: string;\n saveVariant?: ButtonVariant;\n class?: string;\n};\n\nconst SettingsActions = (\n props: SettingsSaveBarProps & {\n disableWithoutChanges?: boolean;\n },\n): JSX.Element => {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n const loading = () => read(props.loading);\n const disabled = () => loading() || Boolean(props.disableWithoutChanges && changeCount() === 0);\n const saveDisabled = () => disabled() || Boolean(props.saveDisabled !== undefined && read(props.saveDisabled));\n return (\n <div class=\"k2b-settings-actions\">\n <Button variant=\"secondary\" disabled={disabled()} onClick={props.onDiscard}>\n {messages().discard}\n </Button>\n <Button\n variant={props.saveVariant ?? \"primary\"}\n loading={loading()}\n loadingLabel={messages().saving}\n disabled={saveDisabled()}\n onClick={props.onSave}\n >\n <i class=\"ti ti-device-floppy\" aria-hidden=\"true\" />\n {props.saveLabel ?? messages().saveChanges}\n </Button>\n </div>\n );\n};\n\nexport function SettingsSaveBar(props: SettingsSaveBarProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <Show when={changeCount() > 0}>\n <div class={`k2b-settings-save-bar ${props.class ?? \"\"}`}>\n <p role=\"status\" aria-live=\"polite\">\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </p>\n <SettingsActions {...props} />\n </div>\n </Show>\n );\n}\n\nexport type SettingsPanelFooterProps = SettingsSaveBarProps;\n\nexport function SettingsPanelFooter(props: SettingsPanelFooterProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <>\n <p class=\"k2b-settings-panel-footer__status\" role=\"status\" aria-live=\"polite\">\n <Show when={changeCount() > 0} fallback={messages().noUnsavedChanges}>\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </Show>\n </p>\n <SettingsActions {...props} disableWithoutChanges />\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/Settings.tsx"],"sourcesContent":["import { children, createMemo, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button, type ButtonVariant } from \"../actions/Button\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { useUiMessages } from \"../intl/messages\";\n\nconst read = <T,>(value: MaybeAccessor<T>): T => (typeof value === \"function\" ? (value as () => T)() : value);\n\nexport type SettingsPageProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n footer?: JSX.Element;\n scrollPreserveKey?: string;\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nexport function SettingsPage(props: SettingsPageProps): JSX.Element {\n return (\n <section class={`k2b-settings-page${props.class ? ` ${props.class}` : \"\"}`} style={props.style}>\n <header class=\"k2b-settings-page__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-page__heading\">\n <h1>{props.title}</h1>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-page__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-page__body\" data-scroll-preserve={props.scrollPreserveKey}>\n {props.children}\n </div>\n <Show when={props.footer}>\n <footer class=\"k2b-settings-page__footer\">{props.footer}</footer>\n </Show>\n </section>\n );\n}\n\nexport type SettingsSectionProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\n/**\n * A full-page settings group. Dialogs keep using PanelDialog.Section; this\n * component owns the quieter, observability-style paper used on admin pages.\n */\nexport function SettingsSection(props: SettingsSectionProps): JSX.Element {\n const headingId = `k2b-settings-section-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-section${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-section__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-section__heading\">\n <h2 id={headingId}>{props.title}</h2>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-section__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-section__body\">{props.children}</div>\n </section>\n );\n}\n\nconst SETTINGS_GROUP_ACTION = Symbol(\"SettingsGroup.Action\");\n\nexport type SettingsGroupProps = {\n title: JSX.Element;\n description?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\nexport type SettingsGroupActionProps = {\n children: JSX.Element;\n};\n\ntype SettingsGroupActionDefinition = {\n readonly kind: typeof SETTINGS_GROUP_ACTION;\n readonly props: SettingsGroupActionProps;\n};\n\ntype SettingsGroupComponent = ((props: SettingsGroupProps) => JSX.Element) & {\n Action: (props: SettingsGroupActionProps) => JSX.Element;\n};\n\nconst SettingsGroupAction = (props: SettingsGroupActionProps): JSX.Element =>\n ({ kind: SETTINGS_GROUP_ACTION, props }) satisfies SettingsGroupActionDefinition as unknown as JSX.Element;\n\nconst collectSettingsGroupActions = (value: unknown): SettingsGroupActionDefinition[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupActions);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION\n ? [value as SettingsGroupActionDefinition]\n : [];\n};\n\nconst collectSettingsGroupContent = (value: unknown): JSX.Element[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupContent);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION ? [] : [value as JSX.Element];\n};\n\nexport const SettingsGroup = ((props: SettingsGroupProps): JSX.Element => {\n const resolved = children(() => props.children);\n const action = createMemo(() => collectSettingsGroupActions(resolved())[0]);\n const content = createMemo(() => collectSettingsGroupContent(resolved()));\n const headingId = `k2b-settings-group-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-group${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-group__header\">\n <div class=\"k2b-settings-group__heading\">\n <h3 id={headingId}>{props.title}</h3>\n <Show when={props.description}>\n <p>{props.description}</p>\n </Show>\n </div>\n <Show when={action()}>{(slot) => <div class=\"k2b-settings-group__action\">{slot().props.children}</div>}</Show>\n </header>\n <div class=\"k2b-settings-group__body\">{content()}</div>\n </section>\n );\n}) as SettingsGroupComponent;\n\nSettingsGroup.Action = SettingsGroupAction;\n\nexport const sameSettingValue = (left: unknown, right: unknown): boolean => JSON.stringify(left) === JSON.stringify(right);\n\nexport const readSettingsError = async (\n response: Pick<Response, \"json\">,\n fallback: string,\n): Promise<{ message: string; fields: Record<string, string> }> => {\n const data = (await response.json().catch(() => null)) as {\n message?: string;\n errors?: Record<string, string>;\n } | null;\n return { message: data?.message ?? fallback, fields: data?.errors ?? {} };\n};\n\nexport type SettingsFieldProps = {\n label: string;\n description: string;\n error: MaybeAccessor<string | undefined>;\n changed?: MaybeAccessor<boolean>;\n children: JSX.Element | ((control: SettingsFieldControlProps) => JSX.Element);\n class?: string;\n};\n\nexport type SettingsFieldControlProps = {\n describedBy: () => string;\n};\n\nexport function SettingsField(props: SettingsFieldProps): JSX.Element {\n const messages = useUiMessages();\n const id = createUniqueId();\n const descriptionId = `k2b-settings-field-${id}-description`;\n const errorId = `k2b-settings-field-${id}-error`;\n const describedBy = () => (read(props.error) ? `${descriptionId} ${errorId}` : descriptionId);\n const control = () =>\n typeof props.children === \"function\"\n ? (props.children as (control: SettingsFieldControlProps) => JSX.Element)({ describedBy })\n : props.children;\n return (\n <div class={`k2b-settings-field ${props.class ?? \"\"}`}>\n <div class=\"k2b-settings-field__copy\">\n <div class=\"k2b-settings-field__heading\">\n <strong>{props.label}</strong>\n <Show when={props.changed !== undefined && read(props.changed)}>\n <span>{messages().unsaved}</span>\n </Show>\n </div>\n <p id={descriptionId}>{props.description}</p>\n </div>\n {control()}\n <Show when={read(props.error)}>\n {(error) => (\n <p id={errorId} class=\"k2b-settings-field__error\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" /> {error()}\n </p>\n )}\n </Show>\n </div>\n );\n}\n\nexport type SettingsSaveBarProps = {\n changeCount: MaybeAccessor<number>;\n loading: MaybeAccessor<boolean>;\n saveDisabled?: MaybeAccessor<boolean>;\n onDiscard: () => void;\n onSave: () => void;\n saveLabel?: string;\n saveVariant?: ButtonVariant;\n class?: string;\n};\n\nconst SettingsActions = (\n props: SettingsSaveBarProps & {\n disableWithoutChanges?: boolean;\n },\n): JSX.Element => {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n const loading = () => read(props.loading);\n const disabled = () => loading() || Boolean(props.disableWithoutChanges && changeCount() === 0);\n const saveDisabled = () => disabled() || Boolean(props.saveDisabled !== undefined && read(props.saveDisabled));\n return (\n <div class=\"k2b-settings-actions\">\n <Button variant=\"secondary\" disabled={disabled()} onClick={props.onDiscard}>\n {messages().discard}\n </Button>\n <Button\n variant={props.saveVariant ?? \"primary\"}\n loading={loading()}\n loadingLabel={messages().saving}\n disabled={saveDisabled()}\n onClick={props.onSave}\n >\n <i class=\"ti ti-device-floppy\" aria-hidden=\"true\" />\n {props.saveLabel ?? messages().saveChanges}\n </Button>\n </div>\n );\n};\n\nexport function SettingsSaveBar(props: SettingsSaveBarProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <Show when={changeCount() > 0}>\n <div class={`k2b-settings-save-bar ${props.class ?? \"\"}`}>\n <p role=\"status\" aria-live=\"polite\">\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </p>\n <SettingsActions {...props} />\n </div>\n </Show>\n );\n}\n\nexport type SettingsPanelFooterProps = SettingsSaveBarProps;\n\nexport function SettingsPanelFooter(props: SettingsPanelFooterProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <>\n <p class=\"k2b-settings-panel-footer__status\" role=\"status\" aria-live=\"polite\">\n <Show when={changeCount() > 0} fallback={messages().noUnsavedChanges}>\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </Show>\n </p>\n <SettingsActions {...props} disableWithoutChanges />\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["children","createMemo","createUniqueId","For","Show","IconButton","useUiMessages","Placeholder","SETTINGS_COLLECTION_ACTION","Symbol","SETTINGS_COLLECTION_ITEM","SETTINGS_COLLECTION_ITEM_STATUS","SETTINGS_COLLECTION_ITEM_ACTIONS","definition","kind","props","isDefinition","value","Boolean","collect","match","Array","isArray","flatMap","entry","SettingsCollectionAction","SettingsCollectionItemStatus","SettingsCollectionItemActions","SettingsCollectionItemReorder","messages","_$createComponent","label","moveNamedUp","size","title","moveUp","disabled","index","onClick","onMove","_$getNextElement","_tmpl$","moveNamedDown","moveDown","count","_tmpl$2","SettingsCollectionItem","Status","Actions","Reorder","SettingsCollection","resolved","items","action","headingId","_el$3","_tmpl$5","_el$4","firstChild","_el$5","_el$6","_el$8","nextSibling","_el$9","_co$","_$getNextMarker","_el$0","_el$1","_co$2","_el$11","_el$12","_co$3","_$setAttribute","_$insert","when","description","_el$7","_tmpl$3","slot","_el$13","_tmpl$6","length","fallback","variant","align","empty","nothingHere","_el$10","_tmpl$4","each","item","resolvedItem","status","actions","_el$14","_tmpl$8","_el$21","_el$22","_co$5","_el$16","_el$17","_el$19","_el$20","_co$4","_el$23","_el$24","_co$6","_el$25","_el$26","_co$7","icon","_el$15","_tmpl$7","_el$18","_el$27","_tmpl$9","_el$28","_tmpl$0","_$effect","_$className","class","Action","Item"],"sources":["layout/SettingsCollection.tsx"],"sourcesContent":["import { children, createMemo, createUniqueId, For, type JSX, Show } from \"solid-js\";\nimport { IconButton } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport Placeholder from \"../surfaces/Placeholder\";\n\nconst SETTINGS_COLLECTION_ACTION = Symbol(\"SettingsCollection.Action\");\nconst SETTINGS_COLLECTION_ITEM = Symbol(\"SettingsCollection.Item\");\nconst SETTINGS_COLLECTION_ITEM_STATUS = Symbol(\"SettingsCollection.Item.Status\");\nconst SETTINGS_COLLECTION_ITEM_ACTIONS = Symbol(\"SettingsCollection.Item.Actions\");\n\ntype SlotDefinition<T extends symbol, P> = {\n readonly kind: T;\n readonly props: P;\n};\n\nexport type SettingsCollectionProps = {\n title: JSX.Element;\n description?: JSX.Element;\n empty?: JSX.Element;\n children?: JSX.Element;\n class?: string;\n};\n\nexport type SettingsCollectionActionProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemProps = {\n title: JSX.Element;\n description?: JSX.Element;\n icon?: JSX.Element;\n children?: JSX.Element;\n};\n\nexport type SettingsCollectionItemStatusProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemActionsProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemReorderProps = {\n label: string;\n index: number;\n count: number;\n disabled?: boolean;\n onMove: (direction: -1 | 1) => void;\n};\n\ntype SettingsCollectionActionDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ACTION, SettingsCollectionActionProps>;\ntype SettingsCollectionItemDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM, SettingsCollectionItemProps>;\ntype SettingsCollectionItemStatusDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM_STATUS, SettingsCollectionItemStatusProps>;\ntype SettingsCollectionItemActionsDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM_ACTIONS, SettingsCollectionItemActionsProps>;\n\ntype SettingsCollectionItemComponent = ((props: SettingsCollectionItemProps) => JSX.Element) & {\n Status: (props: SettingsCollectionItemStatusProps) => JSX.Element;\n Actions: (props: SettingsCollectionItemActionsProps) => JSX.Element;\n Reorder: (props: SettingsCollectionItemReorderProps) => JSX.Element;\n};\n\ntype SettingsCollectionComponent = ((props: SettingsCollectionProps) => JSX.Element) & {\n Action: (props: SettingsCollectionActionProps) => JSX.Element;\n Item: SettingsCollectionItemComponent;\n};\n\nconst definition = <T extends symbol, P>(kind: T, props: P): JSX.Element =>\n ({ kind, props }) satisfies SlotDefinition<T, P> as unknown as JSX.Element;\n\nconst isDefinition = <T extends symbol, P>(value: unknown, kind: T): value is SlotDefinition<T, P> =>\n Boolean(value && typeof value === \"object\" && (value as { kind?: unknown }).kind === kind);\n\nconst collect = <T,>(value: unknown, match: (entry: unknown) => entry is T): T[] => {\n if (Array.isArray(value)) return value.flatMap((entry) => collect(entry, match));\n return match(value) ? [value] : [];\n};\n\nconst SettingsCollectionAction = (props: SettingsCollectionActionProps): JSX.Element => definition(SETTINGS_COLLECTION_ACTION, props);\n\nconst SettingsCollectionItemStatus = (props: SettingsCollectionItemStatusProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM_STATUS, props);\n\nconst SettingsCollectionItemActions = (props: SettingsCollectionItemActionsProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM_ACTIONS, props);\n\nconst SettingsCollectionItemReorder = (props: SettingsCollectionItemReorderProps): JSX.Element => {\n const messages = useUiMessages();\n return (\n <>\n <IconButton\n label={messages().moveNamedUp({ label: props.label })}\n size=\"sm\"\n title={messages().moveUp}\n disabled={props.disabled || props.index <= 0}\n onClick={() => props.onMove(-1)}\n >\n <i class=\"ti ti-arrow-up\" aria-hidden=\"true\" />\n </IconButton>\n <IconButton\n label={messages().moveNamedDown({ label: props.label })}\n size=\"sm\"\n title={messages().moveDown}\n disabled={props.disabled || props.index >= props.count - 1}\n onClick={() => props.onMove(1)}\n >\n <i class=\"ti ti-arrow-down\" aria-hidden=\"true\" />\n </IconButton>\n </>\n );\n};\n\nconst SettingsCollectionItem = ((props: SettingsCollectionItemProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM, props)) as SettingsCollectionItemComponent;\n\nSettingsCollectionItem.Status = SettingsCollectionItemStatus;\nSettingsCollectionItem.Actions = SettingsCollectionItemActions;\nSettingsCollectionItem.Reorder = SettingsCollectionItemReorder;\n\nconst SettingsCollection = ((props: SettingsCollectionProps): JSX.Element => {\n const messages = useUiMessages();\n const resolved = children(() => props.children);\n const items = createMemo(() =>\n collect<SettingsCollectionItemDefinition>(resolved(), (entry): entry is SettingsCollectionItemDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ITEM),\n ),\n );\n const action = createMemo(\n () =>\n collect<SettingsCollectionActionDefinition>(resolved(), (entry): entry is SettingsCollectionActionDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ACTION),\n )[0],\n );\n const headingId = `k2b-settings-collection-${createUniqueId()}`;\n\n return (\n <section class={`k2b-settings-collection${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-collection__header\">\n <div class=\"k2b-settings-collection__heading\">\n <h3 id={headingId}>{props.title}</h3>\n <Show when={props.description}>\n <p>{props.description}</p>\n </Show>\n </div>\n <Show when={action()}>{(slot) => <div class=\"k2b-settings-collection__action\">{slot().props.children}</div>}</Show>\n </header>\n <Show\n when={items().length > 0}\n fallback={<Placeholder variant=\"compact\" align=\"left\" description={props.empty ?? messages().nothingHere} />}\n >\n <ul class=\"k2b-settings-collection__list\">\n <For each={items()}>\n {(item) => {\n const resolvedItem = children(() => item.props.children);\n const status = () =>\n collect<SettingsCollectionItemStatusDefinition>(resolvedItem(), (entry): entry is SettingsCollectionItemStatusDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ITEM_STATUS),\n )[0];\n const actions = () =>\n collect<SettingsCollectionItemActionsDefinition>(\n resolvedItem(),\n (entry): entry is SettingsCollectionItemActionsDefinition => isDefinition(entry, SETTINGS_COLLECTION_ITEM_ACTIONS),\n )[0];\n return (\n <li class=\"k2b-settings-collection__item\">\n <Show when={item.props.icon}>\n <span class=\"k2b-settings-collection__item-icon\">{item.props.icon}</span>\n </Show>\n <div class=\"k2b-settings-collection__item-copy\">\n <h4>{item.props.title}</h4>\n <Show when={item.props.description}>\n <p>{item.props.description}</p>\n </Show>\n </div>\n <Show when={status()}>{(slot) => <div class=\"k2b-settings-collection__item-status\">{slot().props.children}</div>}</Show>\n <Show when={actions()}>{(slot) => <div class=\"k2b-settings-collection__item-actions\">{slot().props.children}</div>}</Show>\n </li>\n );\n }}\n </For>\n </ul>\n </Show>\n </section>\n );\n}) as SettingsCollectionComponent;\n\nSettingsCollection.Action = SettingsCollectionAction;\nSettingsCollection.Item = SettingsCollectionItem;\n\nexport default SettingsCollection;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/SettingsCollection.tsx"],"sourcesContent":["import { children, createMemo, createUniqueId, For, type JSX, Show } from \"solid-js\";\nimport { IconButton } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport Placeholder from \"../surfaces/Placeholder\";\n\nconst SETTINGS_COLLECTION_ACTION = Symbol(\"SettingsCollection.Action\");\nconst SETTINGS_COLLECTION_ITEM = Symbol(\"SettingsCollection.Item\");\nconst SETTINGS_COLLECTION_ITEM_STATUS = Symbol(\"SettingsCollection.Item.Status\");\nconst SETTINGS_COLLECTION_ITEM_ACTIONS = Symbol(\"SettingsCollection.Item.Actions\");\n\ntype SlotDefinition<T extends symbol, P> = {\n readonly kind: T;\n readonly props: P;\n};\n\nexport type SettingsCollectionProps = {\n title: JSX.Element;\n description?: JSX.Element;\n empty?: JSX.Element;\n children?: JSX.Element;\n class?: string;\n};\n\nexport type SettingsCollectionActionProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemProps = {\n title: JSX.Element;\n description?: JSX.Element;\n icon?: JSX.Element;\n children?: JSX.Element;\n};\n\nexport type SettingsCollectionItemStatusProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemActionsProps = {\n children: JSX.Element;\n};\n\nexport type SettingsCollectionItemReorderProps = {\n label: string;\n index: number;\n count: number;\n disabled?: boolean;\n onMove: (direction: -1 | 1) => void;\n};\n\ntype SettingsCollectionActionDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ACTION, SettingsCollectionActionProps>;\ntype SettingsCollectionItemDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM, SettingsCollectionItemProps>;\ntype SettingsCollectionItemStatusDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM_STATUS, SettingsCollectionItemStatusProps>;\ntype SettingsCollectionItemActionsDefinition = SlotDefinition<typeof SETTINGS_COLLECTION_ITEM_ACTIONS, SettingsCollectionItemActionsProps>;\n\ntype SettingsCollectionItemComponent = ((props: SettingsCollectionItemProps) => JSX.Element) & {\n Status: (props: SettingsCollectionItemStatusProps) => JSX.Element;\n Actions: (props: SettingsCollectionItemActionsProps) => JSX.Element;\n Reorder: (props: SettingsCollectionItemReorderProps) => JSX.Element;\n};\n\ntype SettingsCollectionComponent = ((props: SettingsCollectionProps) => JSX.Element) & {\n Action: (props: SettingsCollectionActionProps) => JSX.Element;\n Item: SettingsCollectionItemComponent;\n};\n\nconst definition = <T extends symbol, P>(kind: T, props: P): JSX.Element =>\n ({ kind, props }) satisfies SlotDefinition<T, P> as unknown as JSX.Element;\n\nconst isDefinition = <T extends symbol, P>(value: unknown, kind: T): value is SlotDefinition<T, P> =>\n Boolean(value && typeof value === \"object\" && (value as { kind?: unknown }).kind === kind);\n\nconst collect = <T,>(value: unknown, match: (entry: unknown) => entry is T): T[] => {\n if (Array.isArray(value)) return value.flatMap((entry) => collect(entry, match));\n return match(value) ? [value] : [];\n};\n\nconst SettingsCollectionAction = (props: SettingsCollectionActionProps): JSX.Element => definition(SETTINGS_COLLECTION_ACTION, props);\n\nconst SettingsCollectionItemStatus = (props: SettingsCollectionItemStatusProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM_STATUS, props);\n\nconst SettingsCollectionItemActions = (props: SettingsCollectionItemActionsProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM_ACTIONS, props);\n\nconst SettingsCollectionItemReorder = (props: SettingsCollectionItemReorderProps): JSX.Element => {\n const messages = useUiMessages();\n return (\n <>\n <IconButton\n label={messages().moveNamedUp({ label: props.label })}\n size=\"sm\"\n title={messages().moveUp}\n disabled={props.disabled || props.index <= 0}\n onClick={() => props.onMove(-1)}\n >\n <i class=\"ti ti-arrow-up\" aria-hidden=\"true\" />\n </IconButton>\n <IconButton\n label={messages().moveNamedDown({ label: props.label })}\n size=\"sm\"\n title={messages().moveDown}\n disabled={props.disabled || props.index >= props.count - 1}\n onClick={() => props.onMove(1)}\n >\n <i class=\"ti ti-arrow-down\" aria-hidden=\"true\" />\n </IconButton>\n </>\n );\n};\n\nconst SettingsCollectionItem = ((props: SettingsCollectionItemProps): JSX.Element =>\n definition(SETTINGS_COLLECTION_ITEM, props)) as SettingsCollectionItemComponent;\n\nSettingsCollectionItem.Status = SettingsCollectionItemStatus;\nSettingsCollectionItem.Actions = SettingsCollectionItemActions;\nSettingsCollectionItem.Reorder = SettingsCollectionItemReorder;\n\nconst SettingsCollection = ((props: SettingsCollectionProps): JSX.Element => {\n const messages = useUiMessages();\n const resolved = children(() => props.children);\n const items = createMemo(() =>\n collect<SettingsCollectionItemDefinition>(resolved(), (entry): entry is SettingsCollectionItemDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ITEM),\n ),\n );\n const action = createMemo(\n () =>\n collect<SettingsCollectionActionDefinition>(resolved(), (entry): entry is SettingsCollectionActionDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ACTION),\n )[0],\n );\n const headingId = `k2b-settings-collection-${createUniqueId()}`;\n\n return (\n <section class={`k2b-settings-collection${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-collection__header\">\n <div class=\"k2b-settings-collection__heading\">\n <h3 id={headingId}>{props.title}</h3>\n <Show when={props.description}>\n <p>{props.description}</p>\n </Show>\n </div>\n <Show when={action()}>{(slot) => <div class=\"k2b-settings-collection__action\">{slot().props.children}</div>}</Show>\n </header>\n <Show\n when={items().length > 0}\n fallback={<Placeholder variant=\"compact\" align=\"left\" description={props.empty ?? messages().nothingHere} />}\n >\n <ul class=\"k2b-settings-collection__list\">\n <For each={items()}>\n {(item) => {\n const resolvedItem = children(() => item.props.children);\n const status = () =>\n collect<SettingsCollectionItemStatusDefinition>(resolvedItem(), (entry): entry is SettingsCollectionItemStatusDefinition =>\n isDefinition(entry, SETTINGS_COLLECTION_ITEM_STATUS),\n )[0];\n const actions = () =>\n collect<SettingsCollectionItemActionsDefinition>(\n resolvedItem(),\n (entry): entry is SettingsCollectionItemActionsDefinition => isDefinition(entry, SETTINGS_COLLECTION_ITEM_ACTIONS),\n )[0];\n return (\n <li class=\"k2b-settings-collection__item\">\n <Show when={item.props.icon}>\n <span class=\"k2b-settings-collection__item-icon\">{item.props.icon}</span>\n </Show>\n <div class=\"k2b-settings-collection__item-copy\">\n <h4>{item.props.title}</h4>\n <Show when={item.props.description}>\n <p>{item.props.description}</p>\n </Show>\n </div>\n <Show when={status()}>{(slot) => <div class=\"k2b-settings-collection__item-status\">{slot().props.children}</div>}</Show>\n <Show when={actions()}>{(slot) => <div class=\"k2b-settings-collection__item-actions\">{slot().props.children}</div>}</Show>\n </li>\n );\n }}\n </For>\n </ul>\n </Show>\n </section>\n );\n}) as SettingsCollectionComponent;\n\nSettingsCollection.Action = SettingsCollectionAction;\nSettingsCollection.Item = SettingsCollectionItem;\n\nexport default SettingsCollection;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["children","createMemo","createSignal","createUniqueId","For","Show","useUiMessages","assertUniqueStableUiIds","SETTINGS_MODAL_TAB","Symbol","SETTINGS_MODAL_GROUP","SETTINGS_MODAL_FOOTER","isTabDefinition","value","kind","isGroupDefinition","isFooterDefinition","collectTabs","Array","isArray","flatMap","props","collectRailEntries","splitPanelChildren","reduce","result","entry","next","content","push","footer","SettingsModalTab","SettingsModalGroup","SettingsModalFooter","SettingsModal","messages","resolved","railEntries","tabs","collected","map","tab","id","instanceId","tabRefs","Map","firstTabId","localActiveTab","setLocalActiveTab","defaultTab","requestedActiveTabId","activeTab","resolvedActiveTabId","some","find","resolvedPanelChildren","panelChildren","selectTab","undefined","onTabChange","moveTabFocus","event","currentId","currentIndex","findIndex","length","nextIndex","key","preventDefault","nextTab","get","focus","tabId","panelId","TabButton","active","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","$$keydown","$$click","_$use","element","set","_$insert","_$createComponent","when","icon","_el$5","_tmpl$2","_$effect","_$className","title","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_v$7","tone","e","_$setAttribute","t","a","o","i","n","s","_$runHydrationEvents","_el$6","_tmpl$4","_el$13","_el$14","_co$4","_el$8","_el$9","_el$0","_el$1","_el$10","_co$2","_el$11","_el$12","_co$3","onClose","_el$7","_tmpl$3","_$addEventListener","closeLabel","close","each","_el$15","_tmpl$5","_el$16","_el$17","_el$18","_co$5","_el$19","_tmpl$6","_el$20","_el$21","_el$22","_el$23","_el$24","_co$6","_el$25","_el$26","_co$7","description","_el$27","_tmpl$7","_v$1","_v$10","_v$11","_el$28","_tmpl$8","_v$8","class","_v$9","_v$0","sectionsLabel","Tab","Group","Footer","_$delegateEvents"],"sources":["layout/SettingsModal.tsx"],"sourcesContent":["import { children, createMemo, createSignal, createUniqueId, For, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { assertUniqueStableUiIds } from \"./stable-id\";\n\nconst SETTINGS_MODAL_TAB = Symbol(\"SettingsModal.Tab\");\nconst SETTINGS_MODAL_GROUP = Symbol(\"SettingsModal.Group\");\nconst SETTINGS_MODAL_FOOTER = Symbol(\"SettingsModal.Footer\");\n\nexport type SettingsModalTabTone = \"default\" | \"danger\";\n\nexport type SettingsModalTabProps = {\n id: string;\n title: string;\n description?: string;\n icon?: string;\n tone?: SettingsModalTabTone;\n children: JSX.Element;\n};\n\nexport type SettingsModalGroupProps = {\n title: string;\n children: JSX.Element;\n};\n\nexport type SettingsModalFooterProps = {\n children: JSX.Element;\n};\n\ntype SettingsModalTabDefinition = {\n readonly kind: typeof SETTINGS_MODAL_TAB;\n readonly props: SettingsModalTabProps;\n};\n\ntype SettingsModalGroupDefinition = {\n readonly kind: typeof SETTINGS_MODAL_GROUP;\n readonly props: SettingsModalGroupProps;\n};\n\ntype SettingsModalFooterDefinition = {\n readonly kind: typeof SETTINGS_MODAL_FOOTER;\n readonly props: SettingsModalFooterProps;\n};\n\nexport type SettingsModalProps = {\n /** Accessible name for the settings surface. */\n title: string;\n /** @deprecated Retained for source compatibility; tab descriptions carry the visible context. */\n subtitle?: string;\n /** @deprecated Retained for source compatibility; tab icons identify the rail entries. */\n icon?: string;\n defaultTab?: string;\n activeTab?: string;\n onTabChange?: (id: string) => void;\n onClose?: () => void;\n closeLabel?: string;\n class?: string;\n children: JSX.Element;\n};\n\ntype SettingsModalComponent = ((props: SettingsModalProps) => JSX.Element) & {\n Tab: (props: SettingsModalTabProps) => JSX.Element;\n Group: (props: SettingsModalGroupProps) => JSX.Element;\n Footer: (props: SettingsModalFooterProps) => JSX.Element;\n};\n\nconst isTabDefinition = (value: unknown): value is SettingsModalTabDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_TAB;\n\nconst isGroupDefinition = (value: unknown): value is SettingsModalGroupDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_GROUP;\n\nconst isFooterDefinition = (value: unknown): value is SettingsModalFooterDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_FOOTER;\n\nconst collectTabs = (value: unknown): SettingsModalTabDefinition[] => {\n if (Array.isArray(value)) return value.flatMap(collectTabs);\n if (isGroupDefinition(value)) return collectTabs(value.props.children);\n return isTabDefinition(value) ? [value] : [];\n};\n\nconst collectRailEntries = (value: unknown): (SettingsModalGroupDefinition | SettingsModalTabDefinition)[] => {\n if (Array.isArray(value)) return value.flatMap(collectRailEntries);\n if (isGroupDefinition(value) || isTabDefinition(value)) return [value];\n return [];\n};\n\nconst splitPanelChildren = (value: unknown): { content: JSX.Element[]; footer?: SettingsModalFooterDefinition } => {\n if (Array.isArray(value)) {\n return value.reduce<{ content: JSX.Element[]; footer?: SettingsModalFooterDefinition }>(\n (result, entry) => {\n const next = splitPanelChildren(entry);\n result.content.push(...next.content);\n if (next.footer) result.footer = next.footer;\n return result;\n },\n { content: [] },\n );\n }\n return isFooterDefinition(value) ? { content: [], footer: value } : { content: [value as JSX.Element] };\n};\n\nfunction SettingsModalTab(props: SettingsModalTabProps): JSX.Element {\n return { kind: SETTINGS_MODAL_TAB, props } satisfies SettingsModalTabDefinition as unknown as JSX.Element;\n}\n\nfunction SettingsModalGroup(props: SettingsModalGroupProps): JSX.Element {\n return { kind: SETTINGS_MODAL_GROUP, props } satisfies SettingsModalGroupDefinition as unknown as JSX.Element;\n}\n\nfunction SettingsModalFooter(props: SettingsModalFooterProps): JSX.Element {\n return { kind: SETTINGS_MODAL_FOOTER, props } satisfies SettingsModalFooterDefinition as unknown as JSX.Element;\n}\n\nconst SettingsModal = ((props: SettingsModalProps): JSX.Element => {\n const messages = useUiMessages();\n const resolved = children(() => props.children);\n const railEntries = createMemo(() => collectRailEntries(resolved()));\n const tabs = createMemo(() => {\n const collected = collectTabs(resolved());\n assertUniqueStableUiIds(\n collected.map((tab) => tab.props.id),\n \"SettingsModal.Tab id\",\n );\n return collected;\n });\n const instanceId = `k2b-settings-${createUniqueId()}`;\n const tabRefs = new Map<string, HTMLButtonElement>();\n const firstTabId = () => tabs()[0]?.props.id ?? \"\";\n const [localActiveTab, setLocalActiveTab] = createSignal(props.defaultTab ?? firstTabId());\n const requestedActiveTabId = () => props.activeTab ?? (localActiveTab() || firstTabId());\n const resolvedActiveTabId = () => (tabs().some((tab) => tab.props.id === requestedActiveTabId()) ? requestedActiveTabId() : firstTabId());\n const activeTab = () => tabs().find((tab) => tab.props.id === resolvedActiveTabId()) ?? null;\n const resolvedPanelChildren = children(() => activeTab()?.props.children);\n const panelChildren = createMemo(() => splitPanelChildren(resolvedPanelChildren()));\n\n const selectTab = (id: string) => {\n if (props.activeTab === undefined) setLocalActiveTab(id);\n props.onTabChange?.(id);\n };\n\n const moveTabFocus = (event: KeyboardEvent, currentId: string) => {\n const currentIndex = tabs().findIndex((tab) => tab.props.id === currentId);\n if (currentIndex < 0 || tabs().length === 0) return;\n let nextIndex: number | null = null;\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") nextIndex = (currentIndex + 1) % tabs().length;\n if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") nextIndex = (currentIndex - 1 + tabs().length) % tabs().length;\n if (event.key === \"Home\") nextIndex = 0;\n if (event.key === \"End\") nextIndex = tabs().length - 1;\n if (nextIndex === null) return;\n event.preventDefault();\n const nextTab = tabs()[nextIndex];\n if (!nextTab) return;\n selectTab(nextTab.props.id);\n tabRefs.get(nextTab.props.id)?.focus();\n };\n\n const tabId = (id: string) => `${instanceId}-tab-${id}`;\n const panelId = (id: string) => `${instanceId}-panel-${id}`;\n\n const TabButton = (tab: SettingsModalTabDefinition): JSX.Element => {\n const active = () => resolvedActiveTabId() === tab.props.id;\n return (\n <button\n ref={(element) => tabRefs.set(tab.props.id, element)}\n id={tabId(tab.props.id)}\n type=\"button\"\n role=\"tab\"\n aria-selected={active()}\n aria-controls={active() ? panelId(tab.props.id) : undefined}\n tabIndex={active() ? 0 : -1}\n data-state={active() ? \"active\" : \"idle\"}\n data-active={active() ? \"true\" : undefined}\n data-tone={tab.props.tone ?? \"default\"}\n onClick={() => selectTab(tab.props.id)}\n onKeyDown={(event) => moveTabFocus(event, tab.props.id)}\n >\n <Show when={tab.props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{tab.props.title}</span>\n </button>\n );\n };\n\n return (\n <div class={`k2b-settings ${props.class ?? \"\"}`} role=\"region\" aria-label={props.title}>\n <Show when={props.onClose}>\n <button\n type=\"button\"\n class=\"k2b-settings__close k2b-icon-button\"\n aria-label={props.closeLabel ?? messages().close}\n onClick={props.onClose}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <aside class=\"k2b-settings__rail\">\n <nav class=\"k2b-settings__tabs\" aria-label={messages().sectionsLabel({ title: props.title })} role=\"tablist\">\n <For each={railEntries()}>\n {(entry) =>\n isGroupDefinition(entry) ? (\n <div class=\"k2b-settings__tab-group\" role=\"presentation\">\n <span class=\"k2b-settings__tab-group-label\" aria-hidden=\"true\">\n {entry.props.title}\n </span>\n <For each={collectTabs(entry.props.children)}>{(tab) => TabButton(tab)}</For>\n </div>\n ) : (\n TabButton(entry)\n )\n }\n </For>\n </nav>\n </aside>\n <div class=\"k2b-settings__content\">\n <Show when={activeTab()}>\n {(tab) => (\n <section\n id={panelId(tab().props.id)}\n class=\"k2b-settings__body\"\n role=\"tabpanel\"\n aria-labelledby={tabId(tab().props.id)}\n tabIndex={0}\n data-tone={tab().props.tone ?? \"default\"}\n >\n <div class=\"k2b-settings__section\">\n <div class=\"k2b-settings__section-heading\">\n <h2>{tab().props.title}</h2>\n <Show when={tab().props.description}>{(description) => <p>{description()}</p>}</Show>\n </div>\n {panelChildren().content}\n </div>\n </section>\n )}\n </Show>\n <Show when={panelChildren().footer}>{(footer) => <footer class=\"k2b-settings__footer\">{footer().props.children}</footer>}</Show>\n </div>\n </div>\n );\n}) as SettingsModalComponent;\n\nSettingsModal.Tab = SettingsModalTab;\nSettingsModal.Group = SettingsModalGroup;\nSettingsModal.Footer = SettingsModalFooter;\n\nexport default SettingsModal;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/SettingsModal.tsx"],"sourcesContent":["import { children, createMemo, createSignal, createUniqueId, For, type JSX, Show } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { assertUniqueStableUiIds } from \"./stable-id\";\n\nconst SETTINGS_MODAL_TAB = Symbol(\"SettingsModal.Tab\");\nconst SETTINGS_MODAL_GROUP = Symbol(\"SettingsModal.Group\");\nconst SETTINGS_MODAL_FOOTER = Symbol(\"SettingsModal.Footer\");\n\nexport type SettingsModalTabTone = \"default\" | \"danger\";\n\nexport type SettingsModalTabProps = {\n id: string;\n title: string;\n description?: string;\n icon?: string;\n tone?: SettingsModalTabTone;\n children: JSX.Element;\n};\n\nexport type SettingsModalGroupProps = {\n title: string;\n children: JSX.Element;\n};\n\nexport type SettingsModalFooterProps = {\n children: JSX.Element;\n};\n\ntype SettingsModalTabDefinition = {\n readonly kind: typeof SETTINGS_MODAL_TAB;\n readonly props: SettingsModalTabProps;\n};\n\ntype SettingsModalGroupDefinition = {\n readonly kind: typeof SETTINGS_MODAL_GROUP;\n readonly props: SettingsModalGroupProps;\n};\n\ntype SettingsModalFooterDefinition = {\n readonly kind: typeof SETTINGS_MODAL_FOOTER;\n readonly props: SettingsModalFooterProps;\n};\n\nexport type SettingsModalProps = {\n /** Accessible name for the settings surface. */\n title: string;\n /** @deprecated Retained for source compatibility; tab descriptions carry the visible context. */\n subtitle?: string;\n /** @deprecated Retained for source compatibility; tab icons identify the rail entries. */\n icon?: string;\n defaultTab?: string;\n activeTab?: string;\n onTabChange?: (id: string) => void;\n onClose?: () => void;\n closeLabel?: string;\n class?: string;\n children: JSX.Element;\n};\n\ntype SettingsModalComponent = ((props: SettingsModalProps) => JSX.Element) & {\n Tab: (props: SettingsModalTabProps) => JSX.Element;\n Group: (props: SettingsModalGroupProps) => JSX.Element;\n Footer: (props: SettingsModalFooterProps) => JSX.Element;\n};\n\nconst isTabDefinition = (value: unknown): value is SettingsModalTabDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_TAB;\n\nconst isGroupDefinition = (value: unknown): value is SettingsModalGroupDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_GROUP;\n\nconst isFooterDefinition = (value: unknown): value is SettingsModalFooterDefinition =>\n !!value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_MODAL_FOOTER;\n\nconst collectTabs = (value: unknown): SettingsModalTabDefinition[] => {\n if (Array.isArray(value)) return value.flatMap(collectTabs);\n if (isGroupDefinition(value)) return collectTabs(value.props.children);\n return isTabDefinition(value) ? [value] : [];\n};\n\nconst collectRailEntries = (value: unknown): (SettingsModalGroupDefinition | SettingsModalTabDefinition)[] => {\n if (Array.isArray(value)) return value.flatMap(collectRailEntries);\n if (isGroupDefinition(value) || isTabDefinition(value)) return [value];\n return [];\n};\n\nconst splitPanelChildren = (value: unknown): { content: JSX.Element[]; footer?: SettingsModalFooterDefinition } => {\n if (Array.isArray(value)) {\n return value.reduce<{ content: JSX.Element[]; footer?: SettingsModalFooterDefinition }>(\n (result, entry) => {\n const next = splitPanelChildren(entry);\n result.content.push(...next.content);\n if (next.footer) result.footer = next.footer;\n return result;\n },\n { content: [] },\n );\n }\n return isFooterDefinition(value) ? { content: [], footer: value } : { content: [value as JSX.Element] };\n};\n\nfunction SettingsModalTab(props: SettingsModalTabProps): JSX.Element {\n return { kind: SETTINGS_MODAL_TAB, props } satisfies SettingsModalTabDefinition as unknown as JSX.Element;\n}\n\nfunction SettingsModalGroup(props: SettingsModalGroupProps): JSX.Element {\n return { kind: SETTINGS_MODAL_GROUP, props } satisfies SettingsModalGroupDefinition as unknown as JSX.Element;\n}\n\nfunction SettingsModalFooter(props: SettingsModalFooterProps): JSX.Element {\n return { kind: SETTINGS_MODAL_FOOTER, props } satisfies SettingsModalFooterDefinition as unknown as JSX.Element;\n}\n\nconst SettingsModal = ((props: SettingsModalProps): JSX.Element => {\n const messages = useUiMessages();\n const resolved = children(() => props.children);\n const railEntries = createMemo(() => collectRailEntries(resolved()));\n const tabs = createMemo(() => {\n const collected = collectTabs(resolved());\n assertUniqueStableUiIds(\n collected.map((tab) => tab.props.id),\n \"SettingsModal.Tab id\",\n );\n return collected;\n });\n const instanceId = `k2b-settings-${createUniqueId()}`;\n const tabRefs = new Map<string, HTMLButtonElement>();\n const firstTabId = () => tabs()[0]?.props.id ?? \"\";\n const [localActiveTab, setLocalActiveTab] = createSignal(props.defaultTab ?? firstTabId());\n const requestedActiveTabId = () => props.activeTab ?? (localActiveTab() || firstTabId());\n const resolvedActiveTabId = () => (tabs().some((tab) => tab.props.id === requestedActiveTabId()) ? requestedActiveTabId() : firstTabId());\n const activeTab = () => tabs().find((tab) => tab.props.id === resolvedActiveTabId()) ?? null;\n const resolvedPanelChildren = children(() => activeTab()?.props.children);\n const panelChildren = createMemo(() => splitPanelChildren(resolvedPanelChildren()));\n\n const selectTab = (id: string) => {\n if (props.activeTab === undefined) setLocalActiveTab(id);\n props.onTabChange?.(id);\n };\n\n const moveTabFocus = (event: KeyboardEvent, currentId: string) => {\n const currentIndex = tabs().findIndex((tab) => tab.props.id === currentId);\n if (currentIndex < 0 || tabs().length === 0) return;\n let nextIndex: number | null = null;\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") nextIndex = (currentIndex + 1) % tabs().length;\n if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") nextIndex = (currentIndex - 1 + tabs().length) % tabs().length;\n if (event.key === \"Home\") nextIndex = 0;\n if (event.key === \"End\") nextIndex = tabs().length - 1;\n if (nextIndex === null) return;\n event.preventDefault();\n const nextTab = tabs()[nextIndex];\n if (!nextTab) return;\n selectTab(nextTab.props.id);\n tabRefs.get(nextTab.props.id)?.focus();\n };\n\n const tabId = (id: string) => `${instanceId}-tab-${id}`;\n const panelId = (id: string) => `${instanceId}-panel-${id}`;\n\n const TabButton = (tab: SettingsModalTabDefinition): JSX.Element => {\n const active = () => resolvedActiveTabId() === tab.props.id;\n return (\n <button\n ref={(element) => tabRefs.set(tab.props.id, element)}\n id={tabId(tab.props.id)}\n type=\"button\"\n role=\"tab\"\n aria-selected={active()}\n aria-controls={active() ? panelId(tab.props.id) : undefined}\n tabIndex={active() ? 0 : -1}\n data-state={active() ? \"active\" : \"idle\"}\n data-active={active() ? \"true\" : undefined}\n data-tone={tab.props.tone ?? \"default\"}\n onClick={() => selectTab(tab.props.id)}\n onKeyDown={(event) => moveTabFocus(event, tab.props.id)}\n >\n <Show when={tab.props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{tab.props.title}</span>\n </button>\n );\n };\n\n return (\n <div class={`k2b-settings ${props.class ?? \"\"}`} role=\"region\" aria-label={props.title}>\n <Show when={props.onClose}>\n <button\n type=\"button\"\n class=\"k2b-settings__close k2b-icon-button\"\n aria-label={props.closeLabel ?? messages().close}\n onClick={props.onClose}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <aside class=\"k2b-settings__rail\">\n <nav class=\"k2b-settings__tabs\" aria-label={messages().sectionsLabel({ title: props.title })} role=\"tablist\">\n <For each={railEntries()}>\n {(entry) =>\n isGroupDefinition(entry) ? (\n <div class=\"k2b-settings__tab-group\" role=\"presentation\">\n <span class=\"k2b-settings__tab-group-label\" aria-hidden=\"true\">\n {entry.props.title}\n </span>\n <For each={collectTabs(entry.props.children)}>{(tab) => TabButton(tab)}</For>\n </div>\n ) : (\n TabButton(entry)\n )\n }\n </For>\n </nav>\n </aside>\n <div class=\"k2b-settings__content\">\n <Show when={activeTab()}>\n {(tab) => (\n <section\n id={panelId(tab().props.id)}\n class=\"k2b-settings__body\"\n role=\"tabpanel\"\n aria-labelledby={tabId(tab().props.id)}\n tabIndex={0}\n data-tone={tab().props.tone ?? \"default\"}\n >\n <div class=\"k2b-settings__section\">\n <div class=\"k2b-settings__section-heading\">\n <h2>{tab().props.title}</h2>\n <Show when={tab().props.description}>{(description) => <p>{description()}</p>}</Show>\n </div>\n {panelChildren().content}\n </div>\n </section>\n )}\n </Show>\n <Show when={panelChildren().footer}>{(footer) => <footer class=\"k2b-settings__footer\">{footer().props.children}</footer>}</Show>\n </div>\n </div>\n );\n}) as SettingsModalComponent;\n\nSettingsModal.Tab = SettingsModalTab;\nSettingsModal.Group = SettingsModalGroup;\nSettingsModal.Footer = SettingsModalFooter;\n\nexport default SettingsModal;\n"],"mappings":"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","ignoreList":[]}