@k2b/ui 0.27.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/README.md +1 -1
  2. package/dist/base.css +147 -2
  3. package/dist/browser/actions/ContextMenu.js +35 -4
  4. package/dist/browser/actions/ContextMenu.js.map +1 -1
  5. package/dist/browser/actions/DragAndDrop.js +89 -0
  6. package/dist/browser/actions/DragAndDrop.js.map +1 -0
  7. package/dist/browser/actions/Dropdown.js +184 -158
  8. package/dist/browser/actions/Dropdown.js.map +1 -1
  9. package/dist/browser/actions/GestureMenu.js +95 -139
  10. package/dist/browser/actions/GestureMenu.js.map +1 -1
  11. package/dist/browser/actions/Toolbar.js +379 -48
  12. package/dist/browser/actions/Toolbar.js.map +1 -1
  13. package/dist/browser/actions/drag-and-drop-messages.js +75 -0
  14. package/dist/browser/actions/drag-and-drop-messages.js.map +1 -0
  15. package/dist/browser/actions/drag-and-drop.js +692 -0
  16. package/dist/browser/actions/drag-and-drop.js.map +1 -0
  17. package/dist/browser/actions/index.js +1 -0
  18. package/dist/browser/actions/index.js.map +1 -1
  19. package/dist/browser/actions/menu-rows.js +15 -0
  20. package/dist/browser/actions/menu-rows.js.map +1 -0
  21. package/dist/browser/actions/menu-sheet.js +154 -0
  22. package/dist/browser/actions/menu-sheet.js.map +1 -0
  23. package/dist/browser/actions/toolbar-messages.js +20 -0
  24. package/dist/browser/actions/toolbar-messages.js.map +1 -0
  25. package/dist/browser/chart-inspection.js +3 -0
  26. package/dist/browser/chart-inspection.js.map +1 -0
  27. package/dist/browser/chat/ChatComposer.js +714 -410
  28. package/dist/browser/chat/ChatComposer.js.map +1 -1
  29. package/dist/browser/chat/ChatDecision.js +778 -0
  30. package/dist/browser/chat/ChatDecision.js.map +1 -0
  31. package/dist/browser/chat/ChatPrimitives.js +34 -28
  32. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  33. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  34. package/dist/browser/chat/chat-messages.js +25 -1
  35. package/dist/browser/chat/chat-messages.js.map +1 -1
  36. package/dist/browser/chat/command-search.js +13 -3
  37. package/dist/browser/chat/command-search.js.map +1 -1
  38. package/dist/browser/chat/index.js +8 -1
  39. package/dist/browser/chat/index.js.map +1 -1
  40. package/dist/browser/chat/reaction-people.js +15 -0
  41. package/dist/browser/chat/reaction-people.js.map +1 -0
  42. package/dist/browser/chat/types.js.map +1 -1
  43. package/dist/browser/content/Calendar.js +3 -3
  44. package/dist/browser/content/Calendar.js.map +1 -1
  45. package/dist/browser/content/Chart.js +60 -86
  46. package/dist/browser/content/Chart.js.map +1 -1
  47. package/dist/browser/content/ChartSnapshotView.js +7 -10
  48. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  49. package/dist/browser/content/FileBrowser.js +2 -2
  50. package/dist/browser/content/FileBrowser.js.map +1 -1
  51. package/dist/browser/content/FileTree.js +42 -36
  52. package/dist/browser/content/FileTree.js.map +1 -1
  53. package/dist/browser/content/FileTypeIcon.js +72 -0
  54. package/dist/browser/content/FileTypeIcon.js.map +1 -0
  55. package/dist/browser/content/FileView.js +2 -2
  56. package/dist/browser/content/FileView.js.map +1 -1
  57. package/dist/browser/content/MessageRow.js +330 -448
  58. package/dist/browser/content/MessageRow.js.map +1 -1
  59. package/dist/browser/content/ReactionBar.js +419 -0
  60. package/dist/browser/content/ReactionBar.js.map +1 -0
  61. package/dist/browser/content/ReferenceChip.js +162 -0
  62. package/dist/browser/content/ReferenceChip.js.map +1 -0
  63. package/dist/browser/content/calendar-pointer.js +9 -0
  64. package/dist/browser/content/calendar-pointer.js.map +1 -1
  65. package/dist/browser/content/calendar-time-view.js +6 -3
  66. package/dist/browser/content/calendar-time-view.js.map +1 -1
  67. package/dist/browser/content/chart-inspection-core.js +557 -0
  68. package/dist/browser/content/chart-inspection-core.js.map +1 -0
  69. package/dist/browser/content/chart-inspection.js +10 -445
  70. package/dist/browser/content/chart-inspection.js.map +1 -1
  71. package/dist/browser/content/chart-line-gaps.js +1 -1
  72. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  73. package/dist/browser/content/chart-snapshot.js +1 -1
  74. package/dist/browser/content/chart-snapshot.js.map +1 -1
  75. package/dist/browser/content/index.js +3 -0
  76. package/dist/browser/content/index.js.map +1 -1
  77. package/dist/browser/feedback/dialog-core.js +135 -23
  78. package/dist/browser/feedback/dialog-core.js.map +1 -1
  79. package/dist/browser/index.js +1 -0
  80. package/dist/browser/index.js.map +1 -1
  81. package/dist/browser/input-mode.js +40 -0
  82. package/dist/browser/input-mode.js.map +1 -0
  83. package/dist/browser/inputs/FileDropTarget.js +24 -9
  84. package/dist/browser/inputs/FileDropTarget.js.map +1 -1
  85. package/dist/browser/inputs/FileInputs.js +2 -2
  86. package/dist/browser/inputs/FileInputs.js.map +1 -1
  87. package/dist/browser/inputs/SelectChip.js +9 -0
  88. package/dist/browser/inputs/SelectChip.js.map +1 -1
  89. package/dist/browser/inputs/emoji/EmojiPicker.js +13 -0
  90. package/dist/browser/inputs/emoji/EmojiPicker.js.map +1 -1
  91. package/dist/browser/inputs/file-drop.js.map +1 -1
  92. package/dist/browser/layout/AppOverview.js +1 -1
  93. package/dist/browser/layout/AppOverview.js.map +1 -1
  94. package/dist/browser/layout/AppWorkspace.js +644 -445
  95. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  96. package/dist/browser/layout/DetailPanel.js +283 -197
  97. package/dist/browser/layout/DetailPanel.js.map +1 -1
  98. package/dist/browser/layout/Discussion.js +233 -185
  99. package/dist/browser/layout/Discussion.js.map +1 -1
  100. package/dist/browser/layout/PanelDialog.js +88 -86
  101. package/dist/browser/layout/PanelDialog.js.map +1 -1
  102. package/dist/browser/layout/ResizeSeparator.js +81 -0
  103. package/dist/browser/layout/ResizeSeparator.js.map +1 -0
  104. package/dist/browser/layout/SidebarSwitcher.js +9 -2
  105. package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
  106. package/dist/browser/layout/TabBar.js +15 -12
  107. package/dist/browser/layout/TabBar.js.map +1 -1
  108. package/dist/browser/layout/TableOfContents.js +10 -2
  109. package/dist/browser/layout/TableOfContents.js.map +1 -1
  110. package/dist/browser/layout/app-workspace-controller.js +130 -17
  111. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  112. package/dist/browser/layout/detail-panel-messages.js +35 -0
  113. package/dist/browser/layout/detail-panel-messages.js.map +1 -0
  114. package/dist/browser/layout/index.js +3 -1
  115. package/dist/browser/layout/index.js.map +1 -1
  116. package/dist/browser/layout/resize-separator.js +90 -0
  117. package/dist/browser/layout/resize-separator.js.map +1 -0
  118. package/dist/browser/layout/workspace-messages.js +12 -2
  119. package/dist/browser/layout/workspace-messages.js.map +1 -1
  120. package/dist/browser/surfaces/Avatar.js +50 -20
  121. package/dist/browser/surfaces/Avatar.js.map +1 -1
  122. package/dist/browser/surfaces/AvatarStack.js +406 -0
  123. package/dist/browser/surfaces/AvatarStack.js.map +1 -0
  124. package/dist/browser/surfaces/LinkCard.js +1 -1
  125. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  126. package/dist/browser/surfaces/Placeholder.js +14 -3
  127. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  128. package/dist/browser/surfaces/StatCell.js +23 -0
  129. package/dist/browser/surfaces/StatCell.js.map +1 -1
  130. package/dist/browser/surfaces/avatar-messages.js +8 -2
  131. package/dist/browser/surfaces/avatar-messages.js.map +1 -1
  132. package/dist/browser/surfaces/index.js +1 -0
  133. package/dist/browser/surfaces/index.js.map +1 -1
  134. package/dist/browser/widgets/Widget.js +1 -1
  135. package/dist/browser/widgets/Widget.js.map +1 -1
  136. package/dist/ssr/actions/ContextMenu.js +26 -3
  137. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  138. package/dist/ssr/actions/DragAndDrop.js +63 -0
  139. package/dist/ssr/actions/DragAndDrop.js.map +1 -0
  140. package/dist/ssr/actions/Dropdown.js +140 -72
  141. package/dist/ssr/actions/Dropdown.js.map +1 -1
  142. package/dist/ssr/actions/GestureMenu.js +76 -107
  143. package/dist/ssr/actions/GestureMenu.js.map +1 -1
  144. package/dist/ssr/actions/Toolbar.js +294 -14
  145. package/dist/ssr/actions/Toolbar.js.map +1 -1
  146. package/dist/ssr/actions/drag-and-drop-messages.js +75 -0
  147. package/dist/ssr/actions/drag-and-drop-messages.js.map +1 -0
  148. package/dist/ssr/actions/drag-and-drop.js +692 -0
  149. package/dist/ssr/actions/drag-and-drop.js.map +1 -0
  150. package/dist/ssr/actions/index.js +1 -0
  151. package/dist/ssr/actions/index.js.map +1 -1
  152. package/dist/ssr/actions/menu-rows.js +15 -0
  153. package/dist/ssr/actions/menu-rows.js.map +1 -0
  154. package/dist/ssr/actions/menu-sheet.js +138 -0
  155. package/dist/ssr/actions/menu-sheet.js.map +1 -0
  156. package/dist/ssr/actions/toolbar-messages.js +20 -0
  157. package/dist/ssr/actions/toolbar-messages.js.map +1 -0
  158. package/dist/ssr/chart-inspection.js +3 -0
  159. package/dist/ssr/chart-inspection.js.map +1 -0
  160. package/dist/ssr/chat/ChatComposer.js +393 -102
  161. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  162. package/dist/ssr/chat/ChatDecision.js +465 -0
  163. package/dist/ssr/chat/ChatDecision.js.map +1 -0
  164. package/dist/ssr/chat/ChatPrimitives.js +2 -2
  165. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  166. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  167. package/dist/ssr/chat/chat-messages.js +25 -1
  168. package/dist/ssr/chat/chat-messages.js.map +1 -1
  169. package/dist/ssr/chat/command-search.js +13 -3
  170. package/dist/ssr/chat/command-search.js.map +1 -1
  171. package/dist/ssr/chat/index.js +8 -1
  172. package/dist/ssr/chat/index.js.map +1 -1
  173. package/dist/ssr/chat/reaction-people.js +15 -0
  174. package/dist/ssr/chat/reaction-people.js.map +1 -0
  175. package/dist/ssr/chat/types.js.map +1 -1
  176. package/dist/ssr/content/Calendar.js +3 -3
  177. package/dist/ssr/content/Calendar.js.map +1 -1
  178. package/dist/ssr/content/Chart.js +25 -38
  179. package/dist/ssr/content/Chart.js.map +1 -1
  180. package/dist/ssr/content/ChartSnapshotView.js +7 -10
  181. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  182. package/dist/ssr/content/FileBrowser.js +2 -2
  183. package/dist/ssr/content/FileBrowser.js.map +1 -1
  184. package/dist/ssr/content/FileTree.js +21 -14
  185. package/dist/ssr/content/FileTree.js.map +1 -1
  186. package/dist/ssr/content/FileTypeIcon.js +50 -0
  187. package/dist/ssr/content/FileTypeIcon.js.map +1 -0
  188. package/dist/ssr/content/FileView.js +2 -2
  189. package/dist/ssr/content/FileView.js.map +1 -1
  190. package/dist/ssr/content/MessageRow.js +98 -152
  191. package/dist/ssr/content/MessageRow.js.map +1 -1
  192. package/dist/ssr/content/ReactionBar.js +304 -0
  193. package/dist/ssr/content/ReactionBar.js.map +1 -0
  194. package/dist/ssr/content/ReferenceChip.js +121 -0
  195. package/dist/ssr/content/ReferenceChip.js.map +1 -0
  196. package/dist/ssr/content/calendar-pointer.js +9 -0
  197. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  198. package/dist/ssr/content/calendar-time-view.js +6 -3
  199. package/dist/ssr/content/calendar-time-view.js.map +1 -1
  200. package/dist/ssr/content/chart-inspection-core.js +557 -0
  201. package/dist/ssr/content/chart-inspection-core.js.map +1 -0
  202. package/dist/ssr/content/chart-inspection.js +10 -445
  203. package/dist/ssr/content/chart-inspection.js.map +1 -1
  204. package/dist/ssr/content/chart-line-gaps.js +1 -1
  205. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  206. package/dist/ssr/content/chart-snapshot.js +1 -1
  207. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  208. package/dist/ssr/content/index.js +3 -0
  209. package/dist/ssr/content/index.js.map +1 -1
  210. package/dist/ssr/feedback/dialog-core.js +135 -23
  211. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  212. package/dist/ssr/index.js +1 -0
  213. package/dist/ssr/index.js.map +1 -1
  214. package/dist/ssr/input-mode.js +40 -0
  215. package/dist/ssr/input-mode.js.map +1 -0
  216. package/dist/ssr/inputs/FileDropTarget.js +17 -5
  217. package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
  218. package/dist/ssr/inputs/FileInputs.js +2 -2
  219. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  220. package/dist/ssr/inputs/SelectChip.js +9 -0
  221. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  222. package/dist/ssr/inputs/emoji/EmojiPicker.js +12 -0
  223. package/dist/ssr/inputs/emoji/EmojiPicker.js.map +1 -1
  224. package/dist/ssr/inputs/file-drop.js.map +1 -1
  225. package/dist/ssr/layout/AppOverview.js +1 -1
  226. package/dist/ssr/layout/AppOverview.js.map +1 -1
  227. package/dist/ssr/layout/AppWorkspace.js +272 -95
  228. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  229. package/dist/ssr/layout/DetailPanel.js +112 -58
  230. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  231. package/dist/ssr/layout/Discussion.js +63 -36
  232. package/dist/ssr/layout/Discussion.js.map +1 -1
  233. package/dist/ssr/layout/PanelDialog.js +7 -6
  234. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  235. package/dist/ssr/layout/ResizeSeparator.js +45 -0
  236. package/dist/ssr/layout/ResizeSeparator.js.map +1 -0
  237. package/dist/ssr/layout/SidebarSwitcher.js +9 -2
  238. package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
  239. package/dist/ssr/layout/TabBar.js +1 -1
  240. package/dist/ssr/layout/TabBar.js.map +1 -1
  241. package/dist/ssr/layout/TableOfContents.js +10 -2
  242. package/dist/ssr/layout/TableOfContents.js.map +1 -1
  243. package/dist/ssr/layout/app-workspace-controller.js +130 -17
  244. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  245. package/dist/ssr/layout/detail-panel-messages.js +35 -0
  246. package/dist/ssr/layout/detail-panel-messages.js.map +1 -0
  247. package/dist/ssr/layout/index.js +3 -1
  248. package/dist/ssr/layout/index.js.map +1 -1
  249. package/dist/ssr/layout/resize-separator.js +90 -0
  250. package/dist/ssr/layout/resize-separator.js.map +1 -0
  251. package/dist/ssr/layout/workspace-messages.js +12 -2
  252. package/dist/ssr/layout/workspace-messages.js.map +1 -1
  253. package/dist/ssr/surfaces/Avatar.js +20 -2
  254. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  255. package/dist/ssr/surfaces/AvatarStack.js +286 -0
  256. package/dist/ssr/surfaces/AvatarStack.js.map +1 -0
  257. package/dist/ssr/surfaces/LinkCard.js +1 -1
  258. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  259. package/dist/ssr/surfaces/Placeholder.js +4 -2
  260. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  261. package/dist/ssr/surfaces/StatCell.js +23 -0
  262. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  263. package/dist/ssr/surfaces/avatar-messages.js +8 -2
  264. package/dist/ssr/surfaces/avatar-messages.js.map +1 -1
  265. package/dist/ssr/surfaces/index.js +1 -0
  266. package/dist/ssr/surfaces/index.js.map +1 -1
  267. package/dist/ssr/widgets/Widget.js +1 -1
  268. package/dist/ssr/widgets/Widget.js.map +1 -1
  269. package/dist/styles.css +1 -1
  270. package/dist/types/actions/ContextMenu.d.ts +9 -0
  271. package/dist/types/actions/DragAndDrop.d.ts +29 -0
  272. package/dist/types/actions/Dropdown.d.ts +12 -5
  273. package/dist/types/actions/GestureMenu.d.ts +6 -4
  274. package/dist/types/actions/Toolbar.d.ts +20 -0
  275. package/dist/types/actions/drag-and-drop-messages.d.ts +35 -0
  276. package/dist/types/actions/drag-and-drop.d.ts +36 -0
  277. package/dist/types/actions/index.d.ts +3 -1
  278. package/dist/types/actions/menu-rows.d.ts +5 -0
  279. package/dist/types/actions/menu-sheet.d.ts +22 -0
  280. package/dist/types/actions/toolbar-messages.d.ts +8 -0
  281. package/dist/types/chart-inspection.d.ts +2 -0
  282. package/dist/types/chat/ChatComposer.d.ts +26 -1
  283. package/dist/types/chat/ChatDecision.d.ts +133 -0
  284. package/dist/types/chat/ChatPrimitives.d.ts +4 -1
  285. package/dist/types/chat/ChatTimeline.d.ts +2 -1
  286. package/dist/types/chat/chat-messages.d.ts +13 -2
  287. package/dist/types/chat/command-search.d.ts +5 -0
  288. package/dist/types/chat/index.d.ts +25 -1
  289. package/dist/types/chat/reaction-people.d.ts +9 -0
  290. package/dist/types/chat/types.d.ts +54 -1
  291. package/dist/types/content/Chart.d.ts +11 -5
  292. package/dist/types/content/FileTypeIcon.d.ts +27 -0
  293. package/dist/types/content/MessageRow.d.ts +3 -10
  294. package/dist/types/content/ReactionBar.d.ts +32 -0
  295. package/dist/types/content/ReferenceChip.d.ts +49 -0
  296. package/dist/types/content/calendar-pointer.d.ts +6 -0
  297. package/dist/types/content/chart-inspection-core.d.ts +61 -0
  298. package/dist/types/content/chart-inspection.d.ts +4 -20
  299. package/dist/types/content/chart-snapshot.d.ts +1 -1
  300. package/dist/types/content/index.d.ts +5 -1
  301. package/dist/types/feedback/dialog-core.d.ts +16 -1
  302. package/dist/types/index.d.ts +1 -0
  303. package/dist/types/input-mode.d.ts +7 -0
  304. package/dist/types/inputs/FileDropTarget.d.ts +6 -3
  305. package/dist/types/inputs/SelectChip.d.ts +2 -0
  306. package/dist/types/inputs/file-drop.d.ts +2 -0
  307. package/dist/types/layout/AppWorkspace.d.ts +5 -3
  308. package/dist/types/layout/DetailPanel.d.ts +11 -0
  309. package/dist/types/layout/Discussion.d.ts +8 -0
  310. package/dist/types/layout/ResizeSeparator.d.ts +9 -0
  311. package/dist/types/layout/TabBar.d.ts +7 -0
  312. package/dist/types/layout/TableOfContents.d.ts +2 -0
  313. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  314. package/dist/types/layout/detail-panel-messages.d.ts +15 -0
  315. package/dist/types/layout/index.d.ts +3 -1
  316. package/dist/types/layout/resize-separator.d.ts +18 -0
  317. package/dist/types/layout/workspace-messages.d.ts +5 -0
  318. package/dist/types/surfaces/Avatar.d.ts +12 -0
  319. package/dist/types/surfaces/AvatarStack.d.ts +41 -0
  320. package/dist/types/surfaces/StatCell.d.ts +6 -0
  321. package/dist/types/surfaces/avatar-messages.d.ts +3 -0
  322. package/dist/types/surfaces/index.d.ts +3 -1
  323. package/package.json +7 -2
@@ -0,0 +1,35 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+
4
+ /** Counts and list folding shared by detail panel sections and discussions. */
5
+ const detailPanelMessages = i18n.define({
6
+ baseLocale: "en",
7
+ messages: {
8
+ en: {
9
+ noneYet: "None yet",
10
+ showOlder: ({
11
+ count
12
+ }) => `Show ${count} older`,
13
+ showMore: ({
14
+ count
15
+ }) => `Show ${count} more`,
16
+ showLess: "Show less"
17
+ },
18
+ de: {
19
+ noneYet: "Noch keine",
20
+ showOlder: ({
21
+ count
22
+ }) => `${count} ältere anzeigen`,
23
+ showMore: ({
24
+ count
25
+ }) => `${count} weitere anzeigen`,
26
+ showLess: "Weniger anzeigen"
27
+ }
28
+ }
29
+ });
30
+ export const useDetailPanelMessages = () => {
31
+ const locale = useLocale();
32
+ return () => detailPanelMessages.resolve([locale()]).t;
33
+ };
34
+ export const checkDetailPanelMessages = () => detailPanelMessages.check();
35
+ //# sourceMappingURL=detail-panel-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["layout/detail-panel-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\n/** Counts and list folding shared by detail panel sections and discussions. */\nconst detailPanelMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n noneYet: \"None yet\",\n showOlder: ({ count }: { count: number }) => `Show ${count} older`,\n showMore: ({ count }: { count: number }) => `Show ${count} more`,\n showLess: \"Show less\",\n },\n de: {\n noneYet: \"Noch keine\",\n showOlder: ({ count }) => `${count} ältere anzeigen`,\n showMore: ({ count }) => `${count} weitere anzeigen`,\n showLess: \"Weniger anzeigen\",\n },\n },\n});\n\nexport type DetailPanelMessages = ReturnType<(typeof detailPanelMessages)[\"resolve\"]>[\"t\"];\n\nexport const useDetailPanelMessages = (): (() => DetailPanelMessages) => {\n const locale = useLocale();\n return () => detailPanelMessages.resolve([locale()]).t;\n};\n\nexport const checkDetailPanelMessages = () => detailPanelMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;;AAE1C;AACA,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC;EACtC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,OAAO,EAAE,UAAU;MACnB,SAAS,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,QAAQ,KAAK,QAAQ;MAClE,QAAQ,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,QAAQ,KAAK,OAAO;MAChE,QAAQ,EAAE;IACZ,CAAC;IACD,EAAE,EAAE;MACF,OAAO,EAAE,YAAY;MACrB,SAAS,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,kBAAkB;MACpD,QAAQ,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,mBAAmB;MACpD,QAAQ,EAAE;IACZ;EACF;AACF,CAAC,CAAC;AAIF,OAAO,MAAM,sBAAsB,GAAG,MAAmC;EACvE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,OAAO,MAAM,wBAAwB,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  export { default as AppOverview } from "./AppOverview";
2
2
  export { default as AppWorkspace } from "./AppWorkspace";
3
- export { installAppWorkspaceController } from "./app-workspace-controller";
3
+ export { installAppWorkspaceController, parkWorkspaceDetailDrawers } from "./app-workspace-controller";
4
4
  export { APP_WORKSPACE_DETAIL_DEFAULT, APP_WORKSPACE_DETAIL_MAX, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DRAWER_DEFAULT, APP_WORKSPACE_DRAWER_MAX, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_MAIN_MIN, APP_WORKSPACE_MAIN_MIN_HEIGHT, APP_WORKSPACE_PANE_DEFAULT, APP_WORKSPACE_PANE_MAX, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD, APP_WORKSPACE_SIDEBAR_COLLAPSED, APP_WORKSPACE_SIDEBAR_DEFAULT, APP_WORKSPACE_SIDEBAR_MAX, APP_WORKSPACE_SIDEBAR_MIN, appWorkspaceLayoutStyle, appWorkspacePanelVariable, appWorkspaceResizeLimits, normalizeAppWorkspaceLayoutState, parseAppWorkspaceLayoutState, resolveAppWorkspaceSidebarWidth, safeAppWorkspacePanelId, serializeAppWorkspaceLayoutState, shouldCollapseAppWorkspaceSidebar } from "./app-workspace-state";
5
5
  export { bottomSheetAdaptiveOptions, bottomSheetOptions, default as BottomSheet } from "./BottomSheet";
6
6
  export { DataPanel } from "./DataPanel";
@@ -17,6 +17,8 @@ export { default as Panes } from "./Panes";
17
17
  export { default as PullToRefresh } from "./PullToRefresh";
18
18
  export { installPageTitleController } from "./page-title-controller";
19
19
  export { activatePanesItem, addPanesItem, applyPanesIntent, createPanesLayout, isPanesItemVisible, PANES_LAYOUT_VERSION, parsePanesLayout, reconcilePanesLayout, removePanesItem, resizePanesSplit } from "./panes-layout";
20
+ export { default as ResizeSeparator } from "./ResizeSeparator";
21
+ export { attachResizeSeparator } from "./resize-separator";
20
22
  export { default as ScrollArea } from "./ScrollArea";
21
23
  export { readSettingsError, SettingsField, SettingsGroup, SettingsPage, SettingsPanelFooter, SettingsSaveBar, SettingsSection, sameSettingValue } from "./Settings";
22
24
  export { default as SettingsCollection } from "./SettingsCollection";
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["layout/index.ts"],"sourcesContent":["export type {\n AppOverviewCardsProps,\n AppOverviewEmptyStateProps,\n AppOverviewPanelProps,\n AppOverviewProps,\n} from \"./AppOverview\";\nexport { default as AppOverview } from \"./AppOverview\";\nexport type {\n AppWorkspaceBottomDrawerHeight,\n AppWorkspaceBottomDrawerProps,\n AppWorkspaceContentProps,\n AppWorkspaceDetailProps,\n AppWorkspaceDetailWidth,\n AppWorkspaceMainPaneProps,\n AppWorkspaceMainProps,\n AppWorkspaceNavTreeItemProps,\n AppWorkspaceNavTreeMove,\n AppWorkspaceNavTreeProps,\n AppWorkspaceProps,\n AppWorkspaceSidebarAccessoryVisibility,\n AppWorkspaceSidebarBodyProps,\n AppWorkspaceSidebarIconActionProps,\n AppWorkspaceSidebarIconActionTone,\n AppWorkspaceSidebarIconGridProps,\n AppWorkspaceSidebarItemActionProps,\n AppWorkspaceSidebarItemActionsProps,\n AppWorkspaceSidebarItemIconProps,\n AppWorkspaceSidebarItemLabelProps,\n AppWorkspaceSidebarItemMetaProps,\n AppWorkspaceSidebarItemProps,\n AppWorkspaceSidebarItemStatusProps,\n AppWorkspaceSidebarItemTone,\n AppWorkspaceSidebarProps,\n AppWorkspaceSidebarSectionProps,\n AppWorkspaceSidebarVisibility,\n} from \"./AppWorkspace\";\nexport { default as AppWorkspace } from \"./AppWorkspace\";\nexport type { AppWorkspaceControllerOptions } from \"./app-workspace-controller\";\nexport { installAppWorkspaceController } from \"./app-workspace-controller\";\nexport type {\n AppWorkspaceLayoutState,\n AppWorkspaceResizeKind,\n} from \"./app-workspace-state\";\nexport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_DEFAULT,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_MAIN_MIN_HEIGHT,\n APP_WORKSPACE_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_DEFAULT,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n appWorkspaceLayoutStyle,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n normalizeAppWorkspaceLayoutState,\n parseAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n serializeAppWorkspaceLayoutState,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nexport { type BottomSheetProps, bottomSheetAdaptiveOptions, bottomSheetOptions, default as BottomSheet } from \"./BottomSheet\";\nexport type { DataPanelProps } from \"./DataPanel\";\nexport { DataPanel } from \"./DataPanel\";\nexport type {\n DetailPanelActionButtonProps,\n DetailPanelActionLinkProps,\n DetailPanelActionProps,\n DetailPanelActionSecondary,\n DetailPanelBodyProps,\n DetailPanelGroupProps,\n DetailPanelHeaderProps,\n DetailPanelProps,\n DetailPanelSectionProps,\n DetailPanelSummaryProps,\n DetailPanelTone,\n} from \"./DetailPanel\";\nexport { default as DetailPanel } from \"./DetailPanel\";\nexport type { DiscussionComposerProps, DiscussionItemProps, DiscussionListProps, DiscussionProps } from \"./Discussion\";\nexport { default as Discussion } from \"./Discussion\";\nexport type {\n FloatingWindowClose,\n FloatingWindowProps,\n OpenFloatingWindowOptions,\n} from \"./FloatingWindow\";\nexport {\n default as FloatingWindow,\n type FloatingWindowRect,\n fitFloatingWindowRect,\n openFloatingWindow,\n} from \"./FloatingWindow\";\nexport type { MobileShellHeaderProps, MobileShellProps } from \"./MobileShell\";\nexport { default as MobileShell, observeMobileShell } from \"./MobileShell\";\nexport { default as Navigation, type NavigationProps } from \"./Navigation\";\nexport {\n createNavigation,\n findNavigationItem,\n type NavigationController,\n type NavigationItem,\n type NavigationOptions,\n type NavigationStatus,\n} from \"./navigation-model\";\nexport type { PageTitleProps, PageTrailLink, PageTrailState } from \"./PageTitle\";\nexport { followPageTrail, PAGE_TRAIL_EVENT, PageTitle, PageTrailProvider, readPageTrail, setPageTrail, usePageTrail } from \"./PageTitle\";\nexport type {\n PanelDialogBodyProps,\n PanelDialogFooterProps,\n PanelDialogHeaderProps,\n PanelDialogProps,\n PanelDialogSectionProps,\n PanelDialogSurface,\n PanelDialogTabOption,\n PanelDialogTabsProps,\n} from \"./PanelDialog\";\nexport {\n confirmDiscardIfDirty,\n default as PanelDialog,\n panelDialogFixedOptions,\n panelDialogFixedPanelClass,\n panelDialogOptions,\n panelDialogPanelClass,\n panelDialogWideOptions,\n panelDialogWidePanelClass,\n panelDialogWorkspaceOptions,\n panelDialogWorkspacePanelClass,\n} from \"./PanelDialog\";\nexport type { PanelHeaderProps } from \"./PanelHeader\";\nexport { PanelHeader } from \"./PanelHeader\";\nexport type { PanesItem, PanesProps } from \"./Panes\";\nexport { default as Panes } from \"./Panes\";\nexport type { PullToRefreshProps, PullToRefreshState } from \"./PullToRefresh\";\nexport { default as PullToRefresh } from \"./PullToRefresh\";\nexport { installPageTitleController } from \"./page-title-controller\";\nexport type {\n AddPanesItemOptions,\n PanesDirection,\n PanesGroup,\n PanesIntent,\n PanesLayout,\n PanesNode,\n PanesPath,\n PanesPathSegment,\n PanesSide,\n PanesSplit,\n} from \"./panes-layout\";\nexport {\n activatePanesItem,\n addPanesItem,\n applyPanesIntent,\n createPanesLayout,\n isPanesItemVisible,\n PANES_LAYOUT_VERSION,\n parsePanesLayout,\n reconcilePanesLayout,\n removePanesItem,\n resizePanesSplit,\n} from \"./panes-layout\";\nexport type { ScrollAreaProps } from \"./ScrollArea\";\nexport { default as ScrollArea } from \"./ScrollArea\";\nexport type {\n SettingsFieldControlProps,\n SettingsFieldProps,\n SettingsGroupActionProps,\n SettingsGroupProps,\n SettingsPageProps,\n SettingsPanelFooterProps,\n SettingsSaveBarProps,\n SettingsSectionProps,\n} from \"./Settings\";\nexport {\n readSettingsError,\n SettingsField,\n SettingsGroup,\n SettingsPage,\n SettingsPanelFooter,\n SettingsSaveBar,\n SettingsSection,\n sameSettingValue,\n} from \"./Settings\";\nexport type {\n SettingsCollectionActionProps,\n SettingsCollectionItemActionsProps,\n SettingsCollectionItemProps,\n SettingsCollectionItemReorderProps,\n SettingsCollectionItemStatusProps,\n SettingsCollectionProps,\n} from \"./SettingsCollection\";\nexport { default as SettingsCollection } from \"./SettingsCollection\";\nexport type {\n SettingsModalFooterProps,\n SettingsModalGroupProps,\n SettingsModalProps,\n SettingsModalTabProps,\n SettingsModalTabTone,\n} from \"./SettingsModal\";\nexport { default as SettingsModal } from \"./SettingsModal\";\nexport {\n APP_WORKSPACE_SWITCHER_SEARCH_FROM,\n type AppWorkspaceSidebarSwitcherProps,\n type AppWorkspaceSwitcherAction,\n type AppWorkspaceSwitcherOption,\n} from \"./SidebarSwitcher\";\nexport type { TabBarItem, TabBarProps } from \"./TabBar\";\nexport { default as TabBar } from \"./TabBar\";\n\nexport type { TableOfContentsItem, TableOfContentsProps } from \"./TableOfContents\";\nexport { TableOfContents } from \"./TableOfContents\";\n"],"mappings":"AAMA,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AA8BtD,SAAS,OAAO,IAAI,YAAY,QAAQ,gBAAgB;AAExD,SAAS,6BAA6B,QAAQ,4BAA4B;AAK1E,SACE,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,wCAAwC,EACxC,+BAA+B,EAC/B,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,uBAAuB,EACvB,gCAAgC,EAChC,iCAAiC,QAC5B,uBAAuB;AAC9B,SAAgC,0BAA0B,EAAE,kBAAkB,EAAE,OAAO,IAAI,WAAW,QAAQ,eAAe;AAE7H,SAAS,SAAS,QAAQ,aAAa;AAcvC,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAMpD,SACE,OAAO,IAAI,cAAc,EAEzB,qBAAqB,EACrB,kBAAkB,QACb,kBAAkB;AAEzB,SAAS,OAAO,IAAI,WAAW,EAAE,kBAAkB,QAAQ,eAAe;AAC1E,SAAS,OAAO,IAAI,UAAU,QAA8B,cAAc;AAC1E,SACE,gBAAgB,EAChB,kBAAkB,QAKb,oBAAoB;AAE3B,SAAS,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,QAAQ,aAAa;AAWxI,SACE,qBAAqB,EACrB,OAAO,IAAI,WAAW,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,QACzB,eAAe;AAEtB,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,OAAO,IAAI,aAAa,QAAQ,iBAAiB;AAC1D,SAAS,0BAA0B,QAAQ,yBAAyB;AAapE,SACE,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,QACX,gBAAgB;AAEvB,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAWpD,SACE,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,gBAAgB,QACX,YAAY;AASnB,SAAS,OAAO,IAAI,kBAAkB,QAAQ,sBAAsB;AAQpE,SAAS,OAAO,IAAI,aAAa,QAAQ,iBAAiB;AAC1D,SACE,kCAAkC,QAI7B,mBAAmB;AAE1B,SAAS,OAAO,IAAI,MAAM,QAAQ,UAAU;AAG5C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/index.ts"],"sourcesContent":["export type {\n AppOverviewCardsProps,\n AppOverviewEmptyStateProps,\n AppOverviewPanelProps,\n AppOverviewProps,\n} from \"./AppOverview\";\nexport { default as AppOverview } from \"./AppOverview\";\nexport type {\n AppWorkspaceBottomDrawerHeight,\n AppWorkspaceBottomDrawerProps,\n AppWorkspaceContentProps,\n AppWorkspaceDetailProps,\n AppWorkspaceDetailWidth,\n AppWorkspaceMainPaneProps,\n AppWorkspaceMainProps,\n AppWorkspaceNavTreeItemProps,\n AppWorkspaceNavTreeMove,\n AppWorkspaceNavTreeProps,\n AppWorkspaceProps,\n AppWorkspaceSidebarAccessoryVisibility,\n AppWorkspaceSidebarBodyProps,\n AppWorkspaceSidebarIconActionProps,\n AppWorkspaceSidebarIconActionTone,\n AppWorkspaceSidebarIconGridProps,\n AppWorkspaceSidebarItemActionProps,\n AppWorkspaceSidebarItemActionsProps,\n AppWorkspaceSidebarItemIconProps,\n AppWorkspaceSidebarItemLabelProps,\n AppWorkspaceSidebarItemMetaProps,\n AppWorkspaceSidebarItemProps,\n AppWorkspaceSidebarItemStatusProps,\n AppWorkspaceSidebarItemTone,\n AppWorkspaceSidebarProps,\n AppWorkspaceSidebarSectionProps,\n AppWorkspaceSidebarVisibility,\n} from \"./AppWorkspace\";\nexport { default as AppWorkspace } from \"./AppWorkspace\";\nexport type { AppWorkspaceControllerOptions } from \"./app-workspace-controller\";\nexport { installAppWorkspaceController, parkWorkspaceDetailDrawers } from \"./app-workspace-controller\";\nexport type {\n AppWorkspaceLayoutState,\n AppWorkspaceResizeKind,\n} from \"./app-workspace-state\";\nexport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_DEFAULT,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_MAIN_MIN_HEIGHT,\n APP_WORKSPACE_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_DEFAULT,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n appWorkspaceLayoutStyle,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n normalizeAppWorkspaceLayoutState,\n parseAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n serializeAppWorkspaceLayoutState,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nexport { type BottomSheetProps, bottomSheetAdaptiveOptions, bottomSheetOptions, default as BottomSheet } from \"./BottomSheet\";\nexport type { DataPanelProps } from \"./DataPanel\";\nexport { DataPanel } from \"./DataPanel\";\nexport type {\n DetailPanelActionButtonProps,\n DetailPanelActionLinkProps,\n DetailPanelActionProps,\n DetailPanelActionSecondary,\n DetailPanelBodyProps,\n DetailPanelGroupProps,\n DetailPanelHeaderProps,\n DetailPanelProps,\n DetailPanelSectionProps,\n DetailPanelSummaryProps,\n DetailPanelTone,\n} from \"./DetailPanel\";\nexport { default as DetailPanel } from \"./DetailPanel\";\nexport type { DiscussionComposerProps, DiscussionItemProps, DiscussionListProps, DiscussionProps } from \"./Discussion\";\nexport { default as Discussion } from \"./Discussion\";\nexport type {\n FloatingWindowClose,\n FloatingWindowProps,\n OpenFloatingWindowOptions,\n} from \"./FloatingWindow\";\nexport {\n default as FloatingWindow,\n type FloatingWindowRect,\n fitFloatingWindowRect,\n openFloatingWindow,\n} from \"./FloatingWindow\";\nexport type { MobileShellHeaderProps, MobileShellProps } from \"./MobileShell\";\nexport { default as MobileShell, observeMobileShell } from \"./MobileShell\";\nexport { default as Navigation, type NavigationProps } from \"./Navigation\";\nexport {\n createNavigation,\n findNavigationItem,\n type NavigationController,\n type NavigationItem,\n type NavigationOptions,\n type NavigationStatus,\n} from \"./navigation-model\";\nexport type { PageTitleProps, PageTrailLink, PageTrailState } from \"./PageTitle\";\nexport { followPageTrail, PAGE_TRAIL_EVENT, PageTitle, PageTrailProvider, readPageTrail, setPageTrail, usePageTrail } from \"./PageTitle\";\nexport type {\n PanelDialogBodyProps,\n PanelDialogFooterProps,\n PanelDialogHeaderProps,\n PanelDialogProps,\n PanelDialogSectionProps,\n PanelDialogSurface,\n PanelDialogTabOption,\n PanelDialogTabsProps,\n} from \"./PanelDialog\";\nexport {\n confirmDiscardIfDirty,\n default as PanelDialog,\n panelDialogFixedOptions,\n panelDialogFixedPanelClass,\n panelDialogOptions,\n panelDialogPanelClass,\n panelDialogWideOptions,\n panelDialogWidePanelClass,\n panelDialogWorkspaceOptions,\n panelDialogWorkspacePanelClass,\n} from \"./PanelDialog\";\nexport type { PanelHeaderProps } from \"./PanelHeader\";\nexport { PanelHeader } from \"./PanelHeader\";\nexport type { PanesItem, PanesProps } from \"./Panes\";\nexport { default as Panes } from \"./Panes\";\nexport type { PullToRefreshProps, PullToRefreshState } from \"./PullToRefresh\";\nexport { default as PullToRefresh } from \"./PullToRefresh\";\nexport { installPageTitleController } from \"./page-title-controller\";\nexport type {\n AddPanesItemOptions,\n PanesDirection,\n PanesGroup,\n PanesIntent,\n PanesLayout,\n PanesNode,\n PanesPath,\n PanesPathSegment,\n PanesSide,\n PanesSplit,\n} from \"./panes-layout\";\nexport {\n activatePanesItem,\n addPanesItem,\n applyPanesIntent,\n createPanesLayout,\n isPanesItemVisible,\n PANES_LAYOUT_VERSION,\n parsePanesLayout,\n reconcilePanesLayout,\n removePanesItem,\n resizePanesSplit,\n} from \"./panes-layout\";\nexport { default as ResizeSeparator, type ResizeSeparatorProps } from \"./ResizeSeparator\";\nexport { attachResizeSeparator, type ResizeSeparatorOptions } from \"./resize-separator\";\nexport type { ScrollAreaProps } from \"./ScrollArea\";\nexport { default as ScrollArea } from \"./ScrollArea\";\nexport type {\n SettingsFieldControlProps,\n SettingsFieldProps,\n SettingsGroupActionProps,\n SettingsGroupProps,\n SettingsPageProps,\n SettingsPanelFooterProps,\n SettingsSaveBarProps,\n SettingsSectionProps,\n} from \"./Settings\";\nexport {\n readSettingsError,\n SettingsField,\n SettingsGroup,\n SettingsPage,\n SettingsPanelFooter,\n SettingsSaveBar,\n SettingsSection,\n sameSettingValue,\n} from \"./Settings\";\nexport type {\n SettingsCollectionActionProps,\n SettingsCollectionItemActionsProps,\n SettingsCollectionItemProps,\n SettingsCollectionItemReorderProps,\n SettingsCollectionItemStatusProps,\n SettingsCollectionProps,\n} from \"./SettingsCollection\";\nexport { default as SettingsCollection } from \"./SettingsCollection\";\nexport type {\n SettingsModalFooterProps,\n SettingsModalGroupProps,\n SettingsModalProps,\n SettingsModalTabProps,\n SettingsModalTabTone,\n} from \"./SettingsModal\";\nexport { default as SettingsModal } from \"./SettingsModal\";\nexport {\n APP_WORKSPACE_SWITCHER_SEARCH_FROM,\n type AppWorkspaceSidebarSwitcherProps,\n type AppWorkspaceSwitcherAction,\n type AppWorkspaceSwitcherOption,\n} from \"./SidebarSwitcher\";\nexport type { TabBarItem, TabBarProps } from \"./TabBar\";\nexport { default as TabBar } from \"./TabBar\";\nexport type { TableOfContentsItem, TableOfContentsProps } from \"./TableOfContents\";\nexport { TableOfContents } from \"./TableOfContents\";\n"],"mappings":"AAMA,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AA8BtD,SAAS,OAAO,IAAI,YAAY,QAAQ,gBAAgB;AAExD,SAAS,6BAA6B,EAAE,0BAA0B,QAAQ,4BAA4B;AAKtG,SACE,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,wCAAwC,EACxC,+BAA+B,EAC/B,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,uBAAuB,EACvB,gCAAgC,EAChC,iCAAiC,QAC5B,uBAAuB;AAC9B,SAAgC,0BAA0B,EAAE,kBAAkB,EAAE,OAAO,IAAI,WAAW,QAAQ,eAAe;AAE7H,SAAS,SAAS,QAAQ,aAAa;AAcvC,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAMpD,SACE,OAAO,IAAI,cAAc,EAEzB,qBAAqB,EACrB,kBAAkB,QACb,kBAAkB;AAEzB,SAAS,OAAO,IAAI,WAAW,EAAE,kBAAkB,QAAQ,eAAe;AAC1E,SAAS,OAAO,IAAI,UAAU,QAA8B,cAAc;AAC1E,SACE,gBAAgB,EAChB,kBAAkB,QAKb,oBAAoB;AAE3B,SAAS,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,QAAQ,aAAa;AAWxI,SACE,qBAAqB,EACrB,OAAO,IAAI,WAAW,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,QACzB,eAAe;AAEtB,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,OAAO,IAAI,aAAa,QAAQ,iBAAiB;AAC1D,SAAS,0BAA0B,QAAQ,yBAAyB;AAapE,SACE,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,QACX,gBAAgB;AACvB,SAAS,OAAO,IAAI,eAAe,QAAmC,mBAAmB;AACzF,SAAS,qBAAqB,QAAqC,oBAAoB;AAEvF,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAWpD,SACE,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,gBAAgB,QACX,YAAY;AASnB,SAAS,OAAO,IAAI,kBAAkB,QAAQ,sBAAsB;AAQpE,SAAS,OAAO,IAAI,aAAa,QAAQ,iBAAiB;AAC1D,SACE,kCAAkC,QAI7B,mBAAmB;AAE1B,SAAS,OAAO,IAAI,MAAM,QAAQ,UAAU;AAE5C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
@@ -0,0 +1,90 @@
1
+ import { suppressTextSelection } from "../internal/text-selection";
2
+ /** Adds resizing to a server-rendered separator; orientation comes from aria-orientation. */
3
+ export function attachResizeSeparator(element, options) {
4
+ const clamp = value => Math.min(options.max, Math.max(options.min, value));
5
+ const setAria = value => element.setAttribute("aria-valuenow", String(Math.round(value * 100) / 100));
6
+ const vertical = () => element.getAttribute("aria-orientation") !== "horizontal";
7
+ const direction = () => (options.grow === "end" ? 1 : -1) * (vertical() && getComputedStyle(element).direction === "rtl" ? -1 : 1);
8
+ let drag;
9
+ const resize = raw => {
10
+ const value = clamp(raw);
11
+ setAria(value);
12
+ options.onResize(value);
13
+ return value;
14
+ };
15
+ const finish = commit => {
16
+ if (!drag) return;
17
+ const ended = drag;
18
+ drag = undefined;
19
+ element.removeAttribute("data-active");
20
+ ended.releaseSelection();
21
+ if (element.hasPointerCapture?.(ended.id)) element.releasePointerCapture(ended.id);
22
+ options.onDragChange?.(false);
23
+ if (ended.armed) options.onCollapseIntent?.(false);
24
+ if (!commit) resize(ended.value);else if (ended.armed) options.onCollapse?.();else options.onResizeEnd?.(ended.current);
25
+ };
26
+ const down = event => {
27
+ if (event.button !== 0 || event.isPrimary === false || drag) return;
28
+ event.preventDefault();
29
+ element.focus();
30
+ drag = {
31
+ id: event.pointerId,
32
+ start: vertical() ? event.clientX : event.clientY,
33
+ value: options.value(),
34
+ current: options.value(),
35
+ armed: false,
36
+ releaseSelection: suppressTextSelection(event.pointerId)
37
+ };
38
+ element.setPointerCapture?.(event.pointerId);
39
+ element.dataset.active = "true";
40
+ options.onDragChange?.(true);
41
+ };
42
+ const move = event => {
43
+ if (!drag || event.pointerId !== drag.id) return;
44
+ event.preventDefault();
45
+ const raw = drag.value + ((vertical() ? event.clientX : event.clientY) - drag.start) * direction() / (options.unit ?? 1);
46
+ const armed = options.collapseBelow !== undefined && raw < options.collapseBelow;
47
+ if (armed !== drag.armed) {
48
+ drag.armed = armed;
49
+ options.onCollapseIntent?.(armed);
50
+ }
51
+ drag.current = resize(raw);
52
+ };
53
+ const up = event => {
54
+ if (event.pointerId === drag?.id) finish(true);
55
+ };
56
+ const cancelPointer = event => {
57
+ if (event.pointerId === drag?.id) finish(false);
58
+ };
59
+ const cancel = () => finish(false);
60
+ const key = event => {
61
+ if (event.defaultPrevented || event.isComposing || event.altKey || event.ctrlKey || event.metaKey || drag) return;
62
+ const decrease = vertical() ? "ArrowLeft" : "ArrowUp";
63
+ const increase = vertical() ? "ArrowRight" : "ArrowDown";
64
+ const step = event.shiftKey ? options.largeStep ?? (options.step ?? 1) * 4 : options.step ?? 1;
65
+ let value;
66
+ if (event.key === "Home") value = options.min;else if (event.key === "End") value = options.max;else if (event.key === decrease || event.key === increase) value = options.value() + (event.key === increase ? 1 : -1) * direction() * step;else return;
67
+ event.preventDefault();
68
+ const resized = resize(value);
69
+ options.onResizeEnd?.(resized);
70
+ };
71
+ setAria(clamp(options.value()));
72
+ element.addEventListener("pointerdown", down);
73
+ window.addEventListener("pointermove", move);
74
+ window.addEventListener("pointerup", up);
75
+ window.addEventListener("pointercancel", cancelPointer);
76
+ element.addEventListener("lostpointercapture", cancelPointer);
77
+ element.addEventListener("keydown", key);
78
+ window.addEventListener("blur", cancel);
79
+ return () => {
80
+ cancel();
81
+ element.removeEventListener("pointerdown", down);
82
+ window.removeEventListener("pointermove", move);
83
+ window.removeEventListener("pointerup", up);
84
+ window.removeEventListener("pointercancel", cancelPointer);
85
+ element.removeEventListener("lostpointercapture", cancelPointer);
86
+ element.removeEventListener("keydown", key);
87
+ window.removeEventListener("blur", cancel);
88
+ };
89
+ }
90
+ //# sourceMappingURL=resize-separator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["layout/resize-separator.ts"],"sourcesContent":["import { suppressTextSelection } from \"../internal/text-selection\";\n\nexport type ResizeSeparatorOptions = {\n min: number;\n max: number;\n value: () => number;\n /** Pixels per value unit. Defaults to 1. */\n unit?: number;\n step?: number;\n largeStep?: number;\n grow: \"start\" | \"end\";\n collapseBelow?: number;\n onResize: (value: number) => void;\n onResizeEnd?: (value: number) => void;\n onCollapseIntent?: (armed: boolean) => void;\n onCollapse?: () => void;\n onDragChange?: (dragging: boolean) => void;\n};\n\n/** Adds resizing to a server-rendered separator; orientation comes from aria-orientation. */\nexport function attachResizeSeparator(element: HTMLElement, options: ResizeSeparatorOptions): () => void {\n const clamp = (value: number) => Math.min(options.max, Math.max(options.min, value));\n const setAria = (value: number) => element.setAttribute(\"aria-valuenow\", String(Math.round(value * 100) / 100));\n const vertical = () => element.getAttribute(\"aria-orientation\") !== \"horizontal\";\n const direction = () => (options.grow === \"end\" ? 1 : -1) * (vertical() && getComputedStyle(element).direction === \"rtl\" ? -1 : 1);\n let drag: { id: number; start: number; value: number; current: number; armed: boolean; releaseSelection: () => void } | undefined;\n const resize = (raw: number) => {\n const value = clamp(raw);\n setAria(value);\n options.onResize(value);\n return value;\n };\n const finish = (commit: boolean) => {\n if (!drag) return;\n const ended = drag;\n drag = undefined;\n element.removeAttribute(\"data-active\");\n ended.releaseSelection();\n if (element.hasPointerCapture?.(ended.id)) element.releasePointerCapture(ended.id);\n options.onDragChange?.(false);\n if (ended.armed) options.onCollapseIntent?.(false);\n if (!commit) resize(ended.value);\n else if (ended.armed) options.onCollapse?.();\n else options.onResizeEnd?.(ended.current);\n };\n const down = (event: PointerEvent) => {\n if (event.button !== 0 || event.isPrimary === false || drag) return;\n event.preventDefault();\n element.focus();\n drag = {\n id: event.pointerId,\n start: vertical() ? event.clientX : event.clientY,\n value: options.value(),\n current: options.value(),\n armed: false,\n releaseSelection: suppressTextSelection(event.pointerId),\n };\n element.setPointerCapture?.(event.pointerId);\n element.dataset.active = \"true\";\n options.onDragChange?.(true);\n };\n const move = (event: PointerEvent) => {\n if (!drag || event.pointerId !== drag.id) return;\n event.preventDefault();\n const raw = drag.value + (((vertical() ? event.clientX : event.clientY) - drag.start) * direction()) / (options.unit ?? 1);\n const armed = options.collapseBelow !== undefined && raw < options.collapseBelow;\n if (armed !== drag.armed) {\n drag.armed = armed;\n options.onCollapseIntent?.(armed);\n }\n drag.current = resize(raw);\n };\n const up = (event: PointerEvent) => {\n if (event.pointerId === drag?.id) finish(true);\n };\n const cancelPointer = (event: PointerEvent) => {\n if (event.pointerId === drag?.id) finish(false);\n };\n const cancel = () => finish(false);\n const key = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.isComposing || event.altKey || event.ctrlKey || event.metaKey || drag) return;\n const decrease = vertical() ? \"ArrowLeft\" : \"ArrowUp\";\n const increase = vertical() ? \"ArrowRight\" : \"ArrowDown\";\n const step = event.shiftKey ? (options.largeStep ?? (options.step ?? 1) * 4) : (options.step ?? 1);\n let value: number;\n if (event.key === \"Home\") value = options.min;\n else if (event.key === \"End\") value = options.max;\n else if (event.key === decrease || event.key === increase)\n value = options.value() + (event.key === increase ? 1 : -1) * direction() * step;\n else return;\n event.preventDefault();\n const resized = resize(value);\n options.onResizeEnd?.(resized);\n };\n setAria(clamp(options.value()));\n element.addEventListener(\"pointerdown\", down);\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n window.addEventListener(\"pointercancel\", cancelPointer);\n element.addEventListener(\"lostpointercapture\", cancelPointer);\n element.addEventListener(\"keydown\", key);\n window.addEventListener(\"blur\", cancel);\n return () => {\n cancel();\n element.removeEventListener(\"pointerdown\", down);\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n window.removeEventListener(\"pointercancel\", cancelPointer);\n element.removeEventListener(\"lostpointercapture\", cancelPointer);\n element.removeEventListener(\"keydown\", key);\n window.removeEventListener(\"blur\", cancel);\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -15,6 +15,7 @@ const workspaceMessages = i18n.define({
15
15
  resizeNavigation: "Resize navigation",
16
16
  resizeWorkspacePane: "Resize workspace pane",
17
17
  resizeDetailPanel: "Resize detail panel",
18
+ details: "Details",
18
19
  detailFullHeight: "Full height",
19
20
  resizeBottomDrawer: "Resize bottom drawer",
20
21
  showNavigation: "Show navigation",
@@ -22,7 +23,11 @@ const workspaceMessages = i18n.define({
22
23
  page
23
24
  }) => `Back to ${page}`,
24
25
  path: "Path",
25
- moreLevels: "More levels"
26
+ moreLevels: "More levels",
27
+ sidebarAll: "All",
28
+ sidebarAllLabel: ({
29
+ label
30
+ }) => `All ${label}`
26
31
  },
27
32
  de: {
28
33
  rowAction: "Zeilenaktion",
@@ -36,6 +41,7 @@ const workspaceMessages = i18n.define({
36
41
  resizeNavigation: "Breite der Navigation ändern",
37
42
  resizeWorkspacePane: "Breite des Arbeitsbereichs ändern",
38
43
  resizeDetailPanel: "Breite des Detailbereichs ändern",
44
+ details: "Details",
39
45
  detailFullHeight: "Volle Höhe",
40
46
  resizeBottomDrawer: "Höhe des unteren Bereichs ändern",
41
47
  showNavigation: "Navigation anzeigen",
@@ -43,7 +49,11 @@ const workspaceMessages = i18n.define({
43
49
  page
44
50
  }) => `Zurück zu ${page}`,
45
51
  path: "Pfad",
46
- moreLevels: "Weitere Ebenen"
52
+ moreLevels: "Weitere Ebenen",
53
+ sidebarAll: "Alle",
54
+ sidebarAllLabel: ({
55
+ label
56
+ }) => `Alle ${label}`
47
57
  }
48
58
  }
49
59
  });
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["layout/workspace-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst workspaceMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n rowAction: \"Row action\",\n sidebarUnread: ({ count }: { count: number }) => `${count} unread`,\n sidebarUnreadMany: \"more than 99 unread\",\n sidebarNewActivity: \"new activity\",\n sidebarMentioned: \"mentions you\",\n sidebarMuted: \"muted\",\n resizeNavigation: \"Resize navigation\",\n resizeWorkspacePane: \"Resize workspace pane\",\n resizeDetailPanel: \"Resize detail panel\",\n detailFullHeight: \"Full height\",\n resizeBottomDrawer: \"Resize bottom drawer\",\n showNavigation: \"Show navigation\",\n backTo: ({ page }: { page: string }) => `Back to ${page}`,\n path: \"Path\",\n moreLevels: \"More levels\",\n },\n de: {\n rowAction: \"Zeilenaktion\",\n sidebarUnread: ({ count }) => `${count} ungelesen`,\n sidebarUnreadMany: \"mehr als 99 ungelesen\",\n sidebarNewActivity: \"neue Aktivität\",\n sidebarMentioned: \"erwähnt dich\",\n sidebarMuted: \"stummgeschaltet\",\n resizeNavigation: \"Breite der Navigation ändern\",\n resizeWorkspacePane: \"Breite des Arbeitsbereichs ändern\",\n resizeDetailPanel: \"Breite des Detailbereichs ändern\",\n detailFullHeight: \"Volle Höhe\",\n resizeBottomDrawer: \"Höhe des unteren Bereichs ändern\",\n showNavigation: \"Navigation anzeigen\",\n backTo: ({ page }) => `Zurück zu ${page}`,\n path: \"Pfad\",\n moreLevels: \"Weitere Ebenen\",\n },\n },\n});\n\nexport type WorkspaceMessages = ReturnType<(typeof workspaceMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useWorkspaceMessages = (): (() => WorkspaceMessages) => {\n const locale = useLocale();\n return () => workspaceMessages.resolve([locale()]).t;\n};\n\nexport const checkWorkspaceMessages = () => workspaceMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;EACpC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,SAAS,EAAE,YAAY;MACvB,aAAa,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,GAAG,KAAK,SAAS;MAClE,iBAAiB,EAAE,qBAAqB;MACxC,kBAAkB,EAAE,cAAc;MAClC,gBAAgB,EAAE,cAAc;MAChC,YAAY,EAAE,OAAO;MACrB,gBAAgB,EAAE,mBAAmB;MACrC,mBAAmB,EAAE,uBAAuB;MAC5C,iBAAiB,EAAE,qBAAqB;MACxC,gBAAgB,EAAE,aAAa;MAC/B,kBAAkB,EAAE,sBAAsB;MAC1C,cAAc,EAAE,iBAAiB;MACjC,MAAM,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,WAAW,IAAI,EAAE;MACzD,IAAI,EAAE,MAAM;MACZ,UAAU,EAAE;IACd,CAAC;IACD,EAAE,EAAE;MACF,SAAS,EAAE,cAAc;MACzB,aAAa,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,YAAY;MAClD,iBAAiB,EAAE,uBAAuB;MAC1C,kBAAkB,EAAE,gBAAgB;MACpC,gBAAgB,EAAE,cAAc;MAChC,YAAY,EAAE,iBAAiB;MAC/B,gBAAgB,EAAE,8BAA8B;MAChD,mBAAmB,EAAE,mCAAmC;MACxD,iBAAiB,EAAE,kCAAkC;MACrD,gBAAgB,EAAE,YAAY;MAC9B,kBAAkB,EAAE,kCAAkC;MACtD,cAAc,EAAE,qBAAqB;MACrC,MAAM,EAAE,CAAC;QAAE;MAAK,CAAC,KAAK,aAAa,IAAI,EAAE;MACzC,IAAI,EAAE,MAAM;MACZ,UAAU,EAAE;IACd;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,oBAAoB,GAAG,MAAiC;EACnE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,OAAO,MAAM,sBAAsB,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/workspace-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst workspaceMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n rowAction: \"Row action\",\n sidebarUnread: ({ count }: { count: number }) => `${count} unread`,\n sidebarUnreadMany: \"more than 99 unread\",\n sidebarNewActivity: \"new activity\",\n sidebarMentioned: \"mentions you\",\n sidebarMuted: \"muted\",\n resizeNavigation: \"Resize navigation\",\n resizeWorkspacePane: \"Resize workspace pane\",\n resizeDetailPanel: \"Resize detail panel\",\n details: \"Details\",\n detailFullHeight: \"Full height\",\n resizeBottomDrawer: \"Resize bottom drawer\",\n showNavigation: \"Show navigation\",\n backTo: ({ page }: { page: string }) => `Back to ${page}`,\n path: \"Path\",\n moreLevels: \"More levels\",\n sidebarAll: \"All\",\n sidebarAllLabel: ({ label }: { label: string }) => `All ${label}`,\n },\n de: {\n rowAction: \"Zeilenaktion\",\n sidebarUnread: ({ count }) => `${count} ungelesen`,\n sidebarUnreadMany: \"mehr als 99 ungelesen\",\n sidebarNewActivity: \"neue Aktivität\",\n sidebarMentioned: \"erwähnt dich\",\n sidebarMuted: \"stummgeschaltet\",\n resizeNavigation: \"Breite der Navigation ändern\",\n resizeWorkspacePane: \"Breite des Arbeitsbereichs ändern\",\n resizeDetailPanel: \"Breite des Detailbereichs ändern\",\n details: \"Details\",\n detailFullHeight: \"Volle Höhe\",\n resizeBottomDrawer: \"Höhe des unteren Bereichs ändern\",\n showNavigation: \"Navigation anzeigen\",\n backTo: ({ page }) => `Zurück zu ${page}`,\n path: \"Pfad\",\n moreLevels: \"Weitere Ebenen\",\n sidebarAll: \"Alle\",\n sidebarAllLabel: ({ label }) => `Alle ${label}`,\n },\n },\n});\n\nexport type WorkspaceMessages = ReturnType<(typeof workspaceMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useWorkspaceMessages = (): (() => WorkspaceMessages) => {\n const locale = useLocale();\n return () => workspaceMessages.resolve([locale()]).t;\n};\n\nexport const checkWorkspaceMessages = () => workspaceMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;EACpC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,SAAS,EAAE,YAAY;MACvB,aAAa,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,GAAG,KAAK,SAAS;MAClE,iBAAiB,EAAE,qBAAqB;MACxC,kBAAkB,EAAE,cAAc;MAClC,gBAAgB,EAAE,cAAc;MAChC,YAAY,EAAE,OAAO;MACrB,gBAAgB,EAAE,mBAAmB;MACrC,mBAAmB,EAAE,uBAAuB;MAC5C,iBAAiB,EAAE,qBAAqB;MACxC,OAAO,EAAE,SAAS;MAClB,gBAAgB,EAAE,aAAa;MAC/B,kBAAkB,EAAE,sBAAsB;MAC1C,cAAc,EAAE,iBAAiB;MACjC,MAAM,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,WAAW,IAAI,EAAE;MACzD,IAAI,EAAE,MAAM;MACZ,UAAU,EAAE,aAAa;MACzB,UAAU,EAAE,KAAK;MACjB,eAAe,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,OAAO,KAAK;IACjE,CAAC;IACD,EAAE,EAAE;MACF,SAAS,EAAE,cAAc;MACzB,aAAa,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,YAAY;MAClD,iBAAiB,EAAE,uBAAuB;MAC1C,kBAAkB,EAAE,gBAAgB;MACpC,gBAAgB,EAAE,cAAc;MAChC,YAAY,EAAE,iBAAiB;MAC/B,gBAAgB,EAAE,8BAA8B;MAChD,mBAAmB,EAAE,mCAAmC;MACxD,iBAAiB,EAAE,kCAAkC;MACrD,OAAO,EAAE,SAAS;MAClB,gBAAgB,EAAE,YAAY;MAC9B,kBAAkB,EAAE,kCAAkC;MACtD,cAAc,EAAE,qBAAqB;MACrC,MAAM,EAAE,CAAC;QAAE;MAAK,CAAC,KAAK,aAAa,IAAI,EAAE;MACzC,IAAI,EAAE,MAAM;MACZ,UAAU,EAAE,gBAAgB;MAC5B,UAAU,EAAE,MAAM;MAClB,eAAe,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,QAAQ,KAAK;IAC/C;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,oBAAoB,GAAG,MAAiC;EACnE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,OAAO,MAAM,sBAAsB,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -9,6 +9,14 @@ var _tmpl$ = ["<i", " aria-hidden=\"true\"></i>"],
9
9
  _tmpl$3 = ["<img", " style=\"", "\"", " decoding=\"async\">"];
10
10
  import { createEffect, createSignal, on, Show } from "solid-js";
11
11
  import { useAvatarMessages } from "./avatar-messages";
12
+
13
+ /**
14
+ * A status ring around the avatar: `"success"` for an active state such as someone working on a task, or an explicit
15
+ * color, for example a collaborator's cursor color.
16
+ */
17
+
18
+ /** `square` marks an agent or service account; people stay round. */
19
+
12
20
  const initialsFor = name => {
13
21
  const parts = name.trim().split(/\s+/).filter(Boolean);
14
22
  if (parts.length === 0) return "?";
@@ -37,6 +45,16 @@ export function Avatar(props) {
37
45
  const fallback = () => props.fallback ?? initialsFor(props.name);
38
46
  const fallbackContent = () => props.icon ? _$ssr(_tmpl$, _$ssrAttribute("class", _$escape(props.icon, true), false)) : fallback();
39
47
  const className = () => `k2b-avatar ${props.class ?? ""}`;
48
+ const ring = () => props.ring === undefined ? undefined : typeof props.ring === "string" ? props.ring : "color";
49
+ const style = () => {
50
+ const color = typeof props.ring === "object" ? props.ring.color : undefined;
51
+ if (color === undefined) return props.style;
52
+ if (typeof props.style === "string") return `${props.style ? `${props.style};` : ""}--k2b-avatar-ring:${color}`;
53
+ return {
54
+ ...props.style,
55
+ "--k2b-avatar-ring": color
56
+ };
57
+ };
40
58
  createEffect(on(() => props.src, () => setFailed(false), {
41
59
  defer: true
42
60
  }));
@@ -45,13 +63,13 @@ export function Avatar(props) {
45
63
  return _$memo(() => !!!failed())() ? props.src || undefined : undefined;
46
64
  },
47
65
  get fallback() {
48
- return _$ssr(_tmpl$2, _$ssrAttribute("class", _$escape(className(), true), false) + _$ssrAttribute("data-size", _$escape(props.size ?? "md", true), false) + _$ssrAttribute("data-tint", _$escape(tintFor(props.name.trim()), true), false), _$ssrStyle(props.style), _$ssrAttribute("aria-label", _$escape(props.alt ?? avatarMessages().avatarLabel({
66
+ return _$ssr(_tmpl$2, _$ssrAttribute("class", _$escape(className(), true), false) + _$ssrAttribute("data-size", _$escape(props.size ?? "md", true), false) + _$ssrAttribute("data-shape", props.shape === "square" ? "square" : _$escape(undefined, true), false) + _$ssrAttribute("data-tint", _$escape(tintFor(props.name.trim()), true), false) + _$ssrAttribute("data-ring", _$escape(ring(), true), false), _$ssrStyle(style()), _$ssrAttribute("aria-label", _$escape(props.alt ?? avatarMessages().avatarLabel({
49
67
  name: label()
50
68
  }), true), false), _$escape(fallbackContent()));
51
69
  },
52
70
  children: src => _$ssr(_tmpl$3, _$ssrAttribute("src", _$escape(src(), true), false) + _$ssrAttribute("alt", _$escape(props.alt ?? avatarMessages().avatarLabel({
53
71
  name: label()
54
- }), true), false) + _$ssrAttribute("class", _$escape(className(), true), false) + _$ssrAttribute("data-size", _$escape(props.size ?? "md", true), false), _$ssrStyle(props.style), _$ssrAttribute("loading", _$escape(props.loading ?? "lazy", true), false))
72
+ }), true), false) + _$ssrAttribute("class", _$escape(className(), true), false) + _$ssrAttribute("data-size", _$escape(props.size ?? "md", true), false) + _$ssrAttribute("data-shape", props.shape === "square" ? "square" : _$escape(undefined, true), false) + _$ssrAttribute("data-ring", _$escape(ring(), true), false), _$ssrStyle(style()), _$ssrAttribute("loading", _$escape(props.loading ?? "lazy", true), false))
55
73
  });
56
74
  }
57
75
  //# sourceMappingURL=Avatar.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["surfaces/Avatar.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, on, Show } from \"solid-js\";\nimport { useAvatarMessages } from \"./avatar-messages\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type AvatarProps = {\n name: string;\n src?: string | null;\n icon?: string;\n alt?: string;\n fallback?: string;\n size?: AvatarSize;\n loading?: \"eager\" | \"lazy\";\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nconst initialsFor = (name: string): string => {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n if (parts.length === 1) return parts[0]?.slice(0, 2).toUpperCase() ?? \"?\";\n return `${parts[0]?.[0] ?? \"\"}${parts.at(-1)?.[0] ?? \"\"}`.toUpperCase();\n};\n\n/** Tints behind initials, as many as `.k2b-avatar[data-tint]` rules in the stylesheet. */\nconst TINTS = 10;\n\n/**\n * The tint behind initials and icons, from the name, so the same name has one color wherever an avatar shows it. The\n * hash is the one of `@k2b/stdlib`'s generated avatar.\n */\nconst tintFor = (name: string): number => {\n let hash = 0;\n for (let index = 0; index < name.length; index++) hash = (hash * 31 + name.charCodeAt(index)) >>> 0;\n return hash % TINTS;\n};\n\nexport function Avatar(props: AvatarProps): JSX.Element {\n const avatarMessages = useAvatarMessages();\n const [failed, setFailed] = createSignal(false);\n const label = () => props.name.trim() || avatarMessages().unknownUser;\n // Derive initials from the given name, not from the accessible-name fallback:\n // an empty `name` must render \"?\" the way Cloud's avatar does, not \"UU\".\n const fallback = () => props.fallback ?? initialsFor(props.name);\n const fallbackContent = () => (props.icon ? <i class={props.icon} aria-hidden=\"true\" /> : fallback());\n const className = () => `k2b-avatar ${props.class ?? \"\"}`;\n\n createEffect(\n on(\n () => props.src,\n () => setFailed(false),\n { defer: true },\n ),\n );\n\n return (\n <Show\n when={!failed() ? props.src || undefined : undefined}\n fallback={\n <span\n class={className()}\n data-size={props.size ?? \"md\"}\n data-tint={tintFor(props.name.trim())}\n style={props.style}\n role=\"img\"\n aria-label={props.alt ?? avatarMessages().avatarLabel({ name: label() })}\n >\n {fallbackContent()}\n </span>\n }\n >\n {(src) => (\n <img\n src={src()}\n alt={props.alt ?? avatarMessages().avatarLabel({ name: label() })}\n class={className()}\n data-size={props.size ?? \"md\"}\n style={props.style}\n loading={props.loading ?? \"lazy\"}\n decoding=\"async\"\n onError={() => setFailed(true)}\n />\n )}\n </Show>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["surfaces/Avatar.tsx"],"sourcesContent":["import { createEffect, createSignal, type JSX, on, Show } from \"solid-js\";\nimport { useAvatarMessages } from \"./avatar-messages\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n/**\n * A status ring around the avatar: `\"success\"` for an active state such as someone working on a task, or an explicit\n * color, for example a collaborator's cursor color.\n */\nexport type AvatarRing = \"success\" | { color: string };\n\n/** `square` marks an agent or service account; people stay round. */\nexport type AvatarShape = \"circle\" | \"square\";\n\nexport type AvatarProps = {\n name: string;\n src?: string | null;\n icon?: string;\n alt?: string;\n fallback?: string;\n size?: AvatarSize;\n /** Draws a ring with a small transparent gap inside the avatar's own box, so the avatar keeps its size and no container clips the ring. */\n ring?: AvatarRing;\n shape?: AvatarShape;\n loading?: \"eager\" | \"lazy\";\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nconst initialsFor = (name: string): string => {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n if (parts.length === 1) return parts[0]?.slice(0, 2).toUpperCase() ?? \"?\";\n return `${parts[0]?.[0] ?? \"\"}${parts.at(-1)?.[0] ?? \"\"}`.toUpperCase();\n};\n\n/** Tints behind initials, as many as `.k2b-avatar[data-tint]` rules in the stylesheet. */\nconst TINTS = 10;\n\n/**\n * The tint behind initials and icons, from the name, so the same name has one color wherever an avatar shows it. The\n * hash is the one of `@k2b/stdlib`'s generated avatar.\n */\nconst tintFor = (name: string): number => {\n let hash = 0;\n for (let index = 0; index < name.length; index++) hash = (hash * 31 + name.charCodeAt(index)) >>> 0;\n return hash % TINTS;\n};\n\nexport function Avatar(props: AvatarProps): JSX.Element {\n const avatarMessages = useAvatarMessages();\n const [failed, setFailed] = createSignal(false);\n const label = () => props.name.trim() || avatarMessages().unknownUser;\n // Derive initials from the given name, not from the accessible-name fallback:\n // an empty `name` must render \"?\" the way Cloud's avatar does, not \"UU\".\n const fallback = () => props.fallback ?? initialsFor(props.name);\n const fallbackContent = () => (props.icon ? <i class={props.icon} aria-hidden=\"true\" /> : fallback());\n const className = () => `k2b-avatar ${props.class ?? \"\"}`;\n const ring = () => (props.ring === undefined ? undefined : typeof props.ring === \"string\" ? props.ring : \"color\");\n const style = (): JSX.CSSProperties | string | undefined => {\n const color = typeof props.ring === \"object\" ? props.ring.color : undefined;\n if (color === undefined) return props.style;\n if (typeof props.style === \"string\") return `${props.style ? `${props.style};` : \"\"}--k2b-avatar-ring:${color}`;\n return { ...props.style, \"--k2b-avatar-ring\": color };\n };\n\n createEffect(\n on(\n () => props.src,\n () => setFailed(false),\n { defer: true },\n ),\n );\n\n return (\n <Show\n when={!failed() ? props.src || undefined : undefined}\n fallback={\n <span\n class={className()}\n data-size={props.size ?? \"md\"}\n data-shape={props.shape === \"square\" ? \"square\" : undefined}\n data-tint={tintFor(props.name.trim())}\n data-ring={ring()}\n style={style()}\n role=\"img\"\n aria-label={props.alt ?? avatarMessages().avatarLabel({ name: label() })}\n >\n {fallbackContent()}\n </span>\n }\n >\n {(src) => (\n <img\n src={src()}\n alt={props.alt ?? avatarMessages().avatarLabel({ name: label() })}\n class={className()}\n data-size={props.size ?? \"md\"}\n data-shape={props.shape === \"square\" ? \"square\" : undefined}\n data-ring={ring()}\n style={style()}\n loading={props.loading ?? \"lazy\"}\n decoding=\"async\"\n onError={() => setFailed(true)}\n />\n )}\n </Show>\n );\n}\n"],"mappings":"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","ignoreList":[]}