@k2b/ui 0.17.0 → 0.19.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 (228) hide show
  1. package/README.md +3 -2
  2. package/dist/browser/actions/ContextMenu.js +3 -1
  3. package/dist/browser/actions/ContextMenu.js.map +1 -1
  4. package/dist/browser/actions/Dropdown.js +91 -46
  5. package/dist/browser/actions/Dropdown.js.map +1 -1
  6. package/dist/browser/actions/FilterChip.js +4 -1
  7. package/dist/browser/actions/FilterChip.js.map +1 -1
  8. package/dist/browser/chat/ChatComposer.js +1311 -565
  9. package/dist/browser/chat/ChatComposer.js.map +1 -1
  10. package/dist/browser/chat/ChatPrimitives.js +9 -6
  11. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  12. package/dist/browser/chat/chat-behavior.js +9 -0
  13. package/dist/browser/chat/chat-behavior.js.map +1 -1
  14. package/dist/browser/chat/index.js.map +1 -1
  15. package/dist/browser/chat/types.js.map +1 -1
  16. package/dist/browser/content/Calendar.js +579 -533
  17. package/dist/browser/content/Calendar.js.map +1 -1
  18. package/dist/browser/content/FileView.js +62 -36
  19. package/dist/browser/content/FileView.js.map +1 -1
  20. package/dist/browser/content/Lightbox.js +76 -40
  21. package/dist/browser/content/Lightbox.js.map +1 -1
  22. package/dist/browser/content/MarkdownView.js +9 -3
  23. package/dist/browser/content/MarkdownView.js.map +1 -1
  24. package/dist/browser/content/PdfPreview.js +146 -79
  25. package/dist/browser/content/PdfPreview.js.map +1 -1
  26. package/dist/browser/content/Timeline.js +1038 -0
  27. package/dist/browser/content/Timeline.js.map +1 -0
  28. package/dist/browser/content/VideoPlayer.js +299 -0
  29. package/dist/browser/content/VideoPlayer.js.map +1 -0
  30. package/dist/browser/content/chart-inspection.js +7 -2
  31. package/dist/browser/content/chart-inspection.js.map +1 -1
  32. package/dist/browser/content/file-view-preview.js +2 -2
  33. package/dist/browser/content/file-view-preview.js.map +1 -1
  34. package/dist/browser/content/index.js +3 -0
  35. package/dist/browser/content/index.js.map +1 -1
  36. package/dist/browser/content/markdown-links.js +178 -0
  37. package/dist/browser/content/markdown-links.js.map +1 -0
  38. package/dist/browser/content/timeline-model.js +579 -0
  39. package/dist/browser/content/timeline-model.js.map +1 -0
  40. package/dist/browser/feedback/dialog-core.js +26 -14
  41. package/dist/browser/feedback/dialog-core.js.map +1 -1
  42. package/dist/browser/inputs/ChoiceChips.js +66 -0
  43. package/dist/browser/inputs/ChoiceChips.js.map +1 -0
  44. package/dist/browser/inputs/ChoiceGroups.js +53 -12
  45. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  46. package/dist/browser/inputs/FileDropTarget.js +129 -0
  47. package/dist/browser/inputs/FileDropTarget.js.map +1 -0
  48. package/dist/browser/inputs/FileInputs.js +84 -43
  49. package/dist/browser/inputs/FileInputs.js.map +1 -1
  50. package/dist/browser/inputs/SignatureInput.js +558 -0
  51. package/dist/browser/inputs/SignatureInput.js.map +1 -0
  52. package/dist/browser/inputs/emoji/EmojiPicker.js +841 -0
  53. package/dist/browser/inputs/emoji/EmojiPicker.js.map +1 -0
  54. package/dist/browser/inputs/emoji/emoji-data.js +1903 -0
  55. package/dist/browser/inputs/emoji/emoji-data.js.map +1 -0
  56. package/dist/browser/inputs/emoji/emoji-index.js +209 -0
  57. package/dist/browser/inputs/emoji/emoji-index.js.map +1 -0
  58. package/dist/browser/inputs/emoji/emoji-messages.js +64 -0
  59. package/dist/browser/inputs/emoji/emoji-messages.js.map +1 -0
  60. package/dist/browser/inputs/file-drop.js +338 -0
  61. package/dist/browser/inputs/file-drop.js.map +1 -0
  62. package/dist/browser/inputs/index.js +6 -0
  63. package/dist/browser/inputs/index.js.map +1 -1
  64. package/dist/browser/inputs/markdown/MarkdownEditor.js +72 -78
  65. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  66. package/dist/browser/inputs/markdown/actions.js +48 -2
  67. package/dist/browser/inputs/markdown/actions.js.map +1 -1
  68. package/dist/browser/inputs/markdown/code-zone.js +38 -2
  69. package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
  70. package/dist/browser/inputs/signature-messages.js +39 -0
  71. package/dist/browser/inputs/signature-messages.js.map +1 -0
  72. package/dist/browser/inputs/signature.js +208 -0
  73. package/dist/browser/inputs/signature.js.map +1 -0
  74. package/dist/browser/internal/render-error.js +49 -0
  75. package/dist/browser/internal/render-error.js.map +1 -0
  76. package/dist/browser/intl/messages.js +205 -4
  77. package/dist/browser/intl/messages.js.map +1 -1
  78. package/dist/browser/layout/AppWorkspace.js +483 -218
  79. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  80. package/dist/browser/layout/FloatingWindow.js +4 -1
  81. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  82. package/dist/browser/layout/Navigation.js +274 -197
  83. package/dist/browser/layout/Navigation.js.map +1 -1
  84. package/dist/browser/layout/SidebarItemPreview.js +5 -1
  85. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  86. package/dist/browser/layout/index.js.map +1 -1
  87. package/dist/browser/layout/navigation-model.js +2 -0
  88. package/dist/browser/layout/navigation-model.js.map +1 -1
  89. package/dist/browser/surfaces/NoticeCard.js +47 -44
  90. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  91. package/dist/browser/surfaces/ResourceCard.js +212 -0
  92. package/dist/browser/surfaces/ResourceCard.js.map +1 -0
  93. package/dist/browser/surfaces/index.js +1 -0
  94. package/dist/browser/surfaces/index.js.map +1 -1
  95. package/dist/licenses/emojibase-data.txt +21 -0
  96. package/dist/ssr/actions/ContextMenu.js +3 -1
  97. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  98. package/dist/ssr/actions/Dropdown.js +49 -12
  99. package/dist/ssr/actions/Dropdown.js.map +1 -1
  100. package/dist/ssr/actions/FilterChip.js +4 -1
  101. package/dist/ssr/actions/FilterChip.js.map +1 -1
  102. package/dist/ssr/chat/ChatComposer.js +823 -221
  103. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  104. package/dist/ssr/chat/ChatPrimitives.js +9 -6
  105. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  106. package/dist/ssr/chat/chat-behavior.js +9 -0
  107. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  108. package/dist/ssr/chat/index.js.map +1 -1
  109. package/dist/ssr/chat/types.js.map +1 -1
  110. package/dist/ssr/content/Calendar.js +183 -142
  111. package/dist/ssr/content/Calendar.js.map +1 -1
  112. package/dist/ssr/content/FileView.js +30 -6
  113. package/dist/ssr/content/FileView.js.map +1 -1
  114. package/dist/ssr/content/Lightbox.js +19 -5
  115. package/dist/ssr/content/Lightbox.js.map +1 -1
  116. package/dist/ssr/content/MarkdownView.js +9 -3
  117. package/dist/ssr/content/MarkdownView.js.map +1 -1
  118. package/dist/ssr/content/PdfPreview.js +77 -36
  119. package/dist/ssr/content/PdfPreview.js.map +1 -1
  120. package/dist/ssr/content/Timeline.js +804 -0
  121. package/dist/ssr/content/Timeline.js.map +1 -0
  122. package/dist/ssr/content/VideoPlayer.js +228 -0
  123. package/dist/ssr/content/VideoPlayer.js.map +1 -0
  124. package/dist/ssr/content/chart-inspection.js +7 -2
  125. package/dist/ssr/content/chart-inspection.js.map +1 -1
  126. package/dist/ssr/content/file-view-preview.js +2 -2
  127. package/dist/ssr/content/file-view-preview.js.map +1 -1
  128. package/dist/ssr/content/index.js +3 -0
  129. package/dist/ssr/content/index.js.map +1 -1
  130. package/dist/ssr/content/markdown-links.js +178 -0
  131. package/dist/ssr/content/markdown-links.js.map +1 -0
  132. package/dist/ssr/content/timeline-model.js +579 -0
  133. package/dist/ssr/content/timeline-model.js.map +1 -0
  134. package/dist/ssr/feedback/dialog-core.js +26 -14
  135. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  136. package/dist/ssr/inputs/ChoiceChips.js +66 -0
  137. package/dist/ssr/inputs/ChoiceChips.js.map +1 -0
  138. package/dist/ssr/inputs/ChoiceGroups.js +12 -4
  139. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  140. package/dist/ssr/inputs/FileDropTarget.js +103 -0
  141. package/dist/ssr/inputs/FileDropTarget.js.map +1 -0
  142. package/dist/ssr/inputs/FileInputs.js +49 -12
  143. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  144. package/dist/ssr/inputs/SignatureInput.js +404 -0
  145. package/dist/ssr/inputs/SignatureInput.js.map +1 -0
  146. package/dist/ssr/inputs/emoji/EmojiPicker.js +551 -0
  147. package/dist/ssr/inputs/emoji/EmojiPicker.js.map +1 -0
  148. package/dist/ssr/inputs/emoji/emoji-data.js +1903 -0
  149. package/dist/ssr/inputs/emoji/emoji-data.js.map +1 -0
  150. package/dist/ssr/inputs/emoji/emoji-index.js +209 -0
  151. package/dist/ssr/inputs/emoji/emoji-index.js.map +1 -0
  152. package/dist/ssr/inputs/emoji/emoji-messages.js +64 -0
  153. package/dist/ssr/inputs/emoji/emoji-messages.js.map +1 -0
  154. package/dist/ssr/inputs/file-drop.js +338 -0
  155. package/dist/ssr/inputs/file-drop.js.map +1 -0
  156. package/dist/ssr/inputs/index.js +6 -0
  157. package/dist/ssr/inputs/index.js.map +1 -1
  158. package/dist/ssr/inputs/markdown/MarkdownEditor.js +14 -2
  159. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  160. package/dist/ssr/inputs/markdown/actions.js +48 -2
  161. package/dist/ssr/inputs/markdown/actions.js.map +1 -1
  162. package/dist/ssr/inputs/markdown/code-zone.js +38 -2
  163. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
  164. package/dist/ssr/inputs/signature-messages.js +39 -0
  165. package/dist/ssr/inputs/signature-messages.js.map +1 -0
  166. package/dist/ssr/inputs/signature.js +208 -0
  167. package/dist/ssr/inputs/signature.js.map +1 -0
  168. package/dist/ssr/internal/render-error.js +49 -0
  169. package/dist/ssr/internal/render-error.js.map +1 -0
  170. package/dist/ssr/intl/messages.js +205 -4
  171. package/dist/ssr/intl/messages.js.map +1 -1
  172. package/dist/ssr/layout/AppWorkspace.js +264 -47
  173. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  174. package/dist/ssr/layout/FloatingWindow.js +4 -1
  175. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  176. package/dist/ssr/layout/Navigation.js +169 -122
  177. package/dist/ssr/layout/Navigation.js.map +1 -1
  178. package/dist/ssr/layout/SidebarItemPreview.js +5 -1
  179. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  180. package/dist/ssr/layout/index.js.map +1 -1
  181. package/dist/ssr/layout/navigation-model.js +2 -0
  182. package/dist/ssr/layout/navigation-model.js.map +1 -1
  183. package/dist/ssr/surfaces/NoticeCard.js +17 -12
  184. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  185. package/dist/ssr/surfaces/ResourceCard.js +115 -0
  186. package/dist/ssr/surfaces/ResourceCard.js.map +1 -0
  187. package/dist/ssr/surfaces/index.js +1 -0
  188. package/dist/ssr/surfaces/index.js.map +1 -1
  189. package/dist/styles.css +1 -1
  190. package/dist/types/actions/Dropdown.d.ts +13 -1
  191. package/dist/types/actions/FilterChip.d.ts +5 -0
  192. package/dist/types/chat/ChatComposer.d.ts +24 -1
  193. package/dist/types/chat/ChatPrimitives.d.ts +1 -1
  194. package/dist/types/chat/chat-behavior.d.ts +15 -0
  195. package/dist/types/chat/index.d.ts +1 -1
  196. package/dist/types/chat/types.d.ts +34 -0
  197. package/dist/types/content/Calendar.d.ts +28 -8
  198. package/dist/types/content/Lightbox.d.ts +8 -0
  199. package/dist/types/content/Timeline.d.ts +49 -0
  200. package/dist/types/content/VideoPlayer.d.ts +41 -0
  201. package/dist/types/content/index.d.ts +6 -2
  202. package/dist/types/content/markdown-links.d.ts +66 -0
  203. package/dist/types/content/timeline-model.d.ts +148 -0
  204. package/dist/types/feedback/dialog-core.d.ts +1 -1
  205. package/dist/types/inputs/ChoiceChips.d.ts +20 -0
  206. package/dist/types/inputs/ChoiceGroups.d.ts +11 -2
  207. package/dist/types/inputs/FileDropTarget.d.ts +23 -0
  208. package/dist/types/inputs/FileInputs.d.ts +8 -0
  209. package/dist/types/inputs/SignatureInput.d.ts +22 -0
  210. package/dist/types/inputs/emoji/EmojiPicker.d.ts +42 -0
  211. package/dist/types/inputs/emoji/emoji-data.d.ts +2 -0
  212. package/dist/types/inputs/emoji/emoji-index.d.ts +109 -0
  213. package/dist/types/inputs/emoji/emoji-messages.d.ts +30 -0
  214. package/dist/types/inputs/file-drop.d.ts +80 -0
  215. package/dist/types/inputs/index.d.ts +12 -0
  216. package/dist/types/inputs/markdown/actions.d.ts +4 -0
  217. package/dist/types/inputs/markdown/code-zone.d.ts +7 -0
  218. package/dist/types/inputs/signature-messages.d.ts +11 -0
  219. package/dist/types/inputs/signature.d.ts +72 -0
  220. package/dist/types/internal/render-error.d.ts +13 -0
  221. package/dist/types/intl/messages.d.ts +101 -0
  222. package/dist/types/layout/AppWorkspace.d.ts +38 -0
  223. package/dist/types/layout/SidebarItemPreview.d.ts +2 -0
  224. package/dist/types/layout/index.d.ts +2 -2
  225. package/dist/types/layout/navigation-model.d.ts +18 -0
  226. package/dist/types/surfaces/ResourceCard.d.ts +31 -0
  227. package/dist/types/surfaces/index.d.ts +2 -0
  228. package/package.json +5 -4
@@ -32,30 +32,35 @@ var _tmpl$ = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspac
32
32
  _tmpl$12 = /*#__PURE__*/_$template(`<section><!$><!/><div class=k2b-app-workspace__sidebar-section-content>`),
33
33
  _tmpl$13 = /*#__PURE__*/_$template(`<h2>`),
34
34
  _tmpl$14 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__sidebar-item-actions>`),
35
- _tmpl$15 = /*#__PURE__*/_$template(`<button type=button>`),
36
- _tmpl$16 = /*#__PURE__*/_$template(`<a>`),
37
- _tmpl$17 = /*#__PURE__*/_$template(`<div><!$><!/><!$><!/>`),
38
- _tmpl$18 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-icon aria-hidden=true>`),
39
- _tmpl$19 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-context-meta>`),
40
- _tmpl$20 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-context><span class=k2b-app-workspace__sidebar-item-context-label></span><!$><!/>`),
41
- _tmpl$21 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-description>`),
42
- _tmpl$22 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-copy><!$><!/><span class=k2b-app-workspace__sidebar-item-label><span class=k2b-app-workspace__sidebar-item-label-text></span></span><!$><!/>`),
43
- _tmpl$23 = /*#__PURE__*/_$template(`<i>`),
44
- _tmpl$24 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-meta>`),
45
- _tmpl$25 = /*#__PURE__*/_$template(`<a class=k2b-app-workspace__sidebar-item-action>`),
46
- _tmpl$26 = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__sidebar-item-action>`),
47
- _tmpl$27 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-icon aria-hidden=true><i>`),
48
- _tmpl$28 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-label><span class=k2b-app-workspace__sidebar-item-label-text>`),
49
- _tmpl$29 = /*#__PURE__*/_$template(`<span>`),
50
- _tmpl$30 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__nav-tree-toggle data-k2b-nav-tree-toggle aria-hidden=true><i>`),
51
- _tmpl$31 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-group role=group>`),
52
- _tmpl$32 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-node role=treeitem><!$><!/><!$><!/>`),
53
- _tmpl$33 = /*#__PURE__*/_$template(`<div role=tree>`),
54
- _tmpl$34 = /*#__PURE__*/_$template(`<section><!$><!/><div class=k2b-app-workspace__sidebar-icon-grid>`),
55
- _tmpl$35 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
56
- _tmpl$36 = /*#__PURE__*/_$template(`<div data-k2b-app-workspace>`);
35
+ _tmpl$15 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-mention aria-hidden=true>@`),
36
+ _tmpl$16 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-muted aria-hidden=true><i class="ti ti-bell-off">`),
37
+ _tmpl$17 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-count>`),
38
+ _tmpl$18 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status><!$><!/><!$><!/><span class=k2b-app-workspace__sidebar-status-unread aria-hidden=true></span><span class=k2b-sr-only>, <!$><!/>`),
39
+ _tmpl$19 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-status-dot>`),
40
+ _tmpl$20 = /*#__PURE__*/_$template(`<button type=button>`),
41
+ _tmpl$21 = /*#__PURE__*/_$template(`<a>`),
42
+ _tmpl$22 = /*#__PURE__*/_$template(`<div><!$><!/><!$><!/>`),
43
+ _tmpl$23 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-icon aria-hidden=true>`),
44
+ _tmpl$24 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-context-meta>`),
45
+ _tmpl$25 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-context><span class=k2b-app-workspace__sidebar-item-context-label></span><!$><!/>`),
46
+ _tmpl$26 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-description>`),
47
+ _tmpl$27 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-copy><!$><!/><span class=k2b-app-workspace__sidebar-item-label><span class=k2b-app-workspace__sidebar-item-label-text></span></span><!$><!/>`),
48
+ _tmpl$28 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-meta>`),
49
+ _tmpl$29 = /*#__PURE__*/_$template(`<i>`),
50
+ _tmpl$30 = /*#__PURE__*/_$template(`<a class=k2b-app-workspace__sidebar-item-action>`),
51
+ _tmpl$31 = /*#__PURE__*/_$template(`<button type=button class=k2b-app-workspace__sidebar-item-action>`),
52
+ _tmpl$32 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-icon><i>`),
53
+ _tmpl$33 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__sidebar-item-label><span class=k2b-app-workspace__sidebar-item-label-text>`),
54
+ _tmpl$34 = /*#__PURE__*/_$template(`<span>`),
55
+ _tmpl$35 = /*#__PURE__*/_$template(`<span class=k2b-app-workspace__nav-tree-toggle data-k2b-nav-tree-toggle aria-hidden=true><i>`),
56
+ _tmpl$36 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-group role=group>`),
57
+ _tmpl$37 = /*#__PURE__*/_$template(`<div class=k2b-app-workspace__nav-tree-node role=treeitem><!$><!/><!$><!/>`),
58
+ _tmpl$38 = /*#__PURE__*/_$template(`<div role=tree>`),
59
+ _tmpl$39 = /*#__PURE__*/_$template(`<section><!$><!/><div class=k2b-app-workspace__sidebar-icon-grid>`),
60
+ _tmpl$40 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
61
+ _tmpl$41 = /*#__PURE__*/_$template(`<div data-k2b-app-workspace>`);
57
62
  import { Link } from "@k2b/ssr/nav";
58
- import { children, createContext, createMemo, createSignal, createUniqueId, For, mergeProps, onCleanup, onMount, Show, useContext } from "solid-js";
63
+ import { children, createContext, createEffect, createMemo, createSignal, createUniqueId, For, mergeProps, onCleanup, onMount, Show, useContext } from "solid-js";
59
64
  import { useUiMessages } from "../intl/messages";
60
65
  import { APP_WORKSPACE_SIDEBAR_HIDE_EVENT, installAppWorkspaceController } from "./app-workspace-controller";
61
66
  import { 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_PANE_DEFAULT, APP_WORKSPACE_PANE_MAX, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_SIDEBAR_COLLAPSED, APP_WORKSPACE_SIDEBAR_DEFAULT, APP_WORKSPACE_SIDEBAR_MAX, APP_WORKSPACE_SIDEBAR_MIN, appWorkspaceLayoutStyle, appWorkspacePanelVariable } from "./app-workspace-state";
@@ -84,10 +89,11 @@ const sidebarChildSlot = value => Boolean(value && typeof value === "object" &&
84
89
  const sidebarItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && [SIDEBAR_ITEM_ICON, SIDEBAR_ITEM_LABEL, SIDEBAR_ITEM_META, SIDEBAR_ITEM_ACTION].includes(value.kind));
85
90
  const navTreeItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === NAV_TREE_ITEM);
86
91
  function ResizeHandle(props) {
92
+ const messages = useUiMessages();
87
93
  return (() => {
88
94
  var _el$ = _$getNextElement(_tmpl$);
89
95
  _$effect(_p$ => {
90
- var _v$ = props.label ?? (props.kind === "sidebar" ? "Resize navigation" : props.kind === "pane" ? "Resize workspace pane" : props.kind === "detail" ? "Resize detail panel" : "Resize bottom drawer"),
96
+ var _v$ = props.label ?? (props.kind === "sidebar" ? messages().resizeNavigation : props.kind === "pane" ? messages().resizeWorkspacePane : props.kind === "detail" ? messages().resizeDetailPanel : messages().resizeBottomDrawer),
91
97
  _v$2 = props.controls,
92
98
  _v$3 = props.kind === "drawer" ? "horizontal" : "vertical",
93
99
  _v$4 = props.minSize,
@@ -135,6 +141,14 @@ function ResizeHandle(props) {
135
141
  return _el$;
136
142
  })();
137
143
  }
144
+
145
+ /**
146
+ * Unread state for the trailing `meta` slot. Every mark keeps a fixed width,
147
+ * so the row keeps its height and the label its start in every state.
148
+ */
149
+
150
+ /** One requested place for an item among its unchanged siblings. */
151
+
138
152
  const modeAttrs = mode => mode && mode !== "always" ? {
139
153
  "data-sidebar-mode": mode
140
154
  } : {};
@@ -146,6 +160,13 @@ const scrollAttrs = key => key ? {
146
160
  "data-scroll-preserve": key
147
161
  } : {};
148
162
  const iconClass = (icon, fallback = "ti-circle") => icon?.startsWith("ti ") ? icon : `ti ${icon || fallback}`;
163
+ /** A named icon is an image screen readers announce; any other icon is decoration. */
164
+ const iconAccessibility = label => label ? {
165
+ role: "img",
166
+ "aria-label": label
167
+ } : {
168
+ "aria-hidden": true
169
+ };
149
170
  function AppWorkspaceMainPane(props) {
150
171
  return {
151
172
  kind: MAIN_PANE,
@@ -771,6 +792,78 @@ const AppWorkspaceSidebarItemActions = props => (() => {
771
792
  _$effect(() => _$setAttribute(_el$28, "data-visibility", props.visibility === "hover" ? "hover" : undefined));
772
793
  return _el$28;
773
794
  })();
795
+ const AppWorkspaceSidebarItemStatus = props => {
796
+ const messages = useUiMessages();
797
+ const count = () => typeof props.unread === "number" && props.unread >= 1 ? Math.floor(props.unread) : 0;
798
+ const dot = () => props.unread === true;
799
+ // The marks are decorative; the row's accessible name gets one phrase instead,
800
+ // which says no more than the "99+" a capped count shows.
801
+ const description = () => [count() > 99 ? messages().sidebarUnreadMany : count() ? messages().sidebarUnread({
802
+ count: count()
803
+ }) : dot() ? messages().sidebarNewActivity : "", props.mention ? messages().sidebarMentioned : "", props.muted ? messages().sidebarMuted : ""].filter(Boolean).join(", ");
804
+ // The unread slot stays reserved at the end, and the marks that change most
805
+ // often sit outermost, so new activity or a mention never moves another mark.
806
+ return _$createComponent(Show, {
807
+ get when() {
808
+ return description();
809
+ },
810
+ get children() {
811
+ var _el$29 = _$getNextElement(_tmpl$18),
812
+ _el$38 = _el$29.firstChild,
813
+ [_el$39, _co$6] = _$getNextMarker(_el$38.nextSibling),
814
+ _el$40 = _el$39.nextSibling,
815
+ [_el$41, _co$7] = _$getNextMarker(_el$40.nextSibling),
816
+ _el$32 = _el$41.nextSibling,
817
+ _el$34 = _el$32.nextSibling,
818
+ _el$35 = _el$34.firstChild,
819
+ _el$36 = _el$35.nextSibling,
820
+ [_el$37, _co$5] = _$getNextMarker(_el$36.nextSibling);
821
+ _$insert(_el$29, _$createComponent(Show, {
822
+ get when() {
823
+ return props.mention;
824
+ },
825
+ get children() {
826
+ return _$getNextElement(_tmpl$15);
827
+ }
828
+ }), _el$39, _co$6);
829
+ _$insert(_el$29, _$createComponent(Show, {
830
+ get when() {
831
+ return props.muted;
832
+ },
833
+ get children() {
834
+ return _$getNextElement(_tmpl$16);
835
+ }
836
+ }), _el$41, _co$7);
837
+ _$insert(_el$32, _$createComponent(Show, {
838
+ get when() {
839
+ return count();
840
+ },
841
+ get fallback() {
842
+ return _$createComponent(Show, {
843
+ get when() {
844
+ return dot();
845
+ },
846
+ get children() {
847
+ return _$getNextElement(_tmpl$19);
848
+ }
849
+ });
850
+ },
851
+ get children() {
852
+ var _el$33 = _$getNextElement(_tmpl$17);
853
+ _$insert(_el$33, (() => {
854
+ var _c$ = _$memo(() => count() > 99);
855
+ return () => _c$() ? "99+" : count();
856
+ })());
857
+ _$effect(() => _$setAttribute(_el$33, "data-mention", props.mention ? "true" : undefined));
858
+ return _el$33;
859
+ }
860
+ }));
861
+ _$insert(_el$34, description, _el$37, _co$5);
862
+ _$effect(() => _$setAttribute(_el$29, "data-unread", count() ? "count" : dot() ? "dot" : undefined));
863
+ return _el$29;
864
+ }
865
+ });
866
+ };
774
867
  /** Shared visual and semantic row frame for flat sidebar items and tree items. */
775
868
  function AppWorkspaceSidebarRow(props) {
776
869
  const className = () => `k2b-app-workspace__sidebar-item ${props.hasActions ? "has-action" : ""} ${props.active ? props.activeClass ?? "is-active" : ""} ${props.class ?? ""}`;
@@ -796,8 +889,8 @@ function AppWorkspaceSidebarRow(props) {
796
889
  },
797
890
  get fallback() {
798
891
  return (() => {
799
- var _el$29 = _$getNextElement(_tmpl$15);
800
- _$spread(_el$29, _$mergeProps(attrs, {
892
+ var _el$43 = _$getNextElement(_tmpl$20);
893
+ _$spread(_el$43, _$mergeProps(attrs, {
801
894
  get tabIndex() {
802
895
  return props.tabIndex;
803
896
  },
@@ -808,9 +901,9 @@ function AppWorkspaceSidebarRow(props) {
808
901
  return props.onClick;
809
902
  }
810
903
  }), false, true);
811
- _$insert(_el$29, () => props.children);
904
+ _$insert(_el$43, () => props.children);
812
905
  _$runHydrationEvents();
813
- return _el$29;
906
+ return _el$43;
814
907
  })();
815
908
  },
816
909
  get children() {
@@ -820,8 +913,8 @@ function AppWorkspaceSidebarRow(props) {
820
913
  },
821
914
  get fallback() {
822
915
  return (() => {
823
- var _el$30 = _$getNextElement(_tmpl$16);
824
- _$spread(_el$30, _$mergeProps({
916
+ var _el$44 = _$getNextElement(_tmpl$21);
917
+ _$spread(_el$44, _$mergeProps({
825
918
  get href() {
826
919
  return props.href;
827
920
  }
@@ -836,9 +929,9 @@ function AppWorkspaceSidebarRow(props) {
836
929
  return props.onClick;
837
930
  }
838
931
  }), false, true);
839
- _$insert(_el$30, () => props.children);
932
+ _$insert(_el$44, () => props.children);
840
933
  _$runHydrationEvents();
841
- return _el$30;
934
+ return _el$44;
842
935
  })();
843
936
  },
844
937
  get children() {
@@ -884,22 +977,22 @@ function AppWorkspaceSidebarRow(props) {
884
977
  });
885
978
  },
886
979
  get children() {
887
- var _el$31 = _$getNextElement(_tmpl$17),
888
- _el$32 = _el$31.firstChild,
889
- [_el$33, _co$5] = _$getNextMarker(_el$32.nextSibling),
890
- _el$34 = _el$33.nextSibling,
891
- [_el$35, _co$6] = _$getNextMarker(_el$34.nextSibling);
892
- _$spread(_el$31, _$mergeProps(common, {
980
+ var _el$45 = _$getNextElement(_tmpl$22),
981
+ _el$46 = _el$45.firstChild,
982
+ [_el$47, _co$8] = _$getNextMarker(_el$46.nextSibling),
983
+ _el$48 = _el$47.nextSibling,
984
+ [_el$49, _co$9] = _$getNextMarker(_el$48.nextSibling);
985
+ _$spread(_el$45, _$mergeProps(common, {
893
986
  get ["data-disabled"]() {
894
987
  return props.disabled ? "true" : undefined;
895
988
  }
896
989
  }), false, true);
897
- _$insert(_el$31, _$createComponent(Control, {
990
+ _$insert(_el$45, _$createComponent(Control, {
898
991
  grouped: true
899
- }), _el$33, _co$5);
900
- _$insert(_el$31, () => props.actions, _el$35, _co$6);
992
+ }), _el$47, _co$8);
993
+ _$insert(_el$45, () => props.actions, _el$49, _co$9);
901
994
  _$runHydrationEvents();
902
- return _el$31;
995
+ return _el$45;
903
996
  }
904
997
  });
905
998
  }
@@ -917,7 +1010,11 @@ function AppWorkspaceSidebarItem(props) {
917
1010
  const label = () => labelSlot()?.children ?? (legacy().length === 1 ? legacy()[0] : legacy());
918
1011
  const icon = () => iconSlot()?.icon ?? props.icon;
919
1012
  const iconContent = () => iconSlot()?.children;
920
- const meta = () => metaSlot()?.children ?? props.meta;
1013
+ // Resolved first, so a component that renders nothing, such as a status with
1014
+ // nothing to show, leaves no empty slot in the browser either.
1015
+ const meta = children(() => metaSlot()?.children ?? props.meta);
1016
+ const hasMeta = () => meta.toArray().some(Boolean);
1017
+ const metaId = createUniqueId();
921
1018
  const metaVisibility = () => metaSlot()?.visibility ?? props.metaVisibility;
922
1019
  const customActions = () => resolvedActions();
923
1020
  const hasCustomActions = () => Boolean(customActions());
@@ -927,68 +1024,77 @@ function AppWorkspaceSidebarItem(props) {
927
1024
  return iconContent() || icon();
928
1025
  },
929
1026
  get children() {
930
- var _el$36 = _$getNextElement(_tmpl$18);
931
- _$insert(_el$36, () => iconContent() ?? (() => {
932
- var _el$50 = _$getNextElement(_tmpl$23);
933
- _$effect(() => _$className(_el$50, iconClass(icon())));
934
- return _el$50;
1027
+ var _el$50 = _$getNextElement(_tmpl$23);
1028
+ _$insert(_el$50, () => iconContent() ?? (() => {
1029
+ var _el$65 = _$getNextElement(_tmpl$29);
1030
+ _$effect(() => _$className(_el$65, iconClass(icon())));
1031
+ return _el$65;
935
1032
  })());
936
- return _el$36;
1033
+ return _el$50;
937
1034
  }
938
1035
  }), (() => {
939
- var _el$37 = _$getNextElement(_tmpl$22),
940
- _el$46 = _el$37.firstChild,
941
- [_el$47, _co$8] = _$getNextMarker(_el$46.nextSibling),
942
- _el$43 = _el$47.nextSibling,
943
- _el$44 = _el$43.firstChild,
944
- _el$48 = _el$43.nextSibling,
945
- [_el$49, _co$9] = _$getNextMarker(_el$48.nextSibling);
946
- _$insert(_el$37, _$createComponent(Show, {
1036
+ var _el$51 = _$getNextElement(_tmpl$27),
1037
+ _el$60 = _el$51.firstChild,
1038
+ [_el$61, _co$1] = _$getNextMarker(_el$60.nextSibling),
1039
+ _el$57 = _el$61.nextSibling,
1040
+ _el$58 = _el$57.firstChild,
1041
+ _el$62 = _el$57.nextSibling,
1042
+ [_el$63, _co$10] = _$getNextMarker(_el$62.nextSibling);
1043
+ _$insert(_el$51, _$createComponent(Show, {
947
1044
  get when() {
948
1045
  return props.context || props.contextMeta;
949
1046
  },
950
1047
  get children() {
951
- var _el$38 = _$getNextElement(_tmpl$20),
952
- _el$39 = _el$38.firstChild,
953
- _el$41 = _el$39.nextSibling,
954
- [_el$42, _co$7] = _$getNextMarker(_el$41.nextSibling);
955
- _$insert(_el$39, () => props.context);
956
- _$insert(_el$38, _$createComponent(Show, {
1048
+ var _el$52 = _$getNextElement(_tmpl$25),
1049
+ _el$53 = _el$52.firstChild,
1050
+ _el$55 = _el$53.nextSibling,
1051
+ [_el$56, _co$0] = _$getNextMarker(_el$55.nextSibling);
1052
+ _$insert(_el$53, () => props.context);
1053
+ _$insert(_el$52, _$createComponent(Show, {
957
1054
  get when() {
958
1055
  return props.contextMeta;
959
1056
  },
960
1057
  get children() {
961
- var _el$40 = _$getNextElement(_tmpl$19);
962
- _$insert(_el$40, () => props.contextMeta);
963
- return _el$40;
1058
+ var _el$54 = _$getNextElement(_tmpl$24);
1059
+ _$insert(_el$54, () => props.contextMeta);
1060
+ return _el$54;
964
1061
  }
965
- }), _el$42, _co$7);
966
- return _el$38;
1062
+ }), _el$56, _co$0);
1063
+ return _el$52;
967
1064
  }
968
- }), _el$47, _co$8);
969
- _$insert(_el$44, () => label());
970
- _$insert(_el$37, _$createComponent(Show, {
1065
+ }), _el$61, _co$1);
1066
+ _$insert(_el$58, () => label());
1067
+ _$insert(_el$51, _$createComponent(Show, {
971
1068
  get when() {
972
1069
  return props.description;
973
1070
  },
974
1071
  get children() {
975
- var _el$45 = _$getNextElement(_tmpl$21);
976
- _$insert(_el$45, () => props.description);
977
- return _el$45;
1072
+ var _el$59 = _$getNextElement(_tmpl$26);
1073
+ _$insert(_el$59, () => props.description);
1074
+ return _el$59;
978
1075
  }
979
- }), _el$49, _co$9);
980
- _$effect(() => _$setAttribute(_el$43, "data-marquee", labelSlot()?.marquee ?? (props.variant ?? "row") === "row" ? "true" : "false"));
981
- return _el$37;
1076
+ }), _el$63, _co$10);
1077
+ _$effect(() => _$setAttribute(_el$57, "data-marquee", labelSlot()?.marquee ?? (props.variant ?? "row") === "row" ? "true" : "false"));
1078
+ return _el$51;
982
1079
  })(), _$createComponent(Show, {
983
1080
  get when() {
984
- return meta();
1081
+ return hasMeta();
985
1082
  },
986
- children: value => (() => {
987
- var _el$51 = _$getNextElement(_tmpl$24);
988
- _$insert(_el$51, value);
989
- _$effect(() => _$setAttribute(_el$51, "data-visibility", metaVisibility() === "hover" ? "hover" : undefined));
990
- return _el$51;
991
- })()
1083
+ get children() {
1084
+ var _el$64 = _$getNextElement(_tmpl$28);
1085
+ _$insert(_el$64, meta);
1086
+ _$effect(_p$ => {
1087
+ var _v$49 = props.preview?.trigger === "row" ? metaId : undefined,
1088
+ _v$50 = metaVisibility() === "hover" ? "hover" : undefined;
1089
+ _v$49 !== _p$.e && _$setAttribute(_el$64, "id", _p$.e = _v$49);
1090
+ _v$50 !== _p$.t && _$setAttribute(_el$64, "data-visibility", _p$.t = _v$50);
1091
+ return _p$;
1092
+ }, {
1093
+ e: undefined,
1094
+ t: undefined
1095
+ });
1096
+ return _el$64;
1097
+ }
992
1098
  })];
993
1099
  const singleAction = () => {
994
1100
  const label = () => actionSlot()?.label ?? props.actionLabel ?? messages().rowAction;
@@ -1003,9 +1109,9 @@ function AppWorkspaceSidebarItem(props) {
1003
1109
  props.onActionClick?.(event);
1004
1110
  };
1005
1111
  const content = () => actionSlot()?.children ?? (() => {
1006
- var _el$52 = _$getNextElement(_tmpl$23);
1007
- _$effect(() => _$className(_el$52, iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots")));
1008
- return _el$52;
1112
+ var _el$66 = _$getNextElement(_tmpl$29);
1113
+ _$effect(() => _$className(_el$66, iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots")));
1114
+ return _el$66;
1009
1115
  })();
1010
1116
  return _$createComponent(Show, {
1011
1117
  get when() {
@@ -1018,16 +1124,16 @@ function AppWorkspaceSidebarItem(props) {
1018
1124
  },
1019
1125
  get fallback() {
1020
1126
  return (() => {
1021
- var _el$54 = _$getNextElement(_tmpl$26);
1022
- _el$54.$$click = select;
1023
- _$insert(_el$54, content);
1127
+ var _el$68 = _$getNextElement(_tmpl$31);
1128
+ _el$68.$$click = select;
1129
+ _$insert(_el$68, content);
1024
1130
  _$effect(_p$ => {
1025
- var _v$52 = actionSlot()?.disabled,
1026
- _v$53 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1027
- _v$54 = label();
1028
- _v$52 !== _p$.e && _$setProperty(_el$54, "disabled", _p$.e = _v$52);
1029
- _v$53 !== _p$.t && _$setAttribute(_el$54, "data-visibility", _p$.t = _v$53);
1030
- _v$54 !== _p$.a && _$setAttribute(_el$54, "aria-label", _p$.a = _v$54);
1131
+ var _v$54 = actionSlot()?.disabled,
1132
+ _v$55 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1133
+ _v$56 = label();
1134
+ _v$54 !== _p$.e && _$setProperty(_el$68, "disabled", _p$.e = _v$54);
1135
+ _v$55 !== _p$.t && _$setAttribute(_el$68, "data-visibility", _p$.t = _v$55);
1136
+ _v$56 !== _p$.a && _$setAttribute(_el$68, "aria-label", _p$.a = _v$56);
1031
1137
  return _p$;
1032
1138
  }, {
1033
1139
  e: undefined,
@@ -1035,20 +1141,20 @@ function AppWorkspaceSidebarItem(props) {
1035
1141
  a: undefined
1036
1142
  });
1037
1143
  _$runHydrationEvents();
1038
- return _el$54;
1144
+ return _el$68;
1039
1145
  })();
1040
1146
  },
1041
1147
  get children() {
1042
- var _el$53 = _$getNextElement(_tmpl$25);
1043
- _el$53.$$click = select;
1044
- _$insert(_el$53, content);
1148
+ var _el$67 = _$getNextElement(_tmpl$30);
1149
+ _el$67.$$click = select;
1150
+ _$insert(_el$67, content);
1045
1151
  _$effect(_p$ => {
1046
- var _v$49 = actionSlot()?.href,
1047
- _v$50 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1048
- _v$51 = label();
1049
- _v$49 !== _p$.e && _$setAttribute(_el$53, "href", _p$.e = _v$49);
1050
- _v$50 !== _p$.t && _$setAttribute(_el$53, "data-visibility", _p$.t = _v$50);
1051
- _v$51 !== _p$.a && _$setAttribute(_el$53, "aria-label", _p$.a = _v$51);
1152
+ var _v$51 = actionSlot()?.href,
1153
+ _v$52 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1154
+ _v$53 = label();
1155
+ _v$51 !== _p$.e && _$setAttribute(_el$67, "href", _p$.e = _v$51);
1156
+ _v$52 !== _p$.t && _$setAttribute(_el$67, "data-visibility", _p$.t = _v$52);
1157
+ _v$53 !== _p$.a && _$setAttribute(_el$67, "aria-label", _p$.a = _v$53);
1052
1158
  return _p$;
1053
1159
  }, {
1054
1160
  e: undefined,
@@ -1056,7 +1162,7 @@ function AppWorkspaceSidebarItem(props) {
1056
1162
  a: undefined
1057
1163
  });
1058
1164
  _$runHydrationEvents();
1059
- return _el$53;
1165
+ return _el$67;
1060
1166
  }
1061
1167
  });
1062
1168
  }
@@ -1079,6 +1185,9 @@ function AppWorkspaceSidebarItem(props) {
1079
1185
  get viewportSize() {
1080
1186
  return preview().viewportSize;
1081
1187
  },
1188
+ get describedBy() {
1189
+ return hasMeta() ? metaId : undefined;
1190
+ },
1082
1191
  get onOpenChange() {
1083
1192
  return preview().onOpenChange;
1084
1193
  },
@@ -1153,6 +1262,27 @@ const AppWorkspaceNavTreeItem = props => ({
1153
1262
  kind: NAV_TREE_ITEM,
1154
1263
  ...props
1155
1264
  });
1265
+ const NAV_TREE_DRAG_TYPE = "application/x-k2b-nav-tree-item";
1266
+ const callDragHandler = (handler, event) => {
1267
+ if (typeof handler === "function") handler(event);else handler?.[0](handler[1], event);
1268
+ };
1269
+
1270
+ /**
1271
+ * The move that puts the sibling at `from` into the gap before `slot`
1272
+ * (`siblings.length` is the gap after the last one), or `null` when its place
1273
+ * would not change or it would pass an item that is not movable.
1274
+ */
1275
+ const navTreeMove = (siblings, from, slot, parentId) => {
1276
+ if (from < 0 || slot < 0 || slot > siblings.length || slot === from || slot === from + 1) return null;
1277
+ const passed = slot < from ? siblings.slice(slot, from) : siblings.slice(from + 1, slot);
1278
+ if (passed.some(sibling => !sibling.movable)) return null;
1279
+ return {
1280
+ id: siblings[from].id,
1281
+ parentId,
1282
+ beforeId: siblings[slot]?.id ?? null,
1283
+ afterId: siblings[slot - 1]?.id ?? null
1284
+ };
1285
+ };
1156
1286
  const AppWorkspaceNavTree = props => {
1157
1287
  let root;
1158
1288
  const resolved = children(() => props.children);
@@ -1197,16 +1327,48 @@ const AppWorkspaceNavTree = props => {
1197
1327
  });
1198
1328
  };
1199
1329
 
1330
+ // Reordering: the dragged item and the gap the pointer marks. The application renders the new
1331
+ // order; the item moved by keyboard takes focus back when its row mounts or changes place.
1332
+ const [dragged, setDragged] = createSignal(null);
1333
+ const [dropTarget, setDropTarget] = createSignal(null);
1334
+ let claimedDragOver = null;
1335
+ let refocusId = null;
1336
+ const endDrag = () => {
1337
+ setDragged(null);
1338
+ setDropTarget(null);
1339
+ };
1340
+ const requestMove = (move, keepFocus) => {
1341
+ if (!move || !props.onMove) return;
1342
+ refocusId = keepFocus ? move.id : null;
1343
+ props.onMove(move);
1344
+ };
1345
+
1200
1346
  // Items arrive through an accessor so a changed nested list reconciles rows by identity instead of rebuilding the list.
1201
- const renderItems = (value, depth, parentId) => _$createComponent(For, {
1347
+ const renderItems = (siblings, depth, parentId) => _$createComponent(For, {
1202
1348
  get each() {
1203
- return navTreeItems(value());
1349
+ return siblings();
1204
1350
  },
1205
- children: item => {
1351
+ children: (item, place) => {
1206
1352
  const nested = createMemo(() => navTreeItems(item.children));
1207
1353
  const hasChildren = () => nested().length > 0;
1208
1354
  const selected = () => props.selectedId === item.id;
1355
+ const siblingIndex = id => siblings().findIndex(sibling => sibling.id === id);
1356
+ const movable = () => Boolean(props.onMove && item.movable && !item.disabled);
1209
1357
  let treeItem;
1358
+ const ownRow = () => treeItem?.firstElementChild;
1359
+
1360
+ // A new row for the moved item, or the same row at its new place: moving a focused row drops its focus.
1361
+ createEffect(() => {
1362
+ place();
1363
+ if (refocusId !== item.id) return;
1364
+ queueMicrotask(() => {
1365
+ if (refocusId !== item.id || !treeItem?.isConnected) return;
1366
+ const active = treeItem.ownerDocument.activeElement;
1367
+ if (!active || active === treeItem.ownerDocument.body) treeItem.focus({
1368
+ preventScroll: true
1369
+ });
1370
+ });
1371
+ });
1210
1372
  const activate = event => {
1211
1373
  if (item.disabled) return;
1212
1374
  treeItem?.focus({
@@ -1239,6 +1401,13 @@ const AppWorkspaceNavTree = props => {
1239
1401
  };
1240
1402
  const onKeyDown = event => {
1241
1403
  if (event.target !== event.currentTarget) return;
1404
+ if (event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey && (event.key === "ArrowUp" || event.key === "ArrowDown")) {
1405
+ if (!movable()) return;
1406
+ event.preventDefault();
1407
+ const from = siblingIndex(item.id);
1408
+ requestMove(navTreeMove(siblings(), from, event.key === "ArrowUp" ? from - 1 : from + 2, parentId ?? null), true);
1409
+ return;
1410
+ }
1242
1411
  if (event.altKey || event.ctrlKey || event.metaKey) return;
1243
1412
  const items = treeItemElements();
1244
1413
  const index = items.indexOf(event.currentTarget);
@@ -1292,53 +1461,50 @@ const AppWorkspaceNavTree = props => {
1292
1461
  return rowIcon();
1293
1462
  },
1294
1463
  get children() {
1295
- var _el$55 = _$getNextElement(_tmpl$27),
1296
- _el$56 = _el$55.firstChild;
1297
- _$effect(_p$ => {
1298
- var _v$55 = usesIconDisclosure() ? "" : undefined,
1299
- _v$56 = iconClass(rowIcon());
1300
- _v$55 !== _p$.e && _$setAttribute(_el$55, "data-k2b-nav-tree-toggle", _p$.e = _v$55);
1301
- _v$56 !== _p$.t && _$className(_el$56, _p$.t = _v$56);
1302
- return _p$;
1303
- }, {
1304
- e: undefined,
1305
- t: undefined
1306
- });
1307
- return _el$55;
1464
+ var _el$69 = _$getNextElement(_tmpl$32),
1465
+ _el$70 = _el$69.firstChild;
1466
+ _$spread(_el$69, _$mergeProps({
1467
+ get ["data-k2b-nav-tree-toggle"]() {
1468
+ return usesIconDisclosure() ? "" : undefined;
1469
+ }
1470
+ }, () => iconAccessibility(item.iconLabel)), false, true);
1471
+ _$effect(() => _$className(_el$70, iconClass(rowIcon())));
1472
+ _$runHydrationEvents();
1473
+ return _el$69;
1308
1474
  }
1309
1475
  }), (() => {
1310
- var _el$57 = _$getNextElement(_tmpl$28),
1311
- _el$58 = _el$57.firstChild;
1312
- _$insert(_el$58, () => item.label);
1313
- return _el$57;
1476
+ var _el$71 = _$getNextElement(_tmpl$33),
1477
+ _el$72 = _el$71.firstChild;
1478
+ _$insert(_el$72, () => item.label);
1479
+ return _el$71;
1314
1480
  })(), _$createComponent(Show, {
1315
1481
  get when() {
1316
1482
  return item.meta !== undefined;
1317
1483
  },
1318
1484
  get children() {
1319
- var _el$59 = _$getNextElement(_tmpl$29);
1320
- _$insert(_el$59, () => item.meta);
1485
+ var _el$73 = _$getNextElement(_tmpl$34);
1486
+ _$insert(_el$73, () => item.meta);
1321
1487
  _$effect(_p$ => {
1322
1488
  var _v$57 = `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`,
1323
1489
  _v$58 = item.metaVisibility === "hover" ? "hover" : undefined;
1324
- _v$57 !== _p$.e && _$className(_el$59, _p$.e = _v$57);
1325
- _v$58 !== _p$.t && _$setAttribute(_el$59, "data-visibility", _p$.t = _v$58);
1490
+ _v$57 !== _p$.e && _$className(_el$73, _p$.e = _v$57);
1491
+ _v$58 !== _p$.t && _$setAttribute(_el$73, "data-visibility", _p$.t = _v$58);
1326
1492
  return _p$;
1327
1493
  }, {
1328
1494
  e: undefined,
1329
1495
  t: undefined
1330
1496
  });
1331
- return _el$59;
1497
+ return _el$73;
1332
1498
  }
1333
1499
  }), _$createComponent(Show, {
1334
1500
  get when() {
1335
1501
  return _$memo(() => !!hasChildren())() && !usesIconDisclosure();
1336
1502
  },
1337
1503
  get children() {
1338
- var _el$60 = _$getNextElement(_tmpl$30),
1339
- _el$61 = _el$60.firstChild;
1340
- _$effect(() => _$className(_el$61, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`));
1341
- return _el$60;
1504
+ var _el$74 = _$getNextElement(_tmpl$35),
1505
+ _el$75 = _el$74.firstChild;
1506
+ _$effect(() => _$className(_el$75, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`));
1507
+ return _el$74;
1342
1508
  }
1343
1509
  })];
1344
1510
  const row = () => _$createComponent(AppWorkspaceSidebarRow, {
@@ -1393,106 +1559,204 @@ const AppWorkspaceNavTree = props => {
1393
1559
  },
1394
1560
  children: rowContent
1395
1561
  });
1562
+
1563
+ // A gap is offered only next to a sibling's own row, never over its sub-items.
1564
+ const dropMove = event => {
1565
+ const drag = dragged();
1566
+ const row = ownRow();
1567
+ if (!drag || !event.dataTransfer?.types.includes(NAV_TREE_DRAG_TYPE)) return null;
1568
+ if (drag.parentId !== (parentId ?? null) || drag.id === item.id || !row?.contains(event.target)) return null;
1569
+ const rect = row.getBoundingClientRect();
1570
+ const side = event.clientY < rect.top + rect.height / 2 ? "before" : "after";
1571
+ const slot = siblingIndex(item.id) + (side === "after" ? 1 : 0);
1572
+ const move = navTreeMove(siblings(), siblingIndex(drag.id), slot, parentId ?? null);
1573
+ return move ? {
1574
+ side,
1575
+ move
1576
+ } : null;
1577
+ };
1578
+ const onDragStart = event => {
1579
+ const row = ownRow();
1580
+ if (!movable() || !row?.contains(event.target)) return;
1581
+ event.stopPropagation();
1582
+ setDragged({
1583
+ id: item.id,
1584
+ parentId: parentId ?? null
1585
+ });
1586
+ if (!event.dataTransfer) return;
1587
+ event.dataTransfer.effectAllowed = "move";
1588
+ event.dataTransfer.setData(NAV_TREE_DRAG_TYPE, item.id);
1589
+ const rect = row.getBoundingClientRect();
1590
+ event.dataTransfer.setDragImage(row, event.clientX - rect.left, event.clientY - rect.top);
1591
+ };
1592
+ const onDragOver = event => {
1593
+ callDragHandler(item.onDragOver, event);
1594
+ const target = dropMove(event);
1595
+ if (!target) return;
1596
+ event.preventDefault();
1597
+ if (event.dataTransfer) event.dataTransfer.dropEffect = "move";
1598
+ claimedDragOver = event;
1599
+ setDropTarget({
1600
+ id: item.id,
1601
+ side: target.side
1602
+ });
1603
+ };
1604
+ const onDrop = event => {
1605
+ callDragHandler(item.onDrop, event);
1606
+ const target = dropMove(event);
1607
+ if (!target) return;
1608
+ event.preventDefault();
1609
+ event.stopPropagation();
1610
+ endDrag();
1611
+ requestMove(target.move, false);
1612
+ };
1396
1613
  return (() => {
1397
- var _el$62 = _$getNextElement(_tmpl$32),
1398
- _el$64 = _el$62.firstChild,
1399
- [_el$65, _co$0] = _$getNextMarker(_el$64.nextSibling),
1400
- _el$66 = _el$65.nextSibling,
1401
- [_el$67, _co$1] = _$getNextMarker(_el$66.nextSibling);
1402
- _$addEventListener(_el$62, "drop", item.onDrop);
1403
- _$addEventListener(_el$62, "dragleave", item.onDragLeave);
1404
- _$addEventListener(_el$62, "dragover", item.onDragOver);
1405
- _$addEventListener(_el$62, "dragenter", item.onDragEnter);
1406
- _el$62.$$keydown = onKeyDown;
1407
- _el$62.addEventListener("focus", () => setFocusedId(item.id));
1614
+ var _el$76 = _$getNextElement(_tmpl$37),
1615
+ _el$78 = _el$76.firstChild,
1616
+ [_el$79, _co$11] = _$getNextMarker(_el$78.nextSibling),
1617
+ _el$80 = _el$79.nextSibling,
1618
+ [_el$81, _co$12] = _$getNextMarker(_el$80.nextSibling);
1619
+ _el$76.addEventListener("drop", onDrop);
1620
+ _$addEventListener(_el$76, "dragleave", item.onDragLeave);
1621
+ _el$76.addEventListener("dragover", onDragOver);
1622
+ _$addEventListener(_el$76, "dragenter", item.onDragEnter);
1623
+ _el$76.addEventListener("dragstart", onDragStart);
1624
+ _el$76.$$keydown = onKeyDown;
1625
+ _el$76.addEventListener("focus", () => setFocusedId(item.id));
1408
1626
  var _ref$3 = treeItem;
1409
- typeof _ref$3 === "function" ? _$use(_ref$3, _el$62) : treeItem = _el$62;
1410
- _$setAttribute(_el$62, "aria-level", depth + 1);
1411
- _$setAttribute(_el$62, "data-k2b-nav-tree-parent-id", parentId);
1412
- _$insert(_el$62, row, _el$65, _co$0);
1413
- _$insert(_el$62, _$createComponent(Show, {
1627
+ typeof _ref$3 === "function" ? _$use(_ref$3, _el$76) : treeItem = _el$76;
1628
+ _$setAttribute(_el$76, "aria-level", depth + 1);
1629
+ _$setAttribute(_el$76, "data-k2b-nav-tree-parent-id", parentId);
1630
+ _$insert(_el$76, row, _el$79, _co$11);
1631
+ _$insert(_el$76, _$createComponent(Show, {
1414
1632
  get when() {
1415
1633
  return _$memo(() => !!hasChildren())() && isExpanded(item.id);
1416
1634
  },
1417
1635
  get children() {
1418
- var _el$63 = _$getNextElement(_tmpl$31);
1419
- _$insert(_el$63, () => renderItems(nested, depth + 1, item.id));
1420
- return _el$63;
1636
+ var _el$77 = _$getNextElement(_tmpl$36);
1637
+ _$insert(_el$77, () => renderItems(nested, depth + 1, item.id));
1638
+ return _el$77;
1421
1639
  }
1422
- }), _el$67, _co$1);
1640
+ }), _el$81, _co$12);
1423
1641
  _$effect(_p$ => {
1424
- var _v$59 = selected(),
1425
- _v$60 = hasChildren() ? isExpanded(item.id) : undefined,
1426
- _v$61 = item.disabled ? "true" : undefined,
1427
- _v$62 = item.disabled ? -1 : tabStopId() === item.id ? 0 : -1,
1428
- _v$63 = item.id;
1429
- _v$59 !== _p$.e && _$setAttribute(_el$62, "aria-selected", _p$.e = _v$59);
1430
- _v$60 !== _p$.t && _$setAttribute(_el$62, "aria-expanded", _p$.t = _v$60);
1431
- _v$61 !== _p$.a && _$setAttribute(_el$62, "aria-disabled", _p$.a = _v$61);
1432
- _v$62 !== _p$.o && _$setAttribute(_el$62, "tabindex", _p$.o = _v$62);
1433
- _v$63 !== _p$.i && _$setAttribute(_el$62, "data-k2b-nav-tree-id", _p$.i = _v$63);
1642
+ var _v$59 = siblings().length,
1643
+ _v$60 = place() + 1,
1644
+ _v$61 = selected(),
1645
+ _v$62 = hasChildren() ? isExpanded(item.id) : undefined,
1646
+ _v$63 = item.disabled ? "true" : undefined,
1647
+ _v$64 = item.disabled ? -1 : tabStopId() === item.id ? 0 : -1,
1648
+ _v$65 = movable() ? true : undefined,
1649
+ _v$66 = item.id,
1650
+ _v$67 = dragged()?.id === item.id ? "" : undefined,
1651
+ _v$68 = dropTarget()?.id === item.id ? dropTarget().side : undefined,
1652
+ _v$69 = String(props.indented === false ? 0 : depth);
1653
+ _v$59 !== _p$.e && _$setAttribute(_el$76, "aria-setsize", _p$.e = _v$59);
1654
+ _v$60 !== _p$.t && _$setAttribute(_el$76, "aria-posinset", _p$.t = _v$60);
1655
+ _v$61 !== _p$.a && _$setAttribute(_el$76, "aria-selected", _p$.a = _v$61);
1656
+ _v$62 !== _p$.o && _$setAttribute(_el$76, "aria-expanded", _p$.o = _v$62);
1657
+ _v$63 !== _p$.i && _$setAttribute(_el$76, "aria-disabled", _p$.i = _v$63);
1658
+ _v$64 !== _p$.n && _$setAttribute(_el$76, "tabindex", _p$.n = _v$64);
1659
+ _v$65 !== _p$.s && _$setAttribute(_el$76, "draggable", _p$.s = _v$65);
1660
+ _v$66 !== _p$.h && _$setAttribute(_el$76, "data-k2b-nav-tree-id", _p$.h = _v$66);
1661
+ _v$67 !== _p$.r && _$setAttribute(_el$76, "data-k2b-nav-tree-dragging", _p$.r = _v$67);
1662
+ _v$68 !== _p$.d && _$setAttribute(_el$76, "data-k2b-nav-tree-drop", _p$.d = _v$68);
1663
+ _v$69 !== _p$.l && _$setStyleProperty(_el$76, "--k2b-nav-tree-depth", _p$.l = _v$69);
1434
1664
  return _p$;
1435
1665
  }, {
1436
1666
  e: undefined,
1437
1667
  t: undefined,
1438
1668
  a: undefined,
1439
1669
  o: undefined,
1440
- i: undefined
1670
+ i: undefined,
1671
+ n: undefined,
1672
+ s: undefined,
1673
+ h: undefined,
1674
+ r: undefined,
1675
+ d: undefined,
1676
+ l: undefined
1441
1677
  });
1442
1678
  _$runHydrationEvents();
1443
- return _el$62;
1679
+ return _el$76;
1444
1680
  })();
1445
1681
  }
1446
1682
  });
1683
+
1684
+ // Any other click or focus is the person's choice; only the moved item itself keeps its claim.
1685
+ const forgetRefocus = event => {
1686
+ if (event.type === "pointerdown" || event.target?.dataset?.k2bNavTreeId !== refocusId) refocusId = null;
1687
+ };
1688
+ // A row replaced during a drag never receives its dragend; the next pointer movement means the drag is over.
1689
+ const forgetDrag = () => {
1690
+ if (dragged()) endDrag();
1691
+ };
1692
+ onMount(() => {
1693
+ const doc = root?.ownerDocument;
1694
+ doc?.addEventListener("pointerdown", forgetRefocus, true);
1695
+ doc?.addEventListener("focusin", forgetRefocus, true);
1696
+ doc?.addEventListener("pointermove", forgetDrag, true);
1697
+ onCleanup(() => {
1698
+ doc?.removeEventListener("pointerdown", forgetRefocus, true);
1699
+ doc?.removeEventListener("focusin", forgetRefocus, true);
1700
+ doc?.removeEventListener("pointermove", forgetDrag, true);
1701
+ });
1702
+ });
1447
1703
  return (() => {
1448
- var _el$68 = _$getNextElement(_tmpl$33);
1704
+ var _el$82 = _$getNextElement(_tmpl$38);
1705
+ _el$82.addEventListener("dragend", endDrag);
1706
+ _el$82.addEventListener("dragleave", event => {
1707
+ if (!root?.contains(event.relatedTarget)) setDropTarget(null);
1708
+ });
1709
+ _el$82.addEventListener("dragover", event => {
1710
+ // Runs after the rows: a position no row claimed shows no gap.
1711
+ if (claimedDragOver !== event) setDropTarget(null);
1712
+ });
1449
1713
  var _ref$4 = root;
1450
- typeof _ref$4 === "function" ? _$use(_ref$4, _el$68) : root = _el$68;
1451
- _$insert(_el$68, () => renderItems(roots, 0));
1714
+ typeof _ref$4 === "function" ? _$use(_ref$4, _el$82) : root = _el$82;
1715
+ _$insert(_el$82, () => renderItems(roots, 0));
1452
1716
  _$effect(_p$ => {
1453
- var _v$64 = `k2b-app-workspace__nav-tree ${props.class ?? ""}`,
1454
- _v$65 = props.ariaLabel;
1455
- _v$64 !== _p$.e && _$className(_el$68, _p$.e = _v$64);
1456
- _v$65 !== _p$.t && _$setAttribute(_el$68, "aria-label", _p$.t = _v$65);
1717
+ var _v$70 = `k2b-app-workspace__nav-tree ${props.class ?? ""}`,
1718
+ _v$71 = props.ariaLabel;
1719
+ _v$70 !== _p$.e && _$className(_el$82, _p$.e = _v$70);
1720
+ _v$71 !== _p$.t && _$setAttribute(_el$82, "aria-label", _p$.t = _v$71);
1457
1721
  return _p$;
1458
1722
  }, {
1459
1723
  e: undefined,
1460
1724
  t: undefined
1461
1725
  });
1462
- return _el$68;
1726
+ return _el$82;
1463
1727
  })();
1464
1728
  };
1465
1729
  AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
1466
1730
  const AppWorkspaceSidebarIconGrid = props => (() => {
1467
- var _el$69 = _$getNextElement(_tmpl$34),
1468
- _el$71 = _el$69.firstChild,
1469
- [_el$72, _co$10] = _$getNextMarker(_el$71.nextSibling),
1470
- _el$70 = _el$72.nextSibling;
1471
- _$spread(_el$69, _$mergeProps({
1731
+ var _el$83 = _$getNextElement(_tmpl$39),
1732
+ _el$85 = _el$83.firstChild,
1733
+ [_el$86, _co$13] = _$getNextMarker(_el$85.nextSibling),
1734
+ _el$84 = _el$86.nextSibling;
1735
+ _$spread(_el$83, _$mergeProps({
1472
1736
  get ["class"]() {
1473
1737
  return `k2b-app-workspace__sidebar-icon-grid-wrap ${props.class ?? ""}`;
1474
1738
  }
1475
1739
  }, () => modeAttrs(props.sidebarMode)), false, true);
1476
- _$insert(_el$69, _$createComponent(Show, {
1740
+ _$insert(_el$83, _$createComponent(Show, {
1477
1741
  get when() {
1478
1742
  return props.title;
1479
1743
  },
1480
1744
  children: title => (() => {
1481
- var _el$73 = _$getNextElement(_tmpl$13);
1482
- _$insert(_el$73, title);
1483
- return _el$73;
1745
+ var _el$87 = _$getNextElement(_tmpl$13);
1746
+ _$insert(_el$87, title);
1747
+ return _el$87;
1484
1748
  })()
1485
- }), _el$72, _co$10);
1486
- _$insert(_el$70, () => props.children);
1487
- _$effect(() => _$setAttribute(_el$70, "data-columns", props.columns ?? 2));
1749
+ }), _el$86, _co$13);
1750
+ _$insert(_el$84, () => props.children);
1751
+ _$effect(() => _$setAttribute(_el$84, "data-columns", props.columns ?? 2));
1488
1752
  _$runHydrationEvents();
1489
- return _el$69;
1753
+ return _el$83;
1490
1754
  })();
1491
1755
  const AppWorkspaceSidebarIconAction = props => {
1492
1756
  const content = (() => {
1493
- var _el$74 = _$getNextElement(_tmpl$35);
1494
- _$effect(() => _$className(_el$74, iconClass(props.icon)));
1495
- return _el$74;
1757
+ var _el$88 = _$getNextElement(_tmpl$40);
1758
+ _$effect(() => _$className(_el$88, iconClass(props.icon)));
1759
+ return _el$88;
1496
1760
  })();
1497
1761
  const attrs = () => ({
1498
1762
  class: `k2b-app-workspace__sidebar-icon-action ${props.active ? "is-active" : ""}`,
@@ -1505,8 +1769,8 @@ const AppWorkspaceSidebarIconAction = props => {
1505
1769
  ...modeAttrs(props.sidebarMode)
1506
1770
  });
1507
1771
  if (!props.href || props.disabled) return (() => {
1508
- var _el$75 = _$getNextElement(_tmpl$15);
1509
- _$spread(_el$75, _$mergeProps(attrs, {
1772
+ var _el$89 = _$getNextElement(_tmpl$20);
1773
+ _$spread(_el$89, _$mergeProps(attrs, {
1510
1774
  get disabled() {
1511
1775
  return props.disabled;
1512
1776
  },
@@ -1514,13 +1778,13 @@ const AppWorkspaceSidebarIconAction = props => {
1514
1778
  return props.onClick;
1515
1779
  }
1516
1780
  }), false, true);
1517
- _$insert(_el$75, content);
1781
+ _$insert(_el$89, content);
1518
1782
  _$runHydrationEvents();
1519
- return _el$75;
1783
+ return _el$89;
1520
1784
  })();
1521
1785
  if (props.navigation !== "enhanced" || !props.onNavigate) return (() => {
1522
- var _el$76 = _$getNextElement(_tmpl$16);
1523
- _$spread(_el$76, _$mergeProps({
1786
+ var _el$90 = _$getNextElement(_tmpl$21);
1787
+ _$spread(_el$90, _$mergeProps({
1524
1788
  get href() {
1525
1789
  return props.href;
1526
1790
  }
@@ -1529,9 +1793,9 @@ const AppWorkspaceSidebarIconAction = props => {
1529
1793
  return props.onClick;
1530
1794
  }
1531
1795
  }), false, true);
1532
- _$insert(_el$76, content);
1796
+ _$insert(_el$90, content);
1533
1797
  _$runHydrationEvents();
1534
- return _el$76;
1798
+ return _el$90;
1535
1799
  })();
1536
1800
  return _$createComponent(Link, _$mergeProps({
1537
1801
  get href() {
@@ -1576,21 +1840,21 @@ const AppWorkspace = props => {
1576
1840
  return props.resizable !== false;
1577
1841
  },
1578
1842
  get children() {
1579
- var _el$77 = _$getNextElement(_tmpl$36);
1843
+ var _el$91 = _$getNextElement(_tmpl$41);
1580
1844
  var _ref$5 = root;
1581
- typeof _ref$5 === "function" ? _$use(_ref$5, _el$77) : root = _el$77;
1582
- _$insert(_el$77, () => props.children);
1845
+ typeof _ref$5 === "function" ? _$use(_ref$5, _el$91) : root = _el$91;
1846
+ _$insert(_el$91, () => props.children);
1583
1847
  _$effect(_p$ => {
1584
- var _v$66 = `k2b-app-workspace ${props.class ?? ""}`,
1585
- _v$67 = props.mobileSurface,
1586
- _v$68 = initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed),
1587
- _v$69 = props.resizable === false ? "false" : "true",
1588
- _v$70 = appWorkspaceLayoutStyle(initialLayoutState());
1589
- _v$66 !== _p$.e && _$className(_el$77, _p$.e = _v$66);
1590
- _v$67 !== _p$.t && _$setAttribute(_el$77, "data-mobile-surface", _p$.t = _v$67);
1591
- _v$68 !== _p$.a && _$setAttribute(_el$77, "data-sidebar-collapsed", _p$.a = _v$68);
1592
- _v$69 !== _p$.o && _$setAttribute(_el$77, "data-workspace-resizable", _p$.o = _v$69);
1593
- _p$.i = _$style(_el$77, _v$70, _p$.i);
1848
+ var _v$72 = `k2b-app-workspace ${props.class ?? ""}`,
1849
+ _v$73 = props.mobileSurface,
1850
+ _v$74 = initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed),
1851
+ _v$75 = props.resizable === false ? "false" : "true",
1852
+ _v$76 = appWorkspaceLayoutStyle(initialLayoutState());
1853
+ _v$72 !== _p$.e && _$className(_el$91, _p$.e = _v$72);
1854
+ _v$73 !== _p$.t && _$setAttribute(_el$91, "data-mobile-surface", _p$.t = _v$73);
1855
+ _v$74 !== _p$.a && _$setAttribute(_el$91, "data-sidebar-collapsed", _p$.a = _v$74);
1856
+ _v$75 !== _p$.o && _$setAttribute(_el$91, "data-workspace-resizable", _p$.o = _v$75);
1857
+ _p$.i = _$style(_el$91, _v$76, _p$.i);
1594
1858
  return _p$;
1595
1859
  }, {
1596
1860
  e: undefined,
@@ -1599,7 +1863,7 @@ const AppWorkspace = props => {
1599
1863
  o: undefined,
1600
1864
  i: undefined
1601
1865
  });
1602
- return _el$77;
1866
+ return _el$91;
1603
1867
  }
1604
1868
  });
1605
1869
  };
@@ -1612,10 +1876,10 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
1612
1876
  }
1613
1877
  });
1614
1878
  AppWorkspace.Content = props => (() => {
1615
- var _el$78 = _$getNextElement(_tmpl$2);
1616
- _$insert(_el$78, () => props.children);
1617
- _$effect(() => _$className(_el$78, `k2b-app-workspace__content ${props.class ?? ""}`));
1618
- return _el$78;
1879
+ var _el$92 = _$getNextElement(_tmpl$2);
1880
+ _$insert(_el$92, () => props.children);
1881
+ _$effect(() => _$className(_el$92, `k2b-app-workspace__content ${props.class ?? ""}`));
1882
+ return _el$92;
1619
1883
  })();
1620
1884
  AppWorkspace.Main = AppWorkspaceMain;
1621
1885
  AppWorkspace.MainPane = AppWorkspaceMainPane;
@@ -1632,6 +1896,7 @@ AppWorkspace.SidebarItemLabel = AppWorkspaceSidebarItemLabel;
1632
1896
  AppWorkspace.SidebarItemMeta = AppWorkspaceSidebarItemMeta;
1633
1897
  AppWorkspace.SidebarItemAction = AppWorkspaceSidebarItemAction;
1634
1898
  AppWorkspace.SidebarItemActions = AppWorkspaceSidebarItemActions;
1899
+ AppWorkspace.SidebarItemStatus = AppWorkspaceSidebarItemStatus;
1635
1900
  AppWorkspace.NavTree = AppWorkspaceNavTree;
1636
1901
  AppWorkspace.SidebarIconGrid = AppWorkspaceSidebarIconGrid;
1637
1902
  AppWorkspace.SidebarIconAction = AppWorkspaceSidebarIconAction;