@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, 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-menu/ui-menu.js";
4
5
  //#region .build/vue/UiMenu.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-ui-menu-state"];
@@ -31,117 +32,30 @@ var UiMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
31
32
  const internalOpen = ref(false);
32
33
  /** The values the styles' :host-state() rules test. */
33
34
  const hostState = computed(() => [props.density && `density density=${props.density}`, internalOpen.value && "internalOpen"].filter(Boolean).join(" "));
34
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
35
- function dispatch(name, detail) {
36
- const declared = {
37
- select: {
38
- bubbles: true,
39
- composed: true,
40
- cancelable: false
41
- },
42
- open: {
43
- bubbles: true,
44
- composed: true,
45
- cancelable: false
46
- },
47
- close: {
48
- bubbles: true,
49
- composed: true,
50
- cancelable: false
51
- }
52
- };
53
- const checks = {
54
- select: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["value"] === "string" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => ["value", "trigger"].includes(key)),
55
- open: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
56
- "open",
57
- "reason",
58
- "trigger"
59
- ].includes(key)),
60
- 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) => [
61
- "open",
62
- "reason",
63
- "trigger"
64
- ].includes(key))
65
- };
66
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
67
- const emitEvent = emit;
68
- emitEvent(name, detail);
69
- if (detail !== null && typeof detail === "object" && "open" in detail) emitEvent("update:open", detail["open"]);
70
- return root.value?.dispatchEvent(new CustomEvent(name, {
71
- bubbles: true,
72
- composed: true,
73
- ...declared[name],
74
- detail
75
- })) ?? true;
76
- }
77
- function read(name) {
78
- if (name === "internalOpen") return internalOpen.value;
79
- return props[name];
80
- }
81
- function write(name, value) {
82
- if (name === "internalOpen") {
83
- internalOpen.value = value;
84
- return true;
85
- }
86
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
87
- }
88
- const stops = [];
89
- const host = {
90
- get element() {
91
- return root.value;
35
+ const isSelectDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["value"] === "string" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => ["value", "trigger"].includes(key));
36
+ const isOpenDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
37
+ "open",
38
+ "reason",
39
+ "trigger"
40
+ ].includes(key));
41
+ const isCloseDetail = (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) => [
42
+ "open",
43
+ "reason",
44
+ "trigger"
45
+ ].includes(key));
46
+ const dispatch = createDispatch(root, emit, {
47
+ checks: {
48
+ select: isSelectDetail,
49
+ open: isOpenDetail,
50
+ close: isCloseDetail
92
51
  },
93
- state: new Proxy({}, {
94
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
95
- set: (_target, name, value) => typeof name === "string" && write(name, value)
96
- }),
97
- refs: {},
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
+ modeled: ["open"]
141
53
  });
142
- onBeforeUnmount(() => {
143
- for (const stop of stops.splice(0)) stop();
144
- if (typeof cleanup === "function") cleanup();
54
+ useComponentHost(controllerModule.default, {
55
+ root,
56
+ dispatch,
57
+ props,
58
+ state: { internalOpen }
145
59
  });
146
60
  return (_ctx, _cache) => {
147
61
  return openBlock(), createElementBlock("div", mergeProps({
@@ -155,6 +69,6 @@ var UiMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
155
69
  }), [createElementVNode("div", _hoisted_2, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 16, _hoisted_1);
156
70
  };
157
71
  }
158
- }), [["__scopeId", "data-v-09be9e37"]]);
72
+ }), [["__scopeId", "data-v-e8df970a"]]);
159
73
  //#endregion
160
74
  export { UiMenu_default as t };
@@ -26,6 +26,6 @@ var UiMenuItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
26
26
  }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
27
27
  };
28
28
  }
29
- }), [["__scopeId", "data-v-69407da9"]]);
29
+ }), [["__scopeId", "data-v-40124183"]]);
30
30
  //#endregion
31
31
  export { UiMenuItem_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-popover/ui-popover.js";
4
5
  //#region .build/vue/UiPopover.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-ui-popover-state"];
@@ -29,111 +30,23 @@ var UiPopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
29
30
  const internalOpen = ref(false);
30
31
  /** The values the styles' :host-state() rules test. */
31
32
  const hostState = computed(() => [internalOpen.value && "internalOpen"].filter(Boolean).join(" "));
32
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
33
- function dispatch(name, detail) {
34
- const declared = {
35
- open: {
36
- bubbles: true,
37
- composed: true,
38
- cancelable: false
39
- },
40
- close: {
41
- bubbles: true,
42
- composed: true,
43
- cancelable: false
44
- }
45
- };
46
- const checks = {
47
- 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) => [
48
- "open",
49
- "reason",
50
- "trigger"
51
- ].includes(key)),
52
- 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) => [
53
- "open",
54
- "reason",
55
- "trigger"
56
- ].includes(key))
57
- };
58
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
59
- const emitEvent = emit;
60
- emitEvent(name, detail);
61
- if (detail !== null && typeof detail === "object" && "open" in detail) emitEvent("update:open", detail["open"]);
62
- return root.value?.dispatchEvent(new CustomEvent(name, {
63
- bubbles: true,
64
- composed: true,
65
- ...declared[name],
66
- detail
67
- })) ?? true;
68
- }
69
- function read(name) {
70
- if (name === "internalOpen") return internalOpen.value;
71
- return props[name];
72
- }
73
- function write(name, value) {
74
- if (name === "internalOpen") {
75
- internalOpen.value = value;
76
- return true;
77
- }
78
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
79
- }
80
- const stops = [];
81
- const host = {
82
- get element() {
83
- return root.value;
33
+ 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) => [
34
+ "open",
35
+ "reason",
36
+ "trigger"
37
+ ].includes(key));
38
+ const dispatch = createDispatch(root, emit, {
39
+ checks: {
40
+ open: isOpenDetail,
41
+ close: isOpenDetail
84
42
  },
85
- state: new Proxy({}, {
86
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
87
- set: (_target, name, value) => typeof name === "string" && write(name, value)
88
- }),
89
- refs: {},
90
- elements: new Proxy({}, { get: (_target, name) => {
91
- if (typeof name !== "string" || root.value === null) return void 0;
92
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
93
- } }),
94
- signal(initialValue) {
95
- const value = shallowRef(initialValue);
96
- return {
97
- get: () => value.value,
98
- set: (next) => {
99
- if (!Object.is(value.value, next)) value.value = next;
100
- },
101
- update: (next) => {
102
- const updated = next(value.value);
103
- if (!Object.is(value.value, updated)) value.value = updated;
104
- }
105
- };
106
- },
107
- computed(compute) {
108
- const value = computed(compute);
109
- return { get: () => value.value };
110
- },
111
- effect(run) {
112
- const stop = watchEffect((onCleanup) => {
113
- const cleanup = run();
114
- if (typeof cleanup === "function") onCleanup(cleanup);
115
- }, { flush: "post" });
116
- stops.push(stop);
117
- return stop;
118
- },
119
- on(event, listener) {
120
- const element = root.value;
121
- element?.addEventListener(event, listener);
122
- const off = () => element?.removeEventListener(event, listener);
123
- stops.push(off);
124
- return off;
125
- },
126
- dispatch
127
- };
128
- let cleanup;
129
- onMounted(() => {
130
- Promise.resolve(controllerModule.default(host)).then((result) => {
131
- cleanup = result;
132
- });
43
+ modeled: ["open"]
133
44
  });
134
- onBeforeUnmount(() => {
135
- for (const stop of stops.splice(0)) stop();
136
- if (typeof cleanup === "function") cleanup();
45
+ useComponentHost(controllerModule.default, {
46
+ root,
47
+ dispatch,
48
+ props,
49
+ state: { internalOpen }
137
50
  });
138
51
  return (_ctx, _cache) => {
139
52
  return openBlock(), createElementBlock("span", mergeProps({ "data-component": "ui-popover" }, _ctx.$attrs, {
@@ -143,6 +56,6 @@ var UiPopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
143
56
  }), [createElementVNode("div", _hoisted_2, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 16, _hoisted_1);
144
57
  };
145
58
  }
146
- }), [["__scopeId", "data-v-c16079f0"]]);
59
+ }), [["__scopeId", "data-v-3675062e"]]);
147
60
  //#endregion
148
61
  export { UiPopover_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-radio/ui-radio.js";
4
5
  //#region .build/vue/UiRadio.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-ui-radio-state"];
@@ -45,100 +46,21 @@ var UiRadio_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
45
46
  const internalChecked = ref(false);
46
47
  /** The values the styles' :host-state() rules test. */
47
48
  const hostState = computed(() => [props.disabled && "disabled"].filter(Boolean).join(" "));
48
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
49
- function dispatch(name, detail) {
50
- const declared = { change: {
51
- bubbles: true,
52
- composed: true,
53
- cancelable: false
54
- } };
55
- 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) => [
56
- "checked",
57
- "value",
58
- "trigger"
59
- ].includes(key)) };
60
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
61
- const emitEvent = emit;
62
- emitEvent(name, detail);
63
- if (detail !== null && typeof detail === "object" && "checked" in detail) emitEvent("update:checked", detail["checked"]);
64
- if (detail !== null && typeof detail === "object" && "value" in detail) emitEvent("update:value", detail["value"]);
65
- return root.value?.dispatchEvent(new CustomEvent(name, {
66
- bubbles: true,
67
- composed: true,
68
- ...declared[name],
69
- detail
70
- })) ?? true;
71
- }
72
- function read(name) {
73
- if (name === "internalChecked") return internalChecked.value;
74
- return props[name];
75
- }
76
- function write(name, value) {
77
- if (name === "internalChecked") {
78
- internalChecked.value = value;
79
- return true;
80
- }
81
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
82
- }
83
- const stops = [];
84
- const host = {
85
- get element() {
86
- return root.value;
87
- },
88
- state: new Proxy({}, {
89
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
90
- set: (_target, name, value) => typeof name === "string" && write(name, value)
91
- }),
92
- refs: { get input() {
93
- return inputElement.value;
94
- } },
95
- elements: new Proxy({}, { get: (_target, name) => {
96
- if (typeof name !== "string" || root.value === null) return void 0;
97
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
98
- } }),
99
- signal(initialValue) {
100
- const value = shallowRef(initialValue);
101
- return {
102
- get: () => value.value,
103
- set: (next) => {
104
- if (!Object.is(value.value, next)) value.value = next;
105
- },
106
- update: (next) => {
107
- const updated = next(value.value);
108
- if (!Object.is(value.value, updated)) value.value = updated;
109
- }
110
- };
111
- },
112
- computed(compute) {
113
- const value = computed(compute);
114
- return { get: () => value.value };
115
- },
116
- effect(run) {
117
- const stop = watchEffect((onCleanup) => {
118
- const cleanup = run();
119
- if (typeof cleanup === "function") onCleanup(cleanup);
120
- }, { flush: "post" });
121
- stops.push(stop);
122
- return stop;
123
- },
124
- on(event, listener) {
125
- const element = root.value;
126
- element?.addEventListener(event, listener);
127
- const off = () => element?.removeEventListener(event, listener);
128
- stops.push(off);
129
- return off;
130
- },
131
- dispatch
132
- };
133
- let cleanup;
134
- onMounted(() => {
135
- Promise.resolve(controllerModule.default(host)).then((result) => {
136
- cleanup = result;
137
- });
49
+ 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) => [
50
+ "checked",
51
+ "value",
52
+ "trigger"
53
+ ].includes(key));
54
+ const dispatch = createDispatch(root, emit, {
55
+ checks: { change: isChangeDetail },
56
+ modeled: ["checked", "value"]
138
57
  });
139
- onBeforeUnmount(() => {
140
- for (const stop of stops.splice(0)) stop();
141
- if (typeof cleanup === "function") cleanup();
58
+ useComponentHost(controllerModule.default, {
59
+ root,
60
+ dispatch,
61
+ props,
62
+ refs: { input: inputElement },
63
+ state: { internalChecked }
142
64
  });
143
65
  return (_ctx, _cache) => {
144
66
  return openBlock(), createElementBlock("label", mergeProps({ "data-component": "ui-radio" }, _ctx.$attrs, {
@@ -156,6 +78,6 @@ var UiRadio_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
156
78
  }, null, 40, _hoisted_2), createElementVNode("span", _hoisted_3, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 16, _hoisted_1);
157
79
  };
158
80
  }
159
- }), [["__scopeId", "data-v-cb942e6f"]]);
81
+ }), [["__scopeId", "data-v-2c20c2e3"]]);
160
82
  //#endregion
161
83
  export { UiRadio_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, watchEffect } from "vue";
3
+ import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot, toDisplayString } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-radio-group/ui-radio-group.js";
4
5
  //#region .build/vue/UiRadioGroup.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-ui-radio-group-state"];
@@ -34,111 +35,28 @@ var UiRadioGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
34
35
  const internalValue = ref("");
35
36
  /** The values the styles' :host-state() rules test. */
36
37
  const hostState = computed(() => [props.orientation && `orientation orientation=${props.orientation}`].filter(Boolean).join(" "));
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
- select: {
41
- bubbles: true,
42
- composed: true,
43
- cancelable: false
44
- },
45
- change: {
46
- bubbles: true,
47
- composed: true,
48
- cancelable: false
49
- }
50
- };
51
- const checks = {
52
- 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) => [
53
- "value",
54
- "previousValue",
55
- "trigger"
56
- ].includes(key)),
57
- 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) => [
58
- "checked",
59
- "value",
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" && "value" in detail) emitEvent("update:value", detail["value"]);
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 === "internalValue") return internalValue.value;
76
- return props[name];
77
- }
78
- function write(name, value) {
79
- if (name === "internalValue") {
80
- internalValue.value = value;
81
- return true;
82
- }
83
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
84
- }
85
- const stops = [];
86
- const host = {
87
- get element() {
88
- return root.value;
38
+ 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) => [
39
+ "value",
40
+ "previousValue",
41
+ "trigger"
42
+ ].includes(key));
43
+ 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) => [
44
+ "checked",
45
+ "value",
46
+ "trigger"
47
+ ].includes(key));
48
+ const dispatch = createDispatch(root, emit, {
49
+ checks: {
50
+ select: isSelectDetail,
51
+ change: isChangeDetail
89
52
  },
90
- state: new Proxy({}, {
91
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
92
- set: (_target, name, value) => typeof name === "string" && write(name, value)
93
- }),
94
- refs: {},
95
- elements: new Proxy({}, { get: (_target, name) => {
96
- if (typeof name !== "string" || root.value === null) return void 0;
97
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
98
- } }),
99
- signal(initialValue) {
100
- const value = shallowRef(initialValue);
101
- return {
102
- get: () => value.value,
103
- set: (next) => {
104
- if (!Object.is(value.value, next)) value.value = next;
105
- },
106
- update: (next) => {
107
- const updated = next(value.value);
108
- if (!Object.is(value.value, updated)) value.value = updated;
109
- }
110
- };
111
- },
112
- computed(compute) {
113
- const value = computed(compute);
114
- return { get: () => value.value };
115
- },
116
- effect(run) {
117
- const stop = watchEffect((onCleanup) => {
118
- const cleanup = run();
119
- if (typeof cleanup === "function") onCleanup(cleanup);
120
- }, { flush: "post" });
121
- stops.push(stop);
122
- return stop;
123
- },
124
- on(event, listener) {
125
- const element = root.value;
126
- element?.addEventListener(event, listener);
127
- const off = () => element?.removeEventListener(event, listener);
128
- stops.push(off);
129
- return off;
130
- },
131
- dispatch
132
- };
133
- let cleanup;
134
- onMounted(() => {
135
- Promise.resolve(controllerModule.default(host)).then((result) => {
136
- cleanup = result;
137
- });
53
+ modeled: ["value"]
138
54
  });
139
- onBeforeUnmount(() => {
140
- for (const stop of stops.splice(0)) stop();
141
- if (typeof cleanup === "function") cleanup();
55
+ useComponentHost(controllerModule.default, {
56
+ root,
57
+ dispatch,
58
+ props,
59
+ state: { internalValue }
142
60
  });
143
61
  return (_ctx, _cache) => {
144
62
  return openBlock(), createElementBlock("fieldset", mergeProps({
@@ -151,6 +69,6 @@ var UiRadioGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
151
69
  }), [createElementVNode("legend", null, toDisplayString(__props.label), 1), renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
152
70
  };
153
71
  }
154
- }), [["__scopeId", "data-v-df092584"]]);
72
+ }), [["__scopeId", "data-v-cd639df6"]]);
155
73
  //#endregion
156
74
  export { UiRadioGroup_default as t };
@@ -28,6 +28,6 @@ var UiReel_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
28
28
  }, _ctx.$attrs, { "data-ui-reel-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1);
29
29
  };
30
30
  }
31
- }), [["__scopeId", "data-v-0dde8279"]]);
31
+ }), [["__scopeId", "data-v-0d41608a"]]);
32
32
  //#endregion
33
33
  export { UiReel_default as t };
@@ -45,6 +45,6 @@ var UiSearchResultRow_default = /*#__PURE__*/ _plugin_vue_export_helper_default(
45
45
  ], 16, _hoisted_1);
46
46
  };
47
47
  }
48
- }), [["__scopeId", "data-v-7d88a5d4"]]);
48
+ }), [["__scopeId", "data-v-9f29c4b0"]]);
49
49
  //#endregion
50
50
  export { UiSearchResultRow_default as t };