@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 { Fragment, computed, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeProps, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, shallowRef, toDisplayString, useTemplateRef, watchEffect } from "vue";
3
+ import { Fragment, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeProps, normalizeClass, normalizeStyle, openBlock, ref, renderList, toDisplayString, useTemplateRef } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.js";
4
5
  //#region .build/vue/UiEditorInsertTableGrid.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["hidden"];
@@ -46,122 +47,27 @@ var UiEditorInsertTableGrid_default = /*#__PURE__*/ _plugin_vue_export_helper_de
46
47
  const cols = ref(8);
47
48
  const hint = ref("");
48
49
  const withHeaderRow = ref(false);
49
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
50
- function dispatch(name, detail) {
51
- const declared = { insert: {
52
- bubbles: true,
53
- composed: true,
54
- cancelable: false
55
- } };
56
- const checks = { insert: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && Number.isInteger(detail["rows"]) && Number.isInteger(detail["cols"]) && typeof detail["withHeaderRow"] === "boolean" && Object.keys(detail).every((key) => [
57
- "rows",
58
- "cols",
59
- "withHeaderRow"
60
- ].includes(key)) };
61
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
62
- emit(name, detail);
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 === "cells") return cells.value;
72
- if (name === "rows") return rows.value;
73
- if (name === "cols") return cols.value;
74
- if (name === "hint") return hint.value;
75
- if (name === "withHeaderRow") return withHeaderRow.value;
76
- return props[name];
77
- }
78
- function write(name, value) {
79
- if (name === "cells") {
80
- cells.value = value;
81
- return true;
82
- }
83
- if (name === "rows") {
84
- rows.value = value;
85
- return true;
86
- }
87
- if (name === "cols") {
88
- cols.value = value;
89
- return true;
90
- }
91
- if (name === "hint") {
92
- hint.value = value;
93
- return true;
94
- }
95
- if (name === "withHeaderRow") {
96
- withHeaderRow.value = value;
97
- return true;
98
- }
99
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
100
- }
101
- const stops = [];
102
- const host = {
103
- get element() {
104
- return root.value;
105
- },
106
- state: new Proxy({}, {
107
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
108
- set: (_target, name, value) => typeof name === "string" && write(name, value)
109
- }),
50
+ const isInsertDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && Number.isInteger(detail["rows"]) && Number.isInteger(detail["cols"]) && typeof detail["withHeaderRow"] === "boolean" && Object.keys(detail).every((key) => [
51
+ "rows",
52
+ "cols",
53
+ "withHeaderRow"
54
+ ].includes(key));
55
+ const dispatch = createDispatch(root, emit, { checks: { insert: isInsertDetail } });
56
+ useComponentHost(controllerModule.default, {
57
+ root,
58
+ dispatch,
59
+ props,
110
60
  refs: {
111
- get header() {
112
- return headerElement.value;
113
- },
114
- get insert() {
115
- return insertElement.value;
116
- }
117
- },
118
- elements: new Proxy({}, { get: (_target, name) => {
119
- if (typeof name !== "string" || root.value === null) return void 0;
120
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
121
- } }),
122
- signal(initialValue) {
123
- const value = shallowRef(initialValue);
124
- return {
125
- get: () => value.value,
126
- set: (next) => {
127
- if (!Object.is(value.value, next)) value.value = next;
128
- },
129
- update: (next) => {
130
- const updated = next(value.value);
131
- if (!Object.is(value.value, updated)) value.value = updated;
132
- }
133
- };
134
- },
135
- computed(compute) {
136
- const value = computed(compute);
137
- return { get: () => value.value };
138
- },
139
- effect(run) {
140
- const stop = watchEffect((onCleanup) => {
141
- const cleanup = run();
142
- if (typeof cleanup === "function") onCleanup(cleanup);
143
- }, { flush: "post" });
144
- stops.push(stop);
145
- return stop;
61
+ header: headerElement,
62
+ insert: insertElement
146
63
  },
147
- on(event, listener) {
148
- const element = root.value;
149
- element?.addEventListener(event, listener);
150
- const off = () => element?.removeEventListener(event, listener);
151
- stops.push(off);
152
- return off;
153
- },
154
- dispatch
155
- };
156
- let cleanup;
157
- onMounted(() => {
158
- Promise.resolve(controllerModule.default(host)).then((result) => {
159
- cleanup = result;
160
- });
161
- });
162
- onBeforeUnmount(() => {
163
- for (const stop of stops.splice(0)) stop();
164
- if (typeof cleanup === "function") cleanup();
64
+ state: {
65
+ cells,
66
+ rows,
67
+ cols,
68
+ hint,
69
+ withHeaderRow
70
+ }
165
71
  });
166
72
  return (_ctx, _cache) => {
167
73
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-editor-insert-table-grid" }, _ctx.$attrs, {
@@ -198,6 +104,6 @@ var UiEditorInsertTableGrid_default = /*#__PURE__*/ _plugin_vue_export_helper_de
198
104
  ], 16, _hoisted_1);
199
105
  };
200
106
  }
201
- }), [["__scopeId", "data-v-00e6602a"]]);
107
+ }), [["__scopeId", "data-v-7b1e476f"]]);
202
108
  //#endregion
203
109
  export { UiEditorInsertTableGrid_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 { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeProps, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderList, shallowRef, toDisplayString, watchEffect } from "vue";
3
+ import { Fragment, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeProps, normalizeClass, openBlock, ref, renderList, toDisplayString } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-editor-mention-menu/ui-editor-mention-menu.js";
4
5
  //#region .build/vue/UiEditorMentionMenu.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["aria-busy", "hidden"];
@@ -57,121 +58,22 @@ var UiEditorMentionMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_defaul
57
58
  const searching = ref(false);
58
59
  const active = ref(0);
59
60
  const prefix = ref("ui-editor-mention-menu");
60
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
61
- function dispatch(name, detail) {
62
- const declared = {
63
- highlight: {
64
- bubbles: true,
65
- composed: true,
66
- cancelable: false
67
- },
68
- select: {
69
- bubbles: true,
70
- composed: true,
71
- cancelable: false
72
- }
73
- };
74
- const checks = {
75
- highlight: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && Number.isInteger(detail["index"]) && Object.keys(detail).every((key) => ["index"].includes(key)),
76
- select: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && Number.isInteger(detail["index"]) && Object.keys(detail).every((key) => ["index"].includes(key))
77
- };
78
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
79
- emit(name, detail);
80
- return root.value?.dispatchEvent(new CustomEvent(name, {
81
- bubbles: true,
82
- composed: true,
83
- ...declared[name],
84
- detail
85
- })) ?? true;
86
- }
87
- function read(name) {
88
- if (name === "visible") return visible.value;
89
- if (name === "rows") return rows.value;
90
- if (name === "searching") return searching.value;
91
- if (name === "active") return active.value;
92
- if (name === "prefix") return prefix.value;
93
- return props[name];
94
- }
95
- function write(name, value) {
96
- if (name === "visible") {
97
- visible.value = value;
98
- return true;
61
+ const isHighlightDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && Number.isInteger(detail["index"]) && Object.keys(detail).every((key) => ["index"].includes(key));
62
+ const dispatch = createDispatch(root, emit, { checks: {
63
+ highlight: isHighlightDetail,
64
+ select: isHighlightDetail
65
+ } });
66
+ useComponentHost(controllerModule.default, {
67
+ root,
68
+ dispatch,
69
+ props,
70
+ state: {
71
+ visible,
72
+ rows,
73
+ searching,
74
+ active,
75
+ prefix
99
76
  }
100
- if (name === "rows") {
101
- rows.value = value;
102
- return true;
103
- }
104
- if (name === "searching") {
105
- searching.value = value;
106
- return true;
107
- }
108
- if (name === "active") {
109
- active.value = value;
110
- return true;
111
- }
112
- if (name === "prefix") {
113
- prefix.value = value;
114
- return true;
115
- }
116
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
117
- }
118
- const stops = [];
119
- const host = {
120
- get element() {
121
- return root.value;
122
- },
123
- state: new Proxy({}, {
124
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
125
- set: (_target, name, value) => typeof name === "string" && write(name, value)
126
- }),
127
- refs: {},
128
- elements: new Proxy({}, { get: (_target, name) => {
129
- if (typeof name !== "string" || root.value === null) return void 0;
130
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
131
- } }),
132
- signal(initialValue) {
133
- const value = shallowRef(initialValue);
134
- return {
135
- get: () => value.value,
136
- set: (next) => {
137
- if (!Object.is(value.value, next)) value.value = next;
138
- },
139
- update: (next) => {
140
- const updated = next(value.value);
141
- if (!Object.is(value.value, updated)) value.value = updated;
142
- }
143
- };
144
- },
145
- computed(compute) {
146
- const value = computed(compute);
147
- return { get: () => value.value };
148
- },
149
- effect(run) {
150
- const stop = watchEffect((onCleanup) => {
151
- const cleanup = run();
152
- if (typeof cleanup === "function") onCleanup(cleanup);
153
- }, { flush: "post" });
154
- stops.push(stop);
155
- return stop;
156
- },
157
- on(event, listener) {
158
- const element = root.value;
159
- element?.addEventListener(event, listener);
160
- const off = () => element?.removeEventListener(event, listener);
161
- stops.push(off);
162
- return off;
163
- },
164
- dispatch
165
- };
166
- let cleanup;
167
- onMounted(() => {
168
- Promise.resolve(controllerModule.default(host)).then((result) => {
169
- cleanup = result;
170
- });
171
- });
172
- onBeforeUnmount(() => {
173
- for (const stop of stops.splice(0)) stop();
174
- if (typeof cleanup === "function") cleanup();
175
77
  });
176
78
  return (_ctx, _cache) => {
177
79
  return openBlock(), createElementBlock("div", mergeProps({
@@ -199,6 +101,6 @@ var UiEditorMentionMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_defaul
199
101
  ], 16, _hoisted_1);
200
102
  };
201
103
  }
202
- }), [["__scopeId", "data-v-2abe407e"]]);
104
+ }), [["__scopeId", "data-v-78edc5f6"]]);
203
105
  //#endregion
204
106
  export { UiEditorMentionMenu_default as t };
@@ -1,6 +1,7 @@
1
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
1
2
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
3
  import { t as UiIcon_default } from "./UiIcon.js";
3
- import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeProps, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderList, shallowRef, toDisplayString, watchEffect } from "vue";
4
+ import { Fragment, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeProps, normalizeClass, openBlock, ref, renderList, toDisplayString } from "vue";
4
5
  import * as controllerModule from "@threadlabs/looma/components/ui-editor-slash-menu/ui-editor-slash-menu.js";
5
6
  //#region .build/vue/UiEditorSlashMenu.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = ["hidden"];
@@ -46,106 +47,19 @@ var UiEditorSlashMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(
46
47
  const root = ref(null);
47
48
  const visible = ref(false);
48
49
  const active = ref(0);
49
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
50
- function dispatch(name, detail) {
51
- const declared = {
52
- highlight: {
53
- bubbles: true,
54
- composed: true,
55
- cancelable: false
56
- },
57
- select: {
58
- bubbles: true,
59
- composed: true,
60
- cancelable: false
61
- }
62
- };
63
- const checks = {
64
- highlight: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && Number.isInteger(detail["index"]) && Object.keys(detail).every((key) => ["index"].includes(key)),
65
- select: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && Number.isInteger(detail["index"]) && Object.keys(detail).every((key) => ["index"].includes(key))
66
- };
67
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
68
- emit(name, detail);
69
- return root.value?.dispatchEvent(new CustomEvent(name, {
70
- bubbles: true,
71
- composed: true,
72
- ...declared[name],
73
- detail
74
- })) ?? true;
75
- }
76
- function read(name) {
77
- if (name === "visible") return visible.value;
78
- if (name === "active") return active.value;
79
- return props[name];
80
- }
81
- function write(name, value) {
82
- if (name === "visible") {
83
- visible.value = value;
84
- return true;
50
+ const isHighlightDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && Number.isInteger(detail["index"]) && Object.keys(detail).every((key) => ["index"].includes(key));
51
+ const dispatch = createDispatch(root, emit, { checks: {
52
+ highlight: isHighlightDetail,
53
+ select: isHighlightDetail
54
+ } });
55
+ useComponentHost(controllerModule.default, {
56
+ root,
57
+ dispatch,
58
+ props,
59
+ state: {
60
+ visible,
61
+ active
85
62
  }
86
- if (name === "active") {
87
- active.value = value;
88
- return true;
89
- }
90
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
91
- }
92
- const stops = [];
93
- const host = {
94
- get element() {
95
- return root.value;
96
- },
97
- state: new Proxy({}, {
98
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
99
- set: (_target, name, value) => typeof name === "string" && write(name, value)
100
- }),
101
- refs: {},
102
- elements: new Proxy({}, { get: (_target, name) => {
103
- if (typeof name !== "string" || root.value === null) return void 0;
104
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
105
- } }),
106
- signal(initialValue) {
107
- const value = shallowRef(initialValue);
108
- return {
109
- get: () => value.value,
110
- set: (next) => {
111
- if (!Object.is(value.value, next)) value.value = next;
112
- },
113
- update: (next) => {
114
- const updated = next(value.value);
115
- if (!Object.is(value.value, updated)) value.value = updated;
116
- }
117
- };
118
- },
119
- computed(compute) {
120
- const value = computed(compute);
121
- return { get: () => value.value };
122
- },
123
- effect(run) {
124
- const stop = watchEffect((onCleanup) => {
125
- const cleanup = run();
126
- if (typeof cleanup === "function") onCleanup(cleanup);
127
- }, { flush: "post" });
128
- stops.push(stop);
129
- return stop;
130
- },
131
- on(event, listener) {
132
- const element = root.value;
133
- element?.addEventListener(event, listener);
134
- const off = () => element?.removeEventListener(event, listener);
135
- stops.push(off);
136
- return off;
137
- },
138
- dispatch
139
- };
140
- let cleanup;
141
- onMounted(() => {
142
- Promise.resolve(controllerModule.default(host)).then((result) => {
143
- cleanup = result;
144
- });
145
- });
146
- onBeforeUnmount(() => {
147
- for (const stop of stops.splice(0)) stop();
148
- if (typeof cleanup === "function") cleanup();
149
63
  });
150
64
  return (_ctx, _cache) => {
151
65
  return openBlock(), createElementBlock("div", mergeProps({
@@ -181,6 +95,6 @@ var UiEditorSlashMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(
181
95
  ], 16, _hoisted_1);
182
96
  };
183
97
  }
184
- }), [["__scopeId", "data-v-aeee1d4f"]]);
98
+ }), [["__scopeId", "data-v-346835f7"]]);
185
99
  //#endregion
186
100
  export { UiEditorSlashMenu_default as t };
@@ -1,6 +1,7 @@
1
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
1
2
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
3
  import { t as UiIcon_default } from "./UiIcon.js";
3
- import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, shallowRef, toDisplayString, watchEffect } from "vue";
4
+ import { Fragment, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, normalizeStyle, openBlock, ref, renderList, toDisplayString } from "vue";
4
5
  import * as controllerModule from "@threadlabs/looma/components/ui-editor-table-context-menu/ui-editor-table-context-menu.js";
5
6
  //#region .build/vue/UiEditorTableContextMenu.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = ["hidden"];
@@ -45,96 +46,16 @@ var UiEditorTableContextMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_d
45
46
  const root = ref(null);
46
47
  const swatches = ref([]);
47
48
  const sections = ref([]);
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 = { action: {
51
- bubbles: true,
52
- composed: true,
53
- cancelable: false
54
- } };
55
- const checks = { action: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "align-left" || detail["action"] === "align-center" || detail["action"] === "align-right" || detail["action"] === "background-none" || detail["action"] === "background-gray" || detail["action"] === "background-yellow" || detail["action"] === "background-blue" || detail["action"] === "background-green" || detail["action"] === "background-red" || detail["action"] === "add-row-before" || detail["action"] === "add-row-after" || detail["action"] === "add-column-before" || detail["action"] === "add-column-after" || detail["action"] === "clear-cells" || detail["action"] === "merge-cells" || detail["action"] === "split-cell" || detail["action"] === "delete-row" || detail["action"] === "delete-column" || detail["action"] === "delete-table") && Object.keys(detail).every((key) => ["action"].includes(key)) };
56
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
57
- emit(name, detail);
58
- return root.value?.dispatchEvent(new CustomEvent(name, {
59
- bubbles: true,
60
- composed: true,
61
- ...declared[name],
62
- detail
63
- })) ?? true;
64
- }
65
- function read(name) {
66
- if (name === "swatches") return swatches.value;
67
- if (name === "sections") return sections.value;
68
- return props[name];
69
- }
70
- function write(name, value) {
71
- if (name === "swatches") {
72
- swatches.value = value;
73
- return true;
74
- }
75
- if (name === "sections") {
76
- sections.value = value;
77
- return true;
49
+ const isActionDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "align-left" || detail["action"] === "align-center" || detail["action"] === "align-right" || detail["action"] === "background-none" || detail["action"] === "background-gray" || detail["action"] === "background-yellow" || detail["action"] === "background-blue" || detail["action"] === "background-green" || detail["action"] === "background-red" || detail["action"] === "add-row-before" || detail["action"] === "add-row-after" || detail["action"] === "add-column-before" || detail["action"] === "add-column-after" || detail["action"] === "clear-cells" || detail["action"] === "merge-cells" || detail["action"] === "split-cell" || detail["action"] === "delete-row" || detail["action"] === "delete-column" || detail["action"] === "delete-table") && Object.keys(detail).every((key) => ["action"].includes(key));
50
+ const dispatch = createDispatch(root, emit, { checks: { action: isActionDetail } });
51
+ useComponentHost(controllerModule.default, {
52
+ root,
53
+ dispatch,
54
+ props,
55
+ state: {
56
+ swatches,
57
+ sections
78
58
  }
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: {},
91
- elements: new Proxy({}, { get: (_target, name) => {
92
- if (typeof name !== "string" || root.value === null) return void 0;
93
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
94
- } }),
95
- signal(initialValue) {
96
- const value = shallowRef(initialValue);
97
- return {
98
- get: () => value.value,
99
- set: (next) => {
100
- if (!Object.is(value.value, next)) value.value = next;
101
- },
102
- update: (next) => {
103
- const updated = next(value.value);
104
- if (!Object.is(value.value, updated)) value.value = updated;
105
- }
106
- };
107
- },
108
- computed(compute) {
109
- const value = computed(compute);
110
- return { get: () => value.value };
111
- },
112
- effect(run) {
113
- const stop = watchEffect((onCleanup) => {
114
- const cleanup = run();
115
- if (typeof cleanup === "function") onCleanup(cleanup);
116
- }, { flush: "post" });
117
- stops.push(stop);
118
- return stop;
119
- },
120
- on(event, listener) {
121
- const element = root.value;
122
- element?.addEventListener(event, listener);
123
- const off = () => element?.removeEventListener(event, listener);
124
- stops.push(off);
125
- return off;
126
- },
127
- dispatch
128
- };
129
- let cleanup;
130
- onMounted(() => {
131
- Promise.resolve(controllerModule.default(host)).then((result) => {
132
- cleanup = result;
133
- });
134
- });
135
- onBeforeUnmount(() => {
136
- for (const stop of stops.splice(0)) stop();
137
- if (typeof cleanup === "function") cleanup();
138
59
  });
139
60
  return (_ctx, _cache) => {
140
61
  return openBlock(), createElementBlock("div", mergeProps({
@@ -172,6 +93,6 @@ var UiEditorTableContextMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_d
172
93
  }), 128))], 16, _hoisted_1);
173
94
  };
174
95
  }
175
- }), [["__scopeId", "data-v-9cbdf038"]]);
96
+ }), [["__scopeId", "data-v-a938b94a"]]);
176
97
  //#endregion
177
98
  export { UiEditorTableContextMenu_default as t };