@threadlabs/looma 0.28.4 → 0.28.6
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-editor-image-toolbar/ui-editor-image-toolbar.html +96 -0
- package/components/ui-editor-image-toolbar/ui-editor-image-toolbar.js +56 -0
- package/components/ui-editor-mention-menu-item/ui-editor-mention-menu-item.html +3 -2
- package/dist/index.js +34 -33
- package/package.json +3 -2
- package/styles/ui-action-bar.css +13 -6
- package/styles/ui-affordance-scope.css +12 -5
- package/styles/ui-avatar-group.css +17 -10
- package/styles/ui-avatar.css +23 -16
- package/styles/ui-badge.css +78 -71
- package/styles/ui-breadcrumb-item.css +12 -5
- package/styles/ui-breadcrumbs.css +10 -3
- package/styles/ui-button.css +79 -72
- package/styles/ui-callout.css +29 -22
- package/styles/ui-card.css +25 -18
- package/styles/ui-checkbox.css +45 -37
- package/styles/ui-cluster.css +34 -27
- package/styles/ui-combobox.css +46 -39
- package/styles/ui-container.css +20 -13
- package/styles/ui-context-menu.css +17 -10
- package/styles/ui-cover.css +12 -5
- package/styles/ui-description-item.css +10 -3
- package/styles/ui-description-list.css +20 -13
- package/styles/ui-dialog.css +44 -35
- package/styles/ui-disclosure.css +32 -25
- package/styles/ui-editable.css +15 -8
- package/styles/ui-editor-image-toolbar.css +1 -0
- package/styles/ui-editor-insert-table-grid.css +11 -4
- package/styles/ui-editor-mention-menu-item.css +17 -8
- package/styles/ui-editor-mention-menu.css +14 -7
- package/styles/ui-editor-slash-menu-group.css +10 -3
- package/styles/ui-editor-slash-menu-item.css +15 -8
- package/styles/ui-editor-slash-menu.css +15 -8
- package/styles/ui-editor-surface.css +10 -3
- package/styles/ui-editor-table-context-menu.css +17 -10
- package/styles/ui-editor-table-overlay.css +17 -10
- package/styles/ui-editor-table-toolbar.css +22 -15
- package/styles/ui-editor-toolbar.css +18 -11
- package/styles/ui-floating-action-button.css +21 -14
- package/styles/ui-form-field.css +20 -13
- package/styles/ui-grid.css +21 -14
- package/styles/ui-icon-button.css +80 -73
- package/styles/ui-icon.css +14 -7
- package/styles/ui-image.css +25 -18
- package/styles/ui-input-group.css +34 -27
- package/styles/ui-input.css +42 -35
- package/styles/ui-list-item.css +33 -26
- package/styles/ui-list.css +22 -15
- package/styles/ui-listbox.css +22 -14
- package/styles/ui-menu-group.css +10 -3
- package/styles/ui-menu-item.css +29 -22
- package/styles/ui-menu.css +25 -18
- package/styles/ui-meter.css +36 -29
- package/styles/ui-nav-item.css +26 -19
- package/styles/ui-page-header.css +12 -5
- package/styles/ui-popover.css +27 -20
- package/styles/ui-radio-group.css +14 -6
- package/styles/ui-radio.css +24 -17
- package/styles/ui-reel.css +28 -21
- package/styles/ui-scroll-area.css +22 -15
- package/styles/ui-search-result-row.css +28 -21
- package/styles/ui-search-shell.css +24 -17
- package/styles/ui-section.css +14 -7
- package/styles/ui-select.css +33 -26
- package/styles/ui-separator.css +17 -10
- package/styles/ui-sidebar.css +35 -28
- package/styles/ui-spinner.css +32 -23
- package/styles/ui-stack.css +29 -21
- package/styles/ui-status-message.css +14 -7
- package/styles/ui-switch.css +29 -22
- package/styles/ui-switcher.css +27 -20
- package/styles/ui-table.css +14 -7
- package/styles/ui-tabs.css +24 -17
- package/styles/ui-text.css +35 -28
- package/styles/ui-textarea.css +37 -30
- package/styles/ui-toast-region.css +74 -63
- package/styles/ui-toast.css +21 -14
- package/styles/ui-tooltip.css +38 -31
- package/styles/ui-top-bar.css +19 -12
- package/styles/ui-tree-item.css +79 -71
- package/styles/ui-tree.css +18 -11
- package/vanilla/UiActionBar.d.ts +1 -1
- package/vanilla/UiActionBar.js +1 -1
- package/vanilla/UiAffordanceScope.d.ts +1 -1
- package/vanilla/UiAffordanceScope.js +1 -1
- package/vanilla/UiAvatar.d.ts +1 -1
- package/vanilla/UiAvatar.js +1 -1
- package/vanilla/UiAvatarGroup.d.ts +1 -1
- package/vanilla/UiAvatarGroup.js +1 -1
- package/vanilla/UiBadge.d.ts +1 -1
- package/vanilla/UiBadge.js +1 -1
- package/vanilla/UiBreadcrumbItem.d.ts +1 -1
- package/vanilla/UiBreadcrumbItem.js +1 -1
- package/vanilla/UiBreadcrumbs.d.ts +1 -1
- package/vanilla/UiBreadcrumbs.js +1 -1
- package/vanilla/UiButton.d.ts +1 -1
- package/vanilla/UiButton.js +19 -57
- package/vanilla/UiCallout.d.ts +1 -1
- package/vanilla/UiCallout.js +25 -73
- package/vanilla/UiCard.d.ts +1 -1
- package/vanilla/UiCard.js +1 -1
- package/vanilla/UiCheckbox.d.ts +1 -1
- package/vanilla/UiCheckbox.js +1 -1
- package/vanilla/UiCluster.d.ts +1 -1
- package/vanilla/UiCluster.js +1 -1
- package/vanilla/UiCombobox.d.ts +1 -1
- package/vanilla/UiCombobox.js +60 -166
- package/vanilla/UiContainer.d.ts +1 -1
- package/vanilla/UiContainer.js +1 -1
- package/vanilla/UiContextMenu.d.ts +1 -1
- package/vanilla/UiContextMenu.js +1 -1
- package/vanilla/UiCover.d.ts +1 -1
- package/vanilla/UiCover.js +1 -1
- package/vanilla/UiDescriptionItem.d.ts +1 -1
- package/vanilla/UiDescriptionItem.js +1 -1
- package/vanilla/UiDescriptionList.d.ts +1 -1
- package/vanilla/UiDescriptionList.js +1 -1
- package/vanilla/UiDialog.d.ts +1 -1
- package/vanilla/UiDialog.js +4 -10
- package/vanilla/UiDisclosure.d.ts +1 -1
- package/vanilla/UiDisclosure.js +1 -1
- package/vanilla/UiEditable.d.ts +1 -1
- package/vanilla/UiEditable.js +7 -19
- package/vanilla/UiEditorImageToolbar.d.ts +19 -0
- package/vanilla/UiEditorImageToolbar.js +171 -0
- package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
- package/vanilla/UiEditorInsertTableGrid.js +1 -1
- package/vanilla/UiEditorMentionMenu.d.ts +1 -1
- package/vanilla/UiEditorMentionMenu.js +17 -37
- package/vanilla/UiEditorMentionMenuItem.d.ts +1 -1
- package/vanilla/UiEditorMentionMenuItem.js +4 -10
- package/vanilla/UiEditorSlashMenu.d.ts +1 -1
- package/vanilla/UiEditorSlashMenu.js +5 -4
- package/vanilla/UiEditorSlashMenuGroup.d.ts +1 -1
- package/vanilla/UiEditorSlashMenuGroup.js +1 -1
- package/vanilla/UiEditorSlashMenuItem.d.ts +1 -1
- package/vanilla/UiEditorSlashMenuItem.js +7 -19
- package/vanilla/UiEditorSurface.d.ts +1 -1
- package/vanilla/UiEditorSurface.js +1 -1
- package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
- package/vanilla/UiEditorTableContextMenu.js +6 -14
- package/vanilla/UiEditorTableOverlay.d.ts +1 -1
- package/vanilla/UiEditorTableOverlay.js +9 -25
- package/vanilla/UiEditorTableToolbar.d.ts +1 -1
- package/vanilla/UiEditorTableToolbar.js +25 -77
- package/vanilla/UiEditorToolbar.d.ts +1 -1
- package/vanilla/UiEditorToolbar.js +1 -1
- package/vanilla/UiFloatingActionButton.d.ts +1 -1
- package/vanilla/UiFloatingActionButton.js +1 -1
- package/vanilla/UiFormField.d.ts +1 -1
- package/vanilla/UiFormField.js +1 -1
- package/vanilla/UiGrid.d.ts +1 -1
- package/vanilla/UiGrid.js +1 -1
- package/vanilla/UiIcon.d.ts +1 -1
- package/vanilla/UiIcon.js +15 -47
- package/vanilla/UiIconButton.d.ts +1 -1
- package/vanilla/UiIconButton.js +4 -10
- package/vanilla/UiImage.d.ts +1 -1
- package/vanilla/UiImage.js +1 -1
- package/vanilla/UiInput.d.ts +1 -1
- package/vanilla/UiInput.js +1 -1
- package/vanilla/UiInputGroup.d.ts +1 -1
- package/vanilla/UiInputGroup.js +1 -1
- package/vanilla/UiList.d.ts +1 -1
- package/vanilla/UiList.js +1 -1
- package/vanilla/UiListItem.d.ts +1 -1
- package/vanilla/UiListItem.js +1 -1
- package/vanilla/UiListbox.d.ts +1 -1
- package/vanilla/UiListbox.js +4 -10
- package/vanilla/UiMenu.d.ts +1 -1
- package/vanilla/UiMenu.js +1 -1
- package/vanilla/UiMenuGroup.d.ts +1 -1
- package/vanilla/UiMenuGroup.js +4 -10
- package/vanilla/UiMenuItem.d.ts +1 -1
- package/vanilla/UiMenuItem.js +4 -10
- package/vanilla/UiMeter.d.ts +1 -1
- package/vanilla/UiMeter.js +13 -33
- package/vanilla/UiNavItem.d.ts +1 -1
- package/vanilla/UiNavItem.js +1 -1
- package/vanilla/UiPageHeader.d.ts +1 -1
- package/vanilla/UiPageHeader.js +1 -1
- package/vanilla/UiPopover.d.ts +1 -1
- package/vanilla/UiPopover.js +1 -1
- package/vanilla/UiRadio.d.ts +1 -1
- package/vanilla/UiRadio.js +1 -1
- package/vanilla/UiRadioGroup.d.ts +1 -1
- package/vanilla/UiRadioGroup.js +1 -1
- package/vanilla/UiReel.d.ts +1 -1
- package/vanilla/UiReel.js +1 -1
- package/vanilla/UiScrollArea.d.ts +1 -1
- package/vanilla/UiScrollArea.js +1 -1
- package/vanilla/UiSearchResultRow.d.ts +1 -1
- package/vanilla/UiSearchResultRow.js +1 -1
- package/vanilla/UiSearchShell.d.ts +1 -1
- package/vanilla/UiSearchShell.js +1 -1
- package/vanilla/UiSection.d.ts +1 -1
- package/vanilla/UiSection.js +1 -1
- package/vanilla/UiSelect.d.ts +1 -1
- package/vanilla/UiSelect.js +1 -1
- package/vanilla/UiSeparator.d.ts +1 -1
- package/vanilla/UiSeparator.js +1 -1
- package/vanilla/UiSidebar.d.ts +1 -1
- package/vanilla/UiSidebar.js +1 -1
- package/vanilla/UiSpinner.d.ts +1 -1
- package/vanilla/UiSpinner.js +1 -1
- package/vanilla/UiStack.d.ts +1 -1
- package/vanilla/UiStack.js +1 -1
- package/vanilla/UiStatusMessage.d.ts +1 -1
- package/vanilla/UiStatusMessage.js +1 -1
- package/vanilla/UiSwitch.d.ts +1 -1
- package/vanilla/UiSwitch.js +1 -1
- package/vanilla/UiSwitcher.d.ts +1 -1
- package/vanilla/UiSwitcher.js +1 -1
- package/vanilla/UiTable.d.ts +1 -1
- package/vanilla/UiTable.js +1 -1
- package/vanilla/UiTabs.d.ts +1 -1
- package/vanilla/UiTabs.js +1 -1
- package/vanilla/UiText.d.ts +1 -1
- package/vanilla/UiText.js +1 -1
- package/vanilla/UiTextarea.d.ts +1 -1
- package/vanilla/UiTextarea.js +1 -1
- package/vanilla/UiToast.d.ts +1 -1
- package/vanilla/UiToast.js +1 -1
- package/vanilla/UiToastRegion.d.ts +1 -1
- package/vanilla/UiToastRegion.js +1 -1
- package/vanilla/UiTooltip.d.ts +1 -1
- package/vanilla/UiTooltip.js +1 -1
- package/vanilla/UiTopBar.d.ts +1 -1
- package/vanilla/UiTopBar.js +1 -1
- package/vanilla/UiTree.d.ts +1 -1
- package/vanilla/UiTree.js +1 -1
- package/vanilla/UiTreeItem.d.ts +1 -1
- package/vanilla/UiTreeItem.js +7 -19
- package/vanilla/index.js +1 -0
- package/vue/UiActionBar.vue +46 -78
- package/vue/UiAffordanceScope.vue +27 -66
- package/vue/UiAvatar.d.ts +10 -7
- package/vue/UiAvatar.vue +100 -218
- package/vue/UiAvatarGroup.d.ts +10 -7
- package/vue/UiAvatarGroup.vue +78 -160
- package/vue/UiBadge.d.ts +1 -1
- package/vue/UiBadge.vue +483 -520
- package/vue/UiBreadcrumbItem.vue +52 -123
- package/vue/UiBreadcrumbs.vue +27 -70
- package/vue/UiButton.d.ts +2 -2
- package/vue/UiButton.vue +420 -471
- package/vue/UiCallout.vue +131 -175
- package/vue/UiCard.d.ts +1 -1
- package/vue/UiCard.vue +112 -151
- package/vue/UiCheckbox.d.ts +13 -10
- package/vue/UiCheckbox.vue +160 -221
- package/vue/UiCluster.d.ts +1 -1
- package/vue/UiCluster.vue +84 -128
- package/vue/UiCombobox.d.ts +71 -68
- package/vue/UiCombobox.vue +417 -743
- package/vue/UiContainer.vue +43 -87
- package/vue/UiContextMenu.d.ts +6 -6
- package/vue/UiContextMenu.vue +78 -117
- package/vue/UiCover.vue +29 -69
- package/vue/UiDescriptionItem.vue +39 -82
- package/vue/UiDescriptionList.vue +64 -107
- package/vue/UiDialog.d.ts +22 -19
- package/vue/UiDialog.vue +193 -246
- package/vue/UiDisclosure.d.ts +22 -19
- package/vue/UiDisclosure.vue +192 -283
- package/vue/UiEditable.d.ts +5 -5
- package/vue/UiEditable.vue +124 -207
- package/vue/UiEditorImageToolbar.d.ts +54 -0
- package/vue/UiEditorImageToolbar.js +2 -0
- package/vue/UiEditorImageToolbar.vue +415 -0
- package/vue/UiEditorInsertTableGrid.d.ts +2 -2
- package/vue/UiEditorInsertTableGrid.vue +98 -266
- package/vue/UiEditorMentionMenu.d.ts +15 -12
- package/vue/UiEditorMentionMenu.vue +150 -239
- package/vue/UiEditorMentionMenuItem.vue +66 -110
- package/vue/UiEditorSlashMenu.d.ts +16 -13
- package/vue/UiEditorSlashMenu.vue +172 -253
- package/vue/UiEditorSlashMenuGroup.vue +25 -69
- package/vue/UiEditorSlashMenuItem.vue +67 -115
- package/vue/UiEditorSurface.vue +19 -63
- package/vue/UiEditorTableContextMenu.vue +135 -269
- package/vue/UiEditorTableOverlay.d.ts +2 -2
- package/vue/UiEditorTableOverlay.vue +310 -479
- package/vue/UiEditorTableToolbar.d.ts +2 -2
- package/vue/UiEditorTableToolbar.vue +182 -357
- package/vue/UiEditorToolbar.vue +143 -183
- package/vue/UiFloatingActionButton.vue +70 -114
- package/vue/UiFormField.d.ts +1 -1
- package/vue/UiFormField.vue +76 -117
- package/vue/UiGrid.d.ts +1 -1
- package/vue/UiGrid.vue +65 -103
- package/vue/UiIcon.vue +32 -106
- package/vue/UiIconButton.d.ts +2 -2
- package/vue/UiIconButton.vue +359 -411
- package/vue/UiImage.vue +145 -180
- package/vue/UiInput.vue +158 -190
- package/vue/UiInputGroup.vue +199 -239
- package/vue/UiList.vue +67 -109
- package/vue/UiListItem.vue +154 -201
- package/vue/UiListbox.d.ts +10 -7
- package/vue/UiListbox.vue +86 -260
- package/vue/UiMenu.d.ts +11 -11
- package/vue/UiMenu.vue +118 -152
- package/vue/UiMenuGroup.vue +21 -67
- package/vue/UiMenuItem.d.ts +19 -16
- package/vue/UiMenuItem.vue +169 -262
- package/vue/UiMeter.d.ts +4 -4
- package/vue/UiMeter.vue +166 -680
- package/vue/UiNavItem.vue +140 -213
- package/vue/UiPageHeader.vue +81 -127
- package/vue/UiPopover.d.ts +7 -7
- package/vue/UiPopover.vue +90 -129
- package/vue/UiRadio.d.ts +12 -9
- package/vue/UiRadio.vue +91 -149
- package/vue/UiRadioGroup.d.ts +2 -2
- package/vue/UiRadioGroup.vue +47 -85
- package/vue/UiReel.vue +89 -130
- package/vue/UiScrollArea.d.ts +1 -1
- package/vue/UiScrollArea.vue +78 -119
- package/vue/UiSearchResultRow.vue +96 -149
- package/vue/UiSearchShell.d.ts +2 -2
- package/vue/UiSearchShell.vue +159 -196
- package/vue/UiSection.vue +105 -149
- package/vue/UiSelect.d.ts +1 -1
- package/vue/UiSelect.vue +114 -146
- package/vue/UiSeparator.vue +42 -85
- package/vue/UiSidebar.d.ts +10 -7
- package/vue/UiSidebar.vue +193 -260
- package/vue/UiSpinner.vue +54 -130
- package/vue/UiStack.vue +66 -107
- package/vue/UiStatusMessage.d.ts +1 -1
- package/vue/UiStatusMessage.vue +61 -135
- package/vue/UiSwitch.d.ts +12 -9
- package/vue/UiSwitch.vue +136 -194
- package/vue/UiSwitcher.vue +69 -107
- package/vue/UiTable.vue +121 -156
- package/vue/UiTabs.d.ts +1 -1
- package/vue/UiTabs.vue +139 -267
- package/vue/UiText.d.ts +4 -4
- package/vue/UiText.vue +145 -184
- package/vue/UiTextarea.d.ts +2 -2
- package/vue/UiTextarea.vue +162 -194
- package/vue/UiToast.vue +70 -118
- package/vue/UiToastRegion.vue +157 -276
- package/vue/UiTooltip.d.ts +21 -18
- package/vue/UiTooltip.vue +174 -234
- package/vue/UiTopBar.vue +48 -76
- package/vue/UiTree.vue +46 -79
- package/vue/UiTreeItem.d.ts +18 -15
- package/vue/UiTreeItem.vue +526 -668
- package/vue/chunks/UiActionBar.js +5 -17
- package/vue/chunks/UiAffordanceScope.js +7 -26
- package/vue/chunks/UiAvatar.js +20 -74
- package/vue/chunks/UiAvatarGroup.js +14 -56
- package/vue/chunks/UiBadge.js +10 -28
- package/vue/chunks/UiBreadcrumbItem.js +11 -41
- package/vue/chunks/UiBreadcrumbs.js +7 -25
- package/vue/chunks/UiButton.js +80 -103
- package/vue/chunks/UiCallout.js +9 -27
- package/vue/chunks/UiCard.js +33 -53
- package/vue/chunks/UiCheckbox.js +14 -46
- package/vue/chunks/UiCluster.js +13 -31
- package/vue/chunks/UiCombobox.js +99 -237
- package/vue/chunks/UiContainer.js +9 -27
- package/vue/chunks/UiContextMenu.js +7 -26
- package/vue/chunks/UiCover.js +7 -25
- package/vue/chunks/UiDescriptionItem.js +6 -24
- package/vue/chunks/UiDescriptionList.js +9 -27
- package/vue/chunks/UiDialog.js +18 -47
- package/vue/chunks/UiDisclosure.js +19 -66
- package/vue/chunks/UiEditable.js +18 -60
- package/vue/chunks/UiEditorImageToolbar.js +515 -0
- package/vue/chunks/UiEditorInsertTableGrid.js +14 -112
- package/vue/chunks/UiEditorMentionMenu.js +16 -54
- package/vue/chunks/UiEditorMentionMenuItem.js +10 -28
- package/vue/chunks/UiEditorSlashMenu.js +17 -46
- package/vue/chunks/UiEditorSlashMenuGroup.js +7 -25
- package/vue/chunks/UiEditorSlashMenuItem.js +16 -31
- package/vue/chunks/UiEditorSurface.js +7 -25
- package/vue/chunks/UiEditorTableContextMenu.js +25 -102
- package/vue/chunks/UiEditorTableOverlay.js +41 -104
- package/vue/chunks/UiEditorTableToolbar.js +44 -122
- package/vue/chunks/UiEditorToolbar.js +7 -26
- package/vue/chunks/UiFloatingActionButton.js +10 -28
- package/vue/chunks/UiFormField.js +8 -27
- package/vue/chunks/UiGrid.js +10 -28
- package/vue/chunks/UiIcon.js +21 -74
- package/vue/chunks/UiIconButton.js +18 -50
- package/vue/chunks/UiImage.js +14 -33
- package/vue/chunks/UiInput.js +12 -31
- package/vue/chunks/UiInputGroup.js +10 -29
- package/vue/chunks/UiList.js +17 -37
- package/vue/chunks/UiListItem.js +12 -30
- package/vue/chunks/UiListbox.js +22 -124
- package/vue/chunks/UiMenu.js +13 -32
- package/vue/chunks/UiMenuGroup.js +8 -26
- package/vue/chunks/UiMenuItem.js +35 -80
- package/vue/chunks/UiMeter.js +17 -351
- package/vue/chunks/UiNavItem.js +23 -57
- package/vue/chunks/UiPageHeader.js +7 -25
- package/vue/chunks/UiPopover.js +9 -28
- package/vue/chunks/UiRadio.js +11 -43
- package/vue/chunks/UiRadioGroup.js +13 -32
- package/vue/chunks/UiReel.js +10 -28
- package/vue/chunks/UiScrollArea.js +10 -29
- package/vue/chunks/UiSearchResultRow.js +10 -28
- package/vue/chunks/UiSearchShell.js +9 -28
- package/vue/chunks/UiSection.js +9 -27
- package/vue/chunks/UiSelect.js +10 -29
- package/vue/chunks/UiSeparator.js +10 -28
- package/vue/chunks/UiSidebar.js +15 -47
- package/vue/chunks/UiSpinner.js +8 -44
- package/vue/chunks/UiStack.js +12 -30
- package/vue/chunks/UiStatusMessage.js +10 -42
- package/vue/chunks/UiSwitch.js +11 -43
- package/vue/chunks/UiSwitcher.js +9 -28
- package/vue/chunks/UiTable.js +7 -26
- package/vue/chunks/UiTabs.js +15 -91
- package/vue/chunks/UiText.js +148 -168
- package/vue/chunks/UiTextarea.js +16 -35
- package/vue/chunks/UiToast.js +13 -37
- package/vue/chunks/UiToastRegion.js +16 -88
- package/vue/chunks/UiTooltip.js +14 -46
- package/vue/chunks/UiTopBar.js +5 -17
- package/vue/chunks/UiTree.js +13 -32
- package/vue/chunks/UiTreeItem.js +34 -90
- package/vue/chunks/_plugin-vue_export-helper.js +904 -1
- package/vue/chunks/control.js +3 -0
- package/vue/chunks/props.js +1 -1
- package/vue/components.css +7902 -7830
- package/vue/editor/index.js +42 -171
- package/vue/editor/primitives.d.ts +9 -1
- package/vue/host.ts +999 -14
- package/vue/index.d.ts +1 -0
- package/vue/index.js +9 -8
- package/vue/chunks/host.js +0 -443
- package/vue/editor/image-controls.d.ts +0 -19
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
<link rel="component" href="../ui-text/ui-text.html">
|
|
2
|
+
<link rel="component" href="../ui-editor-toolbar/ui-editor-toolbar.html">
|
|
3
|
+
<link rel="component" href="../ui-icon-button/ui-icon-button.html">
|
|
4
|
+
<link rel="component" href="../ui-icon/ui-icon.html">
|
|
5
|
+
<link rel="component" href="../ui-tooltip/ui-tooltip.html">
|
|
6
|
+
<link rel="component" href="../ui-popover/ui-popover.html">
|
|
7
|
+
<link rel="component" href="../ui-stack/ui-stack.html">
|
|
8
|
+
<link rel="component" href="../ui-form-field/ui-form-field.html">
|
|
9
|
+
<link rel="component" href="../ui-input/ui-input.html">
|
|
10
|
+
<link rel="component" href="../ui-cluster/ui-cluster.html">
|
|
11
|
+
<link rel="component" href="../ui-button/ui-button.html">
|
|
12
|
+
<template component="ui-editor-image-toolbar" controller="./ui-editor-image-toolbar.js">
|
|
13
|
+
<defs>
|
|
14
|
+
<prop name="placement" type="keyword" values="block, center, wrap-left, wrap-right" default="block"
|
|
15
|
+
>How the selected image sits in the text; its command shows as pressed.</prop>
|
|
16
|
+
<prop name="alt" type="string" default="">The selected image's description, which the description form starts from.</prop>
|
|
17
|
+
<prop name="target" type="string" default=""
|
|
18
|
+
>Identifies the image the toolbar acts on. When it changes, an open description draft is cancelled rather than applied to another image.</prop>
|
|
19
|
+
<state name="base" type="string" value="ui-editor-image-toolbar"></state>
|
|
20
|
+
<state name="describing" type="boolean" value="false"></state>
|
|
21
|
+
<state name="draft" type="string" value=""></state>
|
|
22
|
+
<event name="placement" type="object">
|
|
23
|
+
<prop name="placement" required type="keyword" values="block, center, wrap-left, wrap-right"></prop>
|
|
24
|
+
Requests a placement for the selected image.
|
|
25
|
+
</event>
|
|
26
|
+
<event name="describe" type="object">
|
|
27
|
+
<prop name="alt" required type="string"></prop>
|
|
28
|
+
Requests the saved description for the image the form was opened for.
|
|
29
|
+
</event>
|
|
30
|
+
<event name="delete" type="object">Requests deleting the selected image.</event>
|
|
31
|
+
</defs>
|
|
32
|
+
<div>
|
|
33
|
+
<ui-text as="div" font="sans">
|
|
34
|
+
<ui-editor-toolbar from:floating="true" aria-label="Image actions">
|
|
35
|
+
<ui-icon-button
|
|
36
|
+
from:id="concat($base, '-block')"
|
|
37
|
+
label="Image in line"
|
|
38
|
+
size="sm"
|
|
39
|
+
data-image-placement="block"
|
|
40
|
+
from:variant="{ true: 'outline', false: 'ghost' }[concat($placement = 'block')]"
|
|
41
|
+
from:aria-pressed="concat($placement = 'block')"
|
|
42
|
+
><ui-icon name="panel-top" size="sm"></ui-icon></ui-icon-button>
|
|
43
|
+
<ui-icon-button
|
|
44
|
+
from:id="concat($base, '-center')"
|
|
45
|
+
label="Center image"
|
|
46
|
+
size="sm"
|
|
47
|
+
data-image-placement="center"
|
|
48
|
+
from:variant="{ true: 'outline', false: 'ghost' }[concat($placement = 'center')]"
|
|
49
|
+
from:aria-pressed="concat($placement = 'center')"
|
|
50
|
+
><ui-icon name="align-center" size="sm"></ui-icon></ui-icon-button>
|
|
51
|
+
<ui-icon-button
|
|
52
|
+
from:id="concat($base, '-wrap-left')"
|
|
53
|
+
label="Wrap text to the right"
|
|
54
|
+
size="sm"
|
|
55
|
+
data-image-placement="wrap-left"
|
|
56
|
+
from:variant="{ true: 'outline', false: 'ghost' }[concat($placement = 'wrap-left')]"
|
|
57
|
+
from:aria-pressed="concat($placement = 'wrap-left')"
|
|
58
|
+
><ui-icon name="panel-left" size="sm"></ui-icon></ui-icon-button>
|
|
59
|
+
<ui-icon-button
|
|
60
|
+
from:id="concat($base, '-wrap-right')"
|
|
61
|
+
label="Wrap text to the left"
|
|
62
|
+
size="sm"
|
|
63
|
+
data-image-placement="wrap-right"
|
|
64
|
+
from:variant="{ true: 'outline', false: 'ghost' }[concat($placement = 'wrap-right')]"
|
|
65
|
+
from:aria-pressed="concat($placement = 'wrap-right')"
|
|
66
|
+
><ui-icon name="panel-right" size="sm"></ui-icon></ui-icon-button>
|
|
67
|
+
<ui-icon-button from:id="$base" label="Image description" size="sm" variant="ghost"><ui-icon name="file-text" size="sm"></ui-icon></ui-icon-button>
|
|
68
|
+
<ui-icon-button from:id="concat($base, '-delete')" label="Delete image" size="sm" variant="ghost" data-image-action="delete"><ui-icon
|
|
69
|
+
name="trash"
|
|
70
|
+
size="sm"
|
|
71
|
+
></ui-icon></ui-icon-button>
|
|
72
|
+
</ui-editor-toolbar>
|
|
73
|
+
<ui-tooltip from:for="concat($base, '-block')">Image in line</ui-tooltip>
|
|
74
|
+
<ui-tooltip from:for="concat($base, '-center')">Center image</ui-tooltip>
|
|
75
|
+
<ui-tooltip from:for="concat($base, '-wrap-left')">Wrap text to the right</ui-tooltip>
|
|
76
|
+
<ui-tooltip from:for="concat($base, '-wrap-right')">Wrap text to the left</ui-tooltip>
|
|
77
|
+
<ui-tooltip from:for="$base">Image description</ui-tooltip>
|
|
78
|
+
<ui-tooltip from:for="concat($base, '-delete')">Delete image</ui-tooltip>
|
|
79
|
+
<ui-popover data-image-description from:for="$base" from:open="$describing" size="sm" aria-label="Image description">
|
|
80
|
+
<form aria-label="Image description">
|
|
81
|
+
<ui-stack gap="s">
|
|
82
|
+
<ui-form-field>
|
|
83
|
+
<label slot="label" from:for="concat($base, '-alt')">Alt text</label>
|
|
84
|
+
<ui-input data-image-alt from:id="concat($base, '-alt')" size="sm" from:value="$draft"></ui-input>
|
|
85
|
+
</ui-form-field>
|
|
86
|
+
<ui-text size="xs" tone="secondary">Describe the image for people using a screen reader.</ui-text>
|
|
87
|
+
<ui-cluster justify="end" gap="xs">
|
|
88
|
+
<ui-button type="button" variant="ghost" tone="neutral" size="sm" data-image-action="cancel">Cancel</ui-button>
|
|
89
|
+
<ui-button type="submit" variant="solid" size="sm">Save</ui-button>
|
|
90
|
+
</ui-cluster>
|
|
91
|
+
</ui-stack>
|
|
92
|
+
</form>
|
|
93
|
+
</ui-popover>
|
|
94
|
+
</ui-text>
|
|
95
|
+
</div>
|
|
96
|
+
</template>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Gives each toolbar its own ids for its tooltips and description popover, reports placement,
|
|
2
|
+
// description, and delete requests, and keeps the description draft tied to the image it opened for.
|
|
3
|
+
function connect(host) {
|
|
4
|
+
const element = host.element;
|
|
5
|
+
if (host.state.base === "ui-editor-image-toolbar") host.state.base = `ui-editor-image-toolbar-${Math.random().toString(36).slice(2, 11)}`;
|
|
6
|
+
let target = null;
|
|
7
|
+
// Marked by attribute: the converted Vue component's host.refs has no entry for a nested component.
|
|
8
|
+
const isDescription = (event) => event.target.hasAttribute?.("data-image-description") && element.contains(event.target);
|
|
9
|
+
const onClick = (event) => {
|
|
10
|
+
const control = event.target.closest?.("[data-image-placement], [data-image-action]");
|
|
11
|
+
if (!control || !element.contains(control)) return;
|
|
12
|
+
if (control.dataset.imagePlacement) host.dispatch("placement", { placement: control.dataset.imagePlacement });
|
|
13
|
+
else if (control.dataset.imageAction === "delete") host.dispatch("delete", {});
|
|
14
|
+
else if (control.dataset.imageAction === "cancel") host.state.describing = false;
|
|
15
|
+
};
|
|
16
|
+
const onOpen = (event) => {
|
|
17
|
+
if (!isDescription(event)) return;
|
|
18
|
+
target = host.props.target.value;
|
|
19
|
+
host.state.draft = String(host.props.alt.value ?? "");
|
|
20
|
+
host.state.describing = true;
|
|
21
|
+
};
|
|
22
|
+
const onClose = (event) => {
|
|
23
|
+
if (isDescription(event)) host.state.describing = false;
|
|
24
|
+
};
|
|
25
|
+
const onInput = (event) => {
|
|
26
|
+
if (event.target.hasAttribute?.("data-image-alt")) host.state.draft = event.target.value;
|
|
27
|
+
};
|
|
28
|
+
const onSubmit = (event) => {
|
|
29
|
+
event.preventDefault();
|
|
30
|
+
host.state.describing = false;
|
|
31
|
+
if (host.props.target.value !== target) return;
|
|
32
|
+
host.dispatch("describe", { alt: String(host.state.draft ?? "") });
|
|
33
|
+
};
|
|
34
|
+
// Another image's selection cancels a draft rather than applying it there.
|
|
35
|
+
const stop = host.effect(() => {
|
|
36
|
+
if (host.props.target.value !== target && host.state.describing) host.state.describing = false;
|
|
37
|
+
});
|
|
38
|
+
element.addEventListener("click", onClick);
|
|
39
|
+
element.addEventListener("open", onOpen);
|
|
40
|
+
element.addEventListener("close", onClose);
|
|
41
|
+
element.addEventListener("input", onInput);
|
|
42
|
+
element.addEventListener("submit", onSubmit);
|
|
43
|
+
return () => {
|
|
44
|
+
stop();
|
|
45
|
+
element.removeEventListener("click", onClick);
|
|
46
|
+
element.removeEventListener("open", onOpen);
|
|
47
|
+
element.removeEventListener("close", onClose);
|
|
48
|
+
element.removeEventListener("input", onInput);
|
|
49
|
+
element.removeEventListener("submit", onSubmit);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
|
|
54
|
+
export default function controller(host) {
|
|
55
|
+
host.on("connect", () => connect(host));
|
|
56
|
+
}
|
|
@@ -30,8 +30,9 @@
|
|
|
30
30
|
box-shadow: inset 0 0 0 1px var(--ui-accent-soft);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
/* A slotted Avatar (a person's photo) is its own circle.
|
|
34
|
-
|
|
33
|
+
/* A slotted Avatar (a person's photo) is its own circle. Its root carries data-component in HTML
|
|
34
|
+
and its tag as a class in Vue; neither tool lowers a component tag inside :has(). */
|
|
35
|
+
:host .avatar:has(> :is([data-component~="ui-avatar"], .ui-avatar)) {
|
|
35
36
|
background: none;
|
|
36
37
|
box-shadow: none;
|
|
37
38
|
}
|