@threadlabs/looma 0.6.3 → 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 (250) hide show
  1. package/components/ui-tree-item/ui-tree-item.html +68 -12
  2. package/components/ui-tree-item/ui-tree-item.js +9 -1
  3. package/dist/index.js +1 -1
  4. package/package.json +2 -2
  5. package/styles/ui-affordance-scope.css +1 -1
  6. package/styles/ui-avatar-group.css +1 -1
  7. package/styles/ui-avatar.css +1 -1
  8. package/styles/ui-badge.css +1 -1
  9. package/styles/ui-button.css +1 -1
  10. package/styles/ui-callout.css +1 -1
  11. package/styles/ui-checkbox.css +1 -1
  12. package/styles/ui-cluster.css +1 -1
  13. package/styles/ui-combobox.css +1 -1
  14. package/styles/ui-container.css +1 -1
  15. package/styles/ui-context-menu.css +1 -1
  16. package/styles/ui-dialog.css +1 -1
  17. package/styles/ui-disclosure.css +1 -1
  18. package/styles/ui-editable.css +1 -1
  19. package/styles/ui-editor-insert-table-grid.css +1 -1
  20. package/styles/ui-editor-mention-menu.css +1 -1
  21. package/styles/ui-editor-slash-menu.css +1 -1
  22. package/styles/ui-editor-table-context-menu.css +1 -1
  23. package/styles/ui-editor-table-overlay.css +1 -1
  24. package/styles/ui-editor-table-toolbar.css +1 -1
  25. package/styles/ui-editor-toolbar.css +1 -1
  26. package/styles/ui-floating-action-button.css +1 -1
  27. package/styles/ui-form-field.css +1 -1
  28. package/styles/ui-grid.css +1 -1
  29. package/styles/ui-icon-button.css +1 -1
  30. package/styles/ui-icon.css +1 -1
  31. package/styles/ui-input.css +1 -1
  32. package/styles/ui-menu-item.css +1 -1
  33. package/styles/ui-menu.css +1 -1
  34. package/styles/ui-popover.css +1 -1
  35. package/styles/ui-radio-group.css +1 -1
  36. package/styles/ui-radio.css +1 -1
  37. package/styles/ui-reel.css +1 -1
  38. package/styles/ui-search-result-row.css +1 -1
  39. package/styles/ui-search-shell.css +1 -1
  40. package/styles/ui-select.css +1 -1
  41. package/styles/ui-separator.css +1 -1
  42. package/styles/ui-sidebar.css +1 -1
  43. package/styles/ui-stack.css +1 -1
  44. package/styles/ui-switch.css +1 -1
  45. package/styles/ui-switcher.css +1 -1
  46. package/styles/ui-tabs.css +1 -1
  47. package/styles/ui-textarea.css +1 -1
  48. package/styles/ui-toast-region.css +1 -1
  49. package/styles/ui-tooltip.css +1 -1
  50. package/styles/ui-top-bar.css +1 -1
  51. package/styles/ui-tree-item.css +75 -12
  52. package/styles/ui-tree.css +1 -1
  53. package/vanilla/UiAffordanceScope.d.ts +1 -1
  54. package/vanilla/UiAffordanceScope.js +1 -1
  55. package/vanilla/UiAvatar.d.ts +1 -1
  56. package/vanilla/UiAvatar.js +1 -1
  57. package/vanilla/UiAvatarGroup.d.ts +1 -1
  58. package/vanilla/UiAvatarGroup.js +1 -1
  59. package/vanilla/UiBadge.d.ts +1 -1
  60. package/vanilla/UiBadge.js +1 -1
  61. package/vanilla/UiButton.d.ts +1 -1
  62. package/vanilla/UiButton.js +1 -1
  63. package/vanilla/UiCallout.d.ts +1 -1
  64. package/vanilla/UiCallout.js +1 -1
  65. package/vanilla/UiCheckbox.d.ts +1 -1
  66. package/vanilla/UiCheckbox.js +1 -1
  67. package/vanilla/UiCluster.d.ts +1 -1
  68. package/vanilla/UiCluster.js +1 -1
  69. package/vanilla/UiCombobox.d.ts +1 -1
  70. package/vanilla/UiCombobox.js +1 -1
  71. package/vanilla/UiContainer.d.ts +1 -1
  72. package/vanilla/UiContainer.js +1 -1
  73. package/vanilla/UiContextMenu.d.ts +1 -1
  74. package/vanilla/UiContextMenu.js +1 -1
  75. package/vanilla/UiDialog.d.ts +1 -1
  76. package/vanilla/UiDialog.js +1 -1
  77. package/vanilla/UiDisclosure.d.ts +1 -1
  78. package/vanilla/UiDisclosure.js +1 -1
  79. package/vanilla/UiEditable.d.ts +1 -1
  80. package/vanilla/UiEditable.js +1 -1
  81. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  82. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  83. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  84. package/vanilla/UiEditorMentionMenu.js +1 -1
  85. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  86. package/vanilla/UiEditorSlashMenu.js +1 -1
  87. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  88. package/vanilla/UiEditorTableContextMenu.js +1 -1
  89. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  90. package/vanilla/UiEditorTableOverlay.js +1 -1
  91. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  92. package/vanilla/UiEditorTableToolbar.js +1 -1
  93. package/vanilla/UiEditorToolbar.d.ts +1 -1
  94. package/vanilla/UiEditorToolbar.js +1 -1
  95. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  96. package/vanilla/UiFloatingActionButton.js +1 -1
  97. package/vanilla/UiFormField.d.ts +1 -1
  98. package/vanilla/UiFormField.js +1 -1
  99. package/vanilla/UiGrid.d.ts +1 -1
  100. package/vanilla/UiGrid.js +1 -1
  101. package/vanilla/UiIcon.d.ts +1 -1
  102. package/vanilla/UiIcon.js +1 -1
  103. package/vanilla/UiIconButton.d.ts +1 -1
  104. package/vanilla/UiIconButton.js +1 -1
  105. package/vanilla/UiInput.d.ts +1 -1
  106. package/vanilla/UiInput.js +1 -1
  107. package/vanilla/UiMenu.d.ts +1 -1
  108. package/vanilla/UiMenu.js +1 -1
  109. package/vanilla/UiMenuItem.d.ts +1 -1
  110. package/vanilla/UiMenuItem.js +1 -1
  111. package/vanilla/UiPopover.d.ts +1 -1
  112. package/vanilla/UiPopover.js +1 -1
  113. package/vanilla/UiRadio.d.ts +1 -1
  114. package/vanilla/UiRadio.js +1 -1
  115. package/vanilla/UiRadioGroup.d.ts +1 -1
  116. package/vanilla/UiRadioGroup.js +1 -1
  117. package/vanilla/UiReel.d.ts +1 -1
  118. package/vanilla/UiReel.js +1 -1
  119. package/vanilla/UiSearchResultRow.d.ts +1 -1
  120. package/vanilla/UiSearchResultRow.js +1 -1
  121. package/vanilla/UiSearchShell.d.ts +1 -1
  122. package/vanilla/UiSearchShell.js +1 -1
  123. package/vanilla/UiSelect.d.ts +1 -1
  124. package/vanilla/UiSelect.js +1 -1
  125. package/vanilla/UiSeparator.d.ts +1 -1
  126. package/vanilla/UiSeparator.js +1 -1
  127. package/vanilla/UiSidebar.d.ts +1 -1
  128. package/vanilla/UiSidebar.js +1 -1
  129. package/vanilla/UiStack.d.ts +1 -1
  130. package/vanilla/UiStack.js +1 -1
  131. package/vanilla/UiSwitch.d.ts +1 -1
  132. package/vanilla/UiSwitch.js +1 -1
  133. package/vanilla/UiSwitcher.d.ts +1 -1
  134. package/vanilla/UiSwitcher.js +1 -1
  135. package/vanilla/UiTabs.d.ts +1 -1
  136. package/vanilla/UiTabs.js +1 -1
  137. package/vanilla/UiTextarea.d.ts +1 -1
  138. package/vanilla/UiTextarea.js +1 -1
  139. package/vanilla/UiToastRegion.d.ts +1 -1
  140. package/vanilla/UiToastRegion.js +1 -1
  141. package/vanilla/UiTooltip.d.ts +1 -1
  142. package/vanilla/UiTooltip.js +1 -1
  143. package/vanilla/UiTopBar.d.ts +1 -1
  144. package/vanilla/UiTopBar.js +1 -1
  145. package/vanilla/UiTree.d.ts +1 -1
  146. package/vanilla/UiTree.js +1 -1
  147. package/vanilla/UiTreeItem.d.ts +1 -1
  148. package/vanilla/UiTreeItem.js +2 -2
  149. package/vue/UiAffordanceScope.vue +8 -84
  150. package/vue/UiAvatar.d.ts +1 -1
  151. package/vue/UiAvatar.vue +9 -106
  152. package/vue/UiAvatarGroup.vue +9 -96
  153. package/vue/UiBadge.vue +1 -1
  154. package/vue/UiButton.vue +1 -1
  155. package/vue/UiCallout.vue +1 -1
  156. package/vue/UiCheckbox.vue +22 -123
  157. package/vue/UiCluster.vue +1 -1
  158. package/vue/UiCombobox.d.ts +1 -1
  159. package/vue/UiCombobox.vue +224 -475
  160. package/vue/UiContainer.vue +1 -1
  161. package/vue/UiContextMenu.vue +34 -141
  162. package/vue/UiDialog.vue +25 -126
  163. package/vue/UiDisclosure.vue +26 -138
  164. package/vue/UiEditable.vue +46 -158
  165. package/vue/UiEditorInsertTableGrid.vue +19 -138
  166. package/vue/UiEditorMentionMenu.vue +17 -124
  167. package/vue/UiEditorSlashMenu.vue +17 -109
  168. package/vue/UiEditorTableContextMenu.vue +34 -122
  169. package/vue/UiEditorTableOverlay.vue +61 -167
  170. package/vue/UiEditorTableToolbar.vue +34 -142
  171. package/vue/UiEditorToolbar.vue +1 -1
  172. package/vue/UiFloatingActionButton.vue +1 -1
  173. package/vue/UiFormField.vue +7 -79
  174. package/vue/UiGrid.vue +1 -1
  175. package/vue/UiIcon.vue +8 -84
  176. package/vue/UiIconButton.vue +7 -79
  177. package/vue/UiInput.vue +7 -79
  178. package/vue/UiMenu.vue +42 -127
  179. package/vue/UiMenuItem.vue +1 -1
  180. package/vue/UiPopover.vue +25 -121
  181. package/vue/UiRadio.vue +22 -123
  182. package/vue/UiRadioGroup.d.ts +1 -1
  183. package/vue/UiRadioGroup.vue +32 -119
  184. package/vue/UiReel.vue +1 -1
  185. package/vue/UiSearchResultRow.vue +1 -1
  186. package/vue/UiSearchShell.vue +25 -121
  187. package/vue/UiSelect.vue +7 -79
  188. package/vue/UiSeparator.vue +1 -1
  189. package/vue/UiSidebar.vue +32 -133
  190. package/vue/UiStack.vue +1 -1
  191. package/vue/UiSwitch.vue +22 -123
  192. package/vue/UiSwitcher.vue +1 -1
  193. package/vue/UiTabs.vue +24 -128
  194. package/vue/UiTextarea.vue +7 -79
  195. package/vue/UiToastRegion.vue +37 -126
  196. package/vue/UiTooltip.vue +25 -124
  197. package/vue/UiTopBar.vue +1 -1
  198. package/vue/UiTree.vue +56 -137
  199. package/vue/UiTreeItem.vue +97 -153
  200. package/vue/chunks/UiAffordanceScope.js +9 -78
  201. package/vue/chunks/UiAvatar.js +13 -89
  202. package/vue/chunks/UiAvatarGroup.js +10 -80
  203. package/vue/chunks/UiBadge.js +1 -1
  204. package/vue/chunks/UiButton.js +1 -1
  205. package/vue/chunks/UiCallout.js +1 -1
  206. package/vue/chunks/UiCheckbox.js +17 -95
  207. package/vue/chunks/UiCluster.js +1 -1
  208. package/vue/chunks/UiCombobox.js +114 -325
  209. package/vue/chunks/UiContainer.js +1 -1
  210. package/vue/chunks/UiContextMenu.js +21 -113
  211. package/vue/chunks/UiDialog.js +20 -99
  212. package/vue/chunks/UiDisclosure.js +22 -112
  213. package/vue/chunks/UiEditable.js +32 -128
  214. package/vue/chunks/UiEditorInsertTableGrid.js +22 -116
  215. package/vue/chunks/UiEditorMentionMenu.js +18 -116
  216. package/vue/chunks/UiEditorSlashMenu.js +15 -101
  217. package/vue/chunks/UiEditorTableContextMenu.js +12 -91
  218. package/vue/chunks/UiEditorTableOverlay.js +29 -120
  219. package/vue/chunks/UiEditorTableToolbar.js +16 -111
  220. package/vue/chunks/UiEditorToolbar.js +1 -1
  221. package/vue/chunks/UiFloatingActionButton.js +1 -1
  222. package/vue/chunks/UiFormField.js +8 -73
  223. package/vue/chunks/UiGrid.js +1 -1
  224. package/vue/chunks/UiIcon.js +9 -78
  225. package/vue/chunks/UiIconButton.js +8 -73
  226. package/vue/chunks/UiInput.js +8 -73
  227. package/vue/chunks/UiMenu.js +25 -111
  228. package/vue/chunks/UiMenuItem.js +1 -1
  229. package/vue/chunks/UiPopover.js +18 -105
  230. package/vue/chunks/UiRadio.js +17 -95
  231. package/vue/chunks/UiRadioGroup.js +23 -105
  232. package/vue/chunks/UiReel.js +1 -1
  233. package/vue/chunks/UiSearchResultRow.js +1 -1
  234. package/vue/chunks/UiSearchShell.js +17 -94
  235. package/vue/chunks/UiSelect.js +8 -73
  236. package/vue/chunks/UiSeparator.js +1 -1
  237. package/vue/chunks/UiSidebar.js +23 -108
  238. package/vue/chunks/UiStack.js +1 -1
  239. package/vue/chunks/UiSwitch.js +17 -95
  240. package/vue/chunks/UiSwitcher.js +1 -1
  241. package/vue/chunks/UiTabs.js +22 -103
  242. package/vue/chunks/UiTextarea.js +8 -73
  243. package/vue/chunks/UiToastRegion.js +27 -112
  244. package/vue/chunks/UiTooltip.js +18 -106
  245. package/vue/chunks/UiTopBar.js +1 -1
  246. package/vue/chunks/UiTree.js +31 -109
  247. package/vue/chunks/UiTreeItem.js +35 -118
  248. package/vue/chunks/host.js +101 -0
  249. package/vue/components.css +759 -707
  250. package/vue/host.ts +154 -0
@@ -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-overlay/ui-editor-table-overlay.js";
5
6
  //#region .build/vue/UiEditorTableOverlay.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = ["hidden"];
@@ -55,125 +56,33 @@ var UiEditorTableOverlay_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
55
56
  const hovered = ref(null);
56
57
  const active = ref(null);
57
58
  const activeKey = ref("");
58
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
59
- function dispatch(name, detail) {
60
- const declared = { action: {
61
- bubbles: true,
62
- composed: true,
63
- cancelable: false
64
- } };
65
- const checks = { action: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "add-row-before" || detail["action"] === "add-row-after" || detail["action"] === "add-column-before" || detail["action"] === "add-column-after") && Number.isInteger(detail["boundaryIndex"]) && Object.keys(detail).every((key) => ["action", "boundaryIndex"].includes(key)) || detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "select-row" || detail["action"] === "select-column") && Number.isInteger(detail["rowIndex"]) && Number.isInteger(detail["columnIndex"]) && Object.keys(detail).every((key) => [
66
- "action",
67
- "rowIndex",
68
- "columnIndex"
69
- ].includes(key)) || detail !== null && typeof detail === "object" && !Array.isArray(detail) && detail["action"] === "open-cell-menu" && Number.isInteger(detail["rowIndex"]) && Number.isInteger(detail["columnIndex"]) && detail["anchor"] !== null && typeof detail["anchor"] === "object" && !Array.isArray(detail["anchor"]) && typeof detail["anchor"]["left"] === "number" && Number.isFinite(detail["anchor"]["left"]) && typeof detail["anchor"]["top"] === "number" && Number.isFinite(detail["anchor"]["top"]) && typeof detail["anchor"]["right"] === "number" && Number.isFinite(detail["anchor"]["right"]) && typeof detail["anchor"]["bottom"] === "number" && Number.isFinite(detail["anchor"]["bottom"]) && Object.keys(detail["anchor"]).every((key) => [
70
- "left",
71
- "top",
72
- "right",
73
- "bottom"
74
- ].includes(key)) && Object.keys(detail).every((key) => [
75
- "action",
76
- "rowIndex",
77
- "columnIndex",
78
- "anchor"
79
- ].includes(key)) };
80
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
81
- emit(name, detail);
82
- return root.value?.dispatchEvent(new CustomEvent(name, {
83
- bubbles: true,
84
- composed: true,
85
- ...declared[name],
86
- detail
87
- })) ?? true;
88
- }
89
- function read(name) {
90
- if (name === "rows") return rows.value;
91
- if (name === "cols") return cols.value;
92
- if (name === "hovered") return hovered.value;
93
- if (name === "active") return active.value;
94
- if (name === "activeKey") return activeKey.value;
95
- return props[name];
96
- }
97
- function write(name, value) {
98
- if (name === "rows") {
99
- rows.value = value;
100
- return true;
101
- }
102
- if (name === "cols") {
103
- cols.value = value;
104
- return true;
105
- }
106
- if (name === "hovered") {
107
- hovered.value = value;
108
- return true;
109
- }
110
- if (name === "active") {
111
- active.value = value;
112
- return true;
59
+ const isActionDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "add-row-before" || detail["action"] === "add-row-after" || detail["action"] === "add-column-before" || detail["action"] === "add-column-after") && Number.isInteger(detail["boundaryIndex"]) && Object.keys(detail).every((key) => ["action", "boundaryIndex"].includes(key)) || detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "select-row" || detail["action"] === "select-column") && Number.isInteger(detail["rowIndex"]) && Number.isInteger(detail["columnIndex"]) && Object.keys(detail).every((key) => [
60
+ "action",
61
+ "rowIndex",
62
+ "columnIndex"
63
+ ].includes(key)) || detail !== null && typeof detail === "object" && !Array.isArray(detail) && detail["action"] === "open-cell-menu" && Number.isInteger(detail["rowIndex"]) && Number.isInteger(detail["columnIndex"]) && detail["anchor"] !== null && typeof detail["anchor"] === "object" && !Array.isArray(detail["anchor"]) && typeof detail["anchor"]["left"] === "number" && Number.isFinite(detail["anchor"]["left"]) && typeof detail["anchor"]["top"] === "number" && Number.isFinite(detail["anchor"]["top"]) && typeof detail["anchor"]["right"] === "number" && Number.isFinite(detail["anchor"]["right"]) && typeof detail["anchor"]["bottom"] === "number" && Number.isFinite(detail["anchor"]["bottom"]) && Object.keys(detail["anchor"]).every((key) => [
64
+ "left",
65
+ "top",
66
+ "right",
67
+ "bottom"
68
+ ].includes(key)) && Object.keys(detail).every((key) => [
69
+ "action",
70
+ "rowIndex",
71
+ "columnIndex",
72
+ "anchor"
73
+ ].includes(key));
74
+ const dispatch = createDispatch(root, emit, { checks: { action: isActionDetail } });
75
+ useComponentHost(controllerModule.default, {
76
+ root,
77
+ dispatch,
78
+ props,
79
+ state: {
80
+ rows,
81
+ cols,
82
+ hovered,
83
+ active,
84
+ activeKey
113
85
  }
114
- if (name === "activeKey") {
115
- activeKey.value = value;
116
- return true;
117
- }
118
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
119
- }
120
- const stops = [];
121
- const host = {
122
- get element() {
123
- return root.value;
124
- },
125
- state: new Proxy({}, {
126
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
127
- set: (_target, name, value) => typeof name === "string" && write(name, value)
128
- }),
129
- refs: {},
130
- elements: new Proxy({}, { get: (_target, name) => {
131
- if (typeof name !== "string" || root.value === null) return void 0;
132
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
133
- } }),
134
- signal(initialValue) {
135
- const value = shallowRef(initialValue);
136
- return {
137
- get: () => value.value,
138
- set: (next) => {
139
- if (!Object.is(value.value, next)) value.value = next;
140
- },
141
- update: (next) => {
142
- const updated = next(value.value);
143
- if (!Object.is(value.value, updated)) value.value = updated;
144
- }
145
- };
146
- },
147
- computed(compute) {
148
- const value = computed(compute);
149
- return { get: () => value.value };
150
- },
151
- effect(run) {
152
- const stop = watchEffect((onCleanup) => {
153
- const cleanup = run();
154
- if (typeof cleanup === "function") onCleanup(cleanup);
155
- }, { flush: "post" });
156
- stops.push(stop);
157
- return stop;
158
- },
159
- on(event, listener) {
160
- const element = root.value;
161
- element?.addEventListener(event, listener);
162
- const off = () => element?.removeEventListener(event, listener);
163
- stops.push(off);
164
- return off;
165
- },
166
- dispatch
167
- };
168
- let cleanup;
169
- onMounted(() => {
170
- Promise.resolve(controllerModule.default(host)).then((result) => {
171
- cleanup = result;
172
- });
173
- });
174
- onBeforeUnmount(() => {
175
- for (const stop of stops.splice(0)) stop();
176
- if (typeof cleanup === "function") cleanup();
177
86
  });
178
87
  return (_ctx, _cache) => {
179
88
  return openBlock(), createElementBlock("div", mergeProps({
@@ -272,6 +181,6 @@ var UiEditorTableOverlay_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
272
181
  ], 16, _hoisted_1);
273
182
  };
274
183
  }
275
- }), [["__scopeId", "data-v-d5963c35"]]);
184
+ }), [["__scopeId", "data-v-61a70a30"]]);
276
185
  //#endregion
277
186
  export { UiEditorTableOverlay_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-toolbar/ui-editor-table-toolbar.js";
5
6
  //#region .build/vue/UiEditorTableToolbar.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = ["hidden"];
@@ -86,116 +87,20 @@ var UiEditorTableToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
86
87
  const sections = ref([]);
87
88
  const hasOverflow = ref(false);
88
89
  const overflowOpen = ref(false);
89
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
90
- function dispatch(name, detail) {
91
- const declared = { action: {
92
- bubbles: true,
93
- composed: true,
94
- cancelable: false
95
- } };
96
- 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)) };
97
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
98
- emit(name, detail);
99
- return root.value?.dispatchEvent(new CustomEvent(name, {
100
- bubbles: true,
101
- composed: true,
102
- ...declared[name],
103
- detail
104
- })) ?? true;
105
- }
106
- function read(name) {
107
- if (name === "alignments") return alignments.value;
108
- if (name === "structure") return structure.value;
109
- if (name === "swatches") return swatches.value;
110
- if (name === "sections") return sections.value;
111
- if (name === "hasOverflow") return hasOverflow.value;
112
- if (name === "overflowOpen") return overflowOpen.value;
113
- return props[name];
114
- }
115
- function write(name, value) {
116
- if (name === "alignments") {
117
- alignments.value = value;
118
- return true;
119
- }
120
- if (name === "structure") {
121
- structure.value = value;
122
- return true;
123
- }
124
- if (name === "swatches") {
125
- swatches.value = value;
126
- return true;
127
- }
128
- if (name === "sections") {
129
- sections.value = value;
130
- return true;
90
+ 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));
91
+ const dispatch = createDispatch(root, emit, { checks: { action: isActionDetail } });
92
+ useComponentHost(controllerModule.default, {
93
+ root,
94
+ dispatch,
95
+ props,
96
+ state: {
97
+ alignments,
98
+ structure,
99
+ swatches,
100
+ sections,
101
+ hasOverflow,
102
+ overflowOpen
131
103
  }
132
- if (name === "hasOverflow") {
133
- hasOverflow.value = value;
134
- return true;
135
- }
136
- if (name === "overflowOpen") {
137
- overflowOpen.value = value;
138
- return true;
139
- }
140
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
141
- }
142
- const stops = [];
143
- const host = {
144
- get element() {
145
- return root.value;
146
- },
147
- state: new Proxy({}, {
148
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
149
- set: (_target, name, value) => typeof name === "string" && write(name, value)
150
- }),
151
- refs: {},
152
- elements: new Proxy({}, { get: (_target, name) => {
153
- if (typeof name !== "string" || root.value === null) return void 0;
154
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
155
- } }),
156
- signal(initialValue) {
157
- const value = shallowRef(initialValue);
158
- return {
159
- get: () => value.value,
160
- set: (next) => {
161
- if (!Object.is(value.value, next)) value.value = next;
162
- },
163
- update: (next) => {
164
- const updated = next(value.value);
165
- if (!Object.is(value.value, updated)) value.value = updated;
166
- }
167
- };
168
- },
169
- computed(compute) {
170
- const value = computed(compute);
171
- return { get: () => value.value };
172
- },
173
- effect(run) {
174
- const stop = watchEffect((onCleanup) => {
175
- const cleanup = run();
176
- if (typeof cleanup === "function") onCleanup(cleanup);
177
- }, { flush: "post" });
178
- stops.push(stop);
179
- return stop;
180
- },
181
- on(event, listener) {
182
- const element = root.value;
183
- element?.addEventListener(event, listener);
184
- const off = () => element?.removeEventListener(event, listener);
185
- stops.push(off);
186
- return off;
187
- },
188
- dispatch
189
- };
190
- let cleanup;
191
- onMounted(() => {
192
- Promise.resolve(controllerModule.default(host)).then((result) => {
193
- cleanup = result;
194
- });
195
- });
196
- onBeforeUnmount(() => {
197
- for (const stop of stops.splice(0)) stop();
198
- if (typeof cleanup === "function") cleanup();
199
104
  });
200
105
  return (_ctx, _cache) => {
201
106
  return openBlock(), createElementBlock("div", mergeProps({
@@ -270,6 +175,6 @@ var UiEditorTableToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
270
175
  ], 16, _hoisted_1);
271
176
  };
272
177
  }
273
- }), [["__scopeId", "data-v-1066cfb2"]]);
178
+ }), [["__scopeId", "data-v-31b70e7c"]]);
274
179
  //#endregion
275
180
  export { UiEditorTableToolbar_default as t };
@@ -23,6 +23,6 @@ var UiEditorToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
23
23
  }, _ctx.$attrs, { "data-ui-editor-toolbar-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1);
24
24
  };
25
25
  }
26
- }), [["__scopeId", "data-v-0da1a114"]]);
26
+ }), [["__scopeId", "data-v-b71db5ba"]]);
27
27
  //#endregion
28
28
  export { UiEditorToolbar_default as t };
@@ -37,6 +37,6 @@ var UiFloatingActionButton_default = /*#__PURE__*/ _plugin_vue_export_helper_def
37
37
  }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1);
38
38
  };
39
39
  }
40
- }), [["__scopeId", "data-v-b66a2428"]]);
40
+ }), [["__scopeId", "data-v-62b77471"]]);
41
41
  //#endregion
42
42
  export { UiFloatingActionButton_default as t };
@@ -1,5 +1,6 @@
1
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
1
2
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, shallowRef, watchEffect } from "vue";
3
+ import { createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-form-field/ui-form-field.js";
4
5
  //#region .build/vue/UiFormField.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = { class: "label" };
@@ -27,77 +28,11 @@ var UiFormField_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
27
28
  setup(__props) {
28
29
  const props = __props;
29
30
  const root = ref(null);
30
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
31
- function dispatch(name, detail) {
32
- return root.value?.dispatchEvent(new CustomEvent(name, {
33
- bubbles: true,
34
- composed: true,
35
- detail
36
- })) ?? true;
37
- }
38
- function read(name) {
39
- return props[name];
40
- }
41
- function write(name, value) {
42
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
43
- }
44
- const stops = [];
45
- const host = {
46
- get element() {
47
- return root.value;
48
- },
49
- state: new Proxy({}, {
50
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
51
- set: (_target, name, value) => typeof name === "string" && write(name, value)
52
- }),
53
- refs: {},
54
- elements: new Proxy({}, { get: (_target, name) => {
55
- if (typeof name !== "string" || root.value === null) return void 0;
56
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
57
- } }),
58
- signal(initialValue) {
59
- const value = shallowRef(initialValue);
60
- return {
61
- get: () => value.value,
62
- set: (next) => {
63
- if (!Object.is(value.value, next)) value.value = next;
64
- },
65
- update: (next) => {
66
- const updated = next(value.value);
67
- if (!Object.is(value.value, updated)) value.value = updated;
68
- }
69
- };
70
- },
71
- computed(compute) {
72
- const value = computed(compute);
73
- return { get: () => value.value };
74
- },
75
- effect(run) {
76
- const stop = watchEffect((onCleanup) => {
77
- const cleanup = run();
78
- if (typeof cleanup === "function") onCleanup(cleanup);
79
- }, { flush: "post" });
80
- stops.push(stop);
81
- return stop;
82
- },
83
- on(event, listener) {
84
- const element = root.value;
85
- element?.addEventListener(event, listener);
86
- const off = () => element?.removeEventListener(event, listener);
87
- stops.push(off);
88
- return off;
89
- },
90
- dispatch
91
- };
92
- let cleanup;
93
- onMounted(() => {
94
- Promise.resolve(controllerModule.default(host)).then((result) => {
95
- cleanup = result;
96
- });
97
- });
98
- onBeforeUnmount(() => {
99
- for (const stop of stops.splice(0)) stop();
100
- if (typeof cleanup === "function") cleanup();
31
+ const dispatch = createDispatch(root);
32
+ useComponentHost(controllerModule.default, {
33
+ root,
34
+ dispatch,
35
+ props
101
36
  });
102
37
  return (_ctx, _cache) => {
103
38
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-form-field" }, _ctx.$attrs, {
@@ -111,6 +46,6 @@ var UiFormField_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
111
46
  ], 16);
112
47
  };
113
48
  }
114
- }), [["__scopeId", "data-v-ae3bcdfb"]]);
49
+ }), [["__scopeId", "data-v-605db5c0"]]);
115
50
  //#endregion
116
51
  export { UiFormField_default as t };
@@ -19,6 +19,6 @@ var UiGrid_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
19
19
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-grid" }, _ctx.$attrs, { "data-ui-grid-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
20
20
  };
21
21
  }
22
- }), [["__scopeId", "data-v-356b2957"]]);
22
+ }), [["__scopeId", "data-v-9635be0b"]]);
23
23
  //#endregion
24
24
  export { UiGrid_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, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderList, shallowRef, watchEffect } from "vue";
3
+ import { Fragment, createCommentVNode, createElementBlock, defineComponent, mergeProps, openBlock, ref, renderList } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-icon/ui-icon.js";
4
5
  //#region .build/vue/UiIcon.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = {
@@ -34,82 +35,12 @@ var UiIcon_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
34
35
  const props = __props;
35
36
  const root = ref(null);
36
37
  const shapes = ref([]);
37
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
38
- function dispatch(name, detail) {
39
- return root.value?.dispatchEvent(new CustomEvent(name, {
40
- bubbles: true,
41
- composed: true,
42
- detail
43
- })) ?? true;
44
- }
45
- function read(name) {
46
- if (name === "shapes") return shapes.value;
47
- return props[name];
48
- }
49
- function write(name, value) {
50
- if (name === "shapes") {
51
- shapes.value = value;
52
- return true;
53
- }
54
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
55
- }
56
- const stops = [];
57
- const host = {
58
- get element() {
59
- return root.value;
60
- },
61
- state: new Proxy({}, {
62
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
63
- set: (_target, name, value) => typeof name === "string" && write(name, value)
64
- }),
65
- refs: {},
66
- elements: new Proxy({}, { get: (_target, name) => {
67
- if (typeof name !== "string" || root.value === null) return void 0;
68
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
69
- } }),
70
- signal(initialValue) {
71
- const value = shallowRef(initialValue);
72
- return {
73
- get: () => value.value,
74
- set: (next) => {
75
- if (!Object.is(value.value, next)) value.value = next;
76
- },
77
- update: (next) => {
78
- const updated = next(value.value);
79
- if (!Object.is(value.value, updated)) value.value = updated;
80
- }
81
- };
82
- },
83
- computed(compute) {
84
- const value = computed(compute);
85
- return { get: () => value.value };
86
- },
87
- effect(run) {
88
- const stop = watchEffect((onCleanup) => {
89
- const cleanup = run();
90
- if (typeof cleanup === "function") onCleanup(cleanup);
91
- }, { flush: "post" });
92
- stops.push(stop);
93
- return stop;
94
- },
95
- on(event, listener) {
96
- const element = root.value;
97
- element?.addEventListener(event, listener);
98
- const off = () => element?.removeEventListener(event, listener);
99
- stops.push(off);
100
- return off;
101
- },
102
- dispatch
103
- };
104
- let cleanup;
105
- onMounted(() => {
106
- Promise.resolve(controllerModule.default(host)).then((result) => {
107
- cleanup = result;
108
- });
109
- });
110
- onBeforeUnmount(() => {
111
- for (const stop of stops.splice(0)) stop();
112
- if (typeof cleanup === "function") cleanup();
38
+ const dispatch = createDispatch(root);
39
+ useComponentHost(controllerModule.default, {
40
+ root,
41
+ dispatch,
42
+ props,
43
+ state: { shapes }
113
44
  });
114
45
  return (_ctx, _cache) => {
115
46
  return openBlock(), createElementBlock("span", mergeProps({
@@ -142,6 +73,6 @@ var UiIcon_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
142
73
  }), 128))]))], 16);
143
74
  };
144
75
  }
145
- }), [["__scopeId", "data-v-b2b50d17"]]);
76
+ }), [["__scopeId", "data-v-7b1048a0"]]);
146
77
  //#endregion
147
78
  export { UiIcon_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, watchEffect } from "vue";
3
+ import { computed, createElementBlock, defineComponent, mergeProps, openBlock, ref, renderSlot } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-icon-button/ui-icon-button.js";
4
5
  //#region .build/vue/UiIconButton.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = [
@@ -39,77 +40,11 @@ var UiIconButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
39
40
  props.size && `size size=${props.size}`,
40
41
  props.round && "round"
41
42
  ].filter(Boolean).join(" "));
42
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
43
- function dispatch(name, detail) {
44
- return root.value?.dispatchEvent(new CustomEvent(name, {
45
- bubbles: true,
46
- composed: true,
47
- detail
48
- })) ?? true;
49
- }
50
- function read(name) {
51
- return props[name];
52
- }
53
- function write(name, value) {
54
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
55
- }
56
- const stops = [];
57
- const host = {
58
- get element() {
59
- return root.value;
60
- },
61
- state: new Proxy({}, {
62
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
63
- set: (_target, name, value) => typeof name === "string" && write(name, value)
64
- }),
65
- refs: {},
66
- elements: new Proxy({}, { get: (_target, name) => {
67
- if (typeof name !== "string" || root.value === null) return void 0;
68
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
69
- } }),
70
- signal(initialValue) {
71
- const value = shallowRef(initialValue);
72
- return {
73
- get: () => value.value,
74
- set: (next) => {
75
- if (!Object.is(value.value, next)) value.value = next;
76
- },
77
- update: (next) => {
78
- const updated = next(value.value);
79
- if (!Object.is(value.value, updated)) value.value = updated;
80
- }
81
- };
82
- },
83
- computed(compute) {
84
- const value = computed(compute);
85
- return { get: () => value.value };
86
- },
87
- effect(run) {
88
- const stop = watchEffect((onCleanup) => {
89
- const cleanup = run();
90
- if (typeof cleanup === "function") onCleanup(cleanup);
91
- }, { flush: "post" });
92
- stops.push(stop);
93
- return stop;
94
- },
95
- on(event, listener) {
96
- const element = root.value;
97
- element?.addEventListener(event, listener);
98
- const off = () => element?.removeEventListener(event, listener);
99
- stops.push(off);
100
- return off;
101
- },
102
- dispatch
103
- };
104
- let cleanup;
105
- onMounted(() => {
106
- Promise.resolve(controllerModule.default(host)).then((result) => {
107
- cleanup = result;
108
- });
109
- });
110
- onBeforeUnmount(() => {
111
- for (const stop of stops.splice(0)) stop();
112
- if (typeof cleanup === "function") cleanup();
43
+ const dispatch = createDispatch(root);
44
+ useComponentHost(controllerModule.default, {
45
+ root,
46
+ dispatch,
47
+ props
113
48
  });
114
49
  return (_ctx, _cache) => {
115
50
  return openBlock(), createElementBlock("button", mergeProps({
@@ -124,6 +59,6 @@ var UiIconButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
124
59
  }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1);
125
60
  };
126
61
  }
127
- }), [["__scopeId", "data-v-80722d12"]]);
62
+ }), [["__scopeId", "data-v-23aa723d"]]);
128
63
  //#endregion
129
64
  export { UiIconButton_default as t };