@threadlabs/looma 0.6.4 → 0.7.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.
Files changed (259) hide show
  1. package/components/ui-button/ui-button.html +103 -81
  2. package/components/ui-checkbox/ui-checkbox.html +4 -1
  3. package/components/ui-combobox/ui-combobox.html +40 -3
  4. package/components/ui-combobox/ui-combobox.js +27 -5
  5. package/components/ui-select/ui-select.html +3 -5
  6. package/dist/index.js +1 -1
  7. package/package.json +2 -2
  8. package/styles/ui-affordance-scope.css +1 -1
  9. package/styles/ui-avatar-group.css +1 -1
  10. package/styles/ui-avatar.css +1 -1
  11. package/styles/ui-badge.css +1 -1
  12. package/styles/ui-button.css +112 -80
  13. package/styles/ui-callout.css +1 -1
  14. package/styles/ui-checkbox.css +5 -2
  15. package/styles/ui-cluster.css +1 -1
  16. package/styles/ui-combobox.css +38 -1
  17. package/styles/ui-container.css +1 -1
  18. package/styles/ui-context-menu.css +1 -1
  19. package/styles/ui-dialog.css +1 -1
  20. package/styles/ui-disclosure.css +1 -1
  21. package/styles/ui-editable.css +1 -1
  22. package/styles/ui-editor-insert-table-grid.css +1 -1
  23. package/styles/ui-editor-mention-menu.css +1 -1
  24. package/styles/ui-editor-slash-menu.css +1 -1
  25. package/styles/ui-editor-table-context-menu.css +1 -1
  26. package/styles/ui-editor-table-overlay.css +1 -1
  27. package/styles/ui-editor-table-toolbar.css +1 -1
  28. package/styles/ui-editor-toolbar.css +1 -1
  29. package/styles/ui-floating-action-button.css +1 -1
  30. package/styles/ui-form-field.css +1 -1
  31. package/styles/ui-grid.css +1 -1
  32. package/styles/ui-icon-button.css +1 -1
  33. package/styles/ui-icon.css +1 -1
  34. package/styles/ui-input.css +1 -1
  35. package/styles/ui-menu-item.css +1 -1
  36. package/styles/ui-menu.css +1 -1
  37. package/styles/ui-popover.css +1 -1
  38. package/styles/ui-radio-group.css +1 -1
  39. package/styles/ui-radio.css +1 -1
  40. package/styles/ui-reel.css +1 -1
  41. package/styles/ui-search-result-row.css +1 -1
  42. package/styles/ui-search-shell.css +1 -1
  43. package/styles/ui-select.css +4 -5
  44. package/styles/ui-separator.css +1 -1
  45. package/styles/ui-sidebar.css +1 -1
  46. package/styles/ui-stack.css +1 -1
  47. package/styles/ui-switch.css +1 -1
  48. package/styles/ui-switcher.css +1 -1
  49. package/styles/ui-tabs.css +1 -1
  50. package/styles/ui-textarea.css +1 -1
  51. package/styles/ui-toast-region.css +1 -1
  52. package/styles/ui-tooltip.css +1 -1
  53. package/styles/ui-top-bar.css +1 -1
  54. package/styles/ui-tree-item.css +1 -1
  55. package/styles/ui-tree.css +1 -1
  56. package/theme-dark.css +6 -30
  57. package/theme-high-contrast.css +30 -20
  58. package/theme-light.css +2 -16
  59. package/tokens.css +33 -24
  60. package/vanilla/UiAffordanceScope.d.ts +1 -1
  61. package/vanilla/UiAffordanceScope.js +1 -1
  62. package/vanilla/UiAvatar.d.ts +1 -1
  63. package/vanilla/UiAvatar.js +1 -1
  64. package/vanilla/UiAvatarGroup.d.ts +1 -1
  65. package/vanilla/UiAvatarGroup.js +1 -1
  66. package/vanilla/UiBadge.d.ts +1 -1
  67. package/vanilla/UiBadge.js +1 -1
  68. package/vanilla/UiButton.d.ts +2 -2
  69. package/vanilla/UiButton.js +2 -2
  70. package/vanilla/UiCallout.d.ts +1 -1
  71. package/vanilla/UiCallout.js +1 -1
  72. package/vanilla/UiCheckbox.d.ts +1 -1
  73. package/vanilla/UiCheckbox.js +1 -1
  74. package/vanilla/UiCluster.d.ts +1 -1
  75. package/vanilla/UiCluster.js +1 -1
  76. package/vanilla/UiCombobox.d.ts +1 -1
  77. package/vanilla/UiCombobox.js +2 -2
  78. package/vanilla/UiContainer.d.ts +1 -1
  79. package/vanilla/UiContainer.js +1 -1
  80. package/vanilla/UiContextMenu.d.ts +1 -1
  81. package/vanilla/UiContextMenu.js +1 -1
  82. package/vanilla/UiDialog.d.ts +1 -1
  83. package/vanilla/UiDialog.js +1 -1
  84. package/vanilla/UiDisclosure.d.ts +1 -1
  85. package/vanilla/UiDisclosure.js +1 -1
  86. package/vanilla/UiEditable.d.ts +1 -1
  87. package/vanilla/UiEditable.js +1 -1
  88. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  89. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  90. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  91. package/vanilla/UiEditorMentionMenu.js +1 -1
  92. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  93. package/vanilla/UiEditorSlashMenu.js +1 -1
  94. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  95. package/vanilla/UiEditorTableContextMenu.js +1 -1
  96. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  97. package/vanilla/UiEditorTableOverlay.js +1 -1
  98. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  99. package/vanilla/UiEditorTableToolbar.js +1 -1
  100. package/vanilla/UiEditorToolbar.d.ts +1 -1
  101. package/vanilla/UiEditorToolbar.js +1 -1
  102. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  103. package/vanilla/UiFloatingActionButton.js +1 -1
  104. package/vanilla/UiFormField.d.ts +1 -1
  105. package/vanilla/UiFormField.js +1 -1
  106. package/vanilla/UiGrid.d.ts +1 -1
  107. package/vanilla/UiGrid.js +1 -1
  108. package/vanilla/UiIcon.d.ts +1 -1
  109. package/vanilla/UiIcon.js +1 -1
  110. package/vanilla/UiIconButton.d.ts +1 -1
  111. package/vanilla/UiIconButton.js +1 -1
  112. package/vanilla/UiInput.d.ts +1 -1
  113. package/vanilla/UiInput.js +1 -1
  114. package/vanilla/UiMenu.d.ts +1 -1
  115. package/vanilla/UiMenu.js +1 -1
  116. package/vanilla/UiMenuItem.d.ts +1 -1
  117. package/vanilla/UiMenuItem.js +1 -1
  118. package/vanilla/UiPopover.d.ts +1 -1
  119. package/vanilla/UiPopover.js +1 -1
  120. package/vanilla/UiRadio.d.ts +1 -1
  121. package/vanilla/UiRadio.js +1 -1
  122. package/vanilla/UiRadioGroup.d.ts +1 -1
  123. package/vanilla/UiRadioGroup.js +1 -1
  124. package/vanilla/UiReel.d.ts +1 -1
  125. package/vanilla/UiReel.js +1 -1
  126. package/vanilla/UiSearchResultRow.d.ts +1 -1
  127. package/vanilla/UiSearchResultRow.js +1 -1
  128. package/vanilla/UiSearchShell.d.ts +1 -1
  129. package/vanilla/UiSearchShell.js +1 -1
  130. package/vanilla/UiSelect.d.ts +1 -2
  131. package/vanilla/UiSelect.js +4 -7
  132. package/vanilla/UiSeparator.d.ts +1 -1
  133. package/vanilla/UiSeparator.js +1 -1
  134. package/vanilla/UiSidebar.d.ts +1 -1
  135. package/vanilla/UiSidebar.js +1 -1
  136. package/vanilla/UiStack.d.ts +1 -1
  137. package/vanilla/UiStack.js +1 -1
  138. package/vanilla/UiSwitch.d.ts +1 -1
  139. package/vanilla/UiSwitch.js +1 -1
  140. package/vanilla/UiSwitcher.d.ts +1 -1
  141. package/vanilla/UiSwitcher.js +1 -1
  142. package/vanilla/UiTabs.d.ts +1 -1
  143. package/vanilla/UiTabs.js +1 -1
  144. package/vanilla/UiTextarea.d.ts +1 -1
  145. package/vanilla/UiTextarea.js +1 -1
  146. package/vanilla/UiToastRegion.d.ts +1 -1
  147. package/vanilla/UiToastRegion.js +1 -1
  148. package/vanilla/UiTooltip.d.ts +1 -1
  149. package/vanilla/UiTooltip.js +1 -1
  150. package/vanilla/UiTopBar.d.ts +1 -1
  151. package/vanilla/UiTopBar.js +1 -1
  152. package/vanilla/UiTree.d.ts +1 -1
  153. package/vanilla/UiTree.js +1 -1
  154. package/vanilla/UiTreeItem.d.ts +1 -1
  155. package/vanilla/UiTreeItem.js +1 -1
  156. package/vue/UiAffordanceScope.vue +8 -84
  157. package/vue/UiAvatar.d.ts +1 -1
  158. package/vue/UiAvatar.vue +9 -106
  159. package/vue/UiAvatarGroup.vue +9 -96
  160. package/vue/UiBadge.vue +1 -1
  161. package/vue/UiButton.d.ts +2 -2
  162. package/vue/UiButton.vue +104 -97
  163. package/vue/UiCallout.vue +1 -1
  164. package/vue/UiCheckbox.vue +26 -124
  165. package/vue/UiCluster.vue +1 -1
  166. package/vue/UiCombobox.d.ts +1 -1
  167. package/vue/UiCombobox.vue +270 -479
  168. package/vue/UiContainer.vue +1 -1
  169. package/vue/UiContextMenu.vue +34 -141
  170. package/vue/UiDialog.vue +25 -126
  171. package/vue/UiDisclosure.vue +26 -138
  172. package/vue/UiEditable.vue +46 -158
  173. package/vue/UiEditorInsertTableGrid.vue +19 -138
  174. package/vue/UiEditorMentionMenu.vue +17 -124
  175. package/vue/UiEditorSlashMenu.vue +17 -109
  176. package/vue/UiEditorTableContextMenu.vue +34 -122
  177. package/vue/UiEditorTableOverlay.vue +61 -167
  178. package/vue/UiEditorTableToolbar.vue +34 -142
  179. package/vue/UiEditorToolbar.vue +1 -1
  180. package/vue/UiFloatingActionButton.vue +1 -1
  181. package/vue/UiFormField.vue +7 -79
  182. package/vue/UiGrid.vue +1 -1
  183. package/vue/UiIcon.vue +8 -84
  184. package/vue/UiIconButton.vue +7 -79
  185. package/vue/UiInput.vue +7 -79
  186. package/vue/UiMenu.vue +42 -127
  187. package/vue/UiMenuItem.vue +1 -1
  188. package/vue/UiPopover.vue +25 -121
  189. package/vue/UiRadio.vue +22 -123
  190. package/vue/UiRadioGroup.d.ts +1 -1
  191. package/vue/UiRadioGroup.vue +32 -119
  192. package/vue/UiReel.vue +1 -1
  193. package/vue/UiSearchResultRow.vue +1 -1
  194. package/vue/UiSearchShell.vue +25 -121
  195. package/vue/UiSelect.d.ts +0 -2
  196. package/vue/UiSelect.vue +9 -85
  197. package/vue/UiSeparator.vue +1 -1
  198. package/vue/UiSidebar.vue +32 -133
  199. package/vue/UiStack.vue +1 -1
  200. package/vue/UiSwitch.vue +22 -123
  201. package/vue/UiSwitcher.vue +1 -1
  202. package/vue/UiTabs.vue +24 -128
  203. package/vue/UiTextarea.vue +7 -79
  204. package/vue/UiToastRegion.vue +37 -126
  205. package/vue/UiTooltip.vue +25 -124
  206. package/vue/UiTopBar.vue +1 -1
  207. package/vue/UiTree.vue +56 -137
  208. package/vue/UiTreeItem.vue +28 -144
  209. package/vue/chunks/UiAffordanceScope.js +9 -78
  210. package/vue/chunks/UiAvatar.js +13 -89
  211. package/vue/chunks/UiAvatarGroup.js +10 -80
  212. package/vue/chunks/UiBadge.js +1 -1
  213. package/vue/chunks/UiButton.js +3 -3
  214. package/vue/chunks/UiCallout.js +1 -1
  215. package/vue/chunks/UiCheckbox.js +17 -95
  216. package/vue/chunks/UiCluster.js +1 -1
  217. package/vue/chunks/UiCombobox.js +115 -326
  218. package/vue/chunks/UiContainer.js +1 -1
  219. package/vue/chunks/UiContextMenu.js +21 -113
  220. package/vue/chunks/UiDialog.js +20 -99
  221. package/vue/chunks/UiDisclosure.js +22 -112
  222. package/vue/chunks/UiEditable.js +32 -128
  223. package/vue/chunks/UiEditorInsertTableGrid.js +22 -116
  224. package/vue/chunks/UiEditorMentionMenu.js +18 -116
  225. package/vue/chunks/UiEditorSlashMenu.js +15 -101
  226. package/vue/chunks/UiEditorTableContextMenu.js +12 -91
  227. package/vue/chunks/UiEditorTableOverlay.js +29 -120
  228. package/vue/chunks/UiEditorTableToolbar.js +16 -111
  229. package/vue/chunks/UiEditorToolbar.js +1 -1
  230. package/vue/chunks/UiFloatingActionButton.js +1 -1
  231. package/vue/chunks/UiFormField.js +8 -73
  232. package/vue/chunks/UiGrid.js +1 -1
  233. package/vue/chunks/UiIcon.js +9 -78
  234. package/vue/chunks/UiIconButton.js +8 -73
  235. package/vue/chunks/UiInput.js +8 -73
  236. package/vue/chunks/UiMenu.js +25 -111
  237. package/vue/chunks/UiMenuItem.js +1 -1
  238. package/vue/chunks/UiPopover.js +18 -105
  239. package/vue/chunks/UiRadio.js +17 -95
  240. package/vue/chunks/UiRadioGroup.js +23 -105
  241. package/vue/chunks/UiReel.js +1 -1
  242. package/vue/chunks/UiSearchResultRow.js +1 -1
  243. package/vue/chunks/UiSearchShell.js +17 -94
  244. package/vue/chunks/UiSelect.js +8 -79
  245. package/vue/chunks/UiSeparator.js +1 -1
  246. package/vue/chunks/UiSidebar.js +23 -108
  247. package/vue/chunks/UiStack.js +1 -1
  248. package/vue/chunks/UiSwitch.js +17 -95
  249. package/vue/chunks/UiSwitcher.js +1 -1
  250. package/vue/chunks/UiTabs.js +22 -103
  251. package/vue/chunks/UiTextarea.js +8 -73
  252. package/vue/chunks/UiToastRegion.js +27 -112
  253. package/vue/chunks/UiTooltip.js +18 -106
  254. package/vue/chunks/UiTopBar.js +1 -1
  255. package/vue/chunks/UiTree.js +31 -109
  256. package/vue/chunks/UiTreeItem.js +29 -119
  257. package/vue/chunks/host.js +101 -0
  258. package/vue/components.css +844 -797
  259. package/vue/host.ts +154 -0
@@ -1,15 +1,8 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.2 for Vue 3.5. Do not edit. -->
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-tree-item/ui-tree-item.js'
5
+ import { createDispatch, useComponentHost } from './host'
13
6
 
14
7
  defineOptions({ inheritAttrs: false })
15
8
 
@@ -71,143 +64,34 @@ const hostState = computed(() =>
71
64
  ].filter(Boolean).join(' ')
72
65
  )
73
66
 
74
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
75
- function dispatch(name: string, detail?: unknown): boolean {
76
- const declared: Record<string, EventInit | undefined> = {
77
- expand: { bubbles: false, composed: true, cancelable: false },
78
- }
79
- const checks: Record<string, (detail: unknown) => boolean> = {
80
- expand: (detail) =>
81
- detail !== null && typeof detail === 'object' && !Array.isArray(detail)
82
- && typeof (detail as Record<string, unknown>)['id'] === 'string'
83
- && typeof (detail as Record<string, unknown>)['expanded'] === 'boolean'
84
- && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
85
- || (detail as Record<string, unknown>)['trigger'] === 'pointer'
86
- || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
87
- && Object.keys(detail as object).every((key) => ['id', 'expanded', 'trigger'].includes(key)),
88
- }
89
- if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
90
- throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
91
- }
92
- const emitEvent = emit as (name: string, detail: unknown) => void
93
- emitEvent(name, detail)
94
- if (detail !== null && typeof detail === 'object' && 'expanded' in detail) {
95
- emitEvent('update:expanded', (detail as Record<string, unknown>)['expanded'])
96
- }
97
- return root.value?.dispatchEvent(
98
- new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
99
- ) ?? true
100
- }
101
-
102
- function read(name: string): unknown {
103
- if (name === 'internalExpanded') return internalExpanded.value
104
- if (name === 'structuralLevel') return structuralLevel.value
105
- if (name === 'tabStop') return tabStop.value
106
- if (name === 'isContainer') return isContainer.value
107
- return (props as Record<string, unknown>)[name]
108
- }
109
-
110
- function write(name: string, value: unknown): boolean {
111
- if (name === 'internalExpanded') {
112
- internalExpanded.value = value as never
113
- return true
114
- }
115
- if (name === 'structuralLevel') {
116
- structuralLevel.value = value as never
117
- return true
118
- }
119
- if (name === 'tabStop') {
120
- tabStop.value = value as never
121
- return true
122
- }
123
- if (name === 'isContainer') {
124
- isContainer.value = value as never
125
- return true
126
- }
127
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
128
- }
129
-
130
- const stops: Array<() => void> = []
131
- const host = {
132
- get element(): Element {
133
- return root.value as Element
67
+ const isExpandDetail = (detail: unknown): boolean =>
68
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
69
+ && typeof (detail as Record<string, unknown>)['id'] === 'string'
70
+ && typeof (detail as Record<string, unknown>)['expanded'] === 'boolean'
71
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
72
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
73
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
74
+ && Object.keys(detail as object).every((key) => ['id', 'expanded', 'trigger'].includes(key))
75
+ const dispatch = createDispatch(root, emit as (name: string, detail: unknown) => void, {
76
+ declared: { expand: { bubbles: false, composed: true, cancelable: false } },
77
+ checks: {
78
+ expand: isExpandDetail,
134
79
  },
135
- state: new Proxy({} as Record<string, unknown>, {
136
- get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
137
- set: (_target, name, value) => typeof name === 'string' && write(name, value),
138
- }),
80
+ modeled: ['expanded'],
81
+ })
82
+
83
+ useComponentHost(controllerModule.default, {
84
+ root,
85
+ dispatch,
86
+ props,
139
87
  refs: {
140
- get row(): Element {
141
- return rowElement.value as Element
142
- },
143
- get dragHandle(): Element {
144
- return dragHandleElement.value as Element
145
- },
146
- get disclosure(): Element {
147
- return disclosureElement.value as Element
148
- },
149
- get actions(): Element {
150
- return actionsElement.value as Element
151
- },
152
- get children(): Element {
153
- return childrenElement.value as Element
154
- },
155
- } as Readonly<Record<string, Element>>,
156
- elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
157
- get: (_target, name) => {
158
- if (typeof name !== 'string' || root.value === null) return undefined
159
- const form = root.value instanceof HTMLFormElement
160
- ? root.value
161
- : root.value.querySelector('form')
162
- return form?.elements.namedItem(name)
163
- ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
164
- },
165
- }),
166
- signal<T>(initialValue: T) {
167
- const value = shallowRef(initialValue)
168
- return {
169
- get: (): T => value.value,
170
- set: (next: T): void => {
171
- if (!Object.is(value.value, next)) value.value = next
172
- },
173
- update: (next: (current: T) => T): void => {
174
- const updated = next(value.value)
175
- if (!Object.is(value.value, updated)) value.value = updated
176
- },
177
- }
88
+ row: rowElement,
89
+ dragHandle: dragHandleElement,
90
+ disclosure: disclosureElement,
91
+ actions: actionsElement,
92
+ children: childrenElement,
178
93
  },
179
- computed<T>(compute: () => T) {
180
- const value = computed(compute)
181
- return { get: (): T => value.value }
182
- },
183
- effect(run: () => void | (() => void)): () => void {
184
- const stop = watchEffect((onCleanup) => {
185
- const cleanup = run()
186
- if (typeof cleanup === 'function') onCleanup(cleanup)
187
- }, { flush: 'post' })
188
- stops.push(stop)
189
- return stop
190
- },
191
- on(event: string, listener: EventListener): () => void {
192
- const element = root.value
193
- element?.addEventListener(event, listener)
194
- const off = (): void => element?.removeEventListener(event, listener)
195
- stops.push(off)
196
- return off
197
- },
198
- dispatch,
199
- }
200
-
201
- let cleanup: void | (() => void)
202
- let ready: Promise<void> | undefined
203
- onMounted(() => {
204
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
205
- cleanup = result
206
- })
207
- })
208
- onBeforeUnmount(() => {
209
- for (const stop of stops.splice(0)) stop()
210
- if (typeof cleanup === 'function') cleanup()
94
+ state: { internalExpanded, structuralLevel, tabStop, isContainer },
211
95
  })
212
96
  </script>
213
97
 
@@ -1,5 +1,6 @@
1
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
1
2
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { computed, createElementBlock, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, shallowRef, watchEffect } from "vue";
3
+ import { computed, createElementBlock, defineComponent, mergeProps, openBlock, ref, renderSlot } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-affordance-scope/ui-affordance-scope.js";
4
5
  //#region .build/vue/UiAffordanceScope.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-ui-affordance-scope-state"];
@@ -15,82 +16,12 @@ var UiAffordanceScope_default = /*#__PURE__*/ _plugin_vue_export_helper_default(
15
16
  const engaged = ref(false);
16
17
  /** The values the styles' :host-state() rules test. */
17
18
  const hostState = computed(() => [engaged.value && "engaged"].filter(Boolean).join(" "));
18
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
19
- function dispatch(name, detail) {
20
- return root.value?.dispatchEvent(new CustomEvent(name, {
21
- bubbles: true,
22
- composed: true,
23
- detail
24
- })) ?? true;
25
- }
26
- function read(name) {
27
- if (name === "engaged") return engaged.value;
28
- return props[name];
29
- }
30
- function write(name, value) {
31
- if (name === "engaged") {
32
- engaged.value = value;
33
- return true;
34
- }
35
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
36
- }
37
- const stops = [];
38
- const host = {
39
- get element() {
40
- return root.value;
41
- },
42
- state: new Proxy({}, {
43
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
44
- set: (_target, name, value) => typeof name === "string" && write(name, value)
45
- }),
46
- refs: {},
47
- elements: new Proxy({}, { get: (_target, name) => {
48
- if (typeof name !== "string" || root.value === null) return void 0;
49
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
50
- } }),
51
- signal(initialValue) {
52
- const value = shallowRef(initialValue);
53
- return {
54
- get: () => value.value,
55
- set: (next) => {
56
- if (!Object.is(value.value, next)) value.value = next;
57
- },
58
- update: (next) => {
59
- const updated = next(value.value);
60
- if (!Object.is(value.value, updated)) value.value = updated;
61
- }
62
- };
63
- },
64
- computed(compute) {
65
- const value = computed(compute);
66
- return { get: () => value.value };
67
- },
68
- effect(run) {
69
- const stop = watchEffect((onCleanup) => {
70
- const cleanup = run();
71
- if (typeof cleanup === "function") onCleanup(cleanup);
72
- }, { flush: "post" });
73
- stops.push(stop);
74
- return stop;
75
- },
76
- on(event, listener) {
77
- const element = root.value;
78
- element?.addEventListener(event, listener);
79
- const off = () => element?.removeEventListener(event, listener);
80
- stops.push(off);
81
- return off;
82
- },
83
- dispatch
84
- };
85
- let cleanup;
86
- onMounted(() => {
87
- Promise.resolve(controllerModule.default(host)).then((result) => {
88
- cleanup = result;
89
- });
90
- });
91
- onBeforeUnmount(() => {
92
- for (const stop of stops.splice(0)) stop();
93
- if (typeof cleanup === "function") cleanup();
19
+ const dispatch = createDispatch(root);
20
+ useComponentHost(controllerModule.default, {
21
+ root,
22
+ dispatch,
23
+ props,
24
+ state: { engaged }
94
25
  });
95
26
  return (_ctx, _cache) => {
96
27
  return openBlock(), createElementBlock("span", mergeProps({ "data-component": "ui-affordance-scope" }, _ctx.$attrs, {
@@ -100,6 +31,6 @@ var UiAffordanceScope_default = /*#__PURE__*/ _plugin_vue_export_helper_default(
100
31
  }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
101
32
  };
102
33
  }
103
- }), [["__scopeId", "data-v-3d8ef4c3"]]);
34
+ }), [["__scopeId", "data-v-c1d56d8d"]]);
104
35
  //#endregion
105
36
  export { UiAffordanceScope_default as t };
@@ -1,5 +1,6 @@
1
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
1
2
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, shallowRef, toDisplayString, useTemplateRef, watchEffect } from "vue";
3
+ import { createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot, toDisplayString, useTemplateRef } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-avatar/ui-avatar.js";
4
5
  //#region .build/vue/UiAvatar.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["src", "hidden"];
@@ -22,94 +23,17 @@ var UiAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
22
23
  const hasImage = ref(false);
23
24
  const hasAuthoredImage = ref(false);
24
25
  const initials = ref("?");
25
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
26
- function dispatch(name, detail) {
27
- return root.value?.dispatchEvent(new CustomEvent(name, {
28
- bubbles: true,
29
- composed: true,
30
- detail
31
- })) ?? true;
32
- }
33
- function read(name) {
34
- if (name === "hasImage") return hasImage.value;
35
- if (name === "hasAuthoredImage") return hasAuthoredImage.value;
36
- if (name === "initials") return initials.value;
37
- return props[name];
38
- }
39
- function write(name, value) {
40
- if (name === "hasImage") {
41
- hasImage.value = value;
42
- return true;
26
+ const dispatch = createDispatch(root);
27
+ useComponentHost(controllerModule.default, {
28
+ root,
29
+ dispatch,
30
+ props,
31
+ refs: { image: imageElement },
32
+ state: {
33
+ hasImage,
34
+ hasAuthoredImage,
35
+ initials
43
36
  }
44
- if (name === "hasAuthoredImage") {
45
- hasAuthoredImage.value = value;
46
- return true;
47
- }
48
- if (name === "initials") {
49
- initials.value = value;
50
- return true;
51
- }
52
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
53
- }
54
- const stops = [];
55
- const host = {
56
- get element() {
57
- return root.value;
58
- },
59
- state: new Proxy({}, {
60
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
61
- set: (_target, name, value) => typeof name === "string" && write(name, value)
62
- }),
63
- refs: { get image() {
64
- return imageElement.value;
65
- } },
66
- elements: new Proxy({}, { get: (_target, name) => {
67
- if (typeof name !== "string" || root.value === null) return void 0;
68
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
69
- } }),
70
- signal(initialValue) {
71
- const value = shallowRef(initialValue);
72
- return {
73
- get: () => value.value,
74
- set: (next) => {
75
- if (!Object.is(value.value, next)) value.value = next;
76
- },
77
- update: (next) => {
78
- const updated = next(value.value);
79
- if (!Object.is(value.value, updated)) value.value = updated;
80
- }
81
- };
82
- },
83
- computed(compute) {
84
- const value = computed(compute);
85
- return { get: () => value.value };
86
- },
87
- effect(run) {
88
- const stop = watchEffect((onCleanup) => {
89
- const cleanup = run();
90
- if (typeof cleanup === "function") onCleanup(cleanup);
91
- }, { flush: "post" });
92
- stops.push(stop);
93
- return stop;
94
- },
95
- on(event, listener) {
96
- const element = root.value;
97
- element?.addEventListener(event, listener);
98
- const off = () => element?.removeEventListener(event, listener);
99
- stops.push(off);
100
- return off;
101
- },
102
- dispatch
103
- };
104
- let cleanup;
105
- onMounted(() => {
106
- Promise.resolve(controllerModule.default(host)).then((result) => {
107
- cleanup = result;
108
- });
109
- });
110
- onBeforeUnmount(() => {
111
- for (const stop of stops.splice(0)) stop();
112
- if (typeof cleanup === "function") cleanup();
113
37
  });
114
38
  return (_ctx, _cache) => {
115
39
  return openBlock(), createElementBlock("span", mergeProps({ "data-component": "ui-avatar" }, _ctx.$attrs, {
@@ -133,6 +57,6 @@ var UiAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
133
57
  ], 16);
134
58
  };
135
59
  }
136
- }), [["__scopeId", "data-v-3a27ff1d"]]);
60
+ }), [["__scopeId", "data-v-64e52bdd"]]);
137
61
  //#endregion
138
62
  export { UiAvatar_default as t };
@@ -1,5 +1,6 @@
1
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
1
2
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, shallowRef, toDisplayString, useTemplateRef, watchEffect } from "vue";
3
+ import { createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot, toDisplayString, useTemplateRef } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-avatar-group/ui-avatar-group.js";
4
5
  //#region .build/vue/UiAvatarGroup.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["aria-label"];
@@ -18,84 +19,13 @@ var UiAvatarGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
18
19
  const root = ref(null);
19
20
  const overflowElement = useTemplateRef("overflow");
20
21
  const overflowCount = ref(0);
21
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
22
- function dispatch(name, detail) {
23
- return root.value?.dispatchEvent(new CustomEvent(name, {
24
- bubbles: true,
25
- composed: true,
26
- detail
27
- })) ?? true;
28
- }
29
- function read(name) {
30
- if (name === "overflowCount") return overflowCount.value;
31
- return props[name];
32
- }
33
- function write(name, value) {
34
- if (name === "overflowCount") {
35
- overflowCount.value = value;
36
- return true;
37
- }
38
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
39
- }
40
- const stops = [];
41
- const host = {
42
- get element() {
43
- return root.value;
44
- },
45
- state: new Proxy({}, {
46
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
47
- set: (_target, name, value) => typeof name === "string" && write(name, value)
48
- }),
49
- refs: { get overflow() {
50
- return overflowElement.value;
51
- } },
52
- elements: new Proxy({}, { get: (_target, name) => {
53
- if (typeof name !== "string" || root.value === null) return void 0;
54
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
55
- } }),
56
- signal(initialValue) {
57
- const value = shallowRef(initialValue);
58
- return {
59
- get: () => value.value,
60
- set: (next) => {
61
- if (!Object.is(value.value, next)) value.value = next;
62
- },
63
- update: (next) => {
64
- const updated = next(value.value);
65
- if (!Object.is(value.value, updated)) value.value = updated;
66
- }
67
- };
68
- },
69
- computed(compute) {
70
- const value = computed(compute);
71
- return { get: () => value.value };
72
- },
73
- effect(run) {
74
- const stop = watchEffect((onCleanup) => {
75
- const cleanup = run();
76
- if (typeof cleanup === "function") onCleanup(cleanup);
77
- }, { flush: "post" });
78
- stops.push(stop);
79
- return stop;
80
- },
81
- on(event, listener) {
82
- const element = root.value;
83
- element?.addEventListener(event, listener);
84
- const off = () => element?.removeEventListener(event, listener);
85
- stops.push(off);
86
- return off;
87
- },
88
- dispatch
89
- };
90
- let cleanup;
91
- onMounted(() => {
92
- Promise.resolve(controllerModule.default(host)).then((result) => {
93
- cleanup = result;
94
- });
95
- });
96
- onBeforeUnmount(() => {
97
- for (const stop of stops.splice(0)) stop();
98
- if (typeof cleanup === "function") cleanup();
22
+ const dispatch = createDispatch(root);
23
+ useComponentHost(controllerModule.default, {
24
+ root,
25
+ dispatch,
26
+ props,
27
+ refs: { overflow: overflowElement },
28
+ state: { overflowCount }
99
29
  });
100
30
  return (_ctx, _cache) => {
101
31
  return openBlock(), createElementBlock("div", mergeProps({
@@ -114,6 +44,6 @@ var UiAvatarGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
114
44
  }, toDisplayString(`+${overflowCount.value}`), 9, _hoisted_2)], 16, _hoisted_1);
115
45
  };
116
46
  }
117
- }), [["__scopeId", "data-v-2ad5d86f"]]);
47
+ }), [["__scopeId", "data-v-cbb93f58"]]);
118
48
  //#endregion
119
49
  export { UiAvatarGroup_default as t };
@@ -19,6 +19,6 @@ var UiBadge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
19
19
  return openBlock(), createElementBlock("span", mergeProps({ "data-component": "ui-badge" }, _ctx.$attrs, { "data-ui-badge-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
20
20
  };
21
21
  }
22
- }), [["__scopeId", "data-v-7e9b5784"]]);
22
+ }), [["__scopeId", "data-v-90c7d1bb"]]);
23
23
  //#endregion
24
24
  export { UiBadge_default as t };
@@ -18,17 +18,17 @@ var UiButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
18
18
  type: Boolean,
19
19
  default: false
20
20
  },
21
- tone: { default: "neutral" },
21
+ tone: { default: "accent" },
22
22
  variant: { default: "outline" }
23
23
  },
24
24
  setup(__props) {
25
25
  const props = __props;
26
26
  /** The values the styles' :host-state() rules test. */
27
27
  const hostState = computed(() => [
28
- props.variant && `variant variant=${props.variant}`,
29
28
  props.align && `align align=${props.align}`,
30
29
  props.stretch && "stretch",
31
30
  props.size && `size size=${props.size}`,
31
+ props.variant && `variant variant=${props.variant}`,
32
32
  props.tone && `tone tone=${props.tone}`
33
33
  ].filter(Boolean).join(" "));
34
34
  return (_ctx, _cache) => {
@@ -41,6 +41,6 @@ var UiButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
41
41
  }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
42
42
  };
43
43
  }
44
- }), [["__scopeId", "data-v-405b2c60"]]);
44
+ }), [["__scopeId", "data-v-8513eb5d"]]);
45
45
  //#endregion
46
46
  export { UiButton_default as t };
@@ -103,6 +103,6 @@ var UiCallout_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
103
103
  ]), createElementVNode("div", _hoisted_8, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 16, _hoisted_1);
104
104
  };
105
105
  }
106
- }), [["__scopeId", "data-v-31ee6589"]]);
106
+ }), [["__scopeId", "data-v-c6e92976"]]);
107
107
  //#endregion
108
108
  export { UiCallout_default as t };