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