@threadlabs/looma 0.30.9 → 0.31.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/components/ui-affordance-scope/ui-affordance-scope.html +1 -1
- package/components/ui-affordance-scope/ui-affordance-scope.js +1 -6
- package/components/ui-avatar/ui-avatar.html +1 -1
- package/components/ui-avatar/ui-avatar.js +1 -6
- package/components/ui-avatar-group/ui-avatar-group.html +1 -1
- package/components/ui-avatar-group/ui-avatar-group.js +1 -6
- package/components/ui-button/ui-button.html +1 -1
- package/components/ui-button/ui-button.js +1 -6
- package/components/ui-checkbox/ui-checkbox.html +1 -1
- package/components/ui-checkbox/ui-checkbox.js +1 -6
- package/components/ui-combobox/ui-combobox.html +1 -1
- package/components/ui-combobox/ui-combobox.js +1 -6
- package/components/ui-context-menu/ui-context-menu.html +1 -1
- package/components/ui-context-menu/ui-context-menu.js +1 -6
- package/components/ui-dialog/ui-dialog.html +1 -1
- package/components/ui-dialog/ui-dialog.js +1 -6
- package/components/ui-disclosure/ui-disclosure.html +1 -1
- package/components/ui-disclosure/ui-disclosure.js +1 -6
- package/components/ui-editable/ui-editable.html +1 -1
- package/components/ui-editable/ui-editable.js +1 -6
- package/components/ui-editor-block-actions/ui-editor-block-actions.html +1 -1
- package/components/ui-editor-block-actions/ui-editor-block-actions.js +1 -6
- package/components/ui-editor-chip-editor/ui-editor-chip-editor.html +1 -1
- package/components/ui-editor-chip-editor/ui-editor-chip-editor.js +1 -6
- package/components/ui-editor-code-language/ui-editor-code-language.html +1 -1
- package/components/ui-editor-code-language/ui-editor-code-language.js +1 -6
- package/components/ui-editor-image-toolbar/ui-editor-image-toolbar.html +1 -1
- package/components/ui-editor-image-toolbar/ui-editor-image-toolbar.js +1 -6
- package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +1 -1
- package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.js +1 -6
- package/components/ui-editor-link-card/ui-editor-link-card.html +1 -1
- package/components/ui-editor-link-card/ui-editor-link-card.js +1 -6
- package/components/ui-editor-link-form/ui-editor-link-form.html +1 -1
- package/components/ui-editor-link-form/ui-editor-link-form.js +1 -6
- package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +1 -1
- package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +1 -6
- package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +1 -1
- package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +1 -6
- package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +1 -1
- package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.js +1 -6
- package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +1 -1
- package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +1 -6
- package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +1 -1
- package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js +1 -6
- package/components/ui-editor-toolbar/ui-editor-toolbar.html +1 -1
- package/components/ui-editor-toolbar/ui-editor-toolbar.js +1 -6
- package/components/ui-form-field/ui-form-field.html +1 -1
- package/components/ui-form-field/ui-form-field.js +1 -6
- package/components/ui-icon-button/ui-icon-button.html +1 -1
- package/components/ui-icon-button/ui-icon-button.js +1 -6
- package/components/ui-image/ui-image.html +1 -1
- package/components/ui-image/ui-image.js +1 -6
- package/components/ui-input/ui-input.html +1 -1
- package/components/ui-input/ui-input.js +1 -6
- package/components/ui-input-group/ui-input-group.html +1 -1
- package/components/ui-input-group/ui-input-group.js +1 -6
- package/components/ui-listbox/ui-listbox.html +1 -1
- package/components/ui-listbox/ui-listbox.js +1 -6
- package/components/ui-menu/ui-menu.html +1 -1
- package/components/ui-menu/ui-menu.js +1 -6
- package/components/ui-menu-item/ui-menu-item.html +1 -1
- package/components/ui-menu-item/ui-menu-item.js +1 -6
- package/components/ui-popover/ui-popover.html +1 -1
- package/components/ui-popover/ui-popover.js +1 -6
- package/components/ui-radio/ui-radio.html +1 -1
- package/components/ui-radio/ui-radio.js +1 -6
- package/components/ui-radio-group/ui-radio-group.html +1 -1
- package/components/ui-radio-group/ui-radio-group.js +1 -6
- package/components/ui-scroll-area/ui-scroll-area.html +1 -1
- package/components/ui-scroll-area/ui-scroll-area.js +1 -6
- package/components/ui-search-shell/ui-search-shell.html +1 -1
- package/components/ui-search-shell/ui-search-shell.js +1 -6
- package/components/ui-select/ui-select.html +1 -1
- package/components/ui-select/ui-select.js +1 -6
- package/components/ui-sidebar/ui-sidebar.html +1 -1
- package/components/ui-sidebar/ui-sidebar.js +1 -6
- package/components/ui-switch/ui-switch.html +1 -1
- package/components/ui-switch/ui-switch.js +1 -6
- package/components/ui-switcher/ui-switcher.html +1 -1
- package/components/ui-switcher/ui-switcher.js +1 -6
- package/components/ui-table/ui-table.html +1 -1
- package/components/ui-table/ui-table.js +1 -6
- package/components/ui-tabs/ui-tabs.html +1 -1
- package/components/ui-tabs/ui-tabs.js +1 -6
- package/components/ui-textarea/ui-textarea.html +1 -1
- package/components/ui-textarea/ui-textarea.js +1 -6
- package/components/ui-toast/ui-toast.html +1 -1
- package/components/ui-toast/ui-toast.js +1 -6
- package/components/ui-toast-region/ui-toast-region.html +1 -1
- package/components/ui-toast-region/ui-toast-region.js +1 -6
- package/components/ui-tooltip/ui-tooltip.html +1 -1
- package/components/ui-tooltip/ui-tooltip.js +1 -6
- package/components/ui-tree/ui-tree.html +1 -1
- package/components/ui-tree/ui-tree.js +1 -6
- package/components/ui-tree-item/ui-tree-item.html +1 -1
- package/components/ui-tree-item/ui-tree-item.js +1 -6
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/vanilla/UiAffordanceScope.js +4 -4
- package/vanilla/UiAvatar.js +4 -4
- package/vanilla/UiAvatarGroup.js +4 -4
- package/vanilla/UiButton.js +4 -4
- package/vanilla/UiCheckbox.js +4 -4
- package/vanilla/UiCombobox.js +4 -4
- package/vanilla/UiContextMenu.js +4 -4
- package/vanilla/UiDialog.js +4 -4
- package/vanilla/UiDisclosure.js +4 -4
- package/vanilla/UiEditable.js +4 -4
- package/vanilla/UiEditorBlockActions.js +4 -4
- package/vanilla/UiEditorChipEditor.js +4 -4
- package/vanilla/UiEditorCodeLanguage.js +4 -4
- package/vanilla/UiEditorImageToolbar.js +4 -4
- package/vanilla/UiEditorInsertTableGrid.js +4 -4
- package/vanilla/UiEditorLinkCard.js +4 -4
- package/vanilla/UiEditorLinkForm.js +4 -4
- package/vanilla/UiEditorMentionMenu.js +4 -4
- package/vanilla/UiEditorSlashMenu.js +4 -4
- package/vanilla/UiEditorTableContextMenu.js +4 -4
- package/vanilla/UiEditorTableOverlay.js +4 -4
- package/vanilla/UiEditorTableToolbar.js +4 -4
- package/vanilla/UiEditorToolbar.js +4 -4
- package/vanilla/UiFormField.js +4 -4
- package/vanilla/UiIconButton.js +4 -4
- package/vanilla/UiImage.js +4 -4
- package/vanilla/UiInput.js +4 -4
- package/vanilla/UiInputGroup.js +4 -4
- package/vanilla/UiListbox.js +4 -4
- package/vanilla/UiMenu.js +4 -4
- package/vanilla/UiMenuItem.js +4 -4
- package/vanilla/UiPopover.js +4 -4
- package/vanilla/UiRadio.js +4 -4
- package/vanilla/UiRadioGroup.js +4 -4
- package/vanilla/UiScrollArea.js +4 -4
- package/vanilla/UiSearchShell.js +4 -4
- package/vanilla/UiSelect.js +4 -4
- package/vanilla/UiSidebar.js +4 -4
- package/vanilla/UiSwitch.js +4 -4
- package/vanilla/UiSwitcher.js +4 -4
- package/vanilla/UiTable.js +4 -4
- package/vanilla/UiTabs.js +4 -4
- package/vanilla/UiTextarea.js +4 -4
- package/vanilla/UiToast.js +4 -4
- package/vanilla/UiToastRegion.js +4 -4
- package/vanilla/UiTooltip.js +4 -4
- package/vanilla/UiTree.js +4 -4
- package/vanilla/UiTreeItem.js +4 -4
- package/vue/UiAffordanceScope.vue +1 -0
- package/vue/UiAvatar.vue +1 -0
- package/vue/UiAvatarGroup.vue +1 -0
- package/vue/UiButton.vue +1 -0
- package/vue/UiCheckbox.vue +1 -0
- package/vue/UiCombobox.vue +1 -0
- package/vue/UiContextMenu.vue +1 -0
- package/vue/UiDialog.vue +1 -0
- package/vue/UiDisclosure.vue +1 -0
- package/vue/UiEditable.vue +1 -0
- package/vue/UiEditorBlockActions.vue +1 -0
- package/vue/UiEditorChipEditor.vue +1 -0
- package/vue/UiEditorCodeLanguage.vue +1 -0
- package/vue/UiEditorImageToolbar.vue +1 -0
- package/vue/UiEditorInsertTableGrid.vue +1 -0
- package/vue/UiEditorLinkCard.vue +1 -0
- package/vue/UiEditorLinkForm.vue +1 -0
- package/vue/UiEditorMentionMenu.vue +1 -0
- package/vue/UiEditorSlashMenu.vue +1 -0
- package/vue/UiEditorTableContextMenu.vue +1 -0
- package/vue/UiEditorTableOverlay.vue +1 -0
- package/vue/UiEditorTableToolbar.vue +1 -0
- package/vue/UiEditorToolbar.vue +1 -0
- package/vue/UiFormField.vue +1 -0
- package/vue/UiIconButton.vue +1 -0
- package/vue/UiImage.vue +1 -0
- package/vue/UiInput.vue +1 -0
- package/vue/UiInputGroup.vue +1 -0
- package/vue/UiListbox.vue +1 -0
- package/vue/UiMenu.vue +1 -0
- package/vue/UiMenuItem.vue +1 -0
- package/vue/UiPopover.vue +1 -0
- package/vue/UiRadio.vue +1 -0
- package/vue/UiRadioGroup.vue +1 -0
- package/vue/UiScrollArea.vue +1 -0
- package/vue/UiSearchShell.vue +1 -0
- package/vue/UiSelect.vue +1 -0
- package/vue/UiSidebar.vue +1 -0
- package/vue/UiSwitch.vue +1 -0
- package/vue/UiSwitcher.vue +1 -0
- package/vue/UiTable.vue +1 -0
- package/vue/UiTabs.vue +1 -0
- package/vue/UiTextarea.vue +1 -0
- package/vue/UiToast.vue +1 -0
- package/vue/UiToastRegion.vue +1 -0
- package/vue/UiTooltip.vue +1 -0
- package/vue/UiTree.vue +1 -0
- package/vue/UiTreeItem.vue +1 -0
- package/vue/chunks/UiAffordanceScope.js +2 -1
- package/vue/chunks/UiAvatar.js +2 -1
- package/vue/chunks/UiAvatarGroup.js +2 -1
- package/vue/chunks/UiButton.js +2 -1
- package/vue/chunks/UiCheckbox.js +2 -1
- package/vue/chunks/UiCombobox.js +2 -1
- package/vue/chunks/UiContextMenu.js +2 -1
- package/vue/chunks/UiDialog.js +2 -1
- package/vue/chunks/UiDisclosure.js +2 -1
- package/vue/chunks/UiEditable.js +2 -1
- package/vue/chunks/UiEditorBlockActions.js +1 -0
- package/vue/chunks/UiEditorChipEditor.js +1 -0
- package/vue/chunks/UiEditorCodeLanguage.js +1 -0
- package/vue/chunks/UiEditorImageToolbar.js +1 -0
- package/vue/chunks/UiEditorInsertTableGrid.js +2 -1
- package/vue/chunks/UiEditorLinkCard.js +1 -0
- package/vue/chunks/UiEditorLinkForm.js +1 -0
- package/vue/chunks/UiEditorMentionMenu.js +2 -1
- package/vue/chunks/UiEditorSlashMenu.js +2 -1
- package/vue/chunks/UiEditorTableContextMenu.js +2 -1
- package/vue/chunks/UiEditorTableOverlay.js +2 -1
- package/vue/chunks/UiEditorTableToolbar.js +2 -1
- package/vue/chunks/UiEditorToolbar.js +2 -1
- package/vue/chunks/UiFormField.js +2 -1
- package/vue/chunks/UiIconButton.js +2 -1
- package/vue/chunks/UiImage.js +2 -1
- package/vue/chunks/UiInput.js +2 -1
- package/vue/chunks/UiInputGroup.js +2 -1
- package/vue/chunks/UiListbox.js +2 -1
- package/vue/chunks/UiMenu.js +2 -1
- package/vue/chunks/UiMenuItem.js +2 -1
- package/vue/chunks/UiPopover.js +2 -1
- package/vue/chunks/UiRadio.js +2 -1
- package/vue/chunks/UiRadioGroup.js +2 -1
- package/vue/chunks/UiScrollArea.js +2 -1
- package/vue/chunks/UiSearchShell.js +2 -1
- package/vue/chunks/UiSelect.js +2 -1
- package/vue/chunks/UiSidebar.js +2 -1
- package/vue/chunks/UiSwitch.js +2 -1
- package/vue/chunks/UiSwitcher.js +2 -1
- package/vue/chunks/UiTable.js +2 -1
- package/vue/chunks/UiTabs.js +2 -1
- package/vue/chunks/UiTextarea.js +2 -1
- package/vue/chunks/UiToast.js +2 -1
- package/vue/chunks/UiToastRegion.js +2 -1
- package/vue/chunks/UiTooltip.js +2 -1
- package/vue/chunks/UiTree.js +2 -1
- package/vue/chunks/UiTreeItem.js +2 -1
- package/vue/components.css +16 -16
- package/vue/editor/index.js +61 -73
|
@@ -11,7 +11,7 @@ function descriptionIds(input) {
|
|
|
11
11
|
return Array.from(new Set((input.getAttribute("aria-describedby") ?? "").split(/\s+/).filter(Boolean)));
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
function connect(host) {
|
|
14
|
+
export function connect(host) {
|
|
15
15
|
const element = host.element;
|
|
16
16
|
let activeInput = null;
|
|
17
17
|
let owned = new Set();
|
|
@@ -74,8 +74,3 @@ function connect(host) {
|
|
|
74
74
|
removeOwned(activeInput);
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
|
-
|
|
78
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
79
|
-
export default function controller(host) {
|
|
80
|
-
host.on("connect", () => connect(host));
|
|
81
|
-
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<link rel="component" href="../ui-spinner/ui-spinner.html">
|
|
2
|
-
<template component="ui-icon-button"
|
|
2
|
+
<template component="ui-icon-button" module="./ui-icon-button.js">
|
|
3
3
|
<defs>
|
|
4
4
|
<prop name="disabled" type="boolean" default="false"
|
|
5
5
|
>Disables the button, so it cannot be pressed or focused, and gives it a flat neutral surface and muted icon.</prop>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Marks an anticipatory button for the enclosing ui-affordance-scope, which reveals it on proximity.
|
|
2
|
-
function connect(host) {
|
|
2
|
+
export function connect(host) {
|
|
3
3
|
const stop = host.effect(() => {
|
|
4
4
|
if (host.props.anticipatory.value) host.element.setAttribute("data-ui-affordance", "button");
|
|
5
5
|
else host.element.removeAttribute("data-ui-affordance");
|
|
@@ -15,8 +15,3 @@ function connect(host) {
|
|
|
15
15
|
host.element.removeEventListener("click", onClick, true);
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
20
|
-
export default function controller(host) {
|
|
21
|
-
host.on("connect", () => connect(host));
|
|
22
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-image"
|
|
1
|
+
<template component="ui-image" module="./ui-image.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="src" type="string" default="">The image source, used by the default media.</prop>
|
|
4
4
|
<prop name="alt" type="string" default="">A text alternative for the image.</prop>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @lifecycle Pointer capture ends on release, Escape, cancellation, or teardown.
|
|
3
3
|
* Only release commits a drag, so consumers can make it one undo operation.
|
|
4
4
|
*/
|
|
5
|
-
function connect(host) {
|
|
5
|
+
export function connect(host) {
|
|
6
6
|
const root = host.element;
|
|
7
7
|
const frame = host.refs.frame;
|
|
8
8
|
const document = root.ownerDocument;
|
|
@@ -105,8 +105,3 @@ function connect(host) {
|
|
|
105
105
|
document.removeEventListener("keydown", onEscape, true);
|
|
106
106
|
};
|
|
107
107
|
}
|
|
108
|
-
|
|
109
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
110
|
-
export default function controller(host) {
|
|
111
|
-
host.on("connect", () => connect(host));
|
|
112
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// The value attribute only sets the default; a controlled value is applied to the live input. The
|
|
2
2
|
// value is also made the native default, so a form reset returns to it.
|
|
3
|
-
function connect(host) {
|
|
3
|
+
export function connect(host) {
|
|
4
4
|
return host.effect(() => {
|
|
5
5
|
const value = host.props.value.value;
|
|
6
6
|
if (value === undefined || value === null) return;
|
|
@@ -14,8 +14,3 @@ function connect(host) {
|
|
|
14
14
|
input.value = text;
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
19
|
-
export default function controller(host) {
|
|
20
|
-
host.on("connect", () => connect(host));
|
|
21
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-input-group"
|
|
1
|
+
<template component="ui-input-group" module="./ui-input-group.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="variant" type="keyword" values="outline, subtle" default="outline"
|
|
4
4
|
>outline uses the standard field edge and surface. subtle uses a quiet decorative edge and muted surface for a multiline composer. Both retain the same
|
|
@@ -15,7 +15,7 @@ const affixProblem = (affix) =>
|
|
|
15
15
|
// instead, so the input's name stays its label and the affix is read once, with the input. The
|
|
16
16
|
// consumer's own aria-describedby (or a Form Field's) is kept. A press on an affix, or anywhere in
|
|
17
17
|
// the box outside the input, focuses the input without moving its caret or selecting the affix.
|
|
18
|
-
function connect(host) {
|
|
18
|
+
export function connect(host) {
|
|
19
19
|
const element = host.element;
|
|
20
20
|
let owned = [];
|
|
21
21
|
let described = null;
|
|
@@ -82,8 +82,3 @@ function connect(host) {
|
|
|
82
82
|
element.removeEventListener("click", onClick);
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
87
|
-
export default function controller(host) {
|
|
88
|
-
host.on("connect", () => connect(host));
|
|
89
|
-
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<link rel="component" href="../ui-scroll-area/ui-scroll-area.html">
|
|
2
|
-
<template component="ui-listbox"
|
|
2
|
+
<template component="ui-listbox" module="./ui-listbox.js">
|
|
3
3
|
<defs>
|
|
4
4
|
<prop name="rows" type="number" default="5">The maximum number of choices visible before the list scrolls. Use at least two.</prop>
|
|
5
5
|
<prop name="multiple" type="boolean" default="false">Allows several choices, each shown with a checkmark when selected.</prop>
|
|
@@ -13,7 +13,7 @@ function readOptions(container) {
|
|
|
13
13
|
}));
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
function connect(host) {
|
|
16
|
+
export function connect(host) {
|
|
17
17
|
const element = host.element;
|
|
18
18
|
const { options: authored, validity } = host.refs;
|
|
19
19
|
const form = element.closest("form");
|
|
@@ -169,8 +169,3 @@ function connect(host) {
|
|
|
169
169
|
validity.removeEventListener("invalid", onInvalid);
|
|
170
170
|
};
|
|
171
171
|
}
|
|
172
|
-
|
|
173
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
174
|
-
export default function controller(host) {
|
|
175
|
-
host.on("connect", () => connect(host));
|
|
176
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-menu"
|
|
1
|
+
<template component="ui-menu" module="./ui-menu.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="density" type="keyword" values="comfortable, compact" default="comfortable"
|
|
4
4
|
>Compact trades padding and type size for rows that fit more on screen.</prop>
|
|
@@ -11,7 +11,7 @@ function disabled(item) {
|
|
|
11
11
|
return item.getAttribute("aria-disabled") === "true" || item.hasAttribute("disabled") || item.getAttribute("disabled") === "true";
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
function connect(host) {
|
|
14
|
+
export function connect(host) {
|
|
15
15
|
const element = host.element;
|
|
16
16
|
const document = element.ownerDocument;
|
|
17
17
|
const overlayId = `ui-menu-${Math.random().toString(36).slice(2, 11)}`;
|
|
@@ -139,8 +139,3 @@ function connect(host) {
|
|
|
139
139
|
releaseAnchor();
|
|
140
140
|
};
|
|
141
141
|
}
|
|
142
|
-
|
|
143
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
144
|
-
export default function controller(host) {
|
|
145
|
-
host.on("connect", () => connect(host));
|
|
146
|
-
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<link rel="component" href="../ui-icon/ui-icon.html">
|
|
2
|
-
<template component="ui-menu-item"
|
|
2
|
+
<template component="ui-menu-item" module="./ui-menu-item.js">
|
|
3
3
|
<defs>
|
|
4
4
|
<prop name="disabled" type="boolean" default="false"
|
|
5
5
|
>Makes the item unavailable: it is faded, skipped by the arrow keys, and choosing it does nothing. It stays visible and is announced as disabled.</prop>
|
|
@@ -2,7 +2,7 @@ function radioScope(item) {
|
|
|
2
2
|
return item.closest('[role="group"]') ?? item.closest('[role="menu"]');
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
function connect(host) {
|
|
5
|
+
export function connect(host) {
|
|
6
6
|
const item = host.element;
|
|
7
7
|
let external = Boolean(host.props.checked.value);
|
|
8
8
|
host.state.internalChecked = external;
|
|
@@ -45,8 +45,3 @@ function connect(host) {
|
|
|
45
45
|
item.removeEventListener("ui-menu-item-clear", onClear);
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
50
|
-
export default function controller(host) {
|
|
51
|
-
host.on("connect", () => connect(host));
|
|
52
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-popover"
|
|
1
|
+
<template component="ui-popover" module="./ui-popover.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="size" type="keyword" values="content, sm, md, lg" default="content"
|
|
4
4
|
>Optional size preset. content keeps the existing intrinsic sizing; the other sizes constrain the surface for compact, medium, or large content.</prop>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { closeOverlay, createAnchoredSurface, createIdResolver, openOverlay, requestTopOverlayClose } from "../shared/overlay.js";
|
|
2
2
|
|
|
3
|
-
function connect(host) {
|
|
3
|
+
export function connect(host) {
|
|
4
4
|
const element = host.element;
|
|
5
5
|
const document = element.ownerDocument;
|
|
6
6
|
const offset = () => {
|
|
@@ -100,8 +100,3 @@ function connect(host) {
|
|
|
100
100
|
releaseAnchor();
|
|
101
101
|
};
|
|
102
102
|
}
|
|
103
|
-
|
|
104
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
105
|
-
export default function controller(host) {
|
|
106
|
-
host.on("connect", () => connect(host));
|
|
107
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-radio"
|
|
1
|
+
<template component="ui-radio" module="./ui-radio.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="checked" type="boolean" default="false"
|
|
4
4
|
>Whether the radio is checked initially or when set externally. A form reset returns it to this. Inside a ui-radio-group the group's value decides
|
|
@@ -6,7 +6,7 @@ import { trackTrigger } from "../shared/trigger.js";
|
|
|
6
6
|
// `checked` sets the control initially and whenever it changes; the user's changes update the state.
|
|
7
7
|
// A form reset returns the control to `checked`. Vue writes the checked attribute on every render, so
|
|
8
8
|
// the native default alone cannot hold it there.
|
|
9
|
-
function connect(host) {
|
|
9
|
+
export function connect(host) {
|
|
10
10
|
const input = host.refs.input;
|
|
11
11
|
describeInput(input, host.refs.description);
|
|
12
12
|
const [trigger, stopTracking] = trackTrigger(host);
|
|
@@ -40,8 +40,3 @@ function connect(host) {
|
|
|
40
40
|
input.removeEventListener("change", onChange);
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
|
|
44
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
45
|
-
export default function controller(host) {
|
|
46
|
-
host.on("connect", () => connect(host));
|
|
47
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-radio-group"
|
|
1
|
+
<template component="ui-radio-group" module="./ui-radio-group.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="value" type="string" default=""
|
|
4
4
|
>The value of the checked radio, initially or when set externally; empty checks none. The user's choice updates it from there and is reported as select and
|
|
@@ -7,7 +7,7 @@ let groups = 0;
|
|
|
7
7
|
// Native radios that share a name already move and check with the arrow keys. The group gives its
|
|
8
8
|
// radios that name, applies a controlled value, and reports the user's choice. Its fieldset disables
|
|
9
9
|
// them, so a radio's own disabled is never overwritten.
|
|
10
|
-
function connect(host) {
|
|
10
|
+
export function connect(host) {
|
|
11
11
|
const element = host.element;
|
|
12
12
|
const name = String(host.props.name.value || `ui-radio-group-${++groups}`);
|
|
13
13
|
const [trigger, stopTracking] = trackTrigger(host);
|
|
@@ -60,8 +60,3 @@ function connect(host) {
|
|
|
60
60
|
element.removeEventListener("change", onChange);
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
|
-
|
|
64
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
65
|
-
export default function controller(host) {
|
|
66
|
-
host.on("connect", () => connect(host));
|
|
67
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-scroll-area"
|
|
1
|
+
<template component="ui-scroll-area" module="./ui-scroll-area.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="fill" type="boolean" default="false">Grows into remaining space within a flex layout while keeping content independently scrollable.</prop>
|
|
4
4
|
<prop name="size" type="keyword" values="content, sm, md, lg" default="content"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function connect(host) {
|
|
1
|
+
export function connect(host) {
|
|
2
2
|
const area = host.element;
|
|
3
3
|
let frame = 0;
|
|
4
4
|
|
|
@@ -30,8 +30,3 @@ function connect(host) {
|
|
|
30
30
|
if (frame) cancelAnimationFrame(frame);
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
35
|
-
export default function controller(host) {
|
|
36
|
-
host.on("connect", () => connect(host));
|
|
37
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-search-shell"
|
|
1
|
+
<template component="ui-search-shell" module="./ui-search-shell.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="open" type="boolean" default="false">Shows the search surface.</prop>
|
|
4
4
|
<prop name="modal" type="boolean" default="false">Makes the rest of the page inert while the search surface is open.</prop>
|
|
@@ -2,7 +2,7 @@ import { closeDialog, closeOverlay, openOverlay, showDialog } from "../shared/ov
|
|
|
2
2
|
import { trackTrigger } from "../shared/trigger.js";
|
|
3
3
|
|
|
4
4
|
/** Owns native dialog state while leaving query and result state to the application. */
|
|
5
|
-
function connect(host) {
|
|
5
|
+
export function connect(host) {
|
|
6
6
|
const dialog = host.refs.dialog;
|
|
7
7
|
const document = dialog.ownerDocument;
|
|
8
8
|
const overlayId = `ui-search-shell-${Math.random().toString(36).slice(2, 11)}`;
|
|
@@ -93,8 +93,3 @@ function connect(host) {
|
|
|
93
93
|
closeOverlay(document, overlayId);
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
-
|
|
97
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
98
|
-
export default function controller(host) {
|
|
99
|
-
host.on("connect", () => connect(host));
|
|
100
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-select"
|
|
1
|
+
<template component="ui-select" module="./ui-select.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="value" type="string"
|
|
4
4
|
>The value of the selected option, initially or when set externally. It is also the default, so a form reset returns to it rather than to the first
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// A controlled value can arrive before its projected <option> elements, so it is applied again
|
|
2
2
|
// whenever the options change. The value's option is also marked the native default, so a form
|
|
3
3
|
// reset returns to it rather than to the first option.
|
|
4
|
-
function connect(host) {
|
|
4
|
+
export function connect(host) {
|
|
5
5
|
const select = host.element;
|
|
6
6
|
const apply = () => {
|
|
7
7
|
const value = host.props.value.value;
|
|
@@ -17,8 +17,3 @@ function connect(host) {
|
|
|
17
17
|
observer.disconnect();
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
22
|
-
export default function controller(host) {
|
|
23
|
-
host.on("connect", () => connect(host));
|
|
24
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-sidebar"
|
|
1
|
+
<template component="ui-sidebar" module="./ui-sidebar.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="side" type="keyword" values="start, end" default="start">The edge the sidebar sits on. The page places it beside its main content.</prop>
|
|
4
4
|
<prop name="width" type="number" default="0">Docked width in pixels. 0 uses --ui-sidebar-width (280px by default); dragging the handle updates it.</prop>
|
|
@@ -12,7 +12,7 @@ function positive(value, fallback) {
|
|
|
12
12
|
* off-canvas drawer (a popover). A button toggles it with the platform's invoker commands:
|
|
13
13
|
* `<button commandfor="nav" command="--toggle">`.
|
|
14
14
|
*/
|
|
15
|
-
function connect(host) {
|
|
15
|
+
export function connect(host) {
|
|
16
16
|
const element = host.element;
|
|
17
17
|
const document = element.ownerDocument;
|
|
18
18
|
const view = document.defaultView;
|
|
@@ -188,8 +188,3 @@ function connect(host) {
|
|
|
188
188
|
document.removeEventListener("click", onDocumentClick);
|
|
189
189
|
};
|
|
190
190
|
}
|
|
191
|
-
|
|
192
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
193
|
-
export default function controller(host) {
|
|
194
|
-
host.on("connect", () => connect(host));
|
|
195
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-switch"
|
|
1
|
+
<template component="ui-switch" module="./ui-switch.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="checked" type="boolean" default="false">Whether the switch is checked initially or when set externally. A form reset returns it to this.</prop>
|
|
4
4
|
<prop name="disabled" type="boolean" default="false">Disables the native switch, so it cannot be toggled or focused.</prop>
|
|
@@ -5,7 +5,7 @@ import { trackTrigger } from "../shared/trigger.js";
|
|
|
5
5
|
// `checked` sets the control initially and whenever it changes; the user's changes update the state.
|
|
6
6
|
// A form reset returns the control to `checked`. Vue writes the checked attribute on every render, so
|
|
7
7
|
// the native default alone cannot hold it there.
|
|
8
|
-
function connect(host) {
|
|
8
|
+
export function connect(host) {
|
|
9
9
|
const input = host.refs.input;
|
|
10
10
|
describeInput(input, host.refs.description);
|
|
11
11
|
const [trigger, stopTracking] = trackTrigger(host);
|
|
@@ -33,8 +33,3 @@ function connect(host) {
|
|
|
33
33
|
input.removeEventListener("change", onChange);
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
38
|
-
export default function controller(host) {
|
|
39
|
-
host.on("connect", () => connect(host));
|
|
40
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-switcher"
|
|
1
|
+
<template component="ui-switcher" module="./ui-switcher.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="gap" type="keyword" values="xs, s, m, l, xl"
|
|
4
4
|
>Space between items, on the spacing scale: xs is 0.5rem, s 0.75rem, m 1rem (also the default), l 1.5rem, and xl 2rem. The --ui-switcher-gap custom
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Stack the group when the authored child count exceeds the optional row limit. */
|
|
2
|
-
function connect(host) {
|
|
2
|
+
export function connect(host) {
|
|
3
3
|
const element = host.element;
|
|
4
4
|
const update = () => {
|
|
5
5
|
const limit = Number(host.props.limit.value);
|
|
@@ -13,8 +13,3 @@ function connect(host) {
|
|
|
13
13
|
observer.disconnect();
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
18
|
-
export default function controller(host) {
|
|
19
|
-
host.on("connect", () => connect(host));
|
|
20
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-table"
|
|
1
|
+
<template component="ui-table" module="./ui-table.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="density" type="keyword" values="comfortable, compact" default="comfortable"
|
|
4
4
|
>How tall each row is. Every row is at least one control tall, so a row holding a control lines up with the rows around it. comfortable fits a control of
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// the table fits, the root is plain again, so it is not an empty stop in the tab order.
|
|
4
4
|
let captions = 0;
|
|
5
5
|
|
|
6
|
-
function connect(host) {
|
|
6
|
+
export function connect(host) {
|
|
7
7
|
const element = host.element;
|
|
8
8
|
const authored = element.hasAttribute("tabindex") || element.hasAttribute("role");
|
|
9
9
|
if (authored) return undefined;
|
|
@@ -53,8 +53,3 @@ function connect(host) {
|
|
|
53
53
|
plain();
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
58
|
-
export default function controller(host) {
|
|
59
|
-
host.on("connect", () => connect(host));
|
|
60
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-tabs"
|
|
1
|
+
<template component="ui-tabs" module="./ui-tabs.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="density" type="keyword" values="comfortable, compact" default="comfortable"
|
|
4
4
|
>Compact trades padding and type size for rows that fit more on screen.</prop>
|
|
@@ -13,7 +13,7 @@ function writeStored(group, label) {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/** Lists the authored panels (each labelled by its aria-label) as tabs and shows the selected one. */
|
|
16
|
-
function connect(host) {
|
|
16
|
+
export function connect(host) {
|
|
17
17
|
const { list, panels: container } = host.refs;
|
|
18
18
|
const [trigger, stopTracking] = trackTrigger(host);
|
|
19
19
|
const panels = () => Array.from(container.children).filter((child) => child instanceof HTMLElement);
|
|
@@ -156,8 +156,3 @@ function connect(host) {
|
|
|
156
156
|
list.removeEventListener("wheel", onWheel);
|
|
157
157
|
};
|
|
158
158
|
}
|
|
159
|
-
|
|
160
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
161
|
-
export default function controller(host) {
|
|
162
|
-
host.on("connect", () => connect(host));
|
|
163
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-textarea"
|
|
1
|
+
<template component="ui-textarea" module="./ui-textarea.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="value" type="string"
|
|
4
4
|
>The textarea's text. Setting or changing it replaces the live text; between changes the user's typing stands, so follow input events to keep it in step. It
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// The value attribute only sets the default; a controlled value is applied to the live textarea. The
|
|
2
2
|
// value is also made the native default, so a form reset returns to it.
|
|
3
|
-
function connect(host) {
|
|
3
|
+
export function connect(host) {
|
|
4
4
|
return host.effect(() => {
|
|
5
5
|
const value = host.props.value.value;
|
|
6
6
|
if (value === undefined || value === null) return;
|
|
@@ -8,8 +8,3 @@ function connect(host) {
|
|
|
8
8
|
if (host.element.value !== String(value)) host.element.value = String(value);
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
13
|
-
export default function controller(host) {
|
|
14
|
-
host.on("connect", () => connect(host));
|
|
15
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<link rel="component" href="../ui-icon-button/ui-icon-button.html">
|
|
2
2
|
<link rel="component" href="../ui-icon/ui-icon.html">
|
|
3
|
-
<template component="ui-toast"
|
|
3
|
+
<template component="ui-toast" module="./ui-toast.js">
|
|
4
4
|
<defs>
|
|
5
5
|
<prop name="tone" type="keyword" values="neutral, info, success, warning, danger" default="neutral"
|
|
6
6
|
>Semantic accent for this message. Danger uses an assertive alert role; the other tones use polite status semantics.</prop>
|
|
@@ -5,7 +5,7 @@ function inputFor(event) {
|
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
/** An authored toast hides itself when dismissed, like a dialog closing; clearing hidden shows it again. */
|
|
8
|
-
function connect(host) {
|
|
8
|
+
export function connect(host) {
|
|
9
9
|
const element = host.element;
|
|
10
10
|
const { action } = host.refs;
|
|
11
11
|
if (!element.id) element.id = `ui-toast-authored-${++toastSequence}`;
|
|
@@ -82,8 +82,3 @@ function connect(host) {
|
|
|
82
82
|
element.removeEventListener("focusout", onFocusOut);
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
87
|
-
export default function controller(host) {
|
|
88
|
-
host.on("connect", () => connect(host));
|
|
89
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<link rel="component" href="../ui-icon-button/ui-icon-button.html">
|
|
2
2
|
<link rel="component" href="../ui-icon/ui-icon.html">
|
|
3
|
-
<template component="ui-toast-region"
|
|
3
|
+
<template component="ui-toast-region" module="./ui-toast-region.js">
|
|
4
4
|
<defs>
|
|
5
5
|
<prop name="duration" type="number" default="0"
|
|
6
6
|
>Default milliseconds for toasts added with the show-toast event or command; 0 keeps each until dismissed. Hover or focus pauses a timer.</prop>
|
|
@@ -7,7 +7,7 @@ let toastIds = 0;
|
|
|
7
7
|
* Shows the region while it has authored or generated messages. Generated messages dismiss by
|
|
8
8
|
* action or timeout; authored ui-toast children hide themselves, and a hidden one does not count.
|
|
9
9
|
*/
|
|
10
|
-
function connect(host) {
|
|
10
|
+
export function connect(host) {
|
|
11
11
|
const element = host.element;
|
|
12
12
|
const [trigger, stopTracking] = trackTrigger(host);
|
|
13
13
|
const toasts = () => host.state.toasts ?? [];
|
|
@@ -119,8 +119,3 @@ function connect(host) {
|
|
|
119
119
|
if (element.matches(":popover-open")) element.hidePopover();
|
|
120
120
|
};
|
|
121
121
|
}
|
|
122
|
-
|
|
123
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
124
|
-
export default function controller(host) {
|
|
125
|
-
host.on("connect", () => connect(host));
|
|
126
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<template component="ui-tooltip"
|
|
1
|
+
<template component="ui-tooltip" module="./ui-tooltip.js">
|
|
2
2
|
<defs>
|
|
3
3
|
<prop name="for" type="string" default="">ID of the control described and visually anchored by the tooltip.</prop>
|
|
4
4
|
<prop name="open" type="boolean" default="false">Whether the tooltip is open initially or when set externally.</prop>
|
|
@@ -2,7 +2,7 @@ import { closeOverlay, createAnchoredSurface, createIdResolver, onOverlayOpen, o
|
|
|
2
2
|
|
|
3
3
|
const warmTooltips = new WeakMap();
|
|
4
4
|
|
|
5
|
-
function connect(host) {
|
|
5
|
+
export function connect(host) {
|
|
6
6
|
const element = host.element;
|
|
7
7
|
const document = element.ownerDocument;
|
|
8
8
|
const warm = warmTooltips.get(document) ?? { active: 0, until: 0 };
|
|
@@ -212,8 +212,3 @@ function connect(host) {
|
|
|
212
212
|
closeOverlay(document, overlayId);
|
|
213
213
|
};
|
|
214
214
|
}
|
|
215
|
-
|
|
216
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
217
|
-
export default function controller(host) {
|
|
218
|
-
host.on("connect", () => connect(host));
|
|
219
|
-
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<link rel="component" href="../ui-tree-item/ui-tree-item.html">
|
|
2
|
-
<template component="ui-tree"
|
|
2
|
+
<template component="ui-tree" module="./ui-tree.js">
|
|
3
3
|
<defs>
|
|
4
4
|
<prop name="density" type="keyword" values="comfortable, compact" default="comfortable"
|
|
5
5
|
>Compact trades padding and type size for rows that fit more on screen.</prop>
|
|
@@ -16,7 +16,7 @@ function parentItem(item, tree) {
|
|
|
16
16
|
return parent && tree.contains(parent) ? parent : null;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
function connect(host) {
|
|
19
|
+
export function connect(host) {
|
|
20
20
|
const element = host.element;
|
|
21
21
|
const document = element.ownerDocument;
|
|
22
22
|
const itemSelector = '[role="treeitem"]';
|
|
@@ -483,8 +483,3 @@ function connect(host) {
|
|
|
483
483
|
element.removeEventListener("click", onMoveClick, true);
|
|
484
484
|
};
|
|
485
485
|
}
|
|
486
|
-
|
|
487
|
-
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
488
|
-
export default function controller(host) {
|
|
489
|
-
host.on("connect", () => connect(host));
|
|
490
|
-
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<link rel="component" href="../ui-button/ui-button.html">
|
|
2
|
-
<template component="ui-tree-item"
|
|
2
|
+
<template component="ui-tree-item" module="./ui-tree-item.js">
|
|
3
3
|
<defs>
|
|
4
4
|
<prop name="itemId" type="string" default=""
|
|
5
5
|
>The item's identifier, reported as sourceId and targetId in the tree's reorder events and as id in its expand event. A sortable item needs one to be
|