@threadlabs/looma 0.5.1 → 0.5.2
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/components/ui-button/ui-button.html +13 -0
- package/components/ui-combobox/ui-combobox.html +12 -4
- package/components/ui-dialog/ui-dialog.html +13 -0
- package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +1 -1
- package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +1 -1
- package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +6 -2
- package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +20 -4
- package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +8 -4
- package/components/ui-form-field/ui-form-field.html +18 -7
- package/components/ui-icon/ui-icon.html +5 -1
- package/components/ui-icon-button/ui-icon-button.html +30 -0
- package/components/ui-popover/ui-popover.js +10 -2
- package/components/ui-search-shell/ui-search-shell.html +7 -0
- package/components/ui-search-shell/ui-search-shell.js +9 -0
- package/components/ui-tabs/ui-tabs.html +1 -1
- package/components/ui-toast-region/ui-toast-region.html +1 -1
- package/components/ui-tree-item/ui-tree-item.html +6 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/package.json +2 -2
- package/styles/ui-affordance-scope.css +1 -1
- package/styles/ui-avatar-group.css +1 -1
- package/styles/ui-avatar.css +1 -1
- package/styles/ui-badge.css +1 -1
- package/styles/ui-button.css +11 -1
- package/styles/ui-callout.css +1 -1
- package/styles/ui-checkbox.css +1 -1
- package/styles/ui-cluster.css +1 -1
- package/styles/ui-combobox.css +1 -1
- package/styles/ui-container.css +1 -1
- package/styles/ui-context-menu.css +1 -1
- package/styles/ui-dialog.css +18 -1
- package/styles/ui-disclosure.css +1 -1
- package/styles/ui-editable.css +1 -1
- package/styles/ui-editor-insert-table-grid.css +1 -1
- package/styles/ui-editor-mention-menu.css +1 -1
- package/styles/ui-editor-slash-menu.css +1 -1
- package/styles/ui-editor-table-context-menu.css +1 -1
- package/styles/ui-editor-table-overlay.css +1 -1
- package/styles/ui-editor-table-toolbar.css +1 -1
- package/styles/ui-editor-toolbar.css +1 -1
- package/styles/ui-floating-action-button.css +1 -1
- package/styles/ui-form-field.css +24 -10
- package/styles/ui-grid.css +1 -1
- package/styles/ui-icon-button.css +36 -1
- package/styles/ui-icon.css +1 -1
- package/styles/ui-input.css +1 -1
- package/styles/ui-menu-item.css +1 -1
- package/styles/ui-menu.css +1 -1
- package/styles/ui-popover.css +1 -1
- package/styles/ui-radio-group.css +1 -1
- package/styles/ui-radio.css +1 -1
- package/styles/ui-reel.css +1 -1
- package/styles/ui-search-result-row.css +1 -1
- package/styles/ui-search-shell.css +11 -2
- package/styles/ui-select.css +1 -1
- package/styles/ui-separator.css +1 -1
- package/styles/ui-sidebar.css +1 -1
- package/styles/ui-stack.css +1 -1
- package/styles/ui-switch.css +1 -1
- package/styles/ui-switcher.css +1 -1
- package/styles/ui-tabs.css +1 -1
- package/styles/ui-textarea.css +1 -1
- package/styles/ui-toast-region.css +1 -1
- package/styles/ui-tooltip.css +1 -1
- package/styles/ui-top-bar.css +1 -1
- package/styles/ui-tree-item.css +10 -2
- package/styles/ui-tree.css +1 -1
- package/vanilla/UiAffordanceScope.d.ts +1 -1
- package/vanilla/UiAffordanceScope.js +2 -2
- package/vanilla/UiAvatar.d.ts +1 -1
- package/vanilla/UiAvatar.js +2 -2
- package/vanilla/UiAvatarGroup.d.ts +1 -1
- package/vanilla/UiAvatarGroup.js +2 -2
- package/vanilla/UiBadge.d.ts +1 -1
- package/vanilla/UiBadge.js +2 -2
- package/vanilla/UiButton.d.ts +3 -1
- package/vanilla/UiButton.js +3 -3
- package/vanilla/UiCallout.d.ts +1 -1
- package/vanilla/UiCallout.js +2 -2
- package/vanilla/UiCheckbox.d.ts +1 -1
- package/vanilla/UiCheckbox.js +2 -2
- package/vanilla/UiCluster.d.ts +1 -1
- package/vanilla/UiCluster.js +2 -2
- package/vanilla/UiCombobox.d.ts +1 -1
- package/vanilla/UiCombobox.js +3 -3
- package/vanilla/UiContainer.d.ts +1 -1
- package/vanilla/UiContainer.js +2 -2
- package/vanilla/UiContextMenu.d.ts +1 -1
- package/vanilla/UiContextMenu.js +2 -2
- package/vanilla/UiDialog.d.ts +1 -1
- package/vanilla/UiDialog.js +2 -2
- package/vanilla/UiDisclosure.d.ts +1 -1
- package/vanilla/UiDisclosure.js +2 -2
- package/vanilla/UiEditable.d.ts +1 -1
- package/vanilla/UiEditable.js +2 -2
- package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
- package/vanilla/UiEditorInsertTableGrid.js +3 -3
- package/vanilla/UiEditorMentionMenu.d.ts +1 -1
- package/vanilla/UiEditorMentionMenu.js +3 -3
- package/vanilla/UiEditorSlashMenu.d.ts +1 -1
- package/vanilla/UiEditorSlashMenu.js +2 -2
- package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
- package/vanilla/UiEditorTableContextMenu.js +3 -3
- package/vanilla/UiEditorTableOverlay.d.ts +1 -1
- package/vanilla/UiEditorTableOverlay.js +3 -3
- package/vanilla/UiEditorTableToolbar.d.ts +1 -1
- package/vanilla/UiEditorTableToolbar.js +3 -3
- package/vanilla/UiEditorToolbar.d.ts +1 -1
- package/vanilla/UiEditorToolbar.js +2 -2
- package/vanilla/UiFloatingActionButton.d.ts +1 -1
- package/vanilla/UiFloatingActionButton.js +2 -2
- package/vanilla/UiFormField.d.ts +1 -1
- package/vanilla/UiFormField.js +15 -6
- package/vanilla/UiGrid.d.ts +1 -1
- package/vanilla/UiGrid.js +2 -2
- package/vanilla/UiIcon.d.ts +1 -1
- package/vanilla/UiIcon.js +3 -3
- package/vanilla/UiIconButton.d.ts +1 -1
- package/vanilla/UiIconButton.js +2 -2
- package/vanilla/UiInput.d.ts +1 -1
- package/vanilla/UiInput.js +2 -2
- package/vanilla/UiMenu.d.ts +1 -1
- package/vanilla/UiMenu.js +2 -2
- package/vanilla/UiMenuItem.d.ts +1 -1
- package/vanilla/UiMenuItem.js +2 -2
- package/vanilla/UiPopover.d.ts +1 -1
- package/vanilla/UiPopover.js +2 -2
- package/vanilla/UiRadio.d.ts +1 -1
- package/vanilla/UiRadio.js +2 -2
- package/vanilla/UiRadioGroup.d.ts +1 -1
- package/vanilla/UiRadioGroup.js +2 -2
- package/vanilla/UiReel.d.ts +1 -1
- package/vanilla/UiReel.js +2 -2
- package/vanilla/UiSearchResultRow.d.ts +1 -1
- package/vanilla/UiSearchResultRow.js +2 -2
- package/vanilla/UiSearchShell.d.ts +1 -1
- package/vanilla/UiSearchShell.js +2 -2
- package/vanilla/UiSelect.d.ts +1 -1
- package/vanilla/UiSelect.js +2 -2
- package/vanilla/UiSeparator.d.ts +1 -1
- package/vanilla/UiSeparator.js +2 -2
- package/vanilla/UiSidebar.d.ts +1 -1
- package/vanilla/UiSidebar.js +2 -2
- package/vanilla/UiStack.d.ts +1 -1
- package/vanilla/UiStack.js +2 -2
- package/vanilla/UiSwitch.d.ts +1 -1
- package/vanilla/UiSwitch.js +2 -2
- package/vanilla/UiSwitcher.d.ts +1 -1
- package/vanilla/UiSwitcher.js +2 -2
- package/vanilla/UiTabs.d.ts +1 -1
- package/vanilla/UiTabs.js +3 -3
- package/vanilla/UiTextarea.d.ts +1 -1
- package/vanilla/UiTextarea.js +2 -2
- package/vanilla/UiToastRegion.d.ts +1 -1
- package/vanilla/UiToastRegion.js +3 -3
- package/vanilla/UiTooltip.d.ts +1 -1
- package/vanilla/UiTooltip.js +2 -2
- package/vanilla/UiTopBar.d.ts +1 -1
- package/vanilla/UiTopBar.js +1 -1
- package/vanilla/UiTree.d.ts +1 -1
- package/vanilla/UiTree.js +2 -2
- package/vanilla/UiTreeItem.d.ts +1 -1
- package/vanilla/UiTreeItem.js +2 -2
- package/vue/UiAffordanceScope.d.ts +2 -2
- package/vue/UiAffordanceScope.vue +92 -73
- package/vue/UiAvatar.d.ts +7 -7
- package/vue/UiAvatar.vue +145 -105
- package/vue/UiAvatarGroup.d.ts +4 -4
- package/vue/UiAvatarGroup.vue +134 -118
- package/vue/UiBadge.d.ts +4 -4
- package/vue/UiBadge.vue +113 -114
- package/vue/UiButton.d.ts +10 -6
- package/vue/UiButton.vue +289 -248
- package/vue/UiCallout.d.ts +2 -2
- package/vue/UiCallout.vue +154 -87
- package/vue/UiCheckbox.d.ts +14 -10
- package/vue/UiCheckbox.vue +228 -162
- package/vue/UiCluster.d.ts +2 -2
- package/vue/UiCluster.vue +53 -60
- package/vue/UiCombobox.d.ts +36 -32
- package/vue/UiCombobox.vue +1005 -416
- package/vue/UiContainer.d.ts +2 -2
- package/vue/UiContainer.vue +48 -51
- package/vue/UiContextMenu.d.ts +6 -4
- package/vue/UiContextMenu.vue +205 -116
- package/vue/UiDialog.d.ts +11 -9
- package/vue/UiDialog.vue +287 -212
- package/vue/UiDisclosure.d.ts +8 -6
- package/vue/UiDisclosure.vue +248 -159
- package/vue/UiEditable.d.ts +16 -12
- package/vue/UiEditable.vue +325 -205
- package/vue/UiEditorInsertTableGrid.d.ts +8 -8
- package/vue/UiEditorInsertTableGrid.vue +216 -157
- package/vue/UiEditorMentionMenu.d.ts +9 -9
- package/vue/UiEditorMentionMenu.vue +265 -222
- package/vue/UiEditorSlashMenu.d.ts +7 -7
- package/vue/UiEditorSlashMenu.vue +286 -240
- package/vue/UiEditorTableContextMenu.d.ts +5 -5
- package/vue/UiEditorTableContextMenu.vue +306 -193
- package/vue/UiEditorTableOverlay.d.ts +2 -2
- package/vue/UiEditorTableOverlay.vue +609 -369
- package/vue/UiEditorTableToolbar.d.ts +7 -7
- package/vue/UiEditorTableToolbar.vue +443 -268
- package/vue/UiEditorToolbar.d.ts +2 -2
- package/vue/UiEditorToolbar.vue +134 -121
- package/vue/UiFloatingActionButton.d.ts +6 -6
- package/vue/UiFloatingActionButton.vue +100 -99
- package/vue/UiFormField.d.ts +6 -6
- package/vue/UiFormField.vue +112 -80
- package/vue/UiGrid.d.ts +2 -2
- package/vue/UiGrid.vue +51 -57
- package/vue/UiIcon.d.ts +2 -2
- package/vue/UiIcon.vue +118 -89
- package/vue/UiIconButton.d.ts +11 -11
- package/vue/UiIconButton.vue +283 -217
- package/vue/UiInput.d.ts +9 -9
- package/vue/UiInput.vue +153 -127
- package/vue/UiMenu.d.ts +8 -6
- package/vue/UiMenu.vue +217 -143
- package/vue/UiMenuItem.d.ts +4 -4
- package/vue/UiMenuItem.vue +52 -46
- package/vue/UiPopover.d.ts +8 -6
- package/vue/UiPopover.vue +197 -137
- package/vue/UiRadio.d.ts +14 -10
- package/vue/UiRadio.vue +183 -117
- package/vue/UiRadioGroup.d.ts +14 -12
- package/vue/UiRadioGroup.vue +172 -111
- package/vue/UiReel.d.ts +3 -3
- package/vue/UiReel.vue +77 -77
- package/vue/UiSearchResultRow.d.ts +4 -4
- package/vue/UiSearchResultRow.vue +124 -115
- package/vue/UiSearchShell.d.ts +10 -8
- package/vue/UiSearchShell.vue +245 -176
- package/vue/UiSelect.d.ts +9 -9
- package/vue/UiSelect.vue +162 -134
- package/vue/UiSeparator.d.ts +2 -2
- package/vue/UiSeparator.vue +22 -27
- package/vue/UiSidebar.d.ts +20 -18
- package/vue/UiSidebar.vue +312 -224
- package/vue/UiStack.d.ts +3 -3
- package/vue/UiStack.vue +64 -70
- package/vue/UiSwitch.d.ts +12 -8
- package/vue/UiSwitch.vue +218 -150
- package/vue/UiSwitcher.d.ts +3 -3
- package/vue/UiSwitcher.vue +73 -75
- package/vue/UiTabs.d.ts +10 -8
- package/vue/UiTabs.vue +251 -210
- package/vue/UiTextarea.d.ts +11 -11
- package/vue/UiTextarea.vue +155 -128
- package/vue/UiToastRegion.d.ts +10 -8
- package/vue/UiToastRegion.vue +261 -198
- package/vue/UiTooltip.d.ts +14 -12
- package/vue/UiTooltip.vue +241 -177
- package/vue/UiTopBar.vue +51 -42
- package/vue/UiTree.d.ts +8 -6
- package/vue/UiTree.vue +157 -70
- package/vue/UiTreeItem.d.ts +24 -22
- package/vue/UiTreeItem.vue +456 -339
- package/vue/chunks/UiAffordanceScope.js +9 -16
- package/vue/chunks/UiAvatar.js +23 -29
- package/vue/chunks/UiAvatarGroup.js +16 -39
- package/vue/chunks/UiBadge.js +3 -12
- package/vue/chunks/UiButton.js +15 -18
- package/vue/chunks/UiCallout.js +8 -17
- package/vue/chunks/UiCheckbox.js +37 -40
- package/vue/chunks/UiCluster.js +3 -12
- package/vue/chunks/UiCombobox.js +224 -266
- package/vue/chunks/UiContainer.js +3 -12
- package/vue/chunks/UiContextMenu.js +39 -34
- package/vue/chunks/UiDialog.js +36 -39
- package/vue/chunks/UiDisclosure.js +43 -48
- package/vue/chunks/UiEditable.js +55 -57
- package/vue/chunks/UiEditorInsertTableGrid.js +55 -73
- package/vue/chunks/UiEditorMentionMenu.js +40 -81
- package/vue/chunks/UiEditorSlashMenu.js +28 -52
- package/vue/chunks/UiEditorTableContextMenu.js +32 -56
- package/vue/chunks/UiEditorTableOverlay.js +58 -82
- package/vue/chunks/UiEditorTableToolbar.js +61 -85
- package/vue/chunks/UiEditorToolbar.js +4 -13
- package/vue/chunks/UiFloatingActionButton.js +7 -21
- package/vue/chunks/UiFormField.js +15 -12
- package/vue/chunks/UiGrid.js +3 -12
- package/vue/chunks/UiIcon.js +20 -43
- package/vue/chunks/UiIconButton.js +16 -28
- package/vue/chunks/UiInput.js +20 -25
- package/vue/chunks/UiMenu.js +29 -33
- package/vue/chunks/UiMenuItem.js +4 -10
- package/vue/chunks/UiPopover.js +28 -29
- package/vue/chunks/UiRadio.js +36 -39
- package/vue/chunks/UiRadioGroup.js +30 -34
- package/vue/chunks/UiReel.js +6 -15
- package/vue/chunks/UiSearchResultRow.js +6 -19
- package/vue/chunks/UiSearchShell.js +25 -28
- package/vue/chunks/UiSelect.js +20 -23
- package/vue/chunks/UiSeparator.js +2 -8
- package/vue/chunks/UiSidebar.js +39 -44
- package/vue/chunks/UiStack.js +6 -15
- package/vue/chunks/UiSwitch.js +35 -38
- package/vue/chunks/UiSwitcher.js +6 -15
- package/vue/chunks/UiTabs.js +47 -85
- package/vue/chunks/UiTextarea.js +21 -26
- package/vue/chunks/UiToastRegion.js +38 -72
- package/vue/chunks/UiTooltip.js +34 -35
- package/vue/chunks/UiTopBar.js +1 -1
- package/vue/chunks/UiTree.js +20 -15
- package/vue/chunks/UiTreeItem.js +85 -102
- package/vue/components.css +3994 -3801
package/vue/UiDisclosure.vue
CHANGED
|
@@ -1,211 +1,300 @@
|
|
|
1
|
-
<!-- Generated by HTML Next 1.0.0-alpha.
|
|
1
|
+
<!-- Generated by HTML Next 1.0.0-alpha.2 for Vue 3.5. Do not edit. -->
|
|
2
2
|
<script setup lang="ts">
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
3
|
+
import {
|
|
4
|
+
computed,
|
|
5
|
+
onBeforeUnmount,
|
|
6
|
+
onMounted,
|
|
7
|
+
ref,
|
|
8
|
+
shallowRef,
|
|
9
|
+
useTemplateRef,
|
|
10
|
+
watchEffect,
|
|
11
|
+
} from 'vue'
|
|
12
|
+
import * as controllerModule from '../components/ui-disclosure/ui-disclosure.js'
|
|
13
|
+
|
|
14
|
+
defineOptions({ inheritAttrs: false })
|
|
15
|
+
|
|
16
|
+
const props = withDefaults(
|
|
17
|
+
defineProps<{
|
|
18
|
+
disabled?: boolean
|
|
19
|
+
open?: boolean
|
|
20
|
+
summary?: string
|
|
21
|
+
}>(),
|
|
22
|
+
{
|
|
23
|
+
disabled: false,
|
|
24
|
+
open: false,
|
|
25
|
+
summary: 'Details',
|
|
26
|
+
},
|
|
27
|
+
)
|
|
24
28
|
const emit = defineEmits<{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
'update:open': [value: boolean]
|
|
30
|
+
open: [
|
|
31
|
+
detail: {
|
|
32
|
+
readonly open: boolean
|
|
33
|
+
readonly reason: 'action' | 'programmatic' | 'light-dismiss' | 'escape'
|
|
34
|
+
readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
|
|
35
|
+
},
|
|
36
|
+
]
|
|
37
|
+
close: [
|
|
38
|
+
detail: {
|
|
39
|
+
readonly open: boolean
|
|
40
|
+
readonly reason: 'action' | 'programmatic' | 'light-dismiss' | 'escape'
|
|
41
|
+
readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
|
|
42
|
+
},
|
|
43
|
+
]
|
|
44
|
+
}>()
|
|
45
|
+
|
|
46
|
+
const root = ref<HTMLElement | null>(null)
|
|
47
|
+
const triggerElement = useTemplateRef<HTMLElement>('trigger')
|
|
48
|
+
const internalOpen = ref(false)
|
|
49
|
+
const contentId = ref('')
|
|
50
|
+
|
|
51
|
+
/** The values the styles' :host-state() rules test. */
|
|
52
|
+
const hostState = computed(() =>
|
|
53
|
+
[
|
|
54
|
+
internalOpen.value && 'internalOpen',
|
|
55
|
+
].filter(Boolean).join(' ')
|
|
56
|
+
)
|
|
32
57
|
|
|
33
58
|
/** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
|
|
34
|
-
|
|
35
|
-
const declared
|
|
59
|
+
function dispatch(name: string, detail?: unknown): boolean {
|
|
60
|
+
const declared: Record<string, EventInit | undefined> = {
|
|
61
|
+
open: { bubbles: true, composed: true, cancelable: false },
|
|
62
|
+
close: { bubbles: true, composed: true, cancelable: false },
|
|
63
|
+
}
|
|
36
64
|
const checks: Record<string, (detail: unknown) => boolean> = {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
65
|
+
open: (detail) =>
|
|
66
|
+
detail !== null && typeof detail === 'object' && !Array.isArray(detail)
|
|
67
|
+
&& typeof (detail as Record<string, unknown>)['open'] === 'boolean'
|
|
68
|
+
&& ((detail as Record<string, unknown>)['reason'] === 'action'
|
|
69
|
+
|| (detail as Record<string, unknown>)['reason'] === 'programmatic'
|
|
70
|
+
|| (detail as Record<string, unknown>)['reason'] === 'light-dismiss'
|
|
71
|
+
|| (detail as Record<string, unknown>)['reason'] === 'escape')
|
|
72
|
+
&& ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
|
|
73
|
+
|| (detail as Record<string, unknown>)['trigger'] === 'pointer'
|
|
74
|
+
|| (detail as Record<string, unknown>)['trigger'] === 'programmatic')
|
|
75
|
+
&& Object.keys(detail as object).every((key) => ['open', 'reason', 'trigger'].includes(key)),
|
|
76
|
+
close: (detail) =>
|
|
77
|
+
detail !== null && typeof detail === 'object' && !Array.isArray(detail)
|
|
78
|
+
&& typeof (detail as Record<string, unknown>)['open'] === 'boolean'
|
|
79
|
+
&& ((detail as Record<string, unknown>)['reason'] === 'action'
|
|
80
|
+
|| (detail as Record<string, unknown>)['reason'] === 'programmatic'
|
|
81
|
+
|| (detail as Record<string, unknown>)['reason'] === 'light-dismiss'
|
|
82
|
+
|| (detail as Record<string, unknown>)['reason'] === 'escape')
|
|
83
|
+
&& ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
|
|
84
|
+
|| (detail as Record<string, unknown>)['trigger'] === 'pointer'
|
|
85
|
+
|| (detail as Record<string, unknown>)['trigger'] === 'programmatic')
|
|
86
|
+
&& Object.keys(detail as object).every((key) => ['open', 'reason', 'trigger'].includes(key)),
|
|
87
|
+
}
|
|
40
88
|
if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
|
|
41
|
-
throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
|
|
89
|
+
throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
|
|
42
90
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return tokens;
|
|
53
|
-
}).join(" "));
|
|
91
|
+
const emitEvent = emit as (name: string, detail: unknown) => void
|
|
92
|
+
emitEvent(name, detail)
|
|
93
|
+
if (detail !== null && typeof detail === 'object' && 'open' in detail) {
|
|
94
|
+
emitEvent('update:open', (detail as Record<string, unknown>)['open'])
|
|
95
|
+
}
|
|
96
|
+
return root.value?.dispatchEvent(
|
|
97
|
+
new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
|
|
98
|
+
) ?? true
|
|
99
|
+
}
|
|
54
100
|
|
|
55
101
|
function read(name: string): unknown {
|
|
56
|
-
if (name ===
|
|
57
|
-
if (name ===
|
|
58
|
-
return (props as Record<string, unknown>)[name]
|
|
102
|
+
if (name === 'internalOpen') return internalOpen.value
|
|
103
|
+
if (name === 'contentId') return contentId.value
|
|
104
|
+
return (props as Record<string, unknown>)[name]
|
|
59
105
|
}
|
|
60
106
|
|
|
61
107
|
function write(name: string, value: unknown): boolean {
|
|
62
|
-
if (name ===
|
|
63
|
-
|
|
64
|
-
|
|
108
|
+
if (name === 'internalOpen') {
|
|
109
|
+
internalOpen.value = value as never
|
|
110
|
+
return true
|
|
111
|
+
}
|
|
112
|
+
if (name === 'contentId') {
|
|
113
|
+
contentId.value = value as never
|
|
114
|
+
return true
|
|
115
|
+
}
|
|
116
|
+
throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
|
|
65
117
|
}
|
|
66
118
|
|
|
67
|
-
const stops: Array<() => void> = []
|
|
119
|
+
const stops: Array<() => void> = []
|
|
68
120
|
const host = {
|
|
69
|
-
get element(): Element {
|
|
121
|
+
get element(): Element {
|
|
122
|
+
return root.value as Element
|
|
123
|
+
},
|
|
70
124
|
state: new Proxy({} as Record<string, unknown>, {
|
|
71
|
-
get: (_target, name) => typeof name ===
|
|
72
|
-
set: (_target, name, value) => typeof name ===
|
|
125
|
+
get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
|
|
126
|
+
set: (_target, name, value) => typeof name === 'string' && write(name, value),
|
|
73
127
|
}),
|
|
74
|
-
refs:
|
|
128
|
+
refs: {
|
|
129
|
+
get trigger(): Element {
|
|
130
|
+
return triggerElement.value as Element
|
|
131
|
+
},
|
|
132
|
+
} as Readonly<Record<string, Element>>,
|
|
75
133
|
elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
|
|
76
134
|
get: (_target, name) => {
|
|
77
|
-
if (typeof name !==
|
|
78
|
-
const form = root.value instanceof HTMLFormElement
|
|
79
|
-
|
|
135
|
+
if (typeof name !== 'string' || root.value === null) return undefined
|
|
136
|
+
const form = root.value instanceof HTMLFormElement
|
|
137
|
+
? root.value
|
|
138
|
+
: root.value.querySelector('form')
|
|
139
|
+
return form?.elements.namedItem(name)
|
|
140
|
+
?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
|
|
80
141
|
},
|
|
81
142
|
}),
|
|
82
143
|
signal<T>(initialValue: T) {
|
|
83
|
-
const value = shallowRef(initialValue)
|
|
144
|
+
const value = shallowRef(initialValue)
|
|
84
145
|
return {
|
|
85
146
|
get: (): T => value.value,
|
|
86
|
-
set: (next: T): void => {
|
|
87
|
-
|
|
88
|
-
|
|
147
|
+
set: (next: T): void => {
|
|
148
|
+
if (!Object.is(value.value, next)) value.value = next
|
|
149
|
+
},
|
|
150
|
+
update: (next: (current: T) => T): void => {
|
|
151
|
+
const updated = next(value.value)
|
|
152
|
+
if (!Object.is(value.value, updated)) value.value = updated
|
|
153
|
+
},
|
|
154
|
+
}
|
|
89
155
|
},
|
|
90
156
|
computed<T>(compute: () => T) {
|
|
91
|
-
const value = computed(compute)
|
|
92
|
-
return { get: (): T => value.value }
|
|
157
|
+
const value = computed(compute)
|
|
158
|
+
return { get: (): T => value.value }
|
|
93
159
|
},
|
|
94
160
|
effect(run: () => void | (() => void)): () => void {
|
|
95
161
|
const stop = watchEffect((onCleanup) => {
|
|
96
|
-
const cleanup = run()
|
|
97
|
-
if (typeof cleanup ===
|
|
98
|
-
}, { flush:
|
|
99
|
-
stops.push(stop)
|
|
100
|
-
return stop
|
|
162
|
+
const cleanup = run()
|
|
163
|
+
if (typeof cleanup === 'function') onCleanup(cleanup)
|
|
164
|
+
}, { flush: 'post' })
|
|
165
|
+
stops.push(stop)
|
|
166
|
+
return stop
|
|
101
167
|
},
|
|
102
168
|
on(event: string, listener: EventListener): () => void {
|
|
103
|
-
const element = root.value
|
|
104
|
-
element?.addEventListener(event, listener)
|
|
105
|
-
const off = (): void => element?.removeEventListener(event, listener)
|
|
106
|
-
stops.push(off)
|
|
107
|
-
return off
|
|
169
|
+
const element = root.value
|
|
170
|
+
element?.addEventListener(event, listener)
|
|
171
|
+
const off = (): void => element?.removeEventListener(event, listener)
|
|
172
|
+
stops.push(off)
|
|
173
|
+
return off
|
|
108
174
|
},
|
|
109
175
|
dispatch,
|
|
110
|
-
}
|
|
176
|
+
}
|
|
111
177
|
|
|
112
|
-
let cleanup: void | (() => void)
|
|
113
|
-
let ready: Promise<void> | undefined
|
|
178
|
+
let cleanup: void | (() => void)
|
|
179
|
+
let ready: Promise<void> | undefined
|
|
114
180
|
onMounted(() => {
|
|
115
|
-
ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
|
|
116
|
-
|
|
181
|
+
ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
|
|
182
|
+
cleanup = result
|
|
183
|
+
})
|
|
184
|
+
})
|
|
117
185
|
onBeforeUnmount(() => {
|
|
118
|
-
for (const stop of stops.splice(0)) stop()
|
|
119
|
-
if (typeof cleanup ===
|
|
120
|
-
})
|
|
186
|
+
for (const stop of stops.splice(0)) stop()
|
|
187
|
+
if (typeof cleanup === 'function') cleanup()
|
|
188
|
+
})
|
|
121
189
|
</script>
|
|
122
190
|
|
|
123
191
|
<template>
|
|
124
|
-
<div
|
|
192
|
+
<div
|
|
193
|
+
data-component="ui-disclosure"
|
|
194
|
+
v-bind="$attrs"
|
|
195
|
+
:data-ui-disclosure-state="hostState || undefined"
|
|
196
|
+
ref="root"
|
|
197
|
+
>
|
|
198
|
+
<button
|
|
199
|
+
class="trigger"
|
|
200
|
+
type="button"
|
|
201
|
+
:aria-controls="contentId"
|
|
202
|
+
:aria-expanded="internalOpen"
|
|
203
|
+
:disabled="disabled"
|
|
204
|
+
ref="trigger"
|
|
205
|
+
>
|
|
206
|
+
<span>{{ summary }}</span>
|
|
207
|
+
<span class="chevron" aria-hidden="true"></span>
|
|
208
|
+
</button>
|
|
209
|
+
<div class="panel" :id="contentId" :inert="!internalOpen">
|
|
210
|
+
<div class="panel-inner"><slot /></div>
|
|
211
|
+
</div>
|
|
212
|
+
</div>
|
|
125
213
|
</template>
|
|
126
214
|
|
|
127
215
|
<style scoped>
|
|
128
216
|
/* An accordion row, not a field: no enclosing box, just a divider, so it never reads as a
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
217
|
+
* select or combobox. Stacked disclosures share their dividers. */
|
|
218
|
+
[data-component~="ui-disclosure"] {
|
|
219
|
+
display: block;
|
|
220
|
+
inline-size: 100%;
|
|
221
|
+
overflow: clip;
|
|
222
|
+
border-block-end: 1px solid var(--ui-border-default);
|
|
223
|
+
color: var(--ui-text-primary);
|
|
224
|
+
}
|
|
137
225
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
226
|
+
.trigger {
|
|
227
|
+
display: grid;
|
|
228
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
229
|
+
gap: var(--ui-space-3);
|
|
230
|
+
align-items: center;
|
|
231
|
+
inline-size: 100%;
|
|
232
|
+
min-block-size: 2.5rem;
|
|
233
|
+
padding: var(--ui-space-2) var(--ui-space-3);
|
|
234
|
+
border: 0;
|
|
235
|
+
background: transparent;
|
|
236
|
+
color: inherit;
|
|
237
|
+
font: inherit;
|
|
238
|
+
font-weight: var(--ui-font-semibold, 600);
|
|
239
|
+
text-align: start;
|
|
240
|
+
cursor: pointer;
|
|
241
|
+
border-radius: var(--ui-radius-1);
|
|
242
|
+
transition: background-color var(--ui-motion-fast) var(--ui-motion-ease);
|
|
243
|
+
}
|
|
156
244
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
245
|
+
.trigger:hover:not(:disabled) {
|
|
246
|
+
background: var(--ui-surface-muted);
|
|
247
|
+
}
|
|
248
|
+
.trigger:focus-visible {
|
|
249
|
+
outline: none;
|
|
250
|
+
box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
|
|
251
|
+
}
|
|
252
|
+
.trigger:disabled {
|
|
253
|
+
color: var(--ui-text-muted);
|
|
254
|
+
cursor: not-allowed;
|
|
255
|
+
}
|
|
168
256
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
257
|
+
.chevron {
|
|
258
|
+
inline-size: 0.5rem;
|
|
259
|
+
block-size: 0.5rem;
|
|
260
|
+
border-inline-end: 2px solid currentColor;
|
|
261
|
+
border-block-end: 2px solid currentColor;
|
|
262
|
+
transform: rotate(45deg) translate(-1px, -1px);
|
|
263
|
+
transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
|
|
264
|
+
}
|
|
177
265
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
266
|
+
.panel {
|
|
267
|
+
display: grid;
|
|
268
|
+
grid-template-rows: 0fr;
|
|
269
|
+
transition: grid-template-rows var(--ui-motion-fast)
|
|
270
|
+
var(--ui-motion-ease-out, var(--ui-motion-ease));
|
|
271
|
+
}
|
|
183
272
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
273
|
+
.panel-inner {
|
|
274
|
+
min-block-size: 0;
|
|
275
|
+
overflow: hidden;
|
|
276
|
+
padding-inline: var(--ui-space-3);
|
|
277
|
+
}
|
|
189
278
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
279
|
+
[data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel {
|
|
280
|
+
grid-template-rows: 1fr;
|
|
281
|
+
}
|
|
282
|
+
[data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel-inner {
|
|
283
|
+
padding-block: 0 var(--ui-space-3);
|
|
284
|
+
}
|
|
285
|
+
[data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .chevron {
|
|
286
|
+
transform: rotate(225deg) translate(-1px, -1px);
|
|
287
|
+
}
|
|
199
288
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
289
|
+
@media (prefers-reduced-motion: reduce) {
|
|
290
|
+
.panel,
|
|
291
|
+
.chevron {
|
|
292
|
+
transition: none;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
206
295
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
296
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
297
|
+
[data-component~="ui-disclosure"][hidden] {
|
|
298
|
+
display: none;
|
|
299
|
+
}
|
|
211
300
|
</style>
|
package/vue/UiEditable.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
|
-
actions?: boolean
|
|
3
|
-
disabled?: boolean
|
|
4
|
-
edit?: boolean
|
|
5
|
-
hint?: string
|
|
6
|
-
label?: string
|
|
7
|
-
value?: string
|
|
2
|
+
actions?: boolean;
|
|
3
|
+
disabled?: boolean;
|
|
4
|
+
edit?: boolean;
|
|
5
|
+
hint?: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
value?: string;
|
|
8
8
|
};
|
|
9
9
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
10
10
|
input: (detail: {
|
|
@@ -16,6 +16,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
|
|
|
16
16
|
readonly previousValue: string;
|
|
17
17
|
readonly trigger: "keyboard" | "pointer" | "programmatic";
|
|
18
18
|
}) => any;
|
|
19
|
+
"update:value": (value: string) => any;
|
|
20
|
+
"update:edit": (value: boolean) => any;
|
|
19
21
|
"edit-change": (detail: {
|
|
20
22
|
readonly edit: boolean;
|
|
21
23
|
readonly reason: "activate" | "commit" | "cancel" | "light-dismiss" | "escape" | "programmatic";
|
|
@@ -31,18 +33,20 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
|
|
|
31
33
|
readonly previousValue: string;
|
|
32
34
|
readonly trigger: "keyboard" | "pointer" | "programmatic";
|
|
33
35
|
}) => any) | undefined;
|
|
36
|
+
"onUpdate:value"?: ((value: string) => any) | undefined;
|
|
37
|
+
"onUpdate:edit"?: ((value: boolean) => any) | undefined;
|
|
34
38
|
"onEdit-change"?: ((detail: {
|
|
35
39
|
readonly edit: boolean;
|
|
36
40
|
readonly reason: "activate" | "commit" | "cancel" | "light-dismiss" | "escape" | "programmatic";
|
|
37
41
|
readonly trigger: "keyboard" | "pointer" | "programmatic";
|
|
38
42
|
}) => any) | undefined;
|
|
39
43
|
}>, {
|
|
40
|
-
label: string
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
actions: boolean
|
|
44
|
-
edit: boolean
|
|
45
|
-
hint: string
|
|
44
|
+
label: string;
|
|
45
|
+
value: string;
|
|
46
|
+
disabled: boolean;
|
|
47
|
+
actions: boolean;
|
|
48
|
+
edit: boolean;
|
|
49
|
+
hint: string;
|
|
46
50
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
47
51
|
declare const _default: typeof __VLS_export;
|
|
48
52
|
export default _default;
|