@threadlabs/looma 0.6.4 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/components/ui-button/ui-button.html +103 -81
  2. package/components/ui-checkbox/ui-checkbox.html +4 -1
  3. package/components/ui-combobox/ui-combobox.html +40 -3
  4. package/components/ui-combobox/ui-combobox.js +27 -5
  5. package/components/ui-select/ui-select.html +3 -5
  6. package/dist/index.js +1 -1
  7. package/package.json +2 -2
  8. package/styles/ui-affordance-scope.css +1 -1
  9. package/styles/ui-avatar-group.css +1 -1
  10. package/styles/ui-avatar.css +1 -1
  11. package/styles/ui-badge.css +1 -1
  12. package/styles/ui-button.css +112 -80
  13. package/styles/ui-callout.css +1 -1
  14. package/styles/ui-checkbox.css +5 -2
  15. package/styles/ui-cluster.css +1 -1
  16. package/styles/ui-combobox.css +38 -1
  17. package/styles/ui-container.css +1 -1
  18. package/styles/ui-context-menu.css +1 -1
  19. package/styles/ui-dialog.css +1 -1
  20. package/styles/ui-disclosure.css +1 -1
  21. package/styles/ui-editable.css +1 -1
  22. package/styles/ui-editor-insert-table-grid.css +1 -1
  23. package/styles/ui-editor-mention-menu.css +1 -1
  24. package/styles/ui-editor-slash-menu.css +1 -1
  25. package/styles/ui-editor-table-context-menu.css +1 -1
  26. package/styles/ui-editor-table-overlay.css +1 -1
  27. package/styles/ui-editor-table-toolbar.css +1 -1
  28. package/styles/ui-editor-toolbar.css +1 -1
  29. package/styles/ui-floating-action-button.css +1 -1
  30. package/styles/ui-form-field.css +1 -1
  31. package/styles/ui-grid.css +1 -1
  32. package/styles/ui-icon-button.css +1 -1
  33. package/styles/ui-icon.css +1 -1
  34. package/styles/ui-input.css +1 -1
  35. package/styles/ui-menu-item.css +1 -1
  36. package/styles/ui-menu.css +1 -1
  37. package/styles/ui-popover.css +1 -1
  38. package/styles/ui-radio-group.css +1 -1
  39. package/styles/ui-radio.css +1 -1
  40. package/styles/ui-reel.css +1 -1
  41. package/styles/ui-search-result-row.css +1 -1
  42. package/styles/ui-search-shell.css +1 -1
  43. package/styles/ui-select.css +4 -5
  44. package/styles/ui-separator.css +1 -1
  45. package/styles/ui-sidebar.css +1 -1
  46. package/styles/ui-stack.css +1 -1
  47. package/styles/ui-switch.css +1 -1
  48. package/styles/ui-switcher.css +1 -1
  49. package/styles/ui-tabs.css +1 -1
  50. package/styles/ui-textarea.css +1 -1
  51. package/styles/ui-toast-region.css +1 -1
  52. package/styles/ui-tooltip.css +1 -1
  53. package/styles/ui-top-bar.css +1 -1
  54. package/styles/ui-tree-item.css +1 -1
  55. package/styles/ui-tree.css +1 -1
  56. package/theme-dark.css +6 -30
  57. package/theme-high-contrast.css +30 -20
  58. package/theme-light.css +2 -16
  59. package/tokens.css +33 -24
  60. package/vanilla/UiAffordanceScope.d.ts +1 -1
  61. package/vanilla/UiAffordanceScope.js +1 -1
  62. package/vanilla/UiAvatar.d.ts +1 -1
  63. package/vanilla/UiAvatar.js +1 -1
  64. package/vanilla/UiAvatarGroup.d.ts +1 -1
  65. package/vanilla/UiAvatarGroup.js +1 -1
  66. package/vanilla/UiBadge.d.ts +1 -1
  67. package/vanilla/UiBadge.js +1 -1
  68. package/vanilla/UiButton.d.ts +2 -2
  69. package/vanilla/UiButton.js +2 -2
  70. package/vanilla/UiCallout.d.ts +1 -1
  71. package/vanilla/UiCallout.js +1 -1
  72. package/vanilla/UiCheckbox.d.ts +1 -1
  73. package/vanilla/UiCheckbox.js +1 -1
  74. package/vanilla/UiCluster.d.ts +1 -1
  75. package/vanilla/UiCluster.js +1 -1
  76. package/vanilla/UiCombobox.d.ts +1 -1
  77. package/vanilla/UiCombobox.js +2 -2
  78. package/vanilla/UiContainer.d.ts +1 -1
  79. package/vanilla/UiContainer.js +1 -1
  80. package/vanilla/UiContextMenu.d.ts +1 -1
  81. package/vanilla/UiContextMenu.js +1 -1
  82. package/vanilla/UiDialog.d.ts +1 -1
  83. package/vanilla/UiDialog.js +1 -1
  84. package/vanilla/UiDisclosure.d.ts +1 -1
  85. package/vanilla/UiDisclosure.js +1 -1
  86. package/vanilla/UiEditable.d.ts +1 -1
  87. package/vanilla/UiEditable.js +1 -1
  88. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  89. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  90. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  91. package/vanilla/UiEditorMentionMenu.js +1 -1
  92. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  93. package/vanilla/UiEditorSlashMenu.js +1 -1
  94. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  95. package/vanilla/UiEditorTableContextMenu.js +1 -1
  96. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  97. package/vanilla/UiEditorTableOverlay.js +1 -1
  98. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  99. package/vanilla/UiEditorTableToolbar.js +1 -1
  100. package/vanilla/UiEditorToolbar.d.ts +1 -1
  101. package/vanilla/UiEditorToolbar.js +1 -1
  102. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  103. package/vanilla/UiFloatingActionButton.js +1 -1
  104. package/vanilla/UiFormField.d.ts +1 -1
  105. package/vanilla/UiFormField.js +1 -1
  106. package/vanilla/UiGrid.d.ts +1 -1
  107. package/vanilla/UiGrid.js +1 -1
  108. package/vanilla/UiIcon.d.ts +1 -1
  109. package/vanilla/UiIcon.js +1 -1
  110. package/vanilla/UiIconButton.d.ts +1 -1
  111. package/vanilla/UiIconButton.js +1 -1
  112. package/vanilla/UiInput.d.ts +1 -1
  113. package/vanilla/UiInput.js +1 -1
  114. package/vanilla/UiMenu.d.ts +1 -1
  115. package/vanilla/UiMenu.js +1 -1
  116. package/vanilla/UiMenuItem.d.ts +1 -1
  117. package/vanilla/UiMenuItem.js +1 -1
  118. package/vanilla/UiPopover.d.ts +1 -1
  119. package/vanilla/UiPopover.js +1 -1
  120. package/vanilla/UiRadio.d.ts +1 -1
  121. package/vanilla/UiRadio.js +1 -1
  122. package/vanilla/UiRadioGroup.d.ts +1 -1
  123. package/vanilla/UiRadioGroup.js +1 -1
  124. package/vanilla/UiReel.d.ts +1 -1
  125. package/vanilla/UiReel.js +1 -1
  126. package/vanilla/UiSearchResultRow.d.ts +1 -1
  127. package/vanilla/UiSearchResultRow.js +1 -1
  128. package/vanilla/UiSearchShell.d.ts +1 -1
  129. package/vanilla/UiSearchShell.js +1 -1
  130. package/vanilla/UiSelect.d.ts +1 -2
  131. package/vanilla/UiSelect.js +4 -7
  132. package/vanilla/UiSeparator.d.ts +1 -1
  133. package/vanilla/UiSeparator.js +1 -1
  134. package/vanilla/UiSidebar.d.ts +1 -1
  135. package/vanilla/UiSidebar.js +1 -1
  136. package/vanilla/UiStack.d.ts +1 -1
  137. package/vanilla/UiStack.js +1 -1
  138. package/vanilla/UiSwitch.d.ts +1 -1
  139. package/vanilla/UiSwitch.js +1 -1
  140. package/vanilla/UiSwitcher.d.ts +1 -1
  141. package/vanilla/UiSwitcher.js +1 -1
  142. package/vanilla/UiTabs.d.ts +1 -1
  143. package/vanilla/UiTabs.js +1 -1
  144. package/vanilla/UiTextarea.d.ts +1 -1
  145. package/vanilla/UiTextarea.js +1 -1
  146. package/vanilla/UiToastRegion.d.ts +1 -1
  147. package/vanilla/UiToastRegion.js +1 -1
  148. package/vanilla/UiTooltip.d.ts +1 -1
  149. package/vanilla/UiTooltip.js +1 -1
  150. package/vanilla/UiTopBar.d.ts +1 -1
  151. package/vanilla/UiTopBar.js +1 -1
  152. package/vanilla/UiTree.d.ts +1 -1
  153. package/vanilla/UiTree.js +1 -1
  154. package/vanilla/UiTreeItem.d.ts +1 -1
  155. package/vanilla/UiTreeItem.js +1 -1
  156. package/vue/UiAffordanceScope.vue +8 -84
  157. package/vue/UiAvatar.d.ts +1 -1
  158. package/vue/UiAvatar.vue +9 -106
  159. package/vue/UiAvatarGroup.vue +9 -96
  160. package/vue/UiBadge.vue +1 -1
  161. package/vue/UiButton.d.ts +2 -2
  162. package/vue/UiButton.vue +104 -97
  163. package/vue/UiCallout.vue +1 -1
  164. package/vue/UiCheckbox.vue +26 -124
  165. package/vue/UiCluster.vue +1 -1
  166. package/vue/UiCombobox.d.ts +1 -1
  167. package/vue/UiCombobox.vue +270 -479
  168. package/vue/UiContainer.vue +1 -1
  169. package/vue/UiContextMenu.vue +34 -141
  170. package/vue/UiDialog.vue +25 -126
  171. package/vue/UiDisclosure.vue +26 -138
  172. package/vue/UiEditable.vue +46 -158
  173. package/vue/UiEditorInsertTableGrid.vue +19 -138
  174. package/vue/UiEditorMentionMenu.vue +17 -124
  175. package/vue/UiEditorSlashMenu.vue +17 -109
  176. package/vue/UiEditorTableContextMenu.vue +34 -122
  177. package/vue/UiEditorTableOverlay.vue +61 -167
  178. package/vue/UiEditorTableToolbar.vue +34 -142
  179. package/vue/UiEditorToolbar.vue +1 -1
  180. package/vue/UiFloatingActionButton.vue +1 -1
  181. package/vue/UiFormField.vue +7 -79
  182. package/vue/UiGrid.vue +1 -1
  183. package/vue/UiIcon.vue +8 -84
  184. package/vue/UiIconButton.vue +7 -79
  185. package/vue/UiInput.vue +7 -79
  186. package/vue/UiMenu.vue +42 -127
  187. package/vue/UiMenuItem.vue +1 -1
  188. package/vue/UiPopover.vue +25 -121
  189. package/vue/UiRadio.vue +22 -123
  190. package/vue/UiRadioGroup.d.ts +1 -1
  191. package/vue/UiRadioGroup.vue +32 -119
  192. package/vue/UiReel.vue +1 -1
  193. package/vue/UiSearchResultRow.vue +1 -1
  194. package/vue/UiSearchShell.vue +25 -121
  195. package/vue/UiSelect.d.ts +0 -2
  196. package/vue/UiSelect.vue +9 -85
  197. package/vue/UiSeparator.vue +1 -1
  198. package/vue/UiSidebar.vue +32 -133
  199. package/vue/UiStack.vue +1 -1
  200. package/vue/UiSwitch.vue +22 -123
  201. package/vue/UiSwitcher.vue +1 -1
  202. package/vue/UiTabs.vue +24 -128
  203. package/vue/UiTextarea.vue +7 -79
  204. package/vue/UiToastRegion.vue +37 -126
  205. package/vue/UiTooltip.vue +25 -124
  206. package/vue/UiTopBar.vue +1 -1
  207. package/vue/UiTree.vue +56 -137
  208. package/vue/UiTreeItem.vue +28 -144
  209. package/vue/chunks/UiAffordanceScope.js +9 -78
  210. package/vue/chunks/UiAvatar.js +13 -89
  211. package/vue/chunks/UiAvatarGroup.js +10 -80
  212. package/vue/chunks/UiBadge.js +1 -1
  213. package/vue/chunks/UiButton.js +3 -3
  214. package/vue/chunks/UiCallout.js +1 -1
  215. package/vue/chunks/UiCheckbox.js +17 -95
  216. package/vue/chunks/UiCluster.js +1 -1
  217. package/vue/chunks/UiCombobox.js +115 -326
  218. package/vue/chunks/UiContainer.js +1 -1
  219. package/vue/chunks/UiContextMenu.js +21 -113
  220. package/vue/chunks/UiDialog.js +20 -99
  221. package/vue/chunks/UiDisclosure.js +22 -112
  222. package/vue/chunks/UiEditable.js +32 -128
  223. package/vue/chunks/UiEditorInsertTableGrid.js +22 -116
  224. package/vue/chunks/UiEditorMentionMenu.js +18 -116
  225. package/vue/chunks/UiEditorSlashMenu.js +15 -101
  226. package/vue/chunks/UiEditorTableContextMenu.js +12 -91
  227. package/vue/chunks/UiEditorTableOverlay.js +29 -120
  228. package/vue/chunks/UiEditorTableToolbar.js +16 -111
  229. package/vue/chunks/UiEditorToolbar.js +1 -1
  230. package/vue/chunks/UiFloatingActionButton.js +1 -1
  231. package/vue/chunks/UiFormField.js +8 -73
  232. package/vue/chunks/UiGrid.js +1 -1
  233. package/vue/chunks/UiIcon.js +9 -78
  234. package/vue/chunks/UiIconButton.js +8 -73
  235. package/vue/chunks/UiInput.js +8 -73
  236. package/vue/chunks/UiMenu.js +25 -111
  237. package/vue/chunks/UiMenuItem.js +1 -1
  238. package/vue/chunks/UiPopover.js +18 -105
  239. package/vue/chunks/UiRadio.js +17 -95
  240. package/vue/chunks/UiRadioGroup.js +23 -105
  241. package/vue/chunks/UiReel.js +1 -1
  242. package/vue/chunks/UiSearchResultRow.js +1 -1
  243. package/vue/chunks/UiSearchShell.js +17 -94
  244. package/vue/chunks/UiSelect.js +8 -79
  245. package/vue/chunks/UiSeparator.js +1 -1
  246. package/vue/chunks/UiSidebar.js +23 -108
  247. package/vue/chunks/UiStack.js +1 -1
  248. package/vue/chunks/UiSwitch.js +17 -95
  249. package/vue/chunks/UiSwitcher.js +1 -1
  250. package/vue/chunks/UiTabs.js +22 -103
  251. package/vue/chunks/UiTextarea.js +8 -73
  252. package/vue/chunks/UiToastRegion.js +27 -112
  253. package/vue/chunks/UiTooltip.js +18 -106
  254. package/vue/chunks/UiTopBar.js +1 -1
  255. package/vue/chunks/UiTree.js +31 -109
  256. package/vue/chunks/UiTreeItem.js +29 -119
  257. package/vue/chunks/host.js +101 -0
  258. package/vue/components.css +844 -797
  259. package/vue/host.ts +154 -0
@@ -1,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 };
@@ -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,11 +1,11 @@
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 = [
6
7
  "disabled",
7
8
  "required",
8
- "multiple",
9
9
  "aria-invalid"
10
10
  ];
11
11
  //#endregion
@@ -22,10 +22,6 @@ var UiSelect_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
22
22
  type: Boolean,
23
23
  default: false
24
24
  },
25
- multiple: {
26
- type: Boolean,
27
- default: false
28
- },
29
25
  required: {
30
26
  type: Boolean,
31
27
  default: false
@@ -42,83 +38,16 @@ var UiSelect_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
42
38
  set: (value) => emit("update:modelValue", value)
43
39
  });
44
40
  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();
41
+ const dispatch = createDispatch(root);
42
+ useComponentHost(controllerModule.default, {
43
+ root,
44
+ dispatch,
45
+ props
116
46
  });
117
47
  return (_ctx, _cache) => {
118
48
  return withDirectives((openBlock(), createElementBlock("select", mergeProps({ "data-component": "ui-select" }, _ctx.$attrs, {
119
49
  disabled: __props.disabled,
120
50
  required: __props.required,
121
- multiple: __props.multiple,
122
51
  "aria-invalid": __props.invalid,
123
52
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
124
53
  ref_key: "root",
@@ -126,6 +55,6 @@ var UiSelect_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
126
55
  }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1)), [[vModelSelect, model.value]]);
127
56
  };
128
57
  }
129
- }), [["__scopeId", "data-v-01335c35"]]);
58
+ }), [["__scopeId", "data-v-2a885e02"]]);
130
59
  //#endregion
131
60
  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 };