@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, useTemplateRef, watchEffect } from "vue";
3
+ import { createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot, useTemplateRef } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-search-shell/ui-search-shell.js";
4
5
  //#region .build/vue/UiSearchShell.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["aria-label"];
@@ -35,99 +36,21 @@ var UiSearchShell_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
35
36
  const root = ref(null);
36
37
  const dialogElement = useTemplateRef("dialog");
37
38
  const internalOpen = ref(false);
38
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
39
- function dispatch(name, detail) {
40
- const declared = { close: {
41
- bubbles: true,
42
- composed: true,
43
- cancelable: false
44
- } };
45
- const checks = { 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) => [
46
- "open",
47
- "reason",
48
- "trigger"
49
- ].includes(key)) };
50
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
51
- const emitEvent = emit;
52
- emitEvent(name, detail);
53
- if (detail !== null && typeof detail === "object" && "open" in detail) emitEvent("update:open", detail["open"]);
54
- return root.value?.dispatchEvent(new CustomEvent(name, {
55
- bubbles: true,
56
- composed: true,
57
- ...declared[name],
58
- detail
59
- })) ?? true;
60
- }
61
- function read(name) {
62
- if (name === "internalOpen") return internalOpen.value;
63
- return props[name];
64
- }
65
- function write(name, value) {
66
- if (name === "internalOpen") {
67
- internalOpen.value = value;
68
- return true;
69
- }
70
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
71
- }
72
- const stops = [];
73
- const host = {
74
- get element() {
75
- return root.value;
76
- },
77
- state: new Proxy({}, {
78
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
79
- set: (_target, name, value) => typeof name === "string" && write(name, value)
80
- }),
81
- refs: { get dialog() {
82
- return dialogElement.value;
83
- } },
84
- elements: new Proxy({}, { get: (_target, name) => {
85
- if (typeof name !== "string" || root.value === null) return void 0;
86
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
87
- } }),
88
- signal(initialValue) {
89
- const value = shallowRef(initialValue);
90
- return {
91
- get: () => value.value,
92
- set: (next) => {
93
- if (!Object.is(value.value, next)) value.value = next;
94
- },
95
- update: (next) => {
96
- const updated = next(value.value);
97
- if (!Object.is(value.value, updated)) value.value = updated;
98
- }
99
- };
100
- },
101
- computed(compute) {
102
- const value = computed(compute);
103
- return { get: () => value.value };
104
- },
105
- effect(run) {
106
- const stop = watchEffect((onCleanup) => {
107
- const cleanup = run();
108
- if (typeof cleanup === "function") onCleanup(cleanup);
109
- }, { flush: "post" });
110
- stops.push(stop);
111
- return stop;
112
- },
113
- on(event, listener) {
114
- const element = root.value;
115
- element?.addEventListener(event, listener);
116
- const off = () => element?.removeEventListener(event, listener);
117
- stops.push(off);
118
- return off;
119
- },
120
- dispatch
121
- };
122
- let cleanup;
123
- onMounted(() => {
124
- Promise.resolve(controllerModule.default(host)).then((result) => {
125
- cleanup = result;
126
- });
39
+ 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) => [
40
+ "open",
41
+ "reason",
42
+ "trigger"
43
+ ].includes(key));
44
+ const dispatch = createDispatch(root, emit, {
45
+ checks: { close: isCloseDetail },
46
+ modeled: ["open"]
127
47
  });
128
- onBeforeUnmount(() => {
129
- for (const stop of stops.splice(0)) stop();
130
- if (typeof cleanup === "function") cleanup();
48
+ useComponentHost(controllerModule.default, {
49
+ root,
50
+ dispatch,
51
+ props,
52
+ refs: { dialog: dialogElement },
53
+ state: { internalOpen }
131
54
  });
132
55
  return (_ctx, _cache) => {
133
56
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-search-shell" }, _ctx.$attrs, {
@@ -144,6 +67,6 @@ var UiSearchShell_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
144
67
  ])], 8, _hoisted_1)], 16);
145
68
  };
146
69
  }
147
- }), [["__scopeId", "data-v-976b649d"]]);
70
+ }), [["__scopeId", "data-v-d27d0d8a"]]);
148
71
  //#endregion
149
72
  export { UiSearchShell_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, renderSlot, shallowRef, vModelSelect, watchEffect, withDirectives } from "vue";
3
+ import { computed, createElementBlock, defineComponent, mergeProps, openBlock, ref, renderSlot, vModelSelect, withDirectives } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-select/ui-select.js";
4
5
  //#region .build/vue/UiSelect.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = [
@@ -42,77 +43,11 @@ var UiSelect_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
42
43
  set: (value) => emit("update:modelValue", value)
43
44
  });
44
45
  const root = ref(null);
45
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
46
- function dispatch(name, detail) {
47
- return root.value?.dispatchEvent(new CustomEvent(name, {
48
- bubbles: true,
49
- composed: true,
50
- detail
51
- })) ?? true;
52
- }
53
- function read(name) {
54
- return props[name];
55
- }
56
- function write(name, value) {
57
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
58
- }
59
- const stops = [];
60
- const host = {
61
- get element() {
62
- return root.value;
63
- },
64
- state: new Proxy({}, {
65
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
66
- set: (_target, name, value) => typeof name === "string" && write(name, value)
67
- }),
68
- refs: {},
69
- elements: new Proxy({}, { get: (_target, name) => {
70
- if (typeof name !== "string" || root.value === null) return void 0;
71
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
72
- } }),
73
- signal(initialValue) {
74
- const value = shallowRef(initialValue);
75
- return {
76
- get: () => value.value,
77
- set: (next) => {
78
- if (!Object.is(value.value, next)) value.value = next;
79
- },
80
- update: (next) => {
81
- const updated = next(value.value);
82
- if (!Object.is(value.value, updated)) value.value = updated;
83
- }
84
- };
85
- },
86
- computed(compute) {
87
- const value = computed(compute);
88
- return { get: () => value.value };
89
- },
90
- effect(run) {
91
- const stop = watchEffect((onCleanup) => {
92
- const cleanup = run();
93
- if (typeof cleanup === "function") onCleanup(cleanup);
94
- }, { flush: "post" });
95
- stops.push(stop);
96
- return stop;
97
- },
98
- on(event, listener) {
99
- const element = root.value;
100
- element?.addEventListener(event, listener);
101
- const off = () => element?.removeEventListener(event, listener);
102
- stops.push(off);
103
- return off;
104
- },
105
- dispatch
106
- };
107
- let cleanup;
108
- onMounted(() => {
109
- Promise.resolve(controllerModule.default(host)).then((result) => {
110
- cleanup = result;
111
- });
112
- });
113
- onBeforeUnmount(() => {
114
- for (const stop of stops.splice(0)) stop();
115
- if (typeof cleanup === "function") cleanup();
46
+ const dispatch = createDispatch(root);
47
+ useComponentHost(controllerModule.default, {
48
+ root,
49
+ dispatch,
50
+ props
116
51
  });
117
52
  return (_ctx, _cache) => {
118
53
  return withDirectives((openBlock(), createElementBlock("select", mergeProps({ "data-component": "ui-select" }, _ctx.$attrs, {
@@ -126,6 +61,6 @@ var UiSelect_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
126
61
  }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1)), [[vModelSelect, model.value]]);
127
62
  };
128
63
  }
129
- }), [["__scopeId", "data-v-01335c35"]]);
64
+ }), [["__scopeId", "data-v-d36968b7"]]);
130
65
  //#endregion
131
66
  export { UiSelect_default as t };
@@ -13,6 +13,6 @@ var UiSeparator_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
13
13
  return openBlock(), createElementBlock("hr", mergeProps({ "data-component": "ui-separator" }, _ctx.$attrs, { "aria-orientation": __props.orientation }), null, 16, _hoisted_1);
14
14
  };
15
15
  }
16
- }), [["__scopeId", "data-v-f0034397"]]);
16
+ }), [["__scopeId", "data-v-f07c3800"]]);
17
17
  //#endregion
18
18
  export { UiSeparator_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-sidebar/ui-sidebar.js";
4
5
  //#region .build/vue/UiSidebar.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-ui-sidebar-state"];
@@ -41,114 +42,28 @@ var UiSidebar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
41
42
  const drawer = ref(false);
42
43
  /** The values the styles' :host-state() rules test. */
43
44
  const hostState = computed(() => [props.side && `side side=${props.side}`, internalCollapsed.value && "internalCollapsed"].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
- resize: {
48
- bubbles: true,
49
- composed: true,
50
- cancelable: false
51
- },
52
- toggle: {
53
- bubbles: true,
54
- composed: true,
55
- cancelable: false
56
- }
57
- };
58
- const checks = {
59
- resize: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["width"] === "number" && Number.isFinite(detail["width"]) && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => ["width", "trigger"].includes(key)),
60
- toggle: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["mode"] === "docked" || detail["mode"] === "drawer") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
61
- "open",
62
- "mode",
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" && "width" in detail) emitEvent("update:width", detail["width"]);
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 === "internalCollapsed") return internalCollapsed.value;
79
- if (name === "drawer") return drawer.value;
80
- return props[name];
81
- }
82
- function write(name, value) {
83
- if (name === "internalCollapsed") {
84
- internalCollapsed.value = value;
85
- return true;
86
- }
87
- if (name === "drawer") {
88
- drawer.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;
97
- },
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: { get resizer() {
103
- return resizerElement.value;
104
- } },
105
- elements: new Proxy({}, { get: (_target, name) => {
106
- if (typeof name !== "string" || root.value === null) return void 0;
107
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
108
- } }),
109
- signal(initialValue) {
110
- const value = shallowRef(initialValue);
111
- return {
112
- get: () => value.value,
113
- set: (next) => {
114
- if (!Object.is(value.value, next)) value.value = next;
115
- },
116
- update: (next) => {
117
- const updated = next(value.value);
118
- if (!Object.is(value.value, updated)) value.value = updated;
119
- }
120
- };
121
- },
122
- computed(compute) {
123
- const value = computed(compute);
124
- return { get: () => value.value };
45
+ const isResizeDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["width"] === "number" && Number.isFinite(detail["width"]) && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => ["width", "trigger"].includes(key));
46
+ const isToggleDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["mode"] === "docked" || detail["mode"] === "drawer") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
47
+ "open",
48
+ "mode",
49
+ "trigger"
50
+ ].includes(key));
51
+ const dispatch = createDispatch(root, emit, {
52
+ checks: {
53
+ resize: isResizeDetail,
54
+ toggle: isToggleDetail
125
55
  },
126
- effect(run) {
127
- const stop = watchEffect((onCleanup) => {
128
- const cleanup = run();
129
- if (typeof cleanup === "function") onCleanup(cleanup);
130
- }, { flush: "post" });
131
- stops.push(stop);
132
- return stop;
133
- },
134
- on(event, listener) {
135
- const element = root.value;
136
- element?.addEventListener(event, listener);
137
- const off = () => element?.removeEventListener(event, listener);
138
- stops.push(off);
139
- return off;
140
- },
141
- dispatch
142
- };
143
- let cleanup;
144
- onMounted(() => {
145
- Promise.resolve(controllerModule.default(host)).then((result) => {
146
- cleanup = result;
147
- });
56
+ modeled: ["width"]
148
57
  });
149
- onBeforeUnmount(() => {
150
- for (const stop of stops.splice(0)) stop();
151
- if (typeof cleanup === "function") cleanup();
58
+ useComponentHost(controllerModule.default, {
59
+ root,
60
+ dispatch,
61
+ props,
62
+ refs: { resizer: resizerElement },
63
+ state: {
64
+ internalCollapsed,
65
+ drawer
66
+ }
152
67
  });
153
68
  return (_ctx, _cache) => {
154
69
  return openBlock(), createElementBlock("aside", mergeProps({ "data-component": "ui-sidebar" }, _ctx.$attrs, {
@@ -170,6 +85,6 @@ var UiSidebar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
170
85
  }, null, -1)])], 8, _hoisted_3)], 16, _hoisted_1);
171
86
  };
172
87
  }
173
- }), [["__scopeId", "data-v-a2e22569"]]);
88
+ }), [["__scopeId", "data-v-4bcdb743"]]);
174
89
  //#endregion
175
90
  export { UiSidebar_default as t };
@@ -24,6 +24,6 @@ var UiStack_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
24
24
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-stack" }, _ctx.$attrs, { "data-ui-stack-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
25
25
  };
26
26
  }
27
- }), [["__scopeId", "data-v-9a903e2b"]]);
27
+ }), [["__scopeId", "data-v-43678d8b"]]);
28
28
  //#endregion
29
29
  export { UiStack_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-switch/ui-switch.js";
4
5
  //#region .build/vue/UiSwitch.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-ui-switch-state"];
@@ -43,100 +44,21 @@ var UiSwitch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
43
44
  const internalChecked = ref(false);
44
45
  /** The values the styles' :host-state() rules test. */
45
46
  const hostState = computed(() => [props.disabled && "disabled"].filter(Boolean).join(" "));
46
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
47
- function dispatch(name, detail) {
48
- const declared = { change: {
49
- bubbles: true,
50
- composed: true,
51
- cancelable: false
52
- } };
53
- 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) => [
54
- "checked",
55
- "value",
56
- "trigger"
57
- ].includes(key)) };
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" && "checked" in detail) emitEvent("update:checked", detail["checked"]);
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 === "internalChecked") return internalChecked.value;
72
- return props[name];
73
- }
74
- function write(name, value) {
75
- if (name === "internalChecked") {
76
- internalChecked.value = value;
77
- return true;
78
- }
79
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
80
- }
81
- const stops = [];
82
- const host = {
83
- get element() {
84
- return root.value;
85
- },
86
- state: new Proxy({}, {
87
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
88
- set: (_target, name, value) => typeof name === "string" && write(name, value)
89
- }),
90
- refs: { get input() {
91
- return inputElement.value;
92
- } },
93
- elements: new Proxy({}, { get: (_target, name) => {
94
- if (typeof name !== "string" || root.value === null) return void 0;
95
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
96
- } }),
97
- signal(initialValue) {
98
- const value = shallowRef(initialValue);
99
- return {
100
- get: () => value.value,
101
- set: (next) => {
102
- if (!Object.is(value.value, next)) value.value = next;
103
- },
104
- update: (next) => {
105
- const updated = next(value.value);
106
- if (!Object.is(value.value, updated)) value.value = updated;
107
- }
108
- };
109
- },
110
- computed(compute) {
111
- const value = computed(compute);
112
- return { get: () => value.value };
113
- },
114
- effect(run) {
115
- const stop = watchEffect((onCleanup) => {
116
- const cleanup = run();
117
- if (typeof cleanup === "function") onCleanup(cleanup);
118
- }, { flush: "post" });
119
- stops.push(stop);
120
- return stop;
121
- },
122
- on(event, listener) {
123
- const element = root.value;
124
- element?.addEventListener(event, listener);
125
- const off = () => element?.removeEventListener(event, listener);
126
- stops.push(off);
127
- return off;
128
- },
129
- dispatch
130
- };
131
- let cleanup;
132
- onMounted(() => {
133
- Promise.resolve(controllerModule.default(host)).then((result) => {
134
- cleanup = result;
135
- });
47
+ 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) => [
48
+ "checked",
49
+ "value",
50
+ "trigger"
51
+ ].includes(key));
52
+ const dispatch = createDispatch(root, emit, {
53
+ checks: { change: isChangeDetail },
54
+ modeled: ["checked", "value"]
136
55
  });
137
- onBeforeUnmount(() => {
138
- for (const stop of stops.splice(0)) stop();
139
- if (typeof cleanup === "function") cleanup();
56
+ useComponentHost(controllerModule.default, {
57
+ root,
58
+ dispatch,
59
+ props,
60
+ refs: { input: inputElement },
61
+ state: { internalChecked }
140
62
  });
141
63
  return (_ctx, _cache) => {
142
64
  return openBlock(), createElementBlock("label", mergeProps({ "data-component": "ui-switch" }, _ctx.$attrs, {
@@ -154,6 +76,6 @@ var UiSwitch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
154
76
  }, null, 40, _hoisted_2), createElementVNode("span", _hoisted_3, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 16, _hoisted_1);
155
77
  };
156
78
  }
157
- }), [["__scopeId", "data-v-44eb48fd"]]);
79
+ }), [["__scopeId", "data-v-529fe437"]]);
158
80
  //#endregion
159
81
  export { UiSwitch_default as t };
@@ -24,6 +24,6 @@ var UiSwitcher_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
24
24
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-switcher" }, _ctx.$attrs, { "data-ui-switcher-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1);
25
25
  };
26
26
  }
27
- }), [["__scopeId", "data-v-4ba623e1"]]);
27
+ }), [["__scopeId", "data-v-3ed2c685"]]);
28
28
  //#endregion
29
29
  export { UiSwitcher_default as t };