@threadlabs/looma 0.6.4 → 0.6.5
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/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 +1 -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 +1 -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 +1 -1
- package/styles/ui-grid.css +1 -1
- package/styles/ui-icon-button.css +1 -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 +1 -1
- 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 +1 -1
- package/styles/ui-tree.css +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/UiButton.d.ts +1 -1
- package/vanilla/UiButton.js +1 -1
- package/vanilla/UiCallout.d.ts +1 -1
- package/vanilla/UiCallout.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 +1 -1
- 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/UiDialog.d.ts +1 -1
- package/vanilla/UiDialog.js +1 -1
- package/vanilla/UiDisclosure.d.ts +1 -1
- package/vanilla/UiDisclosure.js +1 -1
- package/vanilla/UiEditable.d.ts +1 -1
- package/vanilla/UiEditable.js +1 -1
- package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
- package/vanilla/UiEditorInsertTableGrid.js +1 -1
- package/vanilla/UiEditorMentionMenu.d.ts +1 -1
- package/vanilla/UiEditorMentionMenu.js +1 -1
- package/vanilla/UiEditorSlashMenu.d.ts +1 -1
- package/vanilla/UiEditorSlashMenu.js +1 -1
- package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
- package/vanilla/UiEditorTableContextMenu.js +1 -1
- package/vanilla/UiEditorTableOverlay.d.ts +1 -1
- package/vanilla/UiEditorTableOverlay.js +1 -1
- package/vanilla/UiEditorTableToolbar.d.ts +1 -1
- package/vanilla/UiEditorTableToolbar.js +1 -1
- 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 +1 -1
- package/vanilla/UiIconButton.d.ts +1 -1
- package/vanilla/UiIconButton.js +1 -1
- package/vanilla/UiInput.d.ts +1 -1
- package/vanilla/UiInput.js +1 -1
- package/vanilla/UiMenu.d.ts +1 -1
- package/vanilla/UiMenu.js +1 -1
- package/vanilla/UiMenuItem.d.ts +1 -1
- package/vanilla/UiMenuItem.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/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/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/UiStack.d.ts +1 -1
- package/vanilla/UiStack.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/UiTabs.d.ts +1 -1
- package/vanilla/UiTabs.js +1 -1
- package/vanilla/UiTextarea.d.ts +1 -1
- package/vanilla/UiTextarea.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 +1 -1
- package/vue/UiAffordanceScope.vue +8 -84
- package/vue/UiAvatar.d.ts +1 -1
- package/vue/UiAvatar.vue +9 -106
- package/vue/UiAvatarGroup.vue +9 -96
- package/vue/UiBadge.vue +1 -1
- package/vue/UiButton.vue +1 -1
- package/vue/UiCallout.vue +1 -1
- package/vue/UiCheckbox.vue +22 -123
- package/vue/UiCluster.vue +1 -1
- package/vue/UiCombobox.d.ts +1 -1
- package/vue/UiCombobox.vue +224 -475
- package/vue/UiContainer.vue +1 -1
- package/vue/UiContextMenu.vue +34 -141
- package/vue/UiDialog.vue +25 -126
- package/vue/UiDisclosure.vue +26 -138
- package/vue/UiEditable.vue +46 -158
- package/vue/UiEditorInsertTableGrid.vue +19 -138
- package/vue/UiEditorMentionMenu.vue +17 -124
- package/vue/UiEditorSlashMenu.vue +17 -109
- package/vue/UiEditorTableContextMenu.vue +34 -122
- package/vue/UiEditorTableOverlay.vue +61 -167
- package/vue/UiEditorTableToolbar.vue +34 -142
- package/vue/UiEditorToolbar.vue +1 -1
- package/vue/UiFloatingActionButton.vue +1 -1
- package/vue/UiFormField.vue +7 -79
- package/vue/UiGrid.vue +1 -1
- package/vue/UiIcon.vue +8 -84
- package/vue/UiIconButton.vue +7 -79
- package/vue/UiInput.vue +7 -79
- package/vue/UiMenu.vue +42 -127
- package/vue/UiMenuItem.vue +1 -1
- package/vue/UiPopover.vue +25 -121
- package/vue/UiRadio.vue +22 -123
- package/vue/UiRadioGroup.d.ts +1 -1
- package/vue/UiRadioGroup.vue +32 -119
- package/vue/UiReel.vue +1 -1
- package/vue/UiSearchResultRow.vue +1 -1
- package/vue/UiSearchShell.vue +25 -121
- package/vue/UiSelect.vue +7 -79
- package/vue/UiSeparator.vue +1 -1
- package/vue/UiSidebar.vue +32 -133
- package/vue/UiStack.vue +1 -1
- package/vue/UiSwitch.vue +22 -123
- package/vue/UiSwitcher.vue +1 -1
- package/vue/UiTabs.vue +24 -128
- package/vue/UiTextarea.vue +7 -79
- package/vue/UiToastRegion.vue +37 -126
- package/vue/UiTooltip.vue +25 -124
- package/vue/UiTopBar.vue +1 -1
- package/vue/UiTree.vue +56 -137
- package/vue/UiTreeItem.vue +28 -144
- package/vue/chunks/UiAffordanceScope.js +9 -78
- package/vue/chunks/UiAvatar.js +13 -89
- package/vue/chunks/UiAvatarGroup.js +10 -80
- package/vue/chunks/UiBadge.js +1 -1
- package/vue/chunks/UiButton.js +1 -1
- package/vue/chunks/UiCallout.js +1 -1
- package/vue/chunks/UiCheckbox.js +17 -95
- package/vue/chunks/UiCluster.js +1 -1
- package/vue/chunks/UiCombobox.js +114 -325
- package/vue/chunks/UiContainer.js +1 -1
- package/vue/chunks/UiContextMenu.js +21 -113
- package/vue/chunks/UiDialog.js +20 -99
- package/vue/chunks/UiDisclosure.js +22 -112
- package/vue/chunks/UiEditable.js +32 -128
- package/vue/chunks/UiEditorInsertTableGrid.js +22 -116
- package/vue/chunks/UiEditorMentionMenu.js +18 -116
- package/vue/chunks/UiEditorSlashMenu.js +15 -101
- package/vue/chunks/UiEditorTableContextMenu.js +12 -91
- package/vue/chunks/UiEditorTableOverlay.js +29 -120
- package/vue/chunks/UiEditorTableToolbar.js +16 -111
- package/vue/chunks/UiEditorToolbar.js +1 -1
- package/vue/chunks/UiFloatingActionButton.js +1 -1
- package/vue/chunks/UiFormField.js +8 -73
- package/vue/chunks/UiGrid.js +1 -1
- package/vue/chunks/UiIcon.js +9 -78
- package/vue/chunks/UiIconButton.js +8 -73
- package/vue/chunks/UiInput.js +8 -73
- package/vue/chunks/UiMenu.js +25 -111
- package/vue/chunks/UiMenuItem.js +1 -1
- package/vue/chunks/UiPopover.js +18 -105
- package/vue/chunks/UiRadio.js +17 -95
- package/vue/chunks/UiRadioGroup.js +23 -105
- package/vue/chunks/UiReel.js +1 -1
- package/vue/chunks/UiSearchResultRow.js +1 -1
- package/vue/chunks/UiSearchShell.js +17 -94
- package/vue/chunks/UiSelect.js +8 -73
- package/vue/chunks/UiSeparator.js +1 -1
- package/vue/chunks/UiSidebar.js +23 -108
- package/vue/chunks/UiStack.js +1 -1
- package/vue/chunks/UiSwitch.js +17 -95
- package/vue/chunks/UiSwitcher.js +1 -1
- package/vue/chunks/UiTabs.js +22 -103
- package/vue/chunks/UiTextarea.js +8 -73
- package/vue/chunks/UiToastRegion.js +27 -112
- package/vue/chunks/UiTooltip.js +18 -106
- package/vue/chunks/UiTopBar.js +1 -1
- package/vue/chunks/UiTree.js +31 -109
- package/vue/chunks/UiTreeItem.js +29 -119
- package/vue/chunks/host.js +101 -0
- package/vue/components.css +706 -706
- package/vue/host.ts +154 -0
package/vue/UiAvatar.vue
CHANGED
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
<!-- Generated by HTML Next 1.0.0-alpha.
|
|
1
|
+
<!-- Generated by HTML Next 1.0.0-alpha.3 for Vue 3.5. Do not edit. -->
|
|
2
2
|
<script setup lang="ts">
|
|
3
|
-
import {
|
|
4
|
-
computed,
|
|
5
|
-
onBeforeUnmount,
|
|
6
|
-
onMounted,
|
|
7
|
-
ref,
|
|
8
|
-
shallowRef,
|
|
9
|
-
useTemplateRef,
|
|
10
|
-
watchEffect,
|
|
11
|
-
} from 'vue'
|
|
3
|
+
import { ref, useTemplateRef } from 'vue'
|
|
12
4
|
import * as controllerModule from '../components/ui-avatar/ui-avatar.js'
|
|
5
|
+
import { createDispatch, useComponentHost } from './host'
|
|
13
6
|
|
|
14
7
|
defineOptions({ inheritAttrs: false })
|
|
15
8
|
|
|
@@ -33,104 +26,14 @@ const hasImage = ref(false)
|
|
|
33
26
|
const hasAuthoredImage = ref(false)
|
|
34
27
|
const initials = ref('?')
|
|
35
28
|
|
|
36
|
-
|
|
37
|
-
function dispatch(name: string, detail?: unknown): boolean {
|
|
38
|
-
return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail }))
|
|
39
|
-
?? true
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function read(name: string): unknown {
|
|
43
|
-
if (name === 'hasImage') return hasImage.value
|
|
44
|
-
if (name === 'hasAuthoredImage') return hasAuthoredImage.value
|
|
45
|
-
if (name === 'initials') return initials.value
|
|
46
|
-
return (props as Record<string, unknown>)[name]
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function write(name: string, value: unknown): boolean {
|
|
50
|
-
if (name === 'hasImage') {
|
|
51
|
-
hasImage.value = value as never
|
|
52
|
-
return true
|
|
53
|
-
}
|
|
54
|
-
if (name === 'hasAuthoredImage') {
|
|
55
|
-
hasAuthoredImage.value = value as never
|
|
56
|
-
return true
|
|
57
|
-
}
|
|
58
|
-
if (name === 'initials') {
|
|
59
|
-
initials.value = value as never
|
|
60
|
-
return true
|
|
61
|
-
}
|
|
62
|
-
throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
|
|
63
|
-
}
|
|
29
|
+
const dispatch = createDispatch(root)
|
|
64
30
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
get element(): Element {
|
|
68
|
-
return root.value as Element
|
|
69
|
-
},
|
|
70
|
-
state: new Proxy({} as Record<string, unknown>, {
|
|
71
|
-
get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
|
|
72
|
-
set: (_target, name, value) => typeof name === 'string' && write(name, value),
|
|
73
|
-
}),
|
|
74
|
-
refs: {
|
|
75
|
-
get image(): Element {
|
|
76
|
-
return imageElement.value as Element
|
|
77
|
-
},
|
|
78
|
-
} as Readonly<Record<string, Element>>,
|
|
79
|
-
elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
|
|
80
|
-
get: (_target, name) => {
|
|
81
|
-
if (typeof name !== 'string' || root.value === null) return undefined
|
|
82
|
-
const form = root.value instanceof HTMLFormElement
|
|
83
|
-
? root.value
|
|
84
|
-
: root.value.querySelector('form')
|
|
85
|
-
return form?.elements.namedItem(name)
|
|
86
|
-
?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
|
|
87
|
-
},
|
|
88
|
-
}),
|
|
89
|
-
signal<T>(initialValue: T) {
|
|
90
|
-
const value = shallowRef(initialValue)
|
|
91
|
-
return {
|
|
92
|
-
get: (): T => value.value,
|
|
93
|
-
set: (next: T): void => {
|
|
94
|
-
if (!Object.is(value.value, next)) value.value = next
|
|
95
|
-
},
|
|
96
|
-
update: (next: (current: T) => T): void => {
|
|
97
|
-
const updated = next(value.value)
|
|
98
|
-
if (!Object.is(value.value, updated)) value.value = updated
|
|
99
|
-
},
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
computed<T>(compute: () => T) {
|
|
103
|
-
const value = computed(compute)
|
|
104
|
-
return { get: (): T => value.value }
|
|
105
|
-
},
|
|
106
|
-
effect(run: () => void | (() => void)): () => void {
|
|
107
|
-
const stop = watchEffect((onCleanup) => {
|
|
108
|
-
const cleanup = run()
|
|
109
|
-
if (typeof cleanup === 'function') onCleanup(cleanup)
|
|
110
|
-
}, { flush: 'post' })
|
|
111
|
-
stops.push(stop)
|
|
112
|
-
return stop
|
|
113
|
-
},
|
|
114
|
-
on(event: string, listener: EventListener): () => void {
|
|
115
|
-
const element = root.value
|
|
116
|
-
element?.addEventListener(event, listener)
|
|
117
|
-
const off = (): void => element?.removeEventListener(event, listener)
|
|
118
|
-
stops.push(off)
|
|
119
|
-
return off
|
|
120
|
-
},
|
|
31
|
+
useComponentHost(controllerModule.default, {
|
|
32
|
+
root,
|
|
121
33
|
dispatch,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
let ready: Promise<void> | undefined
|
|
126
|
-
onMounted(() => {
|
|
127
|
-
ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
|
|
128
|
-
cleanup = result
|
|
129
|
-
})
|
|
130
|
-
})
|
|
131
|
-
onBeforeUnmount(() => {
|
|
132
|
-
for (const stop of stops.splice(0)) stop()
|
|
133
|
-
if (typeof cleanup === 'function') cleanup()
|
|
34
|
+
props,
|
|
35
|
+
refs: { image: imageElement },
|
|
36
|
+
state: { hasImage, hasAuthoredImage, initials },
|
|
134
37
|
})
|
|
135
38
|
</script>
|
|
136
39
|
|
package/vue/UiAvatarGroup.vue
CHANGED
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
<!-- Generated by HTML Next 1.0.0-alpha.
|
|
1
|
+
<!-- Generated by HTML Next 1.0.0-alpha.3 for Vue 3.5. Do not edit. -->
|
|
2
2
|
<script setup lang="ts">
|
|
3
|
-
import {
|
|
4
|
-
computed,
|
|
5
|
-
onBeforeUnmount,
|
|
6
|
-
onMounted,
|
|
7
|
-
ref,
|
|
8
|
-
shallowRef,
|
|
9
|
-
useTemplateRef,
|
|
10
|
-
watchEffect,
|
|
11
|
-
} from 'vue'
|
|
3
|
+
import { ref, useTemplateRef } from 'vue'
|
|
12
4
|
import * as controllerModule from '../components/ui-avatar-group/ui-avatar-group.js'
|
|
5
|
+
import { createDispatch, useComponentHost } from './host'
|
|
13
6
|
|
|
14
7
|
defineOptions({ inheritAttrs: false })
|
|
15
8
|
|
|
@@ -28,94 +21,14 @@ const root = ref<HTMLElement | null>(null)
|
|
|
28
21
|
const overflowElement = useTemplateRef<HTMLElement>('overflow')
|
|
29
22
|
const overflowCount = ref(0)
|
|
30
23
|
|
|
31
|
-
|
|
32
|
-
function dispatch(name: string, detail?: unknown): boolean {
|
|
33
|
-
return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail }))
|
|
34
|
-
?? true
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function read(name: string): unknown {
|
|
38
|
-
if (name === 'overflowCount') return overflowCount.value
|
|
39
|
-
return (props as Record<string, unknown>)[name]
|
|
40
|
-
}
|
|
24
|
+
const dispatch = createDispatch(root)
|
|
41
25
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
overflowCount.value = value as never
|
|
45
|
-
return true
|
|
46
|
-
}
|
|
47
|
-
throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const stops: Array<() => void> = []
|
|
51
|
-
const host = {
|
|
52
|
-
get element(): Element {
|
|
53
|
-
return root.value as Element
|
|
54
|
-
},
|
|
55
|
-
state: new Proxy({} as Record<string, unknown>, {
|
|
56
|
-
get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
|
|
57
|
-
set: (_target, name, value) => typeof name === 'string' && write(name, value),
|
|
58
|
-
}),
|
|
59
|
-
refs: {
|
|
60
|
-
get overflow(): Element {
|
|
61
|
-
return overflowElement.value as Element
|
|
62
|
-
},
|
|
63
|
-
} as Readonly<Record<string, Element>>,
|
|
64
|
-
elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
|
|
65
|
-
get: (_target, name) => {
|
|
66
|
-
if (typeof name !== 'string' || root.value === null) return undefined
|
|
67
|
-
const form = root.value instanceof HTMLFormElement
|
|
68
|
-
? root.value
|
|
69
|
-
: root.value.querySelector('form')
|
|
70
|
-
return form?.elements.namedItem(name)
|
|
71
|
-
?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
|
|
72
|
-
},
|
|
73
|
-
}),
|
|
74
|
-
signal<T>(initialValue: T) {
|
|
75
|
-
const value = shallowRef(initialValue)
|
|
76
|
-
return {
|
|
77
|
-
get: (): T => value.value,
|
|
78
|
-
set: (next: T): void => {
|
|
79
|
-
if (!Object.is(value.value, next)) value.value = next
|
|
80
|
-
},
|
|
81
|
-
update: (next: (current: T) => T): void => {
|
|
82
|
-
const updated = next(value.value)
|
|
83
|
-
if (!Object.is(value.value, updated)) value.value = updated
|
|
84
|
-
},
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
computed<T>(compute: () => T) {
|
|
88
|
-
const value = computed(compute)
|
|
89
|
-
return { get: (): T => value.value }
|
|
90
|
-
},
|
|
91
|
-
effect(run: () => void | (() => void)): () => void {
|
|
92
|
-
const stop = watchEffect((onCleanup) => {
|
|
93
|
-
const cleanup = run()
|
|
94
|
-
if (typeof cleanup === 'function') onCleanup(cleanup)
|
|
95
|
-
}, { flush: 'post' })
|
|
96
|
-
stops.push(stop)
|
|
97
|
-
return stop
|
|
98
|
-
},
|
|
99
|
-
on(event: string, listener: EventListener): () => void {
|
|
100
|
-
const element = root.value
|
|
101
|
-
element?.addEventListener(event, listener)
|
|
102
|
-
const off = (): void => element?.removeEventListener(event, listener)
|
|
103
|
-
stops.push(off)
|
|
104
|
-
return off
|
|
105
|
-
},
|
|
26
|
+
useComponentHost(controllerModule.default, {
|
|
27
|
+
root,
|
|
106
28
|
dispatch,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
let ready: Promise<void> | undefined
|
|
111
|
-
onMounted(() => {
|
|
112
|
-
ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
|
|
113
|
-
cleanup = result
|
|
114
|
-
})
|
|
115
|
-
})
|
|
116
|
-
onBeforeUnmount(() => {
|
|
117
|
-
for (const stop of stops.splice(0)) stop()
|
|
118
|
-
if (typeof cleanup === 'function') cleanup()
|
|
29
|
+
props,
|
|
30
|
+
refs: { overflow: overflowElement },
|
|
31
|
+
state: { overflowCount },
|
|
119
32
|
})
|
|
120
33
|
</script>
|
|
121
34
|
|
package/vue/UiBadge.vue
CHANGED
package/vue/UiButton.vue
CHANGED
package/vue/UiCallout.vue
CHANGED
package/vue/UiCheckbox.vue
CHANGED
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
<!-- Generated by HTML Next 1.0.0-alpha.
|
|
1
|
+
<!-- Generated by HTML Next 1.0.0-alpha.3 for Vue 3.5. Do not edit. -->
|
|
2
2
|
<script setup lang="ts">
|
|
3
|
-
import {
|
|
4
|
-
computed,
|
|
5
|
-
onBeforeUnmount,
|
|
6
|
-
onMounted,
|
|
7
|
-
ref,
|
|
8
|
-
shallowRef,
|
|
9
|
-
useTemplateRef,
|
|
10
|
-
watchEffect,
|
|
11
|
-
} from 'vue'
|
|
3
|
+
import { computed, ref, useTemplateRef } from 'vue'
|
|
12
4
|
import * as controllerModule from '../components/ui-checkbox/ui-checkbox.js'
|
|
5
|
+
import { createDispatch, useComponentHost } from './host'
|
|
13
6
|
|
|
14
7
|
defineOptions({ inheritAttrs: false })
|
|
15
8
|
|
|
@@ -52,121 +45,27 @@ const hostState = computed(() =>
|
|
|
52
45
|
].filter(Boolean).join(' ')
|
|
53
46
|
)
|
|
54
47
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|| (detail as Record<string, unknown>)['trigger'] === 'pointer'
|
|
67
|
-
|| (detail as Record<string, unknown>)['trigger'] === 'programmatic')
|
|
68
|
-
&& Object.keys(detail as object).every((key) =>
|
|
69
|
-
['checked', 'value', 'trigger'].includes(key)
|
|
70
|
-
),
|
|
71
|
-
}
|
|
72
|
-
if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
|
|
73
|
-
throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
|
|
74
|
-
}
|
|
75
|
-
const emitEvent = emit as (name: string, detail: unknown) => void
|
|
76
|
-
emitEvent(name, detail)
|
|
77
|
-
if (detail !== null && typeof detail === 'object' && 'checked' in detail) {
|
|
78
|
-
emitEvent('update:checked', (detail as Record<string, unknown>)['checked'])
|
|
79
|
-
}
|
|
80
|
-
if (detail !== null && typeof detail === 'object' && 'value' in detail) {
|
|
81
|
-
emitEvent('update:value', (detail as Record<string, unknown>)['value'])
|
|
82
|
-
}
|
|
83
|
-
return root.value?.dispatchEvent(
|
|
84
|
-
new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
|
|
85
|
-
) ?? true
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function read(name: string): unknown {
|
|
89
|
-
if (name === 'internalChecked') return internalChecked.value
|
|
90
|
-
return (props as Record<string, unknown>)[name]
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function write(name: string, value: unknown): boolean {
|
|
94
|
-
if (name === 'internalChecked') {
|
|
95
|
-
internalChecked.value = value as never
|
|
96
|
-
return true
|
|
97
|
-
}
|
|
98
|
-
throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const stops: Array<() => void> = []
|
|
102
|
-
const host = {
|
|
103
|
-
get element(): Element {
|
|
104
|
-
return root.value as Element
|
|
105
|
-
},
|
|
106
|
-
state: new Proxy({} as Record<string, unknown>, {
|
|
107
|
-
get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
|
|
108
|
-
set: (_target, name, value) => typeof name === 'string' && write(name, value),
|
|
109
|
-
}),
|
|
110
|
-
refs: {
|
|
111
|
-
get input(): Element {
|
|
112
|
-
return inputElement.value as Element
|
|
113
|
-
},
|
|
114
|
-
} as Readonly<Record<string, Element>>,
|
|
115
|
-
elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
|
|
116
|
-
get: (_target, name) => {
|
|
117
|
-
if (typeof name !== 'string' || root.value === null) return undefined
|
|
118
|
-
const form = root.value instanceof HTMLFormElement
|
|
119
|
-
? root.value
|
|
120
|
-
: root.value.querySelector('form')
|
|
121
|
-
return form?.elements.namedItem(name)
|
|
122
|
-
?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
|
|
123
|
-
},
|
|
124
|
-
}),
|
|
125
|
-
signal<T>(initialValue: T) {
|
|
126
|
-
const value = shallowRef(initialValue)
|
|
127
|
-
return {
|
|
128
|
-
get: (): T => value.value,
|
|
129
|
-
set: (next: T): void => {
|
|
130
|
-
if (!Object.is(value.value, next)) value.value = next
|
|
131
|
-
},
|
|
132
|
-
update: (next: (current: T) => T): void => {
|
|
133
|
-
const updated = next(value.value)
|
|
134
|
-
if (!Object.is(value.value, updated)) value.value = updated
|
|
135
|
-
},
|
|
136
|
-
}
|
|
48
|
+
const isChangeDetail = (detail: unknown): boolean =>
|
|
49
|
+
detail !== null && typeof detail === 'object' && !Array.isArray(detail)
|
|
50
|
+
&& typeof (detail as Record<string, unknown>)['checked'] === 'boolean'
|
|
51
|
+
&& typeof (detail as Record<string, unknown>)['value'] === 'string'
|
|
52
|
+
&& ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
|
|
53
|
+
|| (detail as Record<string, unknown>)['trigger'] === 'pointer'
|
|
54
|
+
|| (detail as Record<string, unknown>)['trigger'] === 'programmatic')
|
|
55
|
+
&& Object.keys(detail as object).every((key) => ['checked', 'value', 'trigger'].includes(key))
|
|
56
|
+
const dispatch = createDispatch(root, emit as (name: string, detail: unknown) => void, {
|
|
57
|
+
checks: {
|
|
58
|
+
change: isChangeDetail,
|
|
137
59
|
},
|
|
138
|
-
|
|
139
|
-
const value = computed(compute)
|
|
140
|
-
return { get: (): T => value.value }
|
|
141
|
-
},
|
|
142
|
-
effect(run: () => void | (() => void)): () => void {
|
|
143
|
-
const stop = watchEffect((onCleanup) => {
|
|
144
|
-
const cleanup = run()
|
|
145
|
-
if (typeof cleanup === 'function') onCleanup(cleanup)
|
|
146
|
-
}, { flush: 'post' })
|
|
147
|
-
stops.push(stop)
|
|
148
|
-
return stop
|
|
149
|
-
},
|
|
150
|
-
on(event: string, listener: EventListener): () => void {
|
|
151
|
-
const element = root.value
|
|
152
|
-
element?.addEventListener(event, listener)
|
|
153
|
-
const off = (): void => element?.removeEventListener(event, listener)
|
|
154
|
-
stops.push(off)
|
|
155
|
-
return off
|
|
156
|
-
},
|
|
157
|
-
dispatch,
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
let cleanup: void | (() => void)
|
|
161
|
-
let ready: Promise<void> | undefined
|
|
162
|
-
onMounted(() => {
|
|
163
|
-
ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
|
|
164
|
-
cleanup = result
|
|
165
|
-
})
|
|
60
|
+
modeled: ['checked', 'value'],
|
|
166
61
|
})
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
62
|
+
|
|
63
|
+
useComponentHost(controllerModule.default, {
|
|
64
|
+
root,
|
|
65
|
+
dispatch,
|
|
66
|
+
props,
|
|
67
|
+
refs: { input: inputElement },
|
|
68
|
+
state: { internalChecked },
|
|
170
69
|
})
|
|
171
70
|
</script>
|
|
172
71
|
|
package/vue/UiCluster.vue
CHANGED
package/vue/UiCombobox.d.ts
CHANGED
|
@@ -234,8 +234,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
|
234
234
|
readonly trigger: "keyboard" | "pointer" | "programmatic";
|
|
235
235
|
}) => any) | undefined;
|
|
236
236
|
}>, {
|
|
237
|
-
label: string;
|
|
238
237
|
name: string;
|
|
238
|
+
label: string;
|
|
239
239
|
disabled: boolean;
|
|
240
240
|
size: "sm" | "md";
|
|
241
241
|
required: boolean;
|