@k2b/ui 0.31.0 → 0.33.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 (209) hide show
  1. package/dist/base.css +2 -0
  2. package/dist/browser/actions/Dropdown.js +159 -99
  3. package/dist/browser/actions/Dropdown.js.map +1 -1
  4. package/dist/browser/actions/FilterChip.js +113 -56
  5. package/dist/browser/actions/FilterChip.js.map +1 -1
  6. package/dist/browser/actions/ViewTabs.js +8 -0
  7. package/dist/browser/actions/ViewTabs.js.map +1 -1
  8. package/dist/browser/actions/filter-messages.js +26 -2
  9. package/dist/browser/actions/filter-messages.js.map +1 -1
  10. package/dist/browser/actions/menu-rows.js +23 -3
  11. package/dist/browser/actions/menu-rows.js.map +1 -1
  12. package/dist/browser/actions/menu-sheet.js +2 -7
  13. package/dist/browser/actions/menu-sheet.js.map +1 -1
  14. package/dist/browser/chat/ChatComposer.js +480 -403
  15. package/dist/browser/chat/ChatComposer.js.map +1 -1
  16. package/dist/browser/chat/chat-messages.js +14 -0
  17. package/dist/browser/chat/chat-messages.js.map +1 -1
  18. package/dist/browser/chat/index.js.map +1 -1
  19. package/dist/browser/content/Calendar.js +39 -29
  20. package/dist/browser/content/Calendar.js.map +1 -1
  21. package/dist/browser/content/CalendarDayView.js +159 -165
  22. package/dist/browser/content/CalendarDayView.js.map +1 -1
  23. package/dist/browser/content/Chart.js +104 -55
  24. package/dist/browser/content/Chart.js.map +1 -1
  25. package/dist/browser/content/ChartExplorer.js +5 -3
  26. package/dist/browser/content/ChartExplorer.js.map +1 -1
  27. package/dist/browser/content/MapView.js +4 -4
  28. package/dist/browser/content/MapView.js.map +1 -1
  29. package/dist/browser/content/MessageRow.js +607 -343
  30. package/dist/browser/content/MessageRow.js.map +1 -1
  31. package/dist/browser/content/ReactionBar.js +17 -0
  32. package/dist/browser/content/ReactionBar.js.map +1 -1
  33. package/dist/browser/content/chart-inspection-core.js +4 -1
  34. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  35. package/dist/browser/content/code-highlight.js +66 -0
  36. package/dist/browser/content/code-highlight.js.map +1 -1
  37. package/dist/browser/content/index.js +2 -1
  38. package/dist/browser/content/index.js.map +1 -1
  39. package/dist/browser/content/map-view-live.js +47 -10
  40. package/dist/browser/content/map-view-live.js.map +1 -1
  41. package/dist/browser/content/map-view-types.js.map +1 -1
  42. package/dist/browser/feedback/dialog-core.js +6 -0
  43. package/dist/browser/feedback/dialog-core.js.map +1 -1
  44. package/dist/browser/inputs/AutocompleteEditor.js +167 -104
  45. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  46. package/dist/browser/inputs/RichSelect.js +1474 -0
  47. package/dist/browser/inputs/RichSelect.js.map +1 -0
  48. package/dist/browser/inputs/TextInput.js +99 -61
  49. package/dist/browser/inputs/TextInput.js.map +1 -1
  50. package/dist/browser/inputs/choice.js +19 -8
  51. package/dist/browser/inputs/choice.js.map +1 -1
  52. package/dist/browser/inputs/index.js +1 -0
  53. package/dist/browser/inputs/index.js.map +1 -1
  54. package/dist/browser/inputs/rich-select-messages.js +46 -0
  55. package/dist/browser/inputs/rich-select-messages.js.map +1 -0
  56. package/dist/browser/intl/shortcut-messages.js +4 -0
  57. package/dist/browser/intl/shortcut-messages.js.map +1 -1
  58. package/dist/browser/intl/shortcut.js +4 -0
  59. package/dist/browser/intl/shortcut.js.map +1 -1
  60. package/dist/browser/layout/AppWorkspace.js +624 -565
  61. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  62. package/dist/browser/layout/DetailPanel.js +10 -1
  63. package/dist/browser/layout/DetailPanel.js.map +1 -1
  64. package/dist/browser/layout/MobileShell.js +213 -38
  65. package/dist/browser/layout/MobileShell.js.map +1 -1
  66. package/dist/browser/layout/Navigation.js +14 -5
  67. package/dist/browser/layout/Navigation.js.map +1 -1
  68. package/dist/browser/layout/PageTitle.js +9 -3
  69. package/dist/browser/layout/PageTitle.js.map +1 -1
  70. package/dist/browser/layout/ResizeSeparator.js +8 -2
  71. package/dist/browser/layout/ResizeSeparator.js.map +1 -1
  72. package/dist/browser/layout/app-workspace-controller.js +192 -31
  73. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  74. package/dist/browser/layout/index.js +1 -0
  75. package/dist/browser/layout/index.js.map +1 -1
  76. package/dist/browser/layout/navigation-model.js.map +1 -1
  77. package/dist/browser/layout/resize-separator.js +25 -1
  78. package/dist/browser/layout/resize-separator.js.map +1 -1
  79. package/dist/browser/layout/scroll-fade.js +32 -5
  80. package/dist/browser/layout/scroll-fade.js.map +1 -1
  81. package/dist/browser/surfaces/NoticeCard.js +46 -30
  82. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  83. package/dist/browser/surfaces/Skeleton.js +14 -0
  84. package/dist/browser/surfaces/Skeleton.js.map +1 -0
  85. package/dist/browser/surfaces/index.js +1 -0
  86. package/dist/browser/surfaces/index.js.map +1 -1
  87. package/dist/browser/surfaces/resource-messages.js +2 -2
  88. package/dist/browser/surfaces/resource-messages.js.map +1 -1
  89. package/dist/ssr/actions/Dropdown.js +51 -27
  90. package/dist/ssr/actions/Dropdown.js.map +1 -1
  91. package/dist/ssr/actions/FilterChip.js +67 -16
  92. package/dist/ssr/actions/FilterChip.js.map +1 -1
  93. package/dist/ssr/actions/ViewTabs.js +8 -0
  94. package/dist/ssr/actions/ViewTabs.js.map +1 -1
  95. package/dist/ssr/actions/filter-messages.js +26 -2
  96. package/dist/ssr/actions/filter-messages.js.map +1 -1
  97. package/dist/ssr/actions/menu-rows.js +23 -3
  98. package/dist/ssr/actions/menu-rows.js.map +1 -1
  99. package/dist/ssr/actions/menu-sheet.js +2 -7
  100. package/dist/ssr/actions/menu-sheet.js.map +1 -1
  101. package/dist/ssr/chat/ChatComposer.js +96 -67
  102. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  103. package/dist/ssr/chat/chat-messages.js +14 -0
  104. package/dist/ssr/chat/chat-messages.js.map +1 -1
  105. package/dist/ssr/chat/index.js.map +1 -1
  106. package/dist/ssr/content/Calendar.js +40 -31
  107. package/dist/ssr/content/Calendar.js.map +1 -1
  108. package/dist/ssr/content/CalendarDayView.js +40 -48
  109. package/dist/ssr/content/CalendarDayView.js.map +1 -1
  110. package/dist/ssr/content/Chart.js +27 -7
  111. package/dist/ssr/content/Chart.js.map +1 -1
  112. package/dist/ssr/content/ChartExplorer.js +5 -3
  113. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  114. package/dist/ssr/content/MapView.js +4 -4
  115. package/dist/ssr/content/MapView.js.map +1 -1
  116. package/dist/ssr/content/MessageRow.js +264 -91
  117. package/dist/ssr/content/MessageRow.js.map +1 -1
  118. package/dist/ssr/content/ReactionBar.js +17 -0
  119. package/dist/ssr/content/ReactionBar.js.map +1 -1
  120. package/dist/ssr/content/chart-inspection-core.js +4 -1
  121. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  122. package/dist/ssr/content/code-highlight.js +66 -0
  123. package/dist/ssr/content/code-highlight.js.map +1 -1
  124. package/dist/ssr/content/index.js +2 -1
  125. package/dist/ssr/content/index.js.map +1 -1
  126. package/dist/ssr/content/map-view-types.js.map +1 -1
  127. package/dist/ssr/feedback/dialog-core.js +6 -0
  128. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  129. package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
  130. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  131. package/dist/ssr/inputs/RichSelect.js +950 -0
  132. package/dist/ssr/inputs/RichSelect.js.map +1 -0
  133. package/dist/ssr/inputs/TextInput.js +44 -17
  134. package/dist/ssr/inputs/TextInput.js.map +1 -1
  135. package/dist/ssr/inputs/choice.js +19 -8
  136. package/dist/ssr/inputs/choice.js.map +1 -1
  137. package/dist/ssr/inputs/index.js +1 -0
  138. package/dist/ssr/inputs/index.js.map +1 -1
  139. package/dist/ssr/inputs/rich-select-messages.js +46 -0
  140. package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
  141. package/dist/ssr/intl/shortcut-messages.js +4 -0
  142. package/dist/ssr/intl/shortcut-messages.js.map +1 -1
  143. package/dist/ssr/intl/shortcut.js +4 -0
  144. package/dist/ssr/intl/shortcut.js.map +1 -1
  145. package/dist/ssr/layout/AppWorkspace.js +166 -125
  146. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  147. package/dist/ssr/layout/DetailPanel.js +1 -1
  148. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  149. package/dist/ssr/layout/MobileShell.js +100 -20
  150. package/dist/ssr/layout/MobileShell.js.map +1 -1
  151. package/dist/ssr/layout/Navigation.js +1 -1
  152. package/dist/ssr/layout/Navigation.js.map +1 -1
  153. package/dist/ssr/layout/PageTitle.js +9 -3
  154. package/dist/ssr/layout/PageTitle.js.map +1 -1
  155. package/dist/ssr/layout/ResizeSeparator.js +4 -1
  156. package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
  157. package/dist/ssr/layout/app-workspace-controller.js +192 -31
  158. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  159. package/dist/ssr/layout/index.js +1 -0
  160. package/dist/ssr/layout/index.js.map +1 -1
  161. package/dist/ssr/layout/navigation-model.js.map +1 -1
  162. package/dist/ssr/layout/resize-separator.js +25 -1
  163. package/dist/ssr/layout/resize-separator.js.map +1 -1
  164. package/dist/ssr/layout/scroll-fade.js +32 -5
  165. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  166. package/dist/ssr/surfaces/NoticeCard.js +21 -12
  167. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  168. package/dist/ssr/surfaces/Skeleton.js +8 -0
  169. package/dist/ssr/surfaces/Skeleton.js.map +1 -0
  170. package/dist/ssr/surfaces/index.js +1 -0
  171. package/dist/ssr/surfaces/index.js.map +1 -1
  172. package/dist/ssr/surfaces/resource-messages.js +2 -2
  173. package/dist/ssr/surfaces/resource-messages.js.map +1 -1
  174. package/dist/styles.css +1 -1
  175. package/dist/types/actions/Dropdown.d.ts +14 -0
  176. package/dist/types/actions/FilterChip.d.ts +11 -0
  177. package/dist/types/actions/filter-messages.d.ts +12 -0
  178. package/dist/types/actions/menu-rows.d.ts +7 -2
  179. package/dist/types/chat/ChatComposer.d.ts +13 -0
  180. package/dist/types/chat/chat-messages.d.ts +7 -0
  181. package/dist/types/chat/index.d.ts +1 -1
  182. package/dist/types/content/Calendar.d.ts +7 -0
  183. package/dist/types/content/Chart.d.ts +4 -2
  184. package/dist/types/content/ChartExplorer.d.ts +0 -1
  185. package/dist/types/content/MessageRow.d.ts +64 -2
  186. package/dist/types/content/code-highlight.d.ts +3 -1
  187. package/dist/types/content/index.d.ts +3 -2
  188. package/dist/types/content/map-view-live.d.ts +1 -1
  189. package/dist/types/content/map-view-types.d.ts +2 -0
  190. package/dist/types/feedback/dialog-core.d.ts +3 -0
  191. package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
  192. package/dist/types/inputs/RichSelect.d.ts +93 -0
  193. package/dist/types/inputs/TextInput.d.ts +5 -2
  194. package/dist/types/inputs/choice.d.ts +24 -4
  195. package/dist/types/inputs/index.d.ts +2 -0
  196. package/dist/types/inputs/rich-select-messages.d.ts +21 -0
  197. package/dist/types/intl/shortcut-messages.d.ts +2 -0
  198. package/dist/types/layout/AppWorkspace.d.ts +9 -0
  199. package/dist/types/layout/DetailPanel.d.ts +2 -0
  200. package/dist/types/layout/MobileShell.d.ts +52 -5
  201. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  202. package/dist/types/layout/index.d.ts +2 -1
  203. package/dist/types/layout/navigation-model.d.ts +2 -0
  204. package/dist/types/layout/resize-separator.d.ts +1 -0
  205. package/dist/types/layout/scroll-fade.d.ts +5 -0
  206. package/dist/types/surfaces/NoticeCard.d.ts +3 -0
  207. package/dist/types/surfaces/Skeleton.d.ts +6 -0
  208. package/dist/types/surfaces/index.d.ts +1 -0
  209. package/package.json +4 -4
package/dist/base.css CHANGED
@@ -64,6 +64,7 @@
64
64
  --k2b-danger-text: light-dark(#b91c1c, #fca5a5);
65
65
  /* light-dark() only takes colors, so the shadow switches with the theme attribute. */
66
66
  --k2b-shadow-float: 0 18px 48px rgb(9 9 11 / 0.18);
67
+ --k2b-shadow-side: -14px 0 36px rgb(9 9 11 / 0.16);
67
68
  /* What an inspected mark's color mixes with: darker in light, lighter in dark. */
68
69
  --k2b-chart-highlight-mix: light-dark(black, white);
69
70
  }
@@ -71,6 +72,7 @@
71
72
  :root[data-theme="dark"] {
72
73
  color-scheme: dark;
73
74
  --k2b-shadow-float: 0 22px 56px rgb(0 0 0 / 0.52);
75
+ --k2b-shadow-side: -16px 0 40px rgb(0 0 0 / 0.5);
74
76
  }
75
77
 
76
78
  *,
@@ -3,8 +3,8 @@ import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
3
  import { style as _$style } from "solid-js/web";
4
4
  import { use as _$use } from "solid-js/web";
5
5
  import { spread as _$spread } from "solid-js/web";
6
- import { mergeProps as _$mergeProps } from "solid-js/web";
7
6
  import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
7
+ import { mergeProps as _$mergeProps } from "solid-js/web";
8
8
  import { setProperty as _$setProperty } from "solid-js/web";
9
9
  import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
10
10
  import { setAttribute as _$setAttribute } from "solid-js/web";
@@ -21,15 +21,17 @@ var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-dropdown__copy><span></spa
21
21
  _tmpl$4 = /*#__PURE__*/_$template(`<small>`),
22
22
  _tmpl$5 = /*#__PURE__*/_$template(`<button type=button role=menuitem tabindex=-1>`),
23
23
  _tmpl$6 = /*#__PURE__*/_$template(`<a role=menuitem tabindex=-1>`),
24
- _tmpl$7 = /*#__PURE__*/_$template(`<i class="ti ti-check">`),
25
- _tmpl$8 = /*#__PURE__*/_$template(`<span class=k2b-dropdown__checkbox aria-hidden=true>`),
26
- _tmpl$9 = /*#__PURE__*/_$template(`<i class="ti ti-check k2b-dropdown__check"aria-hidden=true>`),
27
- _tmpl$0 = /*#__PURE__*/_$template(`<span class=k2b-dropdown__color aria-hidden=true>`),
28
- _tmpl$1 = /*#__PURE__*/_$template(`<div class=k2b-dropdown__row>`),
29
- _tmpl$10 = /*#__PURE__*/_$template(`<div class=k2b-dropdown__section role=group><!$><!/><!$><!/>`),
30
- _tmpl$11 = /*#__PURE__*/_$template(`<div class=k2b-dropdown__label>`),
31
- _tmpl$12 = /*#__PURE__*/_$template(`<button>`),
32
- _tmpl$13 = /*#__PURE__*/_$template(`<span><!$><!/><div popover=auto role=menu>`);
24
+ _tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-dropdown__pair><!$><!/><!$><!/>`),
25
+ _tmpl$8 = /*#__PURE__*/_$template(`<i class="ti ti-check">`),
26
+ _tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-dropdown__checkbox aria-hidden=true>`),
27
+ _tmpl$0 = /*#__PURE__*/_$template(`<i class="ti ti-check k2b-dropdown__check"aria-hidden=true>`),
28
+ _tmpl$1 = /*#__PURE__*/_$template(`<span class=k2b-dropdown__color aria-hidden=true>`),
29
+ _tmpl$10 = /*#__PURE__*/_$template(`<div class=k2b-dropdown__row>`),
30
+ _tmpl$11 = /*#__PURE__*/_$template(`<div class=k2b-dropdown__section role=group><!$><!/><!$><!/>`),
31
+ _tmpl$12 = /*#__PURE__*/_$template(`<div class=k2b-dropdown__label>`),
32
+ _tmpl$13 = /*#__PURE__*/_$template(`<div class="k2b-dropdown__label k2b-dropdown__label--action"><span></span><!$><!/>`),
33
+ _tmpl$14 = /*#__PURE__*/_$template(`<button>`),
34
+ _tmpl$15 = /*#__PURE__*/_$template(`<span><!$><!/><div popover=auto role=menu>`);
33
35
  import { createContext, createEffect, createSignal, createUniqueId, For, onCleanup, onMount, Show, splitProps, useContext } from "solid-js";
34
36
  import { Dynamic } from "solid-js/web";
35
37
  import { Tooltip, useLabelTooltip } from "../feedback/Tooltip";
@@ -37,19 +39,21 @@ import { returnFocus, ringOnReturn } from "../internal/focus-return";
37
39
  import { useLocale } from "../intl/locale";
38
40
  import { useUiMessages } from "../intl/messages";
39
41
  import { Button, iconTitle } from "./Button";
40
- import { focusRowSegment } from "./menu-rows";
42
+ import { focusMenuRow, focusRowSegment } from "./menu-rows";
41
43
  import { openMenuSheet, prefersMenuSheet } from "./menu-sheet";
42
44
 
43
45
  // Resolved outside JSX: a conditional attribute compiles to a lazy memo, which would be created inside the click handler.
44
46
  const selectAction = item => item.action;
45
47
 
48
+ /** A second, smaller action at the end of a row, such as "Only" beside a checkbox; it keeps the menu open. */
49
+
46
50
  /** Declarative radio or checkbox row for compact action menus. */
47
51
 
48
52
  const MenuContext = createContext();
49
53
  const DropdownContext = createContext();
50
54
  const actionableItems = menu => menu ? Array.from(menu.querySelectorAll(["[role='menuitem']:not([aria-disabled='true'])", "[role='menuitemcheckbox']:not([aria-disabled='true'])", "[role='menuitemradio']:not([aria-disabled='true'])"].join(", "))) : [];
51
55
  const focusMenuItem = (menu, index) => {
52
- const items = actionableItems(menu);
56
+ const items = actionableItems(menu).filter(item => !item.classList.contains("k2b-dropdown__secondary"));
53
57
  if (items.length === 0) return;
54
58
  items[(index + items.length) % items.length]?.focus();
55
59
  };
@@ -188,6 +192,51 @@ export function DropdownItem(props) {
188
192
  });
189
193
  }
190
194
  function DropdownChoiceItem(props) {
195
+ return _$createComponent(Show, {
196
+ get when() {
197
+ return props.secondary;
198
+ },
199
+ get fallback() {
200
+ return _$createComponent(DropdownChoiceRow, props);
201
+ },
202
+ children: secondary => (() => {
203
+ var _el$0 = _$getNextElement(_tmpl$7),
204
+ _el$1 = _el$0.firstChild,
205
+ [_el$10, _co$2] = _$getNextMarker(_el$1.nextSibling),
206
+ _el$11 = _el$10.nextSibling,
207
+ [_el$12, _co$3] = _$getNextMarker(_el$11.nextSibling);
208
+ _$insert(_el$0, _$createComponent(DropdownChoiceRow, props), _el$10, _co$2);
209
+ _$insert(_el$0, _$createComponent(DropdownSecondaryButton, _$mergeProps(secondary, {
210
+ "class": "k2b-dropdown__secondary"
211
+ })), _el$12, _co$3);
212
+ return _el$0;
213
+ })()
214
+ });
215
+ }
216
+ function DropdownSecondaryButton(props) {
217
+ return (() => {
218
+ var _el$13 = _$getNextElement(_tmpl$5);
219
+ _el$13.$$click = event => {
220
+ event.preventDefault();
221
+ event.stopPropagation();
222
+ props.action();
223
+ };
224
+ _$insert(_el$13, () => props.label);
225
+ _$effect(_p$ => {
226
+ var _v$10 = props.class,
227
+ _v$11 = props.ariaLabel;
228
+ _v$10 !== _p$.e && _$className(_el$13, _p$.e = _v$10);
229
+ _v$11 !== _p$.t && _$setAttribute(_el$13, "aria-label", _p$.t = _v$11);
230
+ return _p$;
231
+ }, {
232
+ e: undefined,
233
+ t: undefined
234
+ });
235
+ _$runHydrationEvents();
236
+ return _el$13;
237
+ })();
238
+ }
239
+ function DropdownChoiceRow(props) {
191
240
  const menu = useContext(MenuContext);
192
241
  const checked = () => typeof props.checked === "function" ? props.checked() : props.checked;
193
242
  let element;
@@ -248,16 +297,16 @@ function DropdownChoiceItem(props) {
248
297
  return props.choice === "checkbox";
249
298
  },
250
299
  get children() {
251
- var _el$0 = _$getNextElement(_tmpl$8);
252
- _$insert(_el$0, _$createComponent(Show, {
300
+ var _el$14 = _$getNextElement(_tmpl$9);
301
+ _$insert(_el$14, _$createComponent(Show, {
253
302
  get when() {
254
303
  return checked();
255
304
  },
256
305
  get children() {
257
- return _$getNextElement(_tmpl$7);
306
+ return _$getNextElement(_tmpl$8);
258
307
  }
259
308
  }));
260
- return _el$0;
309
+ return _el$14;
261
310
  }
262
311
  }), _$createComponent(Show, {
263
312
  get when() {
@@ -269,51 +318,51 @@ function DropdownChoiceItem(props) {
269
318
  return props.icon;
270
319
  },
271
320
  children: icon => (() => {
272
- var _el$15 = _$getNextElement(_tmpl$2);
273
- _$effect(() => _$className(_el$15, icon()));
274
- return _el$15;
321
+ var _el$21 = _$getNextElement(_tmpl$2);
322
+ _$effect(() => _$className(_el$21, icon()));
323
+ return _el$21;
275
324
  })()
276
325
  });
277
326
  },
278
327
  children: image => (() => {
279
- var _el$16 = _$getNextElement(_tmpl$3);
280
- _$effect(() => _$setAttribute(_el$16, "src", image()));
281
- return _el$16;
328
+ var _el$22 = _$getNextElement(_tmpl$3);
329
+ _$effect(() => _$setAttribute(_el$22, "src", image()));
330
+ return _el$22;
282
331
  })()
283
332
  }), _$createComponent(Show, {
284
333
  get when() {
285
334
  return props.color;
286
335
  },
287
336
  children: color => (() => {
288
- var _el$17 = _$getNextElement(_tmpl$0);
289
- _$effect(_$p => _$setStyleProperty(_el$17, "--k2b-dropdown-color", color()));
290
- return _el$17;
337
+ var _el$23 = _$getNextElement(_tmpl$1);
338
+ _$effect(_$p => _$setStyleProperty(_el$23, "--k2b-dropdown-color", color()));
339
+ return _el$23;
291
340
  })()
292
341
  }), (() => {
293
- var _el$10 = _$getNextElement(_tmpl$),
294
- _el$11 = _el$10.firstChild,
295
- _el$12 = _el$11.nextSibling,
296
- [_el$13, _co$2] = _$getNextMarker(_el$12.nextSibling);
297
- _$insert(_el$11, () => props.label);
298
- _$insert(_el$10, _$createComponent(Show, {
342
+ var _el$16 = _$getNextElement(_tmpl$),
343
+ _el$17 = _el$16.firstChild,
344
+ _el$18 = _el$17.nextSibling,
345
+ [_el$19, _co$4] = _$getNextMarker(_el$18.nextSibling);
346
+ _$insert(_el$17, () => props.label);
347
+ _$insert(_el$16, _$createComponent(Show, {
299
348
  get when() {
300
349
  return props.description;
301
350
  },
302
351
  children: description => (() => {
303
- var _el$18 = _$getNextElement(_tmpl$4);
304
- _$insert(_el$18, description);
305
- return _el$18;
352
+ var _el$24 = _$getNextElement(_tmpl$4);
353
+ _$insert(_el$24, description);
354
+ return _el$24;
306
355
  })()
307
- }), _el$13, _co$2);
308
- return _el$10;
356
+ }), _el$19, _co$4);
357
+ return _el$16;
309
358
  })(), _$memo(() => props.trailing), _$createComponent(Show, {
310
359
  get when() {
311
360
  return props.choice === "radio";
312
361
  },
313
362
  get children() {
314
- var _el$14 = _$getNextElement(_tmpl$9);
315
- _$effect(() => _$setAttribute(_el$14, "data-hidden", checked() ? undefined : "true"));
316
- return _el$14;
363
+ var _el$20 = _$getNextElement(_tmpl$0);
364
+ _$effect(() => _$setAttribute(_el$20, "data-hidden", checked() ? undefined : "true"));
365
+ return _el$20;
317
366
  }
318
367
  })];
319
368
  }
@@ -381,22 +430,40 @@ export function DropdownItems(props) {
381
430
  return renderItem(item);
382
431
  },
383
432
  get children() {
384
- var _el$19 = _$getNextElement(_tmpl$10),
385
- _el$21 = _el$19.firstChild,
386
- [_el$22, _co$3] = _$getNextMarker(_el$21.nextSibling),
387
- _el$23 = _el$22.nextSibling,
388
- [_el$24, _co$4] = _$getNextMarker(_el$23.nextSibling);
389
- _$insert(_el$19, _$createComponent(Show, {
433
+ var _el$25 = _$getNextElement(_tmpl$11),
434
+ _el$27 = _el$25.firstChild,
435
+ [_el$28, _co$5] = _$getNextMarker(_el$27.nextSibling),
436
+ _el$29 = _el$28.nextSibling,
437
+ [_el$30, _co$6] = _$getNextMarker(_el$29.nextSibling);
438
+ _$insert(_el$25, _$createComponent(Show, {
390
439
  get when() {
391
440
  return item.sectionLabel;
392
441
  },
393
- children: label => (() => {
394
- var _el$25 = _$getNextElement(_tmpl$11);
395
- _$insert(_el$25, label);
396
- return _el$25;
397
- })()
398
- }), _el$22, _co$3);
399
- _$insert(_el$19, _$createComponent(Show, {
442
+ children: label => _$createComponent(Show, {
443
+ get when() {
444
+ return item.labelAction;
445
+ },
446
+ get fallback() {
447
+ return (() => {
448
+ var _el$31 = _$getNextElement(_tmpl$12);
449
+ _$insert(_el$31, label);
450
+ return _el$31;
451
+ })();
452
+ },
453
+ children: action => (() => {
454
+ var _el$32 = _$getNextElement(_tmpl$13),
455
+ _el$33 = _el$32.firstChild,
456
+ _el$34 = _el$33.nextSibling,
457
+ [_el$35, _co$7] = _$getNextMarker(_el$34.nextSibling);
458
+ _$insert(_el$33, label);
459
+ _$insert(_el$32, _$createComponent(DropdownSecondaryButton, _$mergeProps(action, {
460
+ "class": "k2b-dropdown__label-action"
461
+ })), _el$35, _co$7);
462
+ return _el$32;
463
+ })()
464
+ })
465
+ }), _el$28, _co$5);
466
+ _$insert(_el$25, _$createComponent(Show, {
400
467
  get when() {
401
468
  return item.layout === "row";
402
469
  },
@@ -409,27 +476,27 @@ export function DropdownItems(props) {
409
476
  });
410
477
  },
411
478
  get children() {
412
- var _el$20 = _$getNextElement(_tmpl$1);
413
- _$insert(_el$20, _$createComponent(For, {
479
+ var _el$26 = _$getNextElement(_tmpl$10);
480
+ _$insert(_el$26, _$createComponent(For, {
414
481
  get each() {
415
482
  return item.items;
416
483
  },
417
484
  children: renderItem
418
485
  }));
419
- return _el$20;
486
+ return _el$26;
420
487
  }
421
- }), _el$24, _co$4);
488
+ }), _el$30, _co$6);
422
489
  _$effect(_p$ => {
423
- var _v$10 = index() > 0 ? "true" : undefined,
424
- _v$11 = item.sectionLabel ?? (item.layout === "row" ? undefined : messages().actions);
425
- _v$10 !== _p$.e && _$setAttribute(_el$19, "data-divided", _p$.e = _v$10);
426
- _v$11 !== _p$.t && _$setAttribute(_el$19, "aria-label", _p$.t = _v$11);
490
+ var _v$12 = index() > 0 ? "true" : undefined,
491
+ _v$13 = item.sectionLabel ?? (item.layout === "row" ? undefined : messages().actions);
492
+ _v$12 !== _p$.e && _$setAttribute(_el$25, "data-divided", _p$.e = _v$12);
493
+ _v$13 !== _p$.t && _$setAttribute(_el$25, "aria-label", _p$.t = _v$13);
427
494
  return _p$;
428
495
  }, {
429
496
  e: undefined,
430
497
  t: undefined
431
498
  });
432
- return _el$19;
499
+ return _el$25;
433
500
  }
434
501
  })
435
502
  });
@@ -506,9 +573,9 @@ function DropdownTrigger(props) {
506
573
  }));
507
574
  }
508
575
  return [(() => {
509
- var _el$26 = _$getNextElement(_tmpl$12);
510
- _$use(register, _el$26);
511
- _$spread(_el$26, _$mergeProps(rest, {
576
+ var _el$36 = _$getNextElement(_tmpl$14);
577
+ _$use(register, _el$36);
578
+ _$spread(_el$36, _$mergeProps(rest, {
512
579
  get ["aria-controls"]() {
513
580
  return context.menuId;
514
581
  },
@@ -539,9 +606,9 @@ function DropdownTrigger(props) {
539
606
  return iconTitle(local.title, tooltip());
540
607
  }
541
608
  }), false, true);
542
- _$insert(_el$26, () => local.children);
609
+ _$insert(_el$36, () => local.children);
543
610
  _$runHydrationEvents();
544
- return _el$26;
611
+ return _el$36;
545
612
  })(), _$createComponent(Show, {
546
613
  get when() {
547
614
  return _$memo(() => tooltip() !== false)() && tooltip() !== undefined;
@@ -667,15 +734,8 @@ function DropdownRoot(props) {
667
734
  };
668
735
  const handleMenuKeyDown = event => {
669
736
  const items = actionableItems(menuRef);
670
- const current = items.indexOf(document.activeElement);
671
- if (event.key === "ArrowDown" || event.key === "ArrowUp") {
672
- event.preventDefault();
673
- focusMenuItem(menuRef, current + (event.key === "ArrowDown" ? 1 : -1));
674
- } else if (focusRowSegment(items, event.key)) {
675
- event.preventDefault();
676
- } else if (event.key === "Home" || event.key === "End") {
737
+ if (focusMenuRow(items, event.key) || focusRowSegment(items, event.key)) {
677
738
  event.preventDefault();
678
- focusMenuItem(menuRef, event.key === "Home" ? 0 : -1);
679
739
  } else if (event.key === "Escape") {
680
740
  event.preventDefault();
681
741
  returnFocus(triggerRef, triggerRing);
@@ -725,12 +785,12 @@ function DropdownRoot(props) {
725
785
  return _$createComponent(DropdownContext.Provider, {
726
786
  value: context,
727
787
  get children() {
728
- var _el$27 = _$getNextElement(_tmpl$13),
729
- _el$29 = _el$27.firstChild,
730
- [_el$30, _co$5] = _$getNextMarker(_el$29.nextSibling),
731
- _el$28 = _el$30.nextSibling;
732
- _$insert(_el$27, () => props.children, _el$30, _co$5);
733
- _el$28.addEventListener("toggle", event => {
788
+ var _el$37 = _$getNextElement(_tmpl$15),
789
+ _el$39 = _el$37.firstChild,
790
+ [_el$40, _co$8] = _$getNextMarker(_el$39.nextSibling),
791
+ _el$38 = _el$40.nextSibling;
792
+ _$insert(_el$37, () => props.children, _el$40, _co$8);
793
+ _el$38.addEventListener("toggle", event => {
734
794
  const nextOpen = event.newState === "open";
735
795
  const wasOpen = event.oldState === "open";
736
796
  setInternalOpen(nextOpen);
@@ -739,33 +799,33 @@ function DropdownRoot(props) {
739
799
  if (wasOpen && !nextOpen) props.onClose?.();
740
800
  if (!nextOpen && props.open === true) queueMicrotask(() => props.open === true && open(false));
741
801
  });
742
- _el$28.$$keydown = handleMenuKeyDown;
802
+ _el$38.$$keydown = handleMenuKeyDown;
743
803
  var _ref$ = menuRef;
744
- typeof _ref$ === "function" ? _$use(_ref$, _el$28) : menuRef = _el$28;
745
- _$setAttribute(_el$28, "id", menuId);
746
- _$insert(_el$28, _$createComponent(DropdownItems, {
804
+ typeof _ref$ === "function" ? _$use(_ref$, _el$38) : menuRef = _el$38;
805
+ _$setAttribute(_el$38, "id", menuId);
806
+ _$insert(_el$38, _$createComponent(DropdownItems, {
747
807
  get items() {
748
808
  return props.items;
749
809
  },
750
810
  close: close
751
811
  }));
752
812
  _$effect(_p$ => {
753
- var _v$12 = `k2b-dropdown ${props.class ?? ""}`,
754
- _v$13 = props.label ?? messages().dropdownMenu,
755
- _v$14 = `k2b-dropdown__menu ${props.menuClass ?? ""}`,
756
- _v$15 = props.width ? {
813
+ var _v$14 = `k2b-dropdown ${props.class ?? ""}`,
814
+ _v$15 = props.label ?? messages().dropdownMenu,
815
+ _v$16 = `k2b-dropdown__menu ${props.menuClass ?? ""}`,
816
+ _v$17 = props.width ? {
757
817
  "--k2b-dropdown-width": props.width
758
818
  } : undefined,
759
- _v$16 = props.width ? "fixed" : undefined,
760
- _v$17 = props.variant ?? "default",
761
- _v$18 = position();
762
- _v$12 !== _p$.e && _$className(_el$27, _p$.e = _v$12);
763
- _v$13 !== _p$.t && _$setAttribute(_el$28, "aria-label", _p$.t = _v$13);
764
- _v$14 !== _p$.a && _$className(_el$28, _p$.a = _v$14);
765
- _p$.o = _$style(_el$28, _v$15, _p$.o);
766
- _v$16 !== _p$.i && _$setAttribute(_el$28, "data-width", _p$.i = _v$16);
767
- _v$17 !== _p$.n && _$setAttribute(_el$28, "data-variant", _p$.n = _v$17);
768
- _v$18 !== _p$.s && _$setAttribute(_el$28, "data-position", _p$.s = _v$18);
819
+ _v$18 = props.width ? "fixed" : undefined,
820
+ _v$19 = props.variant ?? "default",
821
+ _v$20 = position();
822
+ _v$14 !== _p$.e && _$className(_el$37, _p$.e = _v$14);
823
+ _v$15 !== _p$.t && _$setAttribute(_el$38, "aria-label", _p$.t = _v$15);
824
+ _v$16 !== _p$.a && _$className(_el$38, _p$.a = _v$16);
825
+ _p$.o = _$style(_el$38, _v$17, _p$.o);
826
+ _v$18 !== _p$.i && _$setAttribute(_el$38, "data-width", _p$.i = _v$18);
827
+ _v$19 !== _p$.n && _$setAttribute(_el$38, "data-variant", _p$.n = _v$19);
828
+ _v$20 !== _p$.s && _$setAttribute(_el$38, "data-position", _p$.s = _v$20);
769
829
  return _p$;
770
830
  }, {
771
831
  e: undefined,
@@ -777,7 +837,7 @@ function DropdownRoot(props) {
777
837
  s: undefined
778
838
  });
779
839
  _$runHydrationEvents();
780
- return _el$27;
840
+ return _el$37;
781
841
  }
782
842
  });
783
843
  }