@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 { Fragment, computed, createElementBlock, createElementVNode, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, shallowRef, toDisplayString, useTemplateRef, watchEffect } from "vue";
3
+ import { Fragment, computed, createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderList, renderSlot, toDisplayString, useTemplateRef } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-tabs/ui-tabs.js";
4
5
  //#region .build/vue/UiTabs.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-ui-tabs-state"];
@@ -44,109 +45,27 @@ var UiTabs_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
44
45
  props.stretch && "stretch",
45
46
  props.orientation && `orientation orientation=${props.orientation}`
46
47
  ].filter(Boolean).join(" "));
47
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
48
- function dispatch(name, detail) {
49
- const declared = { select: {
50
- bubbles: true,
51
- composed: true,
52
- cancelable: false
53
- } };
54
- const checks = { select: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["value"] === "string" && typeof detail["previousValue"] === "string" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
55
- "value",
56
- "previousValue",
57
- "trigger"
58
- ].includes(key)) };
59
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
60
- const emitEvent = emit;
61
- emitEvent(name, detail);
62
- if (detail !== null && typeof detail === "object" && "value" in detail) emitEvent("update:value", detail["value"]);
63
- return root.value?.dispatchEvent(new CustomEvent(name, {
64
- bubbles: true,
65
- composed: true,
66
- ...declared[name],
67
- detail
68
- })) ?? true;
69
- }
70
- function read(name) {
71
- if (name === "internalValue") return internalValue.value;
72
- if (name === "tabs") return tabs.value;
73
- return props[name];
74
- }
75
- function write(name, value) {
76
- if (name === "internalValue") {
77
- internalValue.value = value;
78
- return true;
79
- }
80
- if (name === "tabs") {
81
- tabs.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
- }),
48
+ const isSelectDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["value"] === "string" && typeof detail["previousValue"] === "string" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
49
+ "value",
50
+ "previousValue",
51
+ "trigger"
52
+ ].includes(key));
53
+ const dispatch = createDispatch(root, emit, {
54
+ checks: { select: isSelectDetail },
55
+ modeled: ["value"]
56
+ });
57
+ useComponentHost(controllerModule.default, {
58
+ root,
59
+ dispatch,
60
+ props,
95
61
  refs: {
96
- get list() {
97
- return listElement.value;
98
- },
99
- get panels() {
100
- return panelsElement.value;
101
- }
102
- },
103
- elements: new Proxy({}, { get: (_target, name) => {
104
- if (typeof name !== "string" || root.value === null) return void 0;
105
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
106
- } }),
107
- signal(initialValue) {
108
- const value = shallowRef(initialValue);
109
- return {
110
- get: () => value.value,
111
- set: (next) => {
112
- if (!Object.is(value.value, next)) value.value = next;
113
- },
114
- update: (next) => {
115
- const updated = next(value.value);
116
- if (!Object.is(value.value, updated)) value.value = updated;
117
- }
118
- };
119
- },
120
- computed(compute) {
121
- const value = computed(compute);
122
- return { get: () => value.value };
62
+ list: listElement,
63
+ panels: panelsElement
123
64
  },
124
- effect(run) {
125
- const stop = watchEffect((onCleanup) => {
126
- const cleanup = run();
127
- if (typeof cleanup === "function") onCleanup(cleanup);
128
- }, { flush: "post" });
129
- stops.push(stop);
130
- return stop;
131
- },
132
- on(event, listener) {
133
- const element = root.value;
134
- element?.addEventListener(event, listener);
135
- const off = () => element?.removeEventListener(event, listener);
136
- stops.push(off);
137
- return off;
138
- },
139
- dispatch
140
- };
141
- let cleanup;
142
- onMounted(() => {
143
- Promise.resolve(controllerModule.default(host)).then((result) => {
144
- cleanup = result;
145
- });
146
- });
147
- onBeforeUnmount(() => {
148
- for (const stop of stops.splice(0)) stop();
149
- if (typeof cleanup === "function") cleanup();
65
+ state: {
66
+ internalValue,
67
+ tabs
68
+ }
150
69
  });
151
70
  return (_ctx, _cache) => {
152
71
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-tabs" }, _ctx.$attrs, {
@@ -172,6 +91,6 @@ var UiTabs_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
172
91
  }), 128))], 8, _hoisted_2), createElementVNode("div", _hoisted_4, [renderSlot(_ctx.$slots, "default")], 512)], 16, _hoisted_1);
173
92
  };
174
93
  }
175
- }), [["__scopeId", "data-v-3e89baea"]]);
94
+ }), [["__scopeId", "data-v-f288c3b2"]]);
176
95
  //#endregion
177
96
  export { UiTabs_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, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, shallowRef, vModelText, watchEffect, withDirectives } from "vue";
3
+ import { computed, createElementBlock, defineComponent, mergeProps, openBlock, ref, vModelText, withDirectives } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-textarea/ui-textarea.js";
4
5
  //#region .build/vue/UiTextarea.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = [
@@ -44,77 +45,11 @@ var UiTextarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
44
45
  set: (value) => emit("update:modelValue", value)
45
46
  });
46
47
  const root = ref(null);
47
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
48
- function dispatch(name, detail) {
49
- return root.value?.dispatchEvent(new CustomEvent(name, {
50
- bubbles: true,
51
- composed: true,
52
- detail
53
- })) ?? true;
54
- }
55
- function read(name) {
56
- return props[name];
57
- }
58
- function write(name, value) {
59
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
60
- }
61
- const stops = [];
62
- const host = {
63
- get element() {
64
- return root.value;
65
- },
66
- state: new Proxy({}, {
67
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
68
- set: (_target, name, value) => typeof name === "string" && write(name, value)
69
- }),
70
- refs: {},
71
- elements: new Proxy({}, { get: (_target, name) => {
72
- if (typeof name !== "string" || root.value === null) return void 0;
73
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
74
- } }),
75
- signal(initialValue) {
76
- const value = shallowRef(initialValue);
77
- return {
78
- get: () => value.value,
79
- set: (next) => {
80
- if (!Object.is(value.value, next)) value.value = next;
81
- },
82
- update: (next) => {
83
- const updated = next(value.value);
84
- if (!Object.is(value.value, updated)) value.value = updated;
85
- }
86
- };
87
- },
88
- computed(compute) {
89
- const value = computed(compute);
90
- return { get: () => value.value };
91
- },
92
- effect(run) {
93
- const stop = watchEffect((onCleanup) => {
94
- const cleanup = run();
95
- if (typeof cleanup === "function") onCleanup(cleanup);
96
- }, { flush: "post" });
97
- stops.push(stop);
98
- return stop;
99
- },
100
- on(event, listener) {
101
- const element = root.value;
102
- element?.addEventListener(event, listener);
103
- const off = () => element?.removeEventListener(event, listener);
104
- stops.push(off);
105
- return off;
106
- },
107
- dispatch
108
- };
109
- let cleanup;
110
- onMounted(() => {
111
- Promise.resolve(controllerModule.default(host)).then((result) => {
112
- cleanup = result;
113
- });
114
- });
115
- onBeforeUnmount(() => {
116
- for (const stop of stops.splice(0)) stop();
117
- if (typeof cleanup === "function") cleanup();
48
+ const dispatch = createDispatch(root);
49
+ useComponentHost(controllerModule.default, {
50
+ root,
51
+ dispatch,
52
+ props
118
53
  });
119
54
  return (_ctx, _cache) => {
120
55
  return withDirectives((openBlock(), createElementBlock("textarea", mergeProps({ "data-component": "ui-textarea" }, _ctx.$attrs, {
@@ -129,6 +64,6 @@ var UiTextarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
129
64
  }), null, 16, _hoisted_1)), [[vModelText, model.value]]);
130
65
  };
131
66
  }
132
- }), [["__scopeId", "data-v-2b01ccc0"]]);
67
+ }), [["__scopeId", "data-v-fd749c95"]]);
133
68
  //#endregion
134
69
  export { UiTextarea_default as t };
@@ -1,6 +1,7 @@
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
3
  import { t as UiIconButton_default } from "./UiIconButton.js";
3
- import { Fragment, computed, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, shallowRef, toDisplayString, watchEffect, withCtx } from "vue";
4
+ import { Fragment, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, withCtx } from "vue";
4
5
  import * as controllerModule from "@threadlabs/looma/components/ui-toast-region/ui-toast-region.js";
5
6
  //#region .build/vue/UiToastRegion.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = ["id", "role"];
@@ -34,120 +35,34 @@ var UiToastRegion_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
34
35
  const root = ref(null);
35
36
  const internalOpen = ref(false);
36
37
  const toasts = ref([]);
37
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
38
- function dispatch(name, detail) {
39
- const declared = {
40
- close: {
41
- bubbles: true,
42
- composed: true,
43
- cancelable: false
44
- },
45
- dismiss: {
46
- bubbles: true,
47
- composed: true,
48
- cancelable: false
49
- }
50
- };
51
- const checks = {
52
- close: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "timeout" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
53
- "open",
54
- "reason",
55
- "trigger"
56
- ].includes(key)),
57
- dismiss: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["id"] === "string" && (detail["reason"] === "action" || detail["reason"] === "timeout") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
58
- "id",
59
- "reason",
60
- "trigger"
61
- ].includes(key))
62
- };
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" && "open" in detail) emitEvent("update:open", detail["open"]);
67
- return root.value?.dispatchEvent(new CustomEvent(name, {
68
- bubbles: true,
69
- composed: true,
70
- ...declared[name],
71
- detail
72
- })) ?? true;
73
- }
74
- function read(name) {
75
- if (name === "internalOpen") return internalOpen.value;
76
- if (name === "toasts") return toasts.value;
77
- return props[name];
78
- }
79
- function write(name, value) {
80
- if (name === "internalOpen") {
81
- internalOpen.value = value;
82
- return true;
83
- }
84
- if (name === "toasts") {
85
- toasts.value = value;
86
- return true;
87
- }
88
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
89
- }
90
- const stops = [];
91
- const host = {
92
- get element() {
93
- return root.value;
94
- },
95
- state: new Proxy({}, {
96
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
97
- set: (_target, name, value) => typeof name === "string" && write(name, value)
98
- }),
99
- refs: {},
100
- elements: new Proxy({}, { get: (_target, name) => {
101
- if (typeof name !== "string" || root.value === null) return void 0;
102
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
103
- } }),
104
- signal(initialValue) {
105
- const value = shallowRef(initialValue);
106
- return {
107
- get: () => value.value,
108
- set: (next) => {
109
- if (!Object.is(value.value, next)) value.value = next;
110
- },
111
- update: (next) => {
112
- const updated = next(value.value);
113
- if (!Object.is(value.value, updated)) value.value = updated;
114
- }
115
- };
38
+ const isCloseDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "timeout" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
39
+ "open",
40
+ "reason",
41
+ "trigger"
42
+ ].includes(key));
43
+ const isDismissDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["id"] === "string" && (detail["reason"] === "action" || detail["reason"] === "timeout") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
44
+ "id",
45
+ "reason",
46
+ "trigger"
47
+ ].includes(key));
48
+ const dispatch = createDispatch(root, emit, {
49
+ checks: {
50
+ close: isCloseDetail,
51
+ dismiss: isDismissDetail
116
52
  },
117
- computed(compute) {
118
- const value = computed(compute);
119
- return { get: () => value.value };
120
- },
121
- effect(run) {
122
- const stop = watchEffect((onCleanup) => {
123
- const cleanup = run();
124
- if (typeof cleanup === "function") onCleanup(cleanup);
125
- }, { flush: "post" });
126
- stops.push(stop);
127
- return stop;
128
- },
129
- on(event, listener) {
130
- const element = root.value;
131
- element?.addEventListener(event, listener);
132
- const off = () => element?.removeEventListener(event, listener);
133
- stops.push(off);
134
- return off;
135
- },
136
- dispatch
137
- };
138
- let cleanup;
139
- let ready;
140
- onMounted(() => {
141
- ready = Promise.resolve(controllerModule.default(host)).then((result) => {
142
- cleanup = result;
143
- });
53
+ modeled: ["open"]
144
54
  });
145
- onBeforeUnmount(() => {
146
- for (const stop of stops.splice(0)) stop();
147
- if (typeof cleanup === "function") cleanup();
55
+ const { host, ready } = useComponentHost(controllerModule.default, {
56
+ root,
57
+ dispatch,
58
+ props,
59
+ state: {
60
+ internalOpen,
61
+ toasts
62
+ }
148
63
  });
149
64
  __expose({ show: async (...args) => {
150
- await ready;
65
+ await ready();
151
66
  return controllerModule["show"](host, ...args);
152
67
  } });
153
68
  return (_ctx, _cache) => {
@@ -188,6 +103,6 @@ var UiToastRegion_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
188
103
  }), 128))], 16);
189
104
  };
190
105
  }
191
- }), [["__scopeId", "data-v-660faa24"]]);
106
+ }), [["__scopeId", "data-v-925e00c2"]]);
192
107
  //#endregion
193
108
  export { UiToastRegion_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, watchEffect } from "vue";
3
+ import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-tooltip/ui-tooltip.js";
4
5
  //#region .build/vue/UiTooltip.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["hidden", "data-ui-tooltip-state"];
@@ -41,112 +42,23 @@ var UiTooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
41
42
  props.placement && "placement",
42
43
  `placement=${encodeURIComponent(props.placement)}`
43
44
  ].filter(Boolean).join(" "));
44
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
45
- function dispatch(name, detail) {
46
- const declared = {
47
- open: {
48
- bubbles: true,
49
- composed: true,
50
- cancelable: false
51
- },
52
- close: {
53
- bubbles: true,
54
- composed: true,
55
- cancelable: false
56
- }
57
- };
58
- const checks = {
59
- open: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
60
- "open",
61
- "reason",
62
- "trigger"
63
- ].includes(key)),
64
- close: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
65
- "open",
66
- "reason",
67
- "trigger"
68
- ].includes(key))
69
- };
70
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
71
- const emitEvent = emit;
72
- emitEvent(name, detail);
73
- if (detail !== null && typeof detail === "object" && "open" in detail) emitEvent("update:open", detail["open"]);
74
- if (detail !== null && typeof detail === "object" && "trigger" in detail) emitEvent("update:trigger", detail["trigger"]);
75
- return root.value?.dispatchEvent(new CustomEvent(name, {
76
- bubbles: true,
77
- composed: true,
78
- ...declared[name],
79
- detail
80
- })) ?? true;
81
- }
82
- function read(name) {
83
- if (name === "internalOpen") return internalOpen.value;
84
- return props[name];
85
- }
86
- function write(name, value) {
87
- if (name === "internalOpen") {
88
- internalOpen.value = value;
89
- return true;
90
- }
91
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
92
- }
93
- const stops = [];
94
- const host = {
95
- get element() {
96
- return root.value;
45
+ const isOpenDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
46
+ "open",
47
+ "reason",
48
+ "trigger"
49
+ ].includes(key));
50
+ const dispatch = createDispatch(root, emit, {
51
+ checks: {
52
+ open: isOpenDetail,
53
+ close: isOpenDetail
97
54
  },
98
- state: new Proxy({}, {
99
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
100
- set: (_target, name, value) => typeof name === "string" && write(name, value)
101
- }),
102
- refs: {},
103
- elements: new Proxy({}, { get: (_target, name) => {
104
- if (typeof name !== "string" || root.value === null) return void 0;
105
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
106
- } }),
107
- signal(initialValue) {
108
- const value = shallowRef(initialValue);
109
- return {
110
- get: () => value.value,
111
- set: (next) => {
112
- if (!Object.is(value.value, next)) value.value = next;
113
- },
114
- update: (next) => {
115
- const updated = next(value.value);
116
- if (!Object.is(value.value, updated)) value.value = updated;
117
- }
118
- };
119
- },
120
- computed(compute) {
121
- const value = computed(compute);
122
- return { get: () => value.value };
123
- },
124
- effect(run) {
125
- const stop = watchEffect((onCleanup) => {
126
- const cleanup = run();
127
- if (typeof cleanup === "function") onCleanup(cleanup);
128
- }, { flush: "post" });
129
- stops.push(stop);
130
- return stop;
131
- },
132
- on(event, listener) {
133
- const element = root.value;
134
- element?.addEventListener(event, listener);
135
- const off = () => element?.removeEventListener(event, listener);
136
- stops.push(off);
137
- return off;
138
- },
139
- dispatch
140
- };
141
- let cleanup;
142
- onMounted(() => {
143
- Promise.resolve(controllerModule.default(host)).then((result) => {
144
- cleanup = result;
145
- });
55
+ modeled: ["open", "trigger"]
146
56
  });
147
- onBeforeUnmount(() => {
148
- for (const stop of stops.splice(0)) stop();
149
- if (typeof cleanup === "function") cleanup();
57
+ useComponentHost(controllerModule.default, {
58
+ root,
59
+ dispatch,
60
+ props,
61
+ state: { internalOpen }
150
62
  });
151
63
  return (_ctx, _cache) => {
152
64
  return openBlock(), createElementBlock("span", mergeProps({
@@ -160,6 +72,6 @@ var UiTooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
160
72
  }), [createElementVNode("div", _hoisted_2, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 16, _hoisted_1);
161
73
  };
162
74
  }
163
- }), [["__scopeId", "data-v-3af2132e"]]);
75
+ }), [["__scopeId", "data-v-5952fbd4"]]);
164
76
  //#endregion
165
77
  export { UiTooltip_default as t };
@@ -20,6 +20,6 @@ var UiTopBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
20
20
  ], 16);
21
21
  };
22
22
  }
23
- }), [["__scopeId", "data-v-88437f08"]]);
23
+ }), [["__scopeId", "data-v-d08120f9"]]);
24
24
  //#endregion
25
25
  export { UiTopBar_default as t };