@k2b/ui 0.18.0 → 0.20.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 (204) 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/actions/GestureMenu.js +467 -0
  9. package/dist/browser/actions/GestureMenu.js.map +1 -0
  10. package/dist/browser/actions/index.js +1 -0
  11. package/dist/browser/actions/index.js.map +1 -1
  12. package/dist/browser/chat/ChatComposer.js +1255 -534
  13. package/dist/browser/chat/ChatComposer.js.map +1 -1
  14. package/dist/browser/chat/ChatPrimitives.js +9 -3
  15. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  16. package/dist/browser/chat/ChatTimeline.js +19 -1
  17. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  18. package/dist/browser/chat/chat-behavior.js +9 -0
  19. package/dist/browser/chat/chat-behavior.js.map +1 -1
  20. package/dist/browser/chat/index.js.map +1 -1
  21. package/dist/browser/chat/types.js.map +1 -1
  22. package/dist/browser/content/Calendar.js +579 -533
  23. package/dist/browser/content/Calendar.js.map +1 -1
  24. package/dist/browser/content/Lightbox.js +76 -40
  25. package/dist/browser/content/Lightbox.js.map +1 -1
  26. package/dist/browser/content/MessageRow.js +2 -2
  27. package/dist/browser/content/MessageRow.js.map +1 -1
  28. package/dist/browser/content/PdfPreview.js +146 -79
  29. package/dist/browser/content/PdfPreview.js.map +1 -1
  30. package/dist/browser/content/Timeline.js +1038 -0
  31. package/dist/browser/content/Timeline.js.map +1 -0
  32. package/dist/browser/content/VideoPlayer.js +29 -9
  33. package/dist/browser/content/VideoPlayer.js.map +1 -1
  34. package/dist/browser/content/chart-inspection.js +7 -2
  35. package/dist/browser/content/chart-inspection.js.map +1 -1
  36. package/dist/browser/content/index.js +1 -0
  37. package/dist/browser/content/index.js.map +1 -1
  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/FileInputs.js +48 -33
  47. package/dist/browser/inputs/FileInputs.js.map +1 -1
  48. package/dist/browser/inputs/SignatureInput.js +558 -0
  49. package/dist/browser/inputs/SignatureInput.js.map +1 -0
  50. package/dist/browser/inputs/TextInput.js +13 -1
  51. package/dist/browser/inputs/TextInput.js.map +1 -1
  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/index.js +5 -0
  61. package/dist/browser/inputs/index.js.map +1 -1
  62. package/dist/browser/inputs/markdown/actions.js +6 -2
  63. package/dist/browser/inputs/markdown/actions.js.map +1 -1
  64. package/dist/browser/inputs/markdown/code-zone.js +38 -2
  65. package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
  66. package/dist/browser/inputs/signature-messages.js +39 -0
  67. package/dist/browser/inputs/signature-messages.js.map +1 -0
  68. package/dist/browser/inputs/signature.js +208 -0
  69. package/dist/browser/inputs/signature.js.map +1 -0
  70. package/dist/browser/internal/render-error.js +49 -0
  71. package/dist/browser/internal/render-error.js.map +1 -0
  72. package/dist/browser/intl/messages.js +102 -0
  73. package/dist/browser/intl/messages.js.map +1 -1
  74. package/dist/browser/layout/AppWorkspace.js +321 -222
  75. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  76. package/dist/browser/layout/FloatingWindow.js +4 -1
  77. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  78. package/dist/browser/layout/SidebarItemPreview.js +5 -1
  79. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  80. package/dist/browser/layout/index.js.map +1 -1
  81. package/dist/browser/surfaces/ResourceCard.js +212 -0
  82. package/dist/browser/surfaces/ResourceCard.js.map +1 -0
  83. package/dist/browser/surfaces/index.js +1 -0
  84. package/dist/browser/surfaces/index.js.map +1 -1
  85. package/dist/licenses/emojibase-data.txt +21 -0
  86. package/dist/ssr/actions/ContextMenu.js +3 -1
  87. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  88. package/dist/ssr/actions/Dropdown.js +49 -12
  89. package/dist/ssr/actions/Dropdown.js.map +1 -1
  90. package/dist/ssr/actions/FilterChip.js +4 -1
  91. package/dist/ssr/actions/FilterChip.js.map +1 -1
  92. package/dist/ssr/actions/GestureMenu.js +411 -0
  93. package/dist/ssr/actions/GestureMenu.js.map +1 -0
  94. package/dist/ssr/actions/index.js +1 -0
  95. package/dist/ssr/actions/index.js.map +1 -1
  96. package/dist/ssr/chat/ChatComposer.js +767 -214
  97. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  98. package/dist/ssr/chat/ChatPrimitives.js +9 -3
  99. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  100. package/dist/ssr/chat/ChatTimeline.js +19 -1
  101. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  102. package/dist/ssr/chat/chat-behavior.js +9 -0
  103. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  104. package/dist/ssr/chat/index.js.map +1 -1
  105. package/dist/ssr/chat/types.js.map +1 -1
  106. package/dist/ssr/content/Calendar.js +183 -142
  107. package/dist/ssr/content/Calendar.js.map +1 -1
  108. package/dist/ssr/content/Lightbox.js +19 -5
  109. package/dist/ssr/content/Lightbox.js.map +1 -1
  110. package/dist/ssr/content/MessageRow.js +2 -2
  111. package/dist/ssr/content/MessageRow.js.map +1 -1
  112. package/dist/ssr/content/PdfPreview.js +77 -36
  113. package/dist/ssr/content/PdfPreview.js.map +1 -1
  114. package/dist/ssr/content/Timeline.js +804 -0
  115. package/dist/ssr/content/Timeline.js.map +1 -0
  116. package/dist/ssr/content/VideoPlayer.js +29 -9
  117. package/dist/ssr/content/VideoPlayer.js.map +1 -1
  118. package/dist/ssr/content/chart-inspection.js +7 -2
  119. package/dist/ssr/content/chart-inspection.js.map +1 -1
  120. package/dist/ssr/content/index.js +1 -0
  121. package/dist/ssr/content/index.js.map +1 -1
  122. package/dist/ssr/content/timeline-model.js +579 -0
  123. package/dist/ssr/content/timeline-model.js.map +1 -0
  124. package/dist/ssr/feedback/dialog-core.js +26 -14
  125. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  126. package/dist/ssr/inputs/ChoiceChips.js +66 -0
  127. package/dist/ssr/inputs/ChoiceChips.js.map +1 -0
  128. package/dist/ssr/inputs/ChoiceGroups.js +12 -4
  129. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  130. package/dist/ssr/inputs/FileInputs.js +19 -4
  131. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  132. package/dist/ssr/inputs/SignatureInput.js +404 -0
  133. package/dist/ssr/inputs/SignatureInput.js.map +1 -0
  134. package/dist/ssr/inputs/TextInput.js +13 -1
  135. package/dist/ssr/inputs/TextInput.js.map +1 -1
  136. package/dist/ssr/inputs/emoji/EmojiPicker.js +551 -0
  137. package/dist/ssr/inputs/emoji/EmojiPicker.js.map +1 -0
  138. package/dist/ssr/inputs/emoji/emoji-data.js +1903 -0
  139. package/dist/ssr/inputs/emoji/emoji-data.js.map +1 -0
  140. package/dist/ssr/inputs/emoji/emoji-index.js +209 -0
  141. package/dist/ssr/inputs/emoji/emoji-index.js.map +1 -0
  142. package/dist/ssr/inputs/emoji/emoji-messages.js +64 -0
  143. package/dist/ssr/inputs/emoji/emoji-messages.js.map +1 -0
  144. package/dist/ssr/inputs/index.js +5 -0
  145. package/dist/ssr/inputs/index.js.map +1 -1
  146. package/dist/ssr/inputs/markdown/actions.js +6 -2
  147. package/dist/ssr/inputs/markdown/actions.js.map +1 -1
  148. package/dist/ssr/inputs/markdown/code-zone.js +38 -2
  149. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
  150. package/dist/ssr/inputs/signature-messages.js +39 -0
  151. package/dist/ssr/inputs/signature-messages.js.map +1 -0
  152. package/dist/ssr/inputs/signature.js +208 -0
  153. package/dist/ssr/inputs/signature.js.map +1 -0
  154. package/dist/ssr/internal/render-error.js +49 -0
  155. package/dist/ssr/internal/render-error.js.map +1 -0
  156. package/dist/ssr/intl/messages.js +102 -0
  157. package/dist/ssr/intl/messages.js.map +1 -1
  158. package/dist/ssr/layout/AppWorkspace.js +112 -41
  159. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  160. package/dist/ssr/layout/FloatingWindow.js +4 -1
  161. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  162. package/dist/ssr/layout/SidebarItemPreview.js +5 -1
  163. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  164. package/dist/ssr/layout/index.js.map +1 -1
  165. package/dist/ssr/surfaces/ResourceCard.js +115 -0
  166. package/dist/ssr/surfaces/ResourceCard.js.map +1 -0
  167. package/dist/ssr/surfaces/index.js +1 -0
  168. package/dist/ssr/surfaces/index.js.map +1 -1
  169. package/dist/styles.css +1 -1
  170. package/dist/types/actions/Dropdown.d.ts +13 -1
  171. package/dist/types/actions/FilterChip.d.ts +5 -0
  172. package/dist/types/actions/GestureMenu.d.ts +35 -0
  173. package/dist/types/actions/index.d.ts +2 -0
  174. package/dist/types/chat/ChatComposer.d.ts +27 -1
  175. package/dist/types/chat/chat-behavior.d.ts +15 -0
  176. package/dist/types/chat/index.d.ts +1 -1
  177. package/dist/types/chat/types.d.ts +34 -0
  178. package/dist/types/content/Calendar.d.ts +28 -8
  179. package/dist/types/content/Lightbox.d.ts +8 -0
  180. package/dist/types/content/Timeline.d.ts +49 -0
  181. package/dist/types/content/index.d.ts +4 -2
  182. package/dist/types/content/timeline-model.d.ts +148 -0
  183. package/dist/types/feedback/dialog-core.d.ts +1 -1
  184. package/dist/types/inputs/ChoiceChips.d.ts +20 -0
  185. package/dist/types/inputs/ChoiceGroups.d.ts +11 -2
  186. package/dist/types/inputs/FileInputs.d.ts +6 -0
  187. package/dist/types/inputs/SignatureInput.d.ts +22 -0
  188. package/dist/types/inputs/emoji/EmojiPicker.d.ts +42 -0
  189. package/dist/types/inputs/emoji/emoji-data.d.ts +2 -0
  190. package/dist/types/inputs/emoji/emoji-index.d.ts +109 -0
  191. package/dist/types/inputs/emoji/emoji-messages.d.ts +30 -0
  192. package/dist/types/inputs/index.d.ts +10 -0
  193. package/dist/types/inputs/markdown/actions.d.ts +2 -0
  194. package/dist/types/inputs/markdown/code-zone.d.ts +7 -0
  195. package/dist/types/inputs/signature-messages.d.ts +11 -0
  196. package/dist/types/inputs/signature.d.ts +72 -0
  197. package/dist/types/internal/render-error.d.ts +13 -0
  198. package/dist/types/intl/messages.d.ts +51 -0
  199. package/dist/types/layout/AppWorkspace.d.ts +17 -0
  200. package/dist/types/layout/SidebarItemPreview.d.ts +2 -0
  201. package/dist/types/layout/index.d.ts +1 -1
  202. package/dist/types/surfaces/ResourceCard.d.ts +31 -0
  203. package/dist/types/surfaces/index.d.ts +2 -0
  204. package/package.json +6 -5
@@ -32,28 +32,33 @@ 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><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
63
  import { children, createContext, createEffect, createMemo, createSignal, createUniqueId, For, mergeProps, onCleanup, onMount, Show, useContext } from "solid-js";
59
64
  import { useUiMessages } from "../intl/messages";
@@ -137,6 +142,11 @@ function ResizeHandle(props) {
137
142
  })();
138
143
  }
139
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
+
140
150
  /** One requested place for an item among its unchanged siblings. */
141
151
 
142
152
  const modeAttrs = mode => mode && mode !== "always" ? {
@@ -782,6 +792,78 @@ const AppWorkspaceSidebarItemActions = props => (() => {
782
792
  _$effect(() => _$setAttribute(_el$28, "data-visibility", props.visibility === "hover" ? "hover" : undefined));
783
793
  return _el$28;
784
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
+ };
785
867
  /** Shared visual and semantic row frame for flat sidebar items and tree items. */
786
868
  function AppWorkspaceSidebarRow(props) {
787
869
  const className = () => `k2b-app-workspace__sidebar-item ${props.hasActions ? "has-action" : ""} ${props.active ? props.activeClass ?? "is-active" : ""} ${props.class ?? ""}`;
@@ -807,8 +889,8 @@ function AppWorkspaceSidebarRow(props) {
807
889
  },
808
890
  get fallback() {
809
891
  return (() => {
810
- var _el$29 = _$getNextElement(_tmpl$15);
811
- _$spread(_el$29, _$mergeProps(attrs, {
892
+ var _el$43 = _$getNextElement(_tmpl$20);
893
+ _$spread(_el$43, _$mergeProps(attrs, {
812
894
  get tabIndex() {
813
895
  return props.tabIndex;
814
896
  },
@@ -819,9 +901,9 @@ function AppWorkspaceSidebarRow(props) {
819
901
  return props.onClick;
820
902
  }
821
903
  }), false, true);
822
- _$insert(_el$29, () => props.children);
904
+ _$insert(_el$43, () => props.children);
823
905
  _$runHydrationEvents();
824
- return _el$29;
906
+ return _el$43;
825
907
  })();
826
908
  },
827
909
  get children() {
@@ -831,8 +913,8 @@ function AppWorkspaceSidebarRow(props) {
831
913
  },
832
914
  get fallback() {
833
915
  return (() => {
834
- var _el$30 = _$getNextElement(_tmpl$16);
835
- _$spread(_el$30, _$mergeProps({
916
+ var _el$44 = _$getNextElement(_tmpl$21);
917
+ _$spread(_el$44, _$mergeProps({
836
918
  get href() {
837
919
  return props.href;
838
920
  }
@@ -847,9 +929,9 @@ function AppWorkspaceSidebarRow(props) {
847
929
  return props.onClick;
848
930
  }
849
931
  }), false, true);
850
- _$insert(_el$30, () => props.children);
932
+ _$insert(_el$44, () => props.children);
851
933
  _$runHydrationEvents();
852
- return _el$30;
934
+ return _el$44;
853
935
  })();
854
936
  },
855
937
  get children() {
@@ -895,22 +977,22 @@ function AppWorkspaceSidebarRow(props) {
895
977
  });
896
978
  },
897
979
  get children() {
898
- var _el$31 = _$getNextElement(_tmpl$17),
899
- _el$32 = _el$31.firstChild,
900
- [_el$33, _co$5] = _$getNextMarker(_el$32.nextSibling),
901
- _el$34 = _el$33.nextSibling,
902
- [_el$35, _co$6] = _$getNextMarker(_el$34.nextSibling);
903
- _$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, {
904
986
  get ["data-disabled"]() {
905
987
  return props.disabled ? "true" : undefined;
906
988
  }
907
989
  }), false, true);
908
- _$insert(_el$31, _$createComponent(Control, {
990
+ _$insert(_el$45, _$createComponent(Control, {
909
991
  grouped: true
910
- }), _el$33, _co$5);
911
- _$insert(_el$31, () => props.actions, _el$35, _co$6);
992
+ }), _el$47, _co$8);
993
+ _$insert(_el$45, () => props.actions, _el$49, _co$9);
912
994
  _$runHydrationEvents();
913
- return _el$31;
995
+ return _el$45;
914
996
  }
915
997
  });
916
998
  }
@@ -928,7 +1010,11 @@ function AppWorkspaceSidebarItem(props) {
928
1010
  const label = () => labelSlot()?.children ?? (legacy().length === 1 ? legacy()[0] : legacy());
929
1011
  const icon = () => iconSlot()?.icon ?? props.icon;
930
1012
  const iconContent = () => iconSlot()?.children;
931
- 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();
932
1018
  const metaVisibility = () => metaSlot()?.visibility ?? props.metaVisibility;
933
1019
  const customActions = () => resolvedActions();
934
1020
  const hasCustomActions = () => Boolean(customActions());
@@ -938,68 +1024,77 @@ function AppWorkspaceSidebarItem(props) {
938
1024
  return iconContent() || icon();
939
1025
  },
940
1026
  get children() {
941
- var _el$36 = _$getNextElement(_tmpl$18);
942
- _$insert(_el$36, () => iconContent() ?? (() => {
943
- var _el$50 = _$getNextElement(_tmpl$23);
944
- _$effect(() => _$className(_el$50, iconClass(icon())));
945
- 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;
946
1032
  })());
947
- return _el$36;
1033
+ return _el$50;
948
1034
  }
949
1035
  }), (() => {
950
- var _el$37 = _$getNextElement(_tmpl$22),
951
- _el$46 = _el$37.firstChild,
952
- [_el$47, _co$8] = _$getNextMarker(_el$46.nextSibling),
953
- _el$43 = _el$47.nextSibling,
954
- _el$44 = _el$43.firstChild,
955
- _el$48 = _el$43.nextSibling,
956
- [_el$49, _co$9] = _$getNextMarker(_el$48.nextSibling);
957
- _$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, {
958
1044
  get when() {
959
1045
  return props.context || props.contextMeta;
960
1046
  },
961
1047
  get children() {
962
- var _el$38 = _$getNextElement(_tmpl$20),
963
- _el$39 = _el$38.firstChild,
964
- _el$41 = _el$39.nextSibling,
965
- [_el$42, _co$7] = _$getNextMarker(_el$41.nextSibling);
966
- _$insert(_el$39, () => props.context);
967
- _$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, {
968
1054
  get when() {
969
1055
  return props.contextMeta;
970
1056
  },
971
1057
  get children() {
972
- var _el$40 = _$getNextElement(_tmpl$19);
973
- _$insert(_el$40, () => props.contextMeta);
974
- return _el$40;
1058
+ var _el$54 = _$getNextElement(_tmpl$24);
1059
+ _$insert(_el$54, () => props.contextMeta);
1060
+ return _el$54;
975
1061
  }
976
- }), _el$42, _co$7);
977
- return _el$38;
1062
+ }), _el$56, _co$0);
1063
+ return _el$52;
978
1064
  }
979
- }), _el$47, _co$8);
980
- _$insert(_el$44, () => label());
981
- _$insert(_el$37, _$createComponent(Show, {
1065
+ }), _el$61, _co$1);
1066
+ _$insert(_el$58, () => label());
1067
+ _$insert(_el$51, _$createComponent(Show, {
982
1068
  get when() {
983
1069
  return props.description;
984
1070
  },
985
1071
  get children() {
986
- var _el$45 = _$getNextElement(_tmpl$21);
987
- _$insert(_el$45, () => props.description);
988
- return _el$45;
1072
+ var _el$59 = _$getNextElement(_tmpl$26);
1073
+ _$insert(_el$59, () => props.description);
1074
+ return _el$59;
989
1075
  }
990
- }), _el$49, _co$9);
991
- _$effect(() => _$setAttribute(_el$43, "data-marquee", labelSlot()?.marquee ?? (props.variant ?? "row") === "row" ? "true" : "false"));
992
- 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;
993
1079
  })(), _$createComponent(Show, {
994
1080
  get when() {
995
- return meta();
1081
+ return hasMeta();
996
1082
  },
997
- children: value => (() => {
998
- var _el$51 = _$getNextElement(_tmpl$24);
999
- _$insert(_el$51, value);
1000
- _$effect(() => _$setAttribute(_el$51, "data-visibility", metaVisibility() === "hover" ? "hover" : undefined));
1001
- return _el$51;
1002
- })()
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
+ }
1003
1098
  })];
1004
1099
  const singleAction = () => {
1005
1100
  const label = () => actionSlot()?.label ?? props.actionLabel ?? messages().rowAction;
@@ -1014,9 +1109,9 @@ function AppWorkspaceSidebarItem(props) {
1014
1109
  props.onActionClick?.(event);
1015
1110
  };
1016
1111
  const content = () => actionSlot()?.children ?? (() => {
1017
- var _el$52 = _$getNextElement(_tmpl$23);
1018
- _$effect(() => _$className(_el$52, iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots")));
1019
- 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;
1020
1115
  })();
1021
1116
  return _$createComponent(Show, {
1022
1117
  get when() {
@@ -1029,16 +1124,16 @@ function AppWorkspaceSidebarItem(props) {
1029
1124
  },
1030
1125
  get fallback() {
1031
1126
  return (() => {
1032
- var _el$54 = _$getNextElement(_tmpl$26);
1033
- _el$54.$$click = select;
1034
- _$insert(_el$54, content);
1127
+ var _el$68 = _$getNextElement(_tmpl$31);
1128
+ _el$68.$$click = select;
1129
+ _$insert(_el$68, content);
1035
1130
  _$effect(_p$ => {
1036
- var _v$52 = actionSlot()?.disabled,
1037
- _v$53 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1038
- _v$54 = label();
1039
- _v$52 !== _p$.e && _$setProperty(_el$54, "disabled", _p$.e = _v$52);
1040
- _v$53 !== _p$.t && _$setAttribute(_el$54, "data-visibility", _p$.t = _v$53);
1041
- _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);
1042
1137
  return _p$;
1043
1138
  }, {
1044
1139
  e: undefined,
@@ -1046,20 +1141,20 @@ function AppWorkspaceSidebarItem(props) {
1046
1141
  a: undefined
1047
1142
  });
1048
1143
  _$runHydrationEvents();
1049
- return _el$54;
1144
+ return _el$68;
1050
1145
  })();
1051
1146
  },
1052
1147
  get children() {
1053
- var _el$53 = _$getNextElement(_tmpl$25);
1054
- _el$53.$$click = select;
1055
- _$insert(_el$53, content);
1148
+ var _el$67 = _$getNextElement(_tmpl$30);
1149
+ _el$67.$$click = select;
1150
+ _$insert(_el$67, content);
1056
1151
  _$effect(_p$ => {
1057
- var _v$49 = actionSlot()?.href,
1058
- _v$50 = actionSlot()?.visibility === "hover" ? "hover" : undefined,
1059
- _v$51 = label();
1060
- _v$49 !== _p$.e && _$setAttribute(_el$53, "href", _p$.e = _v$49);
1061
- _v$50 !== _p$.t && _$setAttribute(_el$53, "data-visibility", _p$.t = _v$50);
1062
- _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);
1063
1158
  return _p$;
1064
1159
  }, {
1065
1160
  e: undefined,
@@ -1067,7 +1162,7 @@ function AppWorkspaceSidebarItem(props) {
1067
1162
  a: undefined
1068
1163
  });
1069
1164
  _$runHydrationEvents();
1070
- return _el$53;
1165
+ return _el$67;
1071
1166
  }
1072
1167
  });
1073
1168
  }
@@ -1090,6 +1185,9 @@ function AppWorkspaceSidebarItem(props) {
1090
1185
  get viewportSize() {
1091
1186
  return preview().viewportSize;
1092
1187
  },
1188
+ get describedBy() {
1189
+ return hasMeta() ? metaId : undefined;
1190
+ },
1093
1191
  get onOpenChange() {
1094
1192
  return preview().onOpenChange;
1095
1193
  },
@@ -1363,50 +1461,50 @@ const AppWorkspaceNavTree = props => {
1363
1461
  return rowIcon();
1364
1462
  },
1365
1463
  get children() {
1366
- var _el$55 = _$getNextElement(_tmpl$27),
1367
- _el$56 = _el$55.firstChild;
1368
- _$spread(_el$55, _$mergeProps({
1464
+ var _el$69 = _$getNextElement(_tmpl$32),
1465
+ _el$70 = _el$69.firstChild;
1466
+ _$spread(_el$69, _$mergeProps({
1369
1467
  get ["data-k2b-nav-tree-toggle"]() {
1370
1468
  return usesIconDisclosure() ? "" : undefined;
1371
1469
  }
1372
1470
  }, () => iconAccessibility(item.iconLabel)), false, true);
1373
- _$effect(() => _$className(_el$56, iconClass(rowIcon())));
1471
+ _$effect(() => _$className(_el$70, iconClass(rowIcon())));
1374
1472
  _$runHydrationEvents();
1375
- return _el$55;
1473
+ return _el$69;
1376
1474
  }
1377
1475
  }), (() => {
1378
- var _el$57 = _$getNextElement(_tmpl$28),
1379
- _el$58 = _el$57.firstChild;
1380
- _$insert(_el$58, () => item.label);
1381
- 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;
1382
1480
  })(), _$createComponent(Show, {
1383
1481
  get when() {
1384
1482
  return item.meta !== undefined;
1385
1483
  },
1386
1484
  get children() {
1387
- var _el$59 = _$getNextElement(_tmpl$29);
1388
- _$insert(_el$59, () => item.meta);
1485
+ var _el$73 = _$getNextElement(_tmpl$34);
1486
+ _$insert(_el$73, () => item.meta);
1389
1487
  _$effect(_p$ => {
1390
- var _v$55 = `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`,
1391
- _v$56 = item.metaVisibility === "hover" ? "hover" : undefined;
1392
- _v$55 !== _p$.e && _$className(_el$59, _p$.e = _v$55);
1393
- _v$56 !== _p$.t && _$setAttribute(_el$59, "data-visibility", _p$.t = _v$56);
1488
+ var _v$57 = `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`,
1489
+ _v$58 = item.metaVisibility === "hover" ? "hover" : undefined;
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);
1394
1492
  return _p$;
1395
1493
  }, {
1396
1494
  e: undefined,
1397
1495
  t: undefined
1398
1496
  });
1399
- return _el$59;
1497
+ return _el$73;
1400
1498
  }
1401
1499
  }), _$createComponent(Show, {
1402
1500
  get when() {
1403
1501
  return _$memo(() => !!hasChildren())() && !usesIconDisclosure();
1404
1502
  },
1405
1503
  get children() {
1406
- var _el$60 = _$getNextElement(_tmpl$30),
1407
- _el$61 = _el$60.firstChild;
1408
- _$effect(() => _$className(_el$61, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`));
1409
- 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;
1410
1508
  }
1411
1509
  })];
1412
1510
  const row = () => _$createComponent(AppWorkspaceSidebarRow, {
@@ -1513,56 +1611,56 @@ const AppWorkspaceNavTree = props => {
1513
1611
  requestMove(target.move, false);
1514
1612
  };
1515
1613
  return (() => {
1516
- var _el$62 = _$getNextElement(_tmpl$32),
1517
- _el$64 = _el$62.firstChild,
1518
- [_el$65, _co$0] = _$getNextMarker(_el$64.nextSibling),
1519
- _el$66 = _el$65.nextSibling,
1520
- [_el$67, _co$1] = _$getNextMarker(_el$66.nextSibling);
1521
- _el$62.addEventListener("drop", onDrop);
1522
- _$addEventListener(_el$62, "dragleave", item.onDragLeave);
1523
- _el$62.addEventListener("dragover", onDragOver);
1524
- _$addEventListener(_el$62, "dragenter", item.onDragEnter);
1525
- _el$62.addEventListener("dragstart", onDragStart);
1526
- _el$62.$$keydown = onKeyDown;
1527
- _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));
1528
1626
  var _ref$3 = treeItem;
1529
- typeof _ref$3 === "function" ? _$use(_ref$3, _el$62) : treeItem = _el$62;
1530
- _$setAttribute(_el$62, "aria-level", depth + 1);
1531
- _$setAttribute(_el$62, "data-k2b-nav-tree-parent-id", parentId);
1532
- _$insert(_el$62, row, _el$65, _co$0);
1533
- _$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, {
1534
1632
  get when() {
1535
1633
  return _$memo(() => !!hasChildren())() && isExpanded(item.id);
1536
1634
  },
1537
1635
  get children() {
1538
- var _el$63 = _$getNextElement(_tmpl$31);
1539
- _$insert(_el$63, () => renderItems(nested, depth + 1, item.id));
1540
- return _el$63;
1636
+ var _el$77 = _$getNextElement(_tmpl$36);
1637
+ _$insert(_el$77, () => renderItems(nested, depth + 1, item.id));
1638
+ return _el$77;
1541
1639
  }
1542
- }), _el$67, _co$1);
1640
+ }), _el$81, _co$12);
1543
1641
  _$effect(_p$ => {
1544
- var _v$57 = siblings().length,
1545
- _v$58 = place() + 1,
1546
- _v$59 = selected(),
1547
- _v$60 = hasChildren() ? isExpanded(item.id) : undefined,
1548
- _v$61 = item.disabled ? "true" : undefined,
1549
- _v$62 = item.disabled ? -1 : tabStopId() === item.id ? 0 : -1,
1550
- _v$63 = movable() ? true : undefined,
1551
- _v$64 = item.id,
1552
- _v$65 = dragged()?.id === item.id ? "" : undefined,
1553
- _v$66 = dropTarget()?.id === item.id ? dropTarget().side : undefined,
1554
- _v$67 = String(props.indented === false ? 0 : depth);
1555
- _v$57 !== _p$.e && _$setAttribute(_el$62, "aria-setsize", _p$.e = _v$57);
1556
- _v$58 !== _p$.t && _$setAttribute(_el$62, "aria-posinset", _p$.t = _v$58);
1557
- _v$59 !== _p$.a && _$setAttribute(_el$62, "aria-selected", _p$.a = _v$59);
1558
- _v$60 !== _p$.o && _$setAttribute(_el$62, "aria-expanded", _p$.o = _v$60);
1559
- _v$61 !== _p$.i && _$setAttribute(_el$62, "aria-disabled", _p$.i = _v$61);
1560
- _v$62 !== _p$.n && _$setAttribute(_el$62, "tabindex", _p$.n = _v$62);
1561
- _v$63 !== _p$.s && _$setAttribute(_el$62, "draggable", _p$.s = _v$63);
1562
- _v$64 !== _p$.h && _$setAttribute(_el$62, "data-k2b-nav-tree-id", _p$.h = _v$64);
1563
- _v$65 !== _p$.r && _$setAttribute(_el$62, "data-k2b-nav-tree-dragging", _p$.r = _v$65);
1564
- _v$66 !== _p$.d && _$setAttribute(_el$62, "data-k2b-nav-tree-drop", _p$.d = _v$66);
1565
- _v$67 !== _p$.l && _$setStyleProperty(_el$62, "--k2b-nav-tree-depth", _p$.l = _v$67);
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);
1566
1664
  return _p$;
1567
1665
  }, {
1568
1666
  e: undefined,
@@ -1578,7 +1676,7 @@ const AppWorkspaceNavTree = props => {
1578
1676
  l: undefined
1579
1677
  });
1580
1678
  _$runHydrationEvents();
1581
- return _el$62;
1679
+ return _el$76;
1582
1680
  })();
1583
1681
  }
1584
1682
  });
@@ -1603,62 +1701,62 @@ const AppWorkspaceNavTree = props => {
1603
1701
  });
1604
1702
  });
1605
1703
  return (() => {
1606
- var _el$68 = _$getNextElement(_tmpl$33);
1607
- _el$68.addEventListener("dragend", endDrag);
1608
- _el$68.addEventListener("dragleave", event => {
1704
+ var _el$82 = _$getNextElement(_tmpl$38);
1705
+ _el$82.addEventListener("dragend", endDrag);
1706
+ _el$82.addEventListener("dragleave", event => {
1609
1707
  if (!root?.contains(event.relatedTarget)) setDropTarget(null);
1610
1708
  });
1611
- _el$68.addEventListener("dragover", event => {
1709
+ _el$82.addEventListener("dragover", event => {
1612
1710
  // Runs after the rows: a position no row claimed shows no gap.
1613
1711
  if (claimedDragOver !== event) setDropTarget(null);
1614
1712
  });
1615
1713
  var _ref$4 = root;
1616
- typeof _ref$4 === "function" ? _$use(_ref$4, _el$68) : root = _el$68;
1617
- _$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));
1618
1716
  _$effect(_p$ => {
1619
- var _v$68 = `k2b-app-workspace__nav-tree ${props.class ?? ""}`,
1620
- _v$69 = props.ariaLabel;
1621
- _v$68 !== _p$.e && _$className(_el$68, _p$.e = _v$68);
1622
- _v$69 !== _p$.t && _$setAttribute(_el$68, "aria-label", _p$.t = _v$69);
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);
1623
1721
  return _p$;
1624
1722
  }, {
1625
1723
  e: undefined,
1626
1724
  t: undefined
1627
1725
  });
1628
- return _el$68;
1726
+ return _el$82;
1629
1727
  })();
1630
1728
  };
1631
1729
  AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
1632
1730
  const AppWorkspaceSidebarIconGrid = props => (() => {
1633
- var _el$69 = _$getNextElement(_tmpl$34),
1634
- _el$71 = _el$69.firstChild,
1635
- [_el$72, _co$10] = _$getNextMarker(_el$71.nextSibling),
1636
- _el$70 = _el$72.nextSibling;
1637
- _$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({
1638
1736
  get ["class"]() {
1639
1737
  return `k2b-app-workspace__sidebar-icon-grid-wrap ${props.class ?? ""}`;
1640
1738
  }
1641
1739
  }, () => modeAttrs(props.sidebarMode)), false, true);
1642
- _$insert(_el$69, _$createComponent(Show, {
1740
+ _$insert(_el$83, _$createComponent(Show, {
1643
1741
  get when() {
1644
1742
  return props.title;
1645
1743
  },
1646
1744
  children: title => (() => {
1647
- var _el$73 = _$getNextElement(_tmpl$13);
1648
- _$insert(_el$73, title);
1649
- return _el$73;
1745
+ var _el$87 = _$getNextElement(_tmpl$13);
1746
+ _$insert(_el$87, title);
1747
+ return _el$87;
1650
1748
  })()
1651
- }), _el$72, _co$10);
1652
- _$insert(_el$70, () => props.children);
1653
- _$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));
1654
1752
  _$runHydrationEvents();
1655
- return _el$69;
1753
+ return _el$83;
1656
1754
  })();
1657
1755
  const AppWorkspaceSidebarIconAction = props => {
1658
1756
  const content = (() => {
1659
- var _el$74 = _$getNextElement(_tmpl$35);
1660
- _$effect(() => _$className(_el$74, iconClass(props.icon)));
1661
- return _el$74;
1757
+ var _el$88 = _$getNextElement(_tmpl$40);
1758
+ _$effect(() => _$className(_el$88, iconClass(props.icon)));
1759
+ return _el$88;
1662
1760
  })();
1663
1761
  const attrs = () => ({
1664
1762
  class: `k2b-app-workspace__sidebar-icon-action ${props.active ? "is-active" : ""}`,
@@ -1671,8 +1769,8 @@ const AppWorkspaceSidebarIconAction = props => {
1671
1769
  ...modeAttrs(props.sidebarMode)
1672
1770
  });
1673
1771
  if (!props.href || props.disabled) return (() => {
1674
- var _el$75 = _$getNextElement(_tmpl$15);
1675
- _$spread(_el$75, _$mergeProps(attrs, {
1772
+ var _el$89 = _$getNextElement(_tmpl$20);
1773
+ _$spread(_el$89, _$mergeProps(attrs, {
1676
1774
  get disabled() {
1677
1775
  return props.disabled;
1678
1776
  },
@@ -1680,13 +1778,13 @@ const AppWorkspaceSidebarIconAction = props => {
1680
1778
  return props.onClick;
1681
1779
  }
1682
1780
  }), false, true);
1683
- _$insert(_el$75, content);
1781
+ _$insert(_el$89, content);
1684
1782
  _$runHydrationEvents();
1685
- return _el$75;
1783
+ return _el$89;
1686
1784
  })();
1687
1785
  if (props.navigation !== "enhanced" || !props.onNavigate) return (() => {
1688
- var _el$76 = _$getNextElement(_tmpl$16);
1689
- _$spread(_el$76, _$mergeProps({
1786
+ var _el$90 = _$getNextElement(_tmpl$21);
1787
+ _$spread(_el$90, _$mergeProps({
1690
1788
  get href() {
1691
1789
  return props.href;
1692
1790
  }
@@ -1695,9 +1793,9 @@ const AppWorkspaceSidebarIconAction = props => {
1695
1793
  return props.onClick;
1696
1794
  }
1697
1795
  }), false, true);
1698
- _$insert(_el$76, content);
1796
+ _$insert(_el$90, content);
1699
1797
  _$runHydrationEvents();
1700
- return _el$76;
1798
+ return _el$90;
1701
1799
  })();
1702
1800
  return _$createComponent(Link, _$mergeProps({
1703
1801
  get href() {
@@ -1742,21 +1840,21 @@ const AppWorkspace = props => {
1742
1840
  return props.resizable !== false;
1743
1841
  },
1744
1842
  get children() {
1745
- var _el$77 = _$getNextElement(_tmpl$36);
1843
+ var _el$91 = _$getNextElement(_tmpl$41);
1746
1844
  var _ref$5 = root;
1747
- typeof _ref$5 === "function" ? _$use(_ref$5, _el$77) : root = _el$77;
1748
- _$insert(_el$77, () => props.children);
1845
+ typeof _ref$5 === "function" ? _$use(_ref$5, _el$91) : root = _el$91;
1846
+ _$insert(_el$91, () => props.children);
1749
1847
  _$effect(_p$ => {
1750
- var _v$70 = `k2b-app-workspace ${props.class ?? ""}`,
1751
- _v$71 = props.mobileSurface,
1752
- _v$72 = initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed),
1753
- _v$73 = props.resizable === false ? "false" : "true",
1754
- _v$74 = appWorkspaceLayoutStyle(initialLayoutState());
1755
- _v$70 !== _p$.e && _$className(_el$77, _p$.e = _v$70);
1756
- _v$71 !== _p$.t && _$setAttribute(_el$77, "data-mobile-surface", _p$.t = _v$71);
1757
- _v$72 !== _p$.a && _$setAttribute(_el$77, "data-sidebar-collapsed", _p$.a = _v$72);
1758
- _v$73 !== _p$.o && _$setAttribute(_el$77, "data-workspace-resizable", _p$.o = _v$73);
1759
- _p$.i = _$style(_el$77, _v$74, _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);
1760
1858
  return _p$;
1761
1859
  }, {
1762
1860
  e: undefined,
@@ -1765,7 +1863,7 @@ const AppWorkspace = props => {
1765
1863
  o: undefined,
1766
1864
  i: undefined
1767
1865
  });
1768
- return _el$77;
1866
+ return _el$91;
1769
1867
  }
1770
1868
  });
1771
1869
  };
@@ -1778,10 +1876,10 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
1778
1876
  }
1779
1877
  });
1780
1878
  AppWorkspace.Content = props => (() => {
1781
- var _el$78 = _$getNextElement(_tmpl$2);
1782
- _$insert(_el$78, () => props.children);
1783
- _$effect(() => _$className(_el$78, `k2b-app-workspace__content ${props.class ?? ""}`));
1784
- 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;
1785
1883
  })();
1786
1884
  AppWorkspace.Main = AppWorkspaceMain;
1787
1885
  AppWorkspace.MainPane = AppWorkspaceMainPane;
@@ -1798,6 +1896,7 @@ AppWorkspace.SidebarItemLabel = AppWorkspaceSidebarItemLabel;
1798
1896
  AppWorkspace.SidebarItemMeta = AppWorkspaceSidebarItemMeta;
1799
1897
  AppWorkspace.SidebarItemAction = AppWorkspaceSidebarItemAction;
1800
1898
  AppWorkspace.SidebarItemActions = AppWorkspaceSidebarItemActions;
1899
+ AppWorkspace.SidebarItemStatus = AppWorkspaceSidebarItemStatus;
1801
1900
  AppWorkspace.NavTree = AppWorkspaceNavTree;
1802
1901
  AppWorkspace.SidebarIconGrid = AppWorkspaceSidebarIconGrid;
1803
1902
  AppWorkspace.SidebarIconAction = AppWorkspaceSidebarIconAction;