@k2b/ui 0.26.0 → 0.28.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.
- package/README.md +1 -1
- package/dist/base.css +147 -2
- package/dist/browser/actions/ContextMenu.js +30 -4
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/Dropdown.js +184 -158
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/GestureMenu.js +71 -138
- package/dist/browser/actions/GestureMenu.js.map +1 -1
- package/dist/browser/actions/Toolbar.js +379 -48
- package/dist/browser/actions/Toolbar.js.map +1 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/actions/menu-rows.js +15 -0
- package/dist/browser/actions/menu-rows.js.map +1 -0
- package/dist/browser/actions/menu-sheet.js +154 -0
- package/dist/browser/actions/menu-sheet.js.map +1 -0
- package/dist/browser/actions/toolbar-messages.js +20 -0
- package/dist/browser/actions/toolbar-messages.js.map +1 -0
- package/dist/browser/chart-inspection.js +3 -0
- package/dist/browser/chart-inspection.js.map +1 -0
- package/dist/browser/chat/ChatComposer.js +1020 -431
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/chat-behavior.js +4 -0
- package/dist/browser/chat/chat-behavior.js.map +1 -1
- package/dist/browser/chat/chat-messages.js +33 -1
- package/dist/browser/chat/chat-messages.js.map +1 -1
- package/dist/browser/chat/command-search.js +173 -0
- package/dist/browser/chat/command-search.js.map +1 -0
- package/dist/browser/chat/composer-document.js +1 -1
- package/dist/browser/chat/composer-document.js.map +1 -1
- package/dist/browser/chat/index.js +2 -0
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/chat/reaction-people.js +15 -0
- package/dist/browser/chat/reaction-people.js.map +1 -0
- package/dist/browser/content/CalendarDayView.js +28 -3
- package/dist/browser/content/CalendarDayView.js.map +1 -1
- package/dist/browser/content/Chart.js +6 -15
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartSnapshotView.js +7 -10
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/MessageRow.js +330 -448
- package/dist/browser/content/MessageRow.js.map +1 -1
- package/dist/browser/content/ReactionBar.js +419 -0
- package/dist/browser/content/ReactionBar.js.map +1 -0
- package/dist/browser/content/chart-inspection-core.js +557 -0
- package/dist/browser/content/chart-inspection-core.js.map +1 -0
- package/dist/browser/content/chart-inspection.js +10 -445
- package/dist/browser/content/chart-inspection.js.map +1 -1
- package/dist/browser/content/chart-line-gaps.js +1 -1
- package/dist/browser/content/chart-line-gaps.js.map +1 -1
- package/dist/browser/content/chart-snapshot.js +1 -1
- package/dist/browser/content/chart-snapshot.js.map +1 -1
- package/dist/browser/content/index.js +1 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js +135 -23
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/index.js +1 -0
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/input-mode.js +40 -0
- package/dist/browser/input-mode.js.map +1 -0
- package/dist/browser/inputs/Combobox.js +4 -2
- package/dist/browser/inputs/Combobox.js.map +1 -1
- package/dist/browser/inputs/FileDropTarget.js +24 -9
- package/dist/browser/inputs/FileDropTarget.js.map +1 -1
- package/dist/browser/inputs/FileInputs.js +2 -2
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js +52 -12
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/emoji/EmojiPicker.js +13 -0
- package/dist/browser/inputs/emoji/EmojiPicker.js.map +1 -1
- package/dist/browser/inputs/file-drop.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +708 -515
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js +8 -0
- package/dist/browser/layout/BottomSheet.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +283 -197
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/Discussion.js +233 -185
- package/dist/browser/layout/Discussion.js.map +1 -1
- package/dist/browser/layout/TableOfContents.js +10 -2
- package/dist/browser/layout/TableOfContents.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +155 -23
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/app-workspace-state.js +5 -1
- package/dist/browser/layout/app-workspace-state.js.map +1 -1
- package/dist/browser/layout/detail-panel-messages.js +35 -0
- package/dist/browser/layout/detail-panel-messages.js.map +1 -0
- package/dist/browser/layout/index.js +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/surfaces/Avatar.js +50 -20
- package/dist/browser/surfaces/Avatar.js.map +1 -1
- package/dist/browser/surfaces/AvatarStack.js +406 -0
- package/dist/browser/surfaces/AvatarStack.js.map +1 -0
- package/dist/browser/surfaces/avatar-messages.js +8 -2
- package/dist/browser/surfaces/avatar-messages.js.map +1 -1
- package/dist/browser/surfaces/index.js +1 -0
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js +21 -3
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +140 -72
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/GestureMenu.js +52 -106
- package/dist/ssr/actions/GestureMenu.js.map +1 -1
- package/dist/ssr/actions/Toolbar.js +294 -14
- package/dist/ssr/actions/Toolbar.js.map +1 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/actions/menu-rows.js +15 -0
- package/dist/ssr/actions/menu-rows.js.map +1 -0
- package/dist/ssr/actions/menu-sheet.js +138 -0
- package/dist/ssr/actions/menu-sheet.js.map +1 -0
- package/dist/ssr/actions/toolbar-messages.js +20 -0
- package/dist/ssr/actions/toolbar-messages.js.map +1 -0
- package/dist/ssr/chart-inspection.js +3 -0
- package/dist/ssr/chart-inspection.js.map +1 -0
- package/dist/ssr/chat/ChatComposer.js +604 -113
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/chat-behavior.js +4 -0
- package/dist/ssr/chat/chat-behavior.js.map +1 -1
- package/dist/ssr/chat/chat-messages.js +33 -1
- package/dist/ssr/chat/chat-messages.js.map +1 -1
- package/dist/ssr/chat/command-search.js +173 -0
- package/dist/ssr/chat/command-search.js.map +1 -0
- package/dist/ssr/chat/composer-document.js +1 -1
- package/dist/ssr/chat/composer-document.js.map +1 -1
- package/dist/ssr/chat/index.js +2 -0
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/chat/reaction-people.js +15 -0
- package/dist/ssr/chat/reaction-people.js.map +1 -0
- package/dist/ssr/content/CalendarDayView.js +28 -3
- package/dist/ssr/content/CalendarDayView.js.map +1 -1
- package/dist/ssr/content/Chart.js +6 -15
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartSnapshotView.js +7 -10
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/MessageRow.js +98 -152
- package/dist/ssr/content/MessageRow.js.map +1 -1
- package/dist/ssr/content/ReactionBar.js +304 -0
- package/dist/ssr/content/ReactionBar.js.map +1 -0
- package/dist/ssr/content/chart-inspection-core.js +557 -0
- package/dist/ssr/content/chart-inspection-core.js.map +1 -0
- package/dist/ssr/content/chart-inspection.js +10 -445
- package/dist/ssr/content/chart-inspection.js.map +1 -1
- package/dist/ssr/content/chart-line-gaps.js +1 -1
- package/dist/ssr/content/chart-line-gaps.js.map +1 -1
- package/dist/ssr/content/chart-snapshot.js +1 -1
- package/dist/ssr/content/chart-snapshot.js.map +1 -1
- package/dist/ssr/content/index.js +1 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js +135 -23
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/index.js +1 -0
- package/dist/ssr/index.js.map +1 -1
- package/dist/ssr/input-mode.js +40 -0
- package/dist/ssr/input-mode.js.map +1 -0
- package/dist/ssr/inputs/Combobox.js +4 -2
- package/dist/ssr/inputs/Combobox.js.map +1 -1
- package/dist/ssr/inputs/FileDropTarget.js +17 -5
- package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
- package/dist/ssr/inputs/FileInputs.js +2 -2
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +44 -11
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/emoji/EmojiPicker.js +12 -0
- package/dist/ssr/inputs/emoji/EmojiPicker.js.map +1 -1
- package/dist/ssr/inputs/file-drop.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +242 -105
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js +8 -0
- package/dist/ssr/layout/BottomSheet.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +112 -58
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/Discussion.js +63 -36
- package/dist/ssr/layout/Discussion.js.map +1 -1
- package/dist/ssr/layout/TableOfContents.js +10 -2
- package/dist/ssr/layout/TableOfContents.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +155 -23
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/app-workspace-state.js +5 -1
- package/dist/ssr/layout/app-workspace-state.js.map +1 -1
- package/dist/ssr/layout/detail-panel-messages.js +35 -0
- package/dist/ssr/layout/detail-panel-messages.js.map +1 -0
- package/dist/ssr/layout/index.js +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/surfaces/Avatar.js +20 -2
- package/dist/ssr/surfaces/Avatar.js.map +1 -1
- package/dist/ssr/surfaces/AvatarStack.js +286 -0
- package/dist/ssr/surfaces/AvatarStack.js.map +1 -0
- package/dist/ssr/surfaces/avatar-messages.js +8 -2
- package/dist/ssr/surfaces/avatar-messages.js.map +1 -1
- package/dist/ssr/surfaces/index.js +1 -0
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/ContextMenu.d.ts +8 -0
- package/dist/types/actions/Dropdown.d.ts +12 -5
- package/dist/types/actions/GestureMenu.d.ts +6 -4
- package/dist/types/actions/Toolbar.d.ts +20 -0
- package/dist/types/actions/index.d.ts +1 -1
- package/dist/types/actions/menu-rows.d.ts +5 -0
- package/dist/types/actions/menu-sheet.d.ts +22 -0
- package/dist/types/actions/toolbar-messages.d.ts +8 -0
- package/dist/types/chart-inspection.d.ts +2 -0
- package/dist/types/chat/ChatComposer.d.ts +51 -2
- package/dist/types/chat/chat-behavior.d.ts +4 -0
- package/dist/types/chat/chat-messages.d.ts +17 -2
- package/dist/types/chat/command-search.d.ts +41 -0
- package/dist/types/chat/index.d.ts +3 -1
- package/dist/types/chat/reaction-people.d.ts +9 -0
- package/dist/types/content/Chart.d.ts +2 -2
- package/dist/types/content/MessageRow.d.ts +3 -10
- package/dist/types/content/ReactionBar.d.ts +32 -0
- package/dist/types/content/chart-inspection-core.d.ts +61 -0
- package/dist/types/content/chart-inspection.d.ts +4 -20
- package/dist/types/content/chart-snapshot.d.ts +1 -1
- package/dist/types/content/index.d.ts +2 -1
- package/dist/types/feedback/dialog-core.d.ts +16 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/input-mode.d.ts +7 -0
- package/dist/types/inputs/FileDropTarget.d.ts +6 -3
- package/dist/types/inputs/SelectChip.d.ts +6 -0
- package/dist/types/inputs/file-drop.d.ts +2 -0
- package/dist/types/layout/AppWorkspace.d.ts +13 -1
- package/dist/types/layout/BottomSheet.d.ts +8 -0
- package/dist/types/layout/DetailPanel.d.ts +11 -0
- package/dist/types/layout/Discussion.d.ts +8 -0
- package/dist/types/layout/TableOfContents.d.ts +2 -0
- package/dist/types/layout/detail-panel-messages.d.ts +15 -0
- package/dist/types/layout/index.d.ts +1 -1
- package/dist/types/surfaces/Avatar.d.ts +12 -0
- package/dist/types/surfaces/AvatarStack.d.ts +41 -0
- package/dist/types/surfaces/avatar-messages.d.ts +3 -0
- package/dist/types/surfaces/index.d.ts +3 -1
- package/package.json +9 -4
|
@@ -24,18 +24,21 @@ var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-dropdown__copy><span></spa
|
|
|
24
24
|
_tmpl$7 = /*#__PURE__*/_$template(`<i class="ti ti-check">`),
|
|
25
25
|
_tmpl$8 = /*#__PURE__*/_$template(`<span class=k2b-dropdown__checkbox aria-hidden=true>`),
|
|
26
26
|
_tmpl$9 = /*#__PURE__*/_$template(`<i class="ti ti-check k2b-dropdown__check"aria-hidden=true>`),
|
|
27
|
-
_tmpl$0 = /*#__PURE__*/_$template(`<
|
|
28
|
-
_tmpl$1 = /*#__PURE__*/_$template(`<
|
|
29
|
-
_tmpl$10 = /*#__PURE__*/_$template(`<div class=k2b-
|
|
30
|
-
_tmpl$11 = /*#__PURE__*/_$template(`<div class=k2b-
|
|
31
|
-
_tmpl$12 = /*#__PURE__*/_$template(`<
|
|
32
|
-
_tmpl$13 = /*#__PURE__*/_$template(`<
|
|
33
|
-
_tmpl$14 = /*#__PURE__*/_$template(`<span><!$><!/><div popover=auto role=menu>`);
|
|
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>`);
|
|
34
33
|
import { createContext, createEffect, createSignal, createUniqueId, For, onCleanup, onMount, Show, splitProps, useContext } from "solid-js";
|
|
34
|
+
import { Dynamic } from "solid-js/web";
|
|
35
35
|
import { Tooltip, useLabelTooltip } from "../feedback/Tooltip";
|
|
36
36
|
import { returnFocus, ringOnReturn } from "../internal/focus-return";
|
|
37
|
+
import { useLocale } from "../intl/locale";
|
|
37
38
|
import { useUiMessages } from "../intl/messages";
|
|
38
39
|
import { Button, iconTitle } from "./Button";
|
|
40
|
+
import { focusRowSegment } from "./menu-rows";
|
|
41
|
+
import { openMenuSheet, prefersMenuSheet } from "./menu-sheet";
|
|
39
42
|
|
|
40
43
|
// Resolved outside JSX: a conditional attribute compiles to a lazy memo, which would be created inside the click handler.
|
|
41
44
|
const selectAction = item => item.action;
|
|
@@ -50,21 +53,6 @@ const focusMenuItem = (menu, index) => {
|
|
|
50
53
|
if (items.length === 0) return;
|
|
51
54
|
items[(index + items.length) % items.length]?.focus();
|
|
52
55
|
};
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Left and Right cycle through the segments of a row section; Up and Down leave it like any item. Returns whether
|
|
56
|
-
* the key moved focus.
|
|
57
|
-
*/
|
|
58
|
-
export const focusRowSegment = (items, key) => {
|
|
59
|
-
if (key !== "ArrowLeft" && key !== "ArrowRight") return false;
|
|
60
|
-
const active = document.activeElement;
|
|
61
|
-
const row = active?.closest(".k2b-dropdown__row");
|
|
62
|
-
if (!active || !row) return false;
|
|
63
|
-
const segments = items.filter(item => row.contains(item));
|
|
64
|
-
const next = segments.indexOf(active) + (key === "ArrowRight" ? 1 : -1);
|
|
65
|
-
segments[(next + segments.length) % segments.length]?.focus();
|
|
66
|
-
return true;
|
|
67
|
-
};
|
|
68
56
|
export const dropdownPosition = (trigger, menu, position, viewport, gap = 4) => {
|
|
69
57
|
let left = trigger.left;
|
|
70
58
|
let top = trigger.bottom + gap;
|
|
@@ -202,34 +190,66 @@ export function DropdownItem(props) {
|
|
|
202
190
|
function DropdownChoiceItem(props) {
|
|
203
191
|
const menu = useContext(MenuContext);
|
|
204
192
|
const checked = () => typeof props.checked === "function" ? props.checked() : props.checked;
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
193
|
+
let element;
|
|
194
|
+
return _$createComponent(Dynamic, {
|
|
195
|
+
ref: node => {
|
|
196
|
+
element = node;
|
|
197
|
+
},
|
|
198
|
+
get component() {
|
|
199
|
+
return !props.disabled && props.href ? "a" : "button";
|
|
200
|
+
},
|
|
201
|
+
get href() {
|
|
202
|
+
return _$memo(() => !!!props.disabled)() ? props.href : undefined;
|
|
203
|
+
},
|
|
204
|
+
get type() {
|
|
205
|
+
return !props.disabled && props.href ? undefined : "button";
|
|
206
|
+
},
|
|
207
|
+
get role() {
|
|
208
|
+
return props.choice === "checkbox" ? "menuitemcheckbox" : "menuitemradio";
|
|
209
|
+
},
|
|
210
|
+
get ["aria-label"]() {
|
|
211
|
+
return props.ariaLabel;
|
|
212
|
+
},
|
|
213
|
+
get ["aria-checked"]() {
|
|
214
|
+
return checked();
|
|
215
|
+
},
|
|
216
|
+
get ["aria-disabled"]() {
|
|
217
|
+
return props.disabled ? "true" : undefined;
|
|
218
|
+
},
|
|
219
|
+
tabIndex: -1,
|
|
220
|
+
get ["class"]() {
|
|
221
|
+
return `k2b-dropdown__item ${props.class ?? ""}`;
|
|
222
|
+
},
|
|
223
|
+
get ["data-selected"]() {
|
|
224
|
+
return checked() ? "true" : undefined;
|
|
225
|
+
},
|
|
226
|
+
get disabled() {
|
|
227
|
+
return props.disabled;
|
|
228
|
+
},
|
|
229
|
+
onClick: event => {
|
|
230
|
+
if (props.href && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)) {
|
|
231
|
+
menu?.close(false);
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
event.preventDefault();
|
|
235
|
+
event.stopPropagation();
|
|
236
|
+
if (props.closeOnSelect !== false) menu?.close();
|
|
237
|
+
props.action();
|
|
238
|
+
},
|
|
239
|
+
onKeyDown: event => {
|
|
240
|
+
// A link answers only Enter; as a menu choice it also answers Space, like the button form.
|
|
241
|
+
if (event.key !== " " || props.disabled || !props.href) return;
|
|
242
|
+
event.preventDefault();
|
|
243
|
+
element?.click();
|
|
244
|
+
},
|
|
245
|
+
get children() {
|
|
246
|
+
return [_$createComponent(Show, {
|
|
227
247
|
get when() {
|
|
228
248
|
return props.choice === "checkbox";
|
|
229
249
|
},
|
|
230
250
|
get children() {
|
|
231
|
-
var _el$
|
|
232
|
-
_$insert(_el$
|
|
251
|
+
var _el$0 = _$getNextElement(_tmpl$8);
|
|
252
|
+
_$insert(_el$0, _$createComponent(Show, {
|
|
233
253
|
get when() {
|
|
234
254
|
return checked();
|
|
235
255
|
},
|
|
@@ -237,10 +257,9 @@ function DropdownChoiceItem(props) {
|
|
|
237
257
|
return _$getNextElement(_tmpl$7);
|
|
238
258
|
}
|
|
239
259
|
}));
|
|
240
|
-
return _el$
|
|
260
|
+
return _el$0;
|
|
241
261
|
}
|
|
242
|
-
}),
|
|
243
|
-
_$insert(_el$0, _$createComponent(Show, {
|
|
262
|
+
}), _$createComponent(Show, {
|
|
244
263
|
get when() {
|
|
245
264
|
return props.image;
|
|
246
265
|
},
|
|
@@ -250,78 +269,55 @@ function DropdownChoiceItem(props) {
|
|
|
250
269
|
return props.icon;
|
|
251
270
|
},
|
|
252
271
|
children: icon => (() => {
|
|
253
|
-
var _el$
|
|
254
|
-
_$effect(() => _$className(_el$
|
|
255
|
-
return _el$
|
|
272
|
+
var _el$15 = _$getNextElement(_tmpl$2);
|
|
273
|
+
_$effect(() => _$className(_el$15, icon()));
|
|
274
|
+
return _el$15;
|
|
256
275
|
})()
|
|
257
276
|
});
|
|
258
277
|
},
|
|
259
278
|
children: image => (() => {
|
|
260
|
-
var _el$
|
|
261
|
-
_$effect(() => _$setAttribute(_el$
|
|
262
|
-
return _el$
|
|
279
|
+
var _el$16 = _$getNextElement(_tmpl$3);
|
|
280
|
+
_$effect(() => _$setAttribute(_el$16, "src", image()));
|
|
281
|
+
return _el$16;
|
|
263
282
|
})()
|
|
264
|
-
}),
|
|
265
|
-
_$insert(_el$0, _$createComponent(Show, {
|
|
283
|
+
}), _$createComponent(Show, {
|
|
266
284
|
get when() {
|
|
267
285
|
return props.color;
|
|
268
286
|
},
|
|
269
287
|
children: color => (() => {
|
|
270
|
-
var _el$
|
|
271
|
-
_$effect(_$p => _$setStyleProperty(_el$
|
|
272
|
-
return _el$
|
|
288
|
+
var _el$17 = _$getNextElement(_tmpl$0);
|
|
289
|
+
_$effect(_$p => _$setStyleProperty(_el$17, "--k2b-dropdown-color", color()));
|
|
290
|
+
return _el$17;
|
|
273
291
|
})()
|
|
274
|
-
}),
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
292
|
+
}), (() => {
|
|
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, {
|
|
299
|
+
get when() {
|
|
300
|
+
return props.description;
|
|
301
|
+
},
|
|
302
|
+
children: description => (() => {
|
|
303
|
+
var _el$18 = _$getNextElement(_tmpl$4);
|
|
304
|
+
_$insert(_el$18, description);
|
|
305
|
+
return _el$18;
|
|
306
|
+
})()
|
|
307
|
+
}), _el$13, _co$2);
|
|
308
|
+
return _el$10;
|
|
309
|
+
})(), _$createComponent(Show, {
|
|
287
310
|
get when() {
|
|
288
311
|
return props.choice === "radio";
|
|
289
312
|
},
|
|
290
313
|
get children() {
|
|
291
|
-
var _el$
|
|
292
|
-
_$effect(() => _$setAttribute(_el$
|
|
293
|
-
return _el$
|
|
314
|
+
var _el$14 = _$getNextElement(_tmpl$9);
|
|
315
|
+
_$effect(() => _$setAttribute(_el$14, "data-hidden", checked() ? undefined : "true"));
|
|
316
|
+
return _el$14;
|
|
294
317
|
}
|
|
295
|
-
})
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
_v$11 = props.ariaLabel,
|
|
299
|
-
_v$12 = checked(),
|
|
300
|
-
_v$13 = props.disabled ? "true" : undefined,
|
|
301
|
-
_v$14 = `k2b-dropdown__item ${props.class ?? ""}`,
|
|
302
|
-
_v$15 = checked() ? "true" : undefined,
|
|
303
|
-
_v$16 = props.disabled;
|
|
304
|
-
_v$10 !== _p$.e && _$setAttribute(_el$0, "role", _p$.e = _v$10);
|
|
305
|
-
_v$11 !== _p$.t && _$setAttribute(_el$0, "aria-label", _p$.t = _v$11);
|
|
306
|
-
_v$12 !== _p$.a && _$setAttribute(_el$0, "aria-checked", _p$.a = _v$12);
|
|
307
|
-
_v$13 !== _p$.o && _$setAttribute(_el$0, "aria-disabled", _p$.o = _v$13);
|
|
308
|
-
_v$14 !== _p$.i && _$className(_el$0, _p$.i = _v$14);
|
|
309
|
-
_v$15 !== _p$.n && _$setAttribute(_el$0, "data-selected", _p$.n = _v$15);
|
|
310
|
-
_v$16 !== _p$.s && _$setProperty(_el$0, "disabled", _p$.s = _v$16);
|
|
311
|
-
return _p$;
|
|
312
|
-
}, {
|
|
313
|
-
e: undefined,
|
|
314
|
-
t: undefined,
|
|
315
|
-
a: undefined,
|
|
316
|
-
o: undefined,
|
|
317
|
-
i: undefined,
|
|
318
|
-
n: undefined,
|
|
319
|
-
s: undefined
|
|
320
|
-
});
|
|
321
|
-
_$runHydrationEvents();
|
|
322
|
-
return _el$0;
|
|
323
|
-
})()
|
|
324
|
-
);
|
|
318
|
+
})];
|
|
319
|
+
}
|
|
320
|
+
});
|
|
325
321
|
}
|
|
326
322
|
export function DropdownItems(props) {
|
|
327
323
|
const messages = useUiMessages();
|
|
@@ -382,22 +378,22 @@ export function DropdownItems(props) {
|
|
|
382
378
|
return renderItem(item);
|
|
383
379
|
},
|
|
384
380
|
get children() {
|
|
385
|
-
var _el$
|
|
386
|
-
_el$
|
|
387
|
-
[_el$
|
|
388
|
-
_el$
|
|
389
|
-
[_el$
|
|
390
|
-
_$insert(_el$
|
|
381
|
+
var _el$19 = _$getNextElement(_tmpl$10),
|
|
382
|
+
_el$21 = _el$19.firstChild,
|
|
383
|
+
[_el$22, _co$3] = _$getNextMarker(_el$21.nextSibling),
|
|
384
|
+
_el$23 = _el$22.nextSibling,
|
|
385
|
+
[_el$24, _co$4] = _$getNextMarker(_el$23.nextSibling);
|
|
386
|
+
_$insert(_el$19, _$createComponent(Show, {
|
|
391
387
|
get when() {
|
|
392
388
|
return item.sectionLabel;
|
|
393
389
|
},
|
|
394
390
|
children: label => (() => {
|
|
395
|
-
var _el$
|
|
396
|
-
_$insert(_el$
|
|
397
|
-
return _el$
|
|
391
|
+
var _el$25 = _$getNextElement(_tmpl$11);
|
|
392
|
+
_$insert(_el$25, label);
|
|
393
|
+
return _el$25;
|
|
398
394
|
})()
|
|
399
|
-
}), _el$
|
|
400
|
-
_$insert(_el$
|
|
395
|
+
}), _el$22, _co$3);
|
|
396
|
+
_$insert(_el$19, _$createComponent(Show, {
|
|
401
397
|
get when() {
|
|
402
398
|
return item.layout === "row";
|
|
403
399
|
},
|
|
@@ -410,27 +406,27 @@ export function DropdownItems(props) {
|
|
|
410
406
|
});
|
|
411
407
|
},
|
|
412
408
|
get children() {
|
|
413
|
-
var _el$
|
|
414
|
-
_$insert(_el$
|
|
409
|
+
var _el$20 = _$getNextElement(_tmpl$1);
|
|
410
|
+
_$insert(_el$20, _$createComponent(For, {
|
|
415
411
|
get each() {
|
|
416
412
|
return item.items;
|
|
417
413
|
},
|
|
418
414
|
children: renderItem
|
|
419
415
|
}));
|
|
420
|
-
return _el$
|
|
416
|
+
return _el$20;
|
|
421
417
|
}
|
|
422
|
-
}), _el$
|
|
418
|
+
}), _el$24, _co$4);
|
|
423
419
|
_$effect(_p$ => {
|
|
424
|
-
var _v$
|
|
425
|
-
_v$
|
|
426
|
-
_v$
|
|
427
|
-
_v$
|
|
420
|
+
var _v$10 = index() > 0 ? "true" : undefined,
|
|
421
|
+
_v$11 = item.sectionLabel ?? (item.layout === "row" ? undefined : messages().actions);
|
|
422
|
+
_v$10 !== _p$.e && _$setAttribute(_el$19, "data-divided", _p$.e = _v$10);
|
|
423
|
+
_v$11 !== _p$.t && _$setAttribute(_el$19, "aria-label", _p$.t = _v$11);
|
|
428
424
|
return _p$;
|
|
429
425
|
}, {
|
|
430
426
|
e: undefined,
|
|
431
427
|
t: undefined
|
|
432
428
|
});
|
|
433
|
-
return _el$
|
|
429
|
+
return _el$19;
|
|
434
430
|
}
|
|
435
431
|
})
|
|
436
432
|
});
|
|
@@ -507,9 +503,9 @@ function DropdownTrigger(props) {
|
|
|
507
503
|
}));
|
|
508
504
|
}
|
|
509
505
|
return [(() => {
|
|
510
|
-
var _el$
|
|
511
|
-
_$use(register, _el$
|
|
512
|
-
_$spread(_el$
|
|
506
|
+
var _el$26 = _$getNextElement(_tmpl$12);
|
|
507
|
+
_$use(register, _el$26);
|
|
508
|
+
_$spread(_el$26, _$mergeProps(rest, {
|
|
513
509
|
get ["aria-controls"]() {
|
|
514
510
|
return context.menuId;
|
|
515
511
|
},
|
|
@@ -540,9 +536,9 @@ function DropdownTrigger(props) {
|
|
|
540
536
|
return iconTitle(local.title, tooltip());
|
|
541
537
|
}
|
|
542
538
|
}), false, true);
|
|
543
|
-
_$insert(_el$
|
|
539
|
+
_$insert(_el$26, () => local.children);
|
|
544
540
|
_$runHydrationEvents();
|
|
545
|
-
return _el$
|
|
541
|
+
return _el$26;
|
|
546
542
|
})(), _$createComponent(Show, {
|
|
547
543
|
get when() {
|
|
548
544
|
return _$memo(() => tooltip() !== false)() && tooltip() !== undefined;
|
|
@@ -570,6 +566,9 @@ function DropdownTrigger(props) {
|
|
|
570
566
|
/** Accessible top-layer menu with explicit trigger ownership. */
|
|
571
567
|
function DropdownRoot(props) {
|
|
572
568
|
const messages = useUiMessages();
|
|
569
|
+
const locale = useLocale();
|
|
570
|
+
/** The open phone sheet's cancel switch: it closes when the menu goes or is disabled, as the popover does. */
|
|
571
|
+
let sheet;
|
|
573
572
|
const id = createUniqueId().replace(/[^a-zA-Z0-9_-]/g, "-");
|
|
574
573
|
const menuId = `k2b-dropdown-${id}`;
|
|
575
574
|
const [internalOpen, setInternalOpen] = createSignal(false);
|
|
@@ -617,6 +616,9 @@ function DropdownRoot(props) {
|
|
|
617
616
|
// Before hiding, so the popover does not return focus on its own.
|
|
618
617
|
if (restoreFocus) returnFocus(triggerRef, triggerRing);
|
|
619
618
|
if (menuRef?.matches(":popover-open")) menuRef.hidePopover();
|
|
619
|
+
// Like `open`, expose the closed state now: the toggle event can arrive after the next key press, and a trigger
|
|
620
|
+
// that still reads as open would ignore Enter (Escape, then Enter at once, must reopen).
|
|
621
|
+
setInternalOpen(false);
|
|
620
622
|
detachViewportListeners();
|
|
621
623
|
};
|
|
622
624
|
const open = (focus = "first") => {
|
|
@@ -637,6 +639,27 @@ function DropdownRoot(props) {
|
|
|
637
639
|
props.onOpenChange?.(next);
|
|
638
640
|
return;
|
|
639
641
|
}
|
|
642
|
+
if (next && props.phone === "sheet" && prefersMenuSheet()) {
|
|
643
|
+
if (sheet) return;
|
|
644
|
+
const current = new AbortController();
|
|
645
|
+
sheet = current;
|
|
646
|
+
// The sheet is this menu's open state: the trigger reports it and the owner hears both ends.
|
|
647
|
+
setInternalOpen(true);
|
|
648
|
+
props.onOpenChange?.(true);
|
|
649
|
+
void openMenuSheet({
|
|
650
|
+
Items: DropdownItems,
|
|
651
|
+
items: props.items,
|
|
652
|
+
label: props.label ?? messages().dropdownMenu,
|
|
653
|
+
locale: locale(),
|
|
654
|
+
signal: current.signal
|
|
655
|
+
}).finally(() => {
|
|
656
|
+
sheet = undefined;
|
|
657
|
+
setInternalOpen(false);
|
|
658
|
+
props.onOpenChange?.(false);
|
|
659
|
+
props.onClose?.();
|
|
660
|
+
});
|
|
661
|
+
return;
|
|
662
|
+
}
|
|
640
663
|
if (next) open(focus);else close(false);
|
|
641
664
|
};
|
|
642
665
|
const handleMenuKeyDown = event => {
|
|
@@ -686,57 +709,60 @@ function DropdownRoot(props) {
|
|
|
686
709
|
if (!controlled && menuRef.matches(":popover-open")) close(false);
|
|
687
710
|
});
|
|
688
711
|
createEffect(() => {
|
|
689
|
-
if (
|
|
712
|
+
if (!props.disabled) return;
|
|
713
|
+
sheet?.abort();
|
|
714
|
+
if (mounted) close(false);
|
|
690
715
|
});
|
|
691
716
|
onMount(() => {
|
|
692
717
|
mounted = true;
|
|
693
718
|
if (props.open) open(false);
|
|
694
719
|
onCleanup(detachViewportListeners);
|
|
695
720
|
});
|
|
721
|
+
onCleanup(() => sheet?.abort());
|
|
696
722
|
return _$createComponent(DropdownContext.Provider, {
|
|
697
723
|
value: context,
|
|
698
724
|
get children() {
|
|
699
|
-
var _el$
|
|
700
|
-
_el$
|
|
701
|
-
[_el$
|
|
702
|
-
_el$
|
|
703
|
-
_$insert(_el$
|
|
704
|
-
_el$
|
|
725
|
+
var _el$27 = _$getNextElement(_tmpl$13),
|
|
726
|
+
_el$29 = _el$27.firstChild,
|
|
727
|
+
[_el$30, _co$5] = _$getNextMarker(_el$29.nextSibling),
|
|
728
|
+
_el$28 = _el$30.nextSibling;
|
|
729
|
+
_$insert(_el$27, () => props.children, _el$30, _co$5);
|
|
730
|
+
_el$28.addEventListener("toggle", event => {
|
|
705
731
|
const nextOpen = event.newState === "open";
|
|
706
|
-
const wasOpen =
|
|
732
|
+
const wasOpen = event.oldState === "open";
|
|
707
733
|
setInternalOpen(nextOpen);
|
|
708
734
|
if (nextOpen) attachViewportListeners();else detachViewportListeners();
|
|
709
735
|
if (props.open === undefined || props.open !== nextOpen) props.onOpenChange?.(nextOpen);
|
|
710
736
|
if (wasOpen && !nextOpen) props.onClose?.();
|
|
711
737
|
if (!nextOpen && props.open === true) queueMicrotask(() => props.open === true && open(false));
|
|
712
738
|
});
|
|
713
|
-
_el$
|
|
739
|
+
_el$28.$$keydown = handleMenuKeyDown;
|
|
714
740
|
var _ref$ = menuRef;
|
|
715
|
-
typeof _ref$ === "function" ? _$use(_ref$, _el$
|
|
716
|
-
_$setAttribute(_el$
|
|
717
|
-
_$insert(_el$
|
|
741
|
+
typeof _ref$ === "function" ? _$use(_ref$, _el$28) : menuRef = _el$28;
|
|
742
|
+
_$setAttribute(_el$28, "id", menuId);
|
|
743
|
+
_$insert(_el$28, _$createComponent(DropdownItems, {
|
|
718
744
|
get items() {
|
|
719
745
|
return props.items;
|
|
720
746
|
},
|
|
721
747
|
close: close
|
|
722
748
|
}));
|
|
723
749
|
_$effect(_p$ => {
|
|
724
|
-
var _v$
|
|
725
|
-
_v$
|
|
726
|
-
_v$
|
|
727
|
-
_v$
|
|
750
|
+
var _v$12 = `k2b-dropdown ${props.class ?? ""}`,
|
|
751
|
+
_v$13 = props.label ?? messages().dropdownMenu,
|
|
752
|
+
_v$14 = `k2b-dropdown__menu ${props.menuClass ?? ""}`,
|
|
753
|
+
_v$15 = props.width ? {
|
|
728
754
|
"--k2b-dropdown-width": props.width
|
|
729
755
|
} : undefined,
|
|
730
|
-
_v$
|
|
731
|
-
_v$
|
|
732
|
-
_v$
|
|
733
|
-
_v$
|
|
734
|
-
_v$
|
|
735
|
-
_v$
|
|
736
|
-
_p$.o = _$style(_el$
|
|
737
|
-
_v$
|
|
738
|
-
_v$
|
|
739
|
-
_v$
|
|
756
|
+
_v$16 = props.width ? "fixed" : undefined,
|
|
757
|
+
_v$17 = props.variant ?? "default",
|
|
758
|
+
_v$18 = position();
|
|
759
|
+
_v$12 !== _p$.e && _$className(_el$27, _p$.e = _v$12);
|
|
760
|
+
_v$13 !== _p$.t && _$setAttribute(_el$28, "aria-label", _p$.t = _v$13);
|
|
761
|
+
_v$14 !== _p$.a && _$className(_el$28, _p$.a = _v$14);
|
|
762
|
+
_p$.o = _$style(_el$28, _v$15, _p$.o);
|
|
763
|
+
_v$16 !== _p$.i && _$setAttribute(_el$28, "data-width", _p$.i = _v$16);
|
|
764
|
+
_v$17 !== _p$.n && _$setAttribute(_el$28, "data-variant", _p$.n = _v$17);
|
|
765
|
+
_v$18 !== _p$.s && _$setAttribute(_el$28, "data-position", _p$.s = _v$18);
|
|
740
766
|
return _p$;
|
|
741
767
|
}, {
|
|
742
768
|
e: undefined,
|
|
@@ -748,7 +774,7 @@ function DropdownRoot(props) {
|
|
|
748
774
|
s: undefined
|
|
749
775
|
});
|
|
750
776
|
_$runHydrationEvents();
|
|
751
|
-
return _el$
|
|
777
|
+
return _el$27;
|
|
752
778
|
}
|
|
753
779
|
});
|
|
754
780
|
}
|